summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorRob Herring <r.herring@freescale.com>2008-02-12 10:33:49 -0600
committerDaniel Schaeffer <daniel.schaeffer@timesys.com>2008-08-25 15:20:30 -0400
commit4d822426876cb94198cdea6d67fea3efd61317b4 (patch)
treebe2af6f32ca4e6a64c09bfb732bb8f9a6f433474 /drivers/input
parent3f8ed3afb9cee6648f9650d5daf950bb9347cca6 (diff)
ENGR00065563 Driver and MSL updates for 2.6.24
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/keyboard/mxc_keyb.c46
-rw-r--r--drivers/input/keyboard/mxc_keyb.h2
-rw-r--r--drivers/input/touchscreen/mxc_ts.c15
3 files changed, 40 insertions, 23 deletions
diff --git a/drivers/input/keyboard/mxc_keyb.c b/drivers/input/keyboard/mxc_keyb.c
index cbc7141e7e39..13d37608350f 100644
--- a/drivers/input/keyboard/mxc_keyb.c
+++ b/drivers/input/keyboard/mxc_keyb.c
@@ -783,9 +783,9 @@ static int mxc_kpp_probe(struct platform_device *pdev)
keypad->irq = irq;
retval = request_irq(irq, mxc_kpp_interrupt, 0, MOD_NAME, MOD_NAME);
if (retval) {
- pr_debug("KPP: request_irq(%d) returned error %d\n", INT_KPP,
- retval);
- return -1;
+ pr_debug("KPP: request_irq(%d) returned error %d\n",
+ MXC_INT_KPP, retval);
+ return retval;
}
/* Enable keypad clock */
@@ -835,16 +835,21 @@ static int mxc_kpp_probe(struct platform_device *pdev)
if ((keypad->matrix == (void *)0)
|| (mxckpd_keycodes_size == 0)) {
- free_irq(irq, MOD_NAME);
- return -ENODEV;
+ retval = -ENODEV;
+ goto err1;
}
mxckbd_dev = input_allocate_device();
if (!mxckbd_dev) {
printk(KERN_ERR
"mxckbd_dev: not enough memory for input device\n");
- free_irq(irq, MOD_NAME);
- return -ENOMEM;
+ retval = -ENOMEM;
+ goto err1;
+ }
+
+ retval = input_register_device(mxckbd_dev);
+ if (retval < 0) {
+ goto err2;
}
mxckbd_dev->keycode = &mxckpd_keycodes;
@@ -862,9 +867,8 @@ static int mxc_kpp_probe(struct platform_device *pdev)
kmalloc(kpp_dev.kpp_rows * sizeof(release_scancode[0]), GFP_KERNEL);
if (!press_scancode || !release_scancode) {
- free_irq(irq, MOD_NAME);
- mxc_kpp_free_allocated();
- return -1;
+ retval = -ENOMEM;
+ goto err3;
}
for (i = 0; i < kpp_dev.kpp_rows; i++) {
@@ -876,9 +880,8 @@ static int mxc_kpp_probe(struct platform_device *pdev)
GFP_KERNEL);
if (!press_scancode[i] || !release_scancode[i]) {
- free_irq(irq, MOD_NAME);
- mxc_kpp_free_allocated();
- return -1;
+ retval = -ENOMEM;
+ goto err3;
}
}
@@ -888,9 +891,8 @@ static int mxc_kpp_probe(struct platform_device *pdev)
kmalloc(kpp_dev.kpp_rows * sizeof(prev_rcmap[0]), GFP_KERNEL);
if (!cur_rcmap || !prev_rcmap) {
- free_irq(irq, MOD_NAME);
- mxc_kpp_free_allocated();
- return -1;
+ retval = -ENOMEM;
+ goto err3;
}
__set_bit(EV_KEY, mxckbd_dev->evbit);
@@ -911,13 +913,21 @@ static int mxc_kpp_probe(struct platform_device *pdev)
/* Initialize the polling timer */
init_timer(&kpp_dev.poll_timer);
- input_register_device(mxckbd_dev);
-
/* By default, devices should wakeup if they can */
/* So keypad is set as "should wakeup" as it can */
device_init_wakeup(&pdev->dev, 1);
return 0;
+
+ err3:
+ mxc_kpp_free_allocated();
+ err2:
+ input_free_device(mxckbd_dev);
+ err1:
+ free_irq(irq, MOD_NAME);
+ clk_disable(kpp_clk);
+ clk_put(kpp_clk);
+ return retval;
}
/*!
diff --git a/drivers/input/keyboard/mxc_keyb.h b/drivers/input/keyboard/mxc_keyb.h
index 853c0005e50e..d231eef50088 100644
--- a/drivers/input/keyboard/mxc_keyb.h
+++ b/drivers/input/keyboard/mxc_keyb.h
@@ -33,7 +33,7 @@
/*!
* Keypad irq number
*/
-#define KPP_IRQ INT_KPP
+#define KPP_IRQ MXC_INT_KPP
/*!
* XLATE mode selection
diff --git a/drivers/input/touchscreen/mxc_ts.c b/drivers/input/touchscreen/mxc_ts.c
index a2c2a3bb6e09..514f73082bfe 100644
--- a/drivers/input/touchscreen/mxc_ts.c
+++ b/drivers/input/touchscreen/mxc_ts.c
@@ -66,6 +66,8 @@ static int ts_thread(void *arg)
static int __init mxc_ts_init(void)
{
+ int retval;
+
mxc_inputdev = input_allocate_device();
if (!mxc_inputdev) {
printk(KERN_ERR
@@ -74,10 +76,15 @@ static int __init mxc_ts_init(void)
}
mxc_inputdev->name = MXC_TS_NAME;
- mxc_inputdev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
- mxc_inputdev->keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH);
- mxc_inputdev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
- input_register_device(mxc_inputdev);
+ mxc_inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+ mxc_inputdev->keybit[BIT_WORD(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH);
+ mxc_inputdev->absbit[0] =
+ BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | BIT_MASK(ABS_PRESSURE);
+ retval = input_register_device(mxc_inputdev);
+ if (retval < 0) {
+ input_free_device(mxc_inputdev);
+ return retval;
+ }
input_ts_installed = 1;
kernel_thread(ts_thread, NULL, CLONE_VM | CLONE_FS);