diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/usb/usbmixer.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c index f127bfd97c07..539b427d08c6 100644 --- a/sound/usb/usbmixer.c +++ b/sound/usb/usbmixer.c | |||
@@ -470,6 +470,15 @@ static int mixer_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag, | |||
470 | */ | 470 | */ |
471 | scale[2] = (convert_signed_value(cval, cval->min) * 100) / 256; | 471 | scale[2] = (convert_signed_value(cval, cval->min) * 100) / 256; |
472 | scale[3] = (convert_signed_value(cval, cval->max) * 100) / 256; | 472 | scale[3] = (convert_signed_value(cval, cval->max) * 100) / 256; |
473 | if (scale[3] <= scale[2]) { | ||
474 | /* something is wrong; assume it's either from/to 0dB */ | ||
475 | if (scale[2] < 0) | ||
476 | scale[3] = 0; | ||
477 | else if (scale[2] > 0) | ||
478 | scale[2] = 0; | ||
479 | else /* totally crap, return an error */ | ||
480 | return -EINVAL; | ||
481 | } | ||
473 | if (copy_to_user(_tlv, scale, sizeof(scale))) | 482 | if (copy_to_user(_tlv, scale, sizeof(scale))) |
474 | return -EFAULT; | 483 | return -EFAULT; |
475 | return 0; | 484 | return 0; |