diff options
| author | Pramod Gurav <pramod.gurav@smartplayin.com> | 2014-10-08 14:14:10 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-22 13:50:05 -0400 |
| commit | 254af0a3c7fe1959b0a865660f2f2004e023ddc3 (patch) | |
| tree | d4e9d35d9d2db9de696883c802384a3ff278b861 /drivers/input | |
| parent | 68da166491655bc54051bf04c78ce648e2e33508 (diff) | |
Input: mpr121 - switch to using managed resources
This change switches the driver to use devm_* managed resources APIs to
request the resources in probe to simplify probe error path and module
unloading and does away with remove function.
Signed-off-by: Pramod Gurav <pramod.gurav@smartplayin.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/keyboard/mpr121_touchkey.c | 42 |
1 files changed, 12 insertions, 30 deletions
diff --git a/drivers/input/keyboard/mpr121_touchkey.c b/drivers/input/keyboard/mpr121_touchkey.c index 009c82256e89..3aa2ec45bcab 100644 --- a/drivers/input/keyboard/mpr121_touchkey.c +++ b/drivers/input/keyboard/mpr121_touchkey.c | |||
| @@ -214,13 +214,14 @@ static int mpr_touchkey_probe(struct i2c_client *client, | |||
| 214 | return -EINVAL; | 214 | return -EINVAL; |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | mpr121 = kzalloc(sizeof(struct mpr121_touchkey), GFP_KERNEL); | 217 | mpr121 = devm_kzalloc(&client->dev, sizeof(*mpr121), |
| 218 | input_dev = input_allocate_device(); | 218 | GFP_KERNEL); |
| 219 | if (!mpr121 || !input_dev) { | 219 | if (!mpr121) |
| 220 | dev_err(&client->dev, "Failed to allocate memory\n"); | 220 | return -ENOMEM; |
| 221 | error = -ENOMEM; | 221 | |
| 222 | goto err_free_mem; | 222 | input_dev = devm_input_allocate_device(&client->dev); |
| 223 | } | 223 | if (!input_dev) |
| 224 | return -ENOMEM; | ||
| 224 | 225 | ||
| 225 | mpr121->client = client; | 226 | mpr121->client = client; |
| 226 | mpr121->input_dev = input_dev; | 227 | mpr121->input_dev = input_dev; |
| @@ -243,44 +244,26 @@ static int mpr_touchkey_probe(struct i2c_client *client, | |||
| 243 | error = mpr121_phys_init(pdata, mpr121, client); | 244 | error = mpr121_phys_init(pdata, mpr121, client); |
| 244 | if (error) { | 245 | if (error) { |
| 245 | dev_err(&client->dev, "Failed to init register\n"); | 246 | dev_err(&client->dev, "Failed to init register\n"); |
| 246 | goto err_free_mem; | 247 | return error; |
| 247 | } | 248 | } |
| 248 | 249 | ||
| 249 | error = request_threaded_irq(client->irq, NULL, | 250 | error = devm_request_threaded_irq(&client->dev, client->irq, NULL, |
| 250 | mpr_touchkey_interrupt, | 251 | mpr_touchkey_interrupt, |
| 251 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, | 252 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, |
| 252 | client->dev.driver->name, mpr121); | 253 | client->dev.driver->name, mpr121); |
| 253 | if (error) { | 254 | if (error) { |
| 254 | dev_err(&client->dev, "Failed to register interrupt\n"); | 255 | dev_err(&client->dev, "Failed to register interrupt\n"); |
| 255 | goto err_free_mem; | 256 | return error; |
| 256 | } | 257 | } |
| 257 | 258 | ||
| 258 | error = input_register_device(input_dev); | 259 | error = input_register_device(input_dev); |
| 259 | if (error) | 260 | if (error) |
| 260 | goto err_free_irq; | 261 | return error; |
| 261 | 262 | ||
| 262 | i2c_set_clientdata(client, mpr121); | 263 | i2c_set_clientdata(client, mpr121); |
| 263 | device_init_wakeup(&client->dev, pdata->wakeup); | 264 | device_init_wakeup(&client->dev, pdata->wakeup); |
| 264 | 265 | ||
| 265 | return 0; | 266 | return 0; |
| 266 | |||
| 267 | err_free_irq: | ||
| 268 | free_irq(client->irq, mpr121); | ||
| 269 | err_free_mem: | ||
| 270 | input_free_device(input_dev); | ||
| 271 | kfree(mpr121); | ||
| 272 | return error; | ||
| 273 | } | ||
| 274 | |||
| 275 | static int mpr_touchkey_remove(struct i2c_client *client) | ||
| 276 | { | ||
| 277 | struct mpr121_touchkey *mpr121 = i2c_get_clientdata(client); | ||
| 278 | |||
| 279 | free_irq(client->irq, mpr121); | ||
| 280 | input_unregister_device(mpr121->input_dev); | ||
| 281 | kfree(mpr121); | ||
| 282 | |||
| 283 | return 0; | ||
| 284 | } | 267 | } |
| 285 | 268 | ||
| 286 | #ifdef CONFIG_PM_SLEEP | 269 | #ifdef CONFIG_PM_SLEEP |
| @@ -327,7 +310,6 @@ static struct i2c_driver mpr_touchkey_driver = { | |||
| 327 | }, | 310 | }, |
| 328 | .id_table = mpr121_id, | 311 | .id_table = mpr121_id, |
| 329 | .probe = mpr_touchkey_probe, | 312 | .probe = mpr_touchkey_probe, |
| 330 | .remove = mpr_touchkey_remove, | ||
| 331 | }; | 313 | }; |
| 332 | 314 | ||
| 333 | module_i2c_driver(mpr_touchkey_driver); | 315 | module_i2c_driver(mpr_touchkey_driver); |
