From: Takashi Iwai <tiwai@suse.de>
To: Wesley Cheng <quic_wcheng@quicinc.com>
Cc: <srinivas.kandagatla@linaro.org>, <mathias.nyman@intel.com>,
<perex@perex.cz>, <conor+dt@kernel.org>, <corbet@lwn.net>,
<lgirdwood@gmail.com>, <andersson@kernel.org>,
<krzysztof.kozlowski+dt@linaro.org>, <gregkh@linuxfoundation.org>,
<Thinh.Nguyen@synopsys.com>, <broonie@kernel.org>,
<bgoswami@quicinc.com>, <tiwai@suse.com>, <robh+dt@kernel.org>,
<konrad.dybcio@linaro.org>, <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 v14 32/53] ALSA: usb-audio: Check for support for requested audio format
Date: Sat, 17 Feb 2024 11:08:19 +0100 [thread overview]
Message-ID: <87y1bjpfn0.wl-tiwai@suse.de> (raw)
In-Reply-To: <7f0c4f85-5a63-4643-8553-e3f5d6af67ec@quicinc.com>
On Sat, 17 Feb 2024 00:42:18 +0100,
Wesley Cheng wrote:
>
> Hi Takashi,
>
> On 2/9/2024 1:34 PM, Wesley Cheng wrote:
> > Hi Takashi,
> >
> > On 2/9/2024 2:42 AM, Takashi Iwai wrote:
> >> On Fri, 09 Feb 2024 00:13:45 +0100,
> >> Wesley Cheng wrote:
> >>>
> >>> Allow for checks on a specific USB audio device to see if a
> >>> requested PCM
> >>> format is supported. This is needed for support when playback is
> >>> initiated by the ASoC USB backend path.
> >>>
> >>> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
> >>> ---
> >>> sound/usb/card.c | 31 +++++++++++++++++++++++++++++++
> >>> sound/usb/card.h | 11 +++++++++++
> >>> 2 files changed, 42 insertions(+)
> >>>
> >>> diff --git a/sound/usb/card.c b/sound/usb/card.c
> >>> index 7dc8007ba839..1ad99a462038 100644
> >>> --- a/sound/usb/card.c
> >>> +++ b/sound/usb/card.c
> >>> @@ -155,6 +155,37 @@ int snd_usb_unregister_platform_ops(void)
> >>> }
> >>> EXPORT_SYMBOL_GPL(snd_usb_unregister_platform_ops);
> >>> +/*
> >>> + * Checks to see if requested audio profile, i.e sample rate, # of
> >>> + * channels, etc... is supported by the substream associated to the
> >>> + * USB audio device.
> >>> + */
> >>> +struct snd_usb_stream *snd_usb_find_suppported_substream(int card_idx,
> >>> + struct snd_pcm_hw_params *params, int direction)
> >>> +{
> >>> + struct snd_usb_audio *chip;
> >>> + struct snd_usb_substream *subs;
> >>> + struct snd_usb_stream *as;
> >>> +
> >>> + /*
> >>> + * Register mutex is held when populating and clearing usb_chip
> >>> + * array.
> >>> + */
> >>> + guard(mutex)(®ister_mutex);
> >>> + chip = usb_chip[card_idx];
> >>> +
> >>> + if (chip && enable[card_idx]) {
> >>> + list_for_each_entry(as, &chip->pcm_list, list) {
> >>> + subs = &as->substream[direction];
> >>> + if (snd_usb_find_substream_format(subs, params))
> >>> + return as;
> >>> + }
> >>> + }
> >>> +
> >>> + return NULL;
> >>> +}
> >>> +EXPORT_SYMBOL_GPL(snd_usb_find_suppported_substream);
> >>> +
> >>> /*
> >>> * disconnect streams
> >>> * called from usb_audio_disconnect()
> >>> diff --git a/sound/usb/card.h b/sound/usb/card.h
> >>> index 02e4ea898db5..ed4a664e24e5 100644
> >>> --- a/sound/usb/card.h
> >>> +++ b/sound/usb/card.h
> >>> @@ -217,4 +217,15 @@ struct snd_usb_platform_ops {
> >>> int snd_usb_register_platform_ops(struct snd_usb_platform_ops *ops);
> >>> int snd_usb_unregister_platform_ops(void);
> >>> +
> >>> +#if IS_ENABLED(CONFIG_SND_USB_AUDIO)
> >>> +struct snd_usb_stream *snd_usb_find_suppported_substream(int card_idx,
> >>> + struct snd_pcm_hw_params *params, int direction);
> >>> +#else
> >>> +static struct snd_usb_stream
> >>> *snd_usb_find_suppported_substream(int card_idx,
> >>> + struct snd_pcm_hw_params *params, int direction)
> >>> +{
> >>> + return NULL;
> >>> +}
> >>> +#endif /* IS_ENABLED(CONFIG_SND_USB_AUDIO) */
> >>
> >> The usefulness of ifdef guard here is doubtful, IMO. This header is
> >> only for USB-audio driver enablement, and not seen as generic
> >> helpers. So, just add the new function declarations without dummy
> >> definitions.
> >>
> >
> > Got it, will remove it. We also have a dependency in place for the
> > qc_audio_offload driver and SND USB AUDIO in the Kconfig.
> >
>
> Looking at this again after trying some mixed Kconfig settings. These
> declarations aren't specific for USB-audio. They are helpers that are
> exposed to soc usb, so that it can do some basic verification with soc
> usb before allowing the enable stream to continue.
Then rather the question is why snd-soc-usb calls those functions
*unconditionally*. No matter whether we have dependencies in Kconfig,
calling the function means that the callee shall be drug when the
corresponding code is running.
If it were generic core API stuff such as power-management or ACPI,
it'd make sense to define dummy functions without the enablement, as
many code may have optional calls. If the API is enabled, it's anyway
in the core. If not, it's optional. That'll be fine.
OTOH, the stuff you're calling certainly belongs to snd-usb-audio.
Even if the call is really optional, it means that you'll have a hard
dependency when snd-usb-audio is built, no matter whether you need or
not.
> Since the ASoC
> layer doesn't have insight on what audio profiles are supported by the
> usb device, this API will ensure that the request profile is
> supported.
>
> Issues are seen when we disable SND USB audio config and enable the
> ASoC parts.
If snd-usb-audio is disabled, what snd-soc-usb would serve at all?
Does it still make sense to keep it enabled?
That said, the statement above (building snd-soc-usb without
snd-usb-audio) looks already dubious; isn't it better to have a proper
dependency in Kconfig, instead?
thanks,
Takashi
next prev parent reply other threads:[~2024-02-17 10:08 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-08 23:13 [PATCH v14 00/53] Introduce QC USB SND audio offloading support Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 01/53] xhci: fix possible null pointer dereference at secondary interrupter removal Wesley Cheng
2024-02-09 10:22 ` Greg KH
2024-02-09 20:16 ` Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 02/53] xhci: fix off by one check when adding a secondary interrupter Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 03/53] xhci: Add interrupt pending autoclear flag to each interrupter Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 04/53] xhci: Add helper to set an interrupters interrupt moderation interval Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 05/53] xhci: make isoc_bei_interval variable interrupter specific Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 06/53] xhci: remove unnecessary event_ring_deq parameter from xhci_handle_event() Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 07/53] xhci: update event ring dequeue pointer position to controller correctly Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 08/53] xhci: move event processing for one interrupter to a separate function Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 09/53] xhci: add helper that checks for unhandled events on a event ring Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 10/53] xhci: Don't check if the event ring is valid before every event TRB Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 11/53] xhci: Decouple handling an event from checking for unhandled events Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 12/53] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 13/53] usb: host: xhci: Export enable and disable interrupter APIs Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 14/53] usb: host: xhci: Repurpose event handler for skipping interrupter events Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 15/53] xhci: export XHCI IMOD setting helper for interrupters Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 16/53] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 18/53] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 19/53] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 20/53] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-02-09 10:54 ` Takashi Iwai
2024-02-09 20:34 ` Wesley Cheng
2024-02-10 8:08 ` Takashi Iwai
2024-02-12 7:58 ` Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 21/53] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 22/53] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 23/53] ASoC: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 24/53] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 25/53] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 26/53] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 27/53] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 28/53] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 29/53] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 30/53] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 31/53] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 32/53] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-02-09 10:42 ` Takashi Iwai
2024-02-09 21:34 ` Wesley Cheng
2024-02-16 23:42 ` Wesley Cheng
2024-02-17 10:08 ` Takashi Iwai [this message]
2024-02-24 6:22 ` Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 33/53] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 34/53] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 35/53] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 36/53] ALSA: usb-audio: Do not allow USB offload path if PCM device is " Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 37/53] ASoC: dt-bindings: Add Q6USB backend Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 38/53] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 39/53] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 40/53] ASoC: qcom: qdsp6: Add support to track available USB PCM devices Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 41/53] ASoC: Introduce SND kcontrols to select sound card and PCM device Wesley Cheng
2024-02-09 10:38 ` Takashi Iwai
2024-02-08 23:13 ` [PATCH v14 42/53] ASoC: qcom: qdsp6: Add SOC USB offload select get/put callbacks Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 43/53] ASoC: Add SND kcontrol for fetching USB offload status Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 44/53] ASoC: qcom: qdsp6: Add PCM ops to track current state Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 45/53] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-02-09 11:02 ` Takashi Iwai
2024-02-09 23:00 ` Wesley Cheng
2024-02-08 23:13 ` [PATCH v14 46/53] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 47/53] ASoC: usb: Fetch ASoC sound card information Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 48/53] ALSA: usb-audio: mixer: Add USB offloading mixer control Wesley Cheng
2024-02-09 10:36 ` Takashi Iwai
2024-02-10 0:31 ` Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 49/53] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 50/53] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 51/53] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 52/53] ASoC: qcom: Populate SoC components string Wesley Cheng
2024-02-08 23:14 ` [PATCH v14 53/53] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-02-08 23:33 ` [PATCH v14 00/53] Introduce QC USB SND audio offloading support Wesley Cheng
2024-02-09 10:22 ` Greg KH
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=87y1bjpfn0.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=Thinh.Nguyen@synopsys.com \
--cc=alsa-devel@alsa-project.org \
--cc=andersson@kernel.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=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.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=quic_wcheng@quicinc.com \
--cc=robh+dt@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