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

Commit eedbdf03 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: usb-audio - Correct bogus volume dB information



Some USB devices give bogus dB information and it screws up PA.
It's better to detect a broken value and correct it in the driver
before exposing the value to the outside.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b8e1c73f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -470,6 +470,15 @@ static int mixer_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,
	 */
	scale[2] = (convert_signed_value(cval, cval->min) * 100) / 256;
	scale[3] = (convert_signed_value(cval, cval->max) * 100) / 256;
	if (scale[3] <= scale[2]) {
		/* something is wrong; assume it's either from/to 0dB */
		if (scale[2] < 0)
			scale[3] = 0;
		else if (scale[2] > 0)
			scale[2] = 0;
		else /* totally crap, return an error */
			return -EINVAL;
	}
	if (copy_to_user(_tlv, scale, sizeof(scale)))
		return -EFAULT;
	return 0;