aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/input/keyboard/neo1973kbd.c19
-rw-r--r--include/asm-arm/arch-s3c2410/gpio.h63
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>