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
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