[alsa-devel] [RFC 07/12] ASoC: core: Change SOC_SINGLE/DOUBLE_VALUE representation

Peter Ujfalusi peter.ujfalusi at ti.com
Tue Oct 4 13:39:44 CEST 2011


SOC_SINGLE/DOUBLE_VALUE is used for mixer controls, where the
bits are within one register.
Assign .rreg to be the same as .reg for these types.

With this change we can tell if the mixer in question:
is mono:
 mc->reg == mc->rreg && mc->shift == mc->rshift

is stereo, within single register:
 mc->reg == mc->rreg && mc->shift != mc->rshift

is stereo, in two registers:
 mc->reg != mc->rreg && mc->shift == mc->rshift

The patch provide a small inline function to query, if the mixer
is stereo, or mono.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi at ti.com>
---
 include/sound/soc.h |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/include/sound/soc.h b/include/sound/soc.h
index 9d0524a..59e72a8 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -30,8 +30,9 @@
  */
 #define SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, xmax, xinvert) \
 	((unsigned long)&(struct soc_mixer_control) \
-	{.reg = xreg, .shift = shift_left, .rshift = shift_right, \
-	.max = xmax, .platform_max = xmax, .invert = xinvert})
+	{.reg = xreg, .rreg = xreg, .shift = shift_left, \
+	.rshift = shift_right, .max = xmax, .platform_max = xmax, \
+	.invert = xinvert})
 #define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) \
 	SOC_DOUBLE_VALUE(xreg, xshift, xshift, xmax, xinvert)
 #define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \
@@ -946,6 +947,18 @@ static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card)
 	INIT_LIST_HEAD(&card->dapm_list);
 }
 
+static inline int snd_soc_volsw_is_stereo(struct soc_mixer_control *mc)
+{
+	if (mc->reg == mc->rreg && mc->shift == mc->rshift)
+		return 0;
+	/*
+	 * mc->reg == mc->rreg && mc->shift != mc->rshift, or
+	 * mc->reg != mc->rreg && mc->shift == mc->rshift means that the control
+	 * is stereo (bits in one register or in two registers)
+	 */
+	return 1;
+}
+
 int snd_soc_util_init(void);
 void snd_soc_util_exit(void);
 
-- 
1.7.7



More information about the Alsa-devel mailing list