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/rc5t583.c | |
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/rc5t583.c')
-rw-r--r-- | drivers/mfd/rc5t583.c | 24 |
1 files changed, 3 insertions, 21 deletions
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 | ||