aboutsummaryrefslogtreecommitdiff
path: root/drivers/power/pcf50633-charger.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2010-05-24 23:37:19 +0200
committerLars-Peter Clausen <lars@metafoo.de>2010-06-08 15:37:09 +0200
commit4a29094bdf6ff382b7558e242ddb91c67fc200c7 (patch)
treea6956e158bdcf88c2b916e2f383a810f81acef86 /drivers/power/pcf50633-charger.c
parent7c3f9799aa31d974507bf73e8c29172ecc672ecf (diff)
MFD: pcf50633: Use mfd cells to register child devices
This patch changes the pcf50633 core code to use mfd cells to register child devices instead of calling platform_device_{alloc,add} for each child. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Diffstat (limited to 'drivers/power/pcf50633-charger.c')
-rw-r--r--drivers/power/pcf50633-charger.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c
index 066f994e6fe..f7114858eb1 100644
--- a/drivers/power/pcf50633-charger.c
+++ b/drivers/power/pcf50633-charger.c
@@ -40,7 +40,7 @@ struct pcf50633_mbc {
int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma)
{
- struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev);
+ struct pcf50633_mbc *mbc = pcf->mbc;
int ret = 0;
u8 bits;
int charging_start = 1;
@@ -112,7 +112,7 @@ EXPORT_SYMBOL_GPL(pcf50633_mbc_usb_curlim_set);
int pcf50633_mbc_get_status(struct pcf50633 *pcf)
{
- struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev);
+ struct pcf50633_mbc *mbc = pcf->mbc;
int status = 0;
u8 chgmod;
@@ -143,7 +143,7 @@ EXPORT_SYMBOL_GPL(pcf50633_mbc_get_status);
int pcf50633_mbc_get_usb_online_status(struct pcf50633 *pcf)
{
- struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev);
+ struct pcf50633_mbc *mbc = pcf->mbc;
if (!mbc)
return 0;
@@ -368,6 +368,7 @@ static const u8 mbc_irq_handlers[] = {
static int __devinit pcf50633_mbc_probe(struct platform_device *pdev)
{
+ struct pcf50633 *pcf = dev_to_pcf50633(pdev->dev.parent);
struct pcf50633_mbc *mbc;
int ret;
int i;
@@ -378,7 +379,7 @@ static int __devinit pcf50633_mbc_probe(struct platform_device *pdev)
return -ENOMEM;
platform_set_drvdata(pdev, mbc);
- mbc->pcf = dev_to_pcf50633(pdev->dev.parent);
+ mbc->pcf = pcf;
/* Set up IRQ handlers */
for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++)
@@ -444,6 +445,8 @@ static int __devinit pcf50633_mbc_probe(struct platform_device *pdev)
if (mbcs1 & PCF50633_MBCS1_ADAPTPRES)
pcf50633_mbc_irq_handler(PCF50633_IRQ_ADPINS, mbc);
+ pcf->mbc = mbc;
+
return 0;
}
@@ -452,6 +455,8 @@ static int __devexit pcf50633_mbc_remove(struct platform_device *pdev)
struct pcf50633_mbc *mbc = platform_get_drvdata(pdev);
int i;
+ mbc->pcf->mbc = NULL;
+
/* Remove IRQ handlers */
for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++)
pcf50633_free_irq(mbc->pcf, mbc_irq_handlers[i]);