diff options
author | Nicolin Chen <Guangyu.Chen@freescale.com> | 2014-05-06 04:56:02 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-05-12 18:13:13 -0400 |
commit | 4f8210f66e5a200c63770ea9445ff913a28a3be2 (patch) | |
tree | a7ff3110a8aa5ae93022644559ee0eea00d51235 | |
parent | 57ebbcafab0ce8cce4493c6a243ecdd7066e6ef1 (diff) |
ASoC: fsl_esai: Set PCRC and PRRC registers at the end of hw_params()
According to Reference Manual -- ESAI Initialization chapter, as the
standard procedure of ESAI personal reset, the PCRC and PRRC registers
should be remained in its reset value and then configured after T/RCCR
and T/RCR configurations's done but before TE/RE's enabling.
So this patch moves PCRC and PRRC settings to the end of hw_params().
Signed-off-by: Nicolin Chen <Guangyu.Chen@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | sound/soc/fsl/fsl_esai.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c index c674fd99158b..496ce2eb2f1f 100644 --- a/sound/soc/fsl/fsl_esai.c +++ b/sound/soc/fsl/fsl_esai.c | |||
@@ -461,12 +461,6 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream, | |||
461 | } | 461 | } |
462 | 462 | ||
463 | if (!dai->active) { | 463 | if (!dai->active) { |
464 | /* Reset Port C */ | ||
465 | regmap_update_bits(esai_priv->regmap, REG_ESAI_PRRC, | ||
466 | ESAI_PRRC_PDC_MASK, ESAI_PRRC_PDC(ESAI_GPIO)); | ||
467 | regmap_update_bits(esai_priv->regmap, REG_ESAI_PCRC, | ||
468 | ESAI_PCRC_PC_MASK, ESAI_PCRC_PC(ESAI_GPIO)); | ||
469 | |||
470 | /* Set synchronous mode */ | 464 | /* Set synchronous mode */ |
471 | regmap_update_bits(esai_priv->regmap, REG_ESAI_SAICR, | 465 | regmap_update_bits(esai_priv->regmap, REG_ESAI_SAICR, |
472 | ESAI_SAICR_SYNC, esai_priv->synchronous ? | 466 | ESAI_SAICR_SYNC, esai_priv->synchronous ? |
@@ -526,6 +520,11 @@ static int fsl_esai_hw_params(struct snd_pcm_substream *substream, | |||
526 | 520 | ||
527 | regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), mask, val); | 521 | regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), mask, val); |
528 | 522 | ||
523 | /* Remove ESAI personal reset by configuring ESAI_PCRC and ESAI_PRRC */ | ||
524 | regmap_update_bits(esai_priv->regmap, REG_ESAI_PRRC, | ||
525 | ESAI_PRRC_PDC_MASK, ESAI_PRRC_PDC(ESAI_GPIO)); | ||
526 | regmap_update_bits(esai_priv->regmap, REG_ESAI_PCRC, | ||
527 | ESAI_PCRC_PC_MASK, ESAI_PCRC_PC(ESAI_GPIO)); | ||
529 | return 0; | 528 | return 0; |
530 | } | 529 | } |
531 | 530 | ||