diff options
-rw-r--r-- | drivers/power/power_supply_core.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c index 2ed4a4a6b3c5..15da277e0e8d 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c | |||
@@ -659,7 +659,6 @@ __power_supply_register(struct device *parent, | |||
659 | dev->release = power_supply_dev_release; | 659 | dev->release = power_supply_dev_release; |
660 | dev_set_drvdata(dev, psy); | 660 | dev_set_drvdata(dev, psy); |
661 | psy->desc = desc; | 661 | psy->desc = desc; |
662 | atomic_inc(&psy->use_cnt); | ||
663 | if (cfg) { | 662 | if (cfg) { |
664 | psy->drv_data = cfg->drv_data; | 663 | psy->drv_data = cfg->drv_data; |
665 | psy->of_node = cfg->of_node; | 664 | psy->of_node = cfg->of_node; |
@@ -700,6 +699,16 @@ __power_supply_register(struct device *parent, | |||
700 | if (rc) | 699 | if (rc) |
701 | goto create_triggers_failed; | 700 | goto create_triggers_failed; |
702 | 701 | ||
702 | /* | ||
703 | * Update use_cnt after any uevents (most notably from device_add()). | ||
704 | * We are here still during driver's probe but | ||
705 | * the power_supply_uevent() calls back driver's get_property | ||
706 | * method so: | ||
707 | * 1. Driver did not assigned the returned struct power_supply, | ||
708 | * 2. Driver could not finish initialization (anything in its probe | ||
709 | * after calling power_supply_register()). | ||
710 | */ | ||
711 | atomic_inc(&psy->use_cnt); | ||
703 | power_supply_changed(psy); | 712 | power_supply_changed(psy); |
704 | 713 | ||
705 | return psy; | 714 | return psy; |