blob: 9bf8a89e78c620a69578139f7d18c89963a9a741 [file] [log] [blame]
Peter Ujfalusia53b8e32011-06-04 08:16:41 +03001/*
2 * twl-common.c
3 *
4 * Copyright (C) 2011 Texas Instruments, Inc..
5 * Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * version 2 as published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19 * 02110-1301 USA
20 *
21 */
22
23#include <linux/i2c.h>
24#include <linux/i2c/twl.h>
25#include <linux/gpio.h>
Peter Ujfalusib22f9542011-06-07 10:26:46 +030026#include <linux/regulator/machine.h>
27#include <linux/regulator/fixed.h>
Peter Ujfalusia53b8e32011-06-04 08:16:41 +030028
29#include <plat/i2c.h>
Peter Ujfalusib22f9542011-06-07 10:26:46 +030030#include <plat/usb.h>
Peter Ujfalusia53b8e32011-06-04 08:16:41 +030031
32#include "twl-common.h"
Kevin Hilman46232a32011-11-23 14:43:01 -080033#include "pm.h"
Tero Kristo49c008e2012-02-20 12:26:08 +020034#include "voltage.h"
Kevin Hilman5941b812012-06-28 10:01:32 -070035#include "mux.h"
Peter Ujfalusia53b8e32011-06-04 08:16:41 +030036
37static struct i2c_board_info __initdata pmic_i2c_board_info = {
38 .addr = 0x48,
39 .flags = I2C_CLIENT_WAKE,
40};
41
Peter Ujfalusi8eaeb932012-04-03 11:56:51 +030042static struct i2c_board_info __initdata omap4_i2c1_board_info[] = {
43 {
44 .addr = 0x48,
45 .flags = I2C_CLIENT_WAKE,
46 },
47 {
48 I2C_BOARD_INFO("twl6040", 0x4b),
49 },
50};
51
Peter Ujfalusida0085f2012-06-21 01:36:02 -070052#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
Tero Kristo49c008e2012-02-20 12:26:08 +020053static int twl_set_voltage(void *data, int target_uV)
54{
55 struct voltagedomain *voltdm = (struct voltagedomain *)data;
56 return voltdm_scale(voltdm, target_uV);
57}
58
59static int twl_get_voltage(void *data)
60{
61 struct voltagedomain *voltdm = (struct voltagedomain *)data;
62 return voltdm_get_voltage(voltdm);
63}
Peter Ujfalusida0085f2012-06-21 01:36:02 -070064#endif
Tero Kristo49c008e2012-02-20 12:26:08 +020065
Peter Ujfalusia53b8e32011-06-04 08:16:41 +030066void __init omap_pmic_init(int bus, u32 clkrate,
67 const char *pmic_type, int pmic_irq,
68 struct twl4030_platform_data *pmic_data)
69{
Kevin Hilman265a2bc2012-07-16 16:56:15 -070070 omap_mux_init_signal("sys_nirq", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE);
Peter Ujfalusia53b8e32011-06-04 08:16:41 +030071 strncpy(pmic_i2c_board_info.type, pmic_type,
72 sizeof(pmic_i2c_board_info.type));
73 pmic_i2c_board_info.irq = pmic_irq;
74 pmic_i2c_board_info.platform_data = pmic_data;
75
76 omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1);
77}
Peter Ujfalusib22f9542011-06-07 10:26:46 +030078
Peter Ujfalusi8eaeb932012-04-03 11:56:51 +030079void __init omap4_pmic_init(const char *pmic_type,
80 struct twl4030_platform_data *pmic_data,
81 struct twl6040_platform_data *twl6040_data, int twl6040_irq)
82{
83 /* PMIC part*/
Kevin Hilman5941b812012-06-28 10:01:32 -070084 omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE);
Peter Ujfalusi8eaeb932012-04-03 11:56:51 +030085 strncpy(omap4_i2c1_board_info[0].type, pmic_type,
86 sizeof(omap4_i2c1_board_info[0].type));
87 omap4_i2c1_board_info[0].irq = OMAP44XX_IRQ_SYS_1N;
88 omap4_i2c1_board_info[0].platform_data = pmic_data;
89
90 /* TWL6040 audio IC part */
91 omap4_i2c1_board_info[1].irq = twl6040_irq;
92 omap4_i2c1_board_info[1].platform_data = twl6040_data;
93
94 omap_register_i2c_bus(1, 400, omap4_i2c1_board_info, 2);
95
96}
97
Kevin Hilman46232a32011-11-23 14:43:01 -080098void __init omap_pmic_late_init(void)
99{
Masanari Iida260db902012-07-12 00:56:57 +0900100 /* Init the OMAP TWL parameters (if PMIC has been registered) */
Peter Ujfalusi8eaeb932012-04-03 11:56:51 +0300101 if (pmic_i2c_board_info.irq)
102 omap3_twl_init();
103 if (omap4_i2c1_board_info[0].irq)
104 omap4_twl_init();
Kevin Hilman46232a32011-11-23 14:43:01 -0800105}
106
Peter Ujfalusid12d1fc2011-08-09 15:36:50 +0300107#if defined(CONFIG_ARCH_OMAP3)
Peter Ujfalusi827ed9a2011-06-07 10:28:54 +0300108static struct twl4030_usb_data omap3_usb_pdata = {
109 .usb_mode = T2_USB_MODE_ULPI,
110};
111
112static int omap3_batt_table[] = {
113/* 0 C */
11430800, 29500, 28300, 27100,
11526000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
11617200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
11711600, 11200, 10800, 10400, 10000, 9630, 9280, 8950, 8620, 8310,
1188020, 7730, 7460, 7200, 6950, 6710, 6470, 6250, 6040, 5830,
1195640, 5450, 5260, 5090, 4920, 4760, 4600, 4450, 4310, 4170,
1204040, 3910, 3790, 3670, 3550
121};
122
123static struct twl4030_bci_platform_data omap3_bci_pdata = {
124 .battery_tmp_tbl = omap3_batt_table,
125 .tblsize = ARRAY_SIZE(omap3_batt_table),
126};
127
128static struct twl4030_madc_platform_data omap3_madc_pdata = {
129 .irq_line = 1,
130};
131
Peter Ujfalusi4ae6df5e2011-05-31 15:21:13 +0300132static struct twl4030_codec_data omap3_codec;
Peter Ujfalusi827ed9a2011-06-07 10:28:54 +0300133
Peter Ujfalusi4ae6df5e2011-05-31 15:21:13 +0300134static struct twl4030_audio_data omap3_audio_pdata = {
Peter Ujfalusi827ed9a2011-06-07 10:28:54 +0300135 .audio_mclk = 26000000,
Peter Ujfalusi4ae6df5e2011-05-31 15:21:13 +0300136 .codec = &omap3_codec,
Peter Ujfalusi827ed9a2011-06-07 10:28:54 +0300137};
138
Peter Ujfalusib252b0ef2011-06-07 11:38:24 +0300139static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = {
140 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
141};
142
143static struct regulator_init_data omap3_vdac_idata = {
144 .constraints = {
145 .min_uV = 1800000,
146 .max_uV = 1800000,
147 .valid_modes_mask = REGULATOR_MODE_NORMAL
148 | REGULATOR_MODE_STANDBY,
149 .valid_ops_mask = REGULATOR_CHANGE_MODE
150 | REGULATOR_CHANGE_STATUS,
151 },
152 .num_consumer_supplies = ARRAY_SIZE(omap3_vdda_dac_supplies),
153 .consumer_supplies = omap3_vdda_dac_supplies,
154};
155
156static struct regulator_consumer_supply omap3_vpll2_supplies[] = {
157 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
Tomi Valkeinen7c68dd92011-08-03 14:00:57 +0300158 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
Peter Ujfalusib252b0ef2011-06-07 11:38:24 +0300159};
160
161static struct regulator_init_data omap3_vpll2_idata = {
162 .constraints = {
163 .min_uV = 1800000,
164 .max_uV = 1800000,
165 .valid_modes_mask = REGULATOR_MODE_NORMAL
166 | REGULATOR_MODE_STANDBY,
167 .valid_ops_mask = REGULATOR_CHANGE_MODE
168 | REGULATOR_CHANGE_STATUS,
169 },
170 .num_consumer_supplies = ARRAY_SIZE(omap3_vpll2_supplies),
171 .consumer_supplies = omap3_vpll2_supplies,
172};
173
Tero Kristo23e22a52012-02-20 12:26:07 +0200174static struct regulator_consumer_supply omap3_vdd1_supply[] = {
175 REGULATOR_SUPPLY("vcc", "mpu.0"),
176};
177
178static struct regulator_consumer_supply omap3_vdd2_supply[] = {
179 REGULATOR_SUPPLY("vcc", "l3_main.0"),
180};
181
182static struct regulator_init_data omap3_vdd1 = {
183 .constraints = {
184 .name = "vdd_mpu_iva",
185 .min_uV = 600000,
186 .max_uV = 1450000,
187 .valid_modes_mask = REGULATOR_MODE_NORMAL,
188 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
189 },
190 .num_consumer_supplies = ARRAY_SIZE(omap3_vdd1_supply),
191 .consumer_supplies = omap3_vdd1_supply,
192};
193
194static struct regulator_init_data omap3_vdd2 = {
195 .constraints = {
196 .name = "vdd_core",
197 .min_uV = 600000,
198 .max_uV = 1450000,
199 .valid_modes_mask = REGULATOR_MODE_NORMAL,
200 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
201 },
202 .num_consumer_supplies = ARRAY_SIZE(omap3_vdd2_supply),
203 .consumer_supplies = omap3_vdd2_supply,
204};
205
Tero Kristo49c008e2012-02-20 12:26:08 +0200206static struct twl_regulator_driver_data omap3_vdd1_drvdata = {
207 .get_voltage = twl_get_voltage,
208 .set_voltage = twl_set_voltage,
209};
210
211static struct twl_regulator_driver_data omap3_vdd2_drvdata = {
212 .get_voltage = twl_get_voltage,
213 .set_voltage = twl_set_voltage,
214};
215
Peter Ujfalusid12d1fc2011-08-09 15:36:50 +0300216void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
217 u32 pdata_flags, u32 regulators_flags)
218{
Tero Kristo49c008e2012-02-20 12:26:08 +0200219 if (!pmic_data->vdd1) {
220 omap3_vdd1.driver_data = &omap3_vdd1_drvdata;
221 omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva");
Tero Kristo23e22a52012-02-20 12:26:07 +0200222 pmic_data->vdd1 = &omap3_vdd1;
Tero Kristo49c008e2012-02-20 12:26:08 +0200223 }
224 if (!pmic_data->vdd2) {
225 omap3_vdd2.driver_data = &omap3_vdd2_drvdata;
226 omap3_vdd2_drvdata.data = voltdm_lookup("core");
Tero Kristo23e22a52012-02-20 12:26:07 +0200227 pmic_data->vdd2 = &omap3_vdd2;
Tero Kristo49c008e2012-02-20 12:26:08 +0200228 }
Peter Ujfalusid12d1fc2011-08-09 15:36:50 +0300229
230 /* Common platform data configurations */
231 if (pdata_flags & TWL_COMMON_PDATA_USB && !pmic_data->usb)
232 pmic_data->usb = &omap3_usb_pdata;
233
234 if (pdata_flags & TWL_COMMON_PDATA_BCI && !pmic_data->bci)
235 pmic_data->bci = &omap3_bci_pdata;
236
237 if (pdata_flags & TWL_COMMON_PDATA_MADC && !pmic_data->madc)
238 pmic_data->madc = &omap3_madc_pdata;
239
240 if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio)
241 pmic_data->audio = &omap3_audio_pdata;
242
243 /* Common regulator configurations */
244 if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
245 pmic_data->vdac = &omap3_vdac_idata;
246
247 if (regulators_flags & TWL_COMMON_REGULATOR_VPLL2 && !pmic_data->vpll2)
248 pmic_data->vpll2 = &omap3_vpll2_idata;
249}
250#endif /* CONFIG_ARCH_OMAP3 */
251
252#if defined(CONFIG_ARCH_OMAP4)
253static struct twl4030_usb_data omap4_usb_pdata = {
254 .phy_init = omap4430_phy_init,
255 .phy_exit = omap4430_phy_exit,
256 .phy_power = omap4430_phy_power,
257 .phy_set_clock = omap4430_phy_set_clk,
258 .phy_suspend = omap4430_phy_suspend,
259};
260
Tomi Valkeinen8a3d8952012-08-15 15:54:53 +0300261static struct regulator_consumer_supply omap4_vdda_hdmi_dac_supplies[] = {
262 REGULATOR_SUPPLY("vdda_hdmi_dac", "omapdss_hdmi"),
263};
264
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300265static struct regulator_init_data omap4_vdac_idata = {
266 .constraints = {
267 .min_uV = 1800000,
268 .max_uV = 1800000,
269 .valid_modes_mask = REGULATOR_MODE_NORMAL
270 | REGULATOR_MODE_STANDBY,
271 .valid_ops_mask = REGULATOR_CHANGE_MODE
272 | REGULATOR_CHANGE_STATUS,
273 },
Tomi Valkeinen8a3d8952012-08-15 15:54:53 +0300274 .num_consumer_supplies = ARRAY_SIZE(omap4_vdda_hdmi_dac_supplies),
275 .consumer_supplies = omap4_vdda_hdmi_dac_supplies,
Peter Ujfalusifde01902012-05-09 14:19:16 -0700276 .supply_regulator = "V2V1",
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300277};
278
279static struct regulator_init_data omap4_vaux2_idata = {
280 .constraints = {
281 .min_uV = 1200000,
282 .max_uV = 2800000,
283 .apply_uV = true,
284 .valid_modes_mask = REGULATOR_MODE_NORMAL
285 | REGULATOR_MODE_STANDBY,
286 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
287 | REGULATOR_CHANGE_MODE
288 | REGULATOR_CHANGE_STATUS,
289 },
290};
291
292static struct regulator_init_data omap4_vaux3_idata = {
293 .constraints = {
294 .min_uV = 1000000,
295 .max_uV = 3000000,
296 .apply_uV = true,
297 .valid_modes_mask = REGULATOR_MODE_NORMAL
298 | REGULATOR_MODE_STANDBY,
299 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
300 | REGULATOR_CHANGE_MODE
301 | REGULATOR_CHANGE_STATUS,
302 },
303};
304
305static struct regulator_consumer_supply omap4_vmmc_supply[] = {
306 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
307};
308
309/* VMMC1 for MMC1 card */
310static struct regulator_init_data omap4_vmmc_idata = {
311 .constraints = {
312 .min_uV = 1200000,
313 .max_uV = 3000000,
314 .apply_uV = true,
315 .valid_modes_mask = REGULATOR_MODE_NORMAL
316 | REGULATOR_MODE_STANDBY,
317 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
318 | REGULATOR_CHANGE_MODE
319 | REGULATOR_CHANGE_STATUS,
320 },
321 .num_consumer_supplies = ARRAY_SIZE(omap4_vmmc_supply),
322 .consumer_supplies = omap4_vmmc_supply,
323};
324
325static struct regulator_init_data omap4_vpp_idata = {
326 .constraints = {
327 .min_uV = 1800000,
328 .max_uV = 2500000,
329 .apply_uV = true,
330 .valid_modes_mask = REGULATOR_MODE_NORMAL
331 | REGULATOR_MODE_STANDBY,
332 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
333 | REGULATOR_CHANGE_MODE
334 | REGULATOR_CHANGE_STATUS,
335 },
336};
337
338static struct regulator_init_data omap4_vana_idata = {
339 .constraints = {
340 .min_uV = 2100000,
341 .max_uV = 2100000,
342 .valid_modes_mask = REGULATOR_MODE_NORMAL
343 | REGULATOR_MODE_STANDBY,
344 .valid_ops_mask = REGULATOR_CHANGE_MODE
345 | REGULATOR_CHANGE_STATUS,
346 },
347};
348
Tomi Valkeinen4e6a0ab2011-08-03 14:13:52 +0300349static struct regulator_consumer_supply omap4_vcxio_supply[] = {
350 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dss"),
351 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
352 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.1"),
353};
354
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300355static struct regulator_init_data omap4_vcxio_idata = {
356 .constraints = {
357 .min_uV = 1800000,
358 .max_uV = 1800000,
359 .valid_modes_mask = REGULATOR_MODE_NORMAL
360 | REGULATOR_MODE_STANDBY,
361 .valid_ops_mask = REGULATOR_CHANGE_MODE
362 | REGULATOR_CHANGE_STATUS,
Tomi Valkeinen4e6a0ab2011-08-03 14:13:52 +0300363 .always_on = true,
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300364 },
Tomi Valkeinen4e6a0ab2011-08-03 14:13:52 +0300365 .num_consumer_supplies = ARRAY_SIZE(omap4_vcxio_supply),
366 .consumer_supplies = omap4_vcxio_supply,
Peter Ujfalusifde01902012-05-09 14:19:16 -0700367 .supply_regulator = "V2V1",
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300368};
369
370static struct regulator_init_data omap4_vusb_idata = {
371 .constraints = {
372 .min_uV = 3300000,
373 .max_uV = 3300000,
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300374 .valid_modes_mask = REGULATOR_MODE_NORMAL
375 | REGULATOR_MODE_STANDBY,
376 .valid_ops_mask = REGULATOR_CHANGE_MODE
377 | REGULATOR_CHANGE_STATUS,
378 },
379};
380
381static struct regulator_init_data omap4_clk32kg_idata = {
382 .constraints = {
383 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
384 },
385};
386
Tero Kristoe160dda2012-02-22 12:40:40 +0200387static struct regulator_consumer_supply omap4_vdd1_supply[] = {
388 REGULATOR_SUPPLY("vcc", "mpu.0"),
389};
390
391static struct regulator_consumer_supply omap4_vdd2_supply[] = {
392 REGULATOR_SUPPLY("vcc", "iva.0"),
393};
394
395static struct regulator_consumer_supply omap4_vdd3_supply[] = {
396 REGULATOR_SUPPLY("vcc", "l3_main.0"),
397};
398
399static struct regulator_init_data omap4_vdd1 = {
400 .constraints = {
401 .name = "vdd_mpu",
402 .min_uV = 500000,
403 .max_uV = 1500000,
404 .valid_modes_mask = REGULATOR_MODE_NORMAL,
405 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
406 },
407 .num_consumer_supplies = ARRAY_SIZE(omap4_vdd1_supply),
408 .consumer_supplies = omap4_vdd1_supply,
409};
410
411static struct regulator_init_data omap4_vdd2 = {
412 .constraints = {
413 .name = "vdd_iva",
414 .min_uV = 500000,
415 .max_uV = 1500000,
416 .valid_modes_mask = REGULATOR_MODE_NORMAL,
417 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
418 },
419 .num_consumer_supplies = ARRAY_SIZE(omap4_vdd2_supply),
420 .consumer_supplies = omap4_vdd2_supply,
421};
422
423static struct regulator_init_data omap4_vdd3 = {
424 .constraints = {
425 .name = "vdd_core",
426 .min_uV = 500000,
427 .max_uV = 1500000,
428 .valid_modes_mask = REGULATOR_MODE_NORMAL,
429 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
430 },
431 .num_consumer_supplies = ARRAY_SIZE(omap4_vdd3_supply),
432 .consumer_supplies = omap4_vdd3_supply,
433};
434
435
436static struct twl_regulator_driver_data omap4_vdd1_drvdata = {
437 .get_voltage = twl_get_voltage,
438 .set_voltage = twl_set_voltage,
439};
440
441static struct twl_regulator_driver_data omap4_vdd2_drvdata = {
442 .get_voltage = twl_get_voltage,
443 .set_voltage = twl_set_voltage,
444};
445
446static struct twl_regulator_driver_data omap4_vdd3_drvdata = {
447 .get_voltage = twl_get_voltage,
448 .set_voltage = twl_set_voltage,
449};
450
Peter Ujfalusifde01902012-05-09 14:19:16 -0700451static struct regulator_consumer_supply omap4_v1v8_supply[] = {
452 REGULATOR_SUPPLY("vio", "1-004b"),
453};
454
455static struct regulator_init_data omap4_v1v8_idata = {
456 .constraints = {
457 .min_uV = 1800000,
458 .max_uV = 1800000,
459 .valid_modes_mask = REGULATOR_MODE_NORMAL
460 | REGULATOR_MODE_STANDBY,
461 .valid_ops_mask = REGULATOR_CHANGE_MODE
462 | REGULATOR_CHANGE_STATUS,
463 .always_on = true,
464 },
465 .num_consumer_supplies = ARRAY_SIZE(omap4_v1v8_supply),
466 .consumer_supplies = omap4_v1v8_supply,
467};
468
469static struct regulator_consumer_supply omap4_v2v1_supply[] = {
470 REGULATOR_SUPPLY("v2v1", "1-004b"),
471};
472
473static struct regulator_init_data omap4_v2v1_idata = {
474 .constraints = {
475 .min_uV = 2100000,
476 .max_uV = 2100000,
477 .valid_modes_mask = REGULATOR_MODE_NORMAL
478 | REGULATOR_MODE_STANDBY,
479 .valid_ops_mask = REGULATOR_CHANGE_MODE
480 | REGULATOR_CHANGE_STATUS,
481 },
482 .num_consumer_supplies = ARRAY_SIZE(omap4_v2v1_supply),
483 .consumer_supplies = omap4_v2v1_supply,
484};
485
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300486void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,
487 u32 pdata_flags, u32 regulators_flags)
488{
Tero Kristoe160dda2012-02-22 12:40:40 +0200489 if (!pmic_data->vdd1) {
490 omap4_vdd1.driver_data = &omap4_vdd1_drvdata;
491 omap4_vdd1_drvdata.data = voltdm_lookup("mpu");
492 pmic_data->vdd1 = &omap4_vdd1;
493 }
494
495 if (!pmic_data->vdd2) {
496 omap4_vdd2.driver_data = &omap4_vdd2_drvdata;
497 omap4_vdd2_drvdata.data = voltdm_lookup("iva");
498 pmic_data->vdd2 = &omap4_vdd2;
499 }
500
501 if (!pmic_data->vdd3) {
502 omap4_vdd3.driver_data = &omap4_vdd3_drvdata;
503 omap4_vdd3_drvdata.data = voltdm_lookup("core");
504 pmic_data->vdd3 = &omap4_vdd3;
505 }
506
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300507 /* Common platform data configurations */
508 if (pdata_flags & TWL_COMMON_PDATA_USB && !pmic_data->usb)
509 pmic_data->usb = &omap4_usb_pdata;
510
511 /* Common regulator configurations */
512 if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
513 pmic_data->vdac = &omap4_vdac_idata;
514
515 if (regulators_flags & TWL_COMMON_REGULATOR_VAUX2 && !pmic_data->vaux2)
516 pmic_data->vaux2 = &omap4_vaux2_idata;
517
518 if (regulators_flags & TWL_COMMON_REGULATOR_VAUX3 && !pmic_data->vaux3)
519 pmic_data->vaux3 = &omap4_vaux3_idata;
520
521 if (regulators_flags & TWL_COMMON_REGULATOR_VMMC && !pmic_data->vmmc)
522 pmic_data->vmmc = &omap4_vmmc_idata;
523
524 if (regulators_flags & TWL_COMMON_REGULATOR_VPP && !pmic_data->vpp)
525 pmic_data->vpp = &omap4_vpp_idata;
526
527 if (regulators_flags & TWL_COMMON_REGULATOR_VANA && !pmic_data->vana)
528 pmic_data->vana = &omap4_vana_idata;
529
530 if (regulators_flags & TWL_COMMON_REGULATOR_VCXIO && !pmic_data->vcxio)
531 pmic_data->vcxio = &omap4_vcxio_idata;
532
533 if (regulators_flags & TWL_COMMON_REGULATOR_VUSB && !pmic_data->vusb)
534 pmic_data->vusb = &omap4_vusb_idata;
535
536 if (regulators_flags & TWL_COMMON_REGULATOR_CLK32KG &&
537 !pmic_data->clk32kg)
538 pmic_data->clk32kg = &omap4_clk32kg_idata;
Peter Ujfalusifde01902012-05-09 14:19:16 -0700539
540 if (regulators_flags & TWL_COMMON_REGULATOR_V1V8 && !pmic_data->v1v8)
541 pmic_data->v1v8 = &omap4_v1v8_idata;
542
543 if (regulators_flags & TWL_COMMON_REGULATOR_V2V1 && !pmic_data->v2v1)
544 pmic_data->v2v1 = &omap4_v2v1_idata;
Peter Ujfalusib22f9542011-06-07 10:26:46 +0300545}
Peter Ujfalusid12d1fc2011-08-09 15:36:50 +0300546#endif /* CONFIG_ARCH_OMAP4 */