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
|