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 #ifdef CONFIG_MFD_TPS65910
12 extern int platform_device_register(struct platform_device *pdev);
14 int tps65910_pre_init(struct tps65910 *tps65910){
20 printk("%s,line=%d\n", __func__,__LINE__);
21 #ifdef CONFIG_RK_CONFIG
22 if(sram_gpio_init(get_port_config(pmic_slp).gpio, &pmic_sleep) < 0){
23 printk(KERN_ERR "sram_gpio_init failed\n");
26 if(port_output_init(pmic_slp, 0, "pmic_slp") < 0){
27 printk(KERN_ERR "port_output_init failed\n");
31 if(sram_gpio_init(PMU_POWER_SLEEP, &pmic_sleep) < 0){
32 printk(KERN_ERR "sram_gpio_init failed\n");
36 gpio_request(PMU_POWER_SLEEP, "NULL");
37 gpio_direction_output(PMU_POWER_SLEEP, GPIO_LOW);
40 val = tps65910_reg_read(tps65910, TPS65910_DEVCTRL2);
42 printk(KERN_ERR "Unable to read TPS65910_DEVCTRL2 reg\n");
45 /* Set sleep state active high and allow device turn-off after PWRON long press */
46 val |= (DEVCTRL2_SLEEPSIG_POL_MASK | DEVCTRL2_PWON_LP_OFF_MASK);
48 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL2, val);
50 printk(KERN_ERR "Unable to write TPS65910_DEVCTRL2 reg\n");
55 val = tps65910_reg_read(tps65910, TPS65910_DCDCCTRL);
57 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
61 val &= ~DEVCTRL_DEV_OFF_MASK;
62 val &= ~DEVCTRL_DEV_SLP_MASK;
63 err = tps65910_reg_write(tps65910, TPS65910_DCDCCTRL, val);
65 printk(KERN_ERR "Unable to write TPS65910_DCDCCTRL reg\n");
69 /* Set the maxinum load current */
71 val = tps65910_reg_read(tps65910, TPS65910_VDD1);
73 printk(KERN_ERR "Unable to read TPS65910_VDD1 reg\n");
77 val |= (1<<5); //when 1: 1.5 A
78 val |= (0x07<<2); //TSTEP[2:0] = 111 : 2.5 mV/|¨¬s(sampling 3 Mhz/5)
79 err = tps65910_reg_write(tps65910, TPS65910_VDD1, val);
81 printk(KERN_ERR "Unable to write TPS65910_VDD1 reg\n");
86 val = tps65910_reg_read(tps65910, TPS65910_VDD2);
88 printk(KERN_ERR "Unable to read TPS65910_VDD2 reg\n");
92 val |= (1<<5); //when 1: 1.5 A
93 err = tps65910_reg_write(tps65910, TPS65910_VDD2, val);
95 printk(KERN_ERR "Unable to write TPS65910_VDD2 reg\n");
100 val = tps65910_reg_read(tps65910, TPS65910_VIO);
102 printk(KERN_ERR "Unable to read TPS65910_VIO reg\n");
106 val |= (1<<6); //when 01: 1.0 A
107 err = tps65910_reg_write(tps65910, TPS65910_VIO, val);
109 printk(KERN_ERR "Unable to write TPS65910_VIO reg\n");
113 /* Mask ALL interrupts */
114 err = tps65910_reg_write(tps65910,TPS65910_INT_MSK, 0xFF);
116 printk(KERN_ERR "Unable to write TPS65910_INT_MSK reg\n");
120 err = tps65910_reg_write(tps65910, TPS65910_INT_MSK2, 0x03);
122 printk(KERN_ERR "Unable to write TPS65910_INT_MSK2 reg\n");
126 /* Set RTC Power, disable Smart Reflex in DEVCTRL_REG */
129 val |= (DEVCTRL_SR_CTL_I2C_SEL_MASK);
130 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL, val);
132 printk(KERN_ERR "Unable to write TPS65910_DEVCTRL reg\n");
135 printk(KERN_INFO "TPS65910 Set default voltage.\n");
138 //read sleep control register for debug
141 err = tps65910_reg_read(tps65910, &val, TPS65910_DEVCTRL+i);
143 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
147 printk("%s.......is 0x%04x\n",__FUNCTION__,val);
152 //sleep control register
153 /*set func when in sleep mode */
154 val = tps65910_reg_read(tps65910, TPS65910_DEVCTRL);
156 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
161 err = tps65910_reg_write(tps65910, TPS65910_DEVCTRL, val);
163 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
164 \n", TPS65910_VDIG1);
168 /* open ldo when in sleep mode */
169 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_KEEP_LDO_ON);
171 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
176 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_KEEP_LDO_ON, val);
178 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
179 \n", TPS65910_VDIG1);
183 /*set dc mode when in sleep mode */
184 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_KEEP_RES_ON);
186 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
191 val &= ~(0x07); //set vdd1 vdd2 vio in pfm mode when in sleep
192 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_KEEP_RES_ON, val);
194 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
195 \n", TPS65910_VDIG1);
199 /*close ldo when in sleep mode */
200 val = tps65910_reg_read(tps65910, TPS65910_SLEEP_SET_LDO_OFF);
202 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
207 err = tps65910_reg_write(tps65910, TPS65910_SLEEP_SET_LDO_OFF, val);
209 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
210 \n", TPS65910_VDIG1);
216 //read sleep control register for debug
219 err = tps65910_reg_read(tps65910, &val, TPS65910_DEVCTRL+i);
221 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
225 printk("%s.......is 0x%4x\n",__FUNCTION__,val);
230 /**********************set arm in pwm ****************/
231 val = tps65910_reg_read(tps65910, TPS65910_DCDCCTRL);
233 printk(KERN_ERR "Unable to read TPS65910_DCDCCTRL reg\n");
238 err = tps65910_reg_write(tps65910, TPS65910_DCDCCTRL, val);
240 printk(KERN_ERR "Unable to read TPS65910 Reg at offset 0x%x= \
241 \n", TPS65910_VDIG1);
244 /************************************************/
246 printk("%s,line=%d\n", __func__,__LINE__);
251 int tps65910_post_init(struct tps65910 *tps65910)
253 struct regulator *dcdc;
254 struct regulator *ldo;
256 printk("%s,line=%d\n", __func__,__LINE__);
258 #ifndef CONFIG_RK_CONFIG
259 g_pmic_type = PMIC_TYPE_TPS65910;
261 printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
263 #ifdef CONFIG_RK30_PWM_REGULATOR
264 platform_device_register(&pwm_regulator_device[0]);
267 for(i = 0; i < ARRAY_SIZE(tps65910_dcdc_info); i++)
269 if(tps65910_dcdc_info[i].min_uv == 0 && tps65910_dcdc_info[i].max_uv == 0)
271 dcdc =regulator_get(NULL, tps65910_dcdc_info[i].name);
272 regulator_set_voltage(dcdc, tps65910_dcdc_info[i].min_uv, tps65910_dcdc_info[i].max_uv);
273 regulator_enable(dcdc);
274 printk("%s %s =%dmV end\n", __func__,tps65910_dcdc_info[i].name, regulator_get_voltage(dcdc));
279 for(i = 0; i < ARRAY_SIZE(tps65910_ldo_info); i++)
281 if(tps65910_ldo_info[i].min_uv == 0 && tps65910_ldo_info[i].max_uv == 0)
283 ldo =regulator_get(NULL, tps65910_ldo_info[i].name);
284 regulator_set_voltage(ldo, tps65910_ldo_info[i].min_uv, tps65910_ldo_info[i].max_uv);
285 regulator_enable(ldo);
286 printk("%s %s =%dmV end\n", __func__,tps65910_ldo_info[i].name, regulator_get_voltage(ldo));
290 printk("%s,line=%d END\n", __func__,__LINE__);
294 static struct regulator_consumer_supply tps65910_smps1_supply[] = {
302 static struct regulator_consumer_supply tps65910_smps2_supply[] = {
306 #if defined(CONFIG_MACH_RK2926_V86)
308 .supply = "vdd_core",
313 static struct regulator_consumer_supply tps65910_smps3_supply[] = {
318 static struct regulator_consumer_supply tps65910_smps4_supply[] = {
323 static struct regulator_consumer_supply tps65910_ldo1_supply[] = {
328 static struct regulator_consumer_supply tps65910_ldo2_supply[] = {
334 static struct regulator_consumer_supply tps65910_ldo3_supply[] = {
339 static struct regulator_consumer_supply tps65910_ldo4_supply[] = {
344 static struct regulator_consumer_supply tps65910_ldo5_supply[] = {
349 static struct regulator_consumer_supply tps65910_ldo6_supply[] = {
354 static struct regulator_consumer_supply tps65910_ldo7_supply[] = {
360 static struct regulator_consumer_supply tps65910_ldo8_supply[] = {
366 static struct regulator_init_data tps65910_smps1 = {
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(tps65910_smps1_supply),
378 .consumer_supplies = tps65910_smps1_supply,
382 static struct regulator_init_data tps65910_smps2 = {
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(tps65910_smps2_supply),
394 .consumer_supplies = tps65910_smps2_supply,
398 static struct regulator_init_data tps65910_smps3 = {
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(tps65910_smps3_supply),
410 .consumer_supplies = tps65910_smps3_supply,
413 static struct regulator_init_data tps65910_smps4 = {
420 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
421 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
424 .num_consumer_supplies = ARRAY_SIZE(tps65910_smps4_supply),
425 .consumer_supplies = tps65910_smps4_supply,
427 static struct regulator_init_data tps65910_ldo1 = {
434 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
435 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
438 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo1_supply),
439 .consumer_supplies = tps65910_ldo1_supply,
443 static struct regulator_init_data tps65910_ldo2 = {
450 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
451 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
454 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo2_supply),
455 .consumer_supplies = tps65910_ldo2_supply,
459 static struct regulator_init_data tps65910_ldo3 = {
466 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
467 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
470 .num_consumer_supplies = ARRAY_SIZE(tps65910_ldo3_supply),
471 .consumer_supplies = tps65910_ldo3_supply,
475 static struct regulator_init_data tps65910_ldo4 = {
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_ldo4_supply),
487 .consumer_supplies = tps65910_ldo4_supply,
491 static struct regulator_init_data tps65910_ldo5 = {
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_ldo5_supply),
503 .consumer_supplies = tps65910_ldo5_supply,
507 static struct regulator_init_data tps65910_ldo6 = {
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_ldo6_supply),
519 .consumer_supplies = tps65910_ldo6_supply,
523 static struct regulator_init_data tps65910_ldo7 = {
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_ldo7_supply),
535 .consumer_supplies = tps65910_ldo7_supply,
539 static struct regulator_init_data tps65910_ldo8 = {
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_ldo8_supply),
551 .consumer_supplies = tps65910_ldo8_supply,
553 void __sramfunc board_pmu_tps65910_suspend(void)
555 sram_gpio_set_value(pmic_sleep, GPIO_HIGH);
557 void __sramfunc board_pmu_tps65910_resume(void)
559 sram_gpio_set_value(pmic_sleep, GPIO_LOW);
562 static struct tps65910_board tps65910_data = {
563 .irq = (unsigned)TPS65910_HOST_IRQ,
564 .irq_base = NR_GIC_IRQS + NR_GPIO_IRQS,
565 .gpio_base = TPS65910_GPIO_EXPANDER_BASE,
567 .pre_init = tps65910_pre_init,
568 .post_init = tps65910_post_init,
570 //TPS65910_NUM_REGS = 13
572 .tps65910_pmic_init_data[TPS65910_REG_VRTC] = NULL,
573 .tps65910_pmic_init_data[TPS65910_REG_VIO] = &tps65910_smps4,
574 .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &tps65910_smps1,
575 .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &tps65910_smps2,
576 .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &tps65910_smps3,
577 .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &tps65910_ldo1,
578 .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &tps65910_ldo2,
579 .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &tps65910_ldo8,
580 .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &tps65910_ldo7,
581 .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &tps65910_ldo3,
582 .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &tps65910_ldo4,
583 .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &tps65910_ldo5,
584 .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &tps65910_ldo6,