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 48/53] ALSA: usb-audio: mixer: Add USB offloading mixer control
Date: Fri, 09 Feb 2024 11:36:15 +0100 [thread overview]
Message-ID: <87y1bt2acg.wl-tiwai@suse.de> (raw)
In-Reply-To: <20240208231406.27397-49-quic_wcheng@quicinc.com>
On Fri, 09 Feb 2024 00:14:01 +0100,
Wesley Cheng wrote:
>
> In order to allow userspace/applications know about USB offloading status,
> expose a sound kcontrol that fetches information about which sound card
> index is associated with the ASoC platform card supporting offloading. In
> the USB audio offloading framework, the ASoC BE DAI link is the entity
> responsible for registering to the SOC USB layer. SOC USB will expose more
> details about the current offloading status, which includes the USB sound
> card and USB PCM device indexes currently being used.
>
> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
Now looking at this again, I noticed that this will bring the
hard-dependency on ASoC stuff to USB-audio driver, since it adds the
call of snd_soc_usb_device_offload_available().
Maybe we can let the add-on platform adding/removing the control
element on the fly instead?
thanks,
Takashi
> ---
> sound/usb/Kconfig | 4 ++
> sound/usb/Makefile | 1 +
> sound/usb/mixer.c | 5 +++
> sound/usb/mixer_usb_offload.c | 72 +++++++++++++++++++++++++++++++++++
> sound/usb/mixer_usb_offload.h | 17 +++++++++
> 5 files changed, 99 insertions(+)
> create mode 100644 sound/usb/mixer_usb_offload.c
> create mode 100644 sound/usb/mixer_usb_offload.h
>
> diff --git a/sound/usb/Kconfig b/sound/usb/Kconfig
> index 4c842fbe6365..3e7be258d0e3 100644
> --- a/sound/usb/Kconfig
> +++ b/sound/usb/Kconfig
> @@ -176,10 +176,14 @@ config SND_BCD2000
> To compile this driver as a module, choose M here: the module
> will be called snd-bcd2000.
>
> +config SND_USB_OFFLOAD_MIXER
> + bool
> +
> config SND_USB_AUDIO_QMI
> tristate "Qualcomm Audio Offload driver"
> depends on QCOM_QMI_HELPERS && SND_USB_AUDIO && USB_XHCI_SIDEBAND
> select SND_PCM
> + select SND_USB_OFFLOAD_MIXER
> help
> Say Y here to enable the Qualcomm USB audio offloading feature.
>
> diff --git a/sound/usb/Makefile b/sound/usb/Makefile
> index 246788268ddd..8c54660a11b0 100644
> --- a/sound/usb/Makefile
> +++ b/sound/usb/Makefile
> @@ -22,6 +22,7 @@ snd-usb-audio-objs := card.o \
> stream.o \
> validate.o
>
> +snd-usb-audio-$(CONFIG_SND_USB_OFFLOAD_MIXER) += mixer_usb_offload.o
> snd-usb-audio-$(CONFIG_SND_USB_AUDIO_MIDI_V2) += midi2.o
> snd-usb-audio-$(CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER) += media.o
>
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 409fc1164694..09229e623469 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -48,6 +48,7 @@
> #include "mixer.h"
> #include "helper.h"
> #include "mixer_quirks.h"
> +#include "mixer_usb_offload.h"
> #include "power.h"
>
> #define MAX_ID_ELEMS 256
> @@ -3609,6 +3610,10 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
> if (err < 0)
> goto _error;
>
> + err = snd_usb_offload_init_mixer(mixer);
> + if (err < 0)
> + goto _error;
> +
> err = snd_device_new(chip->card, SNDRV_DEV_CODEC, mixer, &dev_ops);
> if (err < 0)
> goto _error;
> diff --git a/sound/usb/mixer_usb_offload.c b/sound/usb/mixer_usb_offload.c
> new file mode 100644
> index 000000000000..61b17359b987
> --- /dev/null
> +++ b/sound/usb/mixer_usb_offload.c
> @@ -0,0 +1,72 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> + */
> +
> +#include <linux/usb.h>
> +
> +#include <sound/core.h>
> +#include <sound/control.h>
> +#include <sound/soc-usb.h>
> +
> +#include "card.h"
> +#include "mixer.h"
> +#include "mixer_usb_offload.h"
> +#include "usbaudio.h"
> +
> +static int
> +snd_usb_offload_create_mixer(struct usb_mixer_interface *mixer,
> + const struct snd_kcontrol_new *new_kctl)
> +{
> + struct snd_usb_audio *chip = mixer->chip;
> + struct usb_device *udev = chip->dev;
> +
> + return snd_ctl_add(chip->card,
> + snd_ctl_new1(new_kctl, udev->bus->sysdev));
> +}
> +
> +static int
> +snd_usb_offload_available_get(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
> +{
> + struct device *sysdev = snd_kcontrol_chip(kcontrol);
> + int ret;
> +
> + ret = snd_soc_usb_device_offload_available(sysdev);
> + ucontrol->value.integer.value[0] = ret < 0 ? -1 : ret;
> +
> + return ret < 0 ? ret : 0;
> +}
> +
> +static int snd_usb_offload_available_info(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_info *uinfo)
> +{
> + uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
> + uinfo->count = 1;
> + uinfo->value.integer.min = -1;
> + uinfo->value.integer.max = SNDRV_CARDS;
> +
> + return 0;
> +}
> +
> +static const struct snd_kcontrol_new snd_usb_offload_available_ctl = {
> + .iface = SNDRV_CTL_ELEM_IFACE_CARD,
> + .access = SNDRV_CTL_ELEM_ACCESS_READ,
> + .name = "USB Offload Playback Capable Card",
> + .info = snd_usb_offload_available_info,
> + .get = snd_usb_offload_available_get,
> +};
> +
> +/**
> + * snd_usb_offload_init_mixer() - Add USB offload bounded mixer
> + * @mixer - USB mixer
> + *
> + * Creates a sound control for a USB audio device, so that applications can
> + * query for if there is an available USB audio offload path, and which
> + * card is managing it.
> + */
> +int snd_usb_offload_init_mixer(struct usb_mixer_interface *mixer)
> +{
> + return snd_usb_offload_create_mixer(mixer, &snd_usb_offload_available_ctl);
> +}
> +EXPORT_SYMBOL_GPL(snd_usb_offload_init_mixer);
> diff --git a/sound/usb/mixer_usb_offload.h b/sound/usb/mixer_usb_offload.h
> new file mode 100644
> index 000000000000..fb88e872d8fa
> --- /dev/null
> +++ b/sound/usb/mixer_usb_offload.h
> @@ -0,0 +1,17 @@
> +/* SPDX-License-Identifier: GPL-2.0
> + *
> + * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> + */
> +
> +#ifndef __USB_OFFLOAD_MIXER_H
> +#define __USB_OFFLOAD_MIXER_H
> +
> +#if IS_ENABLED(CONFIG_SND_USB_OFFLOAD_MIXER)
> +int snd_usb_offload_init_mixer(struct usb_mixer_interface *mixer);
> +#else
> +static int snd_usb_offload_init_mixer(struct usb_mixer_interface *mixer)
> +{
> + return 0;
> +}
> +#endif
> +#endif /* __USB_OFFLOAD_MIXER_H */
next prev parent reply other threads:[~2024-02-09 10:37 UTC|newest]
Thread overview: 72+ 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 17/53] usb: host: xhci-sideband: Expose a sideband interrupter enable API 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
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 [this message]
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=87y1bt2acg.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.