diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c index 51d47fc72aaf..0b13c7484775 100644 --- a/drivers/power/supply/power_supply_core.c +++ b/drivers/power/supply/power_supply_core.c @@ -132,7 +132,6 @@ void power_supply_changed(struct power_supply *psy) } EXPORT_SYMBOL_GPL(power_supply_changed); -static int psy_register_cooler(struct power_supply *psy); /* * Notify that power supply was registered after parent finished the probing. * @@ -140,8 +139,6 @@ static int psy_register_cooler(struct power_supply *psy); * calling power_supply_changed() directly from power_supply_register() * would lead to execution of get_property() function provided by the driver * too early - before the probe ends. - * Also, registering cooling device from the probe will execute the - * get_property() function. So register the cooling device after the probe. * * Avoid that by waiting on parent's mutex. */ @@ -159,7 +156,6 @@ static void power_supply_deferred_register_work(struct work_struct *work) } power_supply_changed(psy); - psy_register_cooler(psy); if (psy->dev.parent) mutex_unlock(&psy->dev.parent->mutex); @@ -1276,6 +1272,10 @@ __power_supply_register(struct device *parent, if (rc) goto register_thermal_failed; + rc = psy_register_cooler(psy); + if (rc) + goto register_cooler_failed; + rc = power_supply_create_triggers(psy); if (rc) goto create_triggers_failed; @@ -1305,6 +1305,8 @@ __power_supply_register(struct device *parent, add_hwmon_sysfs_failed: power_supply_remove_triggers(psy); create_triggers_failed: + psy_unregister_cooler(psy); +register_cooler_failed: psy_unregister_thermal(psy); register_thermal_failed: wakeup_init_failed: