summaryrefslogtreecommitdiff
path: root/sound/soc/fsl/fsl_xcvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/fsl/fsl_xcvr.c')
-rw-r--r--sound/soc/fsl/fsl_xcvr.c37
1 files changed, 19 insertions, 18 deletions
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;
}