Re: [PATCH v20 33/41] ASoC: usb: Create SOC USB SND jack kcontrol

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Hi Amadeusz,

On 4/26/2024 6:26 AM, Amadeusz Sławiński wrote:
On 4/25/2024 11:51 PM, Wesley Cheng wrote:
Expose API for creation of a jack control for notifying of available
devices that are plugged in/discovered, and that support offloading. This
allows for control names to be standardized across implementations of USB
audio offloading.

Signed-off-by: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
---

(...)

  /* SOC USB sound kcontrols */
+/**
+ * snd_soc_usb_setup_offload_jack() - Create USB offloading jack
+ * @component: USB DPCM backend DAI component
+ * @jack: jack structure to create
+ *
+ * Creates a jack device for notifying userspace of the availability
+ * of an offload capable device.
+ *
+ * Returns 0 on success, negative on error.
+ *
+ */
+int snd_soc_usb_setup_offload_jack(struct snd_soc_component *component,
+                    struct snd_soc_jack *jack)
+{
+    int ret;
+
+    ret = snd_soc_card_jack_new(component->card, "USB Offload Playback Jack",
+                    SND_JACK_HEADPHONE, jack);
+    if (ret < 0) {
+        dev_err(component->card->dev, "Unable to add USB offload jack\n");
+        return ret;
+    }
+
+    ret = snd_soc_component_set_jack(component, jack, NULL);
+    if (ret) {
+        dev_warn(component->card->dev, "Failed to set jack: %d\n", ret);
+        return ret;
+    }
+
+    return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_usb_setup_offload_jack);
+
  static int snd_soc_usb_get_offload_card_status(struct snd_kcontrol *kcontrol,
                     struct snd_ctl_elem_value *ucontrol)
  {


I'm not sure if this should be handled in generic USB API, this feels like something that should be handled in specific device driver side, like all users currently do.


In some of the previous comments, it was mentioned that maybe it was better to have more consistent/defined naming across devices that do have support for audio offload. Initially, I did have these within our vendor specific ASoC platform driver also.

Anyway I think there should also be some function that tears jack down, by calling:
snd_soc_component_set_jack(component, NULL, NULL);
so it can get cleaned up properly?

I can add that. I didn't realize there were some situations where maybe components would want to disable the jack. I will leave the cleanup part to ASoC when the platform card is removed.

Thanks
Wesley Cheng




[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux