diff options
author | Bitan Biswas <bbiswas@nvidia.com> | 2010-04-15 17:53:14 +0530 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-04-22 21:14:26 -0700 |
commit | 13d2615d28129c45d4d54c40d30761697712b5de (patch) | |
tree | bf10c0364e41e1dfb9166c4daf25514aa52d8c3a | |
parent | 1a7037fc2f4a8129fadd189a32b946d31535b1d9 (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_defconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board_nvodm.c | 35 |
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; } |