/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2011 Samsung Electronics Co., Ltd. * MyungJoo.Ham <[email protected]> * * Charger Manager. * This framework enables to control and multiple chargers and to * monitor charging even in the context of suspend-to-RAM with * an interface combining the chargers. * **/ #ifndef _CHARGER_MANAGER_H #define _CHARGER_MANAGER_H #include <linux/power_supply.h> #include <linux/extcon.h> #include <linux/alarmtimer.h> enum data_source { … }; enum polling_modes { … }; enum cm_batt_temp { … }; /** * struct charger_cable * @extcon_name: the name of extcon device. * @name: the name of the cable connector * @extcon_dev: the extcon device. * @wq: the workqueue to control charger according to the state of * charger cable. If charger cable is attached, enable charger. * But if charger cable is detached, disable charger. * @nb: the notifier block to receive changed state from EXTCON * (External Connector) when charger cable is attached/detached. * @attached: the state of charger cable. * true: the charger cable is attached * false: the charger cable is detached * @charger: the instance of struct charger_regulator. * @cm: the Charger Manager representing the battery. */ struct charger_cable { … }; /** * struct charger_regulator * @regulator_name: the name of regulator for using charger. * @consumer: the regulator consumer for the charger. * @externally_control: * Set if the charger-manager cannot control charger, * the charger will be maintained with disabled state. * @cables: * the array of charger cables to enable/disable charger * and set current limit according to constraint data of * struct charger_cable if only charger cable included * in the array of charger cables is attached/detached. * @num_cables: the number of charger cables. * @attr_g: Attribute group for the charger(regulator) * @attr_name: "name" sysfs entry * @attr_state: "state" sysfs entry * @attr_externally_control: "externally_control" sysfs entry * @attrs: Arrays pointing to attr_name/state/externally_control for attr_g */ struct charger_regulator { … }; /** * struct charger_desc * @psy_name: the name of power-supply-class for charger manager * @polling_mode: * Determine which polling mode will be used * @fullbatt_vchkdrop_uV: * Check voltage drop after the battery is fully charged. * If it has dropped more than fullbatt_vchkdrop_uV * CM will restart charging. * @fullbatt_uV: voltage in microvolt * If VBATT >= fullbatt_uV, it is assumed to be full. * @fullbatt_soc: state of Charge in % * If state of Charge >= fullbatt_soc, it is assumed to be full. * @fullbatt_full_capacity: full capacity measure * If full capacity of battery >= fullbatt_full_capacity, * it is assumed to be full. * @polling_interval_ms: interval in millisecond at which * charger manager will monitor battery health * @battery_present: * Specify where information for existence of battery can be obtained * @psy_charger_stat: the names of power-supply for chargers * @num_charger_regulator: the number of entries in charger_regulators * @charger_regulators: array of charger regulators * @psy_fuel_gauge: the name of power-supply for fuel gauge * @thermal_zone : the name of thermal zone for battery * @temp_min : Minimum battery temperature for charging. * @temp_max : Maximum battery temperature for charging. * @temp_diff : Temperature difference to restart charging. * @measure_battery_temp: * true: measure battery temperature * false: measure ambient temperature * @charging_max_duration_ms: Maximum possible duration for charging * If whole charging duration exceed 'charging_max_duration_ms', * cm stop charging. * @discharging_max_duration_ms: * Maximum possible duration for discharging with charger cable * after full-batt. If discharging duration exceed 'discharging * max_duration_ms', cm start charging. */ struct charger_desc { … }; #define PSY_NAME_MAX … /** * struct charger_manager * @entry: entry for list * @dev: device pointer * @desc: instance of charger_desc * @fuel_gauge: power_supply for fuel gauge * @charger_stat: array of power_supply for chargers * @tzd_batt : thermal zone device for battery * @charger_enabled: the state of charger * @emergency_stop: * When setting true, stop charging * @psy_name_buf: the name of power-supply-class for charger manager * @charger_psy: power_supply for charger manager * @status_save_ext_pwr_inserted: * saved status of external power before entering suspend-to-RAM * @status_save_batt: * saved status of battery before entering suspend-to-RAM * @charging_start_time: saved start time of enabling charging * @charging_end_time: saved end time of disabling charging * @battery_status: Current battery status */ struct charger_manager { … }; #endif /* _CHARGER_MANAGER_H */