diff options
| -rw-r--r-- | drivers/input/misc/pcf8574_keypad.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/input/misc/pcf8574_keypad.c b/drivers/input/misc/pcf8574_keypad.c index 4b42ffc0532a..d1583aea1721 100644 --- a/drivers/input/misc/pcf8574_keypad.c +++ b/drivers/input/misc/pcf8574_keypad.c | |||
| @@ -127,14 +127,6 @@ static int __devinit pcf8574_kp_probe(struct i2c_client *client, const struct i2 | |||
| 127 | idev->id.product = 0x0001; | 127 | idev->id.product = 0x0001; |
| 128 | idev->id.version = 0x0100; | 128 | idev->id.version = 0x0100; |
| 129 | 129 | ||
| 130 | input_set_drvdata(idev, lp); | ||
| 131 | |||
| 132 | ret = input_register_device(idev); | ||
| 133 | if (ret) { | ||
| 134 | dev_err(&client->dev, "input_register_device() failed\n"); | ||
| 135 | goto fail_register; | ||
| 136 | } | ||
| 137 | |||
| 138 | lp->laststate = read_state(lp); | 130 | lp->laststate = read_state(lp); |
| 139 | 131 | ||
| 140 | ret = request_threaded_irq(client->irq, NULL, pcf8574_kp_irq_handler, | 132 | ret = request_threaded_irq(client->irq, NULL, pcf8574_kp_irq_handler, |
| @@ -142,16 +134,21 @@ static int __devinit pcf8574_kp_probe(struct i2c_client *client, const struct i2 | |||
| 142 | DRV_NAME, lp); | 134 | DRV_NAME, lp); |
| 143 | if (ret) { | 135 | if (ret) { |
| 144 | dev_err(&client->dev, "IRQ %d is not free\n", client->irq); | 136 | dev_err(&client->dev, "IRQ %d is not free\n", client->irq); |
| 145 | goto fail_irq; | 137 | goto fail_free_device; |
| 138 | } | ||
| 139 | |||
| 140 | ret = input_register_device(idev); | ||
| 141 | if (ret) { | ||
| 142 | dev_err(&client->dev, "input_register_device() failed\n"); | ||
| 143 | goto fail_free_irq; | ||
| 146 | } | 144 | } |
| 147 | 145 | ||
| 148 | i2c_set_clientdata(client, lp); | 146 | i2c_set_clientdata(client, lp); |
| 149 | return 0; | 147 | return 0; |
| 150 | 148 | ||
| 151 | fail_irq: | 149 | fail_free_irq: |
| 152 | input_unregister_device(idev); | 150 | free_irq(client->irq, lp); |
| 153 | fail_register: | 151 | fail_free_device: |
| 154 | input_set_drvdata(idev, NULL); | ||
| 155 | input_free_device(idev); | 152 | input_free_device(idev); |
| 156 | fail_allocate: | 153 | fail_allocate: |
| 157 | kfree(lp); | 154 | kfree(lp); |
