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>,
<dmitry.torokhov@gmail.com>, <corbet@lwn.net>,
<broonie@kernel.org>, <lgirdwood@gmail.com>, <tiwai@suse.com>,
<krzk+dt@kernel.org>, <Thinh.Nguyen@synopsys.com>,
<bgoswami@quicinc.com>, <robh@kernel.org>,
<gregkh@linuxfoundation.org>
Cc: <linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-sound@vger.kernel.org>, <linux-input@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 v26 24/33] ALSA: usb-audio: Introduce USB SND platform op callbacks
Date: Tue, 3 Sep 2024 16:20:03 -0700 [thread overview]
Message-ID: <c9908207-d208-405d-a58d-ab2872adb4f1@quicinc.com> (raw)
In-Reply-To: <63b679c8-48f1-4251-8b7e-d38b605e5089@linux.intel.com>
Hi Pierre,
On 8/30/2024 2:38 AM, Pierre-Louis Bossart wrote:
>
> On 8/29/24 21:40, Wesley Cheng wrote:
>> Allow for different platforms to be notified on USB SND connect/disconnect
>> sequences. This allows for platform USB SND modules to properly initialize
>> and populate internal structures with references to the USB SND chip
>> device.
>>
>> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
>> ---
>> sound/usb/card.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
>> sound/usb/card.h | 10 +++++++++
>> 2 files changed, 63 insertions(+)
>>
>> diff --git a/sound/usb/card.c b/sound/usb/card.c
>> index 1f9dfcd8f336..7f120aa006c0 100644
>> --- a/sound/usb/card.c
>> +++ b/sound/usb/card.c
>> @@ -118,6 +118,42 @@ MODULE_PARM_DESC(skip_validation, "Skip unit descriptor validation (default: no)
>> static DEFINE_MUTEX(register_mutex);
>> static struct snd_usb_audio *usb_chip[SNDRV_CARDS];
>> static struct usb_driver usb_audio_driver;
>> +static struct snd_usb_platform_ops *platform_ops;
>> +
>> +/*
>> + * Register platform specific operations that will be notified on events
>> + * which occur in USB SND. The platform driver can utilize this path to
>> + * enable features, such as USB audio offloading, which allows for audio data
>> + * to be queued by an audio DSP.
>> + *
>> + * Only one set of platform operations can be registered to USB SND. The
>> + * platform register operation is protected by the register_mutex.
>> + */
>> +int snd_usb_register_platform_ops(struct snd_usb_platform_ops *ops)
>> +{
>> + guard(mutex)(®ister_mutex);
>> + if (platform_ops)
>> + return -EEXIST;
>> +
>> + platform_ops = ops;
>> + return 0;
>> +}
>> +EXPORT_SYMBOL_GPL(snd_usb_register_platform_ops);
>> +
>> +/*
>> + * Unregisters the current set of platform operations. This allows for
> Unregister?
Will fix.
>> + * a new set to be registered if required.
>> + *
>> + * The platform unregister operation is protected by the register_mutex.
>> + */
>> +int snd_usb_unregister_platform_ops(void)
>> +{
>> + guard(mutex)(®ister_mutex);
>> + platform_ops = NULL;
>> +
>> + return 0;
>> +}
>> +EXPORT_SYMBOL_GPL(snd_usb_unregister_platform_ops);
>>
>> /*
>> * Checks to see if requested audio profile, i.e sample rate, # of
>> @@ -946,7 +982,11 @@ static int usb_audio_probe(struct usb_interface *intf,
>> chip->num_interfaces++;
>> usb_set_intfdata(intf, chip);
>> atomic_dec(&chip->active);
>> +
>> + if (platform_ops && platform_ops->connect_cb)
>> + platform_ops->connect_cb(chip);
>> mutex_unlock(®ister_mutex);
>> +
>> return 0;
>>
>> __error:
>> @@ -983,6 +1023,9 @@ static void usb_audio_disconnect(struct usb_interface *intf)
>> card = chip->card;
>>
>> mutex_lock(®ister_mutex);
>> + if (platform_ops && platform_ops->disconnect_cb)
>> + platform_ops->disconnect_cb(chip);
>> +
>> if (atomic_inc_return(&chip->shutdown) == 1) {
>> struct snd_usb_stream *as;
>> struct snd_usb_endpoint *ep;
>> @@ -1130,6 +1173,11 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)
>> chip->system_suspend = chip->num_suspended_intf;
>> }
>>
>> + mutex_lock(®ister_mutex);
>> + if (platform_ops && platform_ops->suspend_cb)
>> + platform_ops->suspend_cb(intf, message);
>> + mutex_unlock(®ister_mutex);
>> +
>> return 0;
>> }
>>
>> @@ -1170,6 +1218,11 @@ static int usb_audio_resume(struct usb_interface *intf)
>>
>> snd_usb_midi_v2_resume_all(chip);
>>
>> + mutex_lock(®ister_mutex);
>> + if (platform_ops && platform_ops->resume_cb)
>> + platform_ops->resume_cb(intf);
>> + mutex_unlock(®ister_mutex);
>> +
>> out:
>> if (chip->num_suspended_intf == chip->system_suspend) {
>> snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0);
>> diff --git a/sound/usb/card.h b/sound/usb/card.h
>> index 4f4f3f39b7fa..23d9e6fc69e7 100644
>> --- a/sound/usb/card.h
>> +++ b/sound/usb/card.h
>> @@ -207,7 +207,17 @@ struct snd_usb_stream {
>> struct list_head list;
>> };
>>
>> +struct snd_usb_platform_ops {
>> + void (*connect_cb)(struct snd_usb_audio *chip);
>> + void (*disconnect_cb)(struct snd_usb_audio *chip);
>> + void (*suspend_cb)(struct usb_interface *intf, pm_message_t message);
>> + void (*resume_cb)(struct usb_interface *intf);
>> +};
>
> You're using the same mutex to protect all four callbacks, so how would
> things work if e.g. you disconnected a device during the resume operation?
We actually might be able to remove the mutex locks from the suspend and resume callbacks. From looking at the USB core driver, whenever the USB interface is unbounded, it ensures that it is in an active/resumed state before the disconnect() is called:
static int usb_unbind_interface(struct device *dev)
{
..
/* Autoresume for set_interface call below */
udev = interface_to_usbdev(intf);
error = usb_autoresume_device(udev);
..
driver->disconnect(intf);
So this will ensure that there won't be a condition where an interface disconnect routine could run in parallel to the interface's runtime resume or runtime suspend.
Thanks
Wesley Cheng
next prev parent reply other threads:[~2024-09-03 23:20 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 19:40 [PATCH v26 00/33] Introduce QC USB SND audio offloading support Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 01/33] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 02/33] usb: host: xhci: Repurpose event handler for skipping interrupter events Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 03/33] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 04/33] usb: xhci: Allow for secondary interrupter to set IMOD Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 05/33] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 06/33] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 07/33] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 08/33] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 09/33] ALSA: Add USB audio device jack type Wesley Cheng
2024-08-30 8:28 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 10/33] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-08-30 8:33 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 11/33] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-08-30 8:34 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 12/33] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-08-30 8:40 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 13/33] ASoC: usb: Add PCM format check API for " Wesley Cheng
2024-08-30 8:41 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 14/33] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-08-30 8:46 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 15/33] ASoC: usb: Fetch ASoC card and pcm device information Wesley Cheng
2024-08-30 8:50 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 16/33] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-08-30 9:03 ` Pierre-Louis Bossart
2024-08-31 1:49 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 17/33] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 18/33] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 19/33] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-08-30 9:12 ` Pierre-Louis Bossart
2024-08-31 2:11 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 20/33] ASoC: qcom: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-08-30 9:13 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 21/33] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-08-30 9:21 ` Pierre-Louis Bossart
2024-09-03 21:18 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 22/33] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-08-30 9:27 ` Pierre-Louis Bossart
2024-09-03 21:41 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 23/33] ASoC: qcom: qdsp6: Fetch USB offload mapped card and PCM device Wesley Cheng
2024-08-30 9:34 ` Pierre-Louis Bossart
2024-09-03 21:49 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 24/33] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-08-30 9:38 ` Pierre-Louis Bossart
2024-09-03 23:20 ` Wesley Cheng [this message]
2024-08-29 19:40 ` [PATCH v26 25/33] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-08-30 9:42 ` Pierre-Louis Bossart
2024-08-29 19:40 ` [PATCH v26 26/33] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-08-30 9:45 ` Pierre-Louis Bossart
2024-09-03 23:21 ` Wesley Cheng
2024-08-29 19:40 ` [PATCH v26 27/33] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 28/33] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-08-30 9:52 ` Pierre-Louis Bossart
2024-09-03 23:41 ` Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 29/33] ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is in use Wesley Cheng
2024-08-30 9:55 ` Pierre-Louis Bossart
2024-09-03 23:43 ` Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 30/33] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-08-30 9:58 ` Pierre-Louis Bossart
2024-09-04 19:46 ` Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 31/33] ALSA: usb-audio: Add USB offload route kcontrol Wesley Cheng
2024-08-30 10:05 ` Pierre-Louis Bossart
2024-09-03 23:52 ` Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 32/33] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2024-08-29 19:41 ` [PATCH v26 33/33] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
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=c9908207-d208-405d-a58d-ab2872adb4f1@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=dmitry.torokhov@gmail.com \
--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-input@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).