aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Thomson <Adam.Thomson.Opensource@diasemi.com>2016-05-10 11:11:06 -0400
committerMark Brown <broonie@kernel.org>2016-05-10 14:24:19 -0400
commit7e28fd469624fc41ec326a31abbc63a7afdd10f5 (patch)
tree00cbbdc6e6965d7279130826f8ad518bfdc77f7b
parentd575b0b0f01a805508c5cf48b540f004e9b5de07 (diff)
ASoC: da7213: Default PC counter to free-running when DAI disabled
Currently PC counter is always synchronised to DAI which means that when the DAI is disabled, features such as ALC calibration cannot be executed successfully. This patch makes sure that when the DAI is disabled, PC counter is set to free-running. Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/codecs/da7213.c13
-rw-r--r--sound/soc/codecs/da7213.h3
2 files changed, 16 insertions, 0 deletions
diff --git a/sound/soc/codecs/da7213.c b/sound/soc/codecs/da7213.c
index 680d11116ccf..657b7eba9954 100644
--- a/sound/soc/codecs/da7213.c
+++ b/sound/soc/codecs/da7213.c
@@ -746,6 +746,10 @@ static int da7213_dai_event(struct snd_soc_dapm_widget *w,
746 DA7213_DAI_CLK_EN_MASK, 746 DA7213_DAI_CLK_EN_MASK,
747 DA7213_DAI_CLK_EN_MASK); 747 DA7213_DAI_CLK_EN_MASK);
748 748
749 /* PC synchronised to DAI */
750 snd_soc_update_bits(codec, DA7213_PC_COUNT,
751 DA7213_PC_FREERUN_MASK, 0);
752
749 /* Slave mode, if SRM not enabled no need for status checks */ 753 /* Slave mode, if SRM not enabled no need for status checks */
750 pll_ctrl = snd_soc_read(codec, DA7213_PLL_CTRL); 754 pll_ctrl = snd_soc_read(codec, DA7213_PLL_CTRL);
751 if (!(pll_ctrl & DA7213_PLL_SRM_EN)) 755 if (!(pll_ctrl & DA7213_PLL_SRM_EN))
@@ -767,6 +771,11 @@ static int da7213_dai_event(struct snd_soc_dapm_widget *w,
767 771
768 return 0; 772 return 0;
769 case SND_SOC_DAPM_POST_PMD: 773 case SND_SOC_DAPM_POST_PMD:
774 /* PC free-running */
775 snd_soc_update_bits(codec, DA7213_PC_COUNT,
776 DA7213_PC_FREERUN_MASK,
777 DA7213_PC_FREERUN_MASK);
778
770 /* Disable DAI clks if in master mode */ 779 /* Disable DAI clks if in master mode */
771 if (da7213->master) 780 if (da7213->master)
772 snd_soc_update_bits(codec, DA7213_DAI_CLK_MODE, 781 snd_soc_update_bits(codec, DA7213_DAI_CLK_MODE,
@@ -1599,6 +1608,10 @@ static int da7213_probe(struct snd_soc_codec *codec)
1599 /* Default to using SRM for slave mode */ 1608 /* Default to using SRM for slave mode */
1600 da7213->srm_en = true; 1609 da7213->srm_en = true;
1601 1610
1611 /* Default PC counter to free-running */
1612 snd_soc_update_bits(codec, DA7213_PC_COUNT, DA7213_PC_FREERUN_MASK,
1613 DA7213_PC_FREERUN_MASK);
1614
1602 /* Enable all Gain Ramps */ 1615 /* Enable all Gain Ramps */
1603 snd_soc_update_bits(codec, DA7213_AUX_L_CTRL, 1616 snd_soc_update_bits(codec, DA7213_AUX_L_CTRL,
1604 DA7213_GAIN_RAMP_EN, DA7213_GAIN_RAMP_EN); 1617 DA7213_GAIN_RAMP_EN, DA7213_GAIN_RAMP_EN);
diff --git a/sound/soc/codecs/da7213.h b/sound/soc/codecs/da7213.h
index af75340dea63..26b87e3c3088 100644
--- a/sound/soc/codecs/da7213.h
+++ b/sound/soc/codecs/da7213.h
@@ -413,6 +413,9 @@
413#define DA7213_DMIC_CLK_RATE_SHIFT 2 413#define DA7213_DMIC_CLK_RATE_SHIFT 2
414#define DA7213_DMIC_CLK_RATE_MASK (0x1 << 2) 414#define DA7213_DMIC_CLK_RATE_MASK (0x1 << 2)
415 415
416/* DA7213_PC_COUNT = 0x94 */
417#define DA7213_PC_FREERUN_MASK (0x1 << 0)
418
416/* DA7213_DIG_CTRL = 0x99 */ 419/* DA7213_DIG_CTRL = 0x99 */
417#define DA7213_DAC_L_INV_SHIFT 3 420#define DA7213_DAC_L_INV_SHIFT 3
418#define DA7213_DAC_R_INV_SHIFT 7 421#define DA7213_DAC_R_INV_SHIFT 7