diff options
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/pcf50633-regulator.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c index 0803ffe6236d..c8f41dc05b76 100644 --- a/drivers/regulator/pcf50633-regulator.c +++ b/drivers/regulator/pcf50633-regulator.c | |||
@@ -314,13 +314,15 @@ static int __devinit pcf50633_regulator_probe(struct platform_device *pdev) | |||
314 | struct pcf50633 *pcf; | 314 | struct pcf50633 *pcf; |
315 | 315 | ||
316 | /* Already set by core driver */ | 316 | /* Already set by core driver */ |
317 | pcf = platform_get_drvdata(pdev); | 317 | pcf = dev_to_pcf50633(pdev->dev.parent); |
318 | 318 | ||
319 | rdev = regulator_register(®ulators[pdev->id], &pdev->dev, | 319 | rdev = regulator_register(®ulators[pdev->id], &pdev->dev, |
320 | pdev->dev.platform_data, pcf); | 320 | pdev->dev.platform_data, pcf); |
321 | if (IS_ERR(rdev)) | 321 | if (IS_ERR(rdev)) |
322 | return PTR_ERR(rdev); | 322 | return PTR_ERR(rdev); |
323 | 323 | ||
324 | platform_set_drvdata(pdev, rdev); | ||
325 | |||
324 | if (pcf->pdata->regulator_registered) | 326 | if (pcf->pdata->regulator_registered) |
325 | pcf->pdata->regulator_registered(pcf, pdev->id); | 327 | pcf->pdata->regulator_registered(pcf, pdev->id); |
326 | 328 | ||
@@ -331,6 +333,7 @@ static int __devexit pcf50633_regulator_remove(struct platform_device *pdev) | |||
331 | { | 333 | { |
332 | struct regulator_dev *rdev = platform_get_drvdata(pdev); | 334 | struct regulator_dev *rdev = platform_get_drvdata(pdev); |
333 | 335 | ||
336 | platform_set_drvdata(pdev, NULL); | ||
334 | regulator_unregister(rdev); | 337 | regulator_unregister(rdev); |
335 | 338 | ||
336 | return 0; | 339 | return 0; |