ALSA: usb-audio - Call get_min_max_*() after determining the name string
get_min_max_with_quirks() must be called after the control id name string is determined, but the current code changes the id name string after calling the function. Reported-by: Christian Melki <christian.melki@ericsson.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>hifive-unleashed-5.1
parent
f3af90517d
commit
e182534d4b
|
@ -1141,9 +1141,6 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
||||||
len = snd_usb_copy_string_desc(state, nameid,
|
len = snd_usb_copy_string_desc(state, nameid,
|
||||||
kctl->id.name, sizeof(kctl->id.name));
|
kctl->id.name, sizeof(kctl->id.name));
|
||||||
|
|
||||||
/* get min/max values */
|
|
||||||
get_min_max_with_quirks(cval, 0, kctl);
|
|
||||||
|
|
||||||
switch (control) {
|
switch (control) {
|
||||||
case UAC_FU_MUTE:
|
case UAC_FU_MUTE:
|
||||||
case UAC_FU_VOLUME:
|
case UAC_FU_VOLUME:
|
||||||
|
@ -1175,17 +1172,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
||||||
}
|
}
|
||||||
append_ctl_name(kctl, control == UAC_FU_MUTE ?
|
append_ctl_name(kctl, control == UAC_FU_MUTE ?
|
||||||
" Switch" : " Volume");
|
" Switch" : " Volume");
|
||||||
if (control == UAC_FU_VOLUME) {
|
|
||||||
check_mapped_dB(map, cval);
|
|
||||||
if (cval->dBmin < cval->dBmax || !cval->initialized) {
|
|
||||||
kctl->tlv.c = snd_usb_mixer_vol_tlv;
|
|
||||||
kctl->vd[0].access |=
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READ |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (! len)
|
if (! len)
|
||||||
strlcpy(kctl->id.name, audio_feature_info[control-1].name,
|
strlcpy(kctl->id.name, audio_feature_info[control-1].name,
|
||||||
|
@ -1193,6 +1180,19 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get min/max values */
|
||||||
|
get_min_max_with_quirks(cval, 0, kctl);
|
||||||
|
|
||||||
|
if (control == UAC_FU_VOLUME) {
|
||||||
|
check_mapped_dB(map, cval);
|
||||||
|
if (cval->dBmin < cval->dBmax || !cval->initialized) {
|
||||||
|
kctl->tlv.c = snd_usb_mixer_vol_tlv;
|
||||||
|
kctl->vd[0].access |=
|
||||||
|
SNDRV_CTL_ELEM_ACCESS_TLV_READ |
|
||||||
|
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
range = (cval->max - cval->min) / cval->res;
|
range = (cval->max - cval->min) / cval->res;
|
||||||
/* Are there devices with volume range more than 255? I use a bit more
|
/* Are there devices with volume range more than 255? I use a bit more
|
||||||
* to be sure. 384 is a resolution magic number found on Logitech
|
* to be sure. 384 is a resolution magic number found on Logitech
|
||||||
|
|
Loading…
Reference in New Issue