ARM: pxa: add gpio keys information
[sfrench/cifs-2.6.git] / arch / arm / mach-pxa / corgi.c
index f162f1b77cd2115cca0bfed2a9006a956b2f4fcf..57d60542f982d03c7a384cd48be29e55823b5e01 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/spi/pxa2xx_spi.h>
 #include <linux/mtd/sharpsl.h>
 #include <linux/input/matrix_keypad.h>
+#include <linux/gpio_keys.h>
 #include <linux/module.h>
 #include <video/w100fb.h>
 
@@ -405,6 +406,44 @@ static struct platform_device corgikbd_device = {
        },
 };
 
+static struct gpio_keys_button corgi_gpio_keys[] = {
+       {
+               .type   = EV_SW,
+               .code   = SW_LID,
+               .gpio   = CORGI_GPIO_SWA,
+               .desc   = "Lid close switch",
+               .debounce_interval = 500,
+       },
+       {
+               .type   = EV_SW,
+               .code   = SW_TABLET_MODE,
+               .gpio   = CORGI_GPIO_SWB,
+               .desc   = "Tablet mode switch",
+               .debounce_interval = 500,
+       },
+       {
+               .type   = EV_SW,
+               .code   = SW_HEADPHONE_INSERT,
+               .gpio   = CORGI_GPIO_AK_INT,
+               .desc   = "HeadPhone insert",
+               .debounce_interval = 500,
+       },
+};
+
+static struct gpio_keys_platform_data corgi_gpio_keys_platform_data = {
+       .buttons        = corgi_gpio_keys,
+       .nbuttons       = ARRAY_SIZE(corgi_gpio_keys),
+       .poll_interval  = 250,
+};
+
+static struct platform_device corgi_gpio_keys_device = {
+       .name   = "gpio-keys-polled",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &corgi_gpio_keys_platform_data,
+       },
+};
+
 /*
  * Corgi LEDs
  */
@@ -646,6 +685,7 @@ static struct platform_device sharpsl_rom_device = {
 static struct platform_device *devices[] __initdata = {
        &corgiscoop_device,
        &corgifb_device,
+       &corgi_gpio_keys_device,
        &corgikbd_device,
        &corgiled_device,
        &corgi_audio_device,