aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/power/power_supply_core.c11
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;