Skip to content

Commit 5f78e1f

Browse files
Srinivasa Rao Mandadapubroonie
authored andcommitted
ASoC: qcom: Add driver support for audioreach solution
Add Machine driver support for audioreach solution, which uses ADSP in SC7280 based paltforms. Signed-off-by: Srinivasa Rao Mandadapu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 2a2ef68 commit 5f78e1f

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

sound/soc/qcom/sc7280.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
#include "../codecs/rt5682s.h"
2020
#include "common.h"
2121
#include "lpass.h"
22+
#include "qdsp6/q6afe.h"
2223

2324
#define DEFAULT_MCLK_RATE 19200000
2425
#define RT5682_PLL_FREQ (48000 * 512)
26+
#define MI2S_BCLK_RATE 1536000
2527

2628
struct sc7280_snd_data {
2729
struct snd_soc_card card;
@@ -79,6 +81,7 @@ static int sc7280_headset_init(struct snd_soc_pcm_runtime *rtd)
7981
case MI2S_PRIMARY:
8082
case LPASS_CDC_DMA_RX0:
8183
case LPASS_CDC_DMA_TX3:
84+
case TX_CODEC_DMA_TX_3:
8285
for_each_rtd_codec_dais(rtd, i, codec_dai) {
8386
rval = snd_soc_component_set_jack(component, &pdata->hs_jack, NULL);
8487
if (rval != 0 && rval != -ENOTSUPP) {
@@ -164,10 +167,14 @@ static int sc7280_init(struct snd_soc_pcm_runtime *rtd)
164167
switch (cpu_dai->id) {
165168
case MI2S_PRIMARY:
166169
case LPASS_CDC_DMA_TX3:
170+
case TX_CODEC_DMA_TX_3:
167171
return sc7280_headset_init(rtd);
168172
case LPASS_CDC_DMA_RX0:
169173
case LPASS_CDC_DMA_VA_TX0:
170174
case MI2S_SECONDARY:
175+
case RX_CODEC_DMA_RX_0:
176+
case SECONDARY_MI2S_RX:
177+
case VA_CODEC_DMA_TX_0:
171178
return 0;
172179
case LPASS_DP_RX:
173180
return sc7280_hdmi_init(rtd);
@@ -195,6 +202,10 @@ static int sc7280_snd_hw_params(struct snd_pcm_substream *substream,
195202
switch (cpu_dai->id) {
196203
case LPASS_CDC_DMA_TX3:
197204
case LPASS_CDC_DMA_RX0:
205+
case RX_CODEC_DMA_RX_0:
206+
case SECONDARY_MI2S_RX:
207+
case TX_CODEC_DMA_TX_3:
208+
case VA_CODEC_DMA_TX_0:
198209
for_each_rtd_codec_dais(rtd, i, codec_dai) {
199210
sruntime = snd_soc_dai_get_stream(codec_dai, substream->stream);
200211
if (sruntime != ERR_PTR(-ENOTSUPP))
@@ -245,6 +256,9 @@ static int sc7280_snd_prepare(struct snd_pcm_substream *substream)
245256
switch (cpu_dai->id) {
246257
case LPASS_CDC_DMA_RX0:
247258
case LPASS_CDC_DMA_TX3:
259+
case RX_CODEC_DMA_RX_0:
260+
case TX_CODEC_DMA_TX_3:
261+
case VA_CODEC_DMA_TX_0:
248262
return sc7280_snd_swr_prepare(substream);
249263
default:
250264
break;
@@ -263,6 +277,9 @@ static int sc7280_snd_hw_free(struct snd_pcm_substream *substream)
263277
switch (cpu_dai->id) {
264278
case LPASS_CDC_DMA_RX0:
265279
case LPASS_CDC_DMA_TX3:
280+
case RX_CODEC_DMA_RX_0:
281+
case TX_CODEC_DMA_TX_3:
282+
case VA_CODEC_DMA_TX_0:
266283
if (sruntime && data->stream_prepared[cpu_dai->id]) {
267284
sdw_disable_stream(sruntime);
268285
sdw_deprepare_stream(sruntime);
@@ -291,21 +308,37 @@ static void sc7280_snd_shutdown(struct snd_pcm_substream *substream)
291308
SNDRV_PCM_STREAM_PLAYBACK);
292309
}
293310
break;
311+
case SECONDARY_MI2S_RX:
312+
snd_soc_dai_set_sysclk(cpu_dai, Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
313+
0, SNDRV_PCM_STREAM_PLAYBACK);
314+
break;
294315
default:
295316
break;
296317
}
297318
}
298319

299320
static int sc7280_snd_startup(struct snd_pcm_substream *substream)
300321
{
322+
unsigned int fmt = SND_SOC_DAIFMT_CBS_CFS;
323+
unsigned int codec_dai_fmt = SND_SOC_DAIFMT_CBS_CFS;
301324
struct snd_soc_pcm_runtime *rtd = substream->private_data;
302325
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
326+
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
303327
int ret = 0;
304328

305329
switch (cpu_dai->id) {
306330
case MI2S_PRIMARY:
307331
ret = sc7280_rt5682_init(rtd);
308332
break;
333+
case SECONDARY_MI2S_RX:
334+
codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
335+
336+
snd_soc_dai_set_sysclk(cpu_dai, Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
337+
MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
338+
339+
snd_soc_dai_set_fmt(cpu_dai, fmt);
340+
snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
341+
break;
309342
default:
310343
break;
311344
}

0 commit comments

Comments
 (0)