From 43c4c4f014a1330bc58bbec611f7567265753f09 Mon Sep 17 00:00:00 2001 From: Jason Zhu Date: Sun, 23 Mar 2025 18:58:13 +0800 Subject: [PATCH] ASoC: codecs: rk_dsm: support master & slave mode Change-Id: I33d506d0b5fc73d0f8f0974907f3b86f5ff6c8f2 Signed-off-by: Jason Zhu --- sound/soc/codecs/rk_dsm.c | 19 +++++++++++++------ sound/soc/codecs/rk_dsm.h | 1 + 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sound/soc/codecs/rk_dsm.c b/sound/soc/codecs/rk_dsm.c index 25f70d8b5cc5..9a189b7fcea3 100644 --- a/sound/soc/codecs/rk_dsm.c +++ b/sound/soc/codecs/rk_dsm.c @@ -331,13 +331,9 @@ static int rk_dsm_set_dai_fmt(struct snd_soc_dai *dai, snd_soc_component_get_drvdata(dai->component); unsigned int mask = 0, val = 0; - /* master mode only */ - regmap_update_bits(rd->regmap, I2S_CKR1, - DSM_I2S_CKR1_MSS_MASK, - DSM_I2S_CKR1_MSS_MASTER); - mask = DSM_I2S_CKR1_CKP_MASK | - DSM_I2S_CKR1_RLP_MASK; + DSM_I2S_CKR1_RLP_MASK | + DSM_I2S_CKR1_MSS_MASK; switch (fmt & SND_SOC_DAIFMT_INV_MASK) { case SND_SOC_DAIFMT_NB_NF: @@ -360,6 +356,17 @@ static int rk_dsm_set_dai_fmt(struct snd_soc_dai *dai, return -EINVAL; } + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { + case SND_SOC_DAIFMT_CBS_CFS: + val |= DSM_I2S_CKR1_MSS_SLAVE; + break; + case SND_SOC_DAIFMT_CBM_CFM: + val |= DSM_I2S_CKR1_MSS_MASTER; + break; + default: + return -EINVAL; + } + regmap_update_bits(rd->regmap, I2S_CKR1, mask, val); return 0; diff --git a/sound/soc/codecs/rk_dsm.h b/sound/soc/codecs/rk_dsm.h index 51886804ec69..d9e1e9cf24fb 100644 --- a/sound/soc/codecs/rk_dsm.h +++ b/sound/soc/codecs/rk_dsm.h @@ -156,6 +156,7 @@ #define DSM_I2S_CKR1_CKP_INVERTED BIT(2) #define DSM_I2S_CKR1_CKP_NORMAL 0 #define DSM_I2S_CKR1_MSS_MASK BIT(3) +#define DSM_I2S_CKR1_MSS_SLAVE BIT(3) #define DSM_I2S_CKR1_MSS_MASTER 0 /* I2S_XFER */ #define DSM_I2S_XFER_RXS_MASK BIT(1)