Re: [PATCH v9 21/34] ASoC: usb: Add PCM format check API for USB backend

From: Pierre-Louis Bossart
Date: Tue Oct 17 2023 - 19:23:39 EST




On 10/17/23 15:00, Wesley Cheng wrote:
> Introduce a check for if a particular PCM format is supported by the USB

Introduce a helper to check if a ...

> audio device connected. If the USB audio device does not have an audio
> profile which can support the requested format, then notify the USB
> backend.
>
> Signed-off-by: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
> ---
> include/sound/soc-usb.h | 3 +++
> sound/soc/soc-usb.c | 13 +++++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/include/sound/soc-usb.h b/include/sound/soc-usb.h
> index 58c686f4f7ba..c6ddc055c4cd 100644
> --- a/include/sound/soc-usb.h
> +++ b/include/sound/soc-usb.h
> @@ -37,6 +37,9 @@ struct snd_soc_usb {
> void *priv_data;
> };
>
> +int snd_soc_usb_find_format(int card_idx, struct snd_pcm_hw_params *params,
> + int direction);
> +
> int snd_soc_usb_connect(struct device *usbdev, struct snd_soc_usb_device *sdev);
> int snd_soc_usb_disconnect(struct device *usbdev, struct snd_soc_usb_device *sdev);
> void *snd_soc_usb_find_priv_data(struct device *usbdev);
> diff --git a/sound/soc/soc-usb.c b/sound/soc/soc-usb.c
> index 73b1bcc3b506..7407678a993e 100644
> --- a/sound/soc/soc-usb.c
> +++ b/sound/soc/soc-usb.c
> @@ -63,6 +63,19 @@ void *snd_soc_usb_find_priv_data(struct device *dev)
> }
> EXPORT_SYMBOL_GPL(snd_soc_usb_find_priv_data);
>
> +int snd_soc_usb_find_format(int card_idx, struct snd_pcm_hw_params *params,
> + int direction)
> +{
> + struct snd_usb_stream *as;
> +
> + as = snd_usb_find_suppported_substream(card_idx, params, direction);
> + if (!as)
> + return -EOPNOTSUPP;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(snd_soc_usb_find_format);

Is this the right way to check for formats?

formats are defined within the scope of an endpoint, and those endpoints
are themselves defined within the scope of an interface?

I don't see a notion of endpoint here. Does this assume all endpoints
are valid, or maybe the existence of a single endpoint in a device?

Confused.