summaryrefslogtreecommitdiffstats
path: root/drivers/power/lp8788-charger.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/lp8788-charger.c')
-rw-r--r--drivers/power/lp8788-charger.c55
1 files changed, 32 insertions, 23 deletions
diff --git a/drivers/power/lp8788-charger.c b/drivers/power/lp8788-charger.c
index 8e4d228519c1..f5a48fd68b01 100644
--- a/drivers/power/lp8788-charger.c
+++ b/drivers/power/lp8788-charger.c
@@ -105,8 +105,8 @@ struct lp8788_chg_irq {
105 */ 105 */
106struct lp8788_charger { 106struct lp8788_charger {
107 struct lp8788 *lp; 107 struct lp8788 *lp;
108 struct power_supply charger; 108 struct power_supply *charger;
109 struct power_supply battery; 109 struct power_supply *battery;
110 struct work_struct charger_work; 110 struct work_struct charger_work;
111 struct iio_channel *chan[LP8788_NUM_CHG_ADC]; 111 struct iio_channel *chan[LP8788_NUM_CHG_ADC];
112 struct lp8788_chg_irq irqs[LP8788_MAX_CHG_IRQS]; 112 struct lp8788_chg_irq irqs[LP8788_MAX_CHG_IRQS];
@@ -148,7 +148,7 @@ static int lp8788_charger_get_property(struct power_supply *psy,
148 enum power_supply_property psp, 148 enum power_supply_property psp,
149 union power_supply_propval *val) 149 union power_supply_propval *val)
150{ 150{
151 struct lp8788_charger *pchg = dev_get_drvdata(psy->dev->parent); 151 struct lp8788_charger *pchg = dev_get_drvdata(psy->dev.parent);
152 u8 read; 152 u8 read;
153 153
154 switch (psp) { 154 switch (psp) {
@@ -337,7 +337,7 @@ static int lp8788_battery_get_property(struct power_supply *psy,
337 enum power_supply_property psp, 337 enum power_supply_property psp,
338 union power_supply_propval *val) 338 union power_supply_propval *val)
339{ 339{
340 struct lp8788_charger *pchg = dev_get_drvdata(psy->dev->parent); 340 struct lp8788_charger *pchg = dev_get_drvdata(psy->dev.parent);
341 341
342 switch (psp) { 342 switch (psp) {
343 case POWER_SUPPLY_PROP_STATUS: 343 case POWER_SUPPLY_PROP_STATUS:
@@ -397,31 +397,40 @@ static int lp8788_update_charger_params(struct platform_device *pdev,
397 return 0; 397 return 0;
398} 398}
399 399
400static const struct power_supply_desc lp8788_psy_charger_desc = {
401 .name = LP8788_CHARGER_NAME,
402 .type = POWER_SUPPLY_TYPE_MAINS,
403 .properties = lp8788_charger_prop,
404 .num_properties = ARRAY_SIZE(lp8788_charger_prop),
405 .get_property = lp8788_charger_get_property,
406};
407
408static const struct power_supply_desc lp8788_psy_battery_desc = {
409 .name = LP8788_BATTERY_NAME,
410 .type = POWER_SUPPLY_TYPE_BATTERY,
411 .properties = lp8788_battery_prop,
412 .num_properties = ARRAY_SIZE(lp8788_battery_prop),
413 .get_property = lp8788_battery_get_property,
414};
415
400static int lp8788_psy_register(struct platform_device *pdev, 416static int lp8788_psy_register(struct platform_device *pdev,
401 struct lp8788_charger *pchg) 417 struct lp8788_charger *pchg)
402{ 418{
403 struct power_supply_config charger_cfg = {}; 419 struct power_supply_config charger_cfg = {};
404 420
405 pchg->charger.name = LP8788_CHARGER_NAME;
406 pchg->charger.type = POWER_SUPPLY_TYPE_MAINS;
407 pchg->charger.properties = lp8788_charger_prop;
408 pchg->charger.num_properties = ARRAY_SIZE(lp8788_charger_prop);
409 pchg->charger.get_property = lp8788_charger_get_property;
410
411 charger_cfg.supplied_to = battery_supplied_to; 421 charger_cfg.supplied_to = battery_supplied_to;
412 charger_cfg.num_supplicants = ARRAY_SIZE(battery_supplied_to); 422 charger_cfg.num_supplicants = ARRAY_SIZE(battery_supplied_to);
413 423
414 if (power_supply_register(&pdev->dev, &pchg->charger, &charger_cfg)) 424 pchg->charger = power_supply_register(&pdev->dev,
425 &lp8788_psy_charger_desc,
426 &charger_cfg);
427 if (IS_ERR(pchg->charger))
415 return -EPERM; 428 return -EPERM;
416 429
417 pchg->battery.name = LP8788_BATTERY_NAME; 430 pchg->battery = power_supply_register(&pdev->dev,
418 pchg->battery.type = POWER_SUPPLY_TYPE_BATTERY; 431 &lp8788_psy_battery_desc, NULL);
419 pchg->battery.properties = lp8788_battery_prop; 432 if (IS_ERR(pchg->battery)) {
420 pchg->battery.num_properties = ARRAY_SIZE(lp8788_battery_prop); 433 power_supply_unregister(pchg->charger);
421 pchg->battery.get_property = lp8788_battery_get_property;
422
423 if (power_supply_register(&pdev->dev, &pchg->battery, NULL)) {
424 power_supply_unregister(&pchg->charger);
425 return -EPERM; 434 return -EPERM;
426 } 435 }
427 436
@@ -430,8 +439,8 @@ static int lp8788_psy_register(struct platform_device *pdev,
430 439
431static void lp8788_psy_unregister(struct lp8788_charger *pchg) 440static void lp8788_psy_unregister(struct lp8788_charger *pchg)
432{ 441{
433 power_supply_unregister(&pchg->battery); 442 power_supply_unregister(pchg->battery);
434 power_supply_unregister(&pchg->charger); 443 power_supply_unregister(pchg->charger);
435} 444}
436 445
437static void lp8788_charger_event(struct work_struct *work) 446static void lp8788_charger_event(struct work_struct *work)
@@ -475,8 +484,8 @@ static irqreturn_t lp8788_charger_irq_thread(int virq, void *ptr)
475 case LP8788_INT_EOC: 484 case LP8788_INT_EOC:
476 case LP8788_INT_BATT_LOW: 485 case LP8788_INT_BATT_LOW:
477 case LP8788_INT_NO_BATT: 486 case LP8788_INT_NO_BATT:
478 power_supply_changed(&pchg->charger); 487 power_supply_changed(pchg->charger);
479 power_supply_changed(&pchg->battery); 488 power_supply_changed(pchg->battery);
480 break; 489 break;
481 default: 490 default:
482 break; 491 break;