From: Javier Martinez Canillas Date: Thu, 13 Nov 2014 02:14:40 +0000 (+0900) Subject: ARM: EXYNOS: Call regulator core suspend prepare and finish functions X-Git-Tag: v3.19-rc1~169^2~9^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c645a598f99768e6cc82129081458dfdd0c273b7;p=platform%2Fkernel%2Flinux-exynos.git ARM: EXYNOS: Call regulator core suspend prepare and finish functions The regulator framework has a set of helpers functions to be used when the system is entering and leaving from suspend but these are not called on Exynos platforms. This means that the .set_suspend_* function handlers defined by regulator drivers are not called when the system is suspended. Suggested-by: Doug Anderson Signed-off-by: Javier Martinez Canillas Reviewed-by: Doug Anderson Reviewed-by: Chanwoo Choi Signed-off-by: Kukjin Kim --- diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index cc8d237..f8e7dcd 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -443,6 +444,22 @@ static int exynos_suspend_enter(suspend_state_t state) static int exynos_suspend_prepare(void) { + int ret; + + /* + * REVISIT: It would be better if struct platform_suspend_ops + * .prepare handler get the suspend_state_t as a parameter to + * avoid hard-coding the suspend to mem state. It's safe to do + * it now only because the suspend_valid_only_mem function is + * used as the .valid callback used to check if a given state + * is supported by the platform anyways. + */ + ret = regulator_suspend_prepare(PM_SUSPEND_MEM); + if (ret) { + pr_err("Failed to prepare regulators for suspend (%d)\n", ret); + return ret; + } + s3c_pm_check_prepare(); return 0; @@ -450,7 +467,13 @@ static int exynos_suspend_prepare(void) static void exynos_suspend_finish(void) { + int ret; + s3c_pm_check_cleanup(); + + ret = regulator_suspend_finish(); + if (ret) + pr_warn("Failed to resume regulators from suspend (%d)\n", ret); } static const struct platform_suspend_ops exynos_suspend_ops = {