Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13baf88b authored by Bastian Hecht's avatar Bastian Hecht Committed by Simon Horman
Browse files

ARM: shmobile: sh73a0: Add CPU sleep suspend



Add the lighest possible sleep mode on Cortex-A9 cores: CPU sleep. It is
entered by a simple dsb and wfi instruction via cpu_do_idle(). As just
clocks are stopped there is no need to save or restore any state of the
system.

Signed-off-by: default avatarBastian Hecht <hechtb+renesas@gmail.com>
Acked-by: default avatarMagnus Damm <damm@opensource.se>
Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent 8a21cdae
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ obj-$(CONFIG_ARCH_SHMOBILE) += pm-rmobile.o
obj-$(CONFIG_ARCH_SH7372)	+= pm-sh7372.o sleep-sh7372.o
obj-$(CONFIG_ARCH_R8A7740)	+= pm-r8a7740.o
obj-$(CONFIG_ARCH_R8A7779)	+= pm-r8a7779.o
obj-$(CONFIG_ARCH_SH73A0)	+= pm-sh73a0.o

# Board objects
obj-$(CONFIG_MACH_AP4EVB)	+= board-ap4evb.o
+2 −0
Original line number Diff line number Diff line
@@ -772,6 +772,8 @@ static void __init kzm_init(void)

	sh73a0_add_standard_devices();
	platform_add_devices(kzm_devices, ARRAY_SIZE(kzm_devices));

	sh73a0_pm_init();
}

static void kzm9g_restart(char mode, const char *cmd)
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ extern void sh73a0_add_early_devices(void);
extern void sh73a0_add_standard_devices(void);
extern void sh73a0_clock_init(void);
extern void sh73a0_pinmux_init(void);
extern void sh73a0_pm_init(void);
extern struct clk sh73a0_extal1_clk;
extern struct clk sh73a0_extal2_clk;
extern struct clk sh73a0_extcki_clk;
+32 −0
Original line number Diff line number Diff line
/*
 * sh73a0 Power management support
 *
 *  Copyright (C) 2012 Bastian Hecht <hechtb+renesas@gmail.com>
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 */

#include <linux/suspend.h>
#include <mach/common.h>

#ifdef CONFIG_SUSPEND
static int sh73a0_enter_suspend(suspend_state_t suspend_state)
{
	cpu_do_idle();
	return 0;
}

static void sh73a0_suspend_init(void)
{
	shmobile_suspend_ops.enter = sh73a0_enter_suspend;
}
#else
static void sh73a0_suspend_init(void) {}
#endif

void __init sh73a0_pm_init(void)
{
	sh73a0_suspend_init();
}