summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-kai-kbc.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2012-03-26 19:30:40 +0530
committerVarun Wadekar <vwadekar@nvidia.com>2012-04-11 19:33:31 +0530
commite240f1ff6a8f04ecca150901ab710b42ed17e452 (patch)
treef614e20031d4a85d730a4e433c5ef8087dac5346 /arch/arm/mach-tegra/board-kai-kbc.c
parent8a7806c09eccdb488ef56fbcfa4e3c26f3e6288a (diff)
ARM: tegra: cardhu/Kai: Use gpio_keys driver for int key
gpio_keys driver support for the key which can generates only interrupt and not mapped to any gpio functionality. Using this feature to support the onkey which generates interrupt only when key is pressed. Change-Id: I502a45a1c510b92f4114ded713f7706b7a2c85d3 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/92460 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-kai-kbc.c')
-rw-r--r--arch/arm/mach-tegra/board-kai-kbc.c51
1 files changed, 18 insertions, 33 deletions
diff --git a/arch/arm/mach-tegra/board-kai-kbc.c b/arch/arm/mach-tegra/board-kai-kbc.c
index d2b58a0b0a2d..091cc986da9d 100644
--- a/arch/arm/mach-tegra/board-kai-kbc.c
+++ b/arch/arm/mach-tegra/board-kai-kbc.c
@@ -26,7 +26,6 @@
#include <linux/gpio.h>
#include <linux/gpio_keys.h>
#include <linux/mfd/max77663-core.h>
-#include <linux/interrupt_keys.h>
#include <linux/gpio_scrollwheel.h>
#include <mach/irqs.h>
@@ -52,6 +51,17 @@
.debounce_interval = 10, \
}
+#define GPIO_IKEY(_id, _irq, _iswake, _deb) \
+ { \
+ .code = _id, \
+ .gpio = -1, \
+ .irq = _irq, \
+ .desc = #_id, \
+ .type = EV_KEY, \
+ .wakeup = _iswake, \
+ .debounce_interval = _deb, \
+ }
+
static struct gpio_keys_button kai_keys[] = {
[0] = GPIO_KEY(KEY_MENU, PR2, 0),
[1] = GPIO_KEY(KEY_BACK, PQ1, 0),
@@ -59,6 +69,8 @@ static struct gpio_keys_button kai_keys[] = {
[3] = GPIO_KEY(KEY_SEARCH, PQ3, 0),
[4] = GPIO_KEY(KEY_VOLUMEUP, PR1, 0),
[5] = GPIO_KEY(KEY_VOLUMEDOWN, PR0, 0),
+ [6] = GPIO_IKEY(KEY_POWER, MAX77663_IRQ_BASE + MAX77663_IRQ_ONOFF_EN0_FALLING, 1, 100),
+ [7] = GPIO_IKEY(KEY_POWER, MAX77663_IRQ_BASE + MAX77663_IRQ_ONOFF_EN0_1SEC, 1, 3000),
};
static struct gpio_keys_platform_data kai_keys_platform_data = {
@@ -74,34 +86,6 @@ static struct platform_device kai_keys_device = {
},
};
-#define INT_KEY(_id, _irq, _iswake, _deb_int) \
- { \
- .code = _id, \
- .irq = _irq, \
- .active_low = 1, \
- .desc = #_id, \
- .type = EV_KEY, \
- .wakeup = _iswake, \
- .debounce_interval = _deb_int, \
- }
-static struct interrupt_keys_button kai_int_keys[] = {
- [0] = INT_KEY(KEY_POWER, MAX77663_IRQ_BASE + MAX77663_IRQ_ONOFF_EN0_FALLING, 0, 100),
- [1] = INT_KEY(KEY_POWER, MAX77663_IRQ_BASE + MAX77663_IRQ_ONOFF_EN0_1SEC, 0, 3000),
-};
-
-static struct interrupt_keys_platform_data kai_int_keys_pdata = {
- .int_buttons = kai_int_keys,
- .nbuttons = ARRAY_SIZE(kai_int_keys),
-};
-
-static struct platform_device kai_int_keys_device = {
- .name = "interrupt-keys",
- .id = 0,
- .dev = {
- .platform_data = &kai_int_keys_pdata,
- },
-};
-
int __init kai_keys_init(void)
{
int i;
@@ -109,12 +93,13 @@ int __init kai_keys_init(void)
pr_info("Registering gpio keys\n");
/* Enable gpio mode for other pins */
- for (i = 0; i < kai_keys_platform_data.nbuttons; i++)
- tegra_gpio_enable(kai_keys_platform_data.
- buttons[i].gpio);
+ for (i = 0; i < kai_keys_platform_data.nbuttons; i++) {
+ if (kai_keys_platform_data.buttons[i].gpio < 0)
+ continue;
+ tegra_gpio_enable(kai_keys_platform_data.buttons[i].gpio);
+ }
platform_device_register(&kai_keys_device);
- platform_device_register(&kai_int_keys_device);
return 0;
}