[PATCH v3 2/3] ARM: rockchip: set correct stabilization thresholds in suspend

Doug Anderson dianders at chromium.org
Wed Aug 5 18:54:06 PDT 2015


Heiko,

On Tue, Aug 4, 2015 at 3:51 PM, Heiko Stübner <heiko at sntech.de> wrote:
> Currently the stabilization thresholds for the oscillator and external pmu
> are statically set to 30ms based on a 32kHz clock rate. This leaves out the
> case when we don't switch to the 32kHz clock when only entering the shallow
> suspend mode where the logic keeps running.
>
> So, set the correct threshold after we have determined if we switch to the
> 32kHz clock or stay with the 24MHz one. Also set the oscillator-
> stabilization to 0 if it is kept running during suspend, as it of course
> does not need to stabilize then.
>
> Reported-by: Chris Zhong <zyw at rock-chips.com>
> Signed-off-by: Heiko Stuebner <heiko at sntech.de>
> ---
> changes since v2:
> - describe 32kHz vs 24MHz
> - don't wait for oscillator stabilization if it's still running,
>   as explained by Chris Zhong in v2
> changes since v1:
> - 24MHz oriented threshold is only needed in shallow suspend, the deep
>   suspend always switches to 32kHz and only leaves the 24MHz oscillator
>   running if needed for stuff like usb wakeup
>
>  arch/arm/mach-rockchip/pm.c | 22 +++++++++++++++++++---
>  arch/arm/mach-rockchip/pm.h |  4 ----
>  2 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/mach-rockchip/pm.c b/arch/arm/mach-rockchip/pm.c
> index 2ca1170..c11a30b 100644
> --- a/arch/arm/mach-rockchip/pm.c
> +++ b/arch/arm/mach-rockchip/pm.c
> @@ -145,6 +145,19 @@ static void rk3288_slp_mode_set(int level)
>
>                 mode_set1 |= BIT(PMU_CLR_ALIVE) | BIT(PMU_CLR_BUS) |
>                              BIT(PMU_CLR_PERI) | BIT(PMU_CLR_DMA);
> +
> +               /*
> +                * In deep suspend we use PMU_PMU_USE_LF to let the rk3288
> +                * switch its main clock supply to the alternative 32kHz
> +                * source. Therefore set 30ms on a 32kHz clock for pmic
> +                * stabilization. Similar 30ms on 24MHz for the other
> +                * mode below.
> +                */
> +               regmap_write(pmu_regmap, RK3288_PMU_STABL_CNT, 32 * 30);

Took me a little while to parse the comment, but it looks right.
Basically we need 30ms for PMIC stabilization both here and in the
other mode.  That is programmed as 32 * 30 here and 2400 * 30 there.
...and we know we're on 32k clock because of PMU_PMU_USE_LF.

Reviewed-by: Douglas Anderson <dianders at chromium.org>



More information about the linux-arm-kernel mailing list