Re: [PATCH v28 00/33] Introduce QC USB SND audio offloading support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Mon Oct 14, 2024 at 10:08 AM PDT, Wesley Cheng wrote:
> Hi Chris,
>
> On 10/11/2024 4:08 AM, Christopher Snowhill wrote:
> > Comment posted below, after the commit listing.
> >
> > On Thu Oct 10, 2024 at 5:05 PM PDT, Wesley Cheng wrote:
> >> Requesting to see if we can get some Acked-By tags, and merge on usb-next.
> >>
> >> Several Qualcomm based chipsets can support USB audio offloading to a
> >> dedicated audio DSP, which can take over issuing transfers to the USB
> >> host controller.  The intention is to reduce the load on the main
> >> processors in the SoC, and allow them to be placed into lower power modes.
> >> There are several parts to this design:
> >>   1. Adding ASoC binding layer
> >>   2. Create a USB backend for Q6DSP
> >>   3. Introduce XHCI interrupter support
> >>   4. Create vendor ops for the USB SND driver
> >>
> >>       USB                          |            ASoC
> >> --------------------------------------------------------------------
> >>                                    |  _________________________
> >>                                    | |sm8250 platform card     |
> >>                                    | |_________________________|
> >>                                    |         |           |
> >>                                    |      ___V____   ____V____
> >>                                    |     |Q6USB   | |Q6AFE    |  
> >>                                    |     |"codec" | |"cpu"    |
> >>                                    |     |________| |_________|
> >>                                    |         ^  ^        ^
> >>                                    |         |  |________|
> >>                                    |      ___V____    |
> >>                                    |     |SOC-USB |   |
> >>    ________       ________               |        |   |
> >>   |USB SND |<--->|QC offld|<------------>|________|   |
> >>   |(card.c)|     |        |<----------                |
> >>   |________|     |________|___     | |                |
> >>       ^               ^       |    | |    ____________V_________
> >>       |               |       |    | |   |APR/GLINK             |
> >>    __ V_______________V_____  |    | |   |______________________|
> >>   |USB SND (endpoint.c)     | |    | |              ^
> >>   |_________________________| |    | |              |
> >>               ^               |    | |   ___________V___________
> >>               |               |    | |->|audio DSP              |
> >>    ___________V_____________  |    |    |_______________________|
> >>   |XHCI HCD                 |<-    |
> >>   |_________________________|      |
> >>
> >>
> >> Adding ASoC binding layer
> >> =========================
> >> soc-usb: Intention is to treat a USB port similar to a headphone jack.
> >> The port is always present on the device, but cable/pin status can be
> >> enabled/disabled.  Expose mechanisms for USB backend ASoC drivers to
> >> communicate with USB SND.
> >>
> >> Create a USB backend for Q6DSP
> >> ==============================
> >> q6usb: Basic backend driver that will be responsible for maintaining the
> >> resources needed to initiate a playback stream using the Q6DSP.  Will
> >> be the entity that checks to make sure the connected USB audio device
> >> supports the requested PCM format.  If it does not, the PCM open call will
> >> fail, and userspace ALSA can take action accordingly.
> >>
> >> Introduce XHCI interrupter support
> >> ==================================
> >> XHCI HCD supports multiple interrupters, which allows for events to be routed
> >> to different event rings.  This is determined by "Interrupter Target" field
> >> specified in Section "6.4.1.1 Normal TRB" of the XHCI specification.
> >>
> >> Events in the offloading case will be routed to an event ring that is assigned
> >> to the audio DSP.
> >>
> >> Create vendor ops for the USB SND driver
> >> ========================================
> >> qc_audio_offload: This particular driver has several components associated
> >> with it:
> >> - QMI stream request handler
> >> - XHCI interrupter and resource management
> >> - audio DSP memory management
> >>
> >> When the audio DSP wants to enable a playback stream, the request is first
> >> received by the ASoC platform sound card.  Depending on the selected route,
> >> ASoC will bring up the individual DAIs in the path.  The Q6USB backend DAI
> >> will send an AFE port start command (with enabling the USB playback path), and
> >> the audio DSP will handle the request accordingly.
> >>
> >> Part of the AFE USB port start handling will have an exchange of control
> >> messages using the QMI protocol.  The qc_audio_offload driver will populate the
> >> buffer information:
> >> - Event ring base address
> >> - EP transfer ring base address
> >>
> >> and pass it along to the audio DSP.  All endpoint management will now be handed
> >> over to the DSP, and the main processor is not involved in transfers.
> >>
> >> Overall, implementing this feature will still expose separate sound card and PCM
> >> devices for both the platform card and USB audio device:
> >>  0 [SM8250MTPWCD938]: sm8250 - SM8250-MTP-WCD9380-WSA8810-VA-D
> >>                       SM8250-MTP-WCD9380-WSA8810-VA-DMIC
> >>  1 [Audio          ]: USB-Audio - USB Audio
> >>                       Generic USB Audio at usb-xhci-hcd.1.auto-1.4, high speed
> >>
> >> This is to ensure that userspace ALSA entities can decide which route to take
> >> when executing the audio playback.  In the above, if card#1 is selected, then
> >> USB audio data will take the legacy path over the USB PCM drivers, etc...
> >>
> >> The current limitation is that the latest USB audio device that is identified
> >> will be automatically selected by the Q6USB BE DAI for offloading.  Future
> >> patches can be added to possibly add for more flexibility, but until the userpace
> >> applications can be better defined, having these mechanisms will complicate the
> >> overall implementation.
> >>
> >> USB offload Kcontrols
> >> =====================
> >> Part of the vendor offload package will have a mixer driver associated with it
> >> (mixer_usb_offload.c).  This entity will be responsible for coordinating with
> >> SOC USB and the Q6USB backend DAI to fetch information about the sound card
> >> and PCM device indices associated with the offload path.  The logic is done
> >> based on the current implementation of how paths are controlled within the QC
> >> ASoC implementation.
> >>
> >> QC ASoC Q6Routing
> >> -----------------
> >> Within the Q6 ASOC design, the registered ASoC platform card will expose a set
> >> of kcontrols for enabling the BE DAI links to the FE DAI link.  For example:
> >>
> >> tinymix -D 0 contents
> >> Number of controls: 1033
> >> ctl     type    num     name                                    value
> >> ...
> >> 1025    BOOL    1       USB Mixer MultiMedia1                   Off
> >> 1026    BOOL    1       USB Mixer MultiMedia2                   Off
> >> 1027    BOOL    1       USB Mixer MultiMedia3                   Off
> >> 1028    BOOL    1       USB Mixer MultiMedia4                   Off
> >> 1029    BOOL    1       USB Mixer MultiMedia5                   Off
> >> 1030    BOOL    1       USB Mixer MultiMedia6                   Off
> >> 1031    BOOL    1       USB Mixer MultiMedia7                   Off
> >> 1032    BOOL    1       USB Mixer MultiMedia8                   Off
> >>
> >> Each of these kcontrols will enable the USB BE DAI link (q6usb) to be connected
> >> to a FE DAI link (q6asm).  Since each of these controls are DAPM widgets, when
> >> it is enabled, the DAPM widget's "connect" flag is updated accordingly.
> >>
> >> USB Offload Mapping
> >> -------------------
> >> Based on the Q6routing, the USB BE DAI link can determine which sound card and
> >> PCM device is enabled for offloading.  Fetching the ASoC platform sound card's
> >> information is fairly straightforward, and the bulk of the work goes to finding
> >> the corresponding PCM device index.  As mentioned above, the USB BE DAI can
> >> traverse the DAPM widgets to find the DAPM path that is related to the control
> >> for the "USB Mixer."  Based on which "USB Mixer" is enabled, it can find the
> >> corresponding DAPM widget associated w/ the FE DAI link (Multimedia*).  From there
> >> it can find the PCM device created for the Multimedia* stream.
> >>
> >> Only one BE DAI link can be enabled per FE DAI.  For example, if the HDMI path is
> >> enabled for Multimedia1, the USB Mixer will be disabled and switched over.
> >>
> >> Examples of kcontrol
> >> --------------------
> >> tinymix -D 0 contents
> >> Number of controls: 1033
> >> ctl     type    num     name 
> >> ...
> >> 1025    BOOL    1       USB Mixer MultiMedia1                   Off
> >> 1026    BOOL    1       USB Mixer MultiMedia2                   On
> >> 1027    BOOL    1       USB Mixer MultiMedia3                   Off
> >> 1028    BOOL    1       USB Mixer MultiMedia4                   Off
> >> 1029    BOOL    1       USB Mixer MultiMedia5                   Off
> >> 1030    BOOL    1       USB Mixer MultiMedia6                   Off
> >> 1031    BOOL    1       USB Mixer MultiMedia7                   Off
> >> 1032    BOOL    1       USB Mixer MultiMedia8                   Off
> >>
> >> tinymix -D 2 contents
> >> Number of controls: 7
> >> ctl     type    num     name                                    value
> >> 0       INT     2       Playback Channel Map                    0, 0 (range 0->36)
> >> 1       BOOL    2       MDR-1ADAC  Playback Switch              On, On
> >> 2       BOOL    1       MDR-1ADAC  Playback Switch              On
> >> 3       INT     2       MDR-1ADAC  Playback Volume              127, 127 (range 0->127)
> >> 4       INT     1       MDR-1ADAC  Playback Volume              127 (range 0->127)
> >> 5       BOOL    1       Sony Internal Clock Validity            On
> >> 6       INT     2       USB Offload Playback Route PCM#0        0, 1 (range -1->255)
> >>
> >> The example highlights that the userspace/application can utilize the offload path
> >> for the USB device on card#0 PCM device#1.
> >>
> >> When dealing with multiple USB audio devices, only the latest USB device identified
> >> is going to be selected for offload capable.
> >>
> >> tinymix -D 1 contents
> >> Number of controls: 9
> >> ctl     type    num     name                                    value
> >> 0       INT     2       Capture Channel Map                     0, 0 (range 0->36)
> >> 1       INT     2       Playback Channel Map                    0, 0 (range 0->36)
> >> 2       BOOL    1       Headset Capture Switch                  On
> >> 3       INT     1       Headset Capture Volume                  1 (range 0->4)
> >> 4       BOOL    1       Sidetone Playback Switch                On
> >> 5       INT     1       Sidetone Playback Volume                4096 (range 0->8192)
> >> 6       BOOL    1       Headset Playback Switch                 On
> >> 7       INT     2       Headset Playback Volume                 20, 20 (range 0->24)
> >> 8       INT     2       USB Offload Playback Route PCM#0        -1, -1 (range -1->255)
> >>
> >> "-1, -1" shows that this device has no route to the offload path.
> >>
> >> This feature was validated using:
> >> - tinymix: set/enable the multimedia path to route to USB backend
> >> - tinyplay: issue playback on platform card
> >>
> >> Changelog
> >> --------------------------------------------
> >> Changes in v28:
> >> - Fixed some phrases/wording within the SOC USB documentation, and also added an output
> >> with aplay -l for the example output.
> >> - Fixed allocated string buffer for creating the USB SND offload mixer, and added
> >> a PCM index check to ensure that the pcm index is less than the expected number.
> >> - Added a complement enable jack call if USB backend DAI link drivers need access
> >> to it.
> >>
> >> Changes in v27:
> >> - Added some comments and notes about the offload design.  Enforcing the q6routing
> >> to only allow one USB mixer (PCM device) to be enabled at a time.
> >> - Modified SND_JACK_USB notifications for all USB audio offloadable devices plugged
> >> in
> >> - Rebased on latest XHCI secondary interrupter IMOD changes upstream.  Modified the
> >> change in this series to allow for XHCI sideband to set the IMOD for sideband
> >> clients.
> >> - Updated documentation on how USB SND kcontrols are involved in the overall design.
> >> - Remove mutex locking from suspend/resume platform ops, as USB core ensures that the
> >> interface and device are in the RPM_ACTIVE state while disconnect is handled.
> >>
> >> Changes in v26:
> >> - Cleaned up drivers based on errors from checkpatch
> >> - Fixed several typos using codespell
> >> - Removed any vendor specific notation from USB SND offload mixer patch
> >>
> >> Changes in v25:
> >> - Cleanups on typos mentioned within the xHCI layers
> >> - Modified the xHCI interrupter search if clients specify interrupter index
> >> - Moved mixer_usb_offload into its own module, so that other vendor offload USB
> >> modules can utilize it also.
> >> - Added support for USB audio devices that may have multiple PCM streams, as
> >> previous implementation only assumed a single PCM device.  SOC USB will be
> >> able to handle an array of PCM indexes supported by the USB audio device.
> >> - Added some additional checks in the QC USB offload driver to check that device
> >> has at least one playback stream before allowing to bind
> >> - Reordered DT bindings to fix the error found by Rob's bot.  The patch that
> >> added USB_RX was after the example was updated.
> >> - Updated comments within SOC USB to clarify terminology and to keep it consistent
> >> - Added SND_USB_JACK type for notifying of USB device audio connections
> >>
> >> Changes in v24:
> >> - Simplified the kcontrols involved in determining how to utilize the offload
> >> path.
> >>     - There is one kcontrol registered to each USB audio device that will
> >>       output which card/pcm device it is mapped to for the offload route.
> >>     - Removed kcontrols to track offload status and device selection.
> >>     - Default to last USB audio device plugged in as offload capable.
> >>     - kcontrol will reside on USB SND device.
> >> - Reworked the tracking of connected USB devices from the Q6USB BE DAI link.
> >> Previously, it was convoluted by doing it over an array, but moved to using
> >> a list made it much simpler.  Logic is still unchanged in that the last USB
> >> headset plugged in will be selected for offloading.
> >> - Updated the USB SOC RST documentation accordingly with new kcontrol updates.
> >> - Added logic to fetch mapped ASoC card and pcm device index that the offload
> >> path is mapped to for the USB SND kcontrol (for offload route).
> >> - Re-ordered series to hopefully make reviews more readable by combining
> >> patches based on the layer modified (ie QC ASoC, ASoC, USB sound, and USB XHCI).
> >>
> >> Changes in v23:
> >> - Added MODULE_DESCRIPTION() fields to drivers that needed it.
> >>
> >> Changes in v22:
> >> - Removed components tag for the ASoC platform card, as the USB SND kcontrol for
> >> notifying userspace of offload capable card achieves similar results.
> >> - Due to the above, had to remove the review-by tag for the RST documentation,
> >> as changes were made to remove the components tag section.
> >> - Took in feedback to make the SOC USB add/remove ports void.
> >> - Fixed an issue w/ the USB SND kcontrol management for devices that have multi
> >> UAC interfaces. (would attempt to create the kcontrol more than once)
> >> - Modified SOC USB card and PCM index select to be based off the num_supported
> >> streams that is specified by the USB BE DAI.
> >> - Modified comments on selecting the latest USB headset for offloading.
> >>
> >> Changes in v21:
> >> - Added an offload jack disable path from the ASoC platform driver and SOC USB.
> >> - Refactored some of the existing SOC USB context look up APIs and created some
> >> new helpers to search for the USB context.
> >> - Renamed snd_soc_usb_find_format to snd_soc_usb_find_supported_format
> >> - Removed some XHCI sideband calls that would allow clients to actually enable
> >> the IRQ line associated w/ the secondary interrupter.  This is removed because
> >> there are other dependencies that are required for that to happen, which are not
> >> covered as part of this series, and to avoid confusion.
> >> - Due to the above, removed the need to export IMOD setting, and enable/disable
> >> interrupter APIs.
> >>
> >> Changes in v20:
> >> - Fixed up some formatting changes pointed out in the usb.rst
> >> - Added SB null check during XHCI sideband unregister in case caller passes
> >> improper argument (xhci_sideband_unregister())
> >>
> >> Changes in v19:
> >> - Rebased to usb-next to account for some new changes in dependent drivers.
> >>
> >> Changes in v18:
> >> - Rebased to usb-next, which merged in part of the series.  Removed these patches.
> >> - Reworked Kconfigs for the ASoC USB related components from QCOM Q6DSP drivers
> >>   to keep dependencies in place for SoC USB and USB SND.
> >> - Removed the repurposing of the stop ep sync API into existing XHCI operations.
> >>   This will be solely used by the XHCI sideband for now.
> >>
> >> Changes in v17:
> >> - Fixed an issue where one patch was squashed into another.
> >> - Re-added some kconfig checks for helpers exposed in USB SND for the soc usb
> >>   driver, after running different kconfigs.
> >>
> >> Changes in v16:
> >> - Modified some code layer dependencies so that soc usb can be split as a separate
> >>   module.
> >>   - Split the kcontrols from ASoC QCOM common layer into a separate driver
> >> - Reworked SOC USB kcontrols for controlling card + pcm offload routing and status
> >>   so that there are individual controls for card and pcm devices.
> >> - Added a kcontrol remove API in SOC USB to remove the controls on the fly.  This
> >>   required to add some kcontrol management to SOC USB.
> >> - Removed the disconnect work and workqueue for the QC USB offload as it is not
> >>   required, since QMI interface driver ensures events are handled in its own WQ.
> >>
> >> Changes in v15:
> >> - Removed some already merged XHCI changes
> >> - Separated SOC USB driver from being always compiled into SOC core.  Now
> >>   configurable from kconfig.
> >> - Fixed up ASoC kcontrol naming to fit guidelines.
> >> - Removed some unnecessary dummy ifdefs.
> >> - Moved usb snd offload capable kcontrol to be initialized by the platform offloading
> >>   driver.
> >>
> >> Changes in v14:
> >> - Cleaned up some USB SND related feedback:
> >>   - Renamed SNDUSB OFFLD playback available --> USB offload capable card
> >>   - Fixed locking while checking if stream is in use
> >>   - Replaced some mutex pairs with guard(mutex)
> >>
> >> Changes in v13:
> >> - Pulled in secondary/primary interrupter rework from Mathias from:
> >>   https://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git/log/drivers/usb/host?h=fix_eventhandling
> >>   - Did some cleanup and commit message updates, and tested on current code base.
> >> - Added mutex locking to xhci sideband to help prevent any race conditions, esp. for when accessing shared
> >>   references.
> >> - Addressed concerns from Hillf about gfp_flags and locking used in qc_usb_audio_offload.
> >> - Rebased onto usb-next
> >>
> >> Changes in v12:
> >> - Updated copyright year to 2024.  Happy new years!
> >> - Fixed newline format on mixer offload driver.
> >>
> >> Changes in v11:
> >> - Modified QMI format structures to be const
> >>
> >> Changes in v10:
> >> - Added new mixer for exposing kcontrol for sound card created by USB SND.  This
> >> allows for applications to know which platform sound card has offload support.
> >> Will return the card number.
> >> - Broke down and cleaned up some functions/APIs within qc_audio_offload driver.
> >> - Exported xhci_initialize_ring_info(), and modified XHCI makefile to allow for
> >> the XHCI sideband to exist as a module.
> >> - Reworked the jack registration and moved it to the QCOM platform card driver,
> >> ie sm8250.
> >> - Added an SOC USB API to fetch a standard component tag that can be appended to
> >> the platform sound card.  Added this tag to sm8250 if any USB path exists within
> >> the DT node.
> >> - Moved kcontrols that existed in the Q6USB driver, and made it a bit more generic,
> >> so that naming can be standardized across solutions.  SOC USB is now responsible
> >> for creation of these kcontrols.
> >> - Added a SOC USB RST document explaining some code flows and implementation details
> >> so that other vendors can utilize the framework.
> >> - Addressed a case where USB device connection events are lost if usb offload driver
> >> (qc_audio_offload) is not probed when everything else has been initialized, ie 
> >> USB SND, SOC USB and ASoC sound card.  Add a rediscover device call during module
> >> init, to ensure that connection events will be propagated.
> >> - Rebased to usb-next.
> >>
> >> Changes in v9:
> >> - Fixed the dt binding check issue with regards to num-hc-interrupters.
> >>
> >> Changes in v8:
> >> - Cleaned up snd_soc_usb_find_priv_data() based on Mark's feedback.  Removed some of
> >> the duplicate looping code that was present on previous patches.  Also renamed the API.
> >> - Integrated Mathias' suggestions on his new sideband changes:
> >> https://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git/log/?h=feature_interrupters
> >> - Addressed some of Mathias' fixme tags, such as:
> >>  - Resetting transfer ring dequeue/enqueue pointers
> >>  - Issuing stop endpoint command during ep removal
> >>  - Reset ERDP properly to first segment ring during interrupter removal. (this is currently
> >>    just being cleared to 0, but should be pointing to a valid segment if controller is still
> >>    running.
> >>
> >> Changes in v7:
> >> - Fixed dt check error for q6usb bindings
> >> - Updated q6usb property from qcom,usb-audio-intr-num --> qcom,usb-audio-intr-idx
> >> - Removed separate DWC3 HC interrupters num property, and place limits to XHCI one.
> >> - Modified xhci_ring_to_sgtable() to use assigned IOVA/DMA address to fetch pages, as
> >> it is not ensured event ring allocated is always done in the vmalloc range.
> >>
> >> Changes in v6:
> >> - Fixed limits and description on several DT bindings (XHCI and Q6USB)
> >> - Fixed patch subjects to follow other ALSA/ASoC notations.
> >>
> >> USB SND
> >> - Addressed devices which expose multiple audio (UAC) interfaces.  These devices will
> >> create a single USB sound card with multiple audio streams, and receive multiple
> >> interface probe routines.  QC offload was not properly considering cases with multiple
> >> probe calls.
> >> - Renamed offload module name and kconfig to fit within the SND domain.
> >> - Renamed attach/detach endpoint API to keep the hw_params notation.
> >>
> >> Changes in v5:
> >> - Removed some unnecessary files that were included
> >> - Fixed some typos mentioned
> >> - Addressed dt-binding issues and added hc-interrupters definition to usb-xhci.yaml
> >>
> >> XHCI:
> >> - Moved secondary skip events API to xhci-ring and updated implementation
> >>    - Utilized existing XHCI APIs, such as inc_deq and xhci_update_erst_dequeue()
> >>
> >> USB SND
> >> - Renamed and reworked the APIs in "sound: usb: Export USB SND APIs for modules" patch to
> >> include suggestions to utilize snd_usb_hw_params/free and to avoid generic naming.
> >> - Added a resume_cb() op for completion sake.
> >> - Addressed some locking concerns with regards to when registering for platform hooks.
> >> - Added routine to disconnect all offloaded devices during module unbind.
> >>
> >> ASoC
> >> - Replaced individual PCM parameter arguments in snd_soc_usb_connect() with new
> >> snd_soc_usb_device structure to pass along PCM info.
> >> - Modified snd_jack set report to notify HEADPHONE event, as we do not support record path.
> >>
> >> Changes in v4:
> >> - Rebased to xhci/for-usb-next
> >> - Addressed some dt-bindings comments
> >>
> >> XHCI:
> >> - Pulled in latest changes from Mathias' feature_interrupters branch:
> >> https://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git/log/?h=feature_interrupters
> >>
> >> - Fixed commit text and signage for the XHCI sideband/interrupter related changes
> >> - Added some logic to address the FIXME tags mentioned throughout the commits, such
> >> as handling multi segment rings and building the SGT, locking concerns, and ep
> >> cleanup operations.
> >> - Removed some fixme tags for conditions that may not be needed/addressed.
> >> - Repurposed the new endpoint stop sync API to be utilized in other places.
> >> - Fixed potential compile issue if XHCI sideband config is not defined.
> >>
> >> ASoC:
> >> - Added sound jack control into the Q6USB driver.  Allows for userspsace to know when
> >> an offload capable device is connected.
> >>
> >> USB SND:
> >> - Avoided exporting _snd_pcm_hw_param_set based on Takashi's recommendation.
> >> - Split USB QMI packet header definitions into a separate commit.  This is used to
> >> properly allow the QMI interface driver to parse and route QMI packets accordingly
> >> - Added a "depends on" entry when enabling QC audio offload to avoid compile time
> >> issues.
> >>
> >> Changes in v3:
> >> - Changed prefix from RFC to PATCH
> >> - Rebased entire series to usb-next
> >> - Updated copyright years
> >>
> >> XHCI:
> >> - Rebased changes on top of XHCI changes merged into usb-next, and only added
> >> changes that were still under discussion.
> >> - Added change to read in the "num-hc-interrupters" device property.
> >>
> >> ASoC:
> >> - qusb6 USB backend
> >>   - Incorporated suggestions to fetch iommu information with existing APIs
> >>   - Added two new sound kcontrols to fetch offload status and offload device
> >>     selection.
> >>     - offload status - will return the card and pcm device in use
> >>         tinymix -D 0 get 1 --> 1, 0 (offload in progress on card#1 pcm#0)
> >>
> >>     - device selection - set the card and pcm device to enable offload on. Ex.:
> >>         tinymix -D 0 set 1 2 0  --> sets offload on card#2 pcm#0
> >>                                     (this should be the USB card)
> >>
> >> USB SND:
> >> - Fixed up some locking related concerns for registering platform ops.
> >>    - Moved callbacks under the register_mutex, so that 
> >> - Modified APIs to properly pass more information about the USB SND device, so
> >> that the Q6USB backend can build a device list/map, in order to monitor offload
> >> status and device selection.
> >>
> >> Changes in v2:
> >>
> >> XHCI:
> >> - Replaced XHCI and HCD changes with Mathias' XHCI interrupter changes
> >> in his tree:
> >> https://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git/log/?h=feature_interrupters
> >>
> >> Adjustments made to Mathias' changes:
> >>   - Created xhci-intr.h to export/expose interrupter APIs versus exposing xhci.h.
> >>     Moved dependent structures to this file as well. (so clients can parse out
> >>     information from "struct xhci_interrupter")
> >>   - Added some basic locking when requesting interrupters.
> >>   - Fixed up some sanity checks.
> >>   - Removed clearing of the ERSTBA during freeing of the interrupter. (pending
> >>     issue where SMMU fault occurs if DMA addr returned is 64b - TODO)
> >>
> >> - Clean up pending events in the XHCI secondary interrupter.  While testing USB
> >> bus suspend, it was seen that on bus resume, the xHCI HC would run into a command
> >> timeout.
> >> - Added offloading APIs to xHCI to fetch transfer and event ring information.
> >>
> >> ASoC:
> >> - Modified soc-usb to allow for multiple USB port additions.  For this to work,
> >> the USB offload driver has to have a reference to the USB backend by adding
> >> a "usb-soc-be" DT entry to the device saved into XHCI sysdev.
> >> - Created separate dt-bindings for defining USB_RX port.
> >> - Increased APR timeout to accommodate the situation where the AFE port start
> >> command could be delayed due to having to issue a USB bus resume while
> >> handling the QMI stream start command.
> >>
> >> Mathias Nyman (3):
> >>   xhci: support setting interrupt moderation IMOD for secondary
> >>     interrupters
> >>   xhci: add helper to stop endpoint and wait for completion
> >>   xhci: sideband: add initial api to register a sideband entity
> >>
> >> Wesley Cheng (30):
> >>   usb: host: xhci: Repurpose event handler for skipping interrupter
> >>     events
> >>   usb: xhci: xhci-sideband: Set IMOD for xHCI sideband clients
> >>   usb: host: xhci-mem: Cleanup pending secondary event ring events
> >>   usb: host: xhci-mem: Allow for interrupter clients to choose specific
> >>     index
> >>   usb: host: xhci-plat: Set XHCI max interrupters if property is present
> >>   usb: dwc3: Specify maximum number of XHCI interrupters
> >>   ALSA: Add USB audio device jack type
> >>   ALSA: usb-audio: Export USB SND APIs for modules
> >>   ALSA: usb-audio: Check for support for requested audio format
> >>   ALSA: usb-audio: Save UAC sample size information
> >>   ALSA: usb-audio: Prevent starting of audio stream if in use
> >>   ASoC: Add SOC USB APIs for adding an USB backend
> >>   ASoC: usb: Add PCM format check API for USB backend
> >>   ASoC: usb: Create SOC USB SND jack kcontrol
> >>   ASoC: usb: Fetch ASoC card and pcm device information
> >>   ASoC: doc: Add documentation for SOC USB
> >>   ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port
> >>   ASoC: dt-bindings: Update example for enabling USB offload on SM8250
> >>   ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp
> >>   ASoC: qcom: qdsp6: q6afe: Increase APR timeout
> >>   ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6
> >>   ASoC: qcom: qdsp6: Add headphone jack for offload connection status
> >>   ASoC: qcom: qdsp6: Fetch USB offload mapped card and PCM device
> >>   ALSA: usb-audio: Introduce USB SND platform op callbacks
> >>   ALSA: usb-audio: qcom: Add USB QMI definitions
> >>   ALSA: usb-audio: qcom: Introduce QC USB SND offloading support
> >>   ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is
> >>     in use
> >>   ALSA: usb-audio: Add USB offload route kcontrol
> >>   ALSA: usb-audio: Allow for rediscovery of connected USB SND devices
> >>   ASoC: usb: Rediscover USB SND devices on USB port add
> > Maybe increment your patch version before reposting next time? At least
> > you gave an interesting test case for Aerc's threading. It managed to
> > confuse your 01-32 series with the 00-33 series, and interleaved the
> > whole lot under the one cover letter. I wonder what lore thinks of it,
> > heh.
> >
> Ah...I lost track of my revisions on my end, sorry for the mix up.  In these cases, should I resubmit this series as v29?  Thanks for the advice in advanced.

Since I cannot tell which set of v28 is the correct set, perhaps it is
best for the list that you repost the latest revision as v29. Sorry
about that.

-Christopher

>
> Thanks
>
> Wesley Cheng
>
> >>  .../bindings/sound/qcom,sm8250.yaml           |   15 +
> >>  Documentation/sound/soc/index.rst             |    1 +
> >>  Documentation/sound/soc/usb.rst               |  491 ++++
> >>  drivers/usb/dwc3/core.c                       |   12 +
> >>  drivers/usb/dwc3/core.h                       |    2 +
> >>  drivers/usb/dwc3/host.c                       |    3 +
> >>  drivers/usb/host/Kconfig                      |    9 +
> >>  drivers/usb/host/Makefile                     |    2 +
> >>  drivers/usb/host/xhci-mem.c                   |   37 +-
> >>  drivers/usb/host/xhci-plat.c                  |    2 +
> >>  drivers/usb/host/xhci-ring.c                  |   54 +-
> >>  drivers/usb/host/xhci-sideband.c              |  425 ++++
> >>  drivers/usb/host/xhci.c                       |   51 +-
> >>  drivers/usb/host/xhci.h                       |   19 +-
> >>  .../sound/qcom,q6dsp-lpass-ports.h            |    1 +
> >>  include/linux/mod_devicetable.h               |    2 +-
> >>  include/linux/usb/xhci-sideband.h             |   70 +
> >>  include/sound/jack.h                          |    4 +-
> >>  include/sound/q6usboffload.h                  |   20 +
> >>  include/sound/soc-usb.h                       |  147 ++
> >>  include/uapi/linux/input-event-codes.h        |    3 +-
> >>  sound/core/jack.c                             |    6 +-
> >>  sound/soc/Kconfig                             |   10 +
> >>  sound/soc/Makefile                            |    2 +
> >>  sound/soc/qcom/Kconfig                        |   15 +
> >>  sound/soc/qcom/Makefile                       |    2 +
> >>  sound/soc/qcom/qdsp6/Makefile                 |    1 +
> >>  sound/soc/qcom/qdsp6/q6afe-dai.c              |   60 +
> >>  sound/soc/qcom/qdsp6/q6afe.c                  |  194 +-
> >>  sound/soc/qcom/qdsp6/q6afe.h                  |   36 +-
> >>  sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c      |   23 +
> >>  sound/soc/qcom/qdsp6/q6dsp-lpass-ports.h      |    1 +
> >>  sound/soc/qcom/qdsp6/q6routing.c              |   32 +-
> >>  sound/soc/qcom/qdsp6/q6usb.c                  |  391 ++++
> >>  sound/soc/qcom/sm8250.c                       |   24 +-
> >>  sound/soc/qcom/usb_offload_utils.c            |   56 +
> >>  sound/soc/qcom/usb_offload_utils.h            |   30 +
> >>  sound/soc/soc-usb.c                           |  369 +++
> >>  sound/usb/Kconfig                             |   25 +
> >>  sound/usb/Makefile                            |    4 +-
> >>  sound/usb/card.c                              |  106 +
> >>  sound/usb/card.h                              |   17 +
> >>  sound/usb/endpoint.c                          |    1 +
> >>  sound/usb/format.c                            |    1 +
> >>  sound/usb/helper.c                            |    1 +
> >>  sound/usb/mixer_usb_offload.c                 |  102 +
> >>  sound/usb/mixer_usb_offload.h                 |   17 +
> >>  sound/usb/pcm.c                               |  104 +-
> >>  sound/usb/pcm.h                               |   11 +
> >>  sound/usb/qcom/Makefile                       |    2 +
> >>  sound/usb/qcom/qc_audio_offload.c             | 1974 +++++++++++++++++
> >>  sound/usb/qcom/usb_audio_qmi_v01.c            |  863 +++++++
> >>  sound/usb/qcom/usb_audio_qmi_v01.h            |  164 ++
> >>  53 files changed, 5957 insertions(+), 57 deletions(-)
> >>  create mode 100644 Documentation/sound/soc/usb.rst
> >>  create mode 100644 drivers/usb/host/xhci-sideband.c
> >>  create mode 100644 include/linux/usb/xhci-sideband.h
> >>  create mode 100644 include/sound/q6usboffload.h
> >>  create mode 100644 include/sound/soc-usb.h
> >>  create mode 100644 sound/soc/qcom/qdsp6/q6usb.c
> >>  create mode 100644 sound/soc/qcom/usb_offload_utils.c
> >>  create mode 100644 sound/soc/qcom/usb_offload_utils.h
> >>  create mode 100644 sound/soc/soc-usb.c
> >>  create mode 100644 sound/usb/mixer_usb_offload.c
> >>  create mode 100644 sound/usb/mixer_usb_offload.h
> >>  create mode 100644 sound/usb/qcom/Makefile
> >>  create mode 100644 sound/usb/qcom/qc_audio_offload.c
> >>  create mode 100644 sound/usb/qcom/usb_audio_qmi_v01.c
> >>  create mode 100644 sound/usb/qcom/usb_audio_qmi_v01.h






[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux