Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80acefff authored by Alexey Fisher's avatar Alexey Fisher Committed by Takashi Iwai
Browse files

ALSA: usb-audio - Add volume range check and warn if it too big

parent 848669da
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -987,6 +987,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
	struct snd_kcontrol *kctl;
	struct usb_mixer_elem_info *cval;
	const struct usbmix_name_map *map;
	unsigned int range;

	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",
		    cval->id, kctl->id.name, cval->channels, cval->min, cval->max, cval->res);
	add_control_to_empty(state, kctl);