Skip to content

Commit cf52966

Browse files
committed
Add: multi codec support in simple-card
1 parent edb5a1d commit cf52966

File tree

7 files changed

+43
-217
lines changed

7 files changed

+43
-217
lines changed

ac101.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,7 +1319,6 @@ static int ac10x_hw_params(struct snd_pcm_substream *substream,
13191319
break;
13201320
}
13211321

1322-
13231322
/* set LRCK/BCLK ratio */
13241323
aif1_lrck_div = aif1_slot_size * channels;
13251324
for (i = 0; i < ARRAY_SIZE(codec_aif1_lrck); i++) {
@@ -1332,7 +1331,7 @@ static int ac10x_hw_params(struct snd_pcm_substream *substream,
13321331
/* set PLL output freq */
13331332
freq_out = 24576000;
13341333
for (i = 0; i < ARRAY_SIZE(codec_aif1_fs); i++) {
1335-
if (codec_aif1_fs[i].samp_rate == params_rate(params)) {
1334+
if (codec_aif1_fs[i].samp_rate == params_rate(params)) {
13361335
if (codec_dai->capture_active && dmic_used && codec_aif1_fs[i].samp_rate == 44100) {
13371336
snd_soc_update_bits(codec, AIF_SR_CTRL, (0xf<<AIF1_FS), (0x4<<AIF1_FS));
13381337
} else {
@@ -1372,6 +1371,9 @@ static int ac10x_hw_params(struct snd_pcm_substream *substream,
13721371
snd_soc_update_bits(codec, AIF_CLK_CTRL, (0xf<<AIF1_BCLK_DIV), i<<AIF1_BCLK_DIV);
13731372
}
13741373

1374+
AC10X_DBG("rate: %d , channels: %d , samp_res: %d",
1375+
params_rate(params), channels, aif1_slot_size);
1376+
13751377
AC10X_DBG("%s() L%d ---\n", __func__, __LINE__);
13761378
return 0;
13771379
}
@@ -1632,15 +1634,15 @@ static struct snd_soc_dai_driver ac10x_dai[] = {
16321634
.name = "ac10x-aif1",
16331635
.id = AIF1_CLK,
16341636
.playback = {
1635-
.stream_name = "AIF1 Playback",
1637+
.stream_name = "Playback",
16361638
.channels_min = 1,
16371639
.channels_max = 8,
16381640
.rates = ac10x_RATES,
16391641
.formats = ac10x_FORMATS,
16401642
},
16411643
#if 0
16421644
.capture = {
1643-
.stream_name = "AIF1 Capture",
1645+
.stream_name = "Capture",
16441646
.channels_min = 1,
16451647
.channels_max = 8,
16461648
.rates = ac10x_RATES,

ac108.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,8 @@ static int ac108_configure_clocking(struct ac108_priv *ac108, unsigned int rate)
823823
for (i = 0; i < ARRAY_SIZE(ac108_pll_div_list); i++) {
824824
if (ac108_pll_div_list[i].freq_in == ac108->sysclk && ac108_pll_div_list[i].freq_out % rate == 0) {
825825
ac108_pll_div = ac108_pll_div_list[i];
826-
pr_err("AC108 PLL freq_in match:%u, freq_out:%u\n\n", ac108_pll_div.freq_in, ac108_pll_div.freq_out);
826+
dev_dbg(&ac108->i2c[_MASTER_INDEX]->dev, "AC108 PLL freq_in match:%u, freq_out:%u\n\n",
827+
ac108_pll_div.freq_in, ac108_pll_div.freq_out);
827828
break;
828829
}
829830
}
@@ -973,7 +974,7 @@ static int ac108_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_h
973974
return -EINVAL;
974975
}
975976

976-
dev_dbg(dai->dev, "rate:%d \n", params_rate(params));
977+
dev_dbg(dai->dev, "params rate: %d\n", params_rate(params));
977978

978979
for (i = 0; i < ARRAY_SIZE(ac108_sample_rate); i++) {
979980
if (ac108_sample_rate[i].real_val == params_rate(params) / (ac108->data_protocol + 1UL)) {

seeed-8mic-voicecard-overlay.dts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@
8686
/* below is dummy master, real clock master is ac101 */
8787
bitclock-master = <&codec0_dai>;
8888
frame-master = <&codec0_dai>;
89+
/* bitclock-inversion; */
90+
/* frame-inversion; */
8991

9092
cpu {
9193
sound-dai = <&i2s>;
@@ -106,6 +108,8 @@
106108
format = "dsp_a";
107109
bitclock-master = <&codec1_dai>;
108110
frame-master = <&codec1_dai>;
111+
/* bitclock-inversion; */
112+
/* frame-inversion; */
109113

110114
cpu {
111115
sound-dai = <&i2s>;

simple-card.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@
2222
#include <sound/soc-dai.h>
2323
#include <sound/soc.h>
2424

25+
/*
26+
* single codec:
27+
* 0 - allow multi codec
28+
* 1 - yes
29+
*/
30+
#define _SINGLE_CODEC 1
31+
2532
struct asoc_simple_jack {
2633
struct snd_soc_jack jack;
2734
struct snd_soc_jack_pin pin;
@@ -205,9 +212,10 @@ EXPORT_SYMBOL(register_start_clock);
205212

206213
static int asoc_simple_card_trigger(struct snd_pcm_substream *substream, int cmd)
207214
{
215+
struct snd_soc_pcm_runtime *rtd = substream->private_data;
208216
int ret = 0;
209217

210-
printk("%s() stream=%d cmd=%d\n",
218+
dev_dbg(rtd->card->dev, "%s() stream=%d cmd=%d\n",
211219
__FUNCTION__, substream->stream, cmd);
212220

213221
switch (cmd) {
@@ -311,9 +319,18 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
311319
if (ret < 0)
312320
goto dai_link_of_err;
313321

322+
#if _SINGLE_CODEC
314323
ret = asoc_simple_card_parse_codec(codec, dai_link, DAI, CELL);
315324
if (ret < 0)
316325
goto dai_link_of_err;
326+
#else
327+
ret = snd_soc_of_get_dai_link_codecs(dev, codec, dai_link);
328+
if (ret < 0) {
329+
dev_err(dev, "parse codec info error %d\n", ret);
330+
goto dai_link_of_err;
331+
}
332+
dev_dbg(dev, "dai_link num_codecs = %d\n", dai_link->num_codecs);
333+
#endif
317334

318335
ret = asoc_simple_card_parse_platform(plat, dai_link, DAI, CELL);
319336
if (ret < 0)
@@ -345,14 +362,21 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
345362
if (ret < 0)
346363
goto dai_link_of_err;
347364

365+
#if _SINGLE_CODEC
348366
ret = asoc_simple_card_canonicalize_dailink(dai_link);
349367
if (ret < 0)
350368
goto dai_link_of_err;
369+
#endif
351370

352371
ret = asoc_simple_card_set_dailink_name(dev, dai_link,
353372
"%s-%s",
354373
dai_link->cpu_dai_name,
355-
dai_link->codec_dai_name);
374+
#if _SINGLE_CODEC
375+
dai_link->codec_dai_name
376+
#else
377+
dai_link->codecs[0].dai_name
378+
#endif
379+
);
356380
if (ret < 0)
357381
goto dai_link_of_err;
358382

@@ -365,7 +389,11 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
365389
dai_link->cpu_dai_name,
366390
dai_props->cpu_dai.sysclk);
367391
dev_dbg(dev, "\tcodec : %s / %d\n",
392+
#if _SINGLE_CODEC
368393
dai_link->codec_dai_name,
394+
#else
395+
dai_link->codecs[0].dai_name,
396+
#endif
369397
dai_props->codec_dai.sysclk);
370398

371399
asoc_simple_card_canonicalize_cpu(dai_link, single_cpu);

snd-soc-ac101.mod.c

Lines changed: 0 additions & 72 deletions
This file was deleted.

snd-soc-ac108.mod.c

Lines changed: 0 additions & 68 deletions
This file was deleted.

snd-soc-simple-card.mod.c

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)