aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch126
1 files changed, 0 insertions, 126 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch
deleted file mode 100644
index 83a39fb0..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1106-ASoC-AMD-add-ACP3x-TDM-mode-support.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From 8c762c42530c4add00702868922036264e249a32 Mon Sep 17 00:00:00 2001
-From: Maruthi Srinivas Bayyavarapu <Maruthi.Bayyavarapu@amd.com>
-Date: Thu, 30 Mar 2017 15:20:28 +0530
-Subject: [PATCH 1106/4131] 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: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- sound/soc/amd/raven/acp3x-pcm-dma.c | 63 ++++++++++++++++++++++++++++++++++++-
- sound/soc/amd/raven/acp3x.h | 1 +
- 2 files changed, 63 insertions(+), 1 deletion(-)
-
-diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c
-index 5e589dc..f62bb7f 100644
---- a/sound/soc/amd/raven/acp3x-pcm-dma.c
-+++ b/sound/soc/amd/raven/acp3x-pcm-dma.c
-@@ -25,7 +25,9 @@
- #include "acp3x.h"
-
- struct i2s_dev_data {
-+ bool tdm_mode;
- unsigned int i2s_irq;
-+ u32 tdm_fmt;
- void __iomem *acp3x_base;
- struct snd_pcm_substream *play_stream;
- struct snd_pcm_substream *capture_stream;
-@@ -35,7 +37,6 @@ struct i2s_stream_instance {
- u16 num_pages;
- u16 channels;
- u32 xfer_resolution;
-- u32 fmt;
- u32 val;
- struct page *pg;
- void __iomem *acp3x_base;
-@@ -436,6 +437,64 @@ static struct snd_soc_platform_driver acp3x_asoc_platform = {
- .pcm_new = acp3x_dma_new,
- };
-
-+static int acp3x_dai_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
-+{
-+
-+ struct i2s_dev_data *adata = snd_soc_dai_get_drvdata(cpu_dai);
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ adata->tdm_mode = false;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ adata->tdm_mode = true;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int acp3x_dai_set_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
-+ u32 rx_mask, int slots, int slot_width)
-+{
-+ u32 val = 0;
-+ u16 resolution;
-+
-+ struct i2s_dev_data *adata = snd_soc_dai_get_drvdata(cpu_dai);
-+
-+ switch (slot_width) {
-+ case 8:
-+ resolution = 0;
-+ break;
-+ case 16:
-+ resolution = 2;
-+ break;
-+ case 24:
-+ resolution = 4;
-+ break;
-+ case 32:
-+ resolution = 5;
-+ break;
-+ default:
-+ return -EINVAL;
-+ break;
-+ }
-+
-+ val = rv_readl(adata->acp3x_base + mmACP_BTTDM_ITER);
-+ rv_writel((val | 0x2), adata->acp3x_base + mmACP_BTTDM_ITER);
-+ val = rv_readl(adata->acp3x_base + mmACP_BTTDM_IRER);
-+ rv_writel((val | 0x2), adata->acp3x_base + mmACP_BTTDM_IRER);
-+
-+ val = (FRM_LEN | ((slots-1) << 15) | (resolution << 18));
-+ rv_writel(val, adata->acp3x_base + mmACP_BTTDM_TXFRMT);
-+ rv_writel(val, adata->acp3x_base + mmACP_BTTDM_RXFRMT);
-+
-+ adata->tdm_fmt = val;
-+ return 0;
-+}
-+
- static int acp3x_dai_i2s_hwparams(struct snd_pcm_substream *substream,
- struct snd_pcm_hw_params *params,
- struct snd_soc_dai *dai)
-@@ -519,6 +578,8 @@ static int acp3x_dai_i2s_trigger(struct snd_pcm_substream *substream,
- struct snd_soc_dai_ops acp3x_dai_i2s_ops = {
- .hw_params = acp3x_dai_i2s_hwparams,
- .trigger = acp3x_dai_i2s_trigger,
-+ .set_fmt = acp3x_dai_i2s_set_fmt,
-+ .set_tdm_slot = acp3x_dai_set_tdm_slot,
- };
-
- static struct snd_soc_dai_driver acp3x_i2s_dai_driver = {
-diff --git a/sound/soc/amd/raven/acp3x.h b/sound/soc/amd/raven/acp3x.h
-index d35d252..70fed97 100644
---- a/sound/soc/amd/raven/acp3x.h
-+++ b/sound/soc/amd/raven/acp3x.h
-@@ -9,6 +9,7 @@
- #define ACP_SRAM_PTE_OFFSET 0x02050000
- #define PAGE_SIZE_4K_ENABLE 0x2
- #define MEM_WINDOW_START 0x4000000
-+#define FRM_LEN 256
-
- #define PLAYBACK_MIN_NUM_PERIODS 2
- #define PLAYBACK_MAX_NUM_PERIODS 2
---
-2.7.4
-