From 660bbebb9c1fa3d5131b66445ef8b313a0159390 Mon Sep 17 00:00:00 2001 From: Viorel Suman Date: Mon, 27 Apr 2020 12:13:08 +0300 Subject: MLK-23567-3 ASoC: fsl_xcvr: release M0+ core prior raising interrupt M0+ core must be released prior raising any interrupt to M0+ core, otherwise interrupt will be lost. Fixes: b16426007842 ("MLK-23567-2 ASoC: fsl_xcvr: enable SPDIF TX") Signed-off-by: Viorel Suman Reviewed-by: Shengjiu Wang --- sound/soc/fsl/fsl_xcvr.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'sound/soc/fsl/fsl_xcvr.c') diff --git a/sound/soc/fsl/fsl_xcvr.c b/sound/soc/fsl/fsl_xcvr.c index 6efec733c012..06fba208f19e 100644 --- a/sound/soc/fsl/fsl_xcvr.c +++ b/sound/soc/fsl/fsl_xcvr.c @@ -288,6 +288,25 @@ static int fsl_xcvr_prepare(struct snd_pcm_substream *substream, u32 m_ctl = 0, v_ctl = 0, m_isr = 0, v_isr = 0, val; int ret = 0; + if (tx && xcvr->mode == FSL_XCVR_MODE_SPDIF) { + val = FSL_XCVR_TX_DPTH_CTRL_BYPASS_FEM; + val |= FSL_XCVR_TX_DPTH_CTRL_FRM_FMT; + ret = regmap_write(xcvr->regmap, FSL_XCVR_TX_DPTH_CTRL_SET, val); + if (ret < 0) { + dev_err(dai->dev, "Failed to set TX_DPTH: %d\n", ret); + return ret; + } + } else { + /* Release M0+ reset */ + ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, + FSL_XCVR_EXT_CTRL_CORE_RESET, 0); + if (ret < 0) { + dev_err(dai->dev, "M0+ core release failed: %d\n", ret); + return ret; + } + mdelay(100); + } + ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_IER0, FSL_XCVR_IRQ_EARC_ALL, FSL_XCVR_IRQ_EARC_ALL); if (ret < 0) { @@ -336,24 +355,6 @@ static int fsl_xcvr_prepare(struct snd_pcm_substream *substream, return ret; } - if (tx && xcvr->mode == FSL_XCVR_MODE_SPDIF) { - val = FSL_XCVR_TX_DPTH_CTRL_BYPASS_FEM; - val |= FSL_XCVR_TX_DPTH_CTRL_FRM_FMT; - ret = regmap_write(xcvr->regmap, FSL_XCVR_TX_DPTH_CTRL_SET, val); - if (ret < 0) { - dev_err(dai->dev, "Failed to set TX_DPTH: %d\n", ret); - return ret; - } - } else { - /* Release M0+ reset */ - ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, - FSL_XCVR_EXT_CTRL_CORE_RESET, 0); - if (ret < 0) { - dev_err(dai->dev, "M0+ core release failed: %d\n", ret); - return ret; - } - } - return 0; } -- cgit v1.2.3