diff options
| author | Stanislav Brabec <utx@penguin.cz> | 2009-10-16 14:50:05 -0400 |
|---|---|---|
| committer | Eric Miao <eric.y.miao@gmail.com> | 2009-10-17 10:55:44 -0400 |
| commit | f6919eb41127db2e06342efcc2da1eeb4646ec34 (patch) | |
| tree | 2d4976fb6c826542172837fde5fd8b3c52dc012d | |
| parent | 0bff2fc319c2a3cb8969c71fdc2f941a15319b2c (diff) | |
[ARM] pxa/spitz: add gpio button support (fixes regression)
Updating desc for lid keys and resending patch with proper comments:
Define Spitz buttons as GPIO keys in a way compatible with the old driver:
On/Off: As Suspend EV_PWR key
Raw values of lid sensors SWA and SWB: As EV_SW switches
SWA: Display Down
SWB: Lid Closed
Recommended user space decoding:
SWA==0 & SWB==0: lid opened (landscape mode)
SWA==1 & SWB==0: invalid (or mechanic race condition)
SWA==0 & SWB==1: lid closed with display up (portrait mode or mechanic
race condition while closing to display-less mode)
SWA==1 & SWB==1: lid closed with display down (display-less mode)
AK_INT remote trigger is not mapped as input event. Without complete
remote driver and remote pull-up control it has no useful
interpretation.
Signed-off-by: Stanislav Brabec <utx@penguin.cz>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
| -rw-r--r-- | arch/arm/mach-pxa/spitz.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index ee8d6038ce82..82ff5733e4dc 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
| 16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
| 18 | #include <linux/gpio_keys.h> | ||
| 18 | #include <linux/gpio.h> | 19 | #include <linux/gpio.h> |
| 19 | #include <linux/leds.h> | 20 | #include <linux/leds.h> |
| 20 | #include <linux/mtd/physmap.h> | 21 | #include <linux/mtd/physmap.h> |
| @@ -375,6 +376,43 @@ static struct platform_device spitzkbd_device = { | |||
| 375 | }; | 376 | }; |
| 376 | 377 | ||
| 377 | 378 | ||
| 379 | static struct gpio_keys_button spitz_gpio_keys[] = { | ||
| 380 | { | ||
| 381 | .type = EV_PWR, | ||
| 382 | .code = KEY_SUSPEND, | ||
| 383 | .gpio = SPITZ_GPIO_ON_KEY, | ||
| 384 | .desc = "On/Off", | ||
| 385 | .wakeup = 1, | ||
| 386 | }, | ||
| 387 | /* Two buttons detecting the lid state */ | ||
| 388 | { | ||
| 389 | .type = EV_SW, | ||
| 390 | .code = 0, | ||
| 391 | .gpio = SPITZ_GPIO_SWA, | ||
| 392 | .desc = "Display Down", | ||
| 393 | }, | ||
| 394 | { | ||
| 395 | .type = EV_SW, | ||
| 396 | .code = 1, | ||
| 397 | .gpio = SPITZ_GPIO_SWB, | ||
| 398 | .desc = "Lid Closed", | ||
| 399 | }, | ||
| 400 | }; | ||
| 401 | |||
| 402 | static struct gpio_keys_platform_data spitz_gpio_keys_platform_data = { | ||
| 403 | .buttons = spitz_gpio_keys, | ||
| 404 | .nbuttons = ARRAY_SIZE(spitz_gpio_keys), | ||
| 405 | }; | ||
| 406 | |||
| 407 | static struct platform_device spitz_gpio_keys_device = { | ||
| 408 | .name = "gpio-keys", | ||
| 409 | .id = -1, | ||
| 410 | .dev = { | ||
| 411 | .platform_data = &spitz_gpio_keys_platform_data, | ||
| 412 | }, | ||
| 413 | }; | ||
| 414 | |||
| 415 | |||
| 378 | /* | 416 | /* |
| 379 | * Spitz LEDs | 417 | * Spitz LEDs |
| 380 | */ | 418 | */ |
| @@ -689,6 +727,7 @@ static struct platform_device sharpsl_rom_device = { | |||
| 689 | static struct platform_device *devices[] __initdata = { | 727 | static struct platform_device *devices[] __initdata = { |
| 690 | &spitzscoop_device, | 728 | &spitzscoop_device, |
| 691 | &spitzkbd_device, | 729 | &spitzkbd_device, |
| 730 | &spitz_gpio_keys_device, | ||
| 692 | &spitzled_device, | 731 | &spitzled_device, |
| 693 | &sharpsl_nand_device, | 732 | &sharpsl_nand_device, |
| 694 | &sharpsl_rom_device, | 733 | &sharpsl_rom_device, |
