12 #include <soc/pmic_wrap.h>
19 {0x22, 0x1F00, 0x1F00, 0},
22 {0x36, 0x8888, 0xFFFF, 0},
23 {0x3A, 0x8888, 0xFFFF, 0},
24 {0x3C, 0x8888, 0xFFFF, 0},
25 {0x3E, 0x888, 0xFFF, 0},
26 {0x94, 0x0, 0xFFFF, 0},
27 {0x10C, 0x18, 0x18, 0},
30 {0x12A, 0x100, 0x180, 0},
31 {0x134, 0x80, 0x2890, 0},
32 {0x14C, 0x20, 0x20, 0},
33 {0x198, 0x0, 0x1FF, 0},
34 {0x790, 0x280, 0x780, 0},
35 {0x7AC, 0x0, 0x2000, 0},
36 {0x98A, 0x1840, 0x1E40, 0},
38 {0xA24, 0x1E00, 0x1F00, 0},
39 {0xA38, 0x0, 0x100, 0},
40 {0xA3C, 0x81E0, 0x81E0, 0},
41 {0xA44, 0xFFFF, 0xFFFF, 0},
42 {0xA46, 0xFC00, 0xFC00, 0},
44 {0xF8C, 0xAAA, 0xAAA, 0},
45 {0x1188, 0x0, 0x8000, 0},
46 {0x119E, 0x6000, 0x7000, 0},
47 {0x11A2, 0x0, 0x3000, 0},
48 {0x11B0, 0x4000, 0x4000, 0},
49 {0x11B4, 0x0, 0x100, 0},
50 {0x123A, 0x8040, 0x83FF, 0},
51 {0x123E, 0x4, 0x4, 0},
52 {0x1242, 0x1, 0x1, 0},
53 {0x1260, 0x0, 0x154, 0},
54 {0x1312, 0x8, 0x8, 0},
55 {0x1334, 0x0, 0x100, 0},
56 {0x138A, 0x10, 0x7F, 0},
57 {0x138C, 0x15, 0x7F, 0},
58 {0x138E, 0x1030, 0x3030, 0},
59 {0x140A, 0x10, 0x7F, 0},
60 {0x140C, 0x15, 0x7F, 0},
61 {0x140E, 0x1030, 0x3030, 0},
62 {0x148A, 0x10, 0x7F, 0},
63 {0x148E, 0x1030, 0x3030, 0},
64 {0x14A2, 0x20, 0x20, 0},
65 {0x150A, 0x10, 0x7F, 0},
66 {0x150E, 0x1030, 0x3030, 0},
67 {0x158A, 0x8, 0x7F, 0},
68 {0x158C, 0x90C, 0x7F7F, 0},
69 {0x158E, 0x1030, 0x3030, 0},
70 {0x159C, 0x8, 0xC, 0},
71 {0x15A2, 0x20, 0x20, 0},
72 {0x168A, 0x50, 0x7F, 0},
73 {0x168C, 0x1964, 0x7F7F, 0},
74 {0x168E, 0x2020, 0x3030, 0},
75 {0x16A2, 0x20, 0x20, 0},
76 {0x16AA, 0x50, 0x7F, 0},
77 {0x170C, 0x1964, 0x7F7F, 0},
78 {0x170E, 0x2020, 0x3030, 0},
79 {0x172A, 0x44, 0x7F, 0},
80 {0x178C, 0x202, 0x7F7F, 0},
81 {0x178E, 0x70, 0x73, 0},
82 {0x1790, 0xC, 0xC, 0},
83 {0x1798, 0x2810, 0x3F3F, 0},
84 {0x179A, 0x800, 0x3F00, 0},
85 {0x179E, 0x1, 0x1, 0},
86 {0x1808, 0x2000, 0x3000, 0},
87 {0x180C, 0x60, 0x60, 0},
88 {0x1814, 0x3FF0, 0x7FFF, 0},
89 {0x1816, 0x3, 0x7, 0},
90 {0x181A, 0x6081, 0xFFBF, 0},
91 {0x181C, 0x503, 0x787, 0},
92 {0x181E, 0xA462, 0xFFFF, 0},
93 {0x1820, 0xA662, 0xFFFF, 0},
94 {0x1824, 0xDB6, 0xFFF, 0},
95 {0x1828, 0x160, 0x160, 0},
96 {0x1830, 0x3FF0, 0x7FFF, 0},
97 {0x1832, 0x3, 0x7, 0},
98 {0x1836, 0x6081, 0xFFBF, 0},
99 {0x1838, 0x503, 0x787, 0},
100 {0x183A, 0xA262, 0xFFFF, 0},
101 {0x183C, 0xA262, 0xFFFF, 0},
102 {0x1840, 0xDB6, 0xFFF, 0},
103 {0x1888, 0x420, 0xE7C, 0},
104 {0x188A, 0x801, 0x3C07, 0},
105 {0x188C, 0x1F, 0x3F, 0},
106 {0x188E, 0x129A, 0xFFFF, 0},
107 {0x1894, 0x58, 0x1F8, 0},
108 {0x1896, 0x1C, 0x7C, 0},
109 {0x1898, 0x1805, 0x3C07, 0},
110 {0x189A, 0xF, 0xF, 0},
111 {0x189C, 0x221A, 0xFFFF, 0},
112 {0x18A0, 0x2E, 0x3F, 0},
113 {0x18A2, 0x0, 0x40, 0},
114 {0x18A4, 0x2C06, 0x3C07, 0},
115 {0x18A6, 0xF, 0xF, 0},
116 {0x18A8, 0x221A, 0xFFFF, 0},
117 {0x18AC, 0x2E, 0x3F, 0},
118 {0x18AE, 0x0, 0x40, 0},
119 {0x18B0, 0x1805, 0x3C07, 0},
120 {0x18B2, 0xF, 0xF, 0},
121 {0x18B4, 0x221A, 0xFFFF, 0},
122 {0x18B8, 0x2E, 0x3F, 0},
123 {0x18BC, 0x50, 0x4F0, 0},
124 {0x18BE, 0x3C, 0xFC, 0},
125 {0x18C0, 0x0, 0x300, 0},
126 {0x18C2, 0x8886, 0xFFFF, 0},
127 {0x1A0E, 0x3, 0x3, 0},
128 {0x1A10, 0x1, 0x1, 0},
129 {0x1A12, 0x0, 0x1, 0},
130 {0x1A14, 0x0, 0x1, 0},
131 {0x1A16, 0x0, 0x1, 0},
132 {0x1A18, 0x0, 0x1, 0},
133 {0x1A1A, 0x0, 0x1, 0},
134 {0x1A1C, 0x0, 0x1, 0},
135 {0x1A1E, 0x0, 0x1, 0},
136 {0x1A20, 0x0, 0x1, 0},
137 {0x1A22, 0x0, 0x1, 0},
138 {0x1A24, 0x0, 0x1, 0},
139 {0x1A26, 0x0, 0x1, 0},
140 {0x1A2C, 0x0, 0x1, 0},
141 {0x1A2E, 0x0, 0x1, 0},
142 {0x1A30, 0x0, 0x1, 0},
143 {0x1A32, 0x0, 0x1, 0},
144 {0x1A34, 0x0, 0x1, 0},
145 {0x1A36, 0x0, 0x1, 0},
146 {0x1A38, 0x0, 0x1, 0},
147 {0x1A3A, 0x0, 0x1, 0},
148 {0x1A3C, 0x0, 0x1, 0},
149 {0x1A3E, 0x0, 0x1, 0},
150 {0x1A40, 0x0, 0x1, 0},
151 {0x1A42, 0x0, 0x1, 0},
152 {0x1A44, 0x0, 0x1, 0},
153 {0x1A46, 0x0, 0x1, 0},
154 {0x1A48, 0x0, 0x1, 0},
155 {0x1A4A, 0x0, 0x1, 0},
156 {0x1A4C, 0x0, 0x1, 0},
157 {0x1A4E, 0x0, 0x1, 0},
158 {0x1A50, 0xE7FF, 0xE7FF, 0},
159 {0x1A56, 0x7FFF, 0x7FFF, 0},
160 {0x1B48, 0x10, 0x7F, 0},
161 {0x1B4A, 0xF15, 0x7F7F, 0},
162 {0x1B8A, 0x10, 0x7F, 0},
163 {0x1B8C, 0xF15, 0x7F7F, 0},
164 {0x1BA8, 0x10, 0x7F, 0},
165 {0x1BAA, 0xF15, 0x7F7F, 0},
166 {0x1BAC, 0x0, 0x3, 0},
167 {0x1BCA, 0x10, 0x7F, 0},
168 {0x1BCC, 0x70F, 0x7F7F, 0},
169 {0x1C9E, 0x38, 0x7F, 0},
170 {0x1CA0, 0x70F, 0x7F7F, 0},
172 {0x1CA4, 0x1, 0xFFFF, 0},
174 {0x1C9C, 0x0, 0xFFFF, 0},
175 {0x1EA2, 0x1B, 0x1F, 0},
176 {0x1EA4, 0xC00, 0x1C00, 0},
177 {0x1EA6, 0xC00, 0x1C00, 0},
178 {0x1EA8, 0xC00, 0x1C00, 0},
184 {0x1390, 0x1, 0x1, 0},
186 {0x1490, 0x1, 0x1, 0},
188 {0x1510, 0x1, 0x1, 0},
190 {0x1590, 0x1, 0x1, 0},
192 {0x1690, 0x1, 0x1, 0},
194 {0x1710, 0x1, 0x1, 1},
196 {0x1716, 0x1, 0x1, 1},
198 {0x1610, 0x1, 0x1, 1},
200 {0x1616, 0x1, 0x1, 1},
202 {0x1410, 0x1, 0x1, 0},
204 {0x1BD0, 0x1, 0x1, 0},
206 {0x1BAE, 0x1, 0x1, 1},
208 {0x1BB4, 0x1, 0x1, 1},
210 {0x1B4E, 0x1, 0x1, 0},
212 {0x1A8A, 0x1, 0x1, 1},
214 {0x1A90, 0x1, 0x1, 1},
216 {0x1C1E, 0x1, 0x1, 2},
218 {0x1C24, 0x0, 0x1, 2},
220 {0x1C46, 0x1, 0x1, 0},
222 {0x1D1E, 0x1, 0x1, 0},
224 {0x1D1E, 0x1, 0x1, 0},
226 {0x1D8A, 0x1, 0x1, 0},
228 {0x1C5A, 0x1, 0x1, 0},
230 {0x1C6E, 0x1, 0x1, 0},
232 {0x1C9E, 0x1, 0x1, 0},
234 {0x1C8A, 0x1, 0x1, 0},
236 {0x1B90, 0x1, 0x1, 0},
238 {0x1CB2, 0x1, 0x1, 0},
240 {0x1D34, 0x1, 0x1, 0},
242 {0x1D34, 0x1, 0x1, 0},
244 {0x1A9E, 0x1, 0x1, 1},
246 {0x1AA4, 0x1, 0x1, 1},
248 {0x1AB2, 0x1, 0x1, 1},
250 {0x1AB8, 0x1, 0x1, 1},
252 {0x1AC6, 0x1, 0x1, 1},
254 {0x1ACC, 0x1, 0x1, 1},
256 {0x1ADA, 0x1, 0x1, 0},
258 {0x1AEE, 0x1, 0x1, 0},
260 {0x1C0A, 0x1, 0x1, 2},
262 {0x1C10, 0x0, 0x1, 2},
264 {0x1B0A, 0x1, 0x1, 1},
266 {0x1B10, 0x1, 0x1, 1},
268 {0x1CC6, 0x1, 0x1, 0},
270 {0x1CDA, 0x1, 0x1, 0},
272 {0x1B1E, 0x1, 0x1, 0},
274 {0x1D4A, 0x1, 0x1, 0},
276 {0x1D5E, 0x1, 0x1, 0},
278 {0x1D0A, 0x1, 0x1, 0},
280 {0x1B32, 0x1, 0x1, 1},
282 {0x1B38, 0x1, 0x1, 1},
284 {0x1B32, 0x1, 0x1, 1},
286 {0x1B38, 0x1, 0x1, 1},
288 {0x1DA0, 0x1, 0x1, 1},
290 {0x1DA6, 0x0, 0x1, 1},
294 {0x1390, 0x1, 0x1, 0},
296 {0x1490, 0x1, 0x1, 0},
298 {0x1510, 0x1, 0x1, 0},
300 {0x1590, 0x1, 0x1, 0},
302 {0x1690, 0x1, 0x1, 0},
304 {0x1710, 0x1, 0x1, 3},
306 {0x1716, 0x1, 0x1, 3},
308 {0x1610, 0x1, 0x1, 3},
310 {0x1616, 0x1, 0x1, 3},
312 {0x1410, 0x1, 0x1, 0},
314 {0x1BD0, 0x1, 0x1, 0},
316 {0x1BAE, 0x1, 0x1, 3},
318 {0x1BB4, 0x1, 0x1, 3},
320 {0x1B4E, 0x1, 0x1, 0},
322 {0x1A8A, 0x1, 0x1, 3},
324 {0x1A90, 0x1, 0x1, 3},
326 {0x1C1E, 0x1, 0x1, 2},
328 {0x1C24, 0x0, 0x1, 2},
330 {0x1C46, 0x1, 0x1, 0},
332 {0x1D1E, 0x1, 0x1, 0},
334 {0x1D1E, 0x1, 0x1, 0},
336 {0x1D8A, 0x1, 0x1, 0},
338 {0x1C5A, 0x1, 0x1, 0},
340 {0x1C6E, 0x1, 0x1, 0},
342 {0x1C9E, 0x1, 0x1, 0},
344 {0x1C8A, 0x1, 0x1, 0},
346 {0x1B90, 0x1, 0x1, 0},
348 {0x1CB2, 0x1, 0x1, 0},
350 {0x1D34, 0x1, 0x1, 0},
352 {0x1D34, 0x1, 0x1, 0},
354 {0x1A9E, 0x1, 0x1, 3},
356 {0x1AA4, 0x1, 0x1, 3},
358 {0x1AB2, 0x1, 0x1, 3},
360 {0x1AB8, 0x1, 0x1, 3},
362 {0x1AC6, 0x1, 0x1, 0},
364 {0x1ADA, 0x1, 0x1, 0},
366 {0x1AEE, 0x1, 0x1, 0},
368 {0x1C0A, 0x1, 0x1, 2},
370 {0x1C10, 0x0, 0x1, 2},
372 {0x1B0A, 0x1, 0x1, 3},
374 {0x1B10, 0x1, 0x1, 3},
376 {0x1CC6, 0x1, 0x1, 0},
378 {0x1CDA, 0x1, 0x1, 0},
380 {0x1B1E, 0x1, 0x1, 0},
382 {0x1D4A, 0x1, 0x1, 0},
384 {0x1D5E, 0x1, 0x1, 0},
386 {0x1D0A, 0x1, 0x1, 0},
388 {0x1B32, 0x1, 0x1, 3},
390 {0x1B38, 0x1, 0x1, 3},
392 {0x1B32, 0x1, 0x1, 3},
394 {0x1B38, 0x1, 0x1, 3},
396 {0x1DA0, 0x1, 0x1, 3},
398 {0x1DA6, 0x0, 0x1, 3},
404 {0x14A6, 0x20, 0x7F, 0},
406 {0x14A6, 0x20, 0x7F, 8},
408 {0x14A4, 0x1, 0x1, 0},
410 {0x14A4, 0x0, 0x1, 1},
412 {0x1BC6, 0x40, 0x7F, 0},
414 {0x1BC6, 0x40, 0x7F, 8},
416 {0x1BC4, 0x1, 0x1, 0},
418 {0x1BC4, 0x0, 0x1, 1},
420 {0x134, 0x1, 0x1, 4},
424 0, -10000, -20000, -30000, -40000, -50000, -60000, -70000,
425 80000, 70000, 60000, 50000, 40000, 30000, 20000, 10000,
482 return 500000 + vol_reg * 6250;
489 assert(vcore_uv >= 500000);
490 assert(vcore_uv <= 1100000);
492 vol_reg = (vcore_uv - 500000) / 6250;
504 return 500000 + vol_reg * 6250;
514 vol_reg = (v_uv - 500000) / 6250;
526 return 500000 + vol_reg * 6250;
536 vol_reg = (v_uv - 500000) / 6250;
548 return 500000 + vol_reg * 12500;
555 assert(vdram_uv >= 500000);
556 assert(vdram_uv <= 1300000);
558 vol_reg = (vdram_uv - 500000) / 12500;
576 return 600 * 1000 - efuse_votrim +
vddq_votrim[cali_trim];
581 int target_mv, dram2_ori_mv, cali_offset_uv;
584 assert(vddq_uv >= 530000);
585 assert(vddq_uv <= 680000);
588 target_mv = (vddq_uv / 1000) / 10 * 10;
591 cali_offset_uv = 1000 * (target_mv - dram2_ori_mv);
593 if (cali_offset_uv >= 80000)
595 else if (cali_offset_uv <= -70000)
629 printk(
BIOS_ERR,
"ERROR[%s] VMCH read fail: %d\n", __func__, vol_reg);
651 die(
"ERROR[%s]: VMCH voltage %u is not support.\n", __func__, vmch_uv);
683 printk(
BIOS_ERR,
"ERROR[%s] VMC read fail: %d\n", __func__, vol_reg);
708 die(
"ERROR[%s]: VMC voltage %u is not support.\n", __func__, vmc_uv);
749 printk(
BIOS_ERR,
"ERROR[%s] VCN33 read fail: %d\n", __func__, vol_reg);
771 die(
"ERROR[%s]: VCN33 voltage %u is not support.\n", __func__, vcn33_uv);
844 u16 vsim2_reg, cali_mv;
846 cali_mv = vsim2_mv % 100;
847 assert(cali_mv % 10 == 0);
849 switch (vsim2_mv - cali_mv) {
866 printk(
BIOS_ERR,
"%s: voltage %d is not supported\n", __func__, vsim2_mv);
947 die(
"ERROR - Failed to initialize pmic wrap!");
#define assert(statement)
#define printk(level,...)
void __noreturn die(const char *fmt,...)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_usecs_expire(struct stopwatch *sw, long us)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
@ 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 u32 pmic_get_vproc12_vol(void)
u32 mt6366_get_voltage(enum mt6366_regulator_id id)
static void pmic_set_vsram_proc12_vol(u32 v_uv)
static void pmic_check_hwcid(void)
static u32 pmic_get_vsram_proc12_vol(void)
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[]
static void pmic_set_vcn33_vol(u32 vcn33_uv)
static void pmic_set_vdram1_vol(u32 vdram_uv)
static void mt6366_init_setting(void)
static u32 pmic_get_vcore_vol(void)
static void wk_power_down_seq(void)
static u32 pmic_get_vmch_vol(void)
static struct pmic_setting init_setting[]
static void pmic_set_vproc12_vol(u32 v_uv)
static void mt6366_lp_setting(void)
static u32 pmic_get_vdram1_vol(void)
static u32 pmic_read_efuse(int i)
static void pmic_set_vddq_vol(u32 vddq_uv)
static u32 pmic_get_vddq_vol(void)
static void pmic_set_vmc_vol(u32 vmc_uv)
static void pmic_set_vcore_vol(u32 vcore_uv)
void mt6366_set_voltage(enum mt6366_regulator_id id, u32 voltage_uv)
void mt6366_set_power_hold(bool enable)
static void pmic_set_vmch_vol(u32 vmch_uv)
static u32 pmic_get_vrf12_vol(void)
static void mt6366_protect_control(bool en_protect)
static void pmic_enable_vrf12(void)
static u32 pmic_get_vcn33_vol(void)
static struct pmic_setting scp_setting[]
void mt6366_init_scp_voltage(void)
void mt6366_set_vsim2_cali_mv(u32 vsim2_mv)
static u32 pmic_get_vmc_vol(void)
@ PMIC_VSRAM_PROC12_VOSEL
@ PMIC_VSRAM_PROC12_OP_EN
void pmif_spmi_set_lp_mode(void)
static u16 pwrap_read_field(u16 reg, u16 mask, u16 shift)
static void pwrap_write_field(u16 reg, u16 val, u16 mask, u16 shift)