cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

charger-manager.h (7110B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2011 Samsung Electronics Co., Ltd.
      4 * MyungJoo.Ham <myungjoo.ham@samsung.com>
      5 *
      6 * Charger Manager.
      7 * This framework enables to control and multiple chargers and to
      8 * monitor charging even in the context of suspend-to-RAM with
      9 * an interface combining the chargers.
     10 *
     11**/
     12
     13#ifndef _CHARGER_MANAGER_H
     14#define _CHARGER_MANAGER_H
     15
     16#include <linux/power_supply.h>
     17#include <linux/extcon.h>
     18#include <linux/alarmtimer.h>
     19
     20enum data_source {
     21	CM_BATTERY_PRESENT,
     22	CM_NO_BATTERY,
     23	CM_FUEL_GAUGE,
     24	CM_CHARGER_STAT,
     25};
     26
     27enum polling_modes {
     28	CM_POLL_DISABLE = 0,
     29	CM_POLL_ALWAYS,
     30	CM_POLL_EXTERNAL_POWER_ONLY,
     31	CM_POLL_CHARGING_ONLY,
     32};
     33
     34enum cm_batt_temp {
     35	CM_BATT_OK = 0,
     36	CM_BATT_OVERHEAT,
     37	CM_BATT_COLD,
     38};
     39
     40/**
     41 * struct charger_cable
     42 * @extcon_name: the name of extcon device.
     43 * @name: the name of the cable connector
     44 * @extcon_dev: the extcon device.
     45 * @wq: the workqueue to control charger according to the state of
     46 *	charger cable. If charger cable is attached, enable charger.
     47 *	But if charger cable is detached, disable charger.
     48 * @nb: the notifier block to receive changed state from EXTCON
     49 *	(External Connector) when charger cable is attached/detached.
     50 * @attached: the state of charger cable.
     51 *	true: the charger cable is attached
     52 *	false: the charger cable is detached
     53 * @charger: the instance of struct charger_regulator.
     54 * @cm: the Charger Manager representing the battery.
     55 */
     56struct charger_cable {
     57	const char *extcon_name;
     58	const char *name;
     59	struct extcon_dev *extcon_dev;
     60	u64 extcon_type;
     61
     62	/* The charger-manager use Extcon framework */
     63	struct work_struct wq;
     64	struct notifier_block nb;
     65
     66	/* The state of charger cable */
     67	bool attached;
     68
     69	struct charger_regulator *charger;
     70
     71	/*
     72	 * Set min/max current of regulator to protect over-current issue
     73	 * according to a kind of charger cable when cable is attached.
     74	 */
     75	int min_uA;
     76	int max_uA;
     77
     78	struct charger_manager *cm;
     79};
     80
     81/**
     82 * struct charger_regulator
     83 * @regulator_name: the name of regulator for using charger.
     84 * @consumer: the regulator consumer for the charger.
     85 * @externally_control:
     86 *	Set if the charger-manager cannot control charger,
     87 *	the charger will be maintained with disabled state.
     88 * @cables:
     89 *	the array of charger cables to enable/disable charger
     90 *	and set current limit according to constraint data of
     91 *	struct charger_cable if only charger cable included
     92 *	in the array of charger cables is attached/detached.
     93 * @num_cables: the number of charger cables.
     94 * @attr_g: Attribute group for the charger(regulator)
     95 * @attr_name: "name" sysfs entry
     96 * @attr_state: "state" sysfs entry
     97 * @attr_externally_control: "externally_control" sysfs entry
     98 * @attrs: Arrays pointing to attr_name/state/externally_control for attr_g
     99 */
    100struct charger_regulator {
    101	/* The name of regulator for charging */
    102	const char *regulator_name;
    103	struct regulator *consumer;
    104
    105	/* charger never on when system is on */
    106	int externally_control;
    107
    108	/*
    109	 * Store constraint information related to current limit,
    110	 * each cable have different condition for charging.
    111	 */
    112	struct charger_cable *cables;
    113	int num_cables;
    114
    115	struct attribute_group attr_grp;
    116	struct device_attribute attr_name;
    117	struct device_attribute attr_state;
    118	struct device_attribute attr_externally_control;
    119	struct attribute *attrs[4];
    120
    121	struct charger_manager *cm;
    122};
    123
    124/**
    125 * struct charger_desc
    126 * @psy_name: the name of power-supply-class for charger manager
    127 * @polling_mode:
    128 *	Determine which polling mode will be used
    129 * @fullbatt_vchkdrop_uV:
    130 *	Check voltage drop after the battery is fully charged.
    131 *	If it has dropped more than fullbatt_vchkdrop_uV
    132 *	CM will restart charging.
    133 * @fullbatt_uV: voltage in microvolt
    134 *	If VBATT >= fullbatt_uV, it is assumed to be full.
    135 * @fullbatt_soc: state of Charge in %
    136 *	If state of Charge >= fullbatt_soc, it is assumed to be full.
    137 * @fullbatt_full_capacity: full capacity measure
    138 *	If full capacity of battery >= fullbatt_full_capacity,
    139 *	it is assumed to be full.
    140 * @polling_interval_ms: interval in millisecond at which
    141 *	charger manager will monitor battery health
    142 * @battery_present:
    143 *	Specify where information for existence of battery can be obtained
    144 * @psy_charger_stat: the names of power-supply for chargers
    145 * @num_charger_regulator: the number of entries in charger_regulators
    146 * @charger_regulators: array of charger regulators
    147 * @psy_fuel_gauge: the name of power-supply for fuel gauge
    148 * @thermal_zone : the name of thermal zone for battery
    149 * @temp_min : Minimum battery temperature for charging.
    150 * @temp_max : Maximum battery temperature for charging.
    151 * @temp_diff : Temperature difference to restart charging.
    152 * @measure_battery_temp:
    153 *	true: measure battery temperature
    154 *	false: measure ambient temperature
    155 * @charging_max_duration_ms: Maximum possible duration for charging
    156 *	If whole charging duration exceed 'charging_max_duration_ms',
    157 *	cm stop charging.
    158 * @discharging_max_duration_ms:
    159 *	Maximum possible duration for discharging with charger cable
    160 *	after full-batt. If discharging duration exceed 'discharging
    161 *	max_duration_ms', cm start charging.
    162 */
    163struct charger_desc {
    164	const char *psy_name;
    165
    166	enum polling_modes polling_mode;
    167	unsigned int polling_interval_ms;
    168
    169	unsigned int fullbatt_vchkdrop_uV;
    170	unsigned int fullbatt_uV;
    171	unsigned int fullbatt_soc;
    172	unsigned int fullbatt_full_capacity;
    173
    174	enum data_source battery_present;
    175
    176	const char **psy_charger_stat;
    177
    178	int num_charger_regulators;
    179	struct charger_regulator *charger_regulators;
    180	const struct attribute_group **sysfs_groups;
    181
    182	const char *psy_fuel_gauge;
    183
    184	const char *thermal_zone;
    185
    186	int temp_min;
    187	int temp_max;
    188	int temp_diff;
    189
    190	bool measure_battery_temp;
    191
    192	u32 charging_max_duration_ms;
    193	u32 discharging_max_duration_ms;
    194};
    195
    196#define PSY_NAME_MAX	30
    197
    198/**
    199 * struct charger_manager
    200 * @entry: entry for list
    201 * @dev: device pointer
    202 * @desc: instance of charger_desc
    203 * @fuel_gauge: power_supply for fuel gauge
    204 * @charger_stat: array of power_supply for chargers
    205 * @tzd_batt : thermal zone device for battery
    206 * @charger_enabled: the state of charger
    207 * @emergency_stop:
    208 *	When setting true, stop charging
    209 * @psy_name_buf: the name of power-supply-class for charger manager
    210 * @charger_psy: power_supply for charger manager
    211 * @status_save_ext_pwr_inserted:
    212 *	saved status of external power before entering suspend-to-RAM
    213 * @status_save_batt:
    214 *	saved status of battery before entering suspend-to-RAM
    215 * @charging_start_time: saved start time of enabling charging
    216 * @charging_end_time: saved end time of disabling charging
    217 * @battery_status: Current battery status
    218 */
    219struct charger_manager {
    220	struct list_head entry;
    221	struct device *dev;
    222	struct charger_desc *desc;
    223
    224#ifdef CONFIG_THERMAL
    225	struct thermal_zone_device *tzd_batt;
    226#endif
    227	bool charger_enabled;
    228
    229	int emergency_stop;
    230
    231	char psy_name_buf[PSY_NAME_MAX + 1];
    232	struct power_supply_desc charger_psy_desc;
    233	struct power_supply *charger_psy;
    234
    235	u64 charging_start_time;
    236	u64 charging_end_time;
    237
    238	int battery_status;
    239};
    240
    241#endif /* _CHARGER_MANAGER_H */