Lines Matching +full:hdmi +full:- +full:switch
1 // SPDX-License-Identifier: GPL-2.0+
3 // Copyright (C) 2015 - 2016 Samsung Electronics Co., Ltd.
36 struct snd_soc_component *component = priv->component; in tm2_start_sysclk()
42 priv->sysclk_rate); in tm2_start_sysclk()
44 dev_err(component->dev, "Failed to set FLL1 source: %d\n", ret); in tm2_start_sysclk()
51 priv->sysclk_rate); in tm2_start_sysclk()
53 dev_err(component->dev, "Failed to start FLL1: %d\n", ret); in tm2_start_sysclk()
59 priv->sysclk_rate, in tm2_start_sysclk()
62 dev_err(component->dev, "Failed to set SYSCLK source: %d\n", ret); in tm2_start_sysclk()
72 struct snd_soc_component *component = priv->component; in tm2_stop_sysclk()
77 dev_err(component->dev, "Failed to stop FLL1: %d\n", ret); in tm2_stop_sysclk()
84 dev_err(component->dev, "Failed to stop SYSCLK: %d\n", ret); in tm2_stop_sysclk()
95 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component; in tm2_aif1_hw_params()
96 struct tm2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card); in tm2_aif1_hw_params()
98 switch (params_rate(params)) { in tm2_aif1_hw_params()
109 priv->sysclk_rate = 147456000U; in tm2_aif1_hw_params()
117 priv->sysclk_rate = 135475200U; in tm2_aif1_hw_params()
120 dev_err(component->dev, "Not supported sample rate: %d\n", in tm2_aif1_hw_params()
122 return -EINVAL; in tm2_aif1_hw_params()
125 return tm2_start_sysclk(rtd->card); in tm2_aif1_hw_params()
136 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component; in tm2_aif2_hw_params()
140 switch (params_rate(params)) { in tm2_aif2_hw_params()
152 dev_err(component->dev, "Not supported sample rate: %d\n", in tm2_aif2_hw_params()
154 return -EINVAL; in tm2_aif2_hw_params()
162 dev_err(component->dev, "Failed to set FLL2 source: %d\n", ret); in tm2_aif2_hw_params()
171 dev_err(component->dev, "Failed to start FLL2: %d\n", ret); in tm2_aif2_hw_params()
180 dev_err(component->dev, "Failed to set ASYNCCLK source: %d\n", ret); in tm2_aif2_hw_params()
190 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component; in tm2_aif2_hw_free()
197 dev_err(component->dev, "Failed to stop FLL2: %d\n", ret); in tm2_aif2_hw_free()
217 dev_err(rtd->card->dev, "Invalid bit-width: %d\n", bitwidth); in tm2_hdmi_hw_params()
221 switch (bitwidth) { in tm2_hdmi_hw_params()
229 dev_err(rtd->card->dev, "Unsupported bit-width: %d\n", bitwidth); in tm2_hdmi_hw_params()
230 return -EINVAL; in tm2_hdmi_hw_params()
233 switch (params_rate(params)) { in tm2_hdmi_hw_params()
239 dev_err(rtd->card->dev, "Unsupported sample rate: %d\n", in tm2_hdmi_hw_params()
241 return -EINVAL; in tm2_hdmi_hw_params()
263 struct snd_soc_card *card = w->dapm->card; in tm2_mic_bias()
266 switch (event) { in tm2_mic_bias()
268 gpiod_set_value_cansleep(priv->gpio_mic_bias, 1); in tm2_mic_bias()
271 gpiod_set_value_cansleep(priv->gpio_mic_bias, 0); in tm2_mic_bias()
284 rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); in tm2_set_bias_level()
286 if (dapm->dev != snd_soc_rtd_to_codec(rtd, 0)->dev) in tm2_set_bias_level()
289 switch (level) { in tm2_set_bias_level()
291 if (card->dapm.bias_level == SND_SOC_BIAS_OFF) in tm2_set_bias_level()
316 rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[TM2_DAI_AIF1]); in tm2_late_probe()
318 priv->component = snd_soc_rtd_to_codec(rtd, 0)->component; in tm2_late_probe()
322 dev_err(aif1_dai->dev, "Failed to set SYSCLK: %d\n", ret); in tm2_late_probe()
326 rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[TM2_DAI_AIF2]); in tm2_late_probe()
331 dev_err(aif2_dai->dev, "Failed to set ASYNCCLK: %d\n", ret); in tm2_late_probe()
337 return -ENODEV; in tm2_late_probe()
357 SOC_DAPM_PIN_SWITCH("HDMI"),
371 SND_SOC_DAPM_LINE("HDMI", NULL),
381 .name = "tm2-audio",
429 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm5110-aif1")),
434 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm5110-aif2")),
439 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm5110-aif3")),
442 SND_SOC_DAILINK_DEFS(hdmi,
471 .name = "HDMI",
476 SND_SOC_DAILINK_REG(hdmi),
500 struct device *dev = &pdev->dev; in tm2_probe()
508 return -ENOMEM; in tm2_probe()
511 card->dev = dev; in tm2_probe()
513 priv->gpio_mic_bias = devm_gpiod_get(dev, "mic-bias", GPIOD_OUT_HIGH); in tm2_probe()
514 if (IS_ERR(priv->gpio_mic_bias)) { in tm2_probe()
516 return PTR_ERR(priv->gpio_mic_bias); in tm2_probe()
525 ret = snd_soc_of_parse_audio_routing(card, "audio-routing"); in tm2_probe()
528 ret = snd_soc_of_parse_audio_routing(card, "samsung,audio-routing"); in tm2_probe()
535 card->aux_dev[0].dlc.of_node = of_parse_phandle(dev->of_node, in tm2_probe()
536 "audio-amplifier", 0); in tm2_probe()
537 if (!card->aux_dev[0].dlc.of_node) { in tm2_probe()
538 dev_err(dev, "audio-amplifier property invalid or missing\n"); in tm2_probe()
539 return -EINVAL; in tm2_probe()
542 num_codecs = of_count_phandle_with_args(dev->of_node, "audio-codec", in tm2_probe()
545 /* Skip the HDMI link if not specified in DT */ in tm2_probe()
547 card->num_links = ARRAY_SIZE(tm2_dai_links); in tm2_probe()
548 cells_name = "#sound-dai-cells"; in tm2_probe()
550 card->num_links = ARRAY_SIZE(tm2_dai_links) - 1; in tm2_probe()
556 ret = of_parse_phandle_with_args(dev->of_node, "i2s-controller", in tm2_probe()
559 dev_err(dev, "i2s-controller property parse error: %d\n", i); in tm2_probe()
560 ret = -EINVAL; in tm2_probe()
565 codec_dai_node[i] = of_parse_phandle(dev->of_node, in tm2_probe()
566 "audio-codec", i); in tm2_probe()
568 dev_err(dev, "audio-codec property parse error\n"); in tm2_probe()
569 ret = -EINVAL; in tm2_probe()
574 /* Initialize WM5110 - I2S and HDMI - I2S1 DAI links */ in tm2_probe()
578 dai_link->cpus->name = NULL; in tm2_probe()
579 dai_link->platforms->name = NULL; in tm2_probe()
581 if (num_codecs > 1 && i == card->num_links - 1) in tm2_probe()
582 dai_index = 1; /* HDMI */ in tm2_probe()
584 dai_link->codecs->of_node = codec_dai_node[dai_index]; in tm2_probe()
585 dai_link->cpus->of_node = cpu_dai_node[dai_index]; in tm2_probe()
586 dai_link->platforms->of_node = cpu_dai_node[dai_index]; in tm2_probe()
592 /* HDMI DAI link (I2S1) */ in tm2_probe()
593 i = card->num_links - 1; in tm2_probe()
595 ret = of_parse_phandle_with_fixed_args(dev->of_node, in tm2_probe()
596 "audio-codec", 0, 1, &args); in tm2_probe()
598 dev_err(dev, "audio-codec property parse error\n"); in tm2_probe()
602 ret = snd_soc_get_dai_name(&args, &card->dai_link[i].codecs->dai_name); in tm2_probe()
628 of_node_put(card->aux_dev[0].dlc.of_node); in tm2_probe()
659 { .compatible = "samsung,tm2-audio" },
666 .name = "tm2-audio",