Subject: [RESEND PATCH v12 4/6] ASoC: amd: add ACP3x TDM mode support

ACP3x I2S (CPU DAI) can act in normal I2S and TDM modes. Added support
for TDM mode. Desired mode can be selected from ASoC machine driver.

Signed-off-by: Ravulapati Vishnu vardhan rao <[email protected]>
---
sound/soc/amd/raven/acp3x-i2s.c | 24 ++++++++++++++++++++----
sound/soc/amd/raven/acp3x.h | 1 +
2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/sound/soc/amd/raven/acp3x-i2s.c b/sound/soc/amd/raven/acp3x-i2s.c
index 7f05782..cea7311 100644
--- a/sound/soc/amd/raven/acp3x-i2s.c
+++ b/sound/soc/amd/raven/acp3x-i2s.c
@@ -70,11 +70,27 @@ static int acp3x_i2s_set_tdm_slot(struct snd_soc_dai *cpu_dai,

frm_len = FRM_LEN | (slots << 15) | (slot_len << 18);
if (adata->substream_type == SNDRV_PCM_STREAM_PLAYBACK) {
- reg_val = mmACP_BTTDM_ITER;
- frmt_val = mmACP_BTTDM_TXFRMT;
+ switch (adata->i2s_instance) {
+ case I2S_BT_INSTANCE:
+ reg_val = mmACP_BTTDM_ITER;
+ frmt_reg = mmACP_BTTDM_TXFRMT;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ reg_val = mmACP_I2STDM_ITER;
+ frmt_reg = mmACP_I2STDM_TXFRMT;
+ }
} else {
- reg_val = mmACP_BTTDM_IRER;
- frmt_val = mmACP_BTTDM_RXFRMT;
+ switch (adata->i2s_instance) {
+ case I2S_BT_INSTANCE:
+ reg_val = mmACP_BTTDM_IRER;
+ frmt_reg = mmACP_BTTDM_RXFRMT;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ reg_val = mmACP_I2STDM_IRER;
+ frmt_reg = mmACP_I2STDM_RXFRMT;
+ }
}
val = rv_readl(adata->acp3x_base + reg_val);
rv_writel(val | 0x2, adata->acp3x_base + reg_val);
diff --git a/sound/soc/amd/raven/acp3x.h b/sound/soc/amd/raven/acp3x.h
index ed1acbc..3c28644 100644
--- a/sound/soc/amd/raven/acp3x.h
+++ b/sound/soc/amd/raven/acp3x.h
@@ -78,6 +78,7 @@ struct acp3x_platform_info {
struct i2s_dev_data {
bool tdm_mode;
unsigned int i2s_irq;
+ u16 i2s_instance;
u32 tdm_fmt;
u32 substream_type;
void __iomem *acp3x_base;
--
2.7.4


2019-12-03 10:33:01

by Agrawal, Akshu

[permalink] [raw]
Subject: Re: [RESEND PATCH v12 4/6] ASoC: amd: add ACP3x TDM mode support


On 11/22/2019 3:14 PM, Ravulapati Vishnu vardhan rao wrote:
> ACP3x I2S (CPU DAI) can act in normal I2S and TDM modes. Added support
> for TDM mode. Desired mode can be selected from ASoC machine driver.
>
> Signed-off-by: Ravulapati Vishnu vardhan rao <[email protected]>
> ---
> sound/soc/amd/raven/acp3x-i2s.c | 24 ++++++++++++++++++++----
> sound/soc/amd/raven/acp3x.h | 1 +
> 2 files changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/sound/soc/amd/raven/acp3x-i2s.c b/sound/soc/amd/raven/acp3x-i2s.c
> index 7f05782..cea7311 100644
> --- a/sound/soc/amd/raven/acp3x-i2s.c
> +++ b/sound/soc/amd/raven/acp3x-i2s.c
> @@ -70,11 +70,27 @@ static int acp3x_i2s_set_tdm_slot(struct snd_soc_dai *cpu_dai,
>
> frm_len = FRM_LEN | (slots << 15) | (slot_len << 18);
> if (adata->substream_type == SNDRV_PCM_STREAM_PLAYBACK) {
> - reg_val = mmACP_BTTDM_ITER;
> - frmt_val = mmACP_BTTDM_TXFRMT;
> + switch (adata->i2s_instance) {
> + case I2S_BT_INSTANCE:
> + reg_val = mmACP_BTTDM_ITER;
> + frmt_reg = mmACP_BTTDM_TXFRMT;

Patch 2 of this series declares frmt_val, frmt_reg should cause build
errors.

Thanks,

Akshu