|
@@ -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,
|