summaryrefslogtreecommitdiff
path: root/sound/soc/fsl/imx-pcm-rpmsg.c
diff options
context:
space:
mode:
authorShengjiu Wang <shengjiu.wang@nxp.com>2018-03-07 11:15:23 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:52:58 +0800
commitf823c83ef989e3c470115ff8a6c92df9be2a4d4f (patch)
tree19cc4904ea268b2569601712b9ece23601b991e8 /sound/soc/fsl/imx-pcm-rpmsg.c
parentd41276f382dc93f53206705bcf65cbd180cfba13 (diff)
MLK-17156-5: ASoC: imx-pcm-rpmsg: register rpmsg codec
register rpmsg codec after the rpmsg-audio-channel is ready. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
Diffstat (limited to 'sound/soc/fsl/imx-pcm-rpmsg.c')
-rw-r--r--sound/soc/fsl/imx-pcm-rpmsg.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/sound/soc/fsl/imx-pcm-rpmsg.c b/sound/soc/fsl/imx-pcm-rpmsg.c
index 45b71fdbb38d..67b44a60cbfe 100644
--- a/sound/soc/fsl/imx-pcm-rpmsg.c
+++ b/sound/soc/fsl/imx-pcm-rpmsg.c
@@ -446,7 +446,6 @@ static struct snd_soc_platform_driver imx_rpmsg_soc_platform = {
int imx_rpmsg_platform_register(struct device *dev)
{
-
struct fsl_rpmsg_i2s *rpmsg_i2s = dev_get_drvdata(dev);
i2s_info_g = &rpmsg_i2s->i2s_info;
@@ -469,14 +468,14 @@ static int i2s_rpmsg_cb(struct rpmsg_device *rpdev, void *data, int len,
if (msg->header.type == I2S_TYPE_C) {
if (msg->header.cmd == I2S_TX_PERIOD_DONE) {
spin_lock_irqsave(&i2s_info_g->lock[0], flags);
- rpmsg = &i2s_info_g->send_msg[0];
+ rpmsg = &i2s_info_g->send_msg[RPMSG_AUDIO_TX];
rpmsg->param.buffer_tail++;
rpmsg->param.buffer_tail %= i2s_info_g->num_period[0];
spin_unlock_irqrestore(&i2s_info_g->lock[0], flags);
i2s_info_g->callback[0](i2s_info_g->callback_param[0]);
} else if (msg->header.cmd == I2S_RX_PERIOD_DONE) {
spin_lock_irqsave(&i2s_info_g->lock[1], flags);
- rpmsg = &i2s_info_g->send_msg[1];
+ rpmsg = &i2s_info_g->send_msg[RPMSG_AUDIO_RX];
rpmsg->param.buffer_tail++;
rpmsg->param.buffer_tail %= i2s_info_g->num_period[1];
spin_unlock_irqrestore(&i2s_info_g->lock[1], flags);
@@ -492,12 +491,28 @@ static int i2s_rpmsg_cb(struct rpmsg_device *rpdev, void *data, int len,
static int i2s_rpmsg_probe(struct rpmsg_device *rpdev)
{
+ struct platform_device *codec_pdev;
+ struct fsl_rpmsg_i2s *rpmsg_i2s = NULL;
+ int ret;
+
i2s_info_g->rpdev = rpdev;
init_completion(&i2s_info_g->cmd_complete);
dev_info(&rpdev->dev, "new channel: 0x%x -> 0x%x!\n",
rpdev->src, rpdev->dst);
+
+ rpmsg_i2s = container_of(i2s_info_g, struct fsl_rpmsg_i2s, i2s_info);
+
+ codec_pdev = platform_device_register_data(&rpmsg_i2s->pdev->dev,
+ RPMSG_CODEC_DRV_NAME, PLATFORM_DEVID_NONE,
+ NULL, 0);
+ if (IS_ERR(codec_pdev)) {
+ dev_err(&rpdev->dev, "failed to register rpmsg audio codec\n");
+ ret = PTR_ERR(codec_pdev);
+ return ret;
+ }
+
return 0;
}