Hi Takashi,
On 9/7/2023 8:36 AM, Takashi Iwai wrote:
On Tue, 29 Aug 2023 23:06:36 +0200, Wesley Cheng wrote:
Allow for different platforms to be notified on USB SND connect/disconnect seqeunces. 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 | 45 +++++++++++++++++++++++++++++++++++++++++++++ sound/usb/card.h | 9 +++++++++ 2 files changed, 54 insertions(+)
diff --git a/sound/usb/card.c b/sound/usb/card.c index 1b2edc0fd2e9..067a1e82f4bf 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -118,6 +118,34 @@ 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;
+int snd_usb_register_platform_ops(struct snd_usb_platform_ops *ops) +{
- int ret;
- mutex_lock(®ister_mutex);
- if (platform_ops) {
ret = -EEXIST;
goto out;
- }
- platform_ops = ops;
+out:
- mutex_unlock(®ister_mutex);
- return 0;
+} +EXPORT_SYMBOL_GPL(snd_usb_register_platform_ops);
For adding this kind of API, please give the proper comment. Especially this API is special and need a caution, to mention that it can be used only for a single instance.
Also, it should be mentioned that all callbacks are exclusive under the global register_mutex.
Thanks for taking the time to review. Sure, I'll add some comments in these new APIs to document what they are used for and how they are protected and limited.
@@ -910,7 +938,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)
mutex_unlock(®ister_mutex);platform_ops->connect_cb(chip);
One uncertain thing is the argument for connect_cb and disconnect_cb. Those take snd_usb_audio object, but the callback gets called per interface at each probe and disconnect. How does the callee handle multiple calls?
I guess it should depend on how the platform driver wants to handle it? I haven't run into a device with multiple UAC interfaces before, so I'll need to mimic this configuration on a device, so I can see how it exposes itself.
Will investigate this a bit more on my end and come back with my findings.
Last but not least, the patch subject should be with "ALSA:" prefix, and in this case, at best "ALSA: usb-audio: xxx".
Got it, thanks!
Thanks Wesley Cheng