Skip to content

Commit 4fb7f4d

Browse files
morimotobroonie
authored andcommitted
ASoC: simple-card: use cpu/codec pointer on simple_dai_props
In DPCM case, it uses CPU-dummy / dummy-Codec dai links, and non DPCM case, it uses CPU-Codec dai links. Now, we want to merge simple-card and simple-scu-card. These sound cards are using silimar but not same logic on each functions. Then, of course we want to share same logic. To compromise, this patch uses cpu/codec pointer on simple-card. It is same logic with simple-scu-card, thus easy merging. This is prepare for merging audio card Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 2b320e0 commit 4fb7f4d

File tree

1 file changed

+36
-26
lines changed

1 file changed

+36
-26
lines changed

sound/soc/generic/simple-card.c

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
struct simple_card_data {
1919
struct snd_soc_card snd_card;
2020
struct simple_dai_props {
21-
struct asoc_simple_dai cpu_dai;
22-
struct asoc_simple_dai codec_dai;
21+
struct asoc_simple_dai *cpu_dai;
22+
struct asoc_simple_dai *codec_dai;
2323
struct snd_soc_dai_link_component codecs; /* single codec */
2424
struct snd_soc_dai_link_component platform;
2525
unsigned int mclk_fs;
@@ -28,6 +28,7 @@ struct simple_card_data {
2828
struct asoc_simple_jack hp_jack;
2929
struct asoc_simple_jack mic_jack;
3030
struct snd_soc_dai_link *dai_link;
31+
struct asoc_simple_dai *dais;
3132
};
3233

3334
#define simple_priv_to_card(priv) (&(priv)->snd_card)
@@ -47,13 +48,13 @@ static int asoc_simple_card_startup(struct snd_pcm_substream *substream)
4748
simple_priv_to_props(priv, rtd->num);
4849
int ret;
4950

50-
ret = asoc_simple_card_clk_enable(&dai_props->cpu_dai);
51+
ret = asoc_simple_card_clk_enable(dai_props->cpu_dai);
5152
if (ret)
5253
return ret;
5354

54-
ret = asoc_simple_card_clk_enable(&dai_props->codec_dai);
55+
ret = asoc_simple_card_clk_enable(dai_props->codec_dai);
5556
if (ret)
56-
asoc_simple_card_clk_disable(&dai_props->cpu_dai);
57+
asoc_simple_card_clk_disable(dai_props->cpu_dai);
5758

5859
return ret;
5960
}
@@ -65,9 +66,9 @@ static void asoc_simple_card_shutdown(struct snd_pcm_substream *substream)
6566
struct simple_dai_props *dai_props =
6667
simple_priv_to_props(priv, rtd->num);
6768

68-
asoc_simple_card_clk_disable(&dai_props->cpu_dai);
69+
asoc_simple_card_clk_disable(dai_props->cpu_dai);
6970

70-
asoc_simple_card_clk_disable(&dai_props->codec_dai);
71+
asoc_simple_card_clk_disable(dai_props->codec_dai);
7172
}
7273

