Message ID | 1458619025-28306-1-git-send-email-KCHSU0@nuvoton.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3a56103534cd4f700274224f4c249eafa74daa4b |
Headers | show |
On Tue, Mar 22, 2016 at 11:57:05AM +0800, John Hsu wrote: > @@ -1116,6 +1116,9 @@ static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id, > regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, > NAU8825_CLK_SRC_MASK, NAU8825_CLK_SRC_MCLK); > regmap_update_bits(regmap, NAU8825_REG_FLL6, NAU8825_DCO_EN, 0); > + /* MCLK not changed by clock tree */ > + regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, > + NAU8825_CLK_MCLK_SRC_MASK, 0); I'm going to apply this since I suspect there are already similar assumptions in the code but it does look like the issues Ben raised with one of your other patches with confusing sysclk management and overall device power might apply here. We can't rely on people changing the clock configuration in lower power modes.
Hi, On 3/29/2016 3:05 AM, Mark Brown wrote: > On Tue, Mar 22, 2016 at 11:57:05AM +0800, John Hsu wrote: > > >> @@ -1116,6 +1116,9 @@ static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id, >> regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, >> NAU8825_CLK_SRC_MASK, NAU8825_CLK_SRC_MCLK); >> regmap_update_bits(regmap, NAU8825_REG_FLL6, NAU8825_DCO_EN, 0); >> + /* MCLK not changed by clock tree */ >> + regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, >> + NAU8825_CLK_MCLK_SRC_MASK, 0); >> > > I'm going to apply this since I suspect there are already similar > assumptions in the code but it does look like the issues Ben raised with > one of your other patches with confusing sysclk management and overall > device power might apply here. We can't rely on people changing the > clock configuration in lower power modes. > If the platform has internal clock for interrupt, the codec power should use less power as possible. The patch is made to guarantee that requirement. The system has better power saving by slowing down the internal clock.
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c index 3e7bee2..4c8572c 100644 --- a/sound/soc/codecs/nau8825.c +++ b/sound/soc/codecs/nau8825.c @@ -1116,6 +1116,9 @@ static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id, regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, NAU8825_CLK_SRC_MASK, NAU8825_CLK_SRC_MCLK); regmap_update_bits(regmap, NAU8825_REG_FLL6, NAU8825_DCO_EN, 0); + /* MCLK not changed by clock tree */ + regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, + NAU8825_CLK_MCLK_SRC_MASK, 0); ret = nau8825_mclk_prepare(nau8825, freq); if (ret) return ret; @@ -1126,6 +1129,13 @@ static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id, NAU8825_DCO_EN); regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, NAU8825_CLK_SRC_MASK, NAU8825_CLK_SRC_VCO); + /* Decrease the VCO frequency for power saving */ + regmap_update_bits(regmap, NAU8825_REG_CLK_DIVIDER, + NAU8825_CLK_MCLK_SRC_MASK, 0xf); + regmap_update_bits(regmap, NAU8825_REG_FLL1, + NAU8825_FLL_RATIO_MASK, 0x10); + regmap_update_bits(regmap, NAU8825_REG_FLL6, + NAU8825_SDM_EN, NAU8825_SDM_EN); if (nau8825->mclk_freq) { clk_disable_unprepare(nau8825->mclk); nau8825->mclk_freq = 0;
Decrease internal clock frequency for power saving when standby. But clock divider needs restore when MCLK as system clock in playback. Signed-off-by: John Hsu <KCHSU0@nuvoton.com> --- sound/soc/codecs/nau8825.c | 10 ++++++++++ 1 file changed, 10 insertions(+)