Commit 0d98f6bb authored by Philipp Zabel's avatar Philipp Zabel Committed by Dmitry Torokhov

Input: gpio-keys - switch to common GPIO API

This adds support for at least SA1100 and S3C24xx CPUs.
Signed-off-by: default avatarPhilipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 1efa770f
...@@ -216,10 +216,10 @@ config KEYBOARD_AAED2000 ...@@ -216,10 +216,10 @@ config KEYBOARD_AAED2000
config KEYBOARD_GPIO config KEYBOARD_GPIO
tristate "Buttons on CPU GPIOs (PXA)" tristate "Buttons on CPU GPIOs (PXA)"
depends on ARCH_PXA depends on (ARCH_SA1100 || ARCH_PXA || ARCH_S3C2410)
help help
This driver implements support for buttons connected This driver implements support for buttons connected
directly to GPIO pins of PXA CPUs. directly to GPIO pins of SA1100, PXA or S3C24xx CPUs.
Say Y here if your device has buttons connected Say Y here if your device has buttons connected
directly to GPIO pins of the CPU. directly to GPIO pins of the CPU.
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/arch/pxa-regs.h> #include <asm/gpio.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
#include <asm/hardware/gpio_keys.h> #include <asm/hardware/gpio_keys.h>
...@@ -38,8 +38,8 @@ static irqreturn_t gpio_keys_isr(int irq, void *dev_id) ...@@ -38,8 +38,8 @@ static irqreturn_t gpio_keys_isr(int irq, void *dev_id)
for (i = 0; i < pdata->nbuttons; i++) { for (i = 0; i < pdata->nbuttons; i++) {
int gpio = pdata->buttons[i].gpio; int gpio = pdata->buttons[i].gpio;
if (irq == IRQ_GPIO(gpio)) { if (irq == gpio_to_irq(gpio)) {
int state = ((GPLR(gpio) & GPIO_bit(gpio)) ? 1 : 0) ^ (pdata->buttons[i].active_low); int state = (gpio_get_value(gpio) ? 1 : 0) ^ (pdata->buttons[i].active_low);
input_report_key(input, pdata->buttons[i].keycode, state); input_report_key(input, pdata->buttons[i].keycode, state);
input_sync(input); input_sync(input);
...@@ -75,14 +75,15 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev) ...@@ -75,14 +75,15 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
for (i = 0; i < pdata->nbuttons; i++) { for (i = 0; i < pdata->nbuttons; i++) {
int code = pdata->buttons[i].keycode; int code = pdata->buttons[i].keycode;
int irq = IRQ_GPIO(pdata->buttons[i].gpio); int irq = gpio_to_irq(pdata->buttons[i].gpio);
set_irq_type(irq, IRQ_TYPE_EDGE_BOTH); set_irq_type(irq, IRQ_TYPE_EDGE_BOTH);
error = request_irq(irq, gpio_keys_isr, IRQF_SAMPLE_RANDOM, error = request_irq(irq, gpio_keys_isr, IRQF_SAMPLE_RANDOM,
pdata->buttons[i].desc ? pdata->buttons[i].desc : "gpio_keys", pdata->buttons[i].desc ? pdata->buttons[i].desc : "gpio_keys",
pdev); pdev);
if (error) { if (error) {
printk(KERN_ERR "gpio-keys: unable to claim irq %d; error %d\n", irq, ret); printk(KERN_ERR "gpio-keys: unable to claim irq %d; error %d\n",
irq, error);
goto fail; goto fail;
} }
set_bit(code, input->keybit); set_bit(code, input->keybit);
...@@ -98,7 +99,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev) ...@@ -98,7 +99,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
fail: fail:
for (i = i - 1; i >= 0; i--) for (i = i - 1; i >= 0; i--)
free_irq(IRQ_GPIO(pdata->buttons[i].gpio), pdev); free_irq(gpio_to_irq(pdata->buttons[i].gpio), pdev);
input_free_device(input); input_free_device(input);
...@@ -112,7 +113,7 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev) ...@@ -112,7 +113,7 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev)
int i; int i;
for (i = 0; i < pdata->nbuttons; i++) { for (i = 0; i < pdata->nbuttons; i++) {
int irq = IRQ_GPIO(pdata->buttons[i].gpio); int irq = gpio_to_irq(pdata->buttons[i].gpio);
free_irq(irq, pdev); free_irq(irq, pdev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment