The charger framework needs to be notified on registering a new charger, on power supply changed event or on a thermal throttle request. This patch enables support for the same Signed-off-by: Jenny TC <jenny...@intel.com> --- drivers/power/power_supply.h | 20 ++++++++++++++++++++ drivers/power/power_supply_core.c | 12 ++++++++++++ 2 files changed, 32 insertions(+)
diff --git a/drivers/power/power_supply.h b/drivers/power/power_supply.h index cc439fd..ae2d66c 100644 --- a/drivers/power/power_supply.h +++ b/drivers/power/power_supply.h @@ -40,3 +40,23 @@ static inline int power_supply_create_triggers(struct power_supply *psy) static inline void power_supply_remove_triggers(struct power_supply *psy) {} #endif /* CONFIG_LEDS_TRIGGERS */ +#ifdef CONFIG_POWER_SUPPLY_CHARGER + +extern void power_supply_trigger_charging_handler(struct power_supply *psy); +extern int power_supply_register_charger(struct power_supply *psy); +extern int power_supply_unregister_charger(struct power_supply *psy); +extern int psy_charger_throttle_charger(struct power_supply *psy, + unsigned long state); + +#else + +static inline void power_supply_trigger_charging_handler(struct power_supply *psy) { } +static inline int power_supply_register_charger(struct power_supply *psy) +{ return 0; } +static inline int power_supply_unregister_charger(struct power_supply *psy) +{ return 0; } +static inline int psy_charger_throttle_charger(struct power_supply *psy, + unsigned long state) +{ return 0; } + +#endif diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c index 3338d49..73ac6e4 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c @@ -19,6 +19,7 @@ #include <linux/power_supply.h> #include <linux/thermal.h> #include "power_supply.h" +#include "power_supply_charger.h" /* exported for the APM Power driver, APM emulation */ struct class *power_supply_class; @@ -49,6 +50,7 @@ static void power_supply_changed_work(struct work_struct *work) class_for_each_device(power_supply_class, NULL, psy, __power_supply_changed_work); + power_supply_trigger_charging_handler(psy); power_supply_update_leds(psy); @@ -265,6 +267,8 @@ static int ps_set_cur_charge_cntl_limit(struct thermal_cooling_device *tcd, ret = psy->set_property(psy, POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, &val); + psy_charger_throttle_charger(psy,state); + return ret; } @@ -360,10 +364,16 @@ int power_supply_register(struct device *parent, struct power_supply *psy) if (rc) goto create_triggers_failed; + if (IS_CHARGER(psy)) + rc = power_supply_register_charger(psy); + if (rc) + goto charger_register_failed; + power_supply_changed(psy); goto success; +charger_register_failed: create_triggers_failed: psy_unregister_cooler(psy); register_cooler_failed: @@ -382,6 +392,8 @@ void power_supply_unregister(struct power_supply *psy) { cancel_work_sync(&psy->changed_work); sysfs_remove_link(&psy->dev->kobj, "powers"); + if (IS_CHARGER(psy)) + power_supply_unregister_charger(psy); power_supply_remove_triggers(psy); psy_unregister_cooler(psy); psy_unregister_thermal(psy); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/