diff options
Diffstat (limited to 'mixer.c')
-rw-r--r-- | mixer.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -383,12 +383,20 @@ int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value) if (ret < 0) return ret; + if (value > mixer_ctl_get_range_max(ctl)) + value = mixer_ctl_get_range_max(ctl); + switch (ctl->info->type) { case SNDRV_CTL_ELEM_TYPE_BOOLEAN: ev.value.integer.value[id] = !!value; break; case SNDRV_CTL_ELEM_TYPE_INTEGER: + if ((value < mixer_ctl_get_range_min(ctl)) || + (value > mixer_ctl_get_range_max(ctl))) { + return -EINVAL; + } + ev.value.integer.value[id] = value; break; |