diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2014-04-25 12:21:12 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-05-14 19:39:47 -0400 |
commit | 1f9e1470ab34fe7e523014ae30dd3b2e65177ae4 (patch) | |
tree | 1b673cc5b2401658dbb1d0db2de94d6962cff602 /drivers/input/misc | |
parent | c728601ea3531dc1f0dcd74c1db1e85e59f2be68 (diff) |
Input: twl6040-vibra - use devm functions
Using devm_regulator_bulk_get() and devm_input_allocate_device() can make
the code cleaner and smaller as we do not need to manually free resources
the error and remove paths.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/misc')
-rw-r--r-- | drivers/input/misc/twl6040-vibra.c | 83 |
1 files changed, 32 insertions, 51 deletions
diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c index 77dc23b94eb1..6d26eecc278c 100644 --- a/drivers/input/misc/twl6040-vibra.c +++ b/drivers/input/misc/twl6040-vibra.c | |||
@@ -262,7 +262,7 @@ static int twl6040_vibra_probe(struct platform_device *pdev) | |||
262 | struct vibra_info *info; | 262 | struct vibra_info *info; |
263 | int vddvibl_uV = 0; | 263 | int vddvibl_uV = 0; |
264 | int vddvibr_uV = 0; | 264 | int vddvibr_uV = 0; |
265 | int ret; | 265 | int error; |
266 | 266 | ||
267 | twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node, | 267 | twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node, |
268 | "vibra"); | 268 | "vibra"); |
@@ -309,12 +309,12 @@ static int twl6040_vibra_probe(struct platform_device *pdev) | |||
309 | 309 | ||
310 | mutex_init(&info->mutex); | 310 | mutex_init(&info->mutex); |
311 | 311 | ||
312 | ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, | 312 | error = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, |
313 | twl6040_vib_irq_handler, 0, | 313 | twl6040_vib_irq_handler, 0, |
314 | "twl6040_irq_vib", info); | 314 | "twl6040_irq_vib", info); |
315 | if (ret) { | 315 | if (error) { |
316 | dev_err(info->dev, "VIB IRQ request failed: %d\n", ret); | 316 | dev_err(info->dev, "VIB IRQ request failed: %d\n", error); |
317 | return ret; | 317 | return error; |
318 | } | 318 | } |
319 | 319 | ||
320 | info->supplies[0].supply = "vddvibl"; | 320 | info->supplies[0].supply = "vddvibl"; |
@@ -323,40 +323,40 @@ static int twl6040_vibra_probe(struct platform_device *pdev) | |||
323 | * When booted with Device tree the regulators are attached to the | 323 | * When booted with Device tree the regulators are attached to the |
324 | * parent device (twl6040 MFD core) | 324 | * parent device (twl6040 MFD core) |
325 | */ | 325 | */ |
326 | ret = regulator_bulk_get(twl6040_core_dev, ARRAY_SIZE(info->supplies), | 326 | error = devm_regulator_bulk_get(twl6040_core_dev, |
327 | info->supplies); | 327 | ARRAY_SIZE(info->supplies), |
328 | if (ret) { | 328 | info->supplies); |
329 | dev_err(info->dev, "couldn't get regulators %d\n", ret); | 329 | if (error) { |
330 | return ret; | 330 | dev_err(info->dev, "couldn't get regulators %d\n", error); |
331 | return error; | ||
331 | } | 332 | } |
332 | 333 | ||
333 | if (vddvibl_uV) { | 334 | if (vddvibl_uV) { |
334 | ret = regulator_set_voltage(info->supplies[0].consumer, | 335 | error = regulator_set_voltage(info->supplies[0].consumer, |
335 | vddvibl_uV, vddvibl_uV); | 336 | vddvibl_uV, vddvibl_uV); |
336 | if (ret) { | 337 | if (error) { |
337 | dev_err(info->dev, "failed to set VDDVIBL volt %d\n", | 338 | dev_err(info->dev, "failed to set VDDVIBL volt %d\n", |
338 | ret); | 339 | error); |
339 | goto err_regulator; | 340 | return error; |
340 | } | 341 | } |
341 | } | 342 | } |
342 | 343 | ||
343 | if (vddvibr_uV) { | 344 | if (vddvibr_uV) { |
344 | ret = regulator_set_voltage(info->supplies[1].consumer, | 345 | error = regulator_set_voltage(info->supplies[1].consumer, |
345 | vddvibr_uV, vddvibr_uV); | 346 | vddvibr_uV, vddvibr_uV); |
346 | if (ret) { | 347 | if (error) { |
347 | dev_err(info->dev, "failed to set VDDVIBR volt %d\n", | 348 | dev_err(info->dev, "failed to set VDDVIBR volt %d\n", |
348 | ret); | 349 | error); |
349 | goto err_regulator; | 350 | return error; |
350 | } | 351 | } |
351 | } | 352 | } |
352 | 353 | ||
353 | INIT_WORK(&info->play_work, vibra_play_work); | 354 | INIT_WORK(&info->play_work, vibra_play_work); |
354 | 355 | ||
355 | info->input_dev = input_allocate_device(); | 356 | info->input_dev = devm_input_allocate_device(&pdev->dev); |
356 | if (info->input_dev == NULL) { | 357 | if (!info->input_dev) { |
357 | dev_err(info->dev, "couldn't allocate input device\n"); | 358 | dev_err(info->dev, "couldn't allocate input device\n"); |
358 | ret = -ENOMEM; | 359 | return -ENOMEM; |
359 | goto err_regulator; | ||
360 | } | 360 | } |
361 | 361 | ||
362 | input_set_drvdata(info->input_dev, info); | 362 | input_set_drvdata(info->input_dev, info); |
@@ -367,44 +367,25 @@ static int twl6040_vibra_probe(struct platform_device *pdev) | |||
367 | info->input_dev->close = twl6040_vibra_close; | 367 | info->input_dev->close = twl6040_vibra_close; |
368 | __set_bit(FF_RUMBLE, info->input_dev->ffbit); | 368 | __set_bit(FF_RUMBLE, info->input_dev->ffbit); |
369 | 369 | ||
370 | ret = input_ff_create_memless(info->input_dev, NULL, vibra_play); | 370 | error = input_ff_create_memless(info->input_dev, NULL, vibra_play); |
371 | if (ret < 0) { | 371 | if (error) { |
372 | dev_err(info->dev, "couldn't register vibrator to FF\n"); | 372 | dev_err(info->dev, "couldn't register vibrator to FF\n"); |
373 | goto err_ialloc; | 373 | return error; |
374 | } | 374 | } |
375 | 375 | ||
376 | ret = input_register_device(info->input_dev); | 376 | error = input_register_device(info->input_dev); |
377 | if (ret < 0) { | 377 | if (error) { |
378 | dev_err(info->dev, "couldn't register input device\n"); | 378 | dev_err(info->dev, "couldn't register input device\n"); |
379 | goto err_iff; | 379 | return error; |
380 | } | 380 | } |
381 | 381 | ||
382 | platform_set_drvdata(pdev, info); | 382 | platform_set_drvdata(pdev, info); |
383 | 383 | ||
384 | return 0; | 384 | return 0; |
385 | |||
386 | err_iff: | ||
387 | input_ff_destroy(info->input_dev); | ||
388 | err_ialloc: | ||
389 | input_free_device(info->input_dev); | ||
390 | err_regulator: | ||
391 | regulator_bulk_free(ARRAY_SIZE(info->supplies), info->supplies); | ||
392 | return ret; | ||
393 | } | ||
394 | |||
395 | static int twl6040_vibra_remove(struct platform_device *pdev) | ||
396 | { | ||
397 | struct vibra_info *info = platform_get_drvdata(pdev); | ||
398 | |||
399 | input_unregister_device(info->input_dev); | ||
400 | regulator_bulk_free(ARRAY_SIZE(info->supplies), info->supplies); | ||
401 | |||
402 | return 0; | ||
403 | } | 385 | } |
404 | 386 | ||
405 | static struct platform_driver twl6040_vibra_driver = { | 387 | static struct platform_driver twl6040_vibra_driver = { |
406 | .probe = twl6040_vibra_probe, | 388 | .probe = twl6040_vibra_probe, |
407 | .remove = twl6040_vibra_remove, | ||
408 | .driver = { | 389 | .driver = { |
409 | .name = "twl6040-vibra", | 390 | .name = "twl6040-vibra", |
410 | .owner = THIS_MODULE, | 391 | .owner = THIS_MODULE, |