summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTasos Sahanidis <tasos@tasossah.com>2025-11-26 02:29:56 +0200
committerTakashi Iwai <tiwai@suse.de>2025-11-26 09:33:57 +0100
commitfba274760d29a8346f335d0fbddf7d18e611e947 (patch)
treeca3ed3065e3309a323df8e8369ec1b6dfb78e140
parent500372aeb556afe65019f6a7f4ac817889653755 (diff)
ALSA: usb-audio: Modularize realtek_add_jack in mixer_quirks
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>
-rw-r--r--sound/usb/mixer_quirks.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
index 828af3095b86..a48eb3b8cab2 100644
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -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;