aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/0630-Audio-issue-fix-EMBSWDEV-6837.patch
blob: b54ed94ed303509648e9c99cd96bc116f775729b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
From ba43ff99240a7e4871540248061b5867f14cd1b7 Mon Sep 17 00:00:00 2001
From: Sudheesh Mavila <sudheesh.mavila@amd.com>
Date: Tue, 19 Mar 2019 15:52:27 +0530
Subject: [PATCH 0630/2940] Audio issue fix EMBSWDEV-6837

Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
---
 sound/soc/amd/raven/acp3x-dummy5102.c |  2 +-
 sound/soc/amd/raven/acp3x-pcm-dma.c   | 23 +++++++++++------------
 2 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/sound/soc/amd/raven/acp3x-dummy5102.c b/sound/soc/amd/raven/acp3x-dummy5102.c
index 5ea717f26a4c..9b0f523fd571 100755
--- a/sound/soc/amd/raven/acp3x-dummy5102.c
+++ b/sound/soc/amd/raven/acp3x-dummy5102.c
@@ -88,7 +88,7 @@ static struct snd_soc_dai_link acp3x_dai_w5102[] = {
 		.cpu_dai_name = "acp3x_rv_i2s.0",
 		.codec_dai_name = "dummy_w5102_dai",
 		.codec_name = "dummy_w5102.0",
-                .dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF
+		.dai_fmt =     SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
 				| SND_SOC_DAIFMT_CBM_CFM,
 		.ops = &acp3x_wm5102_ops,
 		.init = acp3x_init,
diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c
index 06388f3a938d..fb7d4849afd5 100755
--- a/sound/soc/amd/raven/acp3x-pcm-dma.c
+++ b/sound/soc/amd/raven/acp3x-pcm-dma.c
@@ -66,7 +66,7 @@ static const struct snd_pcm_hardware acp3x_pcm_hardware_playback = {
 		   SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S24_LE |
 		   SNDRV_PCM_FMTBIT_S32_LE,
 	.channels_min = 2,
-	.channels_max = 6,
+	.channels_max = 8,
 	.rates = SNDRV_PCM_RATE_8000_96000,
 	.rate_min = 8000,
 	.rate_max = 96000,
@@ -504,22 +504,22 @@ 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 slot_len;
+	u16 resolution;
 
 	struct i2s_dev_data *adata = snd_soc_dai_get_drvdata(cpu_dai);
 
 	switch (slot_width) {
 	case 8:
-		slot_len = 8;
+		resolution = 0;
 	break;
 	case 16:
-		slot_len = 16;
+		resolution = 2;
 	break;
 	case 24:
-		slot_len = 24;
+		resolution = 4;
 	break;
 	case 32:
-		slot_len = 0;
+		resolution = 5;
 	break;
 	default:
 		return -EINVAL;
@@ -531,7 +531,7 @@ static int acp3x_dai_set_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
 	val = rv_readl(adata->acp3x_base + mmACP_BTTDM_IRER);
 	rv_writel((val | 0x2), adata->acp3x_base + mmACP_BTTDM_IRER);
 
-	val = (FRM_LEN | ((slots) << 15) | (slot_len << 18));
+	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);
 
@@ -543,7 +543,6 @@ static int acp3x_dai_i2s_hwparams(struct snd_pcm_substream *substream,
 				struct snd_pcm_hw_params *params,
 				struct snd_soc_dai *dai)
 {
-	u32 val = 0;
 	struct i2s_stream_instance *rtd = substream->runtime->private_data;
 
 	switch (params_format(params)) {
@@ -565,12 +564,12 @@ static int acp3x_dai_i2s_hwparams(struct snd_pcm_substream *substream,
 		return -EINVAL;
 	}
 
-	val = rv_readl(rtd->acp3x_base + mmACP_BTTDM_ITER);
-	val = val | (rtd->xfer_resolution  << 3);
 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-		rv_writel(val, rtd->acp3x_base + mmACP_BTTDM_ITER);
+		rv_writel((rtd->xfer_resolution  << 3),
+			rtd->acp3x_base + mmACP_BTTDM_ITER);
 	else
-		rv_writel(val, rtd->acp3x_base + mmACP_BTTDM_IRER);
+		rv_writel((rtd->xfer_resolution  << 3),
+			rtd->acp3x_base + mmACP_BTTDM_IRER);
 
 	return 0;
 }
-- 
2.17.1