aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/max8925_power.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/max8925_power.c')
-rw-r--r--drivers/power/max8925_power.c88
1 files changed, 51 insertions, 37 deletions
diff --git a/drivers/power/max8925_power.c b/drivers/power/max8925_power.c
index 71c087e3feaf..57eb5c2bfc21 100644
--- a/drivers/power/max8925_power.c
+++ b/drivers/power/max8925_power.c
@@ -68,9 +68,9 @@ struct max8925_power_info {
68 struct i2c_client *gpm; 68 struct i2c_client *gpm;
69 struct i2c_client *adc; 69 struct i2c_client *adc;
70 70
71 struct power_supply ac; 71 struct power_supply *ac;
72 struct power_supply usb; 72 struct power_supply *usb;
73 struct power_supply battery; 73 struct power_supply *battery;
74 int irq_base; 74 int irq_base;
75 unsigned ac_online:1; 75 unsigned ac_online:1;
76 unsigned usb_online:1; 76 unsigned usb_online:1;
@@ -196,7 +196,7 @@ static int max8925_ac_get_prop(struct power_supply *psy,
196 enum power_supply_property psp, 196 enum power_supply_property psp,
197 union power_supply_propval *val) 197 union power_supply_propval *val)
198{ 198{
199 struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); 199 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent);
200 int ret = 0; 200 int ret = 0;
201 201
202 switch (psp) { 202 switch (psp) {
@@ -230,7 +230,7 @@ static int max8925_usb_get_prop(struct power_supply *psy,
230 enum power_supply_property psp, 230 enum power_supply_property psp,
231 union power_supply_propval *val) 231 union power_supply_propval *val)
232{ 232{
233 struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); 233 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent);
234 int ret = 0; 234 int ret = 0;
235 235
236 switch (psp) { 236 switch (psp) {
@@ -264,7 +264,7 @@ static int max8925_bat_get_prop(struct power_supply *psy,
264 enum power_supply_property psp, 264 enum power_supply_property psp,
265 union power_supply_propval *val) 265 union power_supply_propval *val)
266{ 266{
267 struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); 267 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent);
268 int ret = 0; 268 int ret = 0;
269 269
270 switch (psp) { 270 switch (psp) {
@@ -347,6 +347,30 @@ static enum power_supply_property max8925_battery_props[] = {
347 POWER_SUPPLY_PROP_STATUS, 347 POWER_SUPPLY_PROP_STATUS,
348}; 348};
349 349
350static const struct power_supply_desc ac_desc = {
351 .name = "max8925-ac",
352 .type = POWER_SUPPLY_TYPE_MAINS,
353 .properties = max8925_ac_props,
354 .num_properties = ARRAY_SIZE(max8925_ac_props),
355 .get_property = max8925_ac_get_prop,
356};
357
358static const struct power_supply_desc usb_desc = {
359 .name = "max8925-usb",
360 .type = POWER_SUPPLY_TYPE_USB,
361 .properties = max8925_usb_props,
362 .num_properties = ARRAY_SIZE(max8925_usb_props),
363 .get_property = max8925_usb_get_prop,
364};
365
366static const struct power_supply_desc battery_desc = {
367 .name = "max8925-battery",
368 .type = POWER_SUPPLY_TYPE_BATTERY,
369 .properties = max8925_battery_props,
370 .num_properties = ARRAY_SIZE(max8925_battery_props),
371 .get_property = max8925_bat_get_prop,
372};
373
350#define REQUEST_IRQ(_irq, _name) \ 374#define REQUEST_IRQ(_irq, _name) \
351do { \ 375do { \
352 ret = request_threaded_irq(chip->irq_base + _irq, NULL, \ 376 ret = request_threaded_irq(chip->irq_base + _irq, NULL, \
@@ -506,36 +530,26 @@ static int max8925_power_probe(struct platform_device *pdev)
506 psy_cfg.supplied_to = pdata->supplied_to; 530 psy_cfg.supplied_to = pdata->supplied_to;
507 psy_cfg.num_supplicants = pdata->num_supplicants; 531 psy_cfg.num_supplicants = pdata->num_supplicants;
508 532
509 info->ac.name = "max8925-ac"; 533 info->ac = power_supply_register(&pdev->dev, &ac_desc, &psy_cfg);
510 info->ac.type = POWER_SUPPLY_TYPE_MAINS; 534 if (IS_ERR(info->ac)) {
511 info->ac.properties = max8925_ac_props; 535 ret = PTR_ERR(info->ac);
512 info->ac.num_properties = ARRAY_SIZE(max8925_ac_props);
513 info->ac.get_property = max8925_ac_get_prop;
514 ret = power_supply_register(&pdev->dev, &info->ac, &psy_cfg);
515 if (ret)
516 goto out; 536 goto out;
517 info->ac.dev->parent = &pdev->dev; 537 }
518 538 info->ac->dev.parent = &pdev->dev;
519 info->usb.name = "max8925-usb";
520 info->usb.type = POWER_SUPPLY_TYPE_USB;
521 info->usb.properties = max8925_usb_props;
522 info->usb.num_properties = ARRAY_SIZE(max8925_usb_props);
523 info->usb.get_property = max8925_usb_get_prop;
524 539
525 ret = power_supply_register(&pdev->dev, &info->usb, &psy_cfg); 540 info->usb = power_supply_register(&pdev->dev, &usb_desc, &psy_cfg);
526 if (ret) 541 if (IS_ERR(info->usb)) {
542 ret = PTR_ERR(info->usb);
527 goto out_usb; 543 goto out_usb;
528 info->usb.dev->parent = &pdev->dev; 544 }
529 545 info->usb->dev.parent = &pdev->dev;
530 info->battery.name = "max8925-battery"; 546
531 info->battery.type = POWER_SUPPLY_TYPE_BATTERY; 547 info->battery = power_supply_register(&pdev->dev, &battery_desc, NULL);
532 info->battery.properties = max8925_battery_props; 548 if (IS_ERR(info->battery)) {
533 info->battery.num_properties = ARRAY_SIZE(max8925_battery_props); 549 ret = PTR_ERR(info->battery);
534 info->battery.get_property = max8925_bat_get_prop;
535 ret = power_supply_register(&pdev->dev, &info->battery, NULL);
536 if (ret)
537 goto out_battery; 550 goto out_battery;
538 info->battery.dev->parent = &pdev->dev; 551 }
552 info->battery->dev.parent = &pdev->dev;
539 553
540 info->batt_detect = pdata->batt_detect; 554 info->batt_detect = pdata->batt_detect;
541 info->topoff_threshold = pdata->topoff_threshold; 555 info->topoff_threshold = pdata->topoff_threshold;
@@ -547,9 +561,9 @@ static int max8925_power_probe(struct platform_device *pdev)
547 max8925_init_charger(chip, info); 561 max8925_init_charger(chip, info);
548 return 0; 562 return 0;
549out_battery: 563out_battery:
550 power_supply_unregister(&info->battery); 564 power_supply_unregister(info->battery);
551out_usb: 565out_usb:
552 power_supply_unregister(&info->ac); 566 power_supply_unregister(info->ac);
553out: 567out:
554 return ret; 568 return ret;
555} 569}
@@ -559,9 +573,9 @@ static int max8925_power_remove(struct platform_device *pdev)
559 struct max8925_power_info *info = platform_get_drvdata(pdev); 573 struct max8925_power_info *info = platform_get_drvdata(pdev);
560 574
561 if (info) { 575 if (info) {
562 power_supply_unregister(&info->ac); 576 power_supply_unregister(info->ac);
563 power_supply_unregister(&info->usb); 577 power_supply_unregister(info->usb);
564 power_supply_unregister(&info->battery); 578 power_supply_unregister(info->battery);
565 max8925_deinit_charger(info); 579 max8925_deinit_charger(info);
566 } 580 }
567 return 0; 581 return 0;