From: Wesley Cheng <quic_wcheng@quicinc.com>
To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
<srinivas.kandagatla@linaro.org>, <mathias.nyman@intel.com>,
<perex@perex.cz>, <conor+dt@kernel.org>, <corbet@lwn.net>,
<broonie@kernel.org>, <lgirdwood@gmail.com>, <krzk+dt@kernel.org>,
<Thinh.Nguyen@synopsys.com>, <bgoswami@quicinc.com>,
<tiwai@suse.com>, <gregkh@linuxfoundation.org>, <robh@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-sound@vger.kernel.org>, <linux-usb@vger.kernel.org>,
<linux-arm-msm@vger.kernel.org>, <linux-doc@vger.kernel.org>,
<alsa-devel@alsa-project.org>
Subject: Re: [PATCH v24 09/34] ASoC: Add SOC USB APIs for adding an USB backend
Date: Thu, 1 Aug 2024 14:43:00 -0700 [thread overview]
Message-ID: <f761530c-a49b-4dd5-b01c-97d08931e0ab@quicinc.com> (raw)
In-Reply-To: <09fde4e6-c3be-484d-a7a5-bd653dc42094@linux.intel.com>
Hi Pierre,
On 8/1/2024 1:02 AM, Pierre-Louis Bossart wrote:
>
>
>> +/**
>> + * struct snd_soc_usb_device
>> + * @card_idx - sound card index associated with USB device
>> + * @pcm_idx - PCM device index associated with USB device
>> + * @chip_idx - USB sound chip array index
>> + * @num_playback - number of playback streams
>> + * @num_capture - number of capture streams
> so here we have a clear separation between playback and capture...
Thanks for the quick review of the series, I know that its a lot of work, so its much appreciated.
I guess in the past revisions there was some discussions that highlighted on the fact that, currently, in our QC USB offload implementation we're supporting playback only, and maybe it should be considered to also expand on the capture path. I went ahead and added some sprinkles of that throughout the SOC USB layer, since its vendor agnostic, and some vendors may potentially have that type of support. Is it safe to assume that this is the right thinking? If so, I will go and review some of the spots that may need to consider both playback and capture paths ONLY for soc-usb. (as you highlighted one below) Else, I can note an assumption somewhere that soc-usb supports playback only and add the capture path when implemented.
>> + * @list - list head for SoC USB devices
>> + **/
>> +struct snd_soc_usb_device {
>> + int card_idx;
>> + int pcm_idx;
>> + int chip_idx;
>> + int num_playback;
>> + int num_capture;
>> + struct list_head list;
>> +};
>> +
>> +/**
>> + * struct snd_soc_usb
>> + * @list - list head for SND SOC struct list
>> + * @component - reference to ASoC component
>> + * @num_supported_streams - number of supported concurrent sessions
> ... but here we don't. And it's not clear what the working 'sessions'
> means in the comment.
>
>> + * @connection_status_cb - callback to notify connection events
>> + * @priv_data - driver data
>> + **/
>> +struct snd_soc_usb {
>> + struct list_head list;
>> + struct snd_soc_component *component;
>> + unsigned int num_supported_streams;
>> + int (*connection_status_cb)(struct snd_soc_usb *usb,
>> + struct snd_soc_usb_device *sdev, bool connected);
>> + void *priv_data;
>> +};
>> +/**
>> + * snd_soc_usb_allocate_port() - allocate a SOC USB device
> USB port?
Noted, refer to the last comment.
>> + * @component: USB DPCM backend DAI component
>> + * @num_streams: number of offloading sessions supported
> same comment, is this direction-specific or not?
Depending on what you think about my first comment above, I'll also fix or remove the concept of direction entirely.
>> + * @data: private data
>> + *
>> + * Allocate and initialize a SOC USB device. This will populate parameters that
>> + * are used in subsequent sequences.
>> + *
>> + */
>> +struct snd_soc_usb *snd_soc_usb_allocate_port(struct snd_soc_component *component,
>> + int num_streams, void *data)
>> +{
>> + struct snd_soc_usb *usb;
>> +
>> + usb = kzalloc(sizeof(*usb), GFP_KERNEL);
>> + if (!usb)
>> + return ERR_PTR(-ENOMEM);
>> +
>> + usb->component = component;
>> + usb->priv_data = data;
>> + usb->num_supported_streams = num_streams;
>> +
>> + return usb;
>> +}
>> +EXPORT_SYMBOL_GPL(snd_soc_usb_allocate_port);
>> +
>> +/**
>> + * snd_soc_usb_free_port() - free a SOC USB device
>> + * @usb: allocated SOC USB device
>> +
>> + * Free and remove the SOC USB device from the available list of devices.
> Now I am lost again on the device:port relationship. I am sure you've
> explained this before but I forget things and the code isn't
> self-explanatory.
>
Ok, I think the problem is that I'm interchanging the port and device terminology, because from the USB perspective its one device connected to a USB port, so its a one-to-one relation. Removing that mindset, I think the proper term here would still be "port," because in the end SOC USB is always only servicing a port. If this is the case, do you have any objections using this terminology in the Q6AFE as well as ASoC? I will use consistent wording throughout SOC USB if so.
Thanks
Wesley Cheng
>> + *
>> + */
>> +void snd_soc_usb_free_port(struct snd_soc_usb *usb)
>> +{
>> + snd_soc_usb_remove_port(usb);
>> + kfree(usb);
>> +}
>> +EXPORT_SYMBOL_GPL(snd_soc_usb_free_port);
>> +
>> +/**
>> + * snd_soc_usb_add_port() - Add a USB backend port
>> + * @usb: soc usb device to add
>> + *
>> + * Register a USB backend device to the SND USB SOC framework. Memory is
>> + * allocated as part of the USB backend device.
>> + *
>> + */
>> +void snd_soc_usb_add_port(struct snd_soc_usb *usb)
>> +{
>> + mutex_lock(&ctx_mutex);
>> + list_add_tail(&usb->list, &usb_ctx_list);
>> + mutex_unlock(&ctx_mutex);
>> +}
>> +EXPORT_SYMBOL_GPL(snd_soc_usb_add_port);
>> +
>> +/**
>> + * snd_soc_usb_remove_port() - Remove a USB backend port
>> + * @usb: soc usb device to remove
>> + *
>> + * Remove a USB backend device from USB SND SOC. Memory is freed when USB
>> + * backend is removed.
>> + *
>> + */
>> +void snd_soc_usb_remove_port(struct snd_soc_usb *usb)
>> +{
>> + struct snd_soc_usb *ctx, *tmp;
>> +
>> + mutex_lock(&ctx_mutex);
>> + list_for_each_entry_safe(ctx, tmp, &usb_ctx_list, list) {
>> + if (ctx == usb) {
>> + list_del(&ctx->list);
>> + break;
>> + }
>> + }
>> + mutex_unlock(&ctx_mutex);
>> +}
>> +EXPORT_SYMBOL_GPL(snd_soc_usb_remove_port);
next prev parent reply other threads:[~2024-08-01 21:44 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-01 1:16 [PATCH v24 00/34] Introduce QC USB SND audio offloading support Wesley Cheng
2024-08-01 1:16 ` [PATCH v24 01/34] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-08-01 1:16 ` [PATCH v24 02/34] usb: host: xhci: Repurpose event handler for skipping interrupter events Wesley Cheng
2024-08-01 1:16 ` [PATCH v24 03/34] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-08-06 14:49 ` Amadeusz Sławiński
2024-08-20 18:03 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 04/34] usb: xhci: Allow for secondary interrupter to set IMOD Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 05/34] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-08-06 14:50 ` Amadeusz Sławiński
2024-08-20 18:18 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 06/34] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2024-08-06 14:50 ` Amadeusz Sławiński
2024-08-01 1:17 ` [PATCH v24 07/34] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 08/34] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 09/34] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-08-01 8:02 ` Pierre-Louis Bossart
2024-08-01 21:43 ` Wesley Cheng [this message]
2024-08-02 6:26 ` Pierre-Louis Bossart
2024-08-06 19:52 ` Wesley Cheng
2024-08-16 21:48 ` Wesley Cheng
2024-08-19 6:26 ` Pierre-Louis Bossart
2024-08-13 22:57 ` Wesley Cheng
2024-08-14 9:20 ` Pierre-Louis Bossart
2024-08-01 1:17 ` [PATCH v24 10/34] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-08-01 8:07 ` Pierre-Louis Bossart
2024-08-01 22:43 ` Wesley Cheng
2024-08-06 14:51 ` Amadeusz Sławiński
2024-08-08 1:24 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 11/34] ASoC: usb: Fetch ASoC card and pcm device information Wesley Cheng
2024-08-01 8:11 ` Pierre-Louis Bossart
2024-08-01 22:46 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 12/34] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-08-01 8:26 ` Pierre-Louis Bossart
2024-08-01 23:50 ` Wesley Cheng
2024-08-06 14:51 ` Amadeusz Sławiński
2024-08-08 1:23 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 13/34] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-08-01 2:22 ` Rob Herring (Arm)
2024-08-01 1:17 ` [PATCH v24 14/34] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 15/34] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-08-01 8:30 ` Pierre-Louis Bossart
2024-08-01 1:17 ` [PATCH v24 16/34] ASoC: qcom: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-08-01 8:33 ` Pierre-Louis Bossart
2024-08-01 23:04 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 17/34] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-08-01 8:40 ` Pierre-Louis Bossart
2024-08-01 23:10 ` Wesley Cheng
2024-08-02 6:32 ` Pierre-Louis Bossart
2024-08-07 20:05 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 18/34] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 19/34] ASoC: qcom: qdsp6: Fetch USB offload mapped card and PCM device Wesley Cheng
2024-08-01 8:46 ` Pierre-Louis Bossart
2024-08-01 1:17 ` [PATCH v24 20/34] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-08-01 8:49 ` Pierre-Louis Bossart
2024-08-01 1:17 ` [PATCH v24 21/34] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 22/34] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 23/34] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-08-06 14:51 ` Amadeusz Sławiński
2024-08-08 1:19 ` Wesley Cheng
2024-08-08 12:11 ` Amadeusz Sławiński
2024-08-08 12:36 ` Pierre-Louis Bossart
2024-08-08 14:54 ` Amadeusz Sławiński
2024-08-08 19:47 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 24/34] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 25/34] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 26/34] ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is in use Wesley Cheng
2024-08-01 8:57 ` Pierre-Louis Bossart
2024-08-08 1:03 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 27/34] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 28/34] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 29/34] ALSA: usb-audio: qcom: Add USB offload route kcontrol Wesley Cheng
2024-08-01 9:02 ` Pierre-Louis Bossart
2024-08-08 1:10 ` Wesley Cheng
2024-08-20 2:33 ` Wesley Cheng
2024-08-20 6:39 ` Pierre-Louis Bossart
2024-08-20 17:37 ` Wesley Cheng
2024-08-20 23:38 ` Wesley Cheng
2024-08-21 7:02 ` Pierre-Louis Bossart
2024-08-21 19:21 ` Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 30/34] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 31/34] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 32/34] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 33/34] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2024-08-01 1:17 ` [PATCH v24 34/34] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2024-08-01 9:04 ` Pierre-Louis Bossart
2024-08-01 8:36 ` [PATCH v24 00/34] Introduce QC USB SND audio offloading support Krzysztof Kozlowski
2024-08-01 9:10 ` Pierre-Louis Bossart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f761530c-a49b-4dd5-b01c-97d08931e0ab@quicinc.com \
--to=quic_wcheng@quicinc.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=alsa-devel@alsa-project.org \
--cc=bgoswami@quicinc.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=krzk+dt@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=perex@perex.cz \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=robh@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).