aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolin Chen <Guangyu.Chen@freescale.com>2014-02-18 08:08:19 -0500
committerNitin Garg <nitin.garg@freescale.com>2014-04-16 09:57:34 -0400
commit35c4f8b3b87b23f0aaed69eea117648e5be57921 (patch)
treeb3d11bc8494668fe0b617f70a98ae9c3916ff1ee
parentad1e3ddeab2125a2cc4acf0ba4eca004ae542baf (diff)
ENGR00299756-5 ASoC: fsl_esai: Add default init for ESAI after probe()
This patch extracts the register init code for ESAI along with the default slot number which is more common to I2S and LEFT_J mode. Acked-by: Wang Shengjiu <b02247@freescale.com> Signed-off-by: Nicolin Chen <Guangyu.Chen@freescale.com>
-rw-r--r--sound/soc/fsl/fsl_esai.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 1eda08f7b490..44ba41072b37 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -566,6 +566,32 @@ static const struct snd_soc_component_driver fsl_esai_component = {
566 .name = "fsl-esai", 566 .name = "fsl-esai",
567}; 567};
568 568
569static int fsl_esai_reg_init(struct fsl_esai *esai)
570{
571 u32 xccr, slots = 2;
572
573 clk_enable(esai->clk);
574
575 /* Reset and enable the ESAI module */
576 writel(ESAI_ECR_ERST, esai->base + ESAI_ECR);
577 writel(ESAI_ECR_ESAIEN, esai->base + ESAI_ECR);
578
579 /* Set default slot number to 2 for common DAI FMTs */
580 xccr = readl(esai->base + ESAI_TCCR);
581 xccr &= ESAI_TCCR_TDC_MASK;
582 xccr |= ESAI_TCCR_TDC(slots - 1);
583 writel(xccr, esai->base + ESAI_TCCR);
584
585 xccr = readl(esai->base + ESAI_RCCR);
586 xccr &= ESAI_RCCR_RDC_MASK;
587 xccr |= ESAI_RCCR_RDC(slots - 1);
588 writel(xccr, esai->base + ESAI_RCCR);
589
590 clk_disable(esai->clk);
591
592 return 0;
593}
594
569static int fsl_esai_probe(struct platform_device *pdev) 595static int fsl_esai_probe(struct platform_device *pdev)
570{ 596{
571 struct device_node *np = pdev->dev.of_node; 597 struct device_node *np = pdev->dev.of_node;
@@ -670,8 +696,8 @@ static int fsl_esai_probe(struct platform_device *pdev)
670 goto failed_pcm_init; 696 goto failed_pcm_init;
671 } 697 }
672 698
673 writel(ESAI_ECR_ERST, esai->base + ESAI_ECR); 699 fsl_esai_reg_init(esai);
674 writel(ESAI_ECR_ESAIEN, esai->base + ESAI_ECR); 700
675 return 0; 701 return 0;
676 702
677failed_pcm_init: 703failed_pcm_init: