1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * consumer.h -- SoC Regulator consumer support.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Author: Liam Girdwood <lrg@slimlogic.co.uk>
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun * Regulator Consumer Interface.
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun * A Power Management Regulator framework for SoC based devices.
12*4882a593Smuzhiyun * Features:-
13*4882a593Smuzhiyun * o Voltage and current level control.
14*4882a593Smuzhiyun * o Operating mode control.
15*4882a593Smuzhiyun * o Regulator status.
16*4882a593Smuzhiyun * o sysfs entries for showing client devices and status
17*4882a593Smuzhiyun *
18*4882a593Smuzhiyun * EXPERIMENTAL FEATURES:
19*4882a593Smuzhiyun * Dynamic Regulator operating Mode Switching (DRMS) - allows regulators
20*4882a593Smuzhiyun * to use most efficient operating mode depending upon voltage and load and
21*4882a593Smuzhiyun * is transparent to client drivers.
22*4882a593Smuzhiyun *
23*4882a593Smuzhiyun * e.g. Devices x,y,z share regulator r. Device x and y draw 20mA each during
24*4882a593Smuzhiyun * IO and 1mA at idle. Device z draws 100mA when under load and 5mA when
25*4882a593Smuzhiyun * idling. Regulator r has > 90% efficiency in NORMAL mode at loads > 100mA
26*4882a593Smuzhiyun * but this drops rapidly to 60% when below 100mA. Regulator r has > 90%
27*4882a593Smuzhiyun * efficiency in IDLE mode at loads < 10mA. Thus regulator r will operate
28*4882a593Smuzhiyun * in normal mode for loads > 10mA and in IDLE mode for load <= 10mA.
29*4882a593Smuzhiyun */
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun #ifndef __LINUX_REGULATOR_CONSUMER_H_
32*4882a593Smuzhiyun #define __LINUX_REGULATOR_CONSUMER_H_
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun #include <linux/err.h>
35*4882a593Smuzhiyun #include <linux/suspend.h>
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun struct device;
38*4882a593Smuzhiyun struct notifier_block;
39*4882a593Smuzhiyun struct regmap;
40*4882a593Smuzhiyun struct regulator_dev;
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun /*
43*4882a593Smuzhiyun * Regulator operating modes.
44*4882a593Smuzhiyun *
45*4882a593Smuzhiyun * Regulators can run in a variety of different operating modes depending on
46*4882a593Smuzhiyun * output load. This allows further system power savings by selecting the
47*4882a593Smuzhiyun * best (and most efficient) regulator mode for a desired load.
48*4882a593Smuzhiyun *
49*4882a593Smuzhiyun * Most drivers will only care about NORMAL. The modes below are generic and
50*4882a593Smuzhiyun * will probably not match the naming convention of your regulator data sheet
51*4882a593Smuzhiyun * but should match the use cases in the datasheet.
52*4882a593Smuzhiyun *
53*4882a593Smuzhiyun * In order of power efficiency (least efficient at top).
54*4882a593Smuzhiyun *
55*4882a593Smuzhiyun * Mode Description
56*4882a593Smuzhiyun * FAST Regulator can handle fast changes in it's load.
57*4882a593Smuzhiyun * e.g. useful in CPU voltage & frequency scaling where
58*4882a593Smuzhiyun * load can quickly increase with CPU frequency increases.
59*4882a593Smuzhiyun *
60*4882a593Smuzhiyun * NORMAL Normal regulator power supply mode. Most drivers will
61*4882a593Smuzhiyun * use this mode.
62*4882a593Smuzhiyun *
63*4882a593Smuzhiyun * IDLE Regulator runs in a more efficient mode for light
64*4882a593Smuzhiyun * loads. Can be used for devices that have a low power
65*4882a593Smuzhiyun * requirement during periods of inactivity. This mode
66*4882a593Smuzhiyun * may be more noisy than NORMAL and may not be able
67*4882a593Smuzhiyun * to handle fast load switching.
68*4882a593Smuzhiyun *
69*4882a593Smuzhiyun * STANDBY Regulator runs in the most efficient mode for very
70*4882a593Smuzhiyun * light loads. Can be used by devices when they are
71*4882a593Smuzhiyun * in a sleep/standby state. This mode is likely to be
72*4882a593Smuzhiyun * the most noisy and may not be able to handle fast load
73*4882a593Smuzhiyun * switching.
74*4882a593Smuzhiyun *
75*4882a593Smuzhiyun * NOTE: Most regulators will only support a subset of these modes. Some
76*4882a593Smuzhiyun * will only just support NORMAL.
77*4882a593Smuzhiyun *
78*4882a593Smuzhiyun * These modes can be OR'ed together to make up a mask of valid register modes.
79*4882a593Smuzhiyun */
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun #define REGULATOR_MODE_INVALID 0x0
82*4882a593Smuzhiyun #define REGULATOR_MODE_FAST 0x1
83*4882a593Smuzhiyun #define REGULATOR_MODE_NORMAL 0x2
84*4882a593Smuzhiyun #define REGULATOR_MODE_IDLE 0x4
85*4882a593Smuzhiyun #define REGULATOR_MODE_STANDBY 0x8
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun /*
88*4882a593Smuzhiyun * Regulator notifier events.
89*4882a593Smuzhiyun *
90*4882a593Smuzhiyun * UNDER_VOLTAGE Regulator output is under voltage.
91*4882a593Smuzhiyun * OVER_CURRENT Regulator output current is too high.
92*4882a593Smuzhiyun * REGULATION_OUT Regulator output is out of regulation.
93*4882a593Smuzhiyun * FAIL Regulator output has failed.
94*4882a593Smuzhiyun * OVER_TEMP Regulator over temp.
95*4882a593Smuzhiyun * FORCE_DISABLE Regulator forcibly shut down by software.
96*4882a593Smuzhiyun * VOLTAGE_CHANGE Regulator voltage changed.
97*4882a593Smuzhiyun * Data passed is old voltage cast to (void *).
98*4882a593Smuzhiyun * DISABLE Regulator was disabled.
99*4882a593Smuzhiyun * PRE_VOLTAGE_CHANGE Regulator is about to have voltage changed.
100*4882a593Smuzhiyun * Data passed is "struct pre_voltage_change_data"
101*4882a593Smuzhiyun * ABORT_VOLTAGE_CHANGE Regulator voltage change failed for some reason.
102*4882a593Smuzhiyun * Data passed is old voltage cast to (void *).
103*4882a593Smuzhiyun * PRE_DISABLE Regulator is about to be disabled
104*4882a593Smuzhiyun * ABORT_DISABLE Regulator disable failed for some reason
105*4882a593Smuzhiyun *
106*4882a593Smuzhiyun * NOTE: These events can be OR'ed together when passed into handler.
107*4882a593Smuzhiyun */
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun #define REGULATOR_EVENT_UNDER_VOLTAGE 0x01
110*4882a593Smuzhiyun #define REGULATOR_EVENT_OVER_CURRENT 0x02
111*4882a593Smuzhiyun #define REGULATOR_EVENT_REGULATION_OUT 0x04
112*4882a593Smuzhiyun #define REGULATOR_EVENT_FAIL 0x08
113*4882a593Smuzhiyun #define REGULATOR_EVENT_OVER_TEMP 0x10
114*4882a593Smuzhiyun #define REGULATOR_EVENT_FORCE_DISABLE 0x20
115*4882a593Smuzhiyun #define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40
116*4882a593Smuzhiyun #define REGULATOR_EVENT_DISABLE 0x80
117*4882a593Smuzhiyun #define REGULATOR_EVENT_PRE_VOLTAGE_CHANGE 0x100
118*4882a593Smuzhiyun #define REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE 0x200
119*4882a593Smuzhiyun #define REGULATOR_EVENT_PRE_DISABLE 0x400
120*4882a593Smuzhiyun #define REGULATOR_EVENT_ABORT_DISABLE 0x800
121*4882a593Smuzhiyun #define REGULATOR_EVENT_ENABLE 0x1000
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun /*
124*4882a593Smuzhiyun * Regulator errors that can be queried using regulator_get_error_flags
125*4882a593Smuzhiyun *
126*4882a593Smuzhiyun * UNDER_VOLTAGE Regulator output is under voltage.
127*4882a593Smuzhiyun * OVER_CURRENT Regulator output current is too high.
128*4882a593Smuzhiyun * REGULATION_OUT Regulator output is out of regulation.
129*4882a593Smuzhiyun * FAIL Regulator output has failed.
130*4882a593Smuzhiyun * OVER_TEMP Regulator over temp.
131*4882a593Smuzhiyun *
132*4882a593Smuzhiyun * NOTE: These errors can be OR'ed together.
133*4882a593Smuzhiyun */
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun #define REGULATOR_ERROR_UNDER_VOLTAGE BIT(1)
136*4882a593Smuzhiyun #define REGULATOR_ERROR_OVER_CURRENT BIT(2)
137*4882a593Smuzhiyun #define REGULATOR_ERROR_REGULATION_OUT BIT(3)
138*4882a593Smuzhiyun #define REGULATOR_ERROR_FAIL BIT(4)
139*4882a593Smuzhiyun #define REGULATOR_ERROR_OVER_TEMP BIT(5)
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun /**
143*4882a593Smuzhiyun * struct pre_voltage_change_data - Data sent with PRE_VOLTAGE_CHANGE event
144*4882a593Smuzhiyun *
145*4882a593Smuzhiyun * @old_uV: Current voltage before change.
146*4882a593Smuzhiyun * @min_uV: Min voltage we'll change to.
147*4882a593Smuzhiyun * @max_uV: Max voltage we'll change to.
148*4882a593Smuzhiyun */
149*4882a593Smuzhiyun struct pre_voltage_change_data {
150*4882a593Smuzhiyun unsigned long old_uV;
151*4882a593Smuzhiyun unsigned long min_uV;
152*4882a593Smuzhiyun unsigned long max_uV;
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun struct regulator;
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun /**
158*4882a593Smuzhiyun * struct regulator_bulk_data - Data used for bulk regulator operations.
159*4882a593Smuzhiyun *
160*4882a593Smuzhiyun * @supply: The name of the supply. Initialised by the user before
161*4882a593Smuzhiyun * using the bulk regulator APIs.
162*4882a593Smuzhiyun * @consumer: The regulator consumer for the supply. This will be managed
163*4882a593Smuzhiyun * by the bulk API.
164*4882a593Smuzhiyun *
165*4882a593Smuzhiyun * The regulator APIs provide a series of regulator_bulk_() API calls as
166*4882a593Smuzhiyun * a convenience to consumers which require multiple supplies. This
167*4882a593Smuzhiyun * structure is used to manage data for these calls.
168*4882a593Smuzhiyun */
169*4882a593Smuzhiyun struct regulator_bulk_data {
170*4882a593Smuzhiyun const char *supply;
171*4882a593Smuzhiyun struct regulator *consumer;
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun /* private: Internal use */
174*4882a593Smuzhiyun int ret;
175*4882a593Smuzhiyun };
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun #if defined(CONFIG_REGULATOR)
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun /* regulator get and put */
180*4882a593Smuzhiyun struct regulator *__must_check regulator_get(struct device *dev,
181*4882a593Smuzhiyun const char *id);
182*4882a593Smuzhiyun struct regulator *__must_check devm_regulator_get(struct device *dev,
183*4882a593Smuzhiyun const char *id);
184*4882a593Smuzhiyun struct regulator *__must_check regulator_get_exclusive(struct device *dev,
185*4882a593Smuzhiyun const char *id);
186*4882a593Smuzhiyun struct regulator *__must_check devm_regulator_get_exclusive(struct device *dev,
187*4882a593Smuzhiyun const char *id);
188*4882a593Smuzhiyun struct regulator *__must_check regulator_get_optional(struct device *dev,
189*4882a593Smuzhiyun const char *id);
190*4882a593Smuzhiyun struct regulator *__must_check devm_regulator_get_optional(struct device *dev,
191*4882a593Smuzhiyun const char *id);
192*4882a593Smuzhiyun void regulator_put(struct regulator *regulator);
193*4882a593Smuzhiyun void devm_regulator_put(struct regulator *regulator);
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun int regulator_register_supply_alias(struct device *dev, const char *id,
196*4882a593Smuzhiyun struct device *alias_dev,
197*4882a593Smuzhiyun const char *alias_id);
198*4882a593Smuzhiyun void regulator_unregister_supply_alias(struct device *dev, const char *id);
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun int regulator_bulk_register_supply_alias(struct device *dev,
201*4882a593Smuzhiyun const char *const *id,
202*4882a593Smuzhiyun struct device *alias_dev,
203*4882a593Smuzhiyun const char *const *alias_id,
204*4882a593Smuzhiyun int num_id);
205*4882a593Smuzhiyun void regulator_bulk_unregister_supply_alias(struct device *dev,
206*4882a593Smuzhiyun const char * const *id, int num_id);
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun int devm_regulator_register_supply_alias(struct device *dev, const char *id,
209*4882a593Smuzhiyun struct device *alias_dev,
210*4882a593Smuzhiyun const char *alias_id);
211*4882a593Smuzhiyun void devm_regulator_unregister_supply_alias(struct device *dev,
212*4882a593Smuzhiyun const char *id);
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun int devm_regulator_bulk_register_supply_alias(struct device *dev,
215*4882a593Smuzhiyun const char *const *id,
216*4882a593Smuzhiyun struct device *alias_dev,
217*4882a593Smuzhiyun const char *const *alias_id,
218*4882a593Smuzhiyun int num_id);
219*4882a593Smuzhiyun void devm_regulator_bulk_unregister_supply_alias(struct device *dev,
220*4882a593Smuzhiyun const char *const *id,
221*4882a593Smuzhiyun int num_id);
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun /* regulator output control and status */
224*4882a593Smuzhiyun int __must_check regulator_enable(struct regulator *regulator);
225*4882a593Smuzhiyun int regulator_disable(struct regulator *regulator);
226*4882a593Smuzhiyun int regulator_force_disable(struct regulator *regulator);
227*4882a593Smuzhiyun int regulator_is_enabled(struct regulator *regulator);
228*4882a593Smuzhiyun int regulator_disable_deferred(struct regulator *regulator, int ms);
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun int __must_check regulator_bulk_get(struct device *dev, int num_consumers,
231*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
232*4882a593Smuzhiyun int __must_check devm_regulator_bulk_get(struct device *dev, int num_consumers,
233*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
234*4882a593Smuzhiyun int __must_check regulator_bulk_enable(int num_consumers,
235*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
236*4882a593Smuzhiyun int regulator_bulk_disable(int num_consumers,
237*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
238*4882a593Smuzhiyun int regulator_bulk_force_disable(int num_consumers,
239*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
240*4882a593Smuzhiyun void regulator_bulk_free(int num_consumers,
241*4882a593Smuzhiyun struct regulator_bulk_data *consumers);
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun int regulator_count_voltages(struct regulator *regulator);
244*4882a593Smuzhiyun int regulator_list_voltage(struct regulator *regulator, unsigned selector);
245*4882a593Smuzhiyun int regulator_is_supported_voltage(struct regulator *regulator,
246*4882a593Smuzhiyun int min_uV, int max_uV);
247*4882a593Smuzhiyun unsigned int regulator_get_linear_step(struct regulator *regulator);
248*4882a593Smuzhiyun int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV);
249*4882a593Smuzhiyun int regulator_set_voltage_time(struct regulator *regulator,
250*4882a593Smuzhiyun int old_uV, int new_uV);
251*4882a593Smuzhiyun int regulator_get_voltage(struct regulator *regulator);
252*4882a593Smuzhiyun int regulator_sync_voltage(struct regulator *regulator);
253*4882a593Smuzhiyun int regulator_set_current_limit(struct regulator *regulator,
254*4882a593Smuzhiyun int min_uA, int max_uA);
255*4882a593Smuzhiyun int regulator_get_current_limit(struct regulator *regulator);
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun int regulator_set_mode(struct regulator *regulator, unsigned int mode);
258*4882a593Smuzhiyun unsigned int regulator_get_mode(struct regulator *regulator);
259*4882a593Smuzhiyun int regulator_get_error_flags(struct regulator *regulator,
260*4882a593Smuzhiyun unsigned int *flags);
261*4882a593Smuzhiyun int regulator_set_load(struct regulator *regulator, int load_uA);
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun int regulator_allow_bypass(struct regulator *regulator, bool allow);
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun struct regmap *regulator_get_regmap(struct regulator *regulator);
266*4882a593Smuzhiyun int regulator_get_hardware_vsel_register(struct regulator *regulator,
267*4882a593Smuzhiyun unsigned *vsel_reg,
268*4882a593Smuzhiyun unsigned *vsel_mask);
269*4882a593Smuzhiyun int regulator_list_hardware_vsel(struct regulator *regulator,
270*4882a593Smuzhiyun unsigned selector);
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun /* regulator notifier block */
273*4882a593Smuzhiyun int regulator_register_notifier(struct regulator *regulator,
274*4882a593Smuzhiyun struct notifier_block *nb);
275*4882a593Smuzhiyun int devm_regulator_register_notifier(struct regulator *regulator,
276*4882a593Smuzhiyun struct notifier_block *nb);
277*4882a593Smuzhiyun int regulator_unregister_notifier(struct regulator *regulator,
278*4882a593Smuzhiyun struct notifier_block *nb);
279*4882a593Smuzhiyun void devm_regulator_unregister_notifier(struct regulator *regulator,
280*4882a593Smuzhiyun struct notifier_block *nb);
281*4882a593Smuzhiyun
282*4882a593Smuzhiyun /* regulator suspend */
283*4882a593Smuzhiyun int regulator_suspend_enable(struct regulator_dev *rdev,
284*4882a593Smuzhiyun suspend_state_t state);
285*4882a593Smuzhiyun int regulator_suspend_disable(struct regulator_dev *rdev,
286*4882a593Smuzhiyun suspend_state_t state);
287*4882a593Smuzhiyun int regulator_set_suspend_voltage(struct regulator *regulator, int min_uV,
288*4882a593Smuzhiyun int max_uV, suspend_state_t state);
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun /* driver data - core doesn't touch */
291*4882a593Smuzhiyun void *regulator_get_drvdata(struct regulator *regulator);
292*4882a593Smuzhiyun void regulator_set_drvdata(struct regulator *regulator, void *data);
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun /* misc helpers */
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun void regulator_bulk_set_supply_names(struct regulator_bulk_data *consumers,
297*4882a593Smuzhiyun const char *const *supply_names,
298*4882a593Smuzhiyun unsigned int num_supplies);
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun bool regulator_is_equal(struct regulator *reg1, struct regulator *reg2);
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun #else
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun /*
305*4882a593Smuzhiyun * Make sure client drivers will still build on systems with no software
306*4882a593Smuzhiyun * controllable voltage or current regulators.
307*4882a593Smuzhiyun */
regulator_get(struct device * dev,const char * id)308*4882a593Smuzhiyun static inline struct regulator *__must_check regulator_get(struct device *dev,
309*4882a593Smuzhiyun const char *id)
310*4882a593Smuzhiyun {
311*4882a593Smuzhiyun /* Nothing except the stubbed out regulator API should be
312*4882a593Smuzhiyun * looking at the value except to check if it is an error
313*4882a593Smuzhiyun * value. Drivers are free to handle NULL specifically by
314*4882a593Smuzhiyun * skipping all regulator API calls, but they don't have to.
315*4882a593Smuzhiyun * Drivers which don't, should make sure they properly handle
316*4882a593Smuzhiyun * corner cases of the API, such as regulator_get_voltage()
317*4882a593Smuzhiyun * returning 0.
318*4882a593Smuzhiyun */
319*4882a593Smuzhiyun return NULL;
320*4882a593Smuzhiyun }
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun static inline struct regulator *__must_check
devm_regulator_get(struct device * dev,const char * id)323*4882a593Smuzhiyun devm_regulator_get(struct device *dev, const char *id)
324*4882a593Smuzhiyun {
325*4882a593Smuzhiyun return NULL;
326*4882a593Smuzhiyun }
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun static inline struct regulator *__must_check
regulator_get_exclusive(struct device * dev,const char * id)329*4882a593Smuzhiyun regulator_get_exclusive(struct device *dev, const char *id)
330*4882a593Smuzhiyun {
331*4882a593Smuzhiyun return ERR_PTR(-ENODEV);
332*4882a593Smuzhiyun }
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun static inline struct regulator *__must_check
devm_regulator_get_exclusive(struct device * dev,const char * id)335*4882a593Smuzhiyun devm_regulator_get_exclusive(struct device *dev, const char *id)
336*4882a593Smuzhiyun {
337*4882a593Smuzhiyun return ERR_PTR(-ENODEV);
338*4882a593Smuzhiyun }
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun static inline struct regulator *__must_check
regulator_get_optional(struct device * dev,const char * id)341*4882a593Smuzhiyun regulator_get_optional(struct device *dev, const char *id)
342*4882a593Smuzhiyun {
343*4882a593Smuzhiyun return ERR_PTR(-ENODEV);
344*4882a593Smuzhiyun }
345*4882a593Smuzhiyun
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun static inline struct regulator *__must_check
devm_regulator_get_optional(struct device * dev,const char * id)348*4882a593Smuzhiyun devm_regulator_get_optional(struct device *dev, const char *id)
349*4882a593Smuzhiyun {
350*4882a593Smuzhiyun return ERR_PTR(-ENODEV);
351*4882a593Smuzhiyun }
352*4882a593Smuzhiyun
regulator_put(struct regulator * regulator)353*4882a593Smuzhiyun static inline void regulator_put(struct regulator *regulator)
354*4882a593Smuzhiyun {
355*4882a593Smuzhiyun }
356*4882a593Smuzhiyun
devm_regulator_put(struct regulator * regulator)357*4882a593Smuzhiyun static inline void devm_regulator_put(struct regulator *regulator)
358*4882a593Smuzhiyun {
359*4882a593Smuzhiyun }
360*4882a593Smuzhiyun
regulator_register_supply_alias(struct device * dev,const char * id,struct device * alias_dev,const char * alias_id)361*4882a593Smuzhiyun static inline int regulator_register_supply_alias(struct device *dev,
362*4882a593Smuzhiyun const char *id,
363*4882a593Smuzhiyun struct device *alias_dev,
364*4882a593Smuzhiyun const char *alias_id)
365*4882a593Smuzhiyun {
366*4882a593Smuzhiyun return 0;
367*4882a593Smuzhiyun }
368*4882a593Smuzhiyun
regulator_unregister_supply_alias(struct device * dev,const char * id)369*4882a593Smuzhiyun static inline void regulator_unregister_supply_alias(struct device *dev,
370*4882a593Smuzhiyun const char *id)
371*4882a593Smuzhiyun {
372*4882a593Smuzhiyun }
373*4882a593Smuzhiyun
regulator_bulk_register_supply_alias(struct device * dev,const char * const * id,struct device * alias_dev,const char * const * alias_id,int num_id)374*4882a593Smuzhiyun static inline int regulator_bulk_register_supply_alias(struct device *dev,
375*4882a593Smuzhiyun const char *const *id,
376*4882a593Smuzhiyun struct device *alias_dev,
377*4882a593Smuzhiyun const char * const *alias_id,
378*4882a593Smuzhiyun int num_id)
379*4882a593Smuzhiyun {
380*4882a593Smuzhiyun return 0;
381*4882a593Smuzhiyun }
382*4882a593Smuzhiyun
regulator_bulk_unregister_supply_alias(struct device * dev,const char * const * id,int num_id)383*4882a593Smuzhiyun static inline void regulator_bulk_unregister_supply_alias(struct device *dev,
384*4882a593Smuzhiyun const char * const *id,
385*4882a593Smuzhiyun int num_id)
386*4882a593Smuzhiyun {
387*4882a593Smuzhiyun }
388*4882a593Smuzhiyun
devm_regulator_register_supply_alias(struct device * dev,const char * id,struct device * alias_dev,const char * alias_id)389*4882a593Smuzhiyun static inline int devm_regulator_register_supply_alias(struct device *dev,
390*4882a593Smuzhiyun const char *id,
391*4882a593Smuzhiyun struct device *alias_dev,
392*4882a593Smuzhiyun const char *alias_id)
393*4882a593Smuzhiyun {
394*4882a593Smuzhiyun return 0;
395*4882a593Smuzhiyun }
396*4882a593Smuzhiyun
devm_regulator_unregister_supply_alias(struct device * dev,const char * id)397*4882a593Smuzhiyun static inline void devm_regulator_unregister_supply_alias(struct device *dev,
398*4882a593Smuzhiyun const char *id)
399*4882a593Smuzhiyun {
400*4882a593Smuzhiyun }
401*4882a593Smuzhiyun
devm_regulator_bulk_register_supply_alias(struct device * dev,const char * const * id,struct device * alias_dev,const char * const * alias_id,int num_id)402*4882a593Smuzhiyun static inline int devm_regulator_bulk_register_supply_alias(struct device *dev,
403*4882a593Smuzhiyun const char *const *id,
404*4882a593Smuzhiyun struct device *alias_dev,
405*4882a593Smuzhiyun const char *const *alias_id,
406*4882a593Smuzhiyun int num_id)
407*4882a593Smuzhiyun {
408*4882a593Smuzhiyun return 0;
409*4882a593Smuzhiyun }
410*4882a593Smuzhiyun
devm_regulator_bulk_unregister_supply_alias(struct device * dev,const char * const * id,int num_id)411*4882a593Smuzhiyun static inline void devm_regulator_bulk_unregister_supply_alias(
412*4882a593Smuzhiyun struct device *dev, const char *const *id, int num_id)
413*4882a593Smuzhiyun {
414*4882a593Smuzhiyun }
415*4882a593Smuzhiyun
regulator_enable(struct regulator * regulator)416*4882a593Smuzhiyun static inline int regulator_enable(struct regulator *regulator)
417*4882a593Smuzhiyun {
418*4882a593Smuzhiyun return 0;
419*4882a593Smuzhiyun }
420*4882a593Smuzhiyun
regulator_disable(struct regulator * regulator)421*4882a593Smuzhiyun static inline int regulator_disable(struct regulator *regulator)
422*4882a593Smuzhiyun {
423*4882a593Smuzhiyun return 0;
424*4882a593Smuzhiyun }
425*4882a593Smuzhiyun
regulator_force_disable(struct regulator * regulator)426*4882a593Smuzhiyun static inline int regulator_force_disable(struct regulator *regulator)
427*4882a593Smuzhiyun {
428*4882a593Smuzhiyun return 0;
429*4882a593Smuzhiyun }
430*4882a593Smuzhiyun
regulator_disable_deferred(struct regulator * regulator,int ms)431*4882a593Smuzhiyun static inline int regulator_disable_deferred(struct regulator *regulator,
432*4882a593Smuzhiyun int ms)
433*4882a593Smuzhiyun {
434*4882a593Smuzhiyun return 0;
435*4882a593Smuzhiyun }
436*4882a593Smuzhiyun
regulator_is_enabled(struct regulator * regulator)437*4882a593Smuzhiyun static inline int regulator_is_enabled(struct regulator *regulator)
438*4882a593Smuzhiyun {
439*4882a593Smuzhiyun return 1;
440*4882a593Smuzhiyun }
441*4882a593Smuzhiyun
regulator_bulk_get(struct device * dev,int num_consumers,struct regulator_bulk_data * consumers)442*4882a593Smuzhiyun static inline int regulator_bulk_get(struct device *dev,
443*4882a593Smuzhiyun int num_consumers,
444*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
445*4882a593Smuzhiyun {
446*4882a593Smuzhiyun return 0;
447*4882a593Smuzhiyun }
448*4882a593Smuzhiyun
devm_regulator_bulk_get(struct device * dev,int num_consumers,struct regulator_bulk_data * consumers)449*4882a593Smuzhiyun static inline int devm_regulator_bulk_get(struct device *dev, int num_consumers,
450*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
451*4882a593Smuzhiyun {
452*4882a593Smuzhiyun return 0;
453*4882a593Smuzhiyun }
454*4882a593Smuzhiyun
regulator_bulk_enable(int num_consumers,struct regulator_bulk_data * consumers)455*4882a593Smuzhiyun static inline int regulator_bulk_enable(int num_consumers,
456*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
457*4882a593Smuzhiyun {
458*4882a593Smuzhiyun return 0;
459*4882a593Smuzhiyun }
460*4882a593Smuzhiyun
regulator_bulk_disable(int num_consumers,struct regulator_bulk_data * consumers)461*4882a593Smuzhiyun static inline int regulator_bulk_disable(int num_consumers,
462*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
463*4882a593Smuzhiyun {
464*4882a593Smuzhiyun return 0;
465*4882a593Smuzhiyun }
466*4882a593Smuzhiyun
regulator_bulk_force_disable(int num_consumers,struct regulator_bulk_data * consumers)467*4882a593Smuzhiyun static inline int regulator_bulk_force_disable(int num_consumers,
468*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
469*4882a593Smuzhiyun {
470*4882a593Smuzhiyun return 0;
471*4882a593Smuzhiyun }
472*4882a593Smuzhiyun
regulator_bulk_free(int num_consumers,struct regulator_bulk_data * consumers)473*4882a593Smuzhiyun static inline void regulator_bulk_free(int num_consumers,
474*4882a593Smuzhiyun struct regulator_bulk_data *consumers)
475*4882a593Smuzhiyun {
476*4882a593Smuzhiyun }
477*4882a593Smuzhiyun
regulator_set_voltage(struct regulator * regulator,int min_uV,int max_uV)478*4882a593Smuzhiyun static inline int regulator_set_voltage(struct regulator *regulator,
479*4882a593Smuzhiyun int min_uV, int max_uV)
480*4882a593Smuzhiyun {
481*4882a593Smuzhiyun return 0;
482*4882a593Smuzhiyun }
483*4882a593Smuzhiyun
regulator_set_voltage_time(struct regulator * regulator,int old_uV,int new_uV)484*4882a593Smuzhiyun static inline int regulator_set_voltage_time(struct regulator *regulator,
485*4882a593Smuzhiyun int old_uV, int new_uV)
486*4882a593Smuzhiyun {
487*4882a593Smuzhiyun return 0;
488*4882a593Smuzhiyun }
489*4882a593Smuzhiyun
regulator_get_voltage(struct regulator * regulator)490*4882a593Smuzhiyun static inline int regulator_get_voltage(struct regulator *regulator)
491*4882a593Smuzhiyun {
492*4882a593Smuzhiyun return -EINVAL;
493*4882a593Smuzhiyun }
494*4882a593Smuzhiyun
regulator_sync_voltage(struct regulator * regulator)495*4882a593Smuzhiyun static inline int regulator_sync_voltage(struct regulator *regulator)
496*4882a593Smuzhiyun {
497*4882a593Smuzhiyun return -EINVAL;
498*4882a593Smuzhiyun }
499*4882a593Smuzhiyun
regulator_is_supported_voltage(struct regulator * regulator,int min_uV,int max_uV)500*4882a593Smuzhiyun static inline int regulator_is_supported_voltage(struct regulator *regulator,
501*4882a593Smuzhiyun int min_uV, int max_uV)
502*4882a593Smuzhiyun {
503*4882a593Smuzhiyun return 0;
504*4882a593Smuzhiyun }
505*4882a593Smuzhiyun
regulator_get_linear_step(struct regulator * regulator)506*4882a593Smuzhiyun static inline unsigned int regulator_get_linear_step(struct regulator *regulator)
507*4882a593Smuzhiyun {
508*4882a593Smuzhiyun return 0;
509*4882a593Smuzhiyun }
510*4882a593Smuzhiyun
regulator_set_current_limit(struct regulator * regulator,int min_uA,int max_uA)511*4882a593Smuzhiyun static inline int regulator_set_current_limit(struct regulator *regulator,
512*4882a593Smuzhiyun int min_uA, int max_uA)
513*4882a593Smuzhiyun {
514*4882a593Smuzhiyun return 0;
515*4882a593Smuzhiyun }
516*4882a593Smuzhiyun
regulator_get_current_limit(struct regulator * regulator)517*4882a593Smuzhiyun static inline int regulator_get_current_limit(struct regulator *regulator)
518*4882a593Smuzhiyun {
519*4882a593Smuzhiyun return 0;
520*4882a593Smuzhiyun }
521*4882a593Smuzhiyun
regulator_set_mode(struct regulator * regulator,unsigned int mode)522*4882a593Smuzhiyun static inline int regulator_set_mode(struct regulator *regulator,
523*4882a593Smuzhiyun unsigned int mode)
524*4882a593Smuzhiyun {
525*4882a593Smuzhiyun return 0;
526*4882a593Smuzhiyun }
527*4882a593Smuzhiyun
regulator_get_mode(struct regulator * regulator)528*4882a593Smuzhiyun static inline unsigned int regulator_get_mode(struct regulator *regulator)
529*4882a593Smuzhiyun {
530*4882a593Smuzhiyun return REGULATOR_MODE_NORMAL;
531*4882a593Smuzhiyun }
532*4882a593Smuzhiyun
regulator_get_error_flags(struct regulator * regulator,unsigned int * flags)533*4882a593Smuzhiyun static inline int regulator_get_error_flags(struct regulator *regulator,
534*4882a593Smuzhiyun unsigned int *flags)
535*4882a593Smuzhiyun {
536*4882a593Smuzhiyun return -EINVAL;
537*4882a593Smuzhiyun }
538*4882a593Smuzhiyun
regulator_set_load(struct regulator * regulator,int load_uA)539*4882a593Smuzhiyun static inline int regulator_set_load(struct regulator *regulator, int load_uA)
540*4882a593Smuzhiyun {
541*4882a593Smuzhiyun return 0;
542*4882a593Smuzhiyun }
543*4882a593Smuzhiyun
regulator_allow_bypass(struct regulator * regulator,bool allow)544*4882a593Smuzhiyun static inline int regulator_allow_bypass(struct regulator *regulator,
545*4882a593Smuzhiyun bool allow)
546*4882a593Smuzhiyun {
547*4882a593Smuzhiyun return 0;
548*4882a593Smuzhiyun }
549*4882a593Smuzhiyun
regulator_get_regmap(struct regulator * regulator)550*4882a593Smuzhiyun static inline struct regmap *regulator_get_regmap(struct regulator *regulator)
551*4882a593Smuzhiyun {
552*4882a593Smuzhiyun return ERR_PTR(-EOPNOTSUPP);
553*4882a593Smuzhiyun }
554*4882a593Smuzhiyun
regulator_get_hardware_vsel_register(struct regulator * regulator,unsigned * vsel_reg,unsigned * vsel_mask)555*4882a593Smuzhiyun static inline int regulator_get_hardware_vsel_register(struct regulator *regulator,
556*4882a593Smuzhiyun unsigned *vsel_reg,
557*4882a593Smuzhiyun unsigned *vsel_mask)
558*4882a593Smuzhiyun {
559*4882a593Smuzhiyun return -EOPNOTSUPP;
560*4882a593Smuzhiyun }
561*4882a593Smuzhiyun
regulator_list_hardware_vsel(struct regulator * regulator,unsigned selector)562*4882a593Smuzhiyun static inline int regulator_list_hardware_vsel(struct regulator *regulator,
563*4882a593Smuzhiyun unsigned selector)
564*4882a593Smuzhiyun {
565*4882a593Smuzhiyun return -EOPNOTSUPP;
566*4882a593Smuzhiyun }
567*4882a593Smuzhiyun
regulator_register_notifier(struct regulator * regulator,struct notifier_block * nb)568*4882a593Smuzhiyun static inline int regulator_register_notifier(struct regulator *regulator,
569*4882a593Smuzhiyun struct notifier_block *nb)
570*4882a593Smuzhiyun {
571*4882a593Smuzhiyun return 0;
572*4882a593Smuzhiyun }
573*4882a593Smuzhiyun
devm_regulator_register_notifier(struct regulator * regulator,struct notifier_block * nb)574*4882a593Smuzhiyun static inline int devm_regulator_register_notifier(struct regulator *regulator,
575*4882a593Smuzhiyun struct notifier_block *nb)
576*4882a593Smuzhiyun {
577*4882a593Smuzhiyun return 0;
578*4882a593Smuzhiyun }
579*4882a593Smuzhiyun
regulator_unregister_notifier(struct regulator * regulator,struct notifier_block * nb)580*4882a593Smuzhiyun static inline int regulator_unregister_notifier(struct regulator *regulator,
581*4882a593Smuzhiyun struct notifier_block *nb)
582*4882a593Smuzhiyun {
583*4882a593Smuzhiyun return 0;
584*4882a593Smuzhiyun }
585*4882a593Smuzhiyun
devm_regulator_unregister_notifier(struct regulator * regulator,struct notifier_block * nb)586*4882a593Smuzhiyun static inline int devm_regulator_unregister_notifier(struct regulator *regulator,
587*4882a593Smuzhiyun struct notifier_block *nb)
588*4882a593Smuzhiyun {
589*4882a593Smuzhiyun return 0;
590*4882a593Smuzhiyun }
591*4882a593Smuzhiyun
regulator_suspend_enable(struct regulator_dev * rdev,suspend_state_t state)592*4882a593Smuzhiyun static inline int regulator_suspend_enable(struct regulator_dev *rdev,
593*4882a593Smuzhiyun suspend_state_t state)
594*4882a593Smuzhiyun {
595*4882a593Smuzhiyun return -EINVAL;
596*4882a593Smuzhiyun }
597*4882a593Smuzhiyun
regulator_suspend_disable(struct regulator_dev * rdev,suspend_state_t state)598*4882a593Smuzhiyun static inline int regulator_suspend_disable(struct regulator_dev *rdev,
599*4882a593Smuzhiyun suspend_state_t state)
600*4882a593Smuzhiyun {
601*4882a593Smuzhiyun return -EINVAL;
602*4882a593Smuzhiyun }
603*4882a593Smuzhiyun
regulator_set_suspend_voltage(struct regulator * regulator,int min_uV,int max_uV,suspend_state_t state)604*4882a593Smuzhiyun static inline int regulator_set_suspend_voltage(struct regulator *regulator,
605*4882a593Smuzhiyun int min_uV, int max_uV,
606*4882a593Smuzhiyun suspend_state_t state)
607*4882a593Smuzhiyun {
608*4882a593Smuzhiyun return -EINVAL;
609*4882a593Smuzhiyun }
610*4882a593Smuzhiyun
regulator_get_drvdata(struct regulator * regulator)611*4882a593Smuzhiyun static inline void *regulator_get_drvdata(struct regulator *regulator)
612*4882a593Smuzhiyun {
613*4882a593Smuzhiyun return NULL;
614*4882a593Smuzhiyun }
615*4882a593Smuzhiyun
regulator_set_drvdata(struct regulator * regulator,void * data)616*4882a593Smuzhiyun static inline void regulator_set_drvdata(struct regulator *regulator,
617*4882a593Smuzhiyun void *data)
618*4882a593Smuzhiyun {
619*4882a593Smuzhiyun }
620*4882a593Smuzhiyun
regulator_count_voltages(struct regulator * regulator)621*4882a593Smuzhiyun static inline int regulator_count_voltages(struct regulator *regulator)
622*4882a593Smuzhiyun {
623*4882a593Smuzhiyun return 0;
624*4882a593Smuzhiyun }
625*4882a593Smuzhiyun
regulator_list_voltage(struct regulator * regulator,unsigned selector)626*4882a593Smuzhiyun static inline int regulator_list_voltage(struct regulator *regulator, unsigned selector)
627*4882a593Smuzhiyun {
628*4882a593Smuzhiyun return -EINVAL;
629*4882a593Smuzhiyun }
630*4882a593Smuzhiyun
631*4882a593Smuzhiyun static inline void
regulator_bulk_set_supply_names(struct regulator_bulk_data * consumers,const char * const * supply_names,unsigned int num_supplies)632*4882a593Smuzhiyun regulator_bulk_set_supply_names(struct regulator_bulk_data *consumers,
633*4882a593Smuzhiyun const char *const *supply_names,
634*4882a593Smuzhiyun unsigned int num_supplies)
635*4882a593Smuzhiyun {
636*4882a593Smuzhiyun }
637*4882a593Smuzhiyun
638*4882a593Smuzhiyun static inline bool
regulator_is_equal(struct regulator * reg1,struct regulator * reg2)639*4882a593Smuzhiyun regulator_is_equal(struct regulator *reg1, struct regulator *reg2)
640*4882a593Smuzhiyun {
641*4882a593Smuzhiyun return false;
642*4882a593Smuzhiyun }
643*4882a593Smuzhiyun #endif
644*4882a593Smuzhiyun
regulator_set_voltage_triplet(struct regulator * regulator,int min_uV,int target_uV,int max_uV)645*4882a593Smuzhiyun static inline int regulator_set_voltage_triplet(struct regulator *regulator,
646*4882a593Smuzhiyun int min_uV, int target_uV,
647*4882a593Smuzhiyun int max_uV)
648*4882a593Smuzhiyun {
649*4882a593Smuzhiyun if (regulator_set_voltage(regulator, target_uV, max_uV) == 0)
650*4882a593Smuzhiyun return 0;
651*4882a593Smuzhiyun
652*4882a593Smuzhiyun return regulator_set_voltage(regulator, min_uV, max_uV);
653*4882a593Smuzhiyun }
654*4882a593Smuzhiyun
regulator_set_voltage_tol(struct regulator * regulator,int new_uV,int tol_uV)655*4882a593Smuzhiyun static inline int regulator_set_voltage_tol(struct regulator *regulator,
656*4882a593Smuzhiyun int new_uV, int tol_uV)
657*4882a593Smuzhiyun {
658*4882a593Smuzhiyun if (regulator_set_voltage(regulator, new_uV, new_uV + tol_uV) == 0)
659*4882a593Smuzhiyun return 0;
660*4882a593Smuzhiyun else
661*4882a593Smuzhiyun return regulator_set_voltage(regulator,
662*4882a593Smuzhiyun new_uV - tol_uV, new_uV + tol_uV);
663*4882a593Smuzhiyun }
664*4882a593Smuzhiyun
regulator_is_supported_voltage_tol(struct regulator * regulator,int target_uV,int tol_uV)665*4882a593Smuzhiyun static inline int regulator_is_supported_voltage_tol(struct regulator *regulator,
666*4882a593Smuzhiyun int target_uV, int tol_uV)
667*4882a593Smuzhiyun {
668*4882a593Smuzhiyun return regulator_is_supported_voltage(regulator,
669*4882a593Smuzhiyun target_uV - tol_uV,
670*4882a593Smuzhiyun target_uV + tol_uV);
671*4882a593Smuzhiyun }
672*4882a593Smuzhiyun
673*4882a593Smuzhiyun #endif
674