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

driver.h (31211B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * driver.h -- SoC Regulator driver support.
      4 *
      5 * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
      6 *
      7 * Author: Liam Girdwood <lrg@slimlogic.co.uk>
      8 *
      9 * Regulator Driver Interface.
     10 */
     11
     12#ifndef __LINUX_REGULATOR_DRIVER_H_
     13#define __LINUX_REGULATOR_DRIVER_H_
     14
     15#include <linux/device.h>
     16#include <linux/linear_range.h>
     17#include <linux/notifier.h>
     18#include <linux/regulator/consumer.h>
     19#include <linux/ww_mutex.h>
     20
     21struct gpio_desc;
     22struct regmap;
     23struct regulator_dev;
     24struct regulator_config;
     25struct regulator_init_data;
     26struct regulator_enable_gpio;
     27
     28enum regulator_status {
     29	REGULATOR_STATUS_OFF,
     30	REGULATOR_STATUS_ON,
     31	REGULATOR_STATUS_ERROR,
     32	/* fast/normal/idle/standby are flavors of "on" */
     33	REGULATOR_STATUS_FAST,
     34	REGULATOR_STATUS_NORMAL,
     35	REGULATOR_STATUS_IDLE,
     36	REGULATOR_STATUS_STANDBY,
     37	/* The regulator is enabled but not regulating */
     38	REGULATOR_STATUS_BYPASS,
     39	/* in case that any other status doesn't apply */
     40	REGULATOR_STATUS_UNDEFINED,
     41};
     42
     43enum regulator_detection_severity {
     44	/* Hardware shut down voltage outputs if condition is detected */
     45	REGULATOR_SEVERITY_PROT,
     46	/* Hardware is probably damaged/inoperable */
     47	REGULATOR_SEVERITY_ERR,
     48	/* Hardware is still recoverable but recovery action must be taken */
     49	REGULATOR_SEVERITY_WARN,
     50};
     51
     52/* Initialize struct linear_range for regulators */
     53#define REGULATOR_LINEAR_RANGE(_min_uV, _min_sel, _max_sel, _step_uV)	\
     54{									\
     55	.min		= _min_uV,					\
     56	.min_sel	= _min_sel,					\
     57	.max_sel	= _max_sel,					\
     58	.step		= _step_uV,					\
     59}
     60
     61/**
     62 * struct regulator_ops - regulator operations.
     63 *
     64 * @enable: Configure the regulator as enabled.
     65 * @disable: Configure the regulator as disabled.
     66 * @is_enabled: Return 1 if the regulator is enabled, 0 if not.
     67 *		May also return negative errno.
     68 *
     69 * @set_voltage: Set the voltage for the regulator within the range specified.
     70 *               The driver should select the voltage closest to min_uV.
     71 * @set_voltage_sel: Set the voltage for the regulator using the specified
     72 *                   selector.
     73 * @map_voltage: Convert a voltage into a selector
     74 * @get_voltage: Return the currently configured voltage for the regulator;
     75 *                   return -ENOTRECOVERABLE if regulator can't be read at
     76 *                   bootup and hasn't been set yet.
     77 * @get_voltage_sel: Return the currently configured voltage selector for the
     78 *                   regulator; return -ENOTRECOVERABLE if regulator can't
     79 *                   be read at bootup and hasn't been set yet.
     80 * @list_voltage: Return one of the supported voltages, in microvolts; zero
     81 *	if the selector indicates a voltage that is unusable on this system;
     82 *	or negative errno.  Selectors range from zero to one less than
     83 *	regulator_desc.n_voltages.  Voltages may be reported in any order.
     84 *
     85 * @set_current_limit: Configure a limit for a current-limited regulator.
     86 *                     The driver should select the current closest to max_uA.
     87 * @get_current_limit: Get the configured limit for a current-limited regulator.
     88 * @set_input_current_limit: Configure an input limit.
     89 *
     90 * @set_over_current_protection: Support enabling of and setting limits for over
     91 *	current situation detection. Detection can be configured for three
     92 *	levels of severity.
     93 *
     94 *	- REGULATOR_SEVERITY_PROT should automatically shut down the regulator(s).
     95 *
     96 *	- REGULATOR_SEVERITY_ERR should indicate that over-current situation is
     97 *		  caused by an unrecoverable error but HW does not perform
     98 *		  automatic shut down.
     99 *
    100 *	- REGULATOR_SEVERITY_WARN should indicate situation where hardware is
    101 *		  still believed to not be damaged but that a board sepcific
    102 *		  recovery action is needed. If lim_uA is 0 the limit should not
    103 *		  be changed but the detection should just be enabled/disabled as
    104 *		  is requested.
    105 *
    106 * @set_over_voltage_protection: Support enabling of and setting limits for over
    107 *	voltage situation detection. Detection can be configured for same
    108 *	severities as over current protection. Units of uV.
    109 * @set_under_voltage_protection: Support enabling of and setting limits for
    110 *	under voltage situation detection. Detection can be configured for same
    111 *	severities as over current protection. Units of uV.
    112 * @set_thermal_protection: Support enabling of and setting limits for over
    113 *	temperature situation detection.Detection can be configured for same
    114 *	severities as over current protection. Units of degree Kelvin.
    115 *
    116 * @set_active_discharge: Set active discharge enable/disable of regulators.
    117 *
    118 * @set_mode: Set the configured operating mode for the regulator.
    119 * @get_mode: Get the configured operating mode for the regulator.
    120 * @get_error_flags: Get the current error(s) for the regulator.
    121 * @get_status: Return actual (not as-configured) status of regulator, as a
    122 *	REGULATOR_STATUS value (or negative errno)
    123 * @get_optimum_mode: Get the most efficient operating mode for the regulator
    124 *                    when running with the specified parameters.
    125 * @set_load: Set the load for the regulator.
    126 *
    127 * @set_bypass: Set the regulator in bypass mode.
    128 * @get_bypass: Get the regulator bypass mode state.
    129 *
    130 * @enable_time: Time taken for the regulator voltage output voltage to
    131 *               stabilise after being enabled, in microseconds.
    132 * @set_ramp_delay: Set the ramp delay for the regulator. The driver should
    133 *		select ramp delay equal to or less than(closest) ramp_delay.
    134 * @set_voltage_time: Time taken for the regulator voltage output voltage
    135 *               to stabilise after being set to a new value, in microseconds.
    136 *               The function receives the from and to voltage as input, it
    137 *               should return the worst case.
    138 * @set_voltage_time_sel: Time taken for the regulator voltage output voltage
    139 *               to stabilise after being set to a new value, in microseconds.
    140 *               The function receives the from and to voltage selector as
    141 *               input, it should return the worst case.
    142 * @set_soft_start: Enable soft start for the regulator.
    143 *
    144 * @set_suspend_voltage: Set the voltage for the regulator when the system
    145 *                       is suspended.
    146 * @set_suspend_enable: Mark the regulator as enabled when the system is
    147 *                      suspended.
    148 * @set_suspend_disable: Mark the regulator as disabled when the system is
    149 *                       suspended.
    150 * @set_suspend_mode: Set the operating mode for the regulator when the
    151 *                    system is suspended.
    152 * @resume: Resume operation of suspended regulator.
    153 * @set_pull_down: Configure the regulator to pull down when the regulator
    154 *		   is disabled.
    155 *
    156 * This struct describes regulator operations which can be implemented by
    157 * regulator chip drivers.
    158 */
    159struct regulator_ops {
    160
    161	/* enumerate supported voltages */
    162	int (*list_voltage) (struct regulator_dev *, unsigned selector);
    163
    164	/* get/set regulator voltage */
    165	int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV,
    166			    unsigned *selector);
    167	int (*map_voltage)(struct regulator_dev *, int min_uV, int max_uV);
    168	int (*set_voltage_sel) (struct regulator_dev *, unsigned selector);
    169	int (*get_voltage) (struct regulator_dev *);
    170	int (*get_voltage_sel) (struct regulator_dev *);
    171
    172	/* get/set regulator current  */
    173	int (*set_current_limit) (struct regulator_dev *,
    174				 int min_uA, int max_uA);
    175	int (*get_current_limit) (struct regulator_dev *);
    176
    177	int (*set_input_current_limit) (struct regulator_dev *, int lim_uA);
    178	int (*set_over_current_protection)(struct regulator_dev *, int lim_uA,
    179					   int severity, bool enable);
    180	int (*set_over_voltage_protection)(struct regulator_dev *, int lim_uV,
    181					   int severity, bool enable);
    182	int (*set_under_voltage_protection)(struct regulator_dev *, int lim_uV,
    183					    int severity, bool enable);
    184	int (*set_thermal_protection)(struct regulator_dev *, int lim,
    185				      int severity, bool enable);
    186	int (*set_active_discharge)(struct regulator_dev *, bool enable);
    187
    188	/* enable/disable regulator */
    189	int (*enable) (struct regulator_dev *);
    190	int (*disable) (struct regulator_dev *);
    191	int (*is_enabled) (struct regulator_dev *);
    192
    193	/* get/set regulator operating mode (defined in consumer.h) */
    194	int (*set_mode) (struct regulator_dev *, unsigned int mode);
    195	unsigned int (*get_mode) (struct regulator_dev *);
    196
    197	/* retrieve current error flags on the regulator */
    198	int (*get_error_flags)(struct regulator_dev *, unsigned int *flags);
    199
    200	/* Time taken to enable or set voltage on the regulator */
    201	int (*enable_time) (struct regulator_dev *);
    202	int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
    203	int (*set_voltage_time) (struct regulator_dev *, int old_uV,
    204				 int new_uV);
    205	int (*set_voltage_time_sel) (struct regulator_dev *,
    206				     unsigned int old_selector,
    207				     unsigned int new_selector);
    208
    209	int (*set_soft_start) (struct regulator_dev *);
    210
    211	/* report regulator status ... most other accessors report
    212	 * control inputs, this reports results of combining inputs
    213	 * from Linux (and other sources) with the actual load.
    214	 * returns REGULATOR_STATUS_* or negative errno.
    215	 */
    216	int (*get_status)(struct regulator_dev *);
    217
    218	/* get most efficient regulator operating mode for load */
    219	unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
    220					  int output_uV, int load_uA);
    221	/* set the load on the regulator */
    222	int (*set_load)(struct regulator_dev *, int load_uA);
    223
    224	/* control and report on bypass mode */
    225	int (*set_bypass)(struct regulator_dev *dev, bool enable);
    226	int (*get_bypass)(struct regulator_dev *dev, bool *enable);
    227
    228	/* the operations below are for configuration of regulator state when
    229	 * its parent PMIC enters a global STANDBY/HIBERNATE state */
    230
    231	/* set regulator suspend voltage */
    232	int (*set_suspend_voltage) (struct regulator_dev *, int uV);
    233
    234	/* enable/disable regulator in suspend state */
    235	int (*set_suspend_enable) (struct regulator_dev *);
    236	int (*set_suspend_disable) (struct regulator_dev *);
    237
    238	/* set regulator suspend operating mode (defined in consumer.h) */
    239	int (*set_suspend_mode) (struct regulator_dev *, unsigned int mode);
    240
    241	int (*resume)(struct regulator_dev *rdev);
    242
    243	int (*set_pull_down) (struct regulator_dev *);
    244};
    245
    246/*
    247 * Regulators can either control voltage or current.
    248 */
    249enum regulator_type {
    250	REGULATOR_VOLTAGE,
    251	REGULATOR_CURRENT,
    252};
    253
    254/**
    255 * struct regulator_desc - Static regulator descriptor
    256 *
    257 * Each regulator registered with the core is described with a
    258 * structure of this type and a struct regulator_config.  This
    259 * structure contains the non-varying parts of the regulator
    260 * description.
    261 *
    262 * @name: Identifying name for the regulator.
    263 * @supply_name: Identifying the regulator supply
    264 * @of_match: Name used to identify regulator in DT.
    265 * @of_match_full_name: A flag to indicate that the of_match string, if
    266 *			present, should be matched against the node full_name.
    267 * @regulators_node: Name of node containing regulator definitions in DT.
    268 * @of_parse_cb: Optional callback called only if of_match is present.
    269 *               Will be called for each regulator parsed from DT, during
    270 *               init_data parsing.
    271 *               The regulator_config passed as argument to the callback will
    272 *               be a copy of config passed to regulator_register, valid only
    273 *               for this particular call. Callback may freely change the
    274 *               config but it cannot store it for later usage.
    275 *               Callback should return 0 on success or negative ERRNO
    276 *               indicating failure.
    277 * @id: Numerical identifier for the regulator.
    278 * @ops: Regulator operations table.
    279 * @irq: Interrupt number for the regulator.
    280 * @type: Indicates if the regulator is a voltage or current regulator.
    281 * @owner: Module providing the regulator, used for refcounting.
    282 *
    283 * @continuous_voltage_range: Indicates if the regulator can set any
    284 *                            voltage within constrains range.
    285 * @n_voltages: Number of selectors available for ops.list_voltage().
    286 * @n_current_limits: Number of selectors available for current limits
    287 *
    288 * @min_uV: Voltage given by the lowest selector (if linear mapping)
    289 * @uV_step: Voltage increase with each selector (if linear mapping)
    290 * @linear_min_sel: Minimal selector for starting linear mapping
    291 * @fixed_uV: Fixed voltage of rails.
    292 * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
    293 * @min_dropout_uV: The minimum dropout voltage this regulator can handle
    294 * @linear_ranges: A constant table of possible voltage ranges.
    295 * @linear_range_selectors: A constant table of voltage range selectors.
    296 *			    If pickable ranges are used each range must
    297 *			    have corresponding selector here.
    298 * @n_linear_ranges: Number of entries in the @linear_ranges (and in
    299 *		     linear_range_selectors if used) table(s).
    300 * @volt_table: Voltage mapping table (if table based mapping)
    301 * @curr_table: Current limit mapping table (if table based mapping)
    302 *
    303 * @vsel_range_reg: Register for range selector when using pickable ranges
    304 *		    and ``regulator_map_*_voltage_*_pickable`` functions.
    305 * @vsel_range_mask: Mask for register bitfield used for range selector
    306 * @vsel_reg: Register for selector when using ``regulator_map_*_voltage_*``
    307 * @vsel_mask: Mask for register bitfield used for selector
    308 * @vsel_step: Specify the resolution of selector stepping when setting
    309 *	       voltage. If 0, then no stepping is done (requested selector is
    310 *	       set directly), if >0 then the regulator API will ramp the
    311 *	       voltage up/down gradually each time increasing/decreasing the
    312 *	       selector by the specified step value.
    313 * @csel_reg: Register for current limit selector using regmap set_current_limit
    314 * @csel_mask: Mask for register bitfield used for current limit selector
    315 * @apply_reg: Register for initiate voltage change on the output when
    316 *                using regulator_set_voltage_sel_regmap
    317 * @apply_bit: Register bitfield used for initiate voltage change on the
    318 *                output when using regulator_set_voltage_sel_regmap
    319 * @enable_reg: Register for control when using regmap enable/disable ops
    320 * @enable_mask: Mask for control when using regmap enable/disable ops
    321 * @enable_val: Enabling value for control when using regmap enable/disable ops
    322 * @disable_val: Disabling value for control when using regmap enable/disable ops
    323 * @enable_is_inverted: A flag to indicate set enable_mask bits to disable
    324 *                      when using regulator_enable_regmap and friends APIs.
    325 * @bypass_reg: Register for control when using regmap set_bypass
    326 * @bypass_mask: Mask for control when using regmap set_bypass
    327 * @bypass_val_on: Enabling value for control when using regmap set_bypass
    328 * @bypass_val_off: Disabling value for control when using regmap set_bypass
    329 * @active_discharge_off: Enabling value for control when using regmap
    330 *			  set_active_discharge
    331 * @active_discharge_on: Disabling value for control when using regmap
    332 *			 set_active_discharge
    333 * @active_discharge_mask: Mask for control when using regmap
    334 *			   set_active_discharge
    335 * @active_discharge_reg: Register for control when using regmap
    336 *			  set_active_discharge
    337 * @soft_start_reg: Register for control when using regmap set_soft_start
    338 * @soft_start_mask: Mask for control when using regmap set_soft_start
    339 * @soft_start_val_on: Enabling value for control when using regmap
    340 *                     set_soft_start
    341 * @pull_down_reg: Register for control when using regmap set_pull_down
    342 * @pull_down_mask: Mask for control when using regmap set_pull_down
    343 * @pull_down_val_on: Enabling value for control when using regmap
    344 *                     set_pull_down
    345 *
    346 * @ramp_reg:		Register for controlling the regulator ramp-rate.
    347 * @ramp_mask:		Bitmask for the ramp-rate control register.
    348 * @ramp_delay_table:	Table for mapping the regulator ramp-rate values. Values
    349 *			should be given in units of V/S (uV/uS). See the
    350 *			regulator_set_ramp_delay_regmap().
    351 *
    352 * @enable_time: Time taken for initial enable of regulator (in uS).
    353 * @off_on_delay: guard time (in uS), before re-enabling a regulator
    354 *
    355 * @poll_enabled_time: The polling interval (in uS) to use while checking that
    356 *                     the regulator was actually enabled. Max upto enable_time.
    357 *
    358 * @of_map_mode: Maps a hardware mode defined in a DeviceTree to a standard mode
    359 */
    360struct regulator_desc {
    361	const char *name;
    362	const char *supply_name;
    363	const char *of_match;
    364	bool of_match_full_name;
    365	const char *regulators_node;
    366	int (*of_parse_cb)(struct device_node *,
    367			    const struct regulator_desc *,
    368			    struct regulator_config *);
    369	int id;
    370	unsigned int continuous_voltage_range:1;
    371	unsigned n_voltages;
    372	unsigned int n_current_limits;
    373	const struct regulator_ops *ops;
    374	int irq;
    375	enum regulator_type type;
    376	struct module *owner;
    377
    378	unsigned int min_uV;
    379	unsigned int uV_step;
    380	unsigned int linear_min_sel;
    381	int fixed_uV;
    382	unsigned int ramp_delay;
    383	int min_dropout_uV;
    384
    385	const struct linear_range *linear_ranges;
    386	const unsigned int *linear_range_selectors;
    387
    388	int n_linear_ranges;
    389
    390	const unsigned int *volt_table;
    391	const unsigned int *curr_table;
    392
    393	unsigned int vsel_range_reg;
    394	unsigned int vsel_range_mask;
    395	unsigned int vsel_reg;
    396	unsigned int vsel_mask;
    397	unsigned int vsel_step;
    398	unsigned int csel_reg;
    399	unsigned int csel_mask;
    400	unsigned int apply_reg;
    401	unsigned int apply_bit;
    402	unsigned int enable_reg;
    403	unsigned int enable_mask;
    404	unsigned int enable_val;
    405	unsigned int disable_val;
    406	bool enable_is_inverted;
    407	unsigned int bypass_reg;
    408	unsigned int bypass_mask;
    409	unsigned int bypass_val_on;
    410	unsigned int bypass_val_off;
    411	unsigned int active_discharge_on;
    412	unsigned int active_discharge_off;
    413	unsigned int active_discharge_mask;
    414	unsigned int active_discharge_reg;
    415	unsigned int soft_start_reg;
    416	unsigned int soft_start_mask;
    417	unsigned int soft_start_val_on;
    418	unsigned int pull_down_reg;
    419	unsigned int pull_down_mask;
    420	unsigned int pull_down_val_on;
    421	unsigned int ramp_reg;
    422	unsigned int ramp_mask;
    423	const unsigned int *ramp_delay_table;
    424	unsigned int n_ramp_values;
    425
    426	unsigned int enable_time;
    427
    428	unsigned int off_on_delay;
    429
    430	unsigned int poll_enabled_time;
    431
    432	unsigned int (*of_map_mode)(unsigned int mode);
    433};
    434
    435/**
    436 * struct regulator_config - Dynamic regulator descriptor
    437 *
    438 * Each regulator registered with the core is described with a
    439 * structure of this type and a struct regulator_desc.  This structure
    440 * contains the runtime variable parts of the regulator description.
    441 *
    442 * @dev: struct device for the regulator
    443 * @init_data: platform provided init data, passed through by driver
    444 * @driver_data: private regulator data
    445 * @of_node: OpenFirmware node to parse for device tree bindings (may be
    446 *           NULL).
    447 * @regmap: regmap to use for core regmap helpers if dev_get_regmap() is
    448 *          insufficient.
    449 * @ena_gpiod: GPIO controlling regulator enable.
    450 */
    451struct regulator_config {
    452	struct device *dev;
    453	const struct regulator_init_data *init_data;
    454	void *driver_data;
    455	struct device_node *of_node;
    456	struct regmap *regmap;
    457
    458	struct gpio_desc *ena_gpiod;
    459};
    460
    461/**
    462 * struct regulator_err_state - regulator error/notification status
    463 *
    464 * @rdev:		Regulator which status the struct indicates.
    465 * @notifs:		Events which have occurred on the regulator.
    466 * @errors:		Errors which are active on the regulator.
    467 * @possible_errs:	Errors which can be signaled (by given IRQ).
    468 */
    469struct regulator_err_state {
    470	struct regulator_dev *rdev;
    471	unsigned long notifs;
    472	unsigned long errors;
    473	int possible_errs;
    474};
    475
    476/**
    477 * struct regulator_irq_data - regulator error/notification status data
    478 *
    479 * @states:	Status structs for each of the associated regulators.
    480 * @num_states:	Amount of associated regulators.
    481 * @data:	Driver data pointer given at regulator_irq_desc.
    482 * @opaque:	Value storage for IC driver. Core does not update this. ICs
    483 *		may want to store status register value here at map_event and
    484 *		compare contents at 'renable' callback to see if new problems
    485 *		have been added to status. If that is the case it may be
    486 *		desirable to return REGULATOR_ERROR_CLEARED and not
    487 *		REGULATOR_ERROR_ON to allow IRQ fire again and to generate
    488 *		notifications also for the new issues.
    489 *
    490 * This structure is passed to 'map_event' and 'renable' callbacks for
    491 * reporting regulator status to core.
    492 */
    493struct regulator_irq_data {
    494	struct regulator_err_state *states;
    495	int num_states;
    496	void *data;
    497	long opaque;
    498};
    499
    500/**
    501 * struct regulator_irq_desc - notification sender for IRQ based events.
    502 *
    503 * @name:	The visible name for the IRQ
    504 * @fatal_cnt:	If this IRQ is used to signal HW damaging condition it may be
    505 *		best to shut-down regulator(s) or reboot the SOC if error
    506 *		handling is repeatedly failing. If fatal_cnt is given the IRQ
    507 *		handling is aborted if it fails for fatal_cnt times and die()
    508 *		callback (if populated) is called. If die() is not populated
    509 *		poweroff for the system is attempted in order to prevent any
    510 *		further damage.
    511 * @reread_ms:	The time which is waited before attempting to re-read status
    512 *		at the worker if IC reading fails. Immediate re-read is done
    513 *		if time is not specified.
    514 * @irq_off_ms:	The time which IRQ is kept disabled before re-evaluating the
    515 *		status for devices which keep IRQ disabled for duration of the
    516 *		error. If this is not given the IRQ is left enabled and renable
    517 *		is not called.
    518 * @skip_off:	If set to true the IRQ handler will attempt to check if any of
    519 *		the associated regulators are enabled prior to taking other
    520 *		actions. If no regulators are enabled and this is set to true
    521 *		a spurious IRQ is assumed and IRQ_NONE is returned.
    522 * @high_prio:	Boolean to indicate that high priority WQ should be used.
    523 * @data:	Driver private data pointer which will be passed as such to
    524 *		the renable, map_event and die callbacks in regulator_irq_data.
    525 * @die:	Protection callback. If IC status reading or recovery actions
    526 *		fail fatal_cnt times this callback is called or system is
    527 *		powered off. This callback should implement a final protection
    528 *		attempt like disabling the regulator. If protection succeeded
    529 *		die() may return 0. If anything else is returned the core
    530 *		assumes final protection failed and attempts to perform a
    531 *		poweroff as a last resort.
    532 * @map_event:	Driver callback to map IRQ status into regulator devices with
    533 *		events / errors. NOTE: callback MUST initialize both the
    534 *		errors and notifs for all rdevs which it signals having
    535 *		active events as core does not clean the map data.
    536 *		REGULATOR_FAILED_RETRY can be returned to indicate that the
    537 *		status reading from IC failed. If this is repeated for
    538 *		fatal_cnt times the core will call die() callback or power-off
    539 *		the system as a last resort to protect the HW.
    540 * @renable:	Optional callback to check status (if HW supports that) before
    541 *		re-enabling IRQ. If implemented this should clear the error
    542 *		flags so that errors fetched by regulator_get_error_flags()
    543 *		are updated. If callback is not implemented then errors are
    544 *		assumed to be cleared and IRQ is re-enabled.
    545 *		REGULATOR_FAILED_RETRY can be returned to
    546 *		indicate that the status reading from IC failed. If this is
    547 *		repeated for 'fatal_cnt' times the core will call die()
    548 *		callback or if die() is not populated then attempt to power-off
    549 *		the system as a last resort to protect the HW.
    550 *		Returning zero indicates that the problem in HW has been solved
    551 *		and IRQ will be re-enabled. Returning REGULATOR_ERROR_ON
    552 *		indicates the error condition is still active and keeps IRQ
    553 *		disabled. Please note that returning REGULATOR_ERROR_ON does
    554 *		not retrigger evaluating what events are active or resending
    555 *		notifications. If this is needed you probably want to return
    556 *		zero and allow IRQ to retrigger causing events to be
    557 *		re-evaluated and re-sent.
    558 *
    559 * This structure is used for registering regulator IRQ notification helper.
    560 */
    561struct regulator_irq_desc {
    562	const char *name;
    563	int fatal_cnt;
    564	int reread_ms;
    565	int irq_off_ms;
    566	bool skip_off;
    567	bool high_prio;
    568	void *data;
    569
    570	int (*die)(struct regulator_irq_data *rid);
    571	int (*map_event)(int irq, struct regulator_irq_data *rid,
    572			  unsigned long *dev_mask);
    573	int (*renable)(struct regulator_irq_data *rid);
    574};
    575
    576/*
    577 * Return values for regulator IRQ helpers.
    578 */
    579enum {
    580	REGULATOR_ERROR_CLEARED,
    581	REGULATOR_FAILED_RETRY,
    582	REGULATOR_ERROR_ON,
    583};
    584
    585/*
    586 * struct coupling_desc
    587 *
    588 * Describes coupling of regulators. Each regulator should have
    589 * at least a pointer to itself in coupled_rdevs array.
    590 * When a new coupled regulator is resolved, n_resolved is
    591 * incremented.
    592 */
    593struct coupling_desc {
    594	struct regulator_dev **coupled_rdevs;
    595	struct regulator_coupler *coupler;
    596	int n_resolved;
    597	int n_coupled;
    598};
    599
    600/*
    601 * struct regulator_dev
    602 *
    603 * Voltage / Current regulator class device. One for each
    604 * regulator.
    605 *
    606 * This should *not* be used directly by anything except the regulator
    607 * core and notification injection (which should take the mutex and do
    608 * no other direct access).
    609 */
    610struct regulator_dev {
    611	const struct regulator_desc *desc;
    612	int exclusive;
    613	u32 use_count;
    614	u32 open_count;
    615	u32 bypass_count;
    616
    617	/* lists we belong to */
    618	struct list_head list; /* list of all regulators */
    619
    620	/* lists we own */
    621	struct list_head consumer_list; /* consumers we supply */
    622
    623	struct coupling_desc coupling_desc;
    624
    625	struct blocking_notifier_head notifier;
    626	struct ww_mutex mutex; /* consumer lock */
    627	struct task_struct *mutex_owner;
    628	int ref_cnt;
    629	struct module *owner;
    630	struct device dev;
    631	struct regulation_constraints *constraints;
    632	struct regulator *supply;	/* for tree */
    633	const char *supply_name;
    634	struct regmap *regmap;
    635
    636	struct delayed_work disable_work;
    637
    638	void *reg_data;		/* regulator_dev data */
    639
    640	struct dentry *debugfs;
    641
    642	struct regulator_enable_gpio *ena_pin;
    643	unsigned int ena_gpio_state:1;
    644
    645	unsigned int is_switch:1;
    646
    647	/* time when this regulator was disabled last time */
    648	ktime_t last_off;
    649	int cached_err;
    650	bool use_cached_err;
    651	spinlock_t err_lock;
    652};
    653
    654/*
    655 * Convert error flags to corresponding notifications.
    656 *
    657 * Can be used by drivers which use the notification helpers to
    658 * find out correct notification flags based on the error flags. Drivers
    659 * can avoid storing both supported notification and error flags which
    660 * may save few bytes.
    661 */
    662static inline int regulator_err2notif(int err)
    663{
    664	switch (err) {
    665	case REGULATOR_ERROR_UNDER_VOLTAGE:
    666		return REGULATOR_EVENT_UNDER_VOLTAGE;
    667	case REGULATOR_ERROR_OVER_CURRENT:
    668		return REGULATOR_EVENT_OVER_CURRENT;
    669	case REGULATOR_ERROR_REGULATION_OUT:
    670		return REGULATOR_EVENT_REGULATION_OUT;
    671	case REGULATOR_ERROR_FAIL:
    672		return REGULATOR_EVENT_FAIL;
    673	case REGULATOR_ERROR_OVER_TEMP:
    674		return REGULATOR_EVENT_OVER_TEMP;
    675	case REGULATOR_ERROR_UNDER_VOLTAGE_WARN:
    676		return REGULATOR_EVENT_UNDER_VOLTAGE_WARN;
    677	case REGULATOR_ERROR_OVER_CURRENT_WARN:
    678		return REGULATOR_EVENT_OVER_CURRENT_WARN;
    679	case REGULATOR_ERROR_OVER_VOLTAGE_WARN:
    680		return REGULATOR_EVENT_OVER_VOLTAGE_WARN;
    681	case REGULATOR_ERROR_OVER_TEMP_WARN:
    682		return REGULATOR_EVENT_OVER_TEMP_WARN;
    683	}
    684	return 0;
    685}
    686
    687
    688struct regulator_dev *
    689regulator_register(const struct regulator_desc *regulator_desc,
    690		   const struct regulator_config *config);
    691struct regulator_dev *
    692devm_regulator_register(struct device *dev,
    693			const struct regulator_desc *regulator_desc,
    694			const struct regulator_config *config);
    695void regulator_unregister(struct regulator_dev *rdev);
    696
    697int regulator_notifier_call_chain(struct regulator_dev *rdev,
    698				  unsigned long event, void *data);
    699void *devm_regulator_irq_helper(struct device *dev,
    700				const struct regulator_irq_desc *d, int irq,
    701				int irq_flags, int common_errs,
    702				int *per_rdev_errs, struct regulator_dev **rdev,
    703				int rdev_amount);
    704void *regulator_irq_helper(struct device *dev,
    705			   const struct regulator_irq_desc *d, int irq,
    706			   int irq_flags, int common_errs, int *per_rdev_errs,
    707			   struct regulator_dev **rdev, int rdev_amount);
    708void regulator_irq_helper_cancel(void **handle);
    709int regulator_irq_map_event_simple(int irq, struct regulator_irq_data *rid,
    710				   unsigned long *dev_mask);
    711
    712void *rdev_get_drvdata(struct regulator_dev *rdev);
    713struct device *rdev_get_dev(struct regulator_dev *rdev);
    714struct regmap *rdev_get_regmap(struct regulator_dev *rdev);
    715int rdev_get_id(struct regulator_dev *rdev);
    716
    717int regulator_mode_to_status(unsigned int);
    718
    719int regulator_list_voltage_linear(struct regulator_dev *rdev,
    720				  unsigned int selector);
    721int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev,
    722						   unsigned int selector);
    723int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
    724					unsigned int selector);
    725int regulator_list_voltage_table(struct regulator_dev *rdev,
    726				  unsigned int selector);
    727int regulator_map_voltage_linear(struct regulator_dev *rdev,
    728				  int min_uV, int max_uV);
    729int regulator_map_voltage_pickable_linear_range(struct regulator_dev *rdev,
    730						  int min_uV, int max_uV);
    731int regulator_map_voltage_linear_range(struct regulator_dev *rdev,
    732				       int min_uV, int max_uV);
    733int regulator_map_voltage_iterate(struct regulator_dev *rdev,
    734				  int min_uV, int max_uV);
    735int regulator_map_voltage_ascend(struct regulator_dev *rdev,
    736				  int min_uV, int max_uV);
    737int regulator_get_voltage_sel_pickable_regmap(struct regulator_dev *rdev);
    738int regulator_set_voltage_sel_pickable_regmap(struct regulator_dev *rdev,
    739						unsigned int sel);
    740int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev);
    741int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel);
    742int regulator_is_enabled_regmap(struct regulator_dev *rdev);
    743int regulator_enable_regmap(struct regulator_dev *rdev);
    744int regulator_disable_regmap(struct regulator_dev *rdev);
    745int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
    746				   unsigned int old_selector,
    747				   unsigned int new_selector);
    748int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable);
    749int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable);
    750int regulator_set_soft_start_regmap(struct regulator_dev *rdev);
    751int regulator_set_pull_down_regmap(struct regulator_dev *rdev);
    752
    753int regulator_set_active_discharge_regmap(struct regulator_dev *rdev,
    754					  bool enable);
    755int regulator_set_current_limit_regmap(struct regulator_dev *rdev,
    756				       int min_uA, int max_uA);
    757int regulator_get_current_limit_regmap(struct regulator_dev *rdev);
    758void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
    759int regulator_set_ramp_delay_regmap(struct regulator_dev *rdev, int ramp_delay);
    760int regulator_sync_voltage_rdev(struct regulator_dev *rdev);
    761
    762/*
    763 * Helper functions intended to be used by regulator drivers prior registering
    764 * their regulators.
    765 */
    766int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
    767					     unsigned int selector);
    768
    769int regulator_desc_list_voltage_linear(const struct regulator_desc *desc,
    770				       unsigned int selector);
    771
    772#ifdef CONFIG_REGULATOR
    773const char *rdev_get_name(struct regulator_dev *rdev);
    774#else
    775static inline const char *rdev_get_name(struct regulator_dev *rdev)
    776{
    777	return NULL;
    778}
    779#endif
    780
    781#endif