7374
static int asoc_simple_set_clk_rate(struct asoc_simple_dai *simple_dai,
@@ -102,11 +103,11 @@ static int asoc_simple_card_hw_params(struct snd_pcm_substream *substream,
102103
if (mclk_fs) {
103104
mclk = params_rate(params) * mclk_fs;
104105

105-
ret = asoc_simple_set_clk_rate(&dai_props->codec_dai, mclk);
106+
ret = asoc_simple_set_clk_rate(dai_props->codec_dai, mclk);
106107
if (ret < 0)
107108
return ret;
108109

109-
ret = asoc_simple_set_clk_rate(&dai_props->cpu_dai, mclk);
110+
ret = asoc_simple_set_clk_rate(dai_props->cpu_dai, mclk);
110111
if (ret < 0)
111112
return ret;
112113

@@ -134,17 +135,16 @@ static const struct snd_soc_ops asoc_simple_card_ops = {
134135
static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
135136
{
136137
struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
137-
struct snd_soc_dai *codec = rtd->codec_dai;
138-
struct snd_soc_dai *cpu = rtd->cpu_dai;
139-
struct simple_dai_props *dai_props =
140-
simple_priv_to_props(priv, rtd->num);
138+
struct simple_dai_props *dai_props = simple_priv_to_props(priv, rtd->num);
141139
int ret;
142140

143-
ret = asoc_simple_card_init_dai(codec, &dai_props->codec_dai);
141+
ret = asoc_simple_card_init_dai(rtd->codec_dai,
142+
dai_props->codec_dai);
144143
if (ret < 0)
145144
return ret;
146145

147-
ret = asoc_simple_card_init_dai(cpu, &dai_props->cpu_dai);
146+
ret = asoc_simple_card_init_dai(rtd->cpu_dai,
147+
dai_props->cpu_dai);
148148
if (ret < 0)
149149
return ret;
150150

@@ -153,14 +153,14 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
153153

154154
static int asoc_simple_card_dai_link_of(struct device_node *node,
155155
struct simple_card_data *priv,
156-
int idx,
156+
int *dai_idx, int link_idx,
157157
bool is_top_level_node)
158158
{
159159
struct device *dev = simple_priv_to_dev(priv);
160-
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx);
161-
struct simple_dai_props *dai_props = simple_priv_to_props(priv, idx);
162-
struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai;
163-
struct asoc_simple_dai *codec_dai = &dai_props->codec_dai;
160+
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, link_idx);
161+
struct simple_dai_props *dai_props = simple_priv_to_props(priv, link_idx);
162+
struct asoc_simple_dai *cpu_dai;
163+
struct asoc_simple_dai *codec_dai;
164164
struct device_node *cpu = NULL;
165165
struct device_node *plat = NULL;
166166
struct device_node *codec = NULL;
@@ -193,6 +193,11 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
193193
goto dai_link_of_err;
194194
}
195195

196+
cpu_dai =
197+
dai_props->cpu_dai = &priv->dais[(*dai_idx)++];
198+
codec_dai =
199+
dai_props->codec_dai = &priv->dais[(*dai_idx)++];
200+
196201
ret = asoc_simple_card_parse_daifmt(dev, node, codec,
197202
prefix, &dai_link->dai_fmt);
198203
if (ret < 0)
@@ -290,6 +295,7 @@ static int asoc_simple_card_parse_of(struct simple_card_data *priv)
290295
struct device_node *dai_link;
291296
struct device_node *node = dev->of_node;
292297
int ret;
298+
int link_idx, dai_idx;
293299

294300
if (!node)
295301
return -EINVAL;
@@ -308,23 +314,24 @@ static int asoc_simple_card_parse_of(struct simple_card_data *priv)
308314
of_property_read_u32(node, PREFIX "mclk-fs", &priv->mclk_fs);
309315

310316
/* Single/Muti DAI link(s) & New style of DT node */
317+
link_idx = 0;
318+
dai_idx = 0;
311319
if (dai_link) {
312320
struct device_node *np = NULL;
313-
int i = 0;
314321

315322
for_each_child_of_node(node, np) {
316-
dev_dbg(dev, "\tlink %d:\n", i);
323+
dev_dbg(dev, "\tlink %d:\n", link_idx);
317324
ret = asoc_simple_card_dai_link_of(np, priv,
318-
i, false);
325+
&dai_idx, link_idx++, false);
319326
if (ret < 0) {
320327
of_node_put(np);
321328
goto card_parse_end;
322329
}
323-
i++;
324330
}
325331
} else {
326332
/* For single DAI link & old style of DT node */
327-
ret = asoc_simple_card_dai_link_of(node, priv, 0, true);
333+
ret = asoc_simple_card_dai_link_of(node, priv,
334+
&dai_idx, link_idx++, true);
328335
if (ret < 0)
329336
goto card_parse_end;
330337
}
@@ -362,6 +369,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
362369
struct simple_card_data *priv;
363370
struct snd_soc_dai_link *dai_link;
364371
struct simple_dai_props *dai_props;
372+
struct asoc_simple_dai *dais;
365373
struct device *dev = &pdev->dev;
366374
struct device_node *np = dev->of_node;
367375
struct snd_soc_card *card;
@@ -380,7 +388,8 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
380388

381389
dai_props = devm_kcalloc(dev, num, sizeof(*dai_props), GFP_KERNEL);
382390
dai_link = devm_kcalloc(dev, num, sizeof(*dai_link), GFP_KERNEL);
383-
if (!dai_props || !dai_link)
391+
dais = devm_kcalloc(dev, num * 2, sizeof(*dais), GFP_KERNEL);
392+
if (!dai_props || !dai_link || !dais)
384393
return -ENOMEM;
385394

386395
/*
@@ -397,6 +406,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
397406

398407
priv->dai_props = dai_props;
399408
priv->dai_link = dai_link;
409+
priv->dais = dais;
400410

401411
/* Init snd_soc_card */
402412
card = simple_priv_to_card(priv);

0 commit comments

Comments
 (0)