About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / power / regulator / consumer.txt


Based on kernel version 4.16.1. Page generated on 2018-04-09 11:53 EST.

1	Regulator Consumer Driver Interface
2	===================================
3	
4	This text describes the regulator interface for consumer device drivers.
5	Please see overview.txt for a description of the terms used in this text.
6	
7	
8	1. Consumer Regulator Access (static & dynamic drivers)
9	=======================================================
10	
11	A consumer driver can get access to its supply regulator by calling :-
12	
13	regulator = regulator_get(dev, "Vcc");
14	
15	The consumer passes in its struct device pointer and power supply ID. The core
16	then finds the correct regulator by consulting a machine specific lookup table.
17	If the lookup is successful then this call will return a pointer to the struct
18	regulator that supplies this consumer.
19	
20	To release the regulator the consumer driver should call :-
21	
22	regulator_put(regulator);
23	
24	Consumers can be supplied by more than one regulator e.g. codec consumer with
25	analog and digital supplies :-
26	
27	digital = regulator_get(dev, "Vcc");  /* digital core */
28	analog = regulator_get(dev, "Avdd");  /* analog */
29	
30	The regulator access functions regulator_get() and regulator_put() will
31	usually be called in your device drivers probe() and remove() respectively.
32	
33	
34	2. Regulator Output Enable & Disable (static & dynamic drivers)
35	====================================================================
36	
37	A consumer can enable its power supply by calling:-
38	
39	int regulator_enable(regulator);
40	
41	NOTE: The supply may already be enabled before regulator_enabled() is called.
42	This may happen if the consumer shares the regulator or the regulator has been
43	previously enabled by bootloader or kernel board initialization code.
44	
45	A consumer can determine if a regulator is enabled by calling :-
46	
47	int regulator_is_enabled(regulator);
48	
49	This will return > zero when the regulator is enabled.
50	
51	
52	A consumer can disable its supply when no longer needed by calling :-
53	
54	int regulator_disable(regulator);
55	
56	NOTE: This may not disable the supply if it's shared with other consumers. The
57	regulator will only be disabled when the enabled reference count is zero.
58	
59	Finally, a regulator can be forcefully disabled in the case of an emergency :-
60	
61	int regulator_force_disable(regulator);
62	
63	NOTE: this will immediately and forcefully shutdown the regulator output. All
64	consumers will be powered off.
65	
66	
67	3. Regulator Voltage Control & Status (dynamic drivers)
68	======================================================
69	
70	Some consumer drivers need to be able to dynamically change their supply
71	voltage to match system operating points. e.g. CPUfreq drivers can scale
72	voltage along with frequency to save power, SD drivers may need to select the
73	correct card voltage, etc.
74	
75	Consumers can control their supply voltage by calling :-
76	
77	int regulator_set_voltage(regulator, min_uV, max_uV);
78	
79	Where min_uV and max_uV are the minimum and maximum acceptable voltages in
80	microvolts.
81	
82	NOTE: this can be called when the regulator is enabled or disabled. If called
83	when enabled, then the voltage changes instantly, otherwise the voltage
84	configuration changes and the voltage is physically set when the regulator is
85	next enabled.
86	
87	The regulators configured voltage output can be found by calling :-
88	
89	int regulator_get_voltage(regulator);
90	
91	NOTE: get_voltage() will return the configured output voltage whether the
92	regulator is enabled or disabled and should NOT be used to determine regulator
93	output state. However this can be used in conjunction with is_enabled() to
94	determine the regulator physical output voltage.
95	
96	
97	4. Regulator Current Limit Control & Status (dynamic drivers)
98	===========================================================
99	
100	Some consumer drivers need to be able to dynamically change their supply
101	current limit to match system operating points. e.g. LCD backlight driver can
102	change the current limit to vary the backlight brightness, USB drivers may want
103	to set the limit to 500mA when supplying power.
104	
105	Consumers can control their supply current limit by calling :-
106	
107	int regulator_set_current_limit(regulator, min_uA, max_uA);
108	
109	Where min_uA and max_uA are the minimum and maximum acceptable current limit in
110	microamps.
111	
112	NOTE: this can be called when the regulator is enabled or disabled. If called
113	when enabled, then the current limit changes instantly, otherwise the current
114	limit configuration changes and the current limit is physically set when the
115	regulator is next enabled.
116	
117	A regulators current limit can be found by calling :-
118	
119	int regulator_get_current_limit(regulator);
120	
121	NOTE: get_current_limit() will return the current limit whether the regulator
122	is enabled or disabled and should not be used to determine regulator current
123	load.
124	
125	
126	5. Regulator Operating Mode Control & Status (dynamic drivers)
127	=============================================================
128	
129	Some consumers can further save system power by changing the operating mode of
130	their supply regulator to be more efficient when the consumers operating state
131	changes. e.g. consumer driver is idle and subsequently draws less current
132	
133	Regulator operating mode can be changed indirectly or directly.
134	
135	Indirect operating mode control.
136	--------------------------------
137	Consumer drivers can request a change in their supply regulator operating mode
138	by calling :-
139	
140	int regulator_set_load(struct regulator *regulator, int load_uA);
141	
142	This will cause the core to recalculate the total load on the regulator (based
143	on all its consumers) and change operating mode (if necessary and permitted)
144	to best match the current operating load.
145	
146	The load_uA value can be determined from the consumer's datasheet. e.g. most
147	datasheets have tables showing the maximum current consumed in certain
148	situations.
149	
150	Most consumers will use indirect operating mode control since they have no
151	knowledge of the regulator or whether the regulator is shared with other
152	consumers.
153	
154	Direct operating mode control.
155	------------------------------
156	Bespoke or tightly coupled drivers may want to directly control regulator
157	operating mode depending on their operating point. This can be achieved by
158	calling :-
159	
160	int regulator_set_mode(struct regulator *regulator, unsigned int mode);
161	unsigned int regulator_get_mode(struct regulator *regulator);
162	
163	Direct mode will only be used by consumers that *know* about the regulator and
164	are not sharing the regulator with other consumers.
165	
166	
167	6. Regulator Events
168	===================
169	Regulators can notify consumers of external events. Events could be received by
170	consumers under regulator stress or failure conditions.
171	
172	Consumers can register interest in regulator events by calling :-
173	
174	int regulator_register_notifier(struct regulator *regulator,
175				      struct notifier_block *nb);
176	
177	Consumers can unregister interest by calling :-
178	
179	int regulator_unregister_notifier(struct regulator *regulator,
180					struct notifier_block *nb);
181	
182	Regulators use the kernel notifier framework to send event to their interested
183	consumers.
184	
185	7. Regulator Direct Register Access
186	===================================
187	Some kinds of power management hardware or firmware are designed such that
188	they need to do low-level hardware access to regulators, with no involvement
189	from the kernel. Examples of such devices are:
190	
191	- clocksource with a voltage-controlled oscillator and control logic to change
192	  the supply voltage over I2C to achieve a desired output clock rate
193	- thermal management firmware that can issue an arbitrary I2C transaction to
194	  perform system poweroff during overtemperature conditions
195	
196	To set up such a device/firmware, various parameters like I2C address of the
197	regulator, addresses of various regulator registers etc. need to be configured
198	to it. The regulator framework provides the following helpers for querying
199	these details.
200	
201	Bus-specific details, like I2C addresses or transfer rates are handled by the
202	regmap framework. To get the regulator's regmap (if supported), use :-
203	
204	struct regmap *regulator_get_regmap(struct regulator *regulator);
205	
206	To obtain the hardware register offset and bitmask for the regulator's voltage
207	selector register, use :-
208	
209	int regulator_get_hardware_vsel_register(struct regulator *regulator,
210						 unsigned *vsel_reg,
211						 unsigned *vsel_mask);
212	
213	To convert a regulator framework voltage selector code (used by
214	regulator_list_voltage) to a hardware-specific voltage selector that can be
215	directly written to the voltage selector register, use :-
216	
217	int regulator_list_hardware_vsel(struct regulator *regulator,
218					 unsigned selector);
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog