Commit 98c2e490 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Samuel Ortiz

mfd: Fix pcf50633-regulator drvdata usage

Currently the pcf50633-regulator driver data is set to the pcf50633 core
structure, but the pcf50633-regulator remove handler assumes that it is set to
the regulator device. This patch fixes the issue by accessing the pcf506533
core structure through its parent device and setting the driver data to the
regulator device.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarPaul Fertser <fercerpav@gmail.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent bbb2e496
...@@ -613,7 +613,6 @@ static int __devinit pcf50633_probe(struct i2c_client *client, ...@@ -613,7 +613,6 @@ static int __devinit pcf50633_probe(struct i2c_client *client,
pdev->dev.parent = pcf->dev; pdev->dev.parent = pcf->dev;
platform_device_add_data(pdev, &pdata->reg_init_data[i], platform_device_add_data(pdev, &pdata->reg_init_data[i],
sizeof(pdata->reg_init_data[i])); sizeof(pdata->reg_init_data[i]));
dev_set_drvdata(&pdev->dev, pcf);
pcf->regulator_pdev[i] = pdev; pcf->regulator_pdev[i] = pdev;
platform_device_add(pdev); platform_device_add(pdev);
......
...@@ -314,13 +314,15 @@ static int __devinit pcf50633_regulator_probe(struct platform_device *pdev) ...@@ -314,13 +314,15 @@ static int __devinit pcf50633_regulator_probe(struct platform_device *pdev)
struct pcf50633 *pcf; struct pcf50633 *pcf;
/* Already set by core driver */ /* Already set by core driver */
pcf = platform_get_drvdata(pdev); pcf = dev_to_pcf50633(pdev->dev.parent);
rdev = regulator_register(&regulators[pdev->id], &pdev->dev, rdev = regulator_register(&regulators[pdev->id], &pdev->dev,
pdev->dev.platform_data, pcf); pdev->dev.platform_data, pcf);
if (IS_ERR(rdev)) if (IS_ERR(rdev))
return PTR_ERR(rdev); return PTR_ERR(rdev);
platform_set_drvdata(pdev, rdev);
if (pcf->pdata->regulator_registered) if (pcf->pdata->regulator_registered)
pcf->pdata->regulator_registered(pcf, pdev->id); pcf->pdata->regulator_registered(pcf, pdev->id);
...@@ -331,6 +333,7 @@ static int __devexit pcf50633_regulator_remove(struct platform_device *pdev) ...@@ -331,6 +333,7 @@ static int __devexit pcf50633_regulator_remove(struct platform_device *pdev)
{ {
struct regulator_dev *rdev = platform_get_drvdata(pdev); struct regulator_dev *rdev = platform_get_drvdata(pdev);
platform_set_drvdata(pdev, NULL);
regulator_unregister(rdev); regulator_unregister(rdev);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment