diff options
author | Nicolin Chen <Guangyu.Chen@freescale.com> | 2014-02-18 08:08:19 -0500 |
---|---|---|
committer | Nitin Garg <nitin.garg@freescale.com> | 2014-04-16 09:57:34 -0400 |
commit | 35c4f8b3b87b23f0aaed69eea117648e5be57921 (patch) | |
tree | b3d11bc8494668fe0b617f70a98ae9c3916ff1ee | |
parent | ad1e3ddeab2125a2cc4acf0ba4eca004ae542baf (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.c | 30 |
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 | ||
569 | static 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 | |||
569 | static int fsl_esai_probe(struct platform_device *pdev) | 595 | static 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 | ||
677 | failed_pcm_init: | 703 | failed_pcm_init: |