mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
ALSA: usb-audio - Add volume range check and warn if it too big
Signed-off-by: Alexey Fisher <bug-track@fisher-privat.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
848669da3a
commit
80acefff3b
1 changed files with 16 additions and 0 deletions
|
@ -987,6 +987,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
||||||
struct snd_kcontrol *kctl;
|
struct snd_kcontrol *kctl;
|
||||||
struct usb_mixer_elem_info *cval;
|
struct usb_mixer_elem_info *cval;
|
||||||
const struct usbmix_name_map *map;
|
const struct usbmix_name_map *map;
|
||||||
|
unsigned int range;
|
||||||
|
|
||||||
control++; /* change from zero-based to 1-based value */
|
control++; /* change from zero-based to 1-based value */
|
||||||
|
|
||||||
|
@ -1136,6 +1137,21 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
* devices. It will definitively catch all buggy Logitech devices.
|
||||||
|
*/
|
||||||
|
if (range > 384) {
|
||||||
|
snd_printk(KERN_WARNING "usb_audio: Warning! Unlikely big "
|
||||||
|
"volume range (=%u), cval->res is probably wrong.",
|
||||||
|
range);
|
||||||
|
snd_printk(KERN_WARNING "usb_audio: [%d] FU [%s] ch = %d, "
|
||||||
|
"val = %d/%d/%d", cval->id,
|
||||||
|
kctl->id.name, cval->channels,
|
||||||
|
cval->min, cval->max, cval->res);
|
||||||
|
}
|
||||||
|
|
||||||
snd_printdd(KERN_INFO "[%d] FU [%s] ch = %d, val = %d/%d/%d\n",
|
snd_printdd(KERN_INFO "[%d] FU [%s] ch = %d, val = %d/%d/%d\n",
|
||||||
cval->id, kctl->id.name, cval->channels, cval->min, cval->max, cval->res);
|
cval->id, kctl->id.name, cval->channels, cval->min, cval->max, cval->res);
|
||||||
add_control_to_empty(state, kctl);
|
add_control_to_empty(state, kctl);
|
||||||
|
|
Loading…
Reference in a new issue