From 8f0133d117c35625b8d26fc0906962400b02f1dd Mon Sep 17 00:00:00 2001 From: Kyungmin Park Date: Thu, 8 Mar 2007 13:12:28 +0900 Subject: [PATCH 7/7] ARM: OMAP: Add apollon gpio keys using gpio-keys input Add apollon gpio keys using gpio-keys input Signed-off-by: Kyungmin Park Signed-off-by: Tony Lindgren --- arch/arm/mach-omap2/Makefile | 3 +- arch/arm/mach-omap2/board-apollon-keys.c | 79 ++++++++++++++++++++++++++++++ arch/arm/mach-omap2/board-apollon.c | 53 -------------------- 3 files changed, 81 insertions(+), 54 deletions(-) Index: linux-2.6/arch/arm/mach-omap2/Makefile =================================================================== --- linux-2.6.orig/arch/arm/mach-omap2/Makefile 2007-04-09 16:21:18.000000000 -0400 +++ linux-2.6/arch/arm/mach-omap2/Makefile 2007-04-09 16:21:52.000000000 -0400 @@ -15,7 +15,8 @@ obj-$(CONFIG_PM) += pm.o sleep.o obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o -obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o +obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o \ + board-apollon-keys.o obj-$(CONFIG_MACH_NOKIA_N800) += board-n800.o board-n800-flash.o \ board-n800-mmc.o board-n800-bt.o \ board-n800-audio.o board-n800-usb.o \ Index: linux-2.6/arch/arm/mach-omap2/board-apollon-keys.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/arch/arm/mach-omap2/board-apollon-keys.c 2007-04-09 16:21:52.000000000 -0400 @@ -0,0 +1,79 @@ +/* + * linux/arch/arm/mach-omap2/board-apollon-keys.c + * + * Copyright (C) 2007 Samsung Electronics + * Author: Kyungmin Park + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include + +#include +#include + +#define SW_ENTER_GPIO16 16 +#define SW_UP_GPIO17 17 +#define SW_DOWN_GPIO58 58 + +static struct gpio_keys_button apollon_gpio_keys_buttons[] = { + [0] = { + .keycode = KEY_ENTER, + .gpio = SW_ENTER_GPIO16, + .desc = "enter sw", + }, + [1] = { + .keycode = KEY_UP, + .gpio = SW_UP_GPIO17, + .desc = "up sw", + }, + [2] = { + .keycode = KEY_DOWN, + .gpio = SW_DOWN_GPIO58, + .desc = "down sw", + }, +}; + +static struct gpio_keys_platform_data apollon_gpio_keys = { + .buttons = apollon_gpio_keys_buttons, + .nbuttons = ARRAY_SIZE(apollon_gpio_keys_buttons), +}; + +static struct platform_device apollon_gpio_keys_device = { + .name = "gpio-keys", + .id = -1, + .dev = { + .platform_data = &apollon_gpio_keys, + }, +}; + +static void __init apollon_sw_init(void) +{ + /* Enter SW - Y11 */ + omap_cfg_reg(Y11_242X_GPIO16); + omap_request_gpio(SW_ENTER_GPIO16); + omap_set_gpio_direction(SW_ENTER_GPIO16, 1); + /* Up SW - AA12 */ + omap_cfg_reg(AA12_242X_GPIO17); + omap_request_gpio(SW_UP_GPIO17); + omap_set_gpio_direction(SW_UP_GPIO17, 1); + /* Down SW - AA8 */ + omap_cfg_reg(AA8_242X_GPIO58); + omap_request_gpio(SW_DOWN_GPIO58); + omap_set_gpio_direction(SW_DOWN_GPIO58, 1); +} + +static int __init omap_apollon_keys_init(void) +{ + apollon_sw_init(); + + return platform_device_register(&apollon_gpio_keys_device); +} + +arch_initcall(omap_apollon_keys_init); Index: linux-2.6/arch/arm/mach-omap2/board-apollon.c =================================================================== --- linux-2.6.orig/arch/arm/mach-omap2/board-apollon.c 2007-04-09 16:21:41.000000000 -0400 +++ linux-2.6/arch/arm/mach-omap2/board-apollon.c 2007-04-09 16:21:52.000000000 -0400 @@ -22,11 +22,8 @@ #include #include #include -#include -#include #include #include -#include #include #include @@ -48,9 +45,6 @@ #define LED0_GPIO13 13 #define LED1_GPIO14 14 #define LED2_GPIO15 15 -#define SW_ENTER_GPIO16 16 -#define SW_UP_GPIO17 17 -#define SW_DOWN_GPIO58 58 #define APOLLON_FLASH_CS 0 #define APOLLON_ETH_CS 1 @@ -302,52 +296,6 @@ static void __init apollon_led_init(void omap_set_gpio_dataout(LED2_GPIO15, 0); } -static irqreturn_t apollon_sw_interrupt(int irq, void *ignored) -{ - static unsigned int led0, led1, led2; - - if (irq == OMAP_GPIO_IRQ(SW_ENTER_GPIO16)) - omap_set_gpio_dataout(LED0_GPIO13, led0 ^= 1); - else if (irq == OMAP_GPIO_IRQ(SW_UP_GPIO17)) - omap_set_gpio_dataout(LED1_GPIO14, led1 ^= 1); - else if (irq == OMAP_GPIO_IRQ(SW_DOWN_GPIO58)) - omap_set_gpio_dataout(LED2_GPIO15, led2 ^= 1); - - return IRQ_HANDLED; -} - -static void __init apollon_sw_init(void) -{ - /* Enter SW - Y11 */ - omap_cfg_reg(Y11_242X_GPIO16); - omap_request_gpio(SW_ENTER_GPIO16); - omap_set_gpio_direction(SW_ENTER_GPIO16, 1); - /* Up SW - AA12 */ - omap_cfg_reg(AA12_242X_GPIO17); - omap_request_gpio(SW_UP_GPIO17); - omap_set_gpio_direction(SW_UP_GPIO17, 1); - /* Down SW - AA8 */ - omap_cfg_reg(AA8_242X_GPIO58); - omap_request_gpio(SW_DOWN_GPIO58); - omap_set_gpio_direction(SW_DOWN_GPIO58, 1); - - set_irq_type(OMAP_GPIO_IRQ(SW_ENTER_GPIO16), IRQT_RISING); - if (request_irq(OMAP_GPIO_IRQ(SW_ENTER_GPIO16), &apollon_sw_interrupt, - IRQF_SHARED, "enter sw", - &apollon_sw_interrupt)) - return; - set_irq_type(OMAP_GPIO_IRQ(SW_UP_GPIO17), IRQT_RISING); - if (request_irq(OMAP_GPIO_IRQ(SW_UP_GPIO17), &apollon_sw_interrupt, - IRQF_SHARED, "up sw", - &apollon_sw_interrupt)) - return; - set_irq_type(OMAP_GPIO_IRQ(SW_DOWN_GPIO58), IRQT_RISING); - if (request_irq(OMAP_GPIO_IRQ(SW_DOWN_GPIO58), &apollon_sw_interrupt, - IRQF_SHARED, "down sw", - &apollon_sw_interrupt)) - return; -} - static void __init apollon_usb_init(void) { /* USB device */ @@ -361,7 +309,6 @@ static void __init apollon_usb_init(void static void __init omap_apollon_init(void) { apollon_led_init(); - apollon_sw_init(); apollon_flash_init(); apollon_usb_init();