[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.02.1608051102420.11835@pmeerw.net>
Date: Fri, 5 Aug 2016 11:04:51 +0200 (CEST)
From: Peter Meerwald-Stadler <pmeerw@...erw.net>
To: Adam Thomson <Adam.Thomson.Opensource@...semi.com>
cc: Mark Brown <broonie@...nel.org>,
Liam Girdwood <lgirdwood@...il.com>,
Jaroslav Kysela <perex@...ex.cz>,
Takashi Iwai <tiwai@...e.com>, alsa-devel@...a-project.org,
Support Opensource <support.opensource@...semi.com>,
linux-kernel@...r.kernel.org, c.huber@...-electronic.com
Subject: Re: [alsa-devel] [PATCH 4/4] ASoC: da7213: Improve 32KHz mode PLL
locking
> To aid PLL in locking on to a 32KHz MCLK, some register mods
> are made during PLL configuration, and when enabling the DAI,
> to achieve the full range of sample rates.
thanks for the patch series; we are about to test...
some comments below
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@...semi.com>
> ---
> sound/soc/codecs/da7213.c | 25 ++++++++++++++++++++++++-
> 1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/codecs/da7213.c b/sound/soc/codecs/da7213.c
> index 79b8324..095fe40 100644
> --- a/sound/soc/codecs/da7213.c
> +++ b/sound/soc/codecs/da7213.c
> @@ -750,11 +750,18 @@ static int da7213_dai_event(struct snd_soc_dapm_widget *w,
> snd_soc_update_bits(codec, DA7213_PC_COUNT,
> DA7213_PC_FREERUN_MASK, 0);
>
> - /* Slave mode, if SRM not enabled no need for status checks */
> + /* If SRM not enabled then nothing more to do */
> pll_ctrl = snd_soc_read(codec, DA7213_PLL_CTRL);
> if (!(pll_ctrl & DA7213_PLL_SRM_EN))
> return 0;
>
> + /* Assist 32KHz mode PLL lock */
> + if (pll_ctrl & DA7213_PLL_32K_MODE) {
these registers cannot not found in the datasheet;
maybe add descriptive #defines in da7213.h
> + snd_soc_write(codec, 0xF0, 0x8B);
> + snd_soc_write(codec, 0xF2, 0x03);
> + snd_soc_write(codec, 0xF0, 0x00);
> + }
> +
> /* Check SRM has locked */
> do {
> pll_status = snd_soc_read(codec, DA7213_PLL_STATUS);
> @@ -771,6 +778,14 @@ static int da7213_dai_event(struct snd_soc_dapm_widget *w,
>
> return 0;
> case SND_SOC_DAPM_POST_PMD:
> + /* Revert 32KHz PLL lock udpates if applied previously */
> + pll_ctrl = snd_soc_read(codec, DA7213_PLL_CTRL);
> + if (pll_ctrl & DA7213_PLL_32K_MODE) {
> + snd_soc_write(codec, 0xF0, 0x8B);
> + snd_soc_write(codec, 0xF2, 0x01);
> + snd_soc_write(codec, 0xF0, 0x00);
> + }
> +
> /* PC free-running */
> snd_soc_update_bits(codec, DA7213_PC_COUNT,
> DA7213_PC_FREERUN_MASK,
> @@ -1428,6 +1443,14 @@ static int da7213_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
> DA7213_PLL_INDIV_MASK | DA7213_PLL_MODE_MASK,
> pll_ctrl);
>
> + /* Assist 32KHz mode PLL lock */
> + if (source == DA7213_SYSCLK_PLL_32KHZ) {
> + snd_soc_write(codec, 0xF0, 0x8B);
> + snd_soc_write(codec, 0xF1, 0x03);
> + snd_soc_write(codec, 0xF1, 0x01);
> + snd_soc_write(codec, 0xF0, 0x00);
> + }
> +
> return 0;
> }
--
Peter Meerwald-Stadler
+43-664-2444418 (mobile)
Powered by blists - more mailing lists