diff options
Diffstat (limited to 'drivers/power/max8925_power.c')
-rw-r--r-- | drivers/power/max8925_power.c | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/drivers/power/max8925_power.c b/drivers/power/max8925_power.c index 71c087e3feaf..57eb5c2bfc21 100644 --- a/drivers/power/max8925_power.c +++ b/drivers/power/max8925_power.c | |||
@@ -68,9 +68,9 @@ struct max8925_power_info { | |||
68 | struct i2c_client *gpm; | 68 | struct i2c_client *gpm; |
69 | struct i2c_client *adc; | 69 | struct i2c_client *adc; |
70 | 70 | ||
71 | struct power_supply ac; | 71 | struct power_supply *ac; |
72 | struct power_supply usb; | 72 | struct power_supply *usb; |
73 | struct power_supply battery; | 73 | struct power_supply *battery; |
74 | int irq_base; | 74 | int irq_base; |
75 | unsigned ac_online:1; | 75 | unsigned ac_online:1; |
76 | unsigned usb_online:1; | 76 | unsigned usb_online:1; |
@@ -196,7 +196,7 @@ static int max8925_ac_get_prop(struct power_supply *psy, | |||
196 | enum power_supply_property psp, | 196 | enum power_supply_property psp, |
197 | union power_supply_propval *val) | 197 | union power_supply_propval *val) |
198 | { | 198 | { |
199 | struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); | 199 | struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); |
200 | int ret = 0; | 200 | int ret = 0; |
201 | 201 | ||
202 | switch (psp) { | 202 | switch (psp) { |
@@ -230,7 +230,7 @@ static int max8925_usb_get_prop(struct power_supply *psy, | |||
230 | enum power_supply_property psp, | 230 | enum power_supply_property psp, |
231 | union power_supply_propval *val) | 231 | union power_supply_propval *val) |
232 | { | 232 | { |
233 | struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); | 233 | struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); |
234 | int ret = 0; | 234 | int ret = 0; |
235 | 235 | ||
236 | switch (psp) { | 236 | switch (psp) { |
@@ -264,7 +264,7 @@ static int max8925_bat_get_prop(struct power_supply *psy, | |||
264 | enum power_supply_property psp, | 264 | enum power_supply_property psp, |
265 | union power_supply_propval *val) | 265 | union power_supply_propval *val) |
266 | { | 266 | { |
267 | struct max8925_power_info *info = dev_get_drvdata(psy->dev->parent); | 267 | struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); |
268 | int ret = 0; | 268 | int ret = 0; |
269 | 269 | ||
270 | switch (psp) { | 270 | switch (psp) { |
@@ -347,6 +347,30 @@ static enum power_supply_property max8925_battery_props[] = { | |||
347 | POWER_SUPPLY_PROP_STATUS, | 347 | POWER_SUPPLY_PROP_STATUS, |
348 | }; | 348 | }; |
349 | 349 | ||
350 | static const struct power_supply_desc ac_desc = { | ||
351 | .name = "max8925-ac", | ||
352 | .type = POWER_SUPPLY_TYPE_MAINS, | ||
353 | .properties = max8925_ac_props, | ||
354 | .num_properties = ARRAY_SIZE(max8925_ac_props), | ||
355 | .get_property = max8925_ac_get_prop, | ||
356 | }; | ||
357 | |||
358 | static const struct power_supply_desc usb_desc = { | ||
359 | .name = "max8925-usb", | ||
360 | .type = POWER_SUPPLY_TYPE_USB, | ||
361 | .properties = max8925_usb_props, | ||
362 | .num_properties = ARRAY_SIZE(max8925_usb_props), | ||
363 | .get_property = max8925_usb_get_prop, | ||
364 | }; | ||
365 | |||
366 | static const struct power_supply_desc battery_desc = { | ||
367 | .name = "max8925-battery", | ||
368 | .type = POWER_SUPPLY_TYPE_BATTERY, | ||
369 | .properties = max8925_battery_props, | ||
370 | .num_properties = ARRAY_SIZE(max8925_battery_props), | ||
371 | .get_property = max8925_bat_get_prop, | ||
372 | }; | ||
373 | |||
350 | #define REQUEST_IRQ(_irq, _name) \ | 374 | #define REQUEST_IRQ(_irq, _name) \ |
351 | do { \ | 375 | do { \ |
352 | ret = request_threaded_irq(chip->irq_base + _irq, NULL, \ | 376 | ret = request_threaded_irq(chip->irq_base + _irq, NULL, \ |
@@ -506,36 +530,26 @@ static int max8925_power_probe(struct platform_device *pdev) | |||
506 | psy_cfg.supplied_to = pdata->supplied_to; | 530 | psy_cfg.supplied_to = pdata->supplied_to; |
507 | psy_cfg.num_supplicants = pdata->num_supplicants; | 531 | psy_cfg.num_supplicants = pdata->num_supplicants; |
508 | 532 | ||
509 | info->ac.name = "max8925-ac"; | 533 | info->ac = power_supply_register(&pdev->dev, &ac_desc, &psy_cfg); |
510 | info->ac.type = POWER_SUPPLY_TYPE_MAINS; | 534 | if (IS_ERR(info->ac)) { |
511 | info->ac.properties = max8925_ac_props; | 535 | ret = PTR_ERR(info->ac); |
512 | info->ac.num_properties = ARRAY_SIZE(max8925_ac_props); | ||
513 | info->ac.get_property = max8925_ac_get_prop; | ||
514 | ret = power_supply_register(&pdev->dev, &info->ac, &psy_cfg); | ||
515 | if (ret) | ||
516 | goto out; | 536 | goto out; |
517 | info->ac.dev->parent = &pdev->dev; | 537 | } |
518 | 538 | info->ac->dev.parent = &pdev->dev; | |
519 | info->usb.name = "max8925-usb"; | ||
520 | info->usb.type = POWER_SUPPLY_TYPE_USB; | ||
521 | info->usb.properties = max8925_usb_props; | ||
522 | info->usb.num_properties = ARRAY_SIZE(max8925_usb_props); | ||
523 | info->usb.get_property = max8925_usb_get_prop; | ||
524 | 539 | ||
525 | ret = power_supply_register(&pdev->dev, &info->usb, &psy_cfg); | 540 | info->usb = power_supply_register(&pdev->dev, &usb_desc, &psy_cfg); |
526 | if (ret) | 541 | if (IS_ERR(info->usb)) { |
542 | ret = PTR_ERR(info->usb); | ||
527 | goto out_usb; | 543 | goto out_usb; |
528 | info->usb.dev->parent = &pdev->dev; | 544 | } |
529 | 545 | info->usb->dev.parent = &pdev->dev; | |
530 | info->battery.name = "max8925-battery"; | 546 | |
531 | info->battery.type = POWER_SUPPLY_TYPE_BATTERY; | 547 | info->battery = power_supply_register(&pdev->dev, &battery_desc, NULL); |
532 | info->battery.properties = max8925_battery_props; | 548 | if (IS_ERR(info->battery)) { |
533 | info->battery.num_properties = ARRAY_SIZE(max8925_battery_props); | 549 | ret = PTR_ERR(info->battery); |
534 | info->battery.get_property = max8925_bat_get_prop; | ||
535 | ret = power_supply_register(&pdev->dev, &info->battery, NULL); | ||
536 | if (ret) | ||
537 | goto out_battery; | 550 | goto out_battery; |
538 | info->battery.dev->parent = &pdev->dev; | 551 | } |
552 | info->battery->dev.parent = &pdev->dev; | ||
539 | 553 | ||
540 | info->batt_detect = pdata->batt_detect; | 554 | info->batt_detect = pdata->batt_detect; |
541 | info->topoff_threshold = pdata->topoff_threshold; | 555 | info->topoff_threshold = pdata->topoff_threshold; |
@@ -547,9 +561,9 @@ static int max8925_power_probe(struct platform_device *pdev) | |||
547 | max8925_init_charger(chip, info); | 561 | max8925_init_charger(chip, info); |
548 | return 0; | 562 | return 0; |
549 | out_battery: | 563 | out_battery: |
550 | power_supply_unregister(&info->battery); | 564 | power_supply_unregister(info->battery); |
551 | out_usb: | 565 | out_usb: |
552 | power_supply_unregister(&info->ac); | 566 | power_supply_unregister(info->ac); |
553 | out: | 567 | out: |
554 | return ret; | 568 | return ret; |
555 | } | 569 | } |
@@ -559,9 +573,9 @@ static int max8925_power_remove(struct platform_device *pdev) | |||
559 | struct max8925_power_info *info = platform_get_drvdata(pdev); | 573 | struct max8925_power_info *info = platform_get_drvdata(pdev); |
560 | 574 | ||
561 | if (info) { | 575 | if (info) { |
562 | power_supply_unregister(&info->ac); | 576 | power_supply_unregister(info->ac); |
563 | power_supply_unregister(&info->usb); | 577 | power_supply_unregister(info->usb); |
564 | power_supply_unregister(&info->battery); | 578 | power_supply_unregister(info->battery); |
565 | max8925_deinit_charger(info); | 579 | max8925_deinit_charger(info); |
566 | } | 580 | } |
567 | return 0; | 581 | return 0; |