Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
  1/*
  2 * Copyright (C) ST-Ericsson SA 2010
  3 *
  4 * License Terms: GNU General Public License v2
  5 *
  6 * Authors: Sundar Iyer <sundar.iyer@stericsson.com>
  7 *          Bengt Jonsson <bengt.g.jonsson@stericsson.com>
  8 *
  9 * MOP500 board specific initialization for regulators
 10 */
 11#include <linux/kernel.h>
 12#include <linux/regulator/machine.h>
 13#include <linux/regulator/ab8500.h>
 14#include "board-mop500-regulators.h"
 15
 16/*
 17 * TPS61052 regulator
 18 */
 19static struct regulator_consumer_supply tps61052_vaudio_consumers[] = {
 20	/*
 21	 * Boost converter supply to raise voltage on audio speaker, this
 22	 * is actually connected to three pins, VInVhfL (left amplifier)
 23	 * VInVhfR (right amplifier) and VIntDClassInt - all three must
 24	 * be connected to the same voltage.
 25	 */
 26	REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"),
 27};
 28
 29struct regulator_init_data tps61052_regulator = {
 30	.constraints = {
 31		.name = "vaudio-hf",
 32		.min_uV = 4500000,
 33		.max_uV = 4500000,
 34		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
 35	},
 36	.num_consumer_supplies = ARRAY_SIZE(tps61052_vaudio_consumers),
 37	.consumer_supplies = tps61052_vaudio_consumers,
 38};
 39
 40static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
 41	/* External displays, connector on board 2v5 power supply */
 42	REGULATOR_SUPPLY("vaux12v5", "mcde.0"),
 43	/* SFH7741 proximity sensor */
 44	REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
 45	/* BH1780GLS ambient light sensor */
 46	REGULATOR_SUPPLY("vcc", "2-0029"),
 47	/* lsm303dlh accelerometer */
 48	REGULATOR_SUPPLY("vdd", "3-0018"),
 49	/* lsm303dlh magnetometer */
 50	REGULATOR_SUPPLY("vdd", "3-001e"),
 51	/* Rohm BU21013 Touchscreen devices */
 52	REGULATOR_SUPPLY("avdd", "3-005c"),
 53	REGULATOR_SUPPLY("avdd", "3-005d"),
 54	/* Synaptics RMI4 Touchscreen device */
 55	REGULATOR_SUPPLY("vdd", "3-004b"),
 56};
 57
 58static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
 59	/* On-board eMMC power */
 60	REGULATOR_SUPPLY("vmmc", "sdi4"),
 61	/* AB8500 audio codec */
 62	REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
 63};
 64
 65static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
 66	/* External MMC slot power */
 67	REGULATOR_SUPPLY("vmmc", "sdi0"),
 68};
 69
 70static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
 71	/* TV-out DENC supply */
 72	REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
 73	/* Internal general-purpose ADC */
 74	REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
 75};
 76
 77static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
 78	/* SoC core supply, no device */
 79	REGULATOR_SUPPLY("v-intcore", NULL),
 80	/* USB Transceiver */
 81	REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
 82};
 83
 84static struct regulator_consumer_supply ab8500_vana_consumers[] = {
 85	/* External displays, connector on board, 1v8 power supply */
 86	REGULATOR_SUPPLY("vsmps2", "mcde.0"),
 87};
 88
 89/* ab8500 regulator register initialization */
 90struct ab8500_regulator_reg_init
 91ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {
 92	/*
 93	 * VanaRequestCtrl          = HP/LP depending on VxRequest
 94	 * VextSupply1RequestCtrl   = HP/LP depending on VxRequest
 95	 */
 96	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0x00),
 97	/*
 98	 * VextSupply2RequestCtrl   = HP/LP depending on VxRequest
 99	 * VextSupply3RequestCtrl   = HP/LP depending on VxRequest
100	 * Vaux1RequestCtrl         = HP/LP depending on VxRequest
101	 * Vaux2RequestCtrl         = HP/LP depending on VxRequest
102	 */
103	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0x00),
104	/*
105	 * Vaux3RequestCtrl         = HP/LP depending on VxRequest
106	 * SwHPReq                  = Control through SWValid disabled
107	 */
108	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x00),
109	/*
110	 * VanaSysClkReq1HPValid    = disabled
111	 * Vaux1SysClkReq1HPValid   = disabled
112	 * Vaux2SysClkReq1HPValid   = disabled
113	 * Vaux3SysClkReq1HPValid   = disabled
114	 */
115	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0x00),
116	/*
117	 * VextSupply1SysClkReq1HPValid = disabled
118	 * VextSupply2SysClkReq1HPValid = disabled
119	 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
120	 */
121	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x40),
122	/*
123	 * VanaHwHPReq1Valid        = disabled
124	 * Vaux1HwHPreq1Valid       = disabled
125	 * Vaux2HwHPReq1Valid       = disabled
126	 * Vaux3HwHPReqValid        = disabled
127	 */
128	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0x00),
129	/*
130	 * VextSupply1HwHPReq1Valid = disabled
131	 * VextSupply2HwHPReq1Valid = disabled
132	 * VextSupply3HwHPReq1Valid = disabled
133	 */
134	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x00),
135	/*
136	 * VanaHwHPReq2Valid        = disabled
137	 * Vaux1HwHPReq2Valid       = disabled
138	 * Vaux2HwHPReq2Valid       = disabled
139	 * Vaux3HwHPReq2Valid       = disabled
140	 */
141	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0x00),
142	/*
143	 * VextSupply1HwHPReq2Valid = disabled
144	 * VextSupply2HwHPReq2Valid = disabled
145	 * VextSupply3HwHPReq2Valid = HWReq2 controlled
146	 */
147	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x04),
148	/*
149	 * VanaSwHPReqValid         = disabled
150	 * Vaux1SwHPReqValid        = disabled
151	 */
152	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0x00),
153	/*
154	 * Vaux2SwHPReqValid        = disabled
155	 * Vaux3SwHPReqValid        = disabled
156	 * VextSupply1SwHPReqValid  = disabled
157	 * VextSupply2SwHPReqValid  = disabled
158	 * VextSupply3SwHPReqValid  = disabled
159	 */
160	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x00),
161	/*
162	 * SysClkReq2Valid1         = SysClkReq2 controlled
163	 * SysClkReq3Valid1         = disabled
164	 * SysClkReq4Valid1         = SysClkReq4 controlled
165	 * SysClkReq5Valid1         = disabled
166	 * SysClkReq6Valid1         = SysClkReq6 controlled
167	 * SysClkReq7Valid1         = disabled
168	 * SysClkReq8Valid1         = disabled
169	 */
170	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0x2a),
171	/*
172	 * SysClkReq2Valid2         = disabled
173	 * SysClkReq3Valid2         = disabled
174	 * SysClkReq4Valid2         = disabled
175	 * SysClkReq5Valid2         = disabled
176	 * SysClkReq6Valid2         = SysClkReq6 controlled
177	 * SysClkReq7Valid2         = disabled
178	 * SysClkReq8Valid2         = disabled
179	 */
180	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0x20),
181	/*
182	 * VTVoutEna                = disabled
183	 * Vintcore12Ena            = disabled
184	 * Vintcore12Sel            = 1.25 V
185	 * Vintcore12LP             = inactive (HP)
186	 * VTVoutLP                 = inactive (HP)
187	 */
188	INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0x10),
189	/*
190	 * VaudioEna                = disabled
191	 * VdmicEna                 = disabled
192	 * Vamic1Ena                = disabled
193	 * Vamic2Ena                = disabled
194	 */
195	INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x00),
196	/*
197	 * Vamic1_dzout             = high-Z when Vamic1 is disabled
198	 * Vamic2_dzout             = high-Z when Vamic2 is disabled
199	 */
200	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x00),
201	/*
202	 * VPll                     = Hw controlled
203	 * VanaRegu                 = force off
204	 */
205	INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x02),
206	/*
207	 * VrefDDREna               = disabled
208	 * VrefDDRSleepMode         = inactive (no pulldown)
209	 */
210	INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x00),
211	/*
212	 * VextSupply1Regu          = HW control
213	 * VextSupply2Regu          = HW control
214	 * VextSupply3Regu          = HW control
215	 * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
216	 * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
217	 */
218	INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0x2a),
219	/*
220	 * Vaux1Regu                = force HP
221	 * Vaux2Regu                = force off
222	 */
223	INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x01),
224	/*
225	 * Vaux3regu                = force off
226	 */
227	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x00),
228	/*
229	 * Vsmps1                   = 1.15V
230	 */
231	INIT_REGULATOR_REGISTER(AB8500_VSMPS1SEL1, 0x24),
232	/*
233	 * Vaux1Sel                 = 2.5 V
234	 */
235	INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x08),
236	/*
237	 * Vaux2Sel                 = 2.9 V
238	 */
239	INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0d),
240	/*
241	 * Vaux3Sel                 = 2.91 V
242	 */
243	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07),
244	/*
245	 * VextSupply12LP           = disabled (no LP)
246	 */
247	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x00),
248	/*
249	 * Vaux1Disch               = short discharge time
250	 * Vaux2Disch               = short discharge time
251	 * Vaux3Disch               = short discharge time
252	 * Vintcore12Disch          = short discharge time
253	 * VTVoutDisch              = short discharge time
254	 * VaudioDisch              = short discharge time
255	 */
256	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0x00),
257	/*
258	 * VanaDisch                = short discharge time
259	 * VdmicPullDownEna         = pulldown disabled when Vdmic is disabled
260	 * VdmicDisch               = short discharge time
261	 */
262	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x00),
263};
264
265/* AB8500 regulators */
266struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
267	/* supplies to the display/camera */
268	[AB8500_LDO_AUX1] = {
269		.constraints = {
270			.name = "V-DISPLAY",
271			.min_uV = 2500000,
272			.max_uV = 2900000,
273			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
274					  REGULATOR_CHANGE_STATUS,
275			.boot_on = 1, /* display is on at boot */
276			/*
277			 * This voltage cannot be disabled right now because
278			 * it is somehow affecting the external MMC
279			 * functionality, though that typically will use
280			 * AUX3.
281			 */
282			.always_on = 1,
283		},
284		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
285		.consumer_supplies = ab8500_vaux1_consumers,
286	},
287	/* supplies to the on-board eMMC */
288	[AB8500_LDO_AUX2] = {
289		.constraints = {
290			.name = "V-eMMC1",
291			.min_uV = 1100000,
292			.max_uV = 3300000,
293			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
294					  REGULATOR_CHANGE_STATUS,
295		},
296		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
297		.consumer_supplies = ab8500_vaux2_consumers,
298	},
299	/* supply for VAUX3, supplies to SDcard slots */
300	[AB8500_LDO_AUX3] = {
301		.constraints = {
302			.name = "V-MMC-SD",
303			.min_uV = 1100000,
304			.max_uV = 3300000,
305			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
306					  REGULATOR_CHANGE_STATUS,
307		},
308		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
309		.consumer_supplies = ab8500_vaux3_consumers,
310	},
311	/* supply for tvout, gpadc, TVOUT LDO */
312	[AB8500_LDO_TVOUT] = {
313		.constraints = {
314			.name = "V-TVOUT",
315			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
316		},
317		.num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
318		.consumer_supplies = ab8500_vtvout_consumers,
319	},
320	/* supply for ab8500-vaudio, VAUDIO LDO */
321	[AB8500_LDO_AUDIO] = {
322		.constraints = {
323			.name = "V-AUD",
324			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
325		},
326	},
327	/* supply for v-anamic1 VAMic1-LDO */
328	[AB8500_LDO_ANAMIC1] = {
329		.constraints = {
330			.name = "V-AMIC1",
331			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
332		},
333	},
334	/* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
335	[AB8500_LDO_ANAMIC2] = {
336		.constraints = {
337			.name = "V-AMIC2",
338			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
339		},
340	},
341	/* supply for v-dmic, VDMIC LDO */
342	[AB8500_LDO_DMIC] = {
343		.constraints = {
344			.name = "V-DMIC",
345			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
346		},
347	},
348	/* supply for v-intcore12, VINTCORE12 LDO */
349	[AB8500_LDO_INTCORE] = {
350		.constraints = {
351			.name = "V-INTCORE",
352			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
353		},
354		.num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
355		.consumer_supplies = ab8500_vintcore_consumers,
356	},
357	/* supply for U8500 CSI/DSI, VANA LDO */
358	[AB8500_LDO_ANA] = {
359		.constraints = {
360			.name = "V-CSI/DSI",
361			.valid_ops_mask = REGULATOR_CHANGE_STATUS,
362		},
363		.num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
364		.consumer_supplies = ab8500_vana_consumers,
365	},
366};