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: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c
index f127bfd..539b427 100644
--- a/sound/usb/usbmixer.c
+++ b/sound/usb/usbmixer.c
@@ -470,6 +470,15 @@
 	 */
 	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;