summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBitan Biswas <bbiswas@nvidia.com>2010-04-15 17:53:14 +0530
committerGary King <gking@nvidia.com>2010-04-22 21:14:26 -0700
commit13d2615d28129c45d4d54c40d30761697712b5de (patch)
treebf10c0364e41e1dfb9166c4daf25514aa52d8c3a
parent1a7037fc2f4a8129fadd189a32b946d31535b1d9 (diff)
tegra : lid support
Used EV_SW and SW_LID input events, and modified Android policy manager to respect lid events as wakeups. 1) kernel changes - added driver registration using gpio_keys library Bug 635301: [Android\Whistler\Harmony] Power off/ Lid (close/open) Button support in Android Tested on: harmony. lp1 suspend/wakeup using slider S4 right/left respectively. Change-Id: I694117d64e7319f2efda8251aa8b708ea200e279 Reviewed-on: http://git-master/r/1125 Reviewed-by: Gary King <gking@nvidia.com> Reviewed-by: Varun Wadekar <vwadekar@nvidia.com> Tested-by: Mallikarjun Kasoju <mkasoju@nvidia.com>
-rw-r--r--arch/arm/configs/tegra_harmony_android_defconfig2
-rw-r--r--arch/arm/mach-tegra/board_nvodm.c35
2 files changed, 36 insertions, 1 deletions
diff --git a/arch/arm/configs/tegra_harmony_android_defconfig b/arch/arm/configs/tegra_harmony_android_defconfig
index 77f6d8fe745a..a928c6255006 100644
--- a/arch/arm/configs/tegra_harmony_android_defconfig
+++ b/arch/arm/configs/tegra_harmony_android_defconfig
@@ -861,7 +861,7 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_GPIO=y
# CONFIG_KEYBOARD_TEGRA is not set
# CONFIG_KEYBOARD_TEGRA_GPIO is not set
CONFIG_KEYBOARD_TEGRA_NVEC=y
diff --git a/arch/arm/mach-tegra/board_nvodm.c b/arch/arm/mach-tegra/board_nvodm.c
index 0717929e1ca7..d9eefc00db3f 100644
--- a/arch/arm/mach-tegra/board_nvodm.c
+++ b/arch/arm/mach-tegra/board_nvodm.c
@@ -28,6 +28,11 @@
#include <linux/i2c.h>
#include <linux/pm.h>
#include <linux/spi/spi.h>
+#if CONFIG_KEYBOARD_GPIO
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include "include/mach/gpio-names.h"
+#endif
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -133,6 +138,32 @@ static struct platform_device tegra_nand_device =
#endif
+#if CONFIG_KEYBOARD_GPIO
+static struct gpio_keys_button tegra_buttons[] = {
+ {
+ .gpio = TEGRA_GPIO_PU5,
+ .code = SW_LID,
+ .desc = "LID",
+ .active_low = 0,
+ .type = EV_SW,
+ .wakeup = 1,
+ }
+};
+
+static struct gpio_keys_platform_data tegra_button_data = {
+ .buttons = tegra_buttons,
+ .nbuttons = ARRAY_SIZE(tegra_buttons),
+};
+
+static struct platform_device tegra_button_device = {
+ .name = "gpio-keys",
+ .id = 3,
+ .dev = {
+ .platform_data = &tegra_button_data,
+ }
+};
+#endif
+
#ifdef CONFIG_RTC_DRV_TEGRA_ODM
static struct platform_device tegra_rtc_device =
{
@@ -586,6 +617,10 @@ static void __init tegra_machine_init(void)
tegra_set_voltage( NV_VDD_PEX_CLK_ODM_ID, 0);
#endif
+#if CONFIG_KEYBOARD_GPIO
+ platform_device_register(&tegra_button_device);
+#endif
+
pm_power_off = tegra_system_power_off;
}