Commit acfa5202 authored by Paul Olaru's avatar Paul Olaru Committed by Mark Brown

ASoC: SOF: imx8: Add ops for i.MX8QM

i.MX8QM and i.MX8QXP are mostly identical platforms with minor hardware
differences. One of these differences affects the firmware boot process,
requiring the run operation to differ. All other ops are reused.
Signed-off-by: default avatarPaul Olaru <paul.olaru@nxp.com>
Signed-off-by: default avatarDaniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200210095817.13226-3-daniel.baluta@oss.nxp.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9da9ace2
...@@ -178,6 +178,24 @@ static int imx8x_run(struct snd_sof_dev *sdev) ...@@ -178,6 +178,24 @@ static int imx8x_run(struct snd_sof_dev *sdev)
return 0; return 0;
} }
static int imx8_run(struct snd_sof_dev *sdev)
{
struct imx8_priv *dsp_priv = (struct imx8_priv *)sdev->private;
int ret;
ret = imx_sc_misc_set_control(dsp_priv->sc_ipc, IMX_SC_R_DSP,
IMX_SC_C_OFS_SEL, 0);
if (ret < 0) {
dev_err(sdev->dev, "Error system address offset source select\n");
return ret;
}
imx_sc_pm_cpu_start(dsp_priv->sc_ipc, IMX_SC_R_DSP, true,
RESET_VECTOR_VADDR);
return 0;
}
static int imx8_probe(struct snd_sof_dev *sdev) static int imx8_probe(struct snd_sof_dev *sdev)
{ {
struct platform_device *pdev = struct platform_device *pdev =
...@@ -360,6 +378,39 @@ static struct snd_soc_dai_driver imx8_dai[] = { ...@@ -360,6 +378,39 @@ static struct snd_soc_dai_driver imx8_dai[] = {
}, },
}; };
/* i.MX8 ops */
struct snd_sof_dsp_ops sof_imx8_ops = {
/* probe and remove */
.probe = imx8_probe,
.remove = imx8_remove,
/* DSP core boot */
.run = imx8_run,
/* Block IO */
.block_read = sof_block_read,
.block_write = sof_block_write,
/* ipc */
.send_msg = imx8_send_msg,
.fw_ready = sof_fw_ready,
.get_mailbox_offset = imx8_get_mailbox_offset,
.get_window_offset = imx8_get_window_offset,
.ipc_msg_data = imx8_ipc_msg_data,
.ipc_pcm_params = imx8_ipc_pcm_params,
/* module loading */
.load_module = snd_sof_parse_module_memcpy,
.get_bar_index = imx8_get_bar_index,
/* firmware loading */
.load_firmware = snd_sof_load_firmware_memcpy,
/* DAI drivers */
.drv = imx8_dai,
.num_drv = 1, /* we have only 1 ESAI interface on i.MX8 */
};
EXPORT_SYMBOL(sof_imx8_ops);
/* i.MX8X ops */ /* i.MX8X ops */
struct snd_sof_dsp_ops sof_imx8x_ops = { struct snd_sof_dsp_ops sof_imx8x_ops = {
/* probe and remove */ /* probe and remove */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment