Lines Matching +full:aux +full:- +full:devs
1 // SPDX-License-Identifier: GPL-2.0
15 #include <sound/soc-dai.h>
31 #define simple_priv_to_card(priv) (&(priv)->snd_card)
32 #define simple_priv_to_props(priv, i) ((priv)->dai_props + (i))
33 #define simple_priv_to_dev(priv) (simple_priv_to_card(priv)->dev)
34 #define simple_priv_to_link(priv, i) (simple_priv_to_card(priv)->dai_link + (i))
36 #define DAI "sound-dai"
37 #define CELL "#sound-dai-cells"
38 #define PREFIX "simple-audio-card,"
42 struct snd_soc_pcm_runtime *rtd = substream->private_data; in asoc_simple_card_startup()
43 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card); in asoc_simple_card_startup()
45 simple_priv_to_props(priv, rtd->num); in asoc_simple_card_startup()
48 ret = asoc_simple_card_clk_enable(&dai_props->cpu_dai); in asoc_simple_card_startup()
52 ret = asoc_simple_card_clk_enable(&dai_props->codec_dai); in asoc_simple_card_startup()
54 asoc_simple_card_clk_disable(&dai_props->cpu_dai); in asoc_simple_card_startup()
61 struct snd_soc_pcm_runtime *rtd = substream->private_data; in asoc_simple_card_shutdown()
62 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card); in asoc_simple_card_shutdown()
64 simple_priv_to_props(priv, rtd->num); in asoc_simple_card_shutdown()
66 asoc_simple_card_clk_disable(&dai_props->cpu_dai); in asoc_simple_card_shutdown()
68 asoc_simple_card_clk_disable(&dai_props->codec_dai); in asoc_simple_card_shutdown()
74 if (!simple_dai->clk) in asoc_simple_set_clk_rate()
77 if (clk_get_rate(simple_dai->clk) == rate) in asoc_simple_set_clk_rate()
80 return clk_set_rate(simple_dai->clk, rate); in asoc_simple_set_clk_rate()
86 struct snd_soc_pcm_runtime *rtd = substream->private_data; in asoc_simple_card_hw_params()
87 struct snd_soc_dai *codec_dai = rtd->codec_dai; in asoc_simple_card_hw_params()
88 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; in asoc_simple_card_hw_params()
89 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card); in asoc_simple_card_hw_params()
91 simple_priv_to_props(priv, rtd->num); in asoc_simple_card_hw_params()
95 if (priv->mclk_fs) in asoc_simple_card_hw_params()
96 mclk_fs = priv->mclk_fs; in asoc_simple_card_hw_params()
97 else if (dai_props->mclk_fs) in asoc_simple_card_hw_params()
98 mclk_fs = dai_props->mclk_fs; in asoc_simple_card_hw_params()
103 ret = asoc_simple_set_clk_rate(&dai_props->codec_dai, mclk); in asoc_simple_card_hw_params()
107 ret = asoc_simple_set_clk_rate(&dai_props->cpu_dai, mclk); in asoc_simple_card_hw_params()
113 if (ret && ret != -ENOTSUPP) in asoc_simple_card_hw_params()
118 if (ret && ret != -ENOTSUPP) in asoc_simple_card_hw_params()
134 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card); in asoc_simple_card_dai_init()
135 struct snd_soc_dai *codec = rtd->codec_dai; in asoc_simple_card_dai_init()
136 struct snd_soc_dai *cpu = rtd->cpu_dai; in asoc_simple_card_dai_init()
138 simple_priv_to_props(priv, rtd->num); in asoc_simple_card_dai_init()
141 ret = asoc_simple_card_init_dai(codec, &dai_props->codec_dai); in asoc_simple_card_dai_init()
145 ret = asoc_simple_card_init_dai(cpu, &dai_props->cpu_dai); in asoc_simple_card_dai_init()
160 struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai; in asoc_simple_card_dai_link_of()
161 struct asoc_simple_dai *codec_dai = &dai_props->codec_dai; in asoc_simple_card_dai_link_of()
177 ret = -EINVAL; in asoc_simple_card_dai_link_of()
189 ret = -EINVAL; in asoc_simple_card_dai_link_of()
195 prefix, &dai_link->dai_fmt); in asoc_simple_card_dai_link_of()
199 of_property_read_u32(node, "mclk-fs", &dai_props->mclk_fs); in asoc_simple_card_dai_link_of()
235 "%s-%s", in asoc_simple_card_dai_link_of()
236 dai_link->cpu_dai_name, in asoc_simple_card_dai_link_of()
237 dai_link->codec_dai_name); in asoc_simple_card_dai_link_of()
241 dai_link->ops = &asoc_simple_card_ops; in asoc_simple_card_dai_link_of()
242 dai_link->init = asoc_simple_card_dai_init; in asoc_simple_card_dai_link_of()
261 if (!of_find_property(node, PREFIX "aux-devs", &len)) in asoc_simple_card_parse_aux_devs()
262 return 0; /* Ok to have no aux-devs */ in asoc_simple_card_parse_aux_devs()
266 return -EINVAL; in asoc_simple_card_parse_aux_devs()
268 card->aux_dev = devm_kcalloc(dev, in asoc_simple_card_parse_aux_devs()
269 n, sizeof(*card->aux_dev), GFP_KERNEL); in asoc_simple_card_parse_aux_devs()
270 if (!card->aux_dev) in asoc_simple_card_parse_aux_devs()
271 return -ENOMEM; in asoc_simple_card_parse_aux_devs()
274 aux_node = of_parse_phandle(node, PREFIX "aux-devs", i); in asoc_simple_card_parse_aux_devs()
276 return -EINVAL; in asoc_simple_card_parse_aux_devs()
277 card->aux_dev[i].codec_of_node = aux_node; in asoc_simple_card_parse_aux_devs()
280 card->num_aux_devs = n; in asoc_simple_card_parse_aux_devs()
289 struct device_node *node = dev->of_node; in asoc_simple_card_parse_of()
293 return -EINVAL; in asoc_simple_card_parse_of()
295 dai_link = of_get_child_by_name(node, PREFIX "dai-link"); in asoc_simple_card_parse_of()
306 of_property_read_u32(node, PREFIX "mclk-fs", &priv->mclk_fs); in asoc_simple_card_parse_of()
347 ret = asoc_simple_card_init_hp(card, &priv->hp_jack, PREFIX); in asoc_simple_soc_card_probe()
351 ret = asoc_simple_card_init_mic(card, &priv->mic_jack, PREFIX); in asoc_simple_soc_card_probe()
363 struct device *dev = &pdev->dev; in asoc_simple_card_probe()
364 struct device_node *np = dev->of_node; in asoc_simple_card_probe()
369 if (np && of_get_child_by_name(np, PREFIX "dai-link")) in asoc_simple_card_probe()
377 return -ENOMEM; in asoc_simple_card_probe()
382 return -ENOMEM; in asoc_simple_card_probe()
384 priv->dai_props = dai_props; in asoc_simple_card_probe()
385 priv->dai_link = dai_link; in asoc_simple_card_probe()
389 card->owner = THIS_MODULE; in asoc_simple_card_probe()
390 card->dev = dev; in asoc_simple_card_probe()
391 card->dai_link = priv->dai_link; in asoc_simple_card_probe()
392 card->num_links = num; in asoc_simple_card_probe()
393 card->probe = asoc_simple_soc_card_probe; in asoc_simple_card_probe()
399 if (ret != -EPROBE_DEFER) in asoc_simple_card_probe()
407 cinfo = dev->platform_data; in asoc_simple_card_probe()
409 dev_err(dev, "no info for asoc-simple-card\n"); in asoc_simple_card_probe()
410 return -EINVAL; in asoc_simple_card_probe()
413 if (!cinfo->name || in asoc_simple_card_probe()
414 !cinfo->codec_dai.name || in asoc_simple_card_probe()
415 !cinfo->codec || in asoc_simple_card_probe()
416 !cinfo->platform || in asoc_simple_card_probe()
417 !cinfo->cpu_dai.name) { in asoc_simple_card_probe()
419 return -EINVAL; in asoc_simple_card_probe()
422 card->name = (cinfo->card) ? cinfo->card : cinfo->name; in asoc_simple_card_probe()
423 dai_link->name = cinfo->name; in asoc_simple_card_probe()
424 dai_link->stream_name = cinfo->name; in asoc_simple_card_probe()
425 dai_link->platform_name = cinfo->platform; in asoc_simple_card_probe()
426 dai_link->codec_name = cinfo->codec; in asoc_simple_card_probe()
427 dai_link->cpu_dai_name = cinfo->cpu_dai.name; in asoc_simple_card_probe()
428 dai_link->codec_dai_name = cinfo->codec_dai.name; in asoc_simple_card_probe()
429 dai_link->dai_fmt = cinfo->daifmt; in asoc_simple_card_probe()
430 dai_link->init = asoc_simple_card_dai_init; in asoc_simple_card_probe()
431 memcpy(&priv->dai_props->cpu_dai, &cinfo->cpu_dai, in asoc_simple_card_probe()
432 sizeof(priv->dai_props->cpu_dai)); in asoc_simple_card_probe()
433 memcpy(&priv->dai_props->codec_dai, &cinfo->codec_dai, in asoc_simple_card_probe()
434 sizeof(priv->dai_props->codec_dai)); in asoc_simple_card_probe()
458 { .compatible = "simple-audio-card", },
465 .name = "asoc-simple-card",
475 MODULE_ALIAS("platform:asoc-simple-card");