Lines Matching +full:spk +full:- +full:shutdown
1 // SPDX-License-Identifier: GPL-2.0
15 #include <uapi/linux/input-event-codes.h>
64 struct sdm845_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card); in sdm845_slim_snd_hw_params()
72 substream->stream); in sdm845_slim_snd_hw_params()
73 if (sruntime != ERR_PTR(-ENOTSUPP)) in sdm845_slim_snd_hw_params()
74 pdata->sruntime[cpu_dai->id] = sruntime; in sdm845_slim_snd_hw_params()
79 if (ret != 0 && ret != -ENOTSUPP) { in sdm845_slim_snd_hw_params()
82 } else if (ret == -ENOTSUPP) { in sdm845_slim_snd_hw_params()
87 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in sdm845_slim_snd_hw_params()
112 dev_err(rtd->dev, "%s: invalid param format 0x%x\n", in sdm845_tdm_snd_hw_params()
114 return -EINVAL; in sdm845_tdm_snd_hw_params()
118 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in sdm845_tdm_snd_hw_params()
122 dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", in sdm845_tdm_snd_hw_params()
130 dev_err(rtd->dev, "%s: failed to set channel map, err:%d\n", in sdm845_tdm_snd_hw_params()
138 dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", in sdm845_tdm_snd_hw_params()
146 dev_err(rtd->dev, "%s: failed to set channel map, err:%d\n", in sdm845_tdm_snd_hw_params()
154 if (!strcmp(codec_dai->component->name_prefix, "Left")) { in sdm845_tdm_snd_hw_params()
160 dev_err(rtd->dev, in sdm845_tdm_snd_hw_params()
166 if (!strcmp(codec_dai->component->name_prefix, "Right")) { in sdm845_tdm_snd_hw_params()
172 dev_err(rtd->dev, in sdm845_tdm_snd_hw_params()
191 switch (cpu_dai->id) { in sdm845_snd_hw_params()
199 codec_dai->component, in sdm845_snd_hw_params()
206 dev_err(rtd->dev, in sdm845_snd_hw_params()
219 pr_err("%s: invalid dai id 0x%x\n", __func__, cpu_dai->id); in sdm845_snd_hw_params()
227 struct snd_soc_component *component = jack->private_data; in sdm845_jack_free()
235 struct snd_soc_card *card = rtd->card; in sdm845_dai_init()
239 struct snd_soc_dai_link *link = rtd->dai_link; in sdm845_dai_init()
255 if (!pdata->jack_setup) { in sdm845_dai_init()
261 &pdata->jack, in sdm845_dai_init()
266 dev_err(card->dev, "Unable to add Headphone Jack\n"); in sdm845_dai_init()
270 jack = pdata->jack.jack; in sdm845_dai_init()
276 pdata->jack_setup = true; in sdm845_dai_init()
279 switch (cpu_dai->id) { in sdm845_dai_init()
281 jack = pdata->jack.jack; in sdm845_dai_init()
282 component = codec_dai->component; in sdm845_dai_init()
284 jack->private_data = component; in sdm845_dai_init()
285 jack->private_free = sdm845_jack_free; in sdm845_dai_init()
287 &pdata->jack, NULL); in sdm845_dai_init()
288 if (rval != 0 && rval != -ENOTSUPP) { in sdm845_dai_init()
289 dev_warn(card->dev, "Failed to set jack: %d\n", rval); in sdm845_dai_init()
295 if (pdata->slim_port_setup || !link->no_pcm) in sdm845_dai_init()
304 if (rval != 0 && rval != -ENOTSUPP) in sdm845_dai_init()
311 rval = snd_soc_component_set_jack(codec_dai->component, in sdm845_dai_init()
312 &pdata->jack, NULL); in sdm845_dai_init()
313 if (rval != 0 && rval != -ENOTSUPP) { in sdm845_dai_init()
314 dev_warn(card->dev, "Failed to set jack: %d\n", rval); in sdm845_dai_init()
319 pdata->slim_port_setup = true; in sdm845_dai_init()
335 struct snd_soc_card *card = rtd->card; in sdm845_snd_startup()
342 switch (cpu_dai->id) { in sdm845_snd_startup()
346 if (++(data->pri_mi2s_clk_count) == 1) { in sdm845_snd_startup()
360 if (++(data->sec_mi2s_clk_count) == 1) { in sdm845_snd_startup()
379 if (++(data->quat_tdm_clk_count) == 1) { in sdm845_snd_startup()
389 if (!strcmp(codec_dai->component->name_prefix, in sdm845_snd_startup()
394 dev_err(rtd->dev, in sdm845_snd_startup()
400 if (!strcmp(codec_dai->component->name_prefix, in sdm845_snd_startup()
405 dev_err(rtd->dev, in sdm845_snd_startup()
416 pr_err("%s: invalid dai id 0x%x\n", __func__, cpu_dai->id); in sdm845_snd_startup()
425 struct snd_soc_card *card = rtd->card; in sdm845_snd_shutdown()
429 switch (cpu_dai->id) { in sdm845_snd_shutdown()
432 if (--(data->pri_mi2s_clk_count) == 0) { in sdm845_snd_shutdown()
443 if (--(data->sec_mi2s_clk_count) == 0) { in sdm845_snd_shutdown()
452 if (--(data->quat_tdm_clk_count) == 0) { in sdm845_snd_shutdown()
463 pr_err("%s: invalid dai id 0x%x\n", __func__, cpu_dai->id); in sdm845_snd_shutdown()
471 struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); in sdm845_snd_prepare()
473 struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; in sdm845_snd_prepare()
479 if (data->stream_prepared[cpu_dai->id]) { in sdm845_snd_prepare()
482 data->stream_prepared[cpu_dai->id] = false; in sdm845_snd_prepare()
502 data->stream_prepared[cpu_dai->id] = true; in sdm845_snd_prepare()
510 struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); in sdm845_snd_hw_free()
512 struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; in sdm845_snd_hw_free()
514 if (sruntime && data->stream_prepared[cpu_dai->id]) { in sdm845_snd_hw_free()
517 data->stream_prepared[cpu_dai->id] = false; in sdm845_snd_hw_free()
528 .shutdown = sdm845_snd_shutdown,
540 rate->min = rate->max = DEFAULT_SAMPLE_RATE_48K; in sdm845_be_hw_params_fixup()
541 channels->min = channels->max = 2; in sdm845_be_hw_params_fixup()
550 SND_SOC_DAPM_SPK("Left Spk", NULL),
551 SND_SOC_DAPM_SPK("Right Spk", NULL),
566 if (link->no_pcm == 1) { in sdm845_add_ops()
567 link->ops = &sdm845_be_ops; in sdm845_add_ops()
568 link->be_hw_params_fixup = sdm845_be_hw_params_fixup; in sdm845_add_ops()
570 link->init = sdm845_dai_init; in sdm845_add_ops()
578 struct device *dev = &pdev->dev; in sdm845_snd_platform_probe()
583 return -ENOMEM; in sdm845_snd_platform_probe()
588 return -ENOMEM; in sdm845_snd_platform_probe()
590 card->driver_name = DRIVER_NAME; in sdm845_snd_platform_probe()
591 card->dapm_widgets = sdm845_snd_widgets; in sdm845_snd_platform_probe()
592 card->num_dapm_widgets = ARRAY_SIZE(sdm845_snd_widgets); in sdm845_snd_platform_probe()
593 card->controls = sdm845_snd_controls; in sdm845_snd_platform_probe()
594 card->num_controls = ARRAY_SIZE(sdm845_snd_controls); in sdm845_snd_platform_probe()
595 card->dev = dev; in sdm845_snd_platform_probe()
596 card->owner = THIS_MODULE; in sdm845_snd_platform_probe()
602 data->card = card; in sdm845_snd_platform_probe()
610 { .compatible = "qcom,sdm845-sndcard" },
612 { .compatible = "qcom,db845c-sndcard" },
613 { .compatible = "lenovo,yoga-c630-sndcard" },
621 .name = "msm-snd-sdm845",