[alsa-devel] [PATCH] ASoC: max98090: support 20-bit and 24-bit audio format

Tzung-Bi Shih tzungbi at google.com
Mon Jan 28 10:15:07 CET 2019


>From datasheet of max98090:
If RJ = 1,
  WS = 00, 16 bits
  WS = 01, 20 bits
  WS = 10, 24 bits

Signed-off-by: Tzung-Bi Shih <tzungbi at google.com>
---
 sound/soc/codecs/max98090.c | 16 +++++++++++++++-
 sound/soc/codecs/max98090.h |  3 +++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index c97f21836c66..0ecc2f1accb5 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -1942,7 +1942,21 @@ static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
 	switch (params_width(params)) {
 	case 16:
 		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
-			M98090_WS_MASK, 0);
+			M98090_RJ_MASK, M98090_RJ_MASK);
+		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
+			M98090_WS_MASK, M98090_FORMAT_S16_LE);
+		break;
+	case 20:
+		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
+			M98090_RJ_MASK, M98090_RJ_MASK);
+		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
+			M98090_WS_MASK, M98090_FORMAT_S20_LE;
+		break;
+	case 24:
+		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
+			M98090_RJ_MASK, M98090_RJ_MASK);
+		snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT,
+			M98090_WS_MASK, M98090_FORMAT_S24_LE);
 		break;
 	default:
 		return -EINVAL;
diff --git a/sound/soc/codecs/max98090.h b/sound/soc/codecs/max98090.h
index b1572a2d19da..9088f9d64ff2 100644
--- a/sound/soc/codecs/max98090.h
+++ b/sound/soc/codecs/max98090.h
@@ -706,6 +706,9 @@
 #define M98090_WS_SHIFT			0
 #define M98090_WS_WIDTH			2
 #define M98090_WS_NUM			(1<<M98090_WS_WIDTH)
+#define M98090_FORMAT_S16_LE		(0<<0)
+#define M98090_FORMAT_S20_LE		(1<<0)
+#define M98090_FORMAT_S24_LE		(2<<0)
 
 /*
  * M98090_REG_TDM_CONTROL
-- 
2.20.1.495.gaa96b0ce6b-goog



More information about the Alsa-devel mailing list