diff options
Diffstat (limited to 'drivers/power/da9052-battery.c')
-rw-r--r-- | drivers/power/da9052-battery.c | 25 |
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 | ||
170 | struct da9052_battery { | 170 | struct 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 | ||
564 | static struct power_supply template_battery = { | 563 | static 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 | } |