~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/regulator/driver.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 21 struct gpio_desc;
 22 struct regmap;
 23 struct regulator_dev;
 24 struct regulator_config;
 25 struct regulator_init_data;
 26 struct regulator_enable_gpio;
 27 
 28 enum 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 
 43 enum 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         LINEAR_RANGE(_min_uV, _min_sel, _max_sel, _step_uV)
 55 
 56 /**
 57  * struct regulator_ops - regulator operations.
 58  *
 59  * @enable: Configure the regulator as enabled.
 60  * @disable: Configure the regulator as disabled.
 61  * @is_enabled: Return 1 if the regulator is enabled, 0 if not.
 62  *              May also return negative errno.
 63  *
 64  * @set_voltage: Set the voltage for the regulator within the range specified.
 65  *               The driver should select the voltage closest to min_uV.
 66  * @set_voltage_sel: Set the voltage for the regulator using the specified
 67  *                   selector.
 68  * @map_voltage: Convert a voltage into a selector
 69  * @get_voltage: Return the currently configured voltage for the regulator;
 70  *                   return -ENOTRECOVERABLE if regulator can't be read at
 71  *                   bootup and hasn't been set yet.
 72  * @get_voltage_sel: Return the currently configured voltage selector for the
 73  *                   regulator; return -ENOTRECOVERABLE if regulator can't
 74  *                   be read at bootup and hasn't been set yet.
 75  * @list_voltage: Return one of the supported voltages, in microvolts; zero
 76  *      if the selector indicates a voltage that is unusable on this system;
 77  *      or negative errno.  Selectors range from zero to one less than
 78  *      regulator_desc.n_voltages.  Voltages may be reported in any order.
 79  *
 80  * @set_current_limit: Configure a limit for a current-limited regulator.
 81  *                     The driver should select the current closest to max_uA.
 82  * @get_current_limit: Get the configured limit for a current-limited regulator.
 83  * @set_input_current_limit: Configure an input limit.
 84  *
 85  * @set_over_current_protection: Support enabling of and setting limits for over
 86  *      current situation detection. Detection can be configured for three
 87  *      levels of severity.
 88  *
 89  *      - REGULATOR_SEVERITY_PROT should automatically shut down the regulator(s).
 90  *
 91  *      - REGULATOR_SEVERITY_ERR should indicate that over-current situation is
 92  *                caused by an unrecoverable error but HW does not perform
 93  *                automatic shut down.
 94  *
 95  *      - REGULATOR_SEVERITY_WARN should indicate situation where hardware is
 96  *                still believed to not be damaged but that a board sepcific
 97  *                recovery action is needed. If lim_uA is 0 the limit should not
 98  *                be changed but the detection should just be enabled/disabled as
 99  *                is requested.
100  *
101  * @set_over_voltage_protection: Support enabling of and setting limits for over
102  *      voltage situation detection. Detection can be configured for same
103  *      severities as over current protection. Units of uV.
104  * @set_under_voltage_protection: Support enabling of and setting limits for
105  *      under voltage situation detection. Detection can be configured for same
106  *      severities as over current protection. Units of uV.
107  * @set_thermal_protection: Support enabling of and setting limits for over
108  *      temperature situation detection.Detection can be configured for same
109  *      severities as over current protection. Units of degree Kelvin.
110  *
111  * @set_active_discharge: Set active discharge enable/disable of regulators.
112  *
113  * @set_mode: Set the configured operating mode for the regulator.
114  * @get_mode: Get the configured operating mode for the regulator.
115  * @get_error_flags: Get the current error(s) for the regulator.
116  * @get_status: Return actual (not as-configured) status of regulator, as a
117  *      REGULATOR_STATUS value (or negative errno)
118  * @get_optimum_mode: Get the most efficient operating mode for the regulator
119  *                    when running with the specified parameters.
120  * @set_load: Set the load for the regulator.
121  *
122  * @set_bypass: Set the regulator in bypass mode.
123  * @get_bypass: Get the regulator bypass mode state.
124  *
125  * @enable_time: Time taken for the regulator voltage output voltage to
126  *               stabilise after being enabled, in microseconds.
127  * @set_ramp_delay: Set the ramp delay for the regulator. The driver should
128  *              select ramp delay equal to or less than(closest) ramp_delay.
129  * @set_voltage_time: Time taken for the regulator voltage output voltage
130  *               to stabilise after being set to a new value, in microseconds.
131  *               The function receives the from and to voltage as input, it
132  *               should return the worst case.
133  * @set_voltage_time_sel: Time taken for the regulator voltage output voltage
134  *               to stabilise after being set to a new value, in microseconds.
135  *               The function receives the from and to voltage selector as
136  *               input, it should return the worst case.
137  * @set_soft_start: Enable soft start for the regulator.
138  *
139  * @set_suspend_voltage: Set the voltage for the regulator when the system
140  *                       is suspended.
141  * @set_suspend_enable: Mark the regulator as enabled when the system is
142  *                      suspended.
143  * @set_suspend_disable: Mark the regulator as disabled when the system is
144  *                       suspended.
145  * @set_suspend_mode: Set the operating mode for the regulator when the
146  *                    system is suspended.
147  * @resume: Resume operation of suspended regulator.
148  * @set_pull_down: Configure the regulator to pull down when the regulator
149  *                 is disabled.
150  *
151  * This struct describes regulator operations which can be implemented by
152  * regulator chip drivers.
153  */
154 struct regulator_ops {
155 
156         /* enumerate supported voltages */
157         int (*list_voltage) (struct regulator_dev *, unsigned selector);
158 
159         /* get/set regulator voltage */
160         int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV,
161                             unsigned *selector);
162         int (*map_voltage)(struct regulator_dev *, int min_uV, int max_uV);
163         int (*set_voltage_sel) (struct regulator_dev *, unsigned selector);
164         int (*get_voltage) (struct regulator_dev *);
165         int (*get_voltage_sel) (struct regulator_dev *);
166 
167         /* get/set regulator current  */
168         int (*set_current_limit) (struct regulator_dev *,
169                                  int min_uA, int max_uA);
170         int (*get_current_limit) (struct regulator_dev *);
171 
172         int (*set_input_current_limit) (struct regulator_dev *, int lim_uA);
173         int (*set_over_current_protection)(struct regulator_dev *, int lim_uA,
174                                            int severity, bool enable);
175         int (*set_over_voltage_protection)(struct regulator_dev *, int lim_uV,
176                                            int severity, bool enable);
177         int (*set_under_voltage_protection)(struct regulator_dev *, int lim_uV,
178                                             int severity, bool enable);
179         int (*set_thermal_protection)(struct regulator_dev *, int lim,
180                                       int severity, bool enable);
181         int (*set_active_discharge)(struct regulator_dev *, bool enable);
182 
183         /* enable/disable regulator */
184         int (*enable) (struct regulator_dev *);
185         int (*disable) (struct regulator_dev *);
186         int (*is_enabled) (struct regulator_dev *);
187 
188         /* get/set regulator operating mode (defined in consumer.h) */
189         int (*set_mode) (struct regulator_dev *, unsigned int mode);
190         unsigned int (*get_mode) (struct regulator_dev *);
191 
192         /* retrieve current error flags on the regulator */
193         int (*get_error_flags)(struct regulator_dev *, unsigned int *flags);
194 
195         /* Time taken to enable or set voltage on the regulator */
196         int (*enable_time) (struct regulator_dev *);
197         int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
198         int (*set_voltage_time) (struct regulator_dev *, int old_uV,
199                                  int new_uV);
200         int (*set_voltage_time_sel) (struct regulator_dev *,
201                                      unsigned int old_selector,
202                                      unsigned int new_selector);
203 
204         int (*set_soft_start) (struct regulator_dev *);
205 
206         /* report regulator status ... most other accessors report
207          * control inputs, this reports results of combining inputs
208          * from Linux (and other sources) with the actual load.
209          * returns REGULATOR_STATUS_* or negative errno.
210          */
211         int (*get_status)(struct regulator_dev *);
212 
213         /* get most efficient regulator operating mode for load */
214         unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
215                                           int output_uV, int load_uA);
216         /* set the load on the regulator */
217         int (*set_load)(struct regulator_dev *, int load_uA);
218 
219         /* control and report on bypass mode */
220         int (*set_bypass)(struct regulator_dev *dev, bool enable);
221         int (*get_bypass)(struct regulator_dev *dev, bool *enable);
222 
223         /* the operations below are for configuration of regulator state when
224          * its parent PMIC enters a global STANDBY/HIBERNATE state */
225 
226         /* set regulator suspend voltage */
227         int (*set_suspend_voltage) (struct regulator_dev *, int uV);
228 
229         /* enable/disable regulator in suspend state */
230         int (*set_suspend_enable) (struct regulator_dev *);
231         int (*set_suspend_disable) (struct regulator_dev *);
232 
233         /* set regulator suspend operating mode (defined in consumer.h) */
234         int (*set_suspend_mode) (struct regulator_dev *, unsigned int mode);
235 
236         int (*resume)(struct regulator_dev *rdev);
237 
238         int (*set_pull_down) (struct regulator_dev *);
239 };
240 
241 /*
242  * Regulators can either control voltage or current.
243  */
244 enum regulator_type {
245         REGULATOR_VOLTAGE,
246         REGULATOR_CURRENT,
247 };
248 
249 /**
250  * struct regulator_desc - Static regulator descriptor
251  *
252  * Each regulator registered with the core is described with a
253  * structure of this type and a struct regulator_config.  This
254  * structure contains the non-varying parts of the regulator
255  * description.
256  *
257  * @name: Identifying name for the regulator.
258  * @supply_name: Identifying the regulator supply
259  * @of_match: Name used to identify regulator in DT.
260  * @of_match_full_name: A flag to indicate that the of_match string, if
261  *                      present, should be matched against the node full_name.
262  * @regulators_node: Name of node containing regulator definitions in DT.
263  * @of_parse_cb: Optional callback called only if of_match is present.
264  *               Will be called for each regulator parsed from DT, during
265  *               init_data parsing.
266  *               The regulator_config passed as argument to the callback will
267  *               be a copy of config passed to regulator_register, valid only
268  *               for this particular call. Callback may freely change the
269  *               config but it cannot store it for later usage.
270  *               Callback should return 0 on success or negative ERRNO
271  *               indicating failure.
272  * @id: Numerical identifier for the regulator.
273  * @ops: Regulator operations table.
274  * @irq: Interrupt number for the regulator.
275  * @type: Indicates if the regulator is a voltage or current regulator.
276  * @owner: Module providing the regulator, used for refcounting.
277  *
278  * @continuous_voltage_range: Indicates if the regulator can set any
279  *                            voltage within constrains range.
280  * @n_voltages: Number of selectors available for ops.list_voltage().
281  * @n_current_limits: Number of selectors available for current limits
282  *
283  * @min_uV: Voltage given by the lowest selector (if linear mapping)
284  * @uV_step: Voltage increase with each selector (if linear mapping)
285  * @linear_min_sel: Minimal selector for starting linear mapping
286  * @fixed_uV: Fixed voltage of rails.
287  * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
288  * @min_dropout_uV: The minimum dropout voltage this regulator can handle
289  * @linear_ranges: A constant table of possible voltage ranges.
290  * @linear_range_selectors_bitfield: A constant table of voltage range
291  *                                   selectors as bitfield values. If
292  *                                   pickable ranges are used each range
293  *                                   must have corresponding selector here.
294  * @n_linear_ranges: Number of entries in the @linear_ranges (and in
295  *                   linear_range_selectors_bitfield if used) table(s).
296  * @volt_table: Voltage mapping table (if table based mapping)
297  * @curr_table: Current limit mapping table (if table based mapping)
298  *
299  * @vsel_range_reg: Register for range selector when using pickable ranges
300  *                  and ``regulator_map_*_voltage_*_pickable`` functions.
301  * @vsel_range_mask: Mask for register bitfield used for range selector
302  * @range_applied_by_vsel: A flag to indicate that changes to vsel_range_reg
303  *                         are only effective after vsel_reg is written
304  * @vsel_reg: Register for selector when using ``regulator_map_*_voltage_*``
305  * @vsel_mask: Mask for register bitfield used for selector
306  * @vsel_step: Specify the resolution of selector stepping when setting
307  *             voltage. If 0, then no stepping is done (requested selector is
308  *             set directly), if >0 then the regulator API will ramp the
309  *             voltage up/down gradually each time increasing/decreasing the
310  *             selector by the specified step value.
311  * @csel_reg: Register for current limit selector using regmap set_current_limit
312  * @csel_mask: Mask for register bitfield used for current limit selector
313  * @apply_reg: Register for initiate voltage change on the output when
314  *                using regulator_set_voltage_sel_regmap
315  * @apply_bit: Register bitfield used for initiate voltage change on the
316  *                output when using regulator_set_voltage_sel_regmap
317  * @enable_reg: Register for control when using regmap enable/disable ops
318  * @enable_mask: Mask for control when using regmap enable/disable ops
319  * @enable_val: Enabling value for control when using regmap enable/disable ops
320  * @disable_val: Disabling value for control when using regmap enable/disable ops
321  * @enable_is_inverted: A flag to indicate set enable_mask bits to disable
322  *                      when using regulator_enable_regmap and friends APIs.
323  * @bypass_reg: Register for control when using regmap set_bypass
324  * @bypass_mask: Mask for control when using regmap set_bypass
325  * @bypass_val_on: Enabling value for control when using regmap set_bypass
326  * @bypass_val_off: Disabling value for control when using regmap set_bypass
327  * @active_discharge_off: Enabling value for control when using regmap
328  *                        set_active_discharge
329  * @active_discharge_on: Disabling value for control when using regmap
330  *                       set_active_discharge
331  * @active_discharge_mask: Mask for control when using regmap
332  *                         set_active_discharge
333  * @active_discharge_reg: Register for control when using regmap
334  *                        set_active_discharge
335  * @soft_start_reg: Register for control when using regmap set_soft_start
336  * @soft_start_mask: Mask for control when using regmap set_soft_start
337  * @soft_start_val_on: Enabling value for control when using regmap
338  *                     set_soft_start
339  * @pull_down_reg: Register for control when using regmap set_pull_down
340  * @pull_down_mask: Mask for control when using regmap set_pull_down
341  * @pull_down_val_on: Enabling value for control when using regmap
342  *                     set_pull_down
343  *
344  * @ramp_reg:           Register for controlling the regulator ramp-rate.
345  * @ramp_mask:          Bitmask for the ramp-rate control register.
346  * @ramp_delay_table:   Table for mapping the regulator ramp-rate values. Values
347  *                      should be given in units of V/S (uV/uS). See the
348  *                      regulator_set_ramp_delay_regmap().
349  * @n_ramp_values:      number of elements at @ramp_delay_table.
350  *
351  * @enable_time: Time taken for initial enable of regulator (in uS).
352  * @off_on_delay: guard time (in uS), before re-enabling a regulator
353  *
354  * @poll_enabled_time: The polling interval (in uS) to use while checking that
355  *                     the regulator was actually enabled. Max upto enable_time.
356  *
357  * @of_map_mode: Maps a hardware mode defined in a DeviceTree to a standard mode
358  */
359 struct regulator_desc {
360         const char *name;
361         const char *supply_name;
362         const char *of_match;
363         bool of_match_full_name;
364         const char *regulators_node;
365         int (*of_parse_cb)(struct device_node *,
366                             const struct regulator_desc *,
367                             struct regulator_config *);
368         int id;
369         unsigned int continuous_voltage_range:1;
370         unsigned n_voltages;
371         unsigned int n_current_limits;
372         const struct regulator_ops *ops;
373         int irq;
374         enum regulator_type type;
375         struct module *owner;
376 
377         unsigned int min_uV;
378         unsigned int uV_step;
379         unsigned int linear_min_sel;
380         int fixed_uV;
381         unsigned int ramp_delay;
382         int min_dropout_uV;
383 
384         const struct linear_range *linear_ranges;
385         const unsigned int *linear_range_selectors_bitfield;
386 
387         int n_linear_ranges;
388 
389         const unsigned int *volt_table;
390         const unsigned int *curr_table;
391 
392         unsigned int vsel_range_reg;
393         unsigned int vsel_range_mask;
394         bool range_applied_by_vsel;
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  */
451 struct 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  */
469 struct 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  */
493 struct 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  */
561 struct 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  */
579 enum {
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  */
593 struct 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  */
610 struct 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  */
662 static 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 
688 struct regulator_dev *
689 regulator_register(struct device *dev,
690                    const struct regulator_desc *regulator_desc,
691                    const struct regulator_config *config);
692 struct regulator_dev *
693 devm_regulator_register(struct device *dev,
694                         const struct regulator_desc *regulator_desc,
695                         const struct regulator_config *config);
696 void regulator_unregister(struct regulator_dev *rdev);
697 
698 int regulator_notifier_call_chain(struct regulator_dev *rdev,
699                                   unsigned long event, void *data);
700 void *devm_regulator_irq_helper(struct device *dev,
701                                 const struct regulator_irq_desc *d, int irq,
702                                 int irq_flags, int common_errs,
703                                 int *per_rdev_errs, struct regulator_dev **rdev,
704                                 int rdev_amount);
705 void *regulator_irq_helper(struct device *dev,
706                            const struct regulator_irq_desc *d, int irq,
707                            int irq_flags, int common_errs, int *per_rdev_errs,
708                            struct regulator_dev **rdev, int rdev_amount);
709 void regulator_irq_helper_cancel(void **handle);
710 int regulator_irq_map_event_simple(int irq, struct regulator_irq_data *rid,
711                                    unsigned long *dev_mask);
712 
713 void *rdev_get_drvdata(struct regulator_dev *rdev);
714 struct device *rdev_get_dev(struct regulator_dev *rdev);
715 struct regmap *rdev_get_regmap(struct regulator_dev *rdev);
716 int rdev_get_id(struct regulator_dev *rdev);
717 
718 int regulator_mode_to_status(unsigned int);
719 
720 int regulator_list_voltage_linear(struct regulator_dev *rdev,
721                                   unsigned int selector);
722 int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev,
723                                                    unsigned int selector);
724 int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
725                                         unsigned int selector);
726 int regulator_list_voltage_table(struct regulator_dev *rdev,
727                                   unsigned int selector);
728 int regulator_map_voltage_linear(struct regulator_dev *rdev,
729                                   int min_uV, int max_uV);
730 int regulator_map_voltage_pickable_linear_range(struct regulator_dev *rdev,
731                                                   int min_uV, int max_uV);
732 int regulator_map_voltage_linear_range(struct regulator_dev *rdev,
733                                        int min_uV, int max_uV);
734 int regulator_map_voltage_iterate(struct regulator_dev *rdev,
735                                   int min_uV, int max_uV);
736 int regulator_map_voltage_ascend(struct regulator_dev *rdev,
737                                   int min_uV, int max_uV);
738 int regulator_get_voltage_sel_pickable_regmap(struct regulator_dev *rdev);
739 int regulator_set_voltage_sel_pickable_regmap(struct regulator_dev *rdev,
740                                                 unsigned int sel);
741 int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev);
742 int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel);
743 int regulator_is_enabled_regmap(struct regulator_dev *rdev);
744 int regulator_enable_regmap(struct regulator_dev *rdev);
745 int regulator_disable_regmap(struct regulator_dev *rdev);
746 int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
747                                    unsigned int old_selector,
748                                    unsigned int new_selector);
749 int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable);
750 int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable);
751 int regulator_set_soft_start_regmap(struct regulator_dev *rdev);
752 int regulator_set_pull_down_regmap(struct regulator_dev *rdev);
753 
754 int regulator_set_active_discharge_regmap(struct regulator_dev *rdev,
755                                           bool enable);
756 int regulator_set_current_limit_regmap(struct regulator_dev *rdev,
757                                        int min_uA, int max_uA);
758 int regulator_get_current_limit_regmap(struct regulator_dev *rdev);
759 void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
760 int regulator_find_closest_bigger(unsigned int target, const unsigned int *table,
761                                   unsigned int num_sel, unsigned int *sel);
762 int regulator_set_ramp_delay_regmap(struct regulator_dev *rdev, int ramp_delay);
763 int regulator_sync_voltage_rdev(struct regulator_dev *rdev);
764 
765 /*
766  * Helper functions intended to be used by regulator drivers prior registering
767  * their regulators.
768  */
769 int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
770                                              unsigned int selector);
771 
772 int regulator_desc_list_voltage_linear(const struct regulator_desc *desc,
773                                        unsigned int selector);
774 
775 #ifdef CONFIG_REGULATOR
776 const char *rdev_get_name(struct regulator_dev *rdev);
777 #else
778 static inline const char *rdev_get_name(struct regulator_dev *rdev)
779 {
780         return NULL;
781 }
782 #endif
783 
784 #endif
785 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php