Lines Matching +full:audio +full:- +full:widgets
1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/clk-provider.h>
12 #include "i2s-regs.h"
27 struct snd_pcm_runtime *runtime = substream->runtime;
38 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card);
42 spin_lock_irqsave(&priv->lock, flags);
43 if (priv->be_active && priv->be_sample_rate != params_rate(params))
44 ret = -EINVAL;
45 spin_unlock_irqrestore(&priv->lock, flags);
59 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card);
81 return -EINVAL;
84 ret = clk_set_rate(priv->clk_i2s_bus, pll_freq / 2 + 1);
91 * multiple of the audio sampling rate.
95 ret = clk_set_rate(priv->sclk_i2s, rclk_freq);
99 if (rtd->dai_link->num_codecs > 1) {
108 spin_lock_irqsave(&priv->lock, flags);
109 priv->be_sample_rate = params_rate(params);
110 spin_unlock_irqrestore(&priv->lock, flags);
118 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card);
121 spin_lock_irqsave(&priv->lock, flags);
127 priv->be_active = true;
133 priv->be_active = false;
137 spin_unlock_irqrestore(&priv->lock, flags);
165 DAILINK_COMP_ARRAY(COMP_PLATFORM("3830000.i2s-sec")));
169 /* Primary FE <-> BE link */
177 /* BE <-> CODECs link */
186 /* Secondary FE <-> BE link */
198 struct device *dev = &pdev->dev;
208 return -ENOMEM;
210 card = &priv->card;
211 card->dev = dev;
213 card->owner = THIS_MODULE;
214 card->fully_routed = true;
216 spin_lock_init(&priv->lock);
223 if (of_property_present(dev->of_node, "samsung,audio-widgets")) {
225 "samsung,audio-widgets");
231 if (of_property_present(dev->of_node, "audio-routing"))
232 ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
233 else if (of_property_present(dev->of_node, "samsung,audio-routing"))
234 ret = snd_soc_of_parse_audio_routing(card, "samsung,audio-routing");
238 card->dai_link = odroid_card_dais;
239 card->num_links = ARRAY_SIZE(odroid_card_dais);
241 cpu = of_get_child_by_name(dev->of_node, "cpu");
242 codec = of_get_child_by_name(dev->of_node, "codec");
243 link = card->dai_link;
244 codec_link = &card->dai_link[1];
248 * if there are 2 CPU DAI entries in the cpu sound-dai property in DT.
251 num_pcms = of_count_phandle_with_args(cpu, "sound-dai",
252 "#sound-dai-cells");
254 card->dapm_routes = odroid_dapm_routes;
255 card->num_dapm_routes = ARRAY_SIZE(odroid_dapm_routes);
256 card->num_links--;
260 ret = snd_soc_of_get_dai_name(cpu, &link->cpus->dai_name, i);
265 cpu_dai = of_parse_phandle(cpu, "sound-dai", 0);
267 ret = -EINVAL;
279 if (codec_link->num_codecs > 1) {
280 card->dai_link[0].playback_only = 0;
281 card->dai_link[1].playback_only = 0;
284 priv->sclk_i2s = of_clk_get_by_name(cpu_dai, "i2s_opclk1");
285 if (IS_ERR(priv->sclk_i2s)) {
286 ret = PTR_ERR(priv->sclk_i2s);
290 priv->clk_i2s_bus = of_clk_get_by_name(cpu_dai, "iis");
291 if (IS_ERR(priv->clk_i2s_bus)) {
292 ret = PTR_ERR(priv->clk_i2s_bus);
307 clk_put(priv->clk_i2s_bus);
309 clk_put(priv->sclk_i2s);
322 snd_soc_of_put_dai_link_codecs(&priv->card.dai_link[1]);
323 clk_put(priv->sclk_i2s);
324 clk_put(priv->clk_i2s_bus);
328 { .compatible = "hardkernel,odroid-xu3-audio" },
329 { .compatible = "hardkernel,odroid-xu4-audio" },
330 { .compatible = "samsung,odroid-xu3-audio" },
331 { .compatible = "samsung,odroid-xu4-audio" },
338 .name = "odroid-audio",
348 MODULE_DESCRIPTION("Odroid XU3/XU4 audio support");