diff options
-rw-r--r-- | drivers/input/keyboard/neo1973kbd.c | 19 | ||||
-rw-r--r-- | include/asm-arm/arch-s3c2410/gpio.h | 63 |
2 files changed, 69 insertions, 13 deletions
diff --git a/drivers/input/keyboard/neo1973kbd.c b/drivers/input/keyboard/neo1973kbd.c index b413bc8afe8..06fa8e049e5 100644 --- a/drivers/input/keyboard/neo1973kbd.c +++ b/drivers/input/keyboard/neo1973kbd.c @@ -28,16 +28,13 @@ struct neo1973kbd { struct input_dev *input; unsigned int suspended; - int gpio_aux; - int gpio_hold; - int gpio_jack; }; static irqreturn_t neo1973kbd_aux_irq(int irq, void *dev_id) { struct neo1973kbd *neo1973kbd_data = dev_id; - int key_pressed = !gpio_get_value(neo1973kbd_data->gpio_aux); + int key_pressed = !gpio_get_value(irq_to_gpio(irq)); input_report_key(neo1973kbd_data->input, KEY_PHONE, key_pressed); input_sync(neo1973kbd_data->input); @@ -48,7 +45,7 @@ static irqreturn_t neo1973kbd_hold_irq(int irq, void *dev_id) { struct neo1973kbd *neo1973kbd_data = dev_id; - int key_pressed = gpio_get_value(neo1973kbd_data->gpio_hold); + int key_pressed = gpio_get_value(irq_to_gpio(irq)); input_report_key(neo1973kbd_data->input, KEY_PAUSE, key_pressed); input_sync(neo1973kbd_data->input); @@ -59,7 +56,7 @@ static irqreturn_t neo1973kbd_headphone_irq(int irq, void *dev_id) { struct neo1973kbd *neo1973kbd_data = dev_id; - int key_pressed = gpio_get_value(neo1973kbd_data->gpio_jack); + int key_pressed = gpio_get_value(irq_to_gpio(irq)); input_report_switch(neo1973kbd_data->input, SW_HEADPHONE_INSERT, key_pressed); input_sync(neo1973kbd_data->input); @@ -107,19 +104,15 @@ static int neo1973kbd_probe(struct platform_device *pdev) if (pdev->resource[0].flags != 0) return -EINVAL; - neo1973kbd->gpio_aux = pdev->resource[0].start; - neo1973kbd->gpio_hold = pdev->resource[1].start; - neo1973kbd->gpio_jack = pdev->resource[2].start; - - irq_aux = gpio_to_irq(neo1973kbd->gpio_aux); + irq_aux = gpio_to_irq(pdev->resource[0].start); if (irq_aux < 0) return -EINVAL; - irq_hold = gpio_to_irq(neo1973kbd->gpio_hold); + irq_hold = gpio_to_irq(pdev->resource[1].start); if (irq_hold < 0) return -EINVAL; - irq_jack = gpio_to_irq(neo1973kbd->gpio_jack); + irq_jack = gpio_to_irq(pdev->resource[2].start); if (irq_jack < 0) return -EINVAL; diff --git a/include/asm-arm/arch-s3c2410/gpio.h b/include/asm-arm/arch-s3c2410/gpio.h new file mode 100644 index 00000000000..b2bc7bfea63 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/gpio.h @@ -0,0 +1,63 @@ +/* linux/include/asm-arm/arch-s3c2410/gpio.h + * + * Copyright (c) 2008 Simtec Electronics + * http://armlinux.simtec.co.uk/ + * Ben Dooks <ben@simtec.co.uk> + * + * S3C2410 - GPIO lib support + * + * 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. +*/ + +#define gpio_get_value __gpio_get_value +#define gpio_set_value __gpio_set_value +#define gpio_cansleep __gpio_cansleep + +#ifndef __ASM_ARCH_S3C2410_GPIO_H +#define __ASM_ARCH_S3C2410_GPIO_H + +#include <asm/irq.h> +#include <asm/hardware.h> +#include <asm/arch/regs-gpio.h> + +static inline int gpio_request(unsigned gpio, const char *label) +{ + return 0; +} + +static inline void gpio_free(unsigned gpio) +{ + return; +} + +static inline int gpio_direction_input(unsigned gpio) +{ + s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_INPUT); + return 0; +} + +static inline int gpio_direction_output(unsigned gpio, int value) +{ + s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_OUTPUT); + /* REVISIT can we write the value first, to avoid glitching? */ + s3c2410_gpio_setpin(gpio, value); + return 0; +} + +#define gpio_get_value(gpio) s3c2410_gpio_getpin(gpio) +#define gpio_set_value(gpio,value) s3c2410_gpio_setpin(gpio, value) + +#include <asm-generic/gpio.h> /* cansleep wrappers */ + +#ifdef CONFIG_CPU_S3C2400 +#define gpio_to_irq(gpio) s3c2400_gpio_getirq(gpio) +#else +#define gpio_to_irq(gpio) s3c2410_gpio_getirq(gpio) +#define irq_to_gpio(irq) s3c2410_irq_to_gpio(irq) +#endif + +/* FIXME implement irq_to_gpio() */ + +#include <asm-generic/gpio.h> |