ARM64: DTS: Add rk3399-firefly uart4 device, node as /dev/ttyS1
[firefly-linux-kernel-4.4.55.git] / board-pmu-act8846.c
1 #include <linux/regulator/machine.h>
2 #include <linux/regulator/act8846.h>
3 #include <mach/sram.h>
4 #include <linux/platform_device.h>
5
6 #include <mach/gpio.h>
7 #include <mach/iomux.h>
8 #include <mach/board.h>
9
10 #ifdef CONFIG_REGULATOR_ACT8846
11
12 static int act8846_set_init(struct act8846 *act8846)
13 {
14         struct regulator *dcdc;
15         struct regulator *ldo;
16         int i = 0;
17         printk("%s,line=%d\n", __func__,__LINE__);
18
19         #ifndef CONFIG_RK_CONFIG
20         g_pmic_type = PMIC_TYPE_ACT8846;
21         #endif
22         printk("%s:g_pmic_type=%d\n",__func__,g_pmic_type);
23         
24         for(i = 0; i < ARRAY_SIZE(act8846_dcdc_info); i++)
25         {
26
27                 if(act8846_dcdc_info[i].min_uv == 0 && act8846_dcdc_info[i].max_uv == 0)
28                         continue;
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));
34                 regulator_put(dcdc);
35                 udelay(100);
36         }
37         
38         for(i = 0; i < ARRAY_SIZE(act8846_ldo_info); i++)
39         {
40                 if(act8846_ldo_info[i].min_uv == 0 && act8846_ldo_info[i].max_uv == 0)
41                         continue;
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));
46                 regulator_put(ldo);
47         }
48
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");
52                 return -EINVAL;
53         }
54         if(port_output_init(pmic_slp, 0, "pmic_slp") < 0){
55                 printk(KERN_ERR "port_output_init failed\n");
56                 return -EINVAL;
57         }
58         #else
59         if(sram_gpio_init(PMU_POWER_SLEEP, &pmic_sleep) < 0){
60                 printk(KERN_ERR "sram_gpio_init failed\n");
61                 return -EINVAL;
62         }
63         gpio_request(PMU_POWER_SLEEP, "NULL");
64         gpio_direction_output(PMU_POWER_SLEEP, GPIO_LOW);
65         
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");
69                 return -EINVAL;
70         }
71 //      rk30_mux_api_set(GPIO3D3_PWM0_NAME,GPIO3D_GPIO3D3);
72         gpio_request(PMU_VSEL, "NULL");
73         gpio_direction_output(PMU_VSEL, GPIO_HIGH);
74         #endif
75         
76         #endif
77
78         printk("%s,line=%d END\n", __func__,__LINE__);
79         
80         
81         return 0;
82 }
83
84 static struct regulator_consumer_supply act8846_buck1_supply[] = {
85         {
86                 .supply = "act_dcdc1",
87         },
88
89 };
90 static struct regulator_consumer_supply act8846_buck2_supply[] = {
91         {
92                 .supply = "act_dcdc2",
93         },
94         {
95                 .supply = "vdd_core",
96         },
97         
98 };
99 static struct regulator_consumer_supply act8846_buck3_supply[] = {
100         {
101                 .supply = "act_dcdc3",
102         },
103         {
104                 .supply = "vdd_cpu",
105         },
106 };
107
108 static struct regulator_consumer_supply act8846_buck4_supply[] = {
109         {
110                 .supply = "act_dcdc4",
111         },
112
113 };
114
115 static struct regulator_consumer_supply act8846_ldo1_supply[] = {
116         {
117                 .supply = "act_ldo1",
118         },
119 };
120 static struct regulator_consumer_supply act8846_ldo2_supply[] = {
121         {
122                 .supply = "act_ldo2",
123         },
124 };
125
126 static struct regulator_consumer_supply act8846_ldo3_supply[] = {
127         {
128                 .supply = "act_ldo3",
129         },
130 };
131 static struct regulator_consumer_supply act8846_ldo4_supply[] = {
132         {
133                 .supply = "act_ldo4",
134         },
135 };
136 static struct regulator_consumer_supply act8846_ldo5_supply[] = {
137         {
138                 .supply = "act_ldo5",
139         },
140 };
141 static struct regulator_consumer_supply act8846_ldo6_supply[] = {
142         {
143                 .supply = "act_ldo6",
144         },
145 };
146
147 static struct regulator_consumer_supply act8846_ldo7_supply[] = {
148         {
149                 .supply = "act_ldo7",
150         },
151 };
152 static struct regulator_consumer_supply act8846_ldo8_supply[] = {
153         {
154                 .supply = "act_ldo8",
155         },
156 };
157 static struct regulator_consumer_supply act8846_ldo9_supply[] = {
158         {
159                 .supply = "act_ldo9",
160         },
161 };
162
163
164 static struct regulator_init_data act8846_buck1 = {
165         .constraints = {
166                 .name           = "ACT_DCDC1",
167                 .min_uV                 = 600000,
168                 .max_uV                 = 3900000,
169                 .apply_uV               = 1,
170                 .always_on = 1,
171                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
172                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
173
174         },
175         .num_consumer_supplies = ARRAY_SIZE(act8846_buck1_supply),
176         .consumer_supplies =  act8846_buck1_supply,
177 };
178
179 /* */
180 static struct regulator_init_data act8846_buck2 = {
181         .constraints = {
182                 .name           = "ACT_DCDC2",
183                 .min_uV                 = 600000,
184                 .max_uV                 = 3900000,
185                 .apply_uV               = 1,
186                 .always_on = 1,
187                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
188                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
189
190         },
191         .num_consumer_supplies = ARRAY_SIZE(act8846_buck2_supply),
192         .consumer_supplies =  act8846_buck2_supply,
193 };
194
195 /* */
196 static struct regulator_init_data act8846_buck3 = {
197         .constraints = {
198                 .name           = "ACT_DCDC3",
199                 .min_uV                 = 600000,
200                 .max_uV                 = 3900000,
201                 .apply_uV               = 1,
202                 .always_on = 1,
203                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
204                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
205
206         },
207         .num_consumer_supplies = ARRAY_SIZE(act8846_buck3_supply),
208         .consumer_supplies =  act8846_buck3_supply,
209 };
210
211 static struct regulator_init_data act8846_buck4 = {
212         .constraints = {
213                 .name           = "ACT_DCDC4",
214                 .min_uV                 = 600000,
215                 .max_uV                 = 3900000,
216                 .apply_uV               = 1,
217                 .always_on = 1,
218                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
219                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
220
221         },
222         .num_consumer_supplies = ARRAY_SIZE(act8846_buck4_supply),
223         .consumer_supplies =  act8846_buck4_supply,
224 };
225
226 static struct regulator_init_data act8846_ldo1 = {
227         .constraints = {
228                 .name           = "ACT_LDO1",
229                 .min_uV                 = 600000,
230                 .max_uV                 = 3900000,
231                 .apply_uV               = 1,
232                 
233                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
234                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
235
236         },
237         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo1_supply),
238         .consumer_supplies =  act8846_ldo1_supply,
239 };
240
241 /* */
242 static struct regulator_init_data act8846_ldo2 = {
243         .constraints = {
244                 .name           = "ACT_LDO2",
245                 .min_uV                 = 600000,
246                 .max_uV                 = 3900000,
247                 .apply_uV               = 1,
248                 
249                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
250                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
251
252         },
253         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo2_supply),
254         .consumer_supplies =  act8846_ldo2_supply,
255 };
256
257 /* */
258 static struct regulator_init_data act8846_ldo3 = {
259         .constraints = {
260                 .name           = "ACT_LDO3",
261                 .min_uV                 = 600000,
262                 .max_uV                 = 3900000,
263                 .apply_uV               = 1,
264                 
265                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
266                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
267
268         },
269         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo3_supply),
270         .consumer_supplies =  act8846_ldo3_supply,
271 };
272
273 /* */
274 static struct regulator_init_data act8846_ldo4 = {
275         .constraints = {
276                 .name           = "ACT_LDO4",
277                 .min_uV                 = 600000,
278                 .max_uV                 = 3900000,
279                 .apply_uV               = 1,
280                 
281                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
282                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
283
284         },
285         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo4_supply),
286         .consumer_supplies =  act8846_ldo4_supply,
287 };
288
289 static struct regulator_init_data act8846_ldo5 = {
290         .constraints = {
291                 .name           = "ACT_LDO5",
292                 .min_uV                 = 600000,
293                 .max_uV                 = 3900000,
294                 .apply_uV               = 1,
295                 
296                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
297                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
298
299         },
300         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo5_supply),
301         .consumer_supplies =  act8846_ldo5_supply,
302 };
303
304 static struct regulator_init_data act8846_ldo6 = {
305         .constraints = {
306                 .name           = "ACT_LDO6",
307                 .min_uV                 = 600000,
308                 .max_uV                 = 3900000,
309                 .apply_uV               = 1,
310                 
311                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
312                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
313
314         },
315         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo6_supply),
316         .consumer_supplies =  act8846_ldo6_supply,
317 };
318
319 static struct regulator_init_data act8846_ldo7 = {
320         .constraints = {
321                 .name           = "ACT_LDO7",
322                 .min_uV                 = 600000,
323                 .max_uV                 = 3900000,
324                 .apply_uV               = 1,
325                 
326                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
327                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
328
329         },
330         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo7_supply),
331         .consumer_supplies =  act8846_ldo7_supply,
332 };
333
334 static struct regulator_init_data act8846_ldo8 = {
335         .constraints = {
336                 .name           = "ACT_LDO8",
337                 .min_uV                 = 600000,
338                 .max_uV                 = 3900000,
339                 .apply_uV               = 1,
340                 
341                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
342                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
343
344         },
345         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo8_supply),
346         .consumer_supplies =  act8846_ldo8_supply,
347 };
348
349 static struct regulator_init_data act8846_ldo9 = {
350         .constraints = {
351                 .name           = "ACT_LDO9",
352                 .min_uV                 = 600000,
353                 .max_uV                 = 3900000,
354                 .apply_uV               = 1,
355                 
356                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
357                 .valid_modes_mask = REGULATOR_MODE_STANDBY | REGULATOR_MODE_NORMAL,
358
359         },
360         .num_consumer_supplies = ARRAY_SIZE(act8846_ldo9_supply),
361         .consumer_supplies =  act8846_ldo9_supply,
362 };
363
364 struct act8846_regulator_subdev act8846_regulator_subdev_id[] = {
365         {
366                 .id=0,
367                 .initdata=&act8846_buck1,               
368          },
369
370         {
371                 .id=1,
372                 .initdata=&act8846_buck2,               
373          },
374         {
375                 .id=2,
376                 .initdata=&act8846_buck3,               
377          },
378         {
379                 .id=3,
380                 .initdata=&act8846_buck4,               
381          },
382
383         {
384                 .id=4,
385                 .initdata=&act8846_ldo1,                
386          },
387
388         {
389                 .id=5,
390                 .initdata=&act8846_ldo2,                
391          },
392
393         {
394                 .id=6,
395                 .initdata=&act8846_ldo3,                
396          },
397
398         {
399                 .id=7,
400                 .initdata=&act8846_ldo4,                
401          },
402
403         {
404                 .id=8,
405                 .initdata=&act8846_ldo5,                
406          },
407
408         {
409                 .id=9,
410                 .initdata=&act8846_ldo6,                
411          },
412
413         {
414                 .id=10,
415                 .initdata=&act8846_ldo7,                
416          },
417
418         {
419                 .id=11,
420                 .initdata=&act8846_ldo8,                
421          },
422 #if 1
423         {
424                 .id=12,
425                 .initdata=&act8846_ldo9,                
426          },
427 #endif
428 };
429
430 static struct act8846_platform_data act8846_data={
431         .set_init=act8846_set_init,
432         .num_regulators=13,
433         .regulators=act8846_regulator_subdev_id,
434 };
435
436 #ifdef CONFIG_HAS_EARLYSUSPEND
437 void act8846_early_suspend(struct early_suspend *h)
438 {
439 }
440
441 void act8846_late_resume(struct early_suspend *h)
442 {
443 }
444 #endif
445
446 #ifdef CONFIG_PM
447 int __sramdata vdd_cpu_vol ,vdd_core_vol;
448 void act8846_device_suspend(void)
449 {               
450         struct regulator *dcdc;
451         #ifdef CONFIG_ACT8846_SUPPORT_RESET
452         sram_gpio_set_value(pmic_vsel, GPIO_LOW);  
453         
454         dcdc =dvfs_get_regulator( "vdd_cpu");
455         vdd_cpu_vol = regulator_get_voltage(dcdc);
456         regulator_set_voltage(dcdc, 900000, 900000);
457         udelay(100);
458
459         dcdc =dvfs_get_regulator( "vdd_core");
460         vdd_core_vol = regulator_get_voltage(dcdc);
461         regulator_set_voltage(dcdc, 900000, 900000);
462         udelay(100);
463
464         dcdc =regulator_get(NULL, "act_dcdc4");
465         regulator_set_voltage(dcdc, 2800000, 2800000);
466         regulator_put(dcdc);
467         udelay(100);
468
469         #endif
470 }
471
472 void act8846_device_resume(void)
473 {
474         struct regulator *dcdc;
475         #ifdef CONFIG_ACT8846_SUPPORT_RESET
476
477         dcdc =dvfs_get_regulator( "vdd_cpu");
478         regulator_set_voltage(dcdc, vdd_cpu_vol, vdd_cpu_vol);
479         udelay(100);
480
481         dcdc =dvfs_get_regulator( "vdd_core");
482         regulator_set_voltage(dcdc, vdd_core_vol, vdd_core_vol);
483         udelay(100);
484
485         dcdc =regulator_get(NULL, "act_dcdc4");
486         regulator_set_voltage(dcdc, 3000000, 3000000);
487         regulator_put(dcdc);
488         udelay(100);
489         
490         sram_gpio_set_value(pmic_vsel, GPIO_HIGH);  
491         
492         #endif
493         
494 }
495 #else
496 void act8846_device_suspend(void)
497 {               
498 }
499 void act8846_device_resume(void)
500 {
501 }
502 #endif
503
504 void __sramfunc board_pmu_act8846_suspend(void)
505 {       
506         #ifdef CONFIG_CLK_SWITCH_TO_32K
507          sram_gpio_set_value(pmic_sleep, GPIO_HIGH);  
508         #endif
509 }
510 void __sramfunc board_pmu_act8846_resume(void)
511 {
512         #ifdef CONFIG_CLK_SWITCH_TO_32K
513         sram_gpio_set_value(pmic_sleep, GPIO_LOW);  
514         sram_32k_udelay(1000);
515         #endif
516 }
517 void __sramfunc board_act8846_set_suspend_vol(void)
518 {       
519 #ifdef CONFIG_ACT8846_SUPPORT_RESET
520         sram_gpio_set_value(pmic_vsel, GPIO_HIGH); 
521 #endif
522 }
523 void __sramfunc board_act8846_set_resume_vol(void)
524 {
525 #ifdef CONFIG_ACT8846_SUPPORT_RESET
526         sram_gpio_set_value(pmic_vsel, GPIO_LOW);  
527         sram_32k_udelay(1000);
528 #endif
529 }
530
531
532 #endif
533
534
535
536