diff options
author | Rob Herring <r.herring@freescale.com> | 2008-02-12 10:33:49 -0600 |
---|---|---|
committer | Daniel Schaeffer <daniel.schaeffer@timesys.com> | 2008-08-25 15:20:30 -0400 |
commit | 4d822426876cb94198cdea6d67fea3efd61317b4 (patch) | |
tree | be2af6f32ca4e6a64c09bfb732bb8f9a6f433474 /drivers/input | |
parent | 3f8ed3afb9cee6648f9650d5daf950bb9347cca6 (diff) |
ENGR00065563 Driver and MSL updates for 2.6.24
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/keyboard/mxc_keyb.c | 46 | ||||
-rw-r--r-- | drivers/input/keyboard/mxc_keyb.h | 2 | ||||
-rw-r--r-- | drivers/input/touchscreen/mxc_ts.c | 15 |
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); |