Commit bf2aa5ca authored by Jens Verwiebe's avatar Jens Verwiebe Committed by Takashi Iwai

ALSA: usb-audio: Fix Focusrite Scarlett 6i6 gen1 - input handling

The Scarlett 6i6 has no padding on rear inputs 3/4 but a gainstage.
This patch introduces this functionality as to be seen in the mac
or windows scarlett control.

The correct address could already be found in the dump info, but was
never used. Without this patch inputs 3/4 are quite unusable else.
Signed-off-by: default avatarJens Verwiebe <info@jensverwiebe.de>
Link: https://lore.kernel.org/r/384d65cd-5e87-91eb-9fc3-e57226f534c6@jensverwiebe.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 436e2550
...@@ -142,6 +142,7 @@ enum { ...@@ -142,6 +142,7 @@ enum {
SCARLETT_OUTPUTS, SCARLETT_OUTPUTS,
SCARLETT_SWITCH_IMPEDANCE, SCARLETT_SWITCH_IMPEDANCE,
SCARLETT_SWITCH_PAD, SCARLETT_SWITCH_PAD,
SCARLETT_SWITCH_GAIN,
}; };
enum { enum {
...@@ -192,6 +193,15 @@ static const struct scarlett_mixer_elem_enum_info opt_pad = { ...@@ -192,6 +193,15 @@ static const struct scarlett_mixer_elem_enum_info opt_pad = {
} }
}; };
static const struct scarlett_mixer_elem_enum_info opt_gain = {
.start = 0,
.len = 2,
.offsets = {},
.names = (char const * const []){
"Lo", "Hi"
}
};
static const struct scarlett_mixer_elem_enum_info opt_impedance = { static const struct scarlett_mixer_elem_enum_info opt_impedance = {
.start = 0, .start = 0,
.len = 2, .len = 2,
...@@ -652,8 +662,8 @@ static struct scarlett_device_info s6i6_info = { ...@@ -652,8 +662,8 @@ static struct scarlett_device_info s6i6_info = {
{ .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL}, { .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL},
{ .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL}, { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
{ .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL}, { .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL},
{ .num = 3, .type = SCARLETT_SWITCH_PAD, .name = NULL}, { .num = 3, .type = SCARLETT_SWITCH_GAIN, .name = NULL},
{ .num = 4, .type = SCARLETT_SWITCH_PAD, .name = NULL}, { .num = 4, .type = SCARLETT_SWITCH_GAIN, .name = NULL},
}, },
.matrix_mux_init = { .matrix_mux_init = {
...@@ -883,6 +893,15 @@ static int scarlett_controls_create_generic(struct usb_mixer_interface *mixer, ...@@ -883,6 +893,15 @@ static int scarlett_controls_create_generic(struct usb_mixer_interface *mixer,
if (err < 0) if (err < 0)
return err; return err;
break; break;
case SCARLETT_SWITCH_GAIN:
sprintf(mx, "Input %d Gain Switch", ctl->num);
err = add_new_ctl(mixer, &usb_scarlett_ctl_enum,
scarlett_ctl_enum_resume, 0x01,
0x08, ctl->num, USB_MIXER_S16, 1, mx,
&opt_gain, &elem);
if (err < 0)
return err;
break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment