diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2016-04-21 08:25:55 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2016-05-09 08:27:38 -0400 |
commit | b36c82724fa10da7cc73693c6c2c3ab9a6c8034b (patch) | |
tree | bc6bfb2b34b1ee9d647c477ec5c01fa3a3d54b7c /drivers/mfd | |
parent | 1a5422c9e56a20898a73da5726d935d5d8072f78 (diff) |
mfd: rc5t583: Use devm_mfd_add_devices and devm_request_threaded_irq
Use devm_mfd_add_devices() for adding MFD child devices and
devm_request_threaded_irq() for IRQ registration.
This reduces the need of remove callback for removing MFD child
devices and unregistering IRQ.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/rc5t583-irq.c | 11 | ||||
-rw-r--r-- | drivers/mfd/rc5t583.c | 24 |
2 files changed, 5 insertions, 30 deletions
diff --git a/drivers/mfd/rc5t583-irq.c b/drivers/mfd/rc5t583-irq.c index 3f8812daa304..f8dde59ea6af 100644 --- a/drivers/mfd/rc5t583-irq.c +++ b/drivers/mfd/rc5t583-irq.c | |||
@@ -389,17 +389,10 @@ int rc5t583_irq_init(struct rc5t583 *rc5t583, int irq, int irq_base) | |||
389 | irq_clear_status_flags(__irq, IRQ_NOREQUEST); | 389 | irq_clear_status_flags(__irq, IRQ_NOREQUEST); |
390 | } | 390 | } |
391 | 391 | ||
392 | ret = request_threaded_irq(irq, NULL, rc5t583_irq, IRQF_ONESHOT, | 392 | ret = devm_request_threaded_irq(rc5t583->dev, irq, NULL, rc5t583_irq, |
393 | "rc5t583", rc5t583); | 393 | IRQF_ONESHOT, "rc5t583", rc5t583); |
394 | if (ret < 0) | 394 | if (ret < 0) |
395 | dev_err(rc5t583->dev, | 395 | dev_err(rc5t583->dev, |
396 | "Error in registering interrupt error: %d\n", ret); | 396 | "Error in registering interrupt error: %d\n", ret); |
397 | return ret; | 397 | return ret; |
398 | } | 398 | } |
399 | |||
400 | int rc5t583_irq_exit(struct rc5t583 *rc5t583) | ||
401 | { | ||
402 | if (rc5t583->chip_irq) | ||
403 | free_irq(rc5t583->chip_irq, rc5t583); | ||
404 | return 0; | ||
405 | } | ||
diff --git a/drivers/mfd/rc5t583.c b/drivers/mfd/rc5t583.c index fc2b2d93f354..d12243d5ecb8 100644 --- a/drivers/mfd/rc5t583.c +++ b/drivers/mfd/rc5t583.c | |||
@@ -252,7 +252,6 @@ static int rc5t583_i2c_probe(struct i2c_client *i2c, | |||
252 | struct rc5t583 *rc5t583; | 252 | struct rc5t583 *rc5t583; |
253 | struct rc5t583_platform_data *pdata = dev_get_platdata(&i2c->dev); | 253 | struct rc5t583_platform_data *pdata = dev_get_platdata(&i2c->dev); |
254 | int ret; | 254 | int ret; |
255 | bool irq_init_success = false; | ||
256 | 255 | ||
257 | if (!pdata) { | 256 | if (!pdata) { |
258 | dev_err(&i2c->dev, "Err: Platform data not found\n"); | 257 | dev_err(&i2c->dev, "Err: Platform data not found\n"); |
@@ -284,32 +283,16 @@ static int rc5t583_i2c_probe(struct i2c_client *i2c, | |||
284 | /* Still continue with warning, if irq init fails */ | 283 | /* Still continue with warning, if irq init fails */ |
285 | if (ret) | 284 | if (ret) |
286 | dev_warn(&i2c->dev, "IRQ init failed: %d\n", ret); | 285 | dev_warn(&i2c->dev, "IRQ init failed: %d\n", ret); |
287 | else | ||
288 | irq_init_success = true; | ||
289 | } | 286 | } |
290 | 287 | ||
291 | ret = mfd_add_devices(rc5t583->dev, -1, rc5t583_subdevs, | 288 | ret = devm_mfd_add_devices(rc5t583->dev, -1, rc5t583_subdevs, |
292 | ARRAY_SIZE(rc5t583_subdevs), NULL, 0, NULL); | 289 | ARRAY_SIZE(rc5t583_subdevs), NULL, 0, NULL); |
293 | if (ret) { | 290 | if (ret) { |
294 | dev_err(&i2c->dev, "add mfd devices failed: %d\n", ret); | 291 | dev_err(&i2c->dev, "add mfd devices failed: %d\n", ret); |
295 | goto err_add_devs; | 292 | return ret; |
296 | } | 293 | } |
297 | 294 | ||
298 | return 0; | 295 | return 0; |
299 | |||
300 | err_add_devs: | ||
301 | if (irq_init_success) | ||
302 | rc5t583_irq_exit(rc5t583); | ||
303 | return ret; | ||
304 | } | ||
305 | |||
306 | static int rc5t583_i2c_remove(struct i2c_client *i2c) | ||
307 | { | ||
308 | struct rc5t583 *rc5t583 = i2c_get_clientdata(i2c); | ||
309 | |||
310 | mfd_remove_devices(rc5t583->dev); | ||
311 | rc5t583_irq_exit(rc5t583); | ||
312 | return 0; | ||
313 | } | 296 | } |
314 | 297 | ||
315 | static const struct i2c_device_id rc5t583_i2c_id[] = { | 298 | static const struct i2c_device_id rc5t583_i2c_id[] = { |
@@ -324,7 +307,6 @@ static struct i2c_driver rc5t583_i2c_driver = { | |||
324 | .name = "rc5t583", | 307 | .name = "rc5t583", |
325 | }, | 308 | }, |
326 | .probe = rc5t583_i2c_probe, | 309 | .probe = rc5t583_i2c_probe, |
327 | .remove = rc5t583_i2c_remove, | ||
328 | .id_table = rc5t583_i2c_id, | 310 | .id_table = rc5t583_i2c_id, |
329 | }; | 311 | }; |
330 | 312 | ||