summaryrefslogtreecommitdiff
path: root/arch/arm/mach-pxa/palmld.c
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut@gmail.com>2009-03-28 12:37:42 +0100
committerEric Miao <eric.miao@marvell.com>2009-04-04 10:26:34 +0800
commit81854f82c5c1a203b2f5c94f6aa2ed8b8e19f025 (patch)
tree2eac472ee815f31cfeca6ab396c6cd6347dc2871 /arch/arm/mach-pxa/palmld.c
parent8c8aa5fa3060abc17e8a07d15f575485f6a0c0b8 (diff)
[ARM] pxa: Add support for suspend on PalmTX, T5 and LD
Signed-off-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Eric Miao <eric.miao@marvell.com>
Diffstat (limited to 'arch/arm/mach-pxa/palmld.c')
-rw-r--r--arch/arm/mach-pxa/palmld.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c
index 8587477a9bb7..ecf5910e39d7 100644
--- a/arch/arm/mach-pxa/palmld.c
+++ b/arch/arm/mach-pxa/palmld.c
@@ -24,6 +24,7 @@
#include <linux/gpio.h>
#include <linux/wm97xx_batt.h>
#include <linux/power_supply.h>
+#include <linux/sysdev.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -68,10 +69,10 @@ static unsigned long palmld_pin_config[] __initdata = {
GPIO47_FICP_TXD,
/* MATRIX KEYPAD */
- GPIO100_KP_MKIN_0,
- GPIO101_KP_MKIN_1,
- GPIO102_KP_MKIN_2,
- GPIO97_KP_MKIN_3,
+ GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
+ GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
+ GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
+ GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
GPIO103_KP_MKOUT_0,
GPIO104_KP_MKOUT_1,
GPIO105_KP_MKOUT_2,
@@ -507,6 +508,33 @@ static struct pxafb_mach_info palmld_lcd_screen = {
};
/******************************************************************************
+ * Power management - standby
+ ******************************************************************************/
+#ifdef CONFIG_PM
+static u32 *addr __initdata;
+static u32 resume[3] __initdata = {
+ 0xe3a00101, /* mov r0, #0x40000000 */
+ 0xe380060f, /* orr r0, r0, #0x00f00000 */
+ 0xe590f008, /* ldr pc, [r0, #0x08] */
+};
+
+static int __init palmld_pm_init(void)
+{
+ int i;
+
+ /* this is where the bootloader jumps */
+ addr = phys_to_virt(PALMLD_STR_BASE);
+
+ for (i = 0; i < 3; i++)
+ addr[i] = resume[i];
+
+ return 0;
+}
+
+device_initcall(palmld_pm_init);
+#endif
+
+/******************************************************************************
* Machine init
******************************************************************************/
static struct platform_device *devices[] __initdata = {