summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorXiaojun Sang <xsang@codeaurora.org>2016-08-23 15:53:39 +0800
committerXiaojun Sang <xsang@codeaurora.org>2016-08-29 15:06:10 +0800
commitc9b0b7c45da36132070ba6a00a6922f528a7c614 (patch)
tree13427485be2cd8720c7e5b00cb9737dded15de4f /sound
parentef634bf6280c626d818bfd4a44f414061fafcae2 (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.c10
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;
}