Commit dd57b121 authored by Geoffrey D. Bennett's avatar Geoffrey D. Bennett Committed by Takashi Iwai

ALSA: scarlett2: Add support for air/phantom control on input 2

The Focusrite Scarlett Gen 4 Solo has Air and Phantom Power controls
on analogue input #2 (the Gen 3 Solo had these controls on analogue
input #1). Add air_input_first and phantom_first device info options
to cater for this.

These options are similar to the level_input_first option that was
added for the Gen 3 Solo, but these new options do not require
adjusting the index of the control.
Signed-off-by: default avatarGeoffrey D. Bennett <g@b4.vu>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/19511f18895b8c094985a4a5691fbc1dc028c108.1703612638.git.g@b4.vu
parent 4dedf7ca
...@@ -632,9 +632,15 @@ struct scarlett2_device_info { ...@@ -632,9 +632,15 @@ struct scarlett2_device_info {
*/ */
u8 air_input_count; u8 air_input_count;
/* the first input with an air control (0-based) */
u8 air_input_first;
/* the number of phantom (48V) software switchable controls */ /* the number of phantom (48V) software switchable controls */
u8 phantom_count; u8 phantom_count;
/* the first input with phantom power control (0-based) */
u8 phantom_first;
/* the number of inputs each phantom switch controls */ /* the number of inputs each phantom switch controls */
u8 inputs_per_phantom; u8 inputs_per_phantom;
...@@ -3043,6 +3049,7 @@ static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl, ...@@ -3043,6 +3049,7 @@ static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
struct usb_mixer_elem_info *elem = kctl->private_data; struct usb_mixer_elem_info *elem = kctl->private_data;
struct usb_mixer_interface *mixer = elem->head.mixer; struct usb_mixer_interface *mixer = elem->head.mixer;
struct scarlett2_data *private = mixer->private_data; struct scarlett2_data *private = mixer->private_data;
const struct scarlett2_device_info *info = private->info;
int index = elem->control; int index = elem->control;
int oval, val, err = 0; int oval, val, err = 0;
...@@ -3064,7 +3071,7 @@ static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl, ...@@ -3064,7 +3071,7 @@ static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
/* Send switch change to the device */ /* Send switch change to the device */
err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH, err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
index, val); index + info->phantom_first, val);
if (err == 0) if (err == 0)
err = 1; err = 1;
...@@ -3763,7 +3770,8 @@ static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer) ...@@ -3763,7 +3770,8 @@ static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
/* Add input air controls */ /* Add input air controls */
for (i = 0; i < info->air_input_count; i++) { for (i = 0; i < info->air_input_count; i++) {
snprintf(s, sizeof(s), fmt, i + 1, "Air", "Switch"); snprintf(s, sizeof(s), fmt, i + 1 + info->air_input_first,
"Air", "Switch");
err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl, err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl,
i, 1, s, &private->air_ctls[i]); i, 1, s, &private->air_ctls[i]);
if (err < 0) if (err < 0)
...@@ -3773,7 +3781,8 @@ static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer) ...@@ -3773,7 +3781,8 @@ static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
/* Add input phantom controls */ /* Add input phantom controls */
if (info->inputs_per_phantom == 1) { if (info->inputs_per_phantom == 1) {
for (i = 0; i < info->phantom_count; i++) { for (i = 0; i < info->phantom_count; i++) {
scnprintf(s, sizeof(s), fmt, i + 1, scnprintf(s, sizeof(s), fmt,
i + 1 + info->phantom_first,
"Phantom Power", "Switch"); "Phantom Power", "Switch");
err = scarlett2_add_new_ctl( err = scarlett2_add_new_ctl(
mixer, &scarlett2_phantom_ctl, mixer, &scarlett2_phantom_ctl,
......
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