aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2016-02-09 14:11:52 +0100
committerDanny Baumann <dannybaumann@web.de>2016-02-09 14:11:52 +0100
commitd477bf7d9ca2920bbf9e2cf1a7eb8cba56634596 (patch)
tree2d50eb5f27d383793acc397e7c4f5cda627450bd
parentd762c50816527af23c2927df2f1d97948229c770 (diff)
downloadandroid_external_tinyalsa-replicant-6.0-0004-rc6.tar.gz
android_external_tinyalsa-replicant-6.0-0004-rc6.tar.bz2
android_external_tinyalsa-replicant-6.0-0004-rc6.zip
Qualcomm's sound drivers (wrongly) set 0xffffffff as range maximum in a lot of cases, which essentially means they set that maximum value to -1 due to signed integer value overflow. Instead of patching all the kernels accordingly, drop the range check for such invalid ranges. Change-Id: I4efe0010c316f1fbfbbc004b51fbd5d40d1e1d1e
-rw-r--r--mixer.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/mixer.c b/mixer.c
index 2028a15..4b1310c 100644
--- a/mixer.c
+++ b/mixer.c
@@ -393,12 +393,14 @@ int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value)
ev.value.integer.value[id] = !!value;
break;
- case SNDRV_CTL_ELEM_TYPE_INTEGER:
- if (value > mixer_ctl_get_range_max(ctl) ||
- value < mixer_ctl_get_range_min(ctl))
+ case SNDRV_CTL_ELEM_TYPE_INTEGER: {
+ int min = mixer_ctl_get_range_min(ctl);
+ int max = mixer_ctl_get_range_max(ctl);
+ if (min < max && (value < min || value > max))
return -EINVAL;
ev.value.integer.value[id] = value;
break;
+ }
case SNDRV_CTL_ELEM_TYPE_ENUMERATED:
if (value < 0 || value >= mixer_ctl_get_num_enums(ctl))