1 #include <linux/regulator/machine.h>
2 #include <linux/regulator/act8846.h>
4 #include <linux/platform_device.h>
7 #include <mach/iomux.h>
8 #include <mach/board.h>
10 #ifdef CONFIG_REGULATOR_ACT8846
12 static int act8846_set_init(struct act8846 *act8846)
14 struct regulator *dcdc;
15 struct regulator *ldo;
17 printk("%s,line=%d\n", __func__,__LINE__);
19 #ifndef CONFIG_RK_CONFIG
20 g_pmic_type = PMIC_TYPE_ACT8846;
22 printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
24 for(i = 0; i < ARRAY_SIZE(act8846_dcdc_info); i++)
27 if(act8846_dcdc_info[i].min_uv == 0 && act8846_dcdc_info[i].max_uv == 0)
29 dcdc =regulator_get(NULL, act8846_dcdc_info[i].name);
30 regulator_set_voltage(dcdc, act8846_dcdc_info[i].min_uv, act8846_dcdc_info[i].max_uv);
31 regulator_set_suspend_voltage(dcdc, act8846_dcdc_info[i].suspend_vol);
32 regulator_enable(dcdc);
33 printk("%s %s =%dmV end\n", __func__,act8846_dcdc_info[i].name, regulator_get_voltage(dcdc));
38 for(i = 0; i < ARRAY_SIZE(act8846_ldo_info); i++)
40 if(act8846_ldo_info[i].min_uv == 0 && act8846_ldo_info[i].max_uv == 0)
42 ldo =regulator_get(NULL, act8846_ldo_info[i].name);
43 regulator_set_voltage(ldo, act8846_ldo_info[i].min_uv, act8846_ldo_info[i].max_uv);
44 regulator_enable(ldo);
45 printk("%s %s =%dmV end\n", __func__,act8846_ldo_info[i].name, regulator_get_voltage(ldo));
49 #ifdef CONFIG_RK_CONFIG
50 if(sram_gpio_init(get_port_config(pmic_slp).gpio, &pmic_sleep) < 0){
51 printk(KERN_ERR "sram_gpio_init failed\n");
54 if(port_output_init(pmic_slp, 0, "pmic_slp") < 0){
55 printk(KERN_ERR "port_output_init failed\n");
59 if(sram_gpio_init(PMU_POWER_SLEEP, &pmic_sleep) < 0){
60 printk(KERN_ERR "sram_gpio_init failed\n");
63 gpio_request(PMU_POWER_SLEEP, "NULL");
64 gpio_direction_output(PMU_POWER_SLEEP, GPIO_LOW);
66 #ifdef CONFIG_ACT8846_SUPPORT_RESET
67 if(sram_gpio_init(PMU_VSEL, &pmic_vsel) < 0){
68 printk(KERN_ERR "sram_gpio_init failed\n");
71 // rk30_mux_api_set(GPIO3D3_PWM0_NAME,GPIO3D_GPIO3D3);
72 gpio_request(PMU_VSEL, "NULL");
73 gpio_direction_output(PMU_VSEL, GPIO_HIGH);
78 printk("%s,line=%d END\n", __func__,__LINE__);
84 static struct regulator_consumer_supply act8846_buck1_supply[] = {
86 .supply = "act_dcdc1",
90 static struct regulator_consumer_supply act8846_buck2_supply[] = {
92 .supply = "act_dcdc2",
99 static struct regulator_consumer_supply act8846_buck3_supply[] = {
101 .supply = "act_dcdc3",
108 static struct regulator_consumer_supply act8846_buck4_supply[] = {
110 .supply = "act_dcdc4",
115 static struct regulator_consumer_supply act8846_ldo1_supply[] = {
117 .supply = "act_ldo1",
120 static struct regulator_consumer_supply act8846_ldo2_supply[] = {
122 .supply = "act_ldo2",
126 static struct regulator_consumer_supply act8846_ldo3_supply[] = {
128 .supply = "act_ldo3",
131 static struct regulator_consumer_supply act8846_ldo4_supply[] = {
133 .supply = "act_ldo4",
136 static struct regulator_consumer_supply act8846_ldo5_supply[] = {
138 .supply = "act_ldo5",
141 static struct regulator_consumer_supply act8846_ldo6_supply[] = {
143 .supply = "act_ldo6",
147 static struct regulator_consumer_supply act8846_ldo7_supply[] = {
149 .supply = "act_ldo7",
152 static struct regulator_consumer_supply act8846_ldo8_supply[] = {
154 .supply = "act_ldo8",
157 static struct regulator_consumer_supply act8846_ldo9_supply[] = {
159 .supply = "act_ldo9",
164 static struct regulator_init_data act8846_buck1 = {
171 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
172 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
175 .num_consumer_supplies = ARRAY_SIZE(act8846_buck1_supply),
176 .consumer_supplies = act8846_buck1_supply,
180 static struct regulator_init_data act8846_buck2 = {
187 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
188 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
191 .num_consumer_supplies = ARRAY_SIZE(act8846_buck2_supply),
192 .consumer_supplies = act8846_buck2_supply,
196 static struct regulator_init_data act8846_buck3 = {
203 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
204 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
207 .num_consumer_supplies = ARRAY_SIZE(act8846_buck3_supply),
208 .consumer_supplies = act8846_buck3_supply,
211 static struct regulator_init_data act8846_buck4 = {
218 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
219 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
222 .num_consumer_supplies = ARRAY_SIZE(act8846_buck4_supply),
223 .consumer_supplies = act8846_buck4_supply,
226 static struct regulator_init_data act8846_ldo1 = {
233 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
234 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
237 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo1_supply),
238 .consumer_supplies = act8846_ldo1_supply,
242 static struct regulator_init_data act8846_ldo2 = {
249 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
250 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
253 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo2_supply),
254 .consumer_supplies = act8846_ldo2_supply,
258 static struct regulator_init_data act8846_ldo3 = {
265 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
266 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
269 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo3_supply),
270 .consumer_supplies = act8846_ldo3_supply,
274 static struct regulator_init_data act8846_ldo4 = {
281 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
282 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
285 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo4_supply),
286 .consumer_supplies = act8846_ldo4_supply,
289 static struct regulator_init_data act8846_ldo5 = {
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(act8846_ldo5_supply),
301 .consumer_supplies = act8846_ldo5_supply,
304 static struct regulator_init_data act8846_ldo6 = {
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(act8846_ldo6_supply),
316 .consumer_supplies = act8846_ldo6_supply,
319 static struct regulator_init_data act8846_ldo7 = {
326 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
327 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
330 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo7_supply),
331 .consumer_supplies = act8846_ldo7_supply,
334 static struct regulator_init_data act8846_ldo8 = {
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(act8846_ldo8_supply),
346 .consumer_supplies = act8846_ldo8_supply,
349 static struct regulator_init_data act8846_ldo9 = {
356 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
357 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
360 .num_consumer_supplies = ARRAY_SIZE(act8846_ldo9_supply),
361 .consumer_supplies = act8846_ldo9_supply,
364 struct act8846_regulator_subdev act8846_regulator_subdev_id[] = {
367 .initdata=&act8846_buck1,
372 .initdata=&act8846_buck2,
376 .initdata=&act8846_buck3,
380 .initdata=&act8846_buck4,
385 .initdata=&act8846_ldo1,
390 .initdata=&act8846_ldo2,
395 .initdata=&act8846_ldo3,
400 .initdata=&act8846_ldo4,
405 .initdata=&act8846_ldo5,
410 .initdata=&act8846_ldo6,
415 .initdata=&act8846_ldo7,
420 .initdata=&act8846_ldo8,
425 .initdata=&act8846_ldo9,
430 static struct act8846_platform_data act8846_data={
431 .set_init=act8846_set_init,
433 .regulators=act8846_regulator_subdev_id,
436 #ifdef CONFIG_HAS_EARLYSUSPEND
437 void act8846_early_suspend(struct early_suspend *h)
441 void act8846_late_resume(struct early_suspend *h)
447 int __sramdata vdd_cpu_vol ,vdd_core_vol;
448 void act8846_device_suspend(void)
450 struct regulator *dcdc;
451 #ifdef CONFIG_ACT8846_SUPPORT_RESET
452 sram_gpio_set_value(pmic_vsel, GPIO_LOW);
454 dcdc =dvfs_get_regulator( "vdd_cpu");
455 vdd_cpu_vol = regulator_get_voltage(dcdc);
456 regulator_set_voltage(dcdc, 900000, 900000);
459 dcdc =dvfs_get_regulator( "vdd_core");
460 vdd_core_vol = regulator_get_voltage(dcdc);
461 regulator_set_voltage(dcdc, 900000, 900000);
464 dcdc =regulator_get(NULL, "act_dcdc4");
465 regulator_set_voltage(dcdc, 2800000, 2800000);
472 void act8846_device_resume(void)
474 struct regulator *dcdc;
475 #ifdef CONFIG_ACT8846_SUPPORT_RESET
477 dcdc =dvfs_get_regulator( "vdd_cpu");
478 regulator_set_voltage(dcdc, vdd_cpu_vol, vdd_cpu_vol);
481 dcdc =dvfs_get_regulator( "vdd_core");
482 regulator_set_voltage(dcdc, vdd_core_vol, vdd_core_vol);
485 dcdc =regulator_get(NULL, "act_dcdc4");
486 regulator_set_voltage(dcdc, 3000000, 3000000);
490 sram_gpio_set_value(pmic_vsel, GPIO_HIGH);
496 void act8846_device_suspend(void)
499 void act8846_device_resume(void)
504 void __sramfunc board_pmu_act8846_suspend(void)
506 #ifdef CONFIG_CLK_SWITCH_TO_32K
507 sram_gpio_set_value(pmic_sleep, GPIO_HIGH);
510 void __sramfunc board_pmu_act8846_resume(void)
512 #ifdef CONFIG_CLK_SWITCH_TO_32K
513 sram_gpio_set_value(pmic_sleep, GPIO_LOW);
514 sram_32k_udelay(1000);
517 void __sramfunc board_act8846_set_suspend_vol(void)
519 #ifdef CONFIG_ACT8846_SUPPORT_RESET
520 sram_gpio_set_value(pmic_vsel, GPIO_HIGH);
523 void __sramfunc board_act8846_set_resume_vol(void)
525 #ifdef CONFIG_ACT8846_SUPPORT_RESET
526 sram_gpio_set_value(pmic_vsel, GPIO_LOW);
527 sram_32k_udelay(1000);