Hi,
This trivial patch adds gpio-keys compatible platform device definition to
ams-delta board, that supports hook switch found on this videophone. It is
derived from similiar definitions found in other boards code. The patch is
based on linux-2.6.30-rc5. Any comments are welcome.
Cheers,
Janusz
diff -Npru a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
--- a/arch/arm/mach-omap1/board-ams-delta.c 2009-05-17 17:58:18.000000000 +0200
+++ b/arch/arm/mach-omap1/board-ams-delta.c 2009-05-17 16:22:59.000000000 +0200
@@ -15,6 +15,7 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/input.h>
+#include <linux/gpio_keys.h>
#include <linux/platform_device.h>
#include <mach/hardware.h>
@@ -213,10 +214,35 @@ static struct platform_device ams_delta_
.id = -1
};
+static struct gpio_keys_button ams_delta_gpio_keys_buttons[] = {
+ [0] = {
+ .desc = "hook_switch",
+ .type = EV_SW, /* or EV_KEY ? */
+ .code = SW_HEADPHONE_INSERT, /* or a new one ? */
+ .active_low = 1,
+ .gpio = AMS_DELTA_GPIO_PIN_HOOK_SWITCH,
+ .debounce_interval = 10,
+ },
+};
+
+static struct gpio_keys_platform_data ams_delta_gpio_keys = {
+ .buttons = ams_delta_gpio_keys_buttons,
+ .nbuttons = ARRAY_SIZE(ams_delta_gpio_keys_buttons),
+};
+
+static struct platform_device ams_delta_gpio_keys_device = {
+ .name = "gpio-keys",
+ .id = -1,
+ .dev = {
+ .platform_data = &ams_delta_gpio_keys,
+ },
+};
+
static struct platform_device *ams_delta_devices[] __initdata = {
&ams_delta_kp_device,
&ams_delta_lcd_device,
&ams_delta_led_device,
+ &ams_delta_gpio_keys_device,
};
static void __init ams_delta_init(void)
@@ -233,6 +259,13 @@ static void __init ams_delta_init_irq(vo
omap_usb_init(&ams_delta_usb_config);
platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
+
+ omap_cfg_reg(P20_1610_GPIO4); /* is this required? */
+
+ /* The hook switch state could be exposed over sysfs with gpio_export().
+ * This should be done after the gpio-keys driver calls gpio_request(),
+ * but I don't know how to do this from outside of the driver. */
+ /* gpio_export(AMS_DELTA_GPIO_PIN_HOOK_SWITCH, 0); */
}
static void __init ams_delta_map_io(void)