Lines Matching +full:fll1 +full:- +full:clk
1 // SPDX-License-Identifier: GPL-2.0+
8 #include <linux/clk.h>
18 #include <sound/soc-dapm.h>
43 struct snd_soc_card *card = rtd->card; in midas_start_fll1()
50 rate = priv->fll1_rate; in midas_start_fll1()
52 * If no new rate is requested, set FLL1 to a sane default for jack in midas_start_fll1()
58 if (rate != priv->fll1_rate && priv->fll1_rate) { in midas_start_fll1()
63 dev_err(card->dev, "Unable to switch to MCLK2: %d\n", ret); in midas_start_fll1()
71 dev_err(card->dev, "Failed to set FLL1 rate: %d\n", ret); in midas_start_fll1()
74 priv->fll1_rate = rate; in midas_start_fll1()
77 priv->fll1_rate, SND_SOC_CLOCK_IN); in midas_start_fll1()
79 dev_err(card->dev, "Failed to set SYSCLK source: %d\n", ret); in midas_start_fll1()
86 dev_err(card->dev, "Failed to set OPCLK source: %d\n", ret); in midas_start_fll1()
95 struct snd_soc_card *card = rtd->card; in midas_stop_fll1()
103 dev_err(card->dev, "Unable to switch to MCLK2: %d\n", ret); in midas_stop_fll1()
109 dev_err(card->dev, "Unable to stop FLL1: %d\n", ret); in midas_stop_fll1()
113 priv->fll1_rate = 0; in midas_stop_fll1()
121 struct snd_soc_pcm_runtime *rtd = substream->private_data; in midas_aif1_hw_params()
144 struct snd_soc_component *codec = snd_soc_dapm_to_component(w->dapm); in midas_ext_spkmode()
166 struct snd_soc_card *card = w->dapm->card; in midas_mic_bias()
171 return regulator_enable(priv->reg_mic_bias); in midas_mic_bias()
173 return regulator_disable(priv->reg_mic_bias); in midas_mic_bias()
182 struct snd_soc_card *card = w->dapm->card; in midas_submic_bias()
187 return regulator_enable(priv->reg_submic_bias); in midas_submic_bias()
189 return regulator_disable(priv->reg_submic_bias); in midas_submic_bias()
198 struct snd_soc_card *card = w->dapm->card; in midas_fm_set()
201 if (!priv->gpio_fm_sel) in midas_fm_set()
206 gpiod_set_value_cansleep(priv->gpio_fm_sel, 1); in midas_fm_set()
209 gpiod_set_value_cansleep(priv->gpio_fm_sel, 0); in midas_fm_set()
219 struct snd_soc_card *card = w->dapm->card; in midas_line_set()
222 if (!priv->gpio_lineout_sel) in midas_line_set()
227 gpiod_set_value_cansleep(priv->gpio_lineout_sel, 1); in midas_line_set()
230 gpiod_set_value_cansleep(priv->gpio_lineout_sel, 0); in midas_line_set()
274 &card->dai_link[0]); in midas_set_bias_level()
277 if (dapm->dev != aif1_dai->dev) in midas_set_bias_level()
295 &card->dai_link[0]); in midas_late_probe()
304 dev_err(aif1_dai->dev, "Failed to switch to MCLK2: %d\n", ret); in midas_late_probe()
312 &priv->headset_jack); in midas_late_probe()
316 wm8958_mic_detect(aif1_dai->component, &priv->headset_jack, in midas_late_probe()
363 .name = "midas-audio",
368 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm8994-aif1")),
373 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm8994-aif2")),
378 DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm8994-aif3")),
422 struct device *dev = &pdev->dev; in midas_probe()
429 return -ENOMEM; in midas_probe()
432 card->dev = dev; in midas_probe()
434 priv->reg_mic_bias = devm_regulator_get(dev, "mic-bias"); in midas_probe()
435 if (IS_ERR(priv->reg_mic_bias)) { in midas_probe()
437 return PTR_ERR(priv->reg_mic_bias); in midas_probe()
440 priv->reg_submic_bias = devm_regulator_get(dev, "submic-bias"); in midas_probe()
441 if (IS_ERR(priv->reg_submic_bias)) { in midas_probe()
443 return PTR_ERR(priv->reg_submic_bias); in midas_probe()
446 priv->gpio_fm_sel = devm_gpiod_get_optional(dev, "fm-sel", GPIOD_OUT_HIGH); in midas_probe()
447 if (IS_ERR(priv->gpio_fm_sel)) { in midas_probe()
449 return PTR_ERR(priv->gpio_fm_sel); in midas_probe()
452 priv->gpio_lineout_sel = devm_gpiod_get_optional(dev, "lineout-sel", in midas_probe()
454 if (IS_ERR(priv->gpio_lineout_sel)) { in midas_probe()
456 return PTR_ERR(priv->gpio_lineout_sel); in midas_probe()
465 ret = snd_soc_of_parse_audio_routing(card, "samsung,audio-routing"); in midas_probe()
471 cpu = of_get_child_by_name(dev->of_node, "cpu"); in midas_probe()
473 return -EINVAL; in midas_probe()
475 codec = of_get_child_by_name(dev->of_node, "codec"); in midas_probe()
478 return -EINVAL; in midas_probe()
481 cpu_dai_node = of_parse_phandle(cpu, "sound-dai", 0); in midas_probe()
484 dev_err(dev, "parsing cpu/sound-dai failed\n"); in midas_probe()
486 return -EINVAL; in midas_probe()
489 codec_dai_node = of_parse_phandle(codec, "sound-dai", 0); in midas_probe()
492 dev_err(dev, "audio-codec property invalid/missing\n"); in midas_probe()
493 ret = -EINVAL; in midas_probe()
498 dai_link->codecs->of_node = codec_dai_node; in midas_probe()
499 dai_link->cpus->of_node = cpu_dai_node; in midas_probe()
500 dai_link->platforms->of_node = cpu_dai_node; in midas_probe()
526 { .compatible = "samsung,midas-audio" },
533 .name = "midas-audio",