ASoC: ops: Fix integer detection for when max possible values > 1
authorStefan Binding <sbinding@opensource.cirrus.com>
Fri, 17 Jun 2022 15:36:06 +0000 (16:36 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 17 Jun 2022 17:25:23 +0000 (18:25 +0100)
commit442302003bd2b151e12d52b0af9a7dac131bf931
treecb23bf23d48aad72ed4e16ebf72da4aad68d8608
parentba46bd04a4218defa2b35d84983e915e166f1572
ASoC: ops: Fix integer detection for when max possible values > 1

The standard snd_soc_info_volsw() allows a two value control to be
defined as an integer control only if the control name ends in
"Volume". It achieves this by creating a substring if it contains
" Volume", and ensuring this exists at the end of the name. The
volume substring is then used to decide whether the type is a
SNDRV_CTL_ELEM_TYPE_INTEGER or SNDRV_CTL_ELEM_TYPE_BOOLEAN.
However this volume substring is only computed for a two value
control.
This means for controls where there are more than two possible
values, the substring is never created, so in this case the
substring remains NULL, and the condition yields
SNDRV_CTL_ELEM_TYPE_BOOLEAN, even though there are more than 2
possible values.
If there are more than 2 possible values for the control,
then it should always be an integer control.

Fixes: aa2a4b897132 ("ASoC: ops: Fix boolean/integer detection for simple controls")

Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20220617153606.2619457-1-sbinding@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-ops.c