diff options
Diffstat (limited to 'drivers/power/lp8788-charger.c')
-rw-r--r-- | drivers/power/lp8788-charger.c | 55 |
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 | */ |
106 | struct lp8788_charger { | 106 | struct 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 | ||
400 | static 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 | |||
408 | static 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 | |||
400 | static int lp8788_psy_register(struct platform_device *pdev, | 416 | static 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 | ||
431 | static void lp8788_psy_unregister(struct lp8788_charger *pchg) | 440 | static 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 | ||
437 | static void lp8788_charger_event(struct work_struct *work) | 446 | static 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; |