6 #include <soc/pmic_wrap.h>
12 {0x3A8, 0x9CA7, 0xFFFF, 0},
17 {0x22, 0x1F00, 0x1F00, 0},
26 {0x36, 0x8888, 0xFFFF, 0},
31 {0x3A, 0x8888, 0xFFFF, 0},
36 {0x3C, 0x8888, 0xFFFF, 0},
40 {0x3E, 0x888, 0xFFF, 0},
42 {0x94, 0x0, 0xFFFF, 0},
45 {0x10C, 0x18, 0x18, 0},
52 {0x12A, 0x100, 0x180, 0},
57 {0x134, 0x80, 0x2890, 0},
59 {0x14C, 0x20, 0x20, 0},
69 {0x198, 0x0, 0x1FF, 0},
72 {0x790, 0x280, 0x780, 0},
74 {0x7AC, 0x0, 0x2000, 0},
76 {0x98A, 0x40, 0x40, 0},
80 {0xA38, 0x0, 0x100, 0},
86 {0xA3C, 0x81E0, 0x81E0, 0},
103 {0xA44, 0xFFFF, 0xFFFF, 0},
107 {0xA46, 0xE000, 0xE000, 0},
109 {0xA62, 0x400, 0x400, 0},
112 {0xC8A, 0x4, 0xC, 0},
119 {0xF8C, 0xAAA, 0xAAA, 0},
121 {0x1188, 0x0, 0x8000, 0},
123 {0x119E, 0x6000, 0x7000, 0},
125 {0x11A2, 0x0, 0x3000, 0},
127 {0x11B0, 0x4000, 0x4000, 0},
129 {0x11B4, 0x0, 0x100, 0},
132 {0x123A, 0x8040, 0x83FF, 0},
134 {0x123E, 0x4, 0x4, 0},
136 {0x1242, 0x1, 0x1, 0},
141 {0x1260, 0x0, 0x154, 0},
143 {0x1312, 0x8, 0x8, 0},
145 {0x1334, 0x0, 0x100, 0},
147 {0x1346, 0x100, 0x100, 0},
149 {0x138A, 0x10, 0x7F, 0},
151 {0x138C, 0x15, 0x7F, 0},
154 {0x138E, 0x1030, 0x3030, 0},
156 {0x140A, 0x10, 0x7F, 0},
158 {0x140C, 0x15, 0x7F, 0},
161 {0x140E, 0x1030, 0x3030, 0},
163 {0x148A, 0x10, 0x7F, 0},
166 {0x148E, 0x1030, 0x3030, 0},
168 {0x14A2, 0x20, 0x20, 0},
170 {0x150A, 0x10, 0x7F, 0},
173 {0x150E, 0x1030, 0x3030, 0},
175 {0x158A, 0x8, 0x7F, 0},
178 {0x158C, 0x90C, 0x7F7F, 0},
181 {0x158E, 0x1030, 0x3030, 0},
183 {0x159C, 0x8, 0xC, 0},
185 {0x15A2, 0x20, 0x20, 0},
187 {0x168A, 0x50, 0x7F, 0},
190 {0x168C, 0x1964, 0x7F7F, 0},
193 {0x168E, 0x2020, 0x3030, 0},
195 {0x16A2, 0x20, 0x20, 0},
197 {0x16AA, 0x48, 0x7F, 0},
200 {0x170C, 0x1964, 0x7F7F, 0},
203 {0x170E, 0x2020, 0x3030, 0},
205 {0x172A, 0x3C, 0x7F, 0},
208 {0x178C, 0x202, 0x7F7F, 0},
212 {0x178E, 0x70, 0x73, 0},
214 {0x1790, 0xC, 0xC, 0},
217 {0x1798, 0x2810, 0x3F3F, 0},
219 {0x179A, 0x800, 0x3F00, 0},
221 {0x179E, 0x1, 0x1, 0},
223 {0x1808, 0x2000, 0x3000, 0},
226 {0x180C, 0x60, 0x60, 0},
234 {0x1814, 0x3FF0, 0x7FFF, 0},
236 {0x1816, 0x3, 0x7, 0},
240 {0x181A, 0x6081, 0xFFBF, 0},
244 {0x181C, 0x503, 0x787, 0},
246 {0x181E, 0xA662, 0xFFFF, 0},
248 {0x1820, 0xA662, 0xFFFF, 0},
253 {0x1824, 0xDB6, 0xFFF, 0},
257 {0x1828, 0x160, 0x160, 0},
265 {0x1830, 0x3FF0, 0x7FFF, 0},
267 {0x1832, 0x3, 0x7, 0},
271 {0x1836, 0x6081, 0xFFBF, 0},
275 {0x1838, 0x503, 0x787, 0},
277 {0x183A, 0xA262, 0xFFFF, 0},
279 {0x183C, 0xA262, 0xFFFF, 0},
284 {0x1840, 0xDB6, 0xFFF, 0},
286 {0x1854, 0x0, 0x7, 0},
288 {0x1856, 0x0, 0x1C00, 0},
290 {0x185C, 0x0, 0x7, 0},
292 {0x185E, 0x0, 0x1C00, 0},
296 {0x1888, 0x420, 0xE7C, 0},
300 {0x188A, 0x801, 0x3C07, 0},
304 {0x188C, 0x1F, 0x3F, 0},
306 {0x188E, 0x129A, 0xFFFF, 0},
309 {0x1894, 0x58, 0x1F8, 0},
312 {0x1896, 0x1C, 0x7C, 0},
316 {0x1898, 0x1805, 0x3C07, 0},
318 {0x189A, 0xF, 0xF, 0},
320 {0x189C, 0x221A, 0xFFFF, 0},
323 {0x18A0, 0x2E, 0x3F, 0},
325 {0x18A2, 0x0, 0x40, 0},
329 {0x18A4, 0x2C06, 0x3C07, 0},
332 {0x18A6, 0xF, 0xF, 0},
334 {0x18A8, 0x221A, 0xFFFF, 0},
337 {0x18AC, 0x2E, 0x3F, 0},
339 {0x18AE, 0x0, 0x40, 0},
343 {0x18B0, 0x1805, 0x3C07, 0},
346 {0x18B2, 0xF, 0xF, 0},
348 {0x18B4, 0x221A, 0xFFFF, 0},
351 {0x18B8, 0x2E, 0x3F, 0},
355 {0x18BC, 0x50, 0x4F0, 0},
359 {0x18BE, 0x3C, 0xFC, 0},
361 {0x18C0, 0x0, 0x300, 0},
364 {0x18C2, 0x8886, 0xFFFF, 0},
366 {0x18D8, 0x700, 0xF00, 0},
369 {0x1A0E, 0x3, 0x3, 0},
371 {0x1A10, 0x1, 0x1, 0},
373 {0x1A12, 0x0, 0x1, 0},
375 {0x1A14, 0x0, 0x1, 0},
377 {0x1A16, 0x0, 0x1, 0},
379 {0x1A18, 0x0, 0x1, 0},
381 {0x1A1A, 0x0, 0x1, 0},
383 {0x1A1C, 0x0, 0x1, 0},
385 {0x1A1E, 0x0, 0x1, 0},
387 {0x1A20, 0x0, 0x1, 0},
389 {0x1A22, 0x0, 0x1, 0},
391 {0x1A24, 0x0, 0x1, 0},
393 {0x1A26, 0x0, 0x1, 0},
395 {0x1A28, 0x0, 0x1, 0},
397 {0x1A2A, 0x0, 0x1, 0},
399 {0x1A2C, 0x0, 0x1, 0},
401 {0x1A2E, 0x0, 0x1, 0},
403 {0x1A30, 0x0, 0x1, 0},
405 {0x1A32, 0x0, 0x1, 0},
407 {0x1A34, 0x0, 0x1, 0},
409 {0x1A36, 0x0, 0x1, 0},
411 {0x1A38, 0x0, 0x1, 0},
413 {0x1A3A, 0x0, 0x1, 0},
415 {0x1A3C, 0x0, 0x1, 0},
417 {0x1A3E, 0x0, 0x1, 0},
419 {0x1A40, 0x0, 0x1, 0},
421 {0x1A42, 0x0, 0x1, 0},
423 {0x1A44, 0x0, 0x1, 0},
425 {0x1A46, 0x0, 0x1, 0},
427 {0x1A48, 0x0, 0x1, 0},
429 {0x1A4A, 0x0, 0x1, 0},
431 {0x1A4C, 0x0, 0x1, 0},
433 {0x1A4E, 0x0, 0x1, 0},
435 {0x1B48, 0x10, 0x7F, 0},
438 {0x1B4A, 0xF15, 0x7F7F, 0},
440 {0x1B8A, 0x10, 0x7F, 0},
443 {0x1B8C, 0xF15, 0x7F7F, 0},
445 {0x1BA8, 0x38, 0x7F, 0},
448 {0x1BAA, 0x70F, 0x7F7F, 0},
450 {0x1BAC, 0x0, 0x3, 0},
452 {0x1BCA, 0x10, 0x7F, 0},
455 {0x1BCC, 0x70F, 0x7F7F, 0},
457 {0x1EA2, 0x1B, 0x1F, 0},
459 {0x1EA4, 0xC00, 0x1C00, 0},
461 {0x1EA6, 0xC00, 0x1C00, 0},
463 {0x1EA8, 0xC00, 0x1C00, 0},
465 {0x3A8, 0x0, 0xFFFF, 0},
470 {0x1B66, 0x1000, 0x7F7F, 0},
473 {0x1B68, 0x6340, 0x7F7F, 0},
476 {0x1B64, 0x6, 0x6, 0},
479 {0x1B6E, 0x1000, 0x7F7F, 0},
482 {0x1B70, 0x6340, 0x7F7F, 0},
485 {0x1B6C, 0x6, 0x6, 0},
489 {0x13a6, 0x58, 0x7F, 0},
491 {0x1426, 0x58, 0x7F, 0},
497 {0x1390, 0x1, 0x1, 0},
499 {0x1490, 0x1, 0x1, 0},
501 {0x1510, 0x1, 0x1, 0},
503 {0x1590, 0x1, 0x1, 0},
505 {0x1690, 0x1, 0x1, 0},
507 {0x1710, 0x1, 0x1, 1},
509 {0x1716, 0x1, 0x1, 1},
511 {0x1610, 0x1, 0x1, 1},
513 {0x1616, 0x1, 0x1, 1},
515 {0x1410, 0x1, 0x1, 0},
517 {0x1BD0, 0x1, 0x1, 0},
519 {0x1BAE, 0x1, 0x1, 1},
521 {0x1BB4, 0x1, 0x1, 1},
523 {0x1B4E, 0x1, 0x1, 0},
525 {0x1A8A, 0x1, 0x1, 1},
527 {0x1A90, 0x1, 0x1, 1},
529 {0x1C1E, 0x1, 0x1, 2},
531 {0x1C24, 0x0, 0x1, 2},
533 {0x1C32, 0x1, 0x1, 2},
535 {0x1C38, 0x0, 0x1, 2},
537 {0x1C46, 0x1, 0x1, 0},
539 {0x1D1E, 0x1, 0x1, 0},
541 {0x1D1E, 0x1, 0x1, 0},
543 {0x1D8A, 0x1, 0x1, 0},
545 {0x1C5A, 0x1, 0x1, 0},
547 {0x1C6E, 0x1, 0x1, 0},
549 {0x1C9E, 0x1, 0x1, 0},
551 {0x1C8A, 0x1, 0x1, 0},
553 {0x1B90, 0x1, 0x1, 0},
555 {0x1CB2, 0x1, 0x1, 0},
557 {0x1D34, 0x1, 0x1, 0},
559 {0x1D34, 0x1, 0x1, 0},
561 {0x1A9E, 0x1, 0x1, 1},
563 {0x1AA4, 0x1, 0x1, 1},
565 {0x1AB2, 0x1, 0x1, 1},
567 {0x1AB8, 0x1, 0x1, 1},
569 {0x1AC6, 0x1, 0x1, 1},
571 {0x1ACC, 0x1, 0x1, 1},
573 {0x1ADA, 0x1, 0x1, 0},
575 {0x1AEE, 0x1, 0x1, 0},
577 {0x1C0A, 0x1, 0x1, 2},
579 {0x1C10, 0x0, 0x1, 2},
581 {0x1B0A, 0x1, 0x1, 1},
583 {0x1B10, 0x1, 0x1, 1},
585 {0x1CC6, 0x1, 0x1, 0},
587 {0x1CDA, 0x1, 0x1, 0},
589 {0x1B1E, 0x1, 0x1, 0},
591 {0x1D4A, 0x1, 0x1, 0},
593 {0x1D5E, 0x1, 0x1, 0},
595 {0x1D0A, 0x1, 0x1, 0},
597 {0x1B32, 0x1, 0x1, 1},
599 {0x1B38, 0x1, 0x1, 1},
601 {0x1B32, 0x1, 0x1, 1},
603 {0x1B38, 0x1, 0x1, 1},
605 {0x1DA0, 0x1, 0x1, 1},
607 {0x1DA6, 0x0, 0x1, 1},
611 {0x1390, 0x1, 0x1, 0},
613 {0x1490, 0x1, 0x1, 0},
615 {0x1510, 0x1, 0x1, 0},
617 {0x1590, 0x1, 0x1, 0},
619 {0x1690, 0x1, 0x1, 0},
621 {0x1710, 0x1, 0x1, 3},
623 {0x1716, 0x1, 0x1, 3},
625 {0x1610, 0x1, 0x1, 3},
627 {0x1616, 0x1, 0x1, 3},
629 {0x1410, 0x1, 0x1, 0},
631 {0x1BD0, 0x1, 0x1, 0},
633 {0x1BAE, 0x1, 0x1, 3},
635 {0x1BB4, 0x1, 0x1, 3},
637 {0x1B4E, 0x1, 0x1, 0},
639 {0x1A8A, 0x1, 0x1, 3},
641 {0x1A90, 0x1, 0x1, 3},
643 {0x1C1E, 0x1, 0x1, 2},
645 {0x1C24, 0x0, 0x1, 2},
647 {0x1C32, 0x1, 0x1, 2},
649 {0x1C38, 0x0, 0x1, 2},
651 {0x1C46, 0x1, 0x1, 0},
653 {0x1D1E, 0x1, 0x1, 0},
655 {0x1D1E, 0x1, 0x1, 0},
657 {0x1D8A, 0x1, 0x1, 0},
659 {0x1C5A, 0x1, 0x1, 0},
661 {0x1C6E, 0x1, 0x1, 0},
663 {0x1C9E, 0x1, 0x1, 0},
665 {0x1C8A, 0x1, 0x1, 0},
667 {0x1B90, 0x1, 0x1, 0},
669 {0x1CB2, 0x1, 0x1, 0},
671 {0x1D34, 0x1, 0x1, 0},
673 {0x1D34, 0x1, 0x1, 0},
675 {0x1A9E, 0x1, 0x1, 3},
677 {0x1AA4, 0x1, 0x1, 3},
679 {0x1AB2, 0x1, 0x1, 3},
681 {0x1AB8, 0x1, 0x1, 3},
683 {0x1AC6, 0x1, 0x1, 0},
685 {0x1ADA, 0x1, 0x1, 0},
687 {0x1AEE, 0x1, 0x1, 0},
689 {0x1C0A, 0x1, 0x1, 2},
691 {0x1C10, 0x0, 0x1, 2},
693 {0x1B0A, 0x1, 0x1, 3},
695 {0x1B10, 0x1, 0x1, 3},
697 {0x1CC6, 0x1, 0x1, 0},
699 {0x1CDA, 0x1, 0x1, 0},
701 {0x1B1E, 0x1, 0x1, 0},
703 {0x1D4A, 0x1, 0x1, 0},
705 {0x1D5E, 0x1, 0x1, 0},
707 {0x1D0A, 0x1, 0x1, 0},
709 {0x1B32, 0x1, 0x1, 3},
711 {0x1B38, 0x1, 0x1, 3},
713 {0x1B32, 0x1, 0x1, 3},
715 {0x1B38, 0x1, 0x1, 3},
717 {0x1DA0, 0x1, 0x1, 3},
719 {0x1DA6, 0x0, 0x1, 3},
725 {0x14A6, 0x20, 0x7F, 0},
727 {0x14A6, 0x20, 0x7F, 8},
729 {0x14A4, 0x1, 0x1, 0},
731 {0x14A4, 0x0, 0x1, 1},
733 {0x1BC6, 0x40, 0x7F, 0},
735 {0x1BC6, 0x40, 0x7F, 8},
737 {0x1BC4, 0x1, 0x1, 0},
739 {0x1BC4, 0x0, 0x1, 1},
741 {0x134, 0x1, 0x1, 4},
745 0, -10000, -20000, -30000, -40000, -50000, -60000, -70000,
746 80000, 70000, 60000, 50000, 40000, 30000, 20000, 10000,
751 unsigned int efuse_data = 0;
807 u16 vsim2_reg, cali_mv;
809 cali_mv = vsim2_mv % 100;
810 assert(cali_mv % 10 == 0);
812 switch (vsim2_mv - cali_mv) {
847 unsigned int vol_reg;
850 return 500000 + vol_reg * 6250;
855 unsigned int vol_reg;
857 assert(vcore_uv >= 500000);
858 assert(vcore_uv <= 1100000);
860 vol_reg = (vcore_uv - 500000) / 6250;
869 unsigned int vol_reg;
872 return 500000 + vol_reg * 12500;
877 unsigned int vol_reg;
879 assert(vdram_uv >= 500000);
880 assert(vdram_uv <= 1300000);
882 vol_reg = (vdram_uv - 500000) / 12500;
892 unsigned int cali_trim;
900 return 600 * 1000 - efuse_votrim +
vddq_votrim[cali_trim];
905 int target_mv, dram2_ori_mv, cali_offset_uv, cali_trim;
907 assert(vddq_uv >= 530000);
908 assert(vddq_uv <= 680000);
911 target_mv = (vddq_uv / 1000) / 10 * 10;
914 cali_offset_uv = 1000 * (target_mv - dram2_ori_mv);
916 if (cali_offset_uv >= 80000)
918 else if (cali_offset_uv <= -70000)
980 die(
"ERROR - Failed to initialize pmic wrap!");
#define assert(statement)
void __noreturn die(const char *fmt,...)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_usecs_expire(struct stopwatch *sw, long us)
void pmic_set_vddq_vol(unsigned int vddq_uv)
static unsigned int pmic_read_efuse(int i)
static const int vddq_votrim[]
static void wk_sleep_voltage_by_ddr(void)
static int pmic_get_efuse_votrim(void)
static void pmic_wdt_set(void)
static struct pmic_setting lp_setting[]
void pmic_set_vsim2_cali(unsigned int vsim2_mv)
static void wk_power_down_seq(void)
static struct pmic_setting init_setting[]
unsigned int pmic_get_vcore_vol(void)
unsigned int pmic_get_vdram1_vol(void)
static void mt6358_lp_setting(void)
void pmic_set_vdram1_vol(unsigned int vdram_uv)
unsigned int pmic_get_vddq_vol(void)
void pmic_set_vcore_vol(unsigned int vcore_uv)
void pmic_init_scp_voltage(void)
static void mt6358_init_setting(void)
void pmic_set_power_hold(bool enable)
static struct pmic_setting scp_setting[]
@ PMIC_TOP_CKPDN_CON0_SET
@ PMIC_TOP_CKPDN_CON0_CLR
@ PMIC_VDRAM1_VOSEL_SLEEP
@ PMIC_TOP_CKHWEN_CON0_CLR
@ PMIC_TOP_CKHWEN_CON0_SET
static u16 pwrap_read_field(u16 reg, u16 mask, u16 shift)
static void pwrap_write_field(u16 reg, u16 val, u16 mask, u16 shift)