Commit 80acefff3bc7bd53d46c16c683ab66c0ece20810

Authored by Alexey Fisher
Committed by Takashi Iwai
1 parent 848669da3a

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

... ... @@ -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",