Re: [PATCH] ASoC: nau8540: new codec driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 05, 2017 at 02:20:44PM +0800, John Hsu wrote:

This looks good overall, a couple of small points though:

> +static int nau8540_config_sysclk(struct nau8540 *nau8540,
> +       int clk_id, unsigned int freq)
> +{
> +       struct regmap *regmap = nau8540->regmap;
> +
> +       switch (clk_id) {
> +       case NAU8540_CLK_DIS:
> +       case NAU8540_CLK_MCLK:
> +               regmap_update_bits(regmap, NAU8540_REG_CLOCK_SRC,
> +                       NAU8540_CLK_SRC_MASK, NAU8540_CLK_SRC_MCLK);
> +               regmap_update_bits(regmap, NAU8540_REG_FLL6,
> +                       NAU8540_DCO_EN, 0);
> +               break;
> +
> +       case NAU8540_CLK_INTERNAL:
> +               regmap_update_bits(regmap, NAU8540_REG_FLL6,
> +                       NAU8540_DCO_EN, NAU8540_DCO_EN);
> +               regmap_update_bits(regmap, NAU8540_REG_CLOCK_SRC,
> +                       NAU8540_CLK_SRC_MASK, NAU8540_CLK_SRC_VCO);
> +               break;

The above are fine but...

> +
> +       case NAU8540_CLK_FLL_MCLK:
> +               regmap_update_bits(regmap, NAU8540_REG_FLL3,
> +                       NAU8540_FLL_CLK_SRC_MASK, NAU8540_FLL_CLK_SRC_MCLK);
> +               break;
> +
> +       case NAU8540_CLK_FLL_BLK:
> +               regmap_update_bits(regmap, NAU8540_REG_FLL3,
> +                       NAU8540_FLL_CLK_SRC_MASK, NAU8540_FLL_CLK_SRC_BLK);
> +               break;
> +
> +       case NAU8540_CLK_FLL_FS:
> +               regmap_update_bits(regmap, NAU8540_REG_FLL3,
> +                       NAU8540_FLL_CLK_SRC_MASK, NAU8540_FLL_CLK_SRC_FS);
> +               break;

...these look like they're mixing in FLL configuration which I'd expect
to be done with set_pll() via the source argument and I'm not seeing
anything that sets the device to use the FLL here.  I'd expect the
source selection to go into set_pll() and I'd expect this function to
have a setting which tells the device to use the FLL.

> +static int nau8540_set_sysclk(struct snd_soc_codec *codec,
> +       int clk_id, int source, unsigned int freq, int dir)
> +{
> +       struct nau8540 *nau8540 = snd_soc_codec_get_drvdata(codec);
> +
> +       return nau8540_config_sysclk(nau8540, clk_id, freq);
> +}

This wrapper isn't really adding anything.

> +static void nau8540_init_regs(struct nau8540 *nau8540)
> +{
> +       struct regmap *regmap = nau8540->regmap;
> +
> +       /* Enable Bias/VMID/VMID Tieoff */
> +       regmap_update_bits(regmap, NAU8540_REG_VMID_CTRL,
> +               NAU8540_VMID_EN | NAU8540_VMID_SEL_MASK,
> +               NAU8540_VMID_EN | (0x2 << NAU8540_VMID_SEL_SFT));
> +       regmap_update_bits(regmap, NAU8540_REG_REFERENCE,
> +               NAU8540_PRECHARGE_DIS | NAU8540_GLOBAL_BIAS_EN,
> +               NAU8540_PRECHARGE_DIS | NAU8540_GLOBAL_BIAS_EN);
> +       mdelay(2);
> +       regmap_update_bits(regmap, NAU8540_REG_MIC_BIAS,
> +               NAU8540_PU_PRE, NAU8540_PU_PRE);
> +       regmap_update_bits(regmap, NAU8540_REG_CLOCK_CTRL,
> +               NAU8540_CLK_ADC_EN | NAU8540_CLK_I2S_EN,
> +               NAU8540_CLK_ADC_EN | NAU8540_CLK_I2S_EN);
> +       /* ADC OSR selection, CLK_ADC = Fs * OSR */
> +       regmap_update_bits(regmap, NAU8540_REG_ADC_SAMPLE_RATE,
> +               NAU8540_ADC_OSR_MASK, NAU8540_ADC_OSR_64);
> +}

Does this sequence need to be done as part of resume as well?

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux