Re: [RFC PATCH v2 12/22] sound: usb: card: Introduce USB SND platform op callbacks

From: Wesley Cheng
Date: Fri Feb 10 2023 - 17:50:02 EST


Hi Greg,

On 1/28/2023 5:28 AM, Greg KH wrote:
On Wed, Jan 25, 2023 at 07:14:14PM -0800, 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@xxxxxxxxxxx>
---
sound/usb/card.c | 28 ++++++++++++++++++++++++++++
sound/usb/card.h | 20 ++++++++++++++++++++
2 files changed, 48 insertions(+)

diff --git a/sound/usb/card.c b/sound/usb/card.c
index 26268ffb8274..803230343c16 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -117,6 +117,24 @@ 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;

You can not have a single "platform_ops" pointer, this HAS to be
per-bus.


Agreed.

And what is a "platform operations" anyway? Shouldn't this be a driver
type or something like that? "offload_operations"?


The reason for going with platform operations is because every platform may implement the offloading differently. The offload operations term is more direct though in terms of explaining what the ops are going to be used for, so I can see the incentive of moving to that phrase.

+
+int snd_usb_register_platform_ops(struct snd_usb_platform_ops *ops)
+{
+ if (platform_ops)
+ return -EEXIST;
+
+ platform_ops = ops;
+ return 0;

No locking? not good.

But again, this has to be per-USB-bus, it can NOT be system wide for
obvious reasons.


Sure, will change that when moving to per USB bus.

Thanks
Wesley Cheng