1 #include <linux/regulator/machine.h>
2 #include <linux/i2c/twl.h>
6 #define TWL60xx_IRQ_BASE IRQ_BOARD_BASE
7 #ifdef CONFIG_TWL4030_CORE
8 #define TWL60xx_BASE_NR_IRQS 24
10 #define TWL60xx_BASE_NR_IRQS 0
12 #define TWL60xx_IRQ_END (TWL60xx_IRQ_BASE + TWL60xx_BASE_NR_IRQS)
15 #ifdef CONFIG_TWL4030_CORE
16 #define VREG_VOLTAGE 3
17 #define VREG_VOLTAGE_DVS_SMPS 3
18 static inline int twl_reg_read(unsigned base, unsigned slave_subgp, unsigned offset)
22 status = twl_i2c_read_u8(slave_subgp,&value, base + offset);
23 return (status < 0) ? status : value;
27 static inline int twl_reg_write(unsigned base, unsigned slave_subgp, unsigned offset,
30 return twl_i2c_write_u8(slave_subgp,value, base + offset);
33 int tps80032_pre_init(void){
36 printk("%s\n", __func__);
41 int tps80032_set_init(void)
43 struct regulator *dcdc;
44 struct regulator *ldo;
45 printk("%s\n", __func__);
47 ldo = regulator_get(NULL, "ldo1"); //vcca_33
48 regulator_set_voltage(ldo, 3300000, 3300000);
49 regulator_enable(ldo);
50 // printk("%s set ldo1 vcca_33=%dmV end\n", __func__, regulator_get_voltage(ldo));
54 ldo = regulator_get(NULL, "ldo4"); // vdd_11
55 regulator_set_voltage(ldo, 1100000, 1100000);
56 regulator_enable(ldo);
57 // printk("%s set ldo4 vdd_11=%dmV end\n", __func__, regulator_get_voltage(ldo));
61 dcdc = regulator_get(NULL, "smps4");
62 regulator_set_voltage(dcdc,3000000,3000000);
63 regulator_enable(dcdc);
64 // printk("%s set dcdc4 vcc_io=%dmV end\n", __func__, regulator_get_voltage(dcdc));
68 ldo = regulator_get(NULL, "ldo2"); // vdd_usb11
69 regulator_set_voltage(ldo, 1100000, 1100000);
70 regulator_enable(ldo);
71 // printk("%s set ldo2 vdd_usb11=%dmV end\n", __func__, regulator_get_voltage(ldo));
75 ldo = regulator_get(NULL, "ldo5"); // vcc_25
76 regulator_set_voltage(ldo, 2500000, 2500000);
77 regulator_enable(ldo);
78 // printk("%s set ldo5 vcc_25=%dmV end\n", __func__, regulator_get_voltage(ldo));
82 ldo = regulator_get(NULL, "ldousb"); // vcc_usb33
83 regulator_set_voltage(ldo, 3300000, 3300000);
84 regulator_enable(ldo);
85 // printk("%s set ldousb vcc_usb33=%dmV end\n", __func__, regulator_get_voltage(ldo));
89 dcdc = regulator_get(NULL, "vdd_cpu"); // vdd_arm
90 regulator_set_voltage(dcdc,1100000,1100000);
91 regulator_enable(dcdc);
92 printk("%s set dcdc1 vdd_cpu=%dmV end\n", __func__, regulator_get_voltage(dcdc));
96 dcdc = regulator_get(NULL, "vdd_core"); //vdd_log
97 regulator_set_voltage(dcdc,1100000,1100000);
98 regulator_enable(dcdc);
99 printk("%s set dcdc2 vdd_core=%dmV end\n", __func__, regulator_get_voltage(dcdc));
103 dcdc = regulator_get(NULL, "smps3"); //vcc_ddr
104 regulator_set_voltage(dcdc,1800000,1800000);
105 regulator_enable(dcdc);
106 // printk("%s set dcdc3 vcc_lpddr2_1v8=%dmV end\n", __func__, regulator_get_voltage(dcdc));
110 dcdc = regulator_get(NULL, "smps5");
111 regulator_set_voltage(dcdc,1200000,1200000);
112 regulator_enable(dcdc);
113 // printk("%s set dcdc5 vcc_lpddr2_1v2=%dmV end\n", __func__, regulator_get_voltage(dcdc));
118 ldo = regulator_get(NULL, "ldo3"); //vcc_nandflash
119 regulator_set_voltage(ldo, 3300000, 3300000);
120 regulator_enable(ldo);
121 // printk("%s set ldo3 vcc_nandflash=%dmV end\n", __func__, regulator_get_voltage(ldo));
125 ldo = regulator_get(NULL, "ldo6"); //codecvdd_1v8
126 regulator_set_voltage(ldo, 1800000, 1800000);
127 regulator_enable(ldo);
128 // printk("%s set ldo6 codecvdd_1v8=%dmV end\n", __func__, regulator_get_voltage(ldo));
132 ldo = regulator_get(NULL, "ldo7"); //vcc_lcd
133 regulator_set_voltage(ldo, 3000000, 3000000);
134 regulator_enable(ldo);
135 // printk("%s set ldo7 vcc_lcd=%dmV end\n", __func__, regulator_get_voltage(ldo));
139 ldo = regulator_get(NULL, "ldoln"); //vcccodec_io
140 regulator_set_voltage(ldo, 3300000, 3300000);
141 regulator_enable(ldo);
142 // printk("%s set ldoln vcccodec_io=%dmV end\n", __func__, regulator_get_voltage(ldo));
146 ldo = regulator_get(NULL, "vana"); //vana_out
147 regulator_set_voltage(ldo, 2500000, 2500000);
148 // regulator_set_suspend_voltage(ldo, 2500000);
149 regulator_enable(ldo);
150 printk("%s set vana vana_out=%dmV end\n", __func__, regulator_get_voltage(ldo));
155 printk("tps80032_set_init end.\n");
160 static struct regulator_consumer_supply tps80032_smps1_supply[] = {
165 static struct regulator_consumer_supply tps80032_smps2_supply[] = {
167 .supply = "vdd_core",
170 static struct regulator_consumer_supply tps80032_smps3_supply[] = {
175 static struct regulator_consumer_supply tps80032_smps4_supply[] = {
180 static struct regulator_consumer_supply tps80032_smps5_supply[] = {
185 static struct regulator_consumer_supply tps80032_ldo1_supply[] = {
190 static struct regulator_consumer_supply tps80032_ldo2_supply[] = {
196 static struct regulator_consumer_supply tps80032_ldo3_supply[] = {
201 static struct regulator_consumer_supply tps80032_ldo4_supply[] = {
206 static struct regulator_consumer_supply tps80032_ldo5_supply[] = {
211 static struct regulator_consumer_supply tps80032_ldo6_supply[] = {
216 static struct regulator_consumer_supply tps80032_ldo7_supply[] = {
222 static struct regulator_consumer_supply tps80032_ldoln_supply[] = {
227 static struct regulator_consumer_supply tps80032_ldousb_supply[] = {
232 static struct regulator_consumer_supply tps80032_ldovana_supply[] = {
238 static struct regulator_init_data tps80032_smps1 = {
245 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
246 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
249 .num_consumer_supplies = ARRAY_SIZE(tps80032_smps1_supply),
250 .consumer_supplies = tps80032_smps1_supply,
254 static struct regulator_init_data tps80032_smps2 = {
261 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
262 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
265 .num_consumer_supplies = ARRAY_SIZE(tps80032_smps2_supply),
266 .consumer_supplies = tps80032_smps2_supply,
272 static struct regulator_init_data tps80032_smps3 = {
279 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
280 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
283 .num_consumer_supplies = ARRAY_SIZE(tps80032_smps3_supply),
284 .consumer_supplies = tps80032_smps3_supply,
289 static struct regulator_init_data tps80032_smps4 = {
296 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
297 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
300 .num_consumer_supplies = ARRAY_SIZE(tps80032_smps4_supply),
301 .consumer_supplies = tps80032_smps4_supply,
304 static struct regulator_init_data tps80032_smps5 = {
311 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
312 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
315 .num_consumer_supplies = ARRAY_SIZE(tps80032_smps5_supply),
316 .consumer_supplies = tps80032_smps5_supply,
318 static struct regulator_init_data tps80032_ldo1 = {
325 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
326 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
329 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo1_supply),
330 .consumer_supplies = tps80032_ldo1_supply,
334 static struct regulator_init_data tps80032_ldo2 = {
341 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
342 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
345 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo2_supply),
346 .consumer_supplies = tps80032_ldo2_supply,
350 static struct regulator_init_data tps80032_ldo3 = {
357 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
358 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
361 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo3_supply),
362 .consumer_supplies = tps80032_ldo3_supply,
366 static struct regulator_init_data tps80032_ldo4 = {
373 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
374 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
377 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo4_supply),
378 .consumer_supplies = tps80032_ldo4_supply,
382 static struct regulator_init_data tps80032_ldo5 = {
389 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
390 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
393 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo5_supply),
394 .consumer_supplies = tps80032_ldo5_supply,
398 static struct regulator_init_data tps80032_ldo6 = {
405 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
406 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
409 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo6_supply),
410 .consumer_supplies = tps80032_ldo6_supply,
414 static struct regulator_init_data tps80032_ldo7 = {
421 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
422 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
425 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldo7_supply),
426 .consumer_supplies = tps80032_ldo7_supply,
430 static struct regulator_init_data tps80032_ldoln = {
437 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
438 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
441 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldoln_supply),
442 .consumer_supplies = tps80032_ldoln_supply,
446 static struct regulator_init_data tps80032_ldousb = {
453 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
454 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
457 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldousb_supply),
458 .consumer_supplies = tps80032_ldousb_supply,
462 static struct regulator_init_data tps80032_ldovana = {
469 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
470 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
473 .num_consumer_supplies = ARRAY_SIZE(tps80032_ldovana_supply),
474 .consumer_supplies = tps80032_ldovana_supply,
478 static struct twl4030_platform_data tps80032_data = {
479 .irq_base = TWL60xx_IRQ_BASE,
480 .irq_end = TWL60xx_IRQ_END,
481 //.irq = RK29_PIN0_PA1,
482 .pre_init = tps80032_pre_init,
483 .set_init = tps80032_set_init,
486 .ldo1 = &tps80032_ldo1,
487 .ldo2 = &tps80032_ldo2,
488 .ldo3 = &tps80032_ldo3,
489 .ldo4 = &tps80032_ldo4,
490 .ldo5 = &tps80032_ldo5,
491 .ldo6 = &tps80032_ldo6,
492 .ldo7 = &tps80032_ldo7,
493 .ldoln = &tps80032_ldoln,
494 .ldousb =&tps80032_ldousb,
495 .vana = &tps80032_ldovana,
497 .smps1 = &tps80032_smps1,
498 .smps2= &tps80032_smps2,
499 .smps3 = &tps80032_smps3,
500 .smps4 = &tps80032_smps4,
501 .smps5 = &tps80032_smps5,