diff mbox series

ASoC: ops: Fix boolean/integer detection for simple controls

Message ID 20220604105407.4055294-1-broonie@kernel.org (mailing list archive)
State Accepted
Commit aa2a4b897132169fbc6d32932644b95875cf9c7f
Headers show
Series ASoC: ops: Fix boolean/integer detection for simple controls | expand

Commit Message

Mark Brown June 4, 2022, 10:54 a.m. UTC
The standard snd_soc_info_volsw() detects if a control is a volume control
and needs to be reported as an integer even if it only has two values by
looking for the string " Volume" in the control name. This results in false
positives if the control has a name like "HP Volume Ramp Switch" since any
" Volume" is matched, not just a trailing one. Fix this by making sure that
we only match at the end of the control name.

Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/soc-ops.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Mark Brown June 14, 2022, 5:20 p.m. UTC | #1
On Sat, 4 Jun 2022 11:54:07 +0100, Mark Brown wrote:
> The standard snd_soc_info_volsw() detects if a control is a volume control
> and needs to be reported as an integer even if it only has two values by
> looking for the string " Volume" in the control name. This results in false
> positives if the control has a name like "HP Volume Ramp Switch" since any
> " Volume" is matched, not just a trailing one. Fix this by making sure that
> we only match at the end of the control name.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: ops: Fix boolean/integer detection for simple controls
      commit: aa2a4b897132169fbc6d32932644b95875cf9c7f

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c
index e11109dcaa50..0267e39de2a8 100644
--- a/sound/soc/soc-ops.c
+++ b/sound/soc/soc-ops.c
@@ -176,13 +176,21 @@  int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
 {
 	struct soc_mixer_control *mc =
 		(struct soc_mixer_control *)kcontrol->private_value;
+	const char *vol_string = NULL;
 	int max;
 
 	max = uinfo->value.integer.max = mc->max - mc->min;
 	if (mc->platform_max && mc->platform_max < max)
 		max = mc->platform_max;
 
-	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
+	/* Even two value controls ending in Volume should always be integer */
+	if (max == 1) {
+		vol_string = strstr(kcontrol->id.name, " Volume");
+		if (vol_string && strcmp(vol_string, " Volume"))
+			vol_string = NULL;
+	}
+
+	if (!vol_string)
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	else
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;