Input: gpio-keys - switch to common GPIO API

This adds support for at least SA1100 and S3C24xx CPUs.

Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
Philipp Zabel 2007-02-18 01:40:46 -05:00 committed by Dmitry Torokhov
parent 1efa770f8e
commit 0d98f6bbd8
2 changed files with 11 additions and 10 deletions

View File

@ -215,11 +215,11 @@ config KEYBOARD_AAED2000
module will be called aaed2000_kbd. module will be called aaed2000_kbd.
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.

View File

@ -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)
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)
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)
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)
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);
} }