diff mbox

ASoC: nau8825: reduce standby power consumption

Message ID 1458619025-28306-1-git-send-email-KCHSU0@nuvoton.com (mailing list archive)
State Accepted
Commit 3a56103534cd4f700274224f4c249eafa74daa4b
Headers show

Commit Message

AS50 KCHSU0 March 22, 2016, 3:57 a.m. UTC
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(+)

Comments

Mark Brown March 28, 2016, 7:05 p.m. UTC | #1
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.
AS50 KCHSU0 March 30, 2016, 11:06 a.m. UTC | #2
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 mbox

Patch

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;