1 #include <linux/regulator/machine.h>
3 #include <linux/platform_device.h>
6 #include <mach/iomux.h>
7 #include <mach/board.h>
9 #include <linux/mfd/rt5025.h>
11 #ifdef CONFIG_MFD_RT5025
13 static int rt5025_pre_init(struct rt5025_chip *rt5025_chip){
16 printk("%s,line=%d\n", __func__,__LINE__);
18 /**********set voltage speed***********************/
19 ret = rt5025_reg_read(rt5025_chip->i2c, 0x08);
20 ret &= (~(3<<0)); //dcdc1 25mv/10us
21 rt5025_reg_write(rt5025_chip->i2c, 0x08,ret);
23 ret = rt5025_reg_read(rt5025_chip->i2c, 0x09);
24 ret &= (~(3<<0));//dcdc2 100mv/10us
25 rt5025_reg_write(rt5025_chip->i2c, 0x09,ret);
27 ret = rt5025_reg_read(rt5025_chip->i2c, 0x0a);
28 ret &= (~(3<<0));//dcdc3 50mv/12us
29 rt5025_reg_write(rt5025_chip->i2c, 0x0a,ret);
30 /************************************************/
31 /***************set power off voltage***************/
32 ret = rt5025_reg_read(rt5025_chip->i2c, 0x17);
33 ret &= (~(7<<5)); //power off 2.8v
34 rt5025_reg_write(rt5025_chip->i2c, 0x17,ret);
36 ret = rt5025_reg_read(rt5025_chip->i2c, 0x17);
37 ret |= (1<<3); //enable DC4 boost
38 rt5025_reg_write(rt5025_chip->i2c, 0x17,ret);
39 /***********************************************/
40 ret = rt5025_reg_read(rt5025_chip->i2c, 0x07);
42 rt5025_reg_write(rt5025_chip->i2c, 0x07,ret);
44 /************************************************/
47 static int rt5025_post_init(void)
49 struct regulator *dcdc;
50 struct regulator *ldo;
52 printk("%s,line=%d\n", __func__,__LINE__);
54 #ifndef CONFIG_RK_CONFIG
55 g_pmic_type = PMIC_TYPE_RT5025;
57 printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
59 for(i = 0; i < ARRAY_SIZE(rt5025_dcdc_info); i++)
61 if(rt5025_dcdc_info[i].min_uv == 0 && rt5025_dcdc_info[i].max_uv == 0)
63 dcdc =regulator_get(NULL, rt5025_dcdc_info[i].name);
65 regulator_set_voltage(dcdc, rt5025_dcdc_info[i].min_uv, rt5025_dcdc_info[i].max_uv);
67 regulator_set_mode(dcdc, REGULATOR_MODE_NORMAL);
68 regulator_enable(dcdc);
69 printk("%s %s =%duV end\n", __func__,rt5025_dcdc_info[i].name, regulator_get_voltage(dcdc));
74 for(i = 0; i < ARRAY_SIZE(rt5025_ldo_info); i++)
76 if(rt5025_ldo_info[i].min_uv == 0 && rt5025_ldo_info[i].max_uv == 0)
78 ldo =regulator_get(NULL, rt5025_ldo_info[i].name);
79 regulator_set_voltage(ldo, rt5025_ldo_info[i].min_uv, rt5025_ldo_info[i].max_uv);
80 regulator_enable(ldo);
81 printk("%s %s =%duV end\n", __func__,rt5025_ldo_info[i].name, regulator_get_voltage(ldo));
85 printk("%s,line=%d END\n", __func__,__LINE__);
89 static struct regulator_consumer_supply rt5025_dcdc1_supply[] = {
91 .supply = "rt5025-dcdc1",
98 static struct regulator_consumer_supply rt5025_dcdc2_supply[] = {
100 .supply = "rt5025-dcdc2",
103 .supply = "vdd_core",
106 static struct regulator_consumer_supply rt5025_dcdc3_supply[] = {
108 .supply = "rt5025-dcdc3",
112 static struct regulator_consumer_supply rt5025_dcdc4_supply[] = {
114 .supply = "rt5025-dcdc4",
118 static struct regulator_consumer_supply rt5025_ldo1_supply[] = {
120 .supply = "rt5025-ldo1",
123 static struct regulator_consumer_supply rt5025_ldo2_supply[] = {
125 .supply = "rt5025-ldo2",
129 static struct regulator_consumer_supply rt5025_ldo3_supply[] = {
131 .supply = "rt5025-ldo3",
134 static struct regulator_consumer_supply rt5025_ldo4_supply[] = {
136 .supply = "rt5025-ldo4",
139 static struct regulator_consumer_supply rt5025_ldo5_supply[] = {
141 .supply = "rt5025-ldo5",
144 static struct regulator_consumer_supply rt5025_ldo6_supply[] = {
146 .supply = "rt5025-ldo6",
150 static struct regulator_init_data rt5025_dcdc1_info = {
152 .name = "RT5025-DCDC1",
155 .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
156 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS| REGULATOR_CHANGE_MODE,
158 .num_consumer_supplies = ARRAY_SIZE(rt5025_dcdc1_supply),
159 .consumer_supplies = rt5025_dcdc1_supply,
162 static struct regulator_init_data rt5025_dcdc2_info = {
164 .name = "RT5025-DCDC2",
167 .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
168 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE,
170 .num_consumer_supplies = ARRAY_SIZE(rt5025_dcdc2_supply),
171 .consumer_supplies = rt5025_dcdc2_supply,
174 static struct regulator_init_data rt5025_dcdc3_info = {
176 .name = "RT5025-DCDC3",
179 .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST,
180 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE,
182 .num_consumer_supplies = ARRAY_SIZE(rt5025_dcdc3_supply),
183 .consumer_supplies = rt5025_dcdc3_supply,
186 static struct regulator_init_data rt5025_dcdc4_info = {
188 .name = "RT5025-DCDC4",
191 .valid_modes_mask = REGULATOR_MODE_NORMAL,
192 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
194 .num_consumer_supplies = ARRAY_SIZE(rt5025_dcdc4_supply),
195 .consumer_supplies = rt5025_dcdc4_supply,
198 static struct regulator_init_data rt5025_ldo1_info = {
200 .name = "RT5025-LDO1",
203 .valid_modes_mask = REGULATOR_MODE_NORMAL,
204 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
206 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo1_supply),
207 .consumer_supplies = rt5025_ldo1_supply,
210 static struct regulator_init_data rt5025_ldo2_info = {
212 .name = "RT5025-LDO2",
215 .valid_modes_mask = REGULATOR_MODE_NORMAL,
216 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
218 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo2_supply),
219 .consumer_supplies = rt5025_ldo2_supply,
222 static struct regulator_init_data rt5025_ldo3_info = {
224 .name = "RT5025-LDO3",
227 .valid_modes_mask = REGULATOR_MODE_NORMAL,
228 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
230 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo3_supply),
231 .consumer_supplies = rt5025_ldo3_supply,
234 static struct regulator_init_data rt5025_ldo4_info = {
236 .name = "RT5025-LDO4",
239 .valid_modes_mask = REGULATOR_MODE_NORMAL,
240 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
242 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo4_supply),
243 .consumer_supplies = rt5025_ldo4_supply,
246 static struct regulator_init_data rt5025_ldo5_info = {
248 .name = "RT5025-LDO5",
251 .valid_modes_mask = REGULATOR_MODE_NORMAL,
252 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
254 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo5_supply),
255 .consumer_supplies = rt5025_ldo5_supply,
258 static struct regulator_init_data rt5025_ldo6_info = {
260 .name = "RT5025-LDO6",
263 .valid_modes_mask = REGULATOR_MODE_NORMAL,
264 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
266 .num_consumer_supplies = ARRAY_SIZE(rt5025_ldo6_supply),
267 .consumer_supplies = rt5025_ldo6_supply,
270 static struct rt5025_power_data rt5025_power_data = {
275 .CCCHG_TIMEOUT = RT5025_CCCHG_TO_6H,
276 .PRECHG_TIMEOUT = RT5025_PRECHG_TO_30M,
286 .AICR = RT5025_AICR_500MA,
287 .ICC = RT5025_ICC_1P8A,
292 .DPM = RT5025_DPM_DIS,
297 .IPREC = RT5025_IPREC_10P,
298 .IEOC = RT5025_IEOC_10P,
299 .VPREC = RT5025_VPREC_3V,
311 static struct rt5025_gpio_data rt5025_gpio_data = {
312 // .gpio_base = RT5025_GPIO_BASE,
313 .irq_base = IRQ_BOARD_BASE,
316 static struct rt5025_misc_data rt5025_misc_data = {
320 .Delayed1 = RT5025_RSTDELAY1_1S,
321 .Delayed2 = RT5025_RSTDELAY2_1S,
326 .VOFF = RT5025_VOFF_3P1V,
331 .PG_DLY = RT5025_PGDLY_100MS,
332 .SHDN_PRESS = RT5025_SHDNPRESS_6S,
333 .LPRESS_TIME = RT5025_LPRESS_1P5S,
334 .START_TIME = RT5025_STARTIME_100MS,
339 .SHDN_DLYTIME = RT5025_SHDNDLY_1S,
356 static struct rt5025_irq_data rt5025_irq_data = {
412 static void rt5025_charger_event_callback(uint32_t detected)
414 RTINFO("event detected = 0x%08x\n", detected);
417 static void rt5025_power_event_callback(uint32_t detected)
419 RTINFO("event detected = 0x%08x\n", detected);
422 static struct rt5025_event_callback rt5025_event_callback = {
423 .charger_event_callback = rt5025_charger_event_callback,
424 .power_event_callkback = rt5025_power_event_callback,
427 static struct rt5025_platform_data rt5025_data = {
428 .pre_init=rt5025_pre_init,
429 .post_init=rt5025_post_init,
442 .power_data = &rt5025_power_data,
443 .gpio_data = &rt5025_gpio_data,
444 .misc_data = &rt5025_misc_data,
445 .irq_data = &rt5025_irq_data,
446 .cb = &rt5025_event_callback,
447 .intr_pin = 81, //GPIO81
450 void __sramfunc board_pmu_rt5025_suspend(void)
453 void __sramfunc board_pmu_rt5025_resume(void)