]> xenbits.xensource.com Git - people/aperard/linux-chromebook.git/commitdiff
CHERRY-PICK: ARM: EXYNOS4: Enable Suspend/Resume of MCT.
authorMyungJoo Ham <myungjoo.ham@samsung.com>
Wed, 2 May 2012 02:17:11 +0000 (11:17 +0900)
committerChromeBot <chrome-bot@google.com>
Sat, 9 Feb 2013 00:25:31 +0000 (16:25 -0800)
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 <myungjoo.ham@samsung.com>
(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 <snanda@chromium.org>
Commit-Queue: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
arch/arm/mach-exynos/mct.c

index 0e4f9d16412260180d044e9cdeaf80f6761675b8..3dc0c033c43bd193fca9ea5cd92262b86523fa50 100644 (file)
@@ -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,
 };