forked from Minki/linux
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>
This commit is contained in:
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,
|
||||
kctl->id.name, sizeof(kctl->id.name));
|
||||
|
||||
/* get min/max values */
|
||||
get_min_max_with_quirks(cval, 0, kctl);
|
||||
|
||||
switch (control) {
|
||||
case UAC_FU_MUTE:
|
||||
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 ?
|
||||
" 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;
|
||||
|
||||
default:
|
||||
if (! len)
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
/* 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
|
||||
|
Loading…
Reference in New Issue
Block a user