1 #include <linux/regulator/machine.h>
2 #include <linux/i2c/twl.h>
3 #include <linux/mfd/tps65910.h>
5 #include <linux/platform_device.h>
8 #include <mach/iomux.h>
10 #define grf_readl(offset) readl_relaxed(RK30_GRF_BASE + offset)
11 #define grf_writel(v, offset) do { writel_relaxed(v, RK30_GRF_BASE + offset); dsb(); } while (0)
13 #define CRU_CLKGATE5_CON_ADDR 0x00e4
14 #define GRF_GPIO6L_DIR_ADDR 0x0030
15 #define GRF_GPIO6L_DO_ADDR 0x0068
16 #define GRF_GPIO6L_EN_ADDR 0x00a0
17 #define GPIO6_PB3_DIR_OUT 0x08000800
18 #define GPIO6_PB3_DO_LOW 0x08000000
19 #define GPIO6_PB3_DO_HIGH 0x08000800
20 #define GPIO6_PB3_EN_MASK 0x08000800
21 #define GPIO6_PB3_UNEN_MASK 0x08000000
22 #define GPIO6_PB1_DIR_OUT 0x02000200
23 #define GPIO6_PB1_DO_LOW 0x02000000
24 #define GPIO6_PB1_DO_HIGH 0x02000200
25 #define GPIO6_PB1_EN_MASK 0x02000200
26 #define GPIO6_PB1_UNEN_MASK 0x02000000
28 #ifdef CONFIG_MFD_TPS65910
29 #define PMU_POWER_SLEEP RK30_PIN6_PB1
30 extern int platform_device_register(struct platform_device *pdev);
32 int tps65910_pre_init(struct tps65910 *tps65910){
38 printk("%s,line=%d\n", __func__,__LINE__);
39 //gpio_request(PMU_POWER_SLEEP, "NULL");
40 //gpio_direction_output(PMU_POWER_SLEEP, GPIO_HIGH);
42 val = tps65910_reg_read(tps65910, TPS65910_DEVCTRL2);
44 printk(KERN_ERR "Unable to read TPS65910_DEVCTRL2 reg\n");
47 /* Set sleep state active high and allow device turn-off after PWRON long press */
48 val |= (DEVCTRL2_SLEEPSIG_POL_MASK | DEVCTRL2_PWON_LP_OFF_MASK);
50 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL2, val);
52 printk(KERN_ERR "Unable to write TPS65910_DEVCTRL2 reg\n");
58 val = tps65910_reg_read(tps65910, TPS65910_DCDCCTRL);
60 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
64 val &= ~DEVCTRL_DEV_OFF_MASK;
65 val &= ~DEVCTRL_DEV_SLP_MASK;
66 err = tps65910_reg_write(tps65910, TPS65910_DCDCCTRL, val);
68 printk(KERN_ERR "Unable to write TPS65910_DCDCCTRL reg\n");
72 /* Set the maxinum load current */
74 val = tps65910_reg_read(tps65910, TPS65910_VDD1);
76 printk(KERN_ERR "Unable to read TPS65910_VDD1 reg\n");
80 val |= (1<<5); //when 1: 1.5 A
81 val |= (0x07<<2); //TSTEP[2:0] = 111 : 2.5 mV/¦Ìs(sampling 3 Mhz/5)
82 err = tps65910_reg_write(tps65910, TPS65910_VDD1, val);
84 printk(KERN_ERR "Unable to write TPS65910_VDD1 reg\n");
89 val = tps65910_reg_read(tps65910, TPS65910_VDD2);
91 printk(KERN_ERR "Unable to read TPS65910_VDD2 reg\n");
95 val |= (1<<5); //when 1: 1.5 A
96 err = tps65910_reg_write(tps65910, TPS65910_VDD2, val);
98 printk(KERN_ERR "Unable to write TPS65910_VDD2 reg\n");
103 val = tps65910_reg_read(tps65910, TPS65910_VIO);
105 printk(KERN_ERR "Unable to read TPS65910_VIO reg\n");
109 val |= (1<<6); //when 01: 1.0 A
110 err = tps65910_reg_write(tps65910, TPS65910_VIO, val);
112 printk(KERN_ERR "Unable to write TPS65910_VIO reg\n");
116 /* Mask ALL interrupts */
117 err = tps65910_reg_write(tps65910,TPS65910_INT_MSK, 0xFF);
119 printk(KERN_ERR "Unable to write TPS65910_INT_MSK reg\n");
123 err = tps65910_reg_write(tps65910, TPS65910_INT_MSK2, 0x03);
125 printk(KERN_ERR "Unable to write TPS65910_INT_MSK2 reg\n");
129 /* Set RTC Power, disable Smart Reflex in DEVCTRL_REG */
132 val |= (DEVCTRL_SR_CTL_I2C_SEL_MASK);
133 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL, val);
135 printk(KERN_ERR "Unable to write TPS65910_DEVCTRL reg\n");
138 printk(KERN_INFO "TPS65910 Set default voltage.\n");
141 //read sleep control register for debug
144 err = tps65910_reg_read(tps65910, &val, TPS65910_DEVCTRL+i);
146 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
150 printk("%s.......is 0x%04x\n",__FUNCTION__,val);
155 //sleep control register
156 /*set func when in sleep mode */
157 val = tps65910_reg_read(tps65910, TPS65910_DEVCTRL);
159 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
164 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL, val);
166 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
167 \n", TPS65910_VDIG1);
171 /* open ldo when in sleep mode */
172 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_KEEP_LDO_ON);
174 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
179 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_KEEP_LDO_ON, val);
181 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
182 \n", TPS65910_VDIG1);
186 /*set dc mode when in sleep mode */
187 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_KEEP_RES_ON);
189 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
194 val &= ~(0x07); //set vdd1 vdd2 vio in pfm mode when in sleep
195 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_KEEP_RES_ON, val);
197 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
198 \n", TPS65910_VDIG1);
202 /*close ldo when in sleep mode */
203 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_SET_LDO_OFF);
205 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
210 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_SET_LDO_OFF, val);
212 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
213 \n", TPS65910_VDIG1);
218 //read sleep control register for debug
221 err = tps65910_reg_read(tps65910, &val, TPS65910_DEVCTRL+i);
223 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
227 printk("%s.......is 0x%4x\n",__FUNCTION__,val);
232 /**********************set arm in pwm ****************/
233 val = tps65910_reg_read(tps65910, TPS65910_DCDCCTRL);
235 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
240 err = tps65910_reg_write(tps65910, TPS65910_DCDCCTRL, val);
242 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
243 \n", TPS65910_VDIG1);
246 /************************************************/
248 printk("%s,line=%d\n", __func__,__LINE__);
252 int tps65910_post_init(struct tps65910 *tps65910)
254 struct regulator *dcdc;
255 struct regulator *ldo;
256 printk("%s,line=%d\n", __func__,__LINE__);
258 g_pmic_type = PMIC_TYPE_TPS65910;
259 printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
261 #ifdef CONFIG_RK30_PWM_REGULATOR
262 platform_device_register(&pwm_regulator_device[0]);
265 dcdc = regulator_get(NULL, "vio"); //vcc_io
266 regulator_set_voltage(dcdc, 3000000, 3000000);
267 regulator_enable(dcdc);
268 printk("%s set vio vcc_io=%dmV end\n", __func__, regulator_get_voltage(dcdc));
272 ldo = regulator_get(NULL, "vpll"); // vcc25
273 regulator_set_voltage(ldo, 2500000, 2500000);
274 regulator_enable(ldo);
275 printk("%s set vpll vdd11=%dmV end\n", __func__, regulator_get_voltage(ldo));
279 ldo = regulator_get(NULL, "vdig2"); // vdd11
280 regulator_set_voltage(ldo, 1100000, 1100000);
281 regulator_enable(ldo);
282 printk("%s set vdig2 vdd11=%dmV end\n", __func__, regulator_get_voltage(ldo));
286 ldo = regulator_get(NULL, "vaux33"); //vcc_tp
287 regulator_set_voltage(ldo, 3300000, 3300000);
288 regulator_enable(ldo);
289 printk("%s set vaux33 vcc_tp=%dmV end\n", __func__, regulator_get_voltage(ldo));
293 dcdc = regulator_get(NULL, "vdd_cpu"); //vdd_cpu
294 regulator_set_voltage(dcdc, 1200000, 1200000);
295 regulator_enable(dcdc);
296 printk("%s set vdd1 vdd_cpu=%dmV end\n", __func__, regulator_get_voltage(dcdc));
300 dcdc = regulator_get(NULL, "vdd2"); //vcc_ddr
301 regulator_set_voltage(dcdc, 1200000, 1200000); // 1.5*4/5 = 1.2 and Vout=1.5v
302 regulator_enable(dcdc);
303 printk("%s set vdd2 vcc_ddr=%dmV end\n", __func__, regulator_get_voltage(dcdc));
307 ldo = regulator_get(NULL, "vdig1"); //vcc18_cif
308 regulator_set_voltage(ldo, 1800000, 1800000);
309 regulator_enable(ldo);
310 printk("%s set vdig1 vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
314 dcdc = regulator_get(NULL, "vaux1"); //vcc25_hdmi
315 regulator_set_voltage(dcdc,2500000,2500000);
316 regulator_enable(dcdc);
317 printk("%s set vaux1 vcc25_hdmi=%dmV end\n", __func__, regulator_get_voltage(dcdc));
321 ldo = regulator_get(NULL, "vaux2"); //vcca33
322 regulator_set_voltage(ldo, 3300000, 3300000);
323 regulator_enable(ldo);
324 printk("%s set vaux2 vcca33=%dmV end\n", __func__, regulator_get_voltage(ldo));
328 ldo = regulator_get(NULL, "vdac"); // vccio_wl
329 regulator_set_voltage(ldo,1800000,1800000);
330 regulator_enable(ldo);
331 printk("%s set vdac vccio_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
335 ldo = regulator_get(NULL, "vmmc"); //vcc28_cif
336 regulator_set_voltage(ldo,2800000,2800000);
337 regulator_enable(ldo);
338 printk("%s set vmmc vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
342 printk("%s,line=%d END\n", __func__,__LINE__);
347 static struct regulator_consumer_supply tps65910_smps1_supply[] = {
355 static struct regulator_consumer_supply tps65910_smps2_supply[] = {
361 static struct regulator_consumer_supply tps65910_smps3_supply[] = {
366 static struct regulator_consumer_supply tps65910_smps4_supply[] = {
371 static struct regulator_consumer_supply tps65910_ldo1_supply[] = {
376 static struct regulator_consumer_supply tps65910_ldo2_supply[] = {
382 static struct regulator_consumer_supply tps65910_ldo3_supply[] = {
387 static struct regulator_consumer_supply tps65910_ldo4_supply[] = {
392 static struct regulator_consumer_supply tps65910_ldo5_supply[] = {
397 static struct regulator_consumer_supply tps65910_ldo6_supply[] = {
402 static struct regulator_consumer_supply tps65910_ldo7_supply[] = {
408 static struct regulator_consumer_supply tps65910_ldo8_supply[] = {
414 static struct regulator_init_data tps65910_smps1 = {
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(tps65910_smps1_supply),
426 .consumer_supplies = tps65910_smps1_supply,
430 static struct regulator_init_data tps65910_smps2 = {
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(tps65910_smps2_supply),
442 .consumer_supplies = tps65910_smps2_supply,
446 static struct regulator_init_data tps65910_smps3 = {
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(tps65910_smps3_supply),
458 .consumer_supplies = tps65910_smps3_supply,
461 static struct regulator_init_data tps65910_smps4 = {
468 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
469 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
472 .num_consumer_supplies = ARRAY_SIZE(tps65910_smps4_supply),
473 .consumer_supplies = tps65910_smps4_supply,
475 static struct regulator_init_data tps65910_ldo1 = {
482 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
483 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
486 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo1_supply),
487 .consumer_supplies = tps65910_ldo1_supply,
491 static struct regulator_init_data tps65910_ldo2 = {
498 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
499 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
502 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo2_supply),
503 .consumer_supplies = tps65910_ldo2_supply,
507 static struct regulator_init_data tps65910_ldo3 = {
514 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
515 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
518 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo3_supply),
519 .consumer_supplies = tps65910_ldo3_supply,
523 static struct regulator_init_data tps65910_ldo4 = {
530 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
531 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
534 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo4_supply),
535 .consumer_supplies = tps65910_ldo4_supply,
539 static struct regulator_init_data tps65910_ldo5 = {
546 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
547 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
550 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo5_supply),
551 .consumer_supplies = tps65910_ldo5_supply,
555 static struct regulator_init_data tps65910_ldo6 = {
562 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
563 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
566 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo6_supply),
567 .consumer_supplies = tps65910_ldo6_supply,
571 static struct regulator_init_data tps65910_ldo7 = {
578 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
579 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
582 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo7_supply),
583 .consumer_supplies = tps65910_ldo7_supply,
587 static struct regulator_init_data tps65910_ldo8 = {
594 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
595 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
598 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo8_supply),
599 .consumer_supplies = tps65910_ldo8_supply,
602 void __sramfunc board_pmu_tps65910_suspend(void)
604 grf_writel(GPIO6_PB1_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
605 grf_writel(GPIO6_PB1_DO_HIGH, GRF_GPIO6L_DO_ADDR); //set gpio6_b1 output low
606 grf_writel(GPIO6_PB1_EN_MASK, GRF_GPIO6L_EN_ADDR);
608 void __sramfunc board_pmu_tps65910_resume(void)
610 grf_writel(GPIO6_PB1_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
611 grf_writel(GPIO6_PB1_DO_LOW, GRF_GPIO6L_DO_ADDR); //set gpio6_b1 output low
612 grf_writel(GPIO6_PB1_EN_MASK, GRF_GPIO6L_EN_ADDR);
613 #ifdef CONFIG_CLK_SWITCH_TO_32K //switch clk to 24M
614 sram_32k_udelay(10000);
620 static struct tps65910_board tps65910_data = {
621 .irq = (unsigned)TPS65910_HOST_IRQ,
622 .irq_base = IRQ_BOARD_BASE,
623 .gpio_base = TPS65910_GPIO_EXPANDER_BASE,
625 .pre_init = tps65910_pre_init,
626 .post_init = tps65910_post_init,
628 //TPS65910_NUM_REGS = 13
630 .tps65910_pmic_init_data[TPS65910_REG_VRTC] = NULL,
631 .tps65910_pmic_init_data[TPS65910_REG_VIO] = &tps65910_smps4,
632 .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &tps65910_smps1,
633 .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &tps65910_smps2,
634 .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &tps65910_smps3,
635 .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &tps65910_ldo1,
636 .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &tps65910_ldo2,
637 .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &tps65910_ldo8,
638 .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &tps65910_ldo7,
639 .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &tps65910_ldo3,
640 .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &tps65910_ldo4,
641 .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &tps65910_ldo5,
642 .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &tps65910_ldo6,