From bdfe4ae15bcb7f18d1e9b881271a4c66b3103e5e Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 16 Jun 2009 14:27:35 +0200 Subject: [PATCH] --- yaml --- r: 157917 b: refs/heads/master c: eedbdf03a25ab3b2c332ad7fa205aa8ffbe477ba h: refs/heads/master i: 157915: 502e1c6ef37c2e5e1d0fa71d52af7e294c4cf3e2 v: v3 --- [refs] | 2 +- trunk/sound/usb/usbmixer.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b3872b2cc020..ceefb7fd10bb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b8e1c73f4608b8b9ca1e8f1a09f9fd8684e78071 +refs/heads/master: eedbdf03a25ab3b2c332ad7fa205aa8ffbe477ba diff --git a/trunk/sound/usb/usbmixer.c b/trunk/sound/usb/usbmixer.c index f127bfd97c07..539b427d08c6 100644 --- a/trunk/sound/usb/usbmixer.c +++ b/trunk/sound/usb/usbmixer.c @@ -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;