summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorLoic Pallardy <loic.pallardy@stericsson.com>2012-05-10 15:15:14 +0200
committerMathieu J. Poirier <mathieu.poirier@linaro.org>2012-09-25 09:37:06 -0600
commit8329728436208467ba4cdef47ff02fe2a9e65f5a (patch)
treea42354df3947954345b03558a38e360b1a04fda9 /drivers/power
parent15d327d3cacbaa6d0e040df055c4b6a2a70648d2 (diff)
power: Add plaform data charger configurables
Allow to indicate wheter AC and USB charge capabilities are supported from platform data. Signed-off-by: Loic Pallardy <loic.pallardy@stericsson.com> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/58093 Reviewed-by: Marcus COOPER <marcus.xm.cooper@stericsson.com> Reviewed-by: Olivier CLERGEAUD <olivier.clergeaud@stericsson.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/ab8500_charger.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/power/ab8500_charger.c b/drivers/power/ab8500_charger.c
index cbc9fd72d383..3100f1144f04 100644
--- a/drivers/power/ab8500_charger.c
+++ b/drivers/power/ab8500_charger.c
@@ -2878,8 +2878,11 @@ static int __devexit ab8500_charger_remove(struct platform_device *pdev)
destroy_workqueue(di->charger_wq);
flush_scheduled_work();
- power_supply_unregister(&di->usb_chg.psy);
- power_supply_unregister(&di->ac_chg.psy);
+ if (di->usb_chg.enabled)
+ power_supply_unregister(&di->usb_chg.psy);
+ if (di->ac_chg.enabled)
+ power_supply_unregister(&di->ac_chg.psy);
+
platform_set_drvdata(pdev, NULL);
kfree(di);
@@ -2942,6 +2945,7 @@ static int __devinit ab8500_charger_probe(struct platform_device *pdev)
ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
di->ac_chg.max_out_curr = ab8500_charger_current_map[
ARRAY_SIZE(ab8500_charger_current_map) - 1];
+ di->ac_chg.enabled = di->pdata->ac_enabled;
/* USB supply */
/* power_supply base class */
@@ -2960,7 +2964,7 @@ static int __devinit ab8500_charger_probe(struct platform_device *pdev)
ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
di->usb_chg.max_out_curr = ab8500_charger_current_map[
ARRAY_SIZE(ab8500_charger_current_map) - 1];
-
+ di->usb_chg.enabled = di->pdata->usb_enabled;
/* Create a work queue for the charger */
di->charger_wq =
@@ -3036,17 +3040,21 @@ static int __devinit ab8500_charger_probe(struct platform_device *pdev)
}
/* Register AC charger class */
- ret = power_supply_register(di->dev, &di->ac_chg.psy);
- if (ret) {
- dev_err(di->dev, "failed to register AC charger\n");
- goto free_regulator;
+ if (di->ac_chg.enabled) {
+ ret = power_supply_register(di->dev, &di->ac_chg.psy);
+ if (ret) {
+ dev_err(di->dev, "failed to register AC charger\n");
+ goto free_regulator;
+ }
}
/* Register USB charger class */
- ret = power_supply_register(di->dev, &di->usb_chg.psy);
- if (ret) {
- dev_err(di->dev, "failed to register USB charger\n");
- goto free_ac;
+ if (di->usb_chg.enabled) {
+ ret = power_supply_register(di->dev, &di->usb_chg.psy);
+ if (ret) {
+ dev_err(di->dev, "failed to register USB charger\n");
+ goto free_ac;
+ }
}
di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2);
@@ -3122,9 +3130,11 @@ free_irq:
put_usb_phy:
usb_put_phy(di->usb_phy);
free_usb:
- power_supply_unregister(&di->usb_chg.psy);
+ if (di->usb_chg.enabled)
+ power_supply_unregister(&di->usb_chg.psy);
free_ac:
- power_supply_unregister(&di->ac_chg.psy);
+ if (di->ac_chg.enabled)
+ power_supply_unregister(&di->ac_chg.psy);
free_regulator:
regulator_put(di->regu);
free_charger_wq: