diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-09-29 21:36:00 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-10-13 10:49:24 -0400 |
commit | a9cc0202227caa4adb5e823d5fbce7790364941f (patch) | |
tree | 4a47075935391b4510597cae52e10c4d9de46444 | |
parent | 6792cbbb254712a8c0fa8a4c97c8d521c7c41c28 (diff) |
Input: twl4030_keypad - fix error handling path
We should not try to call free_irq() when request_irq() failed.
Reported-by: G, Manjunath Kondaiah <manjugk@ti.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r-- | drivers/input/keyboard/twl4030_keypad.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/input/keyboard/twl4030_keypad.c b/drivers/input/keyboard/twl4030_keypad.c index fb16b5e5ea13..09bef79d9da1 100644 --- a/drivers/input/keyboard/twl4030_keypad.c +++ b/drivers/input/keyboard/twl4030_keypad.c | |||
@@ -406,23 +406,22 @@ static int __devinit twl4030_kp_probe(struct platform_device *pdev) | |||
406 | if (error) { | 406 | if (error) { |
407 | dev_info(kp->dbg_dev, "request_irq failed for irq no=%d\n", | 407 | dev_info(kp->dbg_dev, "request_irq failed for irq no=%d\n", |
408 | kp->irq); | 408 | kp->irq); |
409 | goto err3; | 409 | goto err2; |
410 | } | 410 | } |
411 | 411 | ||
412 | /* Enable KP and TO interrupts now. */ | 412 | /* Enable KP and TO interrupts now. */ |
413 | reg = (u8) ~(KEYP_IMR1_KP | KEYP_IMR1_TO); | 413 | reg = (u8) ~(KEYP_IMR1_KP | KEYP_IMR1_TO); |
414 | if (twl4030_kpwrite_u8(kp, reg, KEYP_IMR1)) { | 414 | if (twl4030_kpwrite_u8(kp, reg, KEYP_IMR1)) { |
415 | error = -EIO; | 415 | error = -EIO; |
416 | goto err4; | 416 | goto err3; |
417 | } | 417 | } |
418 | 418 | ||
419 | platform_set_drvdata(pdev, kp); | 419 | platform_set_drvdata(pdev, kp); |
420 | return 0; | 420 | return 0; |
421 | 421 | ||
422 | err4: | 422 | err3: |
423 | /* mask all events - we don't care about the result */ | 423 | /* mask all events - we don't care about the result */ |
424 | (void) twl4030_kpwrite_u8(kp, 0xff, KEYP_IMR1); | 424 | (void) twl4030_kpwrite_u8(kp, 0xff, KEYP_IMR1); |
425 | err3: | ||
426 | free_irq(kp->irq, NULL); | 425 | free_irq(kp->irq, NULL); |
427 | err2: | 426 | err2: |
428 | input_unregister_device(input); | 427 | input_unregister_device(input); |