diff options
author | Xiaojun Sang <xsang@codeaurora.org> | 2016-08-23 15:53:39 +0800 |
---|---|---|
committer | Xiaojun Sang <xsang@codeaurora.org> | 2016-08-29 15:06:10 +0800 |
commit | c9b0b7c45da36132070ba6a00a6922f528a7c614 (patch) | |
tree | 13427485be2cd8720c7e5b00cb9737dded15de4f /sound | |
parent | ef634bf6280c626d818bfd4a44f414061fafcae2 (diff) |
ASoC: sound: soc: fix incorrect max value
1. Max value stands for number of levels in SX control. The value
was adjusted inappropriately, which causes inconsistency between
max and min value.
2. Code assumes negative value of mc->min. Positive mc->min leads
to incorrect number of levels. The fix covers the risk.
CRs-Fixed: 1053735
Change-Id: I71bd8f11ff9faff9252129d84c1a80845fc2fe2a
Signed-off-by: Xiaojun Sang <xsang@codeaurora.org>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/soc-ops.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index b2dd69055927..c48d8c8d9766 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -201,7 +201,7 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; uinfo->value.integer.min = 0; - if (mc->min < 0 && (uinfo->type == SNDRV_CTL_ELEM_TYPE_INTEGER)) + if (uinfo->type == SNDRV_CTL_ELEM_TYPE_INTEGER) uinfo->value.integer.max = platform_max - mc->min; else uinfo->value.integer.max = platform_max; @@ -224,14 +224,12 @@ EXPORT_SYMBOL_GPL(snd_soc_info_volsw); int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { - struct soc_mixer_control *mc = - (struct soc_mixer_control *)kcontrol->private_value; - snd_soc_info_volsw(kcontrol, uinfo); /* Max represents the number of levels in an SX control not the - * maximum value, so add the minimum value back on + * maximum value. + * uinfo->value.integer.max is set to number of levels + * in snd_soc_info_volsw_sx. No further adjustment is necessary. */ - uinfo->value.integer.max += mc->min; return 0; } |