ASoC: fsl: fsl_rpmsg: Register CPU DAI with name of rpmsg channel

Each rpmsg sound card sits on one rpmsg channel. Register CPU DAI with
name of rpmsg channel so that ASoC machine driver can easily link CPU
DAI with rpmsg channel name.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
Link: https://msgid.link/r/20240311111349.723256-5-chancel.liu@nxp.com
Acked-by: Shengjiu Wang <shengjiu.wang@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Chancel Liu 2024-03-11 20:13:48 +09:00 committed by Mark Brown
parent c73524768e
commit 0aa7f5406a

View file

@ -135,7 +135,6 @@ static struct snd_soc_dai_driver fsl_rpmsg_dai = {
static const struct snd_soc_component_driver fsl_component = {
.name = "fsl-rpmsg",
.legacy_dai_naming = 1,
};
static const struct fsl_rpmsg_soc_data imx7ulp_data = {
@ -190,19 +189,40 @@ MODULE_DEVICE_TABLE(of, fsl_rpmsg_ids);
static int fsl_rpmsg_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct snd_soc_dai_driver *dai_drv;
const char *dai_name;
struct fsl_rpmsg *rpmsg;
int ret;
dai_drv = devm_kzalloc(&pdev->dev, sizeof(struct snd_soc_dai_driver), GFP_KERNEL);
if (!dai_drv)
return -ENOMEM;
memcpy(dai_drv, &fsl_rpmsg_dai, sizeof(fsl_rpmsg_dai));
rpmsg = devm_kzalloc(&pdev->dev, sizeof(struct fsl_rpmsg), GFP_KERNEL);
if (!rpmsg)
return -ENOMEM;
rpmsg->soc_data = of_device_get_match_data(&pdev->dev);
fsl_rpmsg_dai.playback.rates = rpmsg->soc_data->rates;
fsl_rpmsg_dai.capture.rates = rpmsg->soc_data->rates;
fsl_rpmsg_dai.playback.formats = rpmsg->soc_data->formats;
fsl_rpmsg_dai.capture.formats = rpmsg->soc_data->formats;
if (rpmsg->soc_data) {
dai_drv->playback.rates = rpmsg->soc_data->rates;
dai_drv->capture.rates = rpmsg->soc_data->rates;
dai_drv->playback.formats = rpmsg->soc_data->formats;
dai_drv->capture.formats = rpmsg->soc_data->formats;
}
/* Use rpmsg channel name as cpu dai name */
ret = of_property_read_string(np, "fsl,rpmsg-channel-name", &dai_name);
if (ret) {
if (ret == -EINVAL) {
dai_name = "rpmsg-audio-channel";
} else {
dev_err(&pdev->dev, "Failed to get rpmsg channel name: %d!\n", ret);
return ret;
}
}
dai_drv->name = dai_name;
if (of_property_read_bool(np, "fsl,enable-lpa")) {
rpmsg->enable_lpa = 1;
@ -236,7 +256,7 @@ static int fsl_rpmsg_probe(struct platform_device *pdev)
pm_runtime_enable(&pdev->dev);
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
&fsl_rpmsg_dai, 1);
dai_drv, 1);
if (ret)
goto err_pm_disable;