summaryrefslogtreecommitdiffstats
path: root/drivers/power/da9052-battery.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/da9052-battery.c')
-rw-r--r--drivers/power/da9052-battery.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/drivers/power/da9052-battery.c b/drivers/power/da9052-battery.c
index 54ba9ddb6d4f..830ec46fe7d0 100644
--- a/drivers/power/da9052-battery.c
+++ b/drivers/power/da9052-battery.c
@@ -169,7 +169,7 @@ static u32 const vc_tbl[3][68][2] = {
169 169
170struct da9052_battery { 170struct da9052_battery {
171 struct da9052 *da9052; 171 struct da9052 *da9052;
172 struct power_supply psy; 172 struct power_supply *psy;
173 struct notifier_block nb; 173 struct notifier_block nb;
174 int charger_type; 174 int charger_type;
175 int status; 175 int status;
@@ -452,7 +452,7 @@ static irqreturn_t da9052_bat_irq(int irq, void *data)
452 452
453 if (irq == DA9052_IRQ_CHGEND || irq == DA9052_IRQ_DCIN || 453 if (irq == DA9052_IRQ_CHGEND || irq == DA9052_IRQ_DCIN ||
454 irq == DA9052_IRQ_VBUS || irq == DA9052_IRQ_TBAT) { 454 irq == DA9052_IRQ_VBUS || irq == DA9052_IRQ_TBAT) {
455 power_supply_changed(&bat->psy); 455 power_supply_changed(bat->psy);
456 } 456 }
457 457
458 return IRQ_HANDLED; 458 return IRQ_HANDLED;
@@ -499,8 +499,7 @@ static int da9052_bat_get_property(struct power_supply *psy,
499{ 499{
500 int ret; 500 int ret;
501 int illegal; 501 int illegal;
502 struct da9052_battery *bat = container_of(psy, struct da9052_battery, 502 struct da9052_battery *bat = power_supply_get_drvdata(psy);
503 psy);
504 503
505 ret = da9052_bat_check_presence(bat, &illegal); 504 ret = da9052_bat_check_presence(bat, &illegal);
506 if (ret < 0) 505 if (ret < 0)
@@ -561,7 +560,7 @@ static enum power_supply_property da9052_bat_props[] = {
561 POWER_SUPPLY_PROP_TECHNOLOGY, 560 POWER_SUPPLY_PROP_TECHNOLOGY,
562}; 561};
563 562
564static struct power_supply template_battery = { 563static struct power_supply_desc psy_desc = {
565 .name = "da9052-bat", 564 .name = "da9052-bat",
566 .type = POWER_SUPPLY_TYPE_BATTERY, 565 .type = POWER_SUPPLY_TYPE_BATTERY,
567 .properties = da9052_bat_props, 566 .properties = da9052_bat_props,
@@ -591,6 +590,7 @@ static s32 da9052_bat_probe(struct platform_device *pdev)
591{ 590{
592 struct da9052_pdata *pdata; 591 struct da9052_pdata *pdata;
593 struct da9052_battery *bat; 592 struct da9052_battery *bat;
593 struct power_supply_config psy_cfg = {};
594 int ret; 594 int ret;
595 int i; 595 int i;
596 596
@@ -599,8 +599,9 @@ static s32 da9052_bat_probe(struct platform_device *pdev)
599 if (!bat) 599 if (!bat)
600 return -ENOMEM; 600 return -ENOMEM;
601 601
602 psy_cfg.drv_data = bat;
603
602 bat->da9052 = dev_get_drvdata(pdev->dev.parent); 604 bat->da9052 = dev_get_drvdata(pdev->dev.parent);
603 bat->psy = template_battery;
604 bat->charger_type = DA9052_NOCHARGER; 605 bat->charger_type = DA9052_NOCHARGER;
605 bat->status = POWER_SUPPLY_STATUS_UNKNOWN; 606 bat->status = POWER_SUPPLY_STATUS_UNKNOWN;
606 bat->health = POWER_SUPPLY_HEALTH_UNKNOWN; 607 bat->health = POWER_SUPPLY_HEALTH_UNKNOWN;
@@ -608,9 +609,9 @@ static s32 da9052_bat_probe(struct platform_device *pdev)
608 609
609 pdata = bat->da9052->dev->platform_data; 610 pdata = bat->da9052->dev->platform_data;
610 if (pdata != NULL && pdata->use_for_apm) 611 if (pdata != NULL && pdata->use_for_apm)
611 bat->psy.use_for_apm = pdata->use_for_apm; 612 psy_desc.use_for_apm = pdata->use_for_apm;
612 else 613 else
613 bat->psy.use_for_apm = 1; 614 psy_desc.use_for_apm = 1;
614 615
615 for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) { 616 for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) {
616 ret = da9052_request_irq(bat->da9052, 617 ret = da9052_request_irq(bat->da9052,
@@ -625,9 +626,11 @@ static s32 da9052_bat_probe(struct platform_device *pdev)
625 } 626 }
626 } 627 }
627 628
628 ret = power_supply_register(&pdev->dev, &bat->psy, NULL); 629 bat->psy = power_supply_register(&pdev->dev, &psy_desc, &psy_cfg);
629 if (ret) 630 if (IS_ERR(bat->psy)) {
631 ret = PTR_ERR(bat->psy);
630 goto err; 632 goto err;
633 }
631 634
632 platform_set_drvdata(pdev, bat); 635 platform_set_drvdata(pdev, bat);
633 return 0; 636 return 0;
@@ -646,7 +649,7 @@ static int da9052_bat_remove(struct platform_device *pdev)
646 for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) 649 for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++)
647 da9052_free_irq(bat->da9052, da9052_bat_irq_bits[i], bat); 650 da9052_free_irq(bat->da9052, da9052_bat_irq_bits[i], bat);
648 651
649 power_supply_unregister(&bat->psy); 652 power_supply_unregister(bat->psy);
650 653
651 return 0; 654 return 0;
652} 655}