ALSA: usb-audio: scarlett2: Update mux controls to allow updates
Enabling/disabling speaker switching will update the mux configuration. To prepare for this, add a private->mux_updated flag and update the scarlett2_mux_src_enum_ctl_get() callback to check it. Signed-off-by: Geoffrey D. Bennett <g@b4.vu> Link: https://lore.kernel.org/r/5ce3bb9fe4006b550d18c783c5ff640fe0bfbfcb.1624379707.git.g@b4.vu Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f02da65348
commit
8df25eb0a2
|
@ -378,6 +378,7 @@ struct scarlett2_data {
|
||||||
u8 vol_updated;
|
u8 vol_updated;
|
||||||
u8 input_other_updated;
|
u8 input_other_updated;
|
||||||
u8 monitor_other_updated;
|
u8 monitor_other_updated;
|
||||||
|
u8 mux_updated;
|
||||||
u8 sync;
|
u8 sync;
|
||||||
u8 master_vol;
|
u8 master_vol;
|
||||||
u8 vol[SCARLETT2_ANALOGUE_MAX];
|
u8 vol[SCARLETT2_ANALOGUE_MAX];
|
||||||
|
@ -1446,6 +1447,8 @@ static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
|
||||||
|
|
||||||
__le32 data[SCARLETT2_MUX_MAX];
|
__le32 data[SCARLETT2_MUX_MAX];
|
||||||
|
|
||||||
|
private->mux_updated = 0;
|
||||||
|
|
||||||
req.num = 0;
|
req.num = 0;
|
||||||
req.count = cpu_to_le16(count);
|
req.count = cpu_to_le16(count);
|
||||||
|
|
||||||
|
@ -2799,7 +2802,8 @@ static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
struct usb_mixer_elem_info *elem = kctl->private_data;
|
struct usb_mixer_elem_info *elem = kctl->private_data;
|
||||||
struct scarlett2_data *private = elem->head.mixer->private_data;
|
struct usb_mixer_interface *mixer = elem->head.mixer;
|
||||||
|
struct scarlett2_data *private = mixer->private_data;
|
||||||
const struct scarlett2_device_info *info = private->info;
|
const struct scarlett2_device_info *info = private->info;
|
||||||
const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
|
const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
|
||||||
int line_out_count =
|
int line_out_count =
|
||||||
|
@ -2809,7 +2813,12 @@ static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
|
||||||
if (index < line_out_count)
|
if (index < line_out_count)
|
||||||
index = line_out_remap(private, index);
|
index = line_out_remap(private, index);
|
||||||
|
|
||||||
|
mutex_lock(&private->data_mutex);
|
||||||
|
if (private->mux_updated)
|
||||||
|
scarlett2_usb_get_mux(mixer);
|
||||||
ucontrol->value.enumerated.item[0] = private->mux[index];
|
ucontrol->value.enumerated.item[0] = private->mux[index];
|
||||||
|
mutex_unlock(&private->data_mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue