diff options
author | Axel Lin <axel.lin@gmail.com> | 2010-08-24 01:44:05 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-10-28 18:28:56 -0400 |
commit | b59cedeffaef54dd091baf01fd5e276ac50a3176 (patch) | |
tree | cb0d09792f756bc6297daaf91aae75d493358adb /drivers/mfd/da903x.c | |
parent | 2c36af7b57540ea52d74dbbe71bf860aca910bb9 (diff) |
mfd: Fix da903x_add_subdevs error path
This patch fixes da903x_add_subdevs error path:
1. return -ENOMEM if platform_device_alloc() fail.
2. call platform_device_put() if platform_device_add() fail.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Acked-by: Eric Miao <eric.y.miao@gmail.com>
Acked-by: Mike Rapoport <mike@compulab.co.il>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/da903x.c')
-rw-r--r-- | drivers/mfd/da903x.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c index c07aece900fb..2fadbaeb1cb1 100644 --- a/drivers/mfd/da903x.c +++ b/drivers/mfd/da903x.c | |||
@@ -470,13 +470,19 @@ static int __devinit da903x_add_subdevs(struct da903x_chip *chip, | |||
470 | subdev = &pdata->subdevs[i]; | 470 | subdev = &pdata->subdevs[i]; |
471 | 471 | ||
472 | pdev = platform_device_alloc(subdev->name, subdev->id); | 472 | pdev = platform_device_alloc(subdev->name, subdev->id); |
473 | if (!pdev) { | ||
474 | ret = -ENOMEM; | ||
475 | goto failed; | ||
476 | } | ||
473 | 477 | ||
474 | pdev->dev.parent = chip->dev; | 478 | pdev->dev.parent = chip->dev; |
475 | pdev->dev.platform_data = subdev->platform_data; | 479 | pdev->dev.platform_data = subdev->platform_data; |
476 | 480 | ||
477 | ret = platform_device_add(pdev); | 481 | ret = platform_device_add(pdev); |
478 | if (ret) | 482 | if (ret) { |
483 | platform_device_put(pdev); | ||
479 | goto failed; | 484 | goto failed; |
485 | } | ||
480 | } | 486 | } |
481 | return 0; | 487 | return 0; |
482 | 488 | ||