]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: usb-audio: Modularize realtek_add_jack in mixer_quirks
authorTasos Sahanidis <tasos@tasossah.com>
Wed, 26 Nov 2025 00:29:56 +0000 (02:29 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 26 Nov 2025 08:33:57 +0000 (09:33 +0100)
Modify the realtek_add_jack function used for the jack detection quirk
to allow passing the mixer unit id and an snd_kcontrol_new.

This allows adding additional devices that require the same quirk, but
implement jack detection with different commands.

Signed-off-by: Tasos Sahanidis <tasos@tasossah.com>
Link: https://patch.msgid.link/20251126003805.2705503-2-tasos@tasossah.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer_quirks.c

index 828af3095b86ee0aa8f2d248d8e714b5d3ae20eb..a48eb3b8cab2a59e5e2dc360f5b3e4ac9a3ef279 100644 (file)
@@ -2277,7 +2277,8 @@ static int realtek_resume_jack(struct usb_mixer_elem_list *list)
 }
 
 static int realtek_add_jack(struct usb_mixer_interface *mixer,
-                           char *name, u32 val)
+                           char *name, u32 val, int unitid,
+                           const struct snd_kcontrol_new *kctl_new)
 {
        struct usb_mixer_elem_info *cval;
        struct snd_kcontrol *kctl;
@@ -2285,14 +2286,13 @@ static int realtek_add_jack(struct usb_mixer_interface *mixer,
        cval = kzalloc(sizeof(*cval), GFP_KERNEL);
        if (!cval)
                return -ENOMEM;
-       snd_usb_mixer_elem_init_std(&cval->head, mixer,
-                                   REALTEK_JACK_INTERRUPT_NODE);
+       snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid);
        cval->head.resume = realtek_resume_jack;
        cval->val_type = USB_MIXER_BOOLEAN;
        cval->channels = 1;
        cval->min = 0;
        cval->max = 1;
-       kctl = snd_ctl_new1(&realtek_connector_ctl_ro, cval);
+       kctl = snd_ctl_new1(kctl_new, cval);
        if (!kctl) {
                kfree(cval);
                return -ENOMEM;
@@ -2322,14 +2322,20 @@ static int dell_dock_mixer_create(struct usb_mixer_interface *mixer)
                        USB_RECIP_DEVICE | USB_TYPE_VENDOR | USB_DIR_OUT,
                        0, 0, NULL, 0);
 
-       err = realtek_add_jack(mixer, "Line Out Jack", REALTEK_LINE1);
+       err = realtek_add_jack(mixer, "Line Out Jack", REALTEK_LINE1,
+                              REALTEK_JACK_INTERRUPT_NODE,
+                              &realtek_connector_ctl_ro);
        if (err < 0)
                return err;
-       err = realtek_add_jack(mixer, "Headphone Jack", REALTEK_HP_OUT);
+       err = realtek_add_jack(mixer, "Headphone Jack", REALTEK_HP_OUT,
+                              REALTEK_JACK_INTERRUPT_NODE,
+                              &realtek_connector_ctl_ro);
        if (err < 0)
                return err;
        err = realtek_add_jack(mixer, "Headset Mic Jack",
-                              REALTEK_HP_OUT | REALTEK_MIC_FLAG);
+                              REALTEK_HP_OUT | REALTEK_MIC_FLAG,
+                              REALTEK_JACK_INTERRUPT_NODE,
+                              &realtek_connector_ctl_ro);
        if (err < 0)
                return err;
        return 0;