Lines Matching +full:i2s +full:- +full:regs
1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/clk-provider.h>
12 #include "i2s.h"
13 #include "i2s-regs.h"
28 struct snd_pcm_runtime *runtime = substream->runtime; in odroid_card_fe_startup()
39 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); in odroid_card_fe_hw_params()
43 spin_lock_irqsave(&priv->lock, flags); in odroid_card_fe_hw_params()
44 if (priv->be_active && priv->be_sample_rate != params_rate(params)) in odroid_card_fe_hw_params()
45 ret = -EINVAL; in odroid_card_fe_hw_params()
46 spin_unlock_irqrestore(&priv->lock, flags); in odroid_card_fe_hw_params()
60 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); in odroid_card_be_hw_params()
82 return -EINVAL; in odroid_card_be_hw_params()
85 ret = clk_set_rate(priv->clk_i2s_bus, pll_freq / 2 + 1); in odroid_card_be_hw_params()
96 ret = clk_set_rate(priv->sclk_i2s, rclk_freq); in odroid_card_be_hw_params()
100 if (rtd->dai_link->num_codecs > 1) { in odroid_card_be_hw_params()
109 spin_lock_irqsave(&priv->lock, flags); in odroid_card_be_hw_params()
110 priv->be_sample_rate = params_rate(params); in odroid_card_be_hw_params()
111 spin_unlock_irqrestore(&priv->lock, flags); in odroid_card_be_hw_params()
119 struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); in odroid_card_be_trigger()
122 spin_lock_irqsave(&priv->lock, flags); in odroid_card_be_trigger()
128 priv->be_active = true; in odroid_card_be_trigger()
134 priv->be_active = false; in odroid_card_be_trigger()
138 spin_unlock_irqrestore(&priv->lock, flags); in odroid_card_be_trigger()
150 { "I2S Playback", NULL, "Mixer DAI TX" },
157 DAILINK_COMP_ARRAY(COMP_PLATFORM("3830000.i2s")));
167 DAILINK_COMP_ARRAY(COMP_PLATFORM("3830000.i2s-sec")));
171 /* Primary FE <-> BE link */
179 /* BE <-> CODECs link */
180 .name = "I2S Mixer",
188 /* Secondary FE <-> BE link */
201 struct device *dev = &pdev->dev; in odroid_audio_probe()
211 return -ENOMEM; in odroid_audio_probe()
213 card = &priv->card; in odroid_audio_probe()
214 card->dev = dev; in odroid_audio_probe()
216 card->owner = THIS_MODULE; in odroid_audio_probe()
217 card->fully_routed = true; in odroid_audio_probe()
219 spin_lock_init(&priv->lock); in odroid_audio_probe()
226 if (of_property_present(dev->of_node, "samsung,audio-widgets")) { in odroid_audio_probe()
228 "samsung,audio-widgets"); in odroid_audio_probe()
234 if (of_property_present(dev->of_node, "audio-routing")) in odroid_audio_probe()
235 ret = snd_soc_of_parse_audio_routing(card, "audio-routing"); in odroid_audio_probe()
236 else if (of_property_present(dev->of_node, "samsung,audio-routing")) in odroid_audio_probe()
237 ret = snd_soc_of_parse_audio_routing(card, "samsung,audio-routing"); in odroid_audio_probe()
241 card->dai_link = odroid_card_dais; in odroid_audio_probe()
242 card->num_links = ARRAY_SIZE(odroid_card_dais); in odroid_audio_probe()
244 cpu = of_get_child_by_name(dev->of_node, "cpu"); in odroid_audio_probe()
245 codec = of_get_child_by_name(dev->of_node, "codec"); in odroid_audio_probe()
246 link = card->dai_link; in odroid_audio_probe()
247 codec_link = &card->dai_link[1]; in odroid_audio_probe()
251 * if there are 2 CPU DAI entries in the cpu sound-dai property in DT. in odroid_audio_probe()
254 num_pcms = of_count_phandle_with_args(cpu, "sound-dai", in odroid_audio_probe()
255 "#sound-dai-cells"); in odroid_audio_probe()
257 card->dapm_routes = odroid_dapm_routes; in odroid_audio_probe()
258 card->num_dapm_routes = ARRAY_SIZE(odroid_dapm_routes); in odroid_audio_probe()
259 card->num_links--; in odroid_audio_probe()
263 ret = snd_soc_of_get_dai_name(cpu, &link->cpus->dai_name, i); in odroid_audio_probe()
268 cpu_dai = of_parse_phandle(cpu, "sound-dai", 0); in odroid_audio_probe()
270 ret = -EINVAL; in odroid_audio_probe()
282 if (codec_link->num_codecs > 1) { in odroid_audio_probe()
283 card->dai_link[0].dpcm_capture = 1; in odroid_audio_probe()
284 card->dai_link[1].dpcm_capture = 1; in odroid_audio_probe()
287 priv->sclk_i2s = of_clk_get_by_name(cpu_dai, "i2s_opclk1"); in odroid_audio_probe()
288 if (IS_ERR(priv->sclk_i2s)) { in odroid_audio_probe()
289 ret = PTR_ERR(priv->sclk_i2s); in odroid_audio_probe()
293 priv->clk_i2s_bus = of_clk_get_by_name(cpu_dai, "iis"); in odroid_audio_probe()
294 if (IS_ERR(priv->clk_i2s_bus)) { in odroid_audio_probe()
295 ret = PTR_ERR(priv->clk_i2s_bus); in odroid_audio_probe()
310 clk_put(priv->clk_i2s_bus); in odroid_audio_probe()
312 clk_put(priv->sclk_i2s); in odroid_audio_probe()
325 snd_soc_of_put_dai_link_codecs(&priv->card.dai_link[1]); in odroid_audio_remove()
326 clk_put(priv->sclk_i2s); in odroid_audio_remove()
327 clk_put(priv->clk_i2s_bus); in odroid_audio_remove()
331 { .compatible = "hardkernel,odroid-xu3-audio" },
332 { .compatible = "hardkernel,odroid-xu4-audio" },
333 { .compatible = "samsung,odroid-xu3-audio" },
334 { .compatible = "samsung,odroid-xu4-audio" },
341 .name = "odroid-audio",