Lines Matching +full:mux +full:- +full:add +full:- +full:data
1 // SPDX-License-Identifier: GPL-2.0-only
5 // sc7180.c -- ALSA SoC Machine driver for SC7180
7 #include <dt-bindings/sound/sc7180-lpass.h>
17 #include <uapi/linux/input-event-codes.h>
40 struct snd_soc_component *component = jack->private_data; in sc7180_jack_free()
58 struct snd_soc_card *card = rtd->card; in sc7180_headset_init()
61 struct snd_soc_component *component = codec_dai->component; in sc7180_headset_init()
70 &pdata->hs_jack, in sc7180_headset_init()
75 dev_err(card->dev, "Unable to add Headset Jack\n"); in sc7180_headset_init()
79 jack = pdata->hs_jack.jack; in sc7180_headset_init()
86 jack->private_data = component; in sc7180_headset_init()
87 jack->private_free = sc7180_jack_free; in sc7180_headset_init()
89 return snd_soc_component_set_jack(component, &pdata->hs_jack, NULL); in sc7180_headset_init()
94 struct snd_soc_card *card = rtd->card; in sc7180_hdmi_init()
97 struct snd_soc_component *component = codec_dai->component; in sc7180_hdmi_init()
104 &pdata->hdmi_jack); in sc7180_hdmi_init()
107 dev_err(card->dev, "Unable to add HDMI Jack\n"); in sc7180_hdmi_init()
111 jack = pdata->hdmi_jack.jack; in sc7180_hdmi_init()
112 jack->private_data = component; in sc7180_hdmi_init()
113 jack->private_free = sc7180_jack_free; in sc7180_hdmi_init()
115 return snd_soc_component_set_jack(component, &pdata->hdmi_jack, NULL); in sc7180_hdmi_init()
122 switch (cpu_dai->id) { in sc7180_init()
130 dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__, in sc7180_init()
131 cpu_dai->id); in sc7180_init()
132 return -EINVAL; in sc7180_init()
139 struct snd_soc_pcm_runtime *rtd = substream->private_data; in sc7180_snd_startup()
140 struct snd_soc_card *card = rtd->card; in sc7180_snd_startup()
141 struct sc7180_snd_data *data = snd_soc_card_get_drvdata(card); in sc7180_snd_startup() local
146 if (!strcmp(codec_dai->name, "rt5682-aif1")) { in sc7180_snd_startup()
152 } else if (!strcmp(codec_dai->name, "rt5682s-aif1")) { in sc7180_snd_startup()
160 switch (cpu_dai->id) { in sc7180_snd_startup()
162 if (++data->pri_mi2s_clk_count == 1) { in sc7180_snd_startup()
178 dev_err(rtd->dev, "can't set codec pll: %d\n", ret); in sc7180_snd_startup()
186 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", in sc7180_snd_startup()
195 dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__, in sc7180_snd_startup()
196 cpu_dai->id); in sc7180_snd_startup()
197 return -EINVAL; in sc7180_snd_startup()
206 struct sc7180_snd_data *data = snd_soc_card_get_drvdata(dapm->card); in dmic_get() local
208 ucontrol->value.integer.value[0] = data->dmic_switch; in dmic_get()
216 struct sc7180_snd_data *data = snd_soc_card_get_drvdata(dapm->card); in dmic_set() local
218 data->dmic_switch = ucontrol->value.integer.value[0]; in dmic_set()
219 gpiod_set_value(data->dmic_sel, data->dmic_switch); in dmic_set()
225 struct snd_soc_pcm_runtime *rtd = substream->private_data; in sc7180_snd_shutdown()
226 struct snd_soc_card *card = rtd->card; in sc7180_snd_shutdown()
227 struct sc7180_snd_data *data = snd_soc_card_get_drvdata(card); in sc7180_snd_shutdown() local
230 switch (cpu_dai->id) { in sc7180_snd_shutdown()
232 if (--data->pri_mi2s_clk_count == 0) { in sc7180_snd_shutdown()
244 dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__, in sc7180_snd_shutdown()
245 cpu_dai->id); in sc7180_snd_shutdown()
254 switch (cpu_dai->id) { in sc7180_adau7002_init()
262 dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__, in sc7180_adau7002_init()
263 cpu_dai->id); in sc7180_adau7002_init()
264 return -EINVAL; in sc7180_adau7002_init()
271 struct snd_soc_pcm_runtime *rtd = substream->private_data; in sc7180_adau7002_snd_startup()
274 struct snd_pcm_runtime *runtime = substream->runtime; in sc7180_adau7002_snd_startup()
276 switch (cpu_dai->id) { in sc7180_adau7002_snd_startup()
282 runtime->hw.formats = SNDRV_PCM_FMTBIT_S32_LE; in sc7180_adau7002_snd_startup()
291 dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__, in sc7180_adau7002_snd_startup()
292 cpu_dai->id); in sc7180_adau7002_snd_startup()
293 return -EINVAL; in sc7180_adau7002_snd_startup()
330 SOC_DAPM_ENUM_EXT("DMIC Select Mux", sc7180_dmic_enum,
337 SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &sc7180_dmic_mux_control),
346 {"Dmic Mux", "Front Mic", "DMIC"},
347 {"Dmic Mux", "Rear Mic", "DMIC"},
353 struct sc7180_snd_data *data; in sc7180_snd_platform_probe() local
354 struct device *dev = &pdev->dev; in sc7180_snd_platform_probe()
360 /* Allocate the private data */ in sc7180_snd_platform_probe()
361 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); in sc7180_snd_platform_probe()
362 if (!data) in sc7180_snd_platform_probe()
363 return -ENOMEM; in sc7180_snd_platform_probe()
365 card = &data->card; in sc7180_snd_platform_probe()
366 snd_soc_card_set_drvdata(card, data); in sc7180_snd_platform_probe()
368 card->owner = THIS_MODULE; in sc7180_snd_platform_probe()
369 card->driver_name = DRIVER_NAME; in sc7180_snd_platform_probe()
370 card->dev = dev; in sc7180_snd_platform_probe()
371 card->dapm_widgets = sc7180_snd_widgets; in sc7180_snd_platform_probe()
372 card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_widgets); in sc7180_snd_platform_probe()
373 card->controls = sc7180_snd_controls; in sc7180_snd_platform_probe()
374 card->num_controls = ARRAY_SIZE(sc7180_snd_controls); in sc7180_snd_platform_probe()
376 if (of_property_read_bool(dev->of_node, "dmic-gpios")) { in sc7180_snd_platform_probe()
377 card->dapm_widgets = sc7180_snd_dual_mic_widgets, in sc7180_snd_platform_probe()
378 card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_dual_mic_widgets), in sc7180_snd_platform_probe()
379 card->controls = sc7180_snd_dual_mic_controls, in sc7180_snd_platform_probe()
380 card->num_controls = ARRAY_SIZE(sc7180_snd_dual_mic_controls), in sc7180_snd_platform_probe()
381 card->dapm_routes = sc7180_snd_dual_mic_audio_route, in sc7180_snd_platform_probe()
382 card->num_dapm_routes = ARRAY_SIZE(sc7180_snd_dual_mic_audio_route), in sc7180_snd_platform_probe()
383 data->dmic_sel = devm_gpiod_get(&pdev->dev, "dmic", GPIOD_OUT_LOW); in sc7180_snd_platform_probe()
384 if (IS_ERR(data->dmic_sel)) { in sc7180_snd_platform_probe()
385 dev_err(&pdev->dev, "DMIC gpio failed err=%ld\n", PTR_ERR(data->dmic_sel)); in sc7180_snd_platform_probe()
386 return PTR_ERR(data->dmic_sel); in sc7180_snd_platform_probe()
390 if (of_device_is_compatible(dev->of_node, "google,sc7180-coachz")) { in sc7180_snd_platform_probe()
392 card->dapm_widgets = sc7180_adau7002_snd_widgets; in sc7180_snd_platform_probe()
393 card->num_dapm_widgets = ARRAY_SIZE(sc7180_adau7002_snd_widgets); in sc7180_snd_platform_probe()
402 link->ops = &sc7180_adau7002_ops; in sc7180_snd_platform_probe()
403 link->init = sc7180_adau7002_init; in sc7180_snd_platform_probe()
405 link->ops = &sc7180_ops; in sc7180_snd_platform_probe()
406 link->init = sc7180_init; in sc7180_snd_platform_probe()
414 {.compatible = "google,sc7180-trogdor"},
415 {.compatible = "google,sc7180-coachz"},
423 .name = "msm-snd-sc7180",