summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-harmony.c
diff options
context:
space:
mode:
authorBill Huang <bilhuang@nvidia.com>2011-12-15 02:53:20 -0800
committerDan Willemsen <dwillemsen@nvidia.com>2012-03-23 21:01:33 -0700
commitafca07a691db593768c11342ec58b97e02aa28b2 (patch)
tree38771ba49b3d6af754469786e6a8da085a595f33 /arch/arm/mach-tegra/board-harmony.c
parent088e74436206fd35bfc6cb2060b8c6675975e4c3 (diff)
arm: tegra: harmony: enable power key to wake up the system
enable power button for waking up harmony bug 911107 Change-Id: Id69204a904cafa4186cbac201830ac6d1e5a81b1 Signed-off-by: Bill Huang <bilhuang@nvidia.com> Reviewed-on: http://git-master/r/70274 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com> Rebase-Id: Rf4865d89bf0a2ee24fb598512dfa63ee8737a96d
Diffstat (limited to 'arch/arm/mach-tegra/board-harmony.c')
-rw-r--r--arch/arm/mach-tegra/board-harmony.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c
index d865ff8204dc..3691f1ad1a0a 100644
--- a/arch/arm/mach-tegra/board-harmony.c
+++ b/arch/arm/mach-tegra/board-harmony.c
@@ -24,8 +24,10 @@
#include <linux/mtd/partitions.h>
#include <linux/dma-mapping.h>
#include <linux/pda_power.h>
+#include <linux/input.h>
#include <linux/io.h>
#include <linux/gpio.h>
+#include <linux/gpio_keys.h>
#include <linux/i2c.h>
#include <linux/memblock.h>
@@ -174,6 +176,30 @@ static struct plat_serial8250_port debug_uart_platform_data[] = {
}
};
+static struct gpio_keys_button harmony_gpio_keys_buttons[] = {
+ {
+ .code = KEY_POWER,
+ .gpio = TEGRA_GPIO_POWERKEY,
+ .active_low = 1,
+ .desc = "Power",
+ .type = EV_KEY,
+ .wakeup = 1,
+ },
+};
+
+static struct gpio_keys_platform_data harmony_gpio_keys = {
+ .buttons = harmony_gpio_keys_buttons,
+ .nbuttons = ARRAY_SIZE(harmony_gpio_keys_buttons),
+};
+
+static struct platform_device harmony_gpio_keys_device = {
+ .name = "gpio-keys",
+ .id = -1,
+ .dev = {
+ .platform_data = &harmony_gpio_keys,
+ }
+};
+
static struct platform_device debug_uart = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM,
@@ -182,6 +208,14 @@ static struct platform_device debug_uart = {
},
};
+static void harmony_keys_init(void)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(harmony_gpio_keys_buttons); i++)
+ tegra_gpio_enable(harmony_gpio_keys_buttons[i].gpio);
+}
+
static struct tegra_wm8903_platform_data harmony_audio_pdata = {
.gpio_spkr_en = TEGRA_GPIO_SPKR_EN,
.gpio_hp_det = TEGRA_GPIO_HP_DET,
@@ -329,6 +363,7 @@ static struct platform_device *harmony_devices[] __initdata = {
&tegra_pmu_device,
&tegra_nand_device,
&tegra_udc_device,
+ &harmony_gpio_keys_device,
&pda_power_device,
&tegra_ehci3_device,
&tegra_spi_device1,
@@ -387,6 +422,8 @@ static void __init tegra_harmony_init(void)
harmony_pinmux_init();
+ harmony_keys_init();
+
tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1;
tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2;
tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;