Commit 80acefff3bc7bd53d46c16c683ab66c0ece20810
Committed by
Takashi Iwai
1 parent
848669da3a
Exists in
master
and in
7 other branches
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>
Showing 1 changed file with 16 additions and 0 deletions Side-by-side Diff
sound/usb/mixer.c
... | ... | @@ -987,6 +987,7 @@ |
987 | 987 | struct snd_kcontrol *kctl; |
988 | 988 | struct usb_mixer_elem_info *cval; |
989 | 989 | const struct usbmix_name_map *map; |
990 | + unsigned int range; | |
990 | 991 | |
991 | 992 | control++; /* change from zero-based to 1-based value */ |
992 | 993 | |
... | ... | @@ -1134,6 +1135,21 @@ |
1134 | 1135 | } |
1135 | 1136 | break; |
1136 | 1137 | |
1138 | + } | |
1139 | + | |
1140 | + range = (cval->max - cval->min) / cval->res; | |
1141 | + /* Are there devices with volume range more than 255? I use a bit more | |
1142 | + * to be sure. 384 is a resolution magic number found on Logitech | |
1143 | + * devices. It will definitively catch all buggy Logitech devices. | |
1144 | + */ | |
1145 | + if (range > 384) { | |
1146 | + snd_printk(KERN_WARNING "usb_audio: Warning! Unlikely big " | |
1147 | + "volume range (=%u), cval->res is probably wrong.", | |
1148 | + range); | |
1149 | + snd_printk(KERN_WARNING "usb_audio: [%d] FU [%s] ch = %d, " | |
1150 | + "val = %d/%d/%d", cval->id, | |
1151 | + kctl->id.name, cval->channels, | |
1152 | + cval->min, cval->max, cval->res); | |
1137 | 1153 | } |
1138 | 1154 | |
1139 | 1155 | snd_printdd(KERN_INFO "[%d] FU [%s] ch = %d, val = %d/%d/%d\n", |