diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index f4dc3d445aae..c7c507563c67 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -196,7 +196,10 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; uinfo->value.integer.min = 0; - uinfo->value.integer.max = platform_max - mc->min; + if (uinfo->type == SNDRV_CTL_ELEM_TYPE_INTEGER) + uinfo->value.integer.max = platform_max - mc->min; + else + uinfo->value.integer.max = platform_max; return 0; } EXPORT_SYMBOL_GPL(snd_soc_info_volsw); @@ -216,15 +219,11 @@ 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. No further adjustment is necessary. */ - uinfo->value.integer.max += mc->min; - return 0; } EXPORT_SYMBOL_GPL(snd_soc_info_volsw_sx);