MLK-20095-4: ASoC: fsl: Use hardwired system address offset source select for QM
We set system address offset select to 0 on QM because of the following reasons:
* SC_C_OFS_PERIPH, it is not available for QM
* SC_C_OFS_AUDIO, it is not used
* SC_C_OFS_IRQ, needs to get outside of the VPU.
A simplified version of the code is:
if (dsp_priv->dsp_board_type == DSP_IMX8QXP_TYPE) {
sc_misc_set_control(ipcHndl, SC_R_DSP, SC_C_OFS_SEL, 1);
sc_misc_set_control(ipcHndl, SC_R_DSP, SC_C_OFS_PERIPH, 0x5A);
sc_misc_set_control(ipcHndl, SC_R_DSP, SC_C_OFS_IRQ, 0x51);
sc_misc_set_control(ipcHndl, SC_R_DSP, SC_C_OFS_AUDIO, 0x80);
}
} else {
sc_misc_set_control(ipcHndl, SC_R_DSP, SC_C_OFS_SEL, 0);
}
Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
diff --git a/sound/soc/fsl/fsl_dsp.c b/sound/soc/fsl/fsl_dsp.c
index df591bc..a5e8eaf 100644
--- a/sound/soc/fsl/fsl_dsp.c
+++ b/sound/soc/fsl/fsl_dsp.c
@@ -828,32 +828,42 @@ static int fsl_dsp_probe(struct platform_device *pdev)
return sciErr;
};
- sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
- SC_C_OFS_SEL, 1);
- if (sciErr != SC_ERR_NONE) {
- dev_err(&pdev->dev, "Error system address offset source select\n");
- return -EIO;
- }
+ if (dsp_priv->dsp_board_type == DSP_IMX8QXP_TYPE) {
+ sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
+ SC_C_OFS_SEL, 1);
+ if (sciErr != SC_ERR_NONE) {
+ dev_err(&pdev->dev, "Error system address offset source select\n");
+ return -EIO;
+ }
- sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
- SC_C_OFS_AUDIO, 0x80);
- if (sciErr != SC_ERR_NONE) {
- dev_err(&pdev->dev, "Error system address offset of AUDIO\n");
- return -EIO;
- }
+ sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
+ SC_C_OFS_PERIPH, 0x5A);
+ if (sciErr != SC_ERR_NONE) {
+ dev_err(&pdev->dev, "Error system address offset of PERIPH %d\n",
+ sciErr);
+ return -EIO;
+ }
- sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
- SC_C_OFS_PERIPH, 0x5A);
- if (sciErr != SC_ERR_NONE) {
- dev_err(&pdev->dev, "Error system address offset of PERIPH %d\n",
- sciErr);
- }
+ sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
+ SC_C_OFS_IRQ, 0x51);
+ if (sciErr != SC_ERR_NONE) {
+ dev_err(&pdev->dev, "Error system address offset of IRQ\n");
+ return -EIO;
+ }
- sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
- SC_C_OFS_IRQ, 0x51);
- if (sciErr != SC_ERR_NONE) {
- dev_err(&pdev->dev, "Error system address offset of IRQ\n");
- return -EIO;
+ sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
+ SC_C_OFS_AUDIO, 0x80);
+ if (sciErr != SC_ERR_NONE) {
+ dev_err(&pdev->dev, "Error system address offset of AUDIO\n");
+ return -EIO;
+ }
+ } else {
+ sciErr = sc_misc_set_control(dsp_priv->dsp_ipcHandle, SC_R_DSP,
+ SC_C_OFS_SEL, 0);
+ if (sciErr != SC_ERR_NONE) {
+ dev_err(&pdev->dev, "Error system address offset source select\n");
+ return -EIO;
+ }
}
ret = dsp_mu_init(dsp_priv);