ret = snd_soc_dai_set_sysclk(codec_dai, 0, data->sysclk, SND_SOC_CLOCK_IN); if (ret && ret != -ENOTSUPP) {
dev_err(dev, "failed to set sysclk in %s\n", __func__); return ret;
}
/* * i.MX rpmsg sound cards work on codec slave mode. MCLK will be * disabled by CPU DAI driver in hw_free(). Some codec requires MCLK * present at power up/down sequence. So need to set ignore_pmdown_time * to power down codec immediately before MCLK is turned off.
*/
data->dai.ignore_pmdown_time = 1;
data->dai.cpus->dai_name = pdev->dev.platform_data;
cpu_dai = snd_soc_find_dai(data->dai.cpus); if (!cpu_dai) {
ret = -EPROBE_DEFER; goto fail;
}
np = cpu_dai->dev->of_node; if (!np) {
dev_err(&pdev->dev, "failed to parse CPU DAI device node\n");
ret = -ENODEV; goto fail;
}
ret = of_reserved_mem_device_init_by_idx(&pdev->dev, np, 0); if (ret)
dev_warn(&pdev->dev, "no reserved DMA memory\n");
if (of_property_read_bool(np, "fsl,rpmsg-out"))
data->dai.capture_only = false;
if (of_property_read_bool(np, "fsl,rpmsg-in"))
data->dai.playback_only = false;
if (data->dai.playback_only && data->dai.capture_only) {
dev_err(&pdev->dev, "no enabled rpmsg DAI link\n");
ret = -EINVAL; goto fail;
}
if (of_property_read_bool(np, "fsl,enable-lpa"))
data->lpa = true;
data->card.dev = &pdev->dev;
data->card.owner = THIS_MODULE;
data->card.dapm_widgets = imx_rpmsg_dapm_widgets;
data->card.num_dapm_widgets = ARRAY_SIZE(imx_rpmsg_dapm_widgets);
data->card.late_probe = imx_rpmsg_late_probe; /* * Inoder to use common api to get card name and audio routing. * Use parent of_node for this device, revert it after finishing using
*/
data->card.dev->of_node = np;
ret = snd_soc_of_parse_card_name(&data->card, "model"); if (ret) goto fail;
if (of_property_present(np, "audio-routing")) {
ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing"); if (ret) {
dev_err(&pdev->dev, "failed to parse audio-routing: %d\n", ret); goto fail;
}
}
platform_set_drvdata(pdev, &data->card);
snd_soc_card_set_drvdata(&data->card, data);
ret = devm_snd_soc_register_card(&pdev->dev, &data->card); if (ret) {
dev_err_probe(&pdev->dev, ret, "snd_soc_register_card failed\n"); goto fail;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.