From: MyungJoo Ham Date: Wed, 2 May 2012 02:17:11 +0000 (+0900) Subject: CHERRY-PICK: ARM: EXYNOS4: Enable Suspend/Resume of MCT. X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=0c6911dfe195b55d00a363ea6dbedf23c620dc27;p=people%2Faperard%2Flinux-chromebook.git CHERRY-PICK: ARM: EXYNOS4: Enable Suspend/Resume of MCT. Suspend/Resume has been failing because of MCT after introducing EXT-GIC to EXYNOS4. This patch allows MCT's PM to work properly. Change-Id: I562dbd1a7e8b7f99e50b03dcb102e351617796ac Signed-off-by: MyungJoo Ham (cherry picked from commits f20446c7cd2138ec53428151988b223f3a99b1b4 and 6c34b32be3e9ca8c1d3b5bd303cb54063d1454fc in branch charger-manager-for-next of git://git.infradead.org/users/kmpark/linux-2.6-samsung) Modified by sjg@chromium.org to build without warnings BUG=chrome-os-partner:10617 TEST=build and boot to kernel prompt on snow Change-Id: I164d119b9c1a82b72e79bafe75d26fe89b0bc736 Reviewed-on: https://gerrit.chromium.org/gerrit/42572 Reviewed-by: Sameer Nanda Commit-Queue: Simon Glass Tested-by: Simon Glass --- diff --git a/arch/arm/mach-exynos/mct.c b/arch/arm/mach-exynos/mct.c index 0e4f9d1641226..3dc0c033c43bd 100644 --- a/arch/arm/mach-exynos/mct.c +++ b/arch/arm/mach-exynos/mct.c @@ -42,6 +42,7 @@ enum { static unsigned long clk_rate; static unsigned int mct_int_type; +static cycle_t time_suspended; struct mct_clock_event_device { struct clock_event_device *evt; @@ -148,9 +149,18 @@ static cycle_t exynos4_frc_read(struct clocksource *cs) return ((cycle_t)hi << 32) | lo; } +static int exynos4_frc_suspend(void) +{ + time_suspended = exynos4_frc_read(NULL); + + return 0; +}; + static void exynos4_frc_resume(void) { - exynos4_mct_frc_start(0, 0); + exynos4_mct_frc_start((u32)(time_suspended >> 32), (u32)time_suspended); + + exynos4_mct_write(0x1, EXYNOS4_MCT_L_BASE(0) + MCT_L_TCNTB_OFFSET); } struct clocksource mct_frc = { @@ -162,6 +172,7 @@ struct clocksource mct_frc = { }; struct syscore_ops mct_frc_core = { + .suspend = exynos4_frc_suspend, .resume = exynos4_frc_resume, };