1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/mod_devicetable.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/pm_runtime.h>
12 #include <linux/regmap.h>
13
14 #include <dt-bindings/clock/qcom,sa8775p-dispcc.h>
15
16 #include "clk-alpha-pll.h"
17 #include "clk-branch.h"
18 #include "clk-pll.h"
19 #include "clk-rcg.h"
20 #include "clk-regmap.h"
21 #include "clk-regmap-divider.h"
22 #include "clk-regmap-mux.h"
23 #include "common.h"
24 #include "gdsc.h"
25 #include "reset.h"
26
27 enum {
28 DT_IFACE,
29 DT_BI_TCXO,
30 DT_BI_TCXO_AO,
31 DT_SLEEP_CLK,
32 DT_DP0_PHY_PLL_LINK_CLK,
33 DT_DP0_PHY_PLL_VCO_DIV_CLK,
34 DT_DP1_PHY_PLL_LINK_CLK,
35 DT_DP1_PHY_PLL_VCO_DIV_CLK,
36 DT_DSI0_PHY_PLL_OUT_BYTECLK,
37 DT_DSI0_PHY_PLL_OUT_DSICLK,
38 DT_DSI1_PHY_PLL_OUT_BYTECLK,
39 DT_DSI1_PHY_PLL_OUT_DSICLK,
40 };
41
42 enum {
43 P_BI_TCXO,
44 P_DP0_PHY_PLL_LINK_CLK,
45 P_DP0_PHY_PLL_VCO_DIV_CLK,
46 P_DP1_PHY_PLL_LINK_CLK,
47 P_DP1_PHY_PLL_VCO_DIV_CLK,
48 P_DSI0_PHY_PLL_OUT_BYTECLK,
49 P_DSI0_PHY_PLL_OUT_DSICLK,
50 P_DSI1_PHY_PLL_OUT_BYTECLK,
51 P_DSI1_PHY_PLL_OUT_DSICLK,
52 P_MDSS_0_DISP_CC_PLL0_OUT_MAIN,
53 P_MDSS_0_DISP_CC_PLL1_OUT_EVEN,
54 P_MDSS_0_DISP_CC_PLL1_OUT_MAIN,
55 P_SLEEP_CLK,
56 };
57
58 static const struct pll_vco lucid_evo_vco[] = {
59 { 249600000, 2020000000, 0 },
60 };
61
62 static const struct alpha_pll_config mdss_0_disp_cc_pll0_config = {
63 .l = 0x3a,
64 .alpha = 0x9800,
65 .config_ctl_val = 0x20485699,
66 .config_ctl_hi_val = 0x00182261,
67 .config_ctl_hi1_val = 0x32aa299c,
68 .user_ctl_val = 0x00000000,
69 .user_ctl_hi_val = 0x00400805,
70 };
71
72 static struct clk_alpha_pll mdss_0_disp_cc_pll0 = {
73 .offset = 0x0,
74 .vco_table = lucid_evo_vco,
75 .num_vco = ARRAY_SIZE(lucid_evo_vco),
76 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
77 .clkr = {
78 .hw.init = &(const struct clk_init_data) {
79 .name = "mdss_0_disp_cc_pll0",
80 .parent_data = &(const struct clk_parent_data) {
81 .index = DT_BI_TCXO,
82 },
83 .num_parents = 1,
84 .ops = &clk_alpha_pll_lucid_evo_ops,
85 },
86 },
87 };
88
89 static const struct alpha_pll_config mdss_0_disp_cc_pll1_config = {
90 .l = 0x1f,
91 .alpha = 0x4000,
92 .config_ctl_val = 0x20485699,
93 .config_ctl_hi_val = 0x00182261,
94 .config_ctl_hi1_val = 0x32aa299c,
95 .user_ctl_val = 0x00000000,
96 .user_ctl_hi_val = 0x00400805,
97 };
98
99 static struct clk_alpha_pll mdss_0_disp_cc_pll1 = {
100 .offset = 0x1000,
101 .vco_table = lucid_evo_vco,
102 .num_vco = ARRAY_SIZE(lucid_evo_vco),
103 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
104 .clkr = {
105 .hw.init = &(const struct clk_init_data) {
106 .name = "mdss_0_disp_cc_pll1",
107 .parent_data = &(const struct clk_parent_data) {
108 .index = DT_BI_TCXO,
109 },
110 .num_parents = 1,
111 .ops = &clk_alpha_pll_lucid_evo_ops,
112 },
113 },
114 };
115
116 static const struct parent_map disp_cc_0_parent_map_0[] = {
117 { P_BI_TCXO, 0 },
118 { P_DP0_PHY_PLL_LINK_CLK, 1 },
119 { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
120 { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
121 };
122
123 static const struct clk_parent_data disp_cc_0_parent_data_0[] = {
124 { .index = DT_BI_TCXO },
125 { .index = DT_DP0_PHY_PLL_LINK_CLK },
126 { .index = DT_DP0_PHY_PLL_VCO_DIV_CLK },
127 { .index = DT_DP1_PHY_PLL_VCO_DIV_CLK },
128 };
129
130 static const struct parent_map disp_cc_0_parent_map_1[] = {
131 { P_BI_TCXO, 0 },
132 { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
133 { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
134 { P_DSI1_PHY_PLL_OUT_DSICLK, 3 },
135 { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
136 };
137
138 static const struct clk_parent_data disp_cc_0_parent_data_1[] = {
139 { .index = DT_BI_TCXO },
140 { .index = DT_DSI0_PHY_PLL_OUT_DSICLK },
141 { .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
142 { .index = DT_DSI1_PHY_PLL_OUT_DSICLK },
143 { .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
144 };
145
146 static const struct parent_map disp_cc_0_parent_map_2[] = {
147 { P_BI_TCXO, 0 },
148 };
149
150 static const struct clk_parent_data disp_cc_0_parent_data_2[] = {
151 { .index = DT_BI_TCXO },
152 };
153
154 static const struct clk_parent_data disp_cc_0_parent_data_2_ao[] = {
155 { .index = DT_BI_TCXO_AO },
156 };
157
158 static const struct parent_map disp_cc_0_parent_map_3[] = {
159 { P_BI_TCXO, 0 },
160 { P_DP0_PHY_PLL_LINK_CLK, 1 },
161 { P_DP1_PHY_PLL_LINK_CLK, 2 },
162 };
163
164 static const struct clk_parent_data disp_cc_0_parent_data_3[] = {
165 { .index = DT_BI_TCXO },
166 { .index = DT_DP0_PHY_PLL_LINK_CLK },
167 { .index = DT_DP1_PHY_PLL_LINK_CLK },
168 };
169
170 static const struct parent_map disp_cc_0_parent_map_4[] = {
171 { P_BI_TCXO, 0 },
172 { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
173 { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
174 };
175
176 static const struct clk_parent_data disp_cc_0_parent_data_4[] = {
177 { .index = DT_BI_TCXO },
178 { .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
179 { .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
180 };
181
182 static const struct parent_map disp_cc_0_parent_map_5[] = {
183 { P_BI_TCXO, 0 },
184 { P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 4 },
185 { P_MDSS_0_DISP_CC_PLL1_OUT_EVEN, 6 },
186 };
187
188 static const struct clk_parent_data disp_cc_0_parent_data_5[] = {
189 { .index = DT_BI_TCXO },
190 { .hw = &mdss_0_disp_cc_pll1.clkr.hw },
191 { .hw = &mdss_0_disp_cc_pll1.clkr.hw },
192 };
193
194 static const struct parent_map disp_cc_0_parent_map_6[] = {
195 { P_BI_TCXO, 0 },
196 { P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 1 },
197 { P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 4 },
198 { P_MDSS_0_DISP_CC_PLL1_OUT_EVEN, 6 },
199 };
200
201 static const struct clk_parent_data disp_cc_0_parent_data_6[] = {
202 { .index = DT_BI_TCXO },
203 { .hw = &mdss_0_disp_cc_pll0.clkr.hw },
204 { .hw = &mdss_0_disp_cc_pll1.clkr.hw },
205 { .hw = &mdss_0_disp_cc_pll1.clkr.hw },
206 };
207
208 static const struct parent_map disp_cc_0_parent_map_7[] = {
209 { P_SLEEP_CLK, 0 },
210 };
211
212 static const struct clk_parent_data disp_cc_0_parent_data_7[] = {
213 { .index = DT_SLEEP_CLK },
214 };
215
216 static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_ahb_clk_src[] = {
217 F(37500000, P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
218 F(75000000, P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
219 { }
220 };
221
222 static struct clk_rcg2 mdss_0_disp_cc_mdss_ahb_clk_src = {
223 .cmd_rcgr = 0x824c,
224 .mnd_width = 0,
225 .hid_width = 5,
226 .parent_map = disp_cc_0_parent_map_5,
227 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_ahb_clk_src,
228 .clkr.hw.init = &(const struct clk_init_data) {
229 .name = "mdss_0_disp_cc_mdss_ahb_clk_src",
230 .parent_data = disp_cc_0_parent_data_5,
231 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_5),
232 .flags = CLK_SET_RATE_PARENT,
233 .ops = &clk_rcg2_shared_ops,
234 },
235 };
236
237 static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_byte0_clk_src[] = {
238 F(19200000, P_BI_TCXO, 1, 0, 0),
239 { }
240 };
241
242 static struct clk_rcg2 mdss_0_disp_cc_mdss_byte0_clk_src = {
243 .cmd_rcgr = 0x80ec,
244 .mnd_width = 0,
245 .hid_width = 5,
246 .parent_map = disp_cc_0_parent_map_1,
247 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
248 .clkr.hw.init = &(const struct clk_init_data) {
249 .name = "mdss_0_disp_cc_mdss_byte0_clk_src",
250 .parent_data = disp_cc_0_parent_data_1,
251 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_1),
252 .flags = CLK_SET_RATE_PARENT,
253 .ops = &clk_byte2_ops,
254 },
255 };
256
257 static struct clk_rcg2 mdss_0_disp_cc_mdss_byte1_clk_src = {
258 .cmd_rcgr = 0x8108,
259 .mnd_width = 0,
260 .hid_width = 5,
261 .parent_map = disp_cc_0_parent_map_1,
262 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
263 .clkr.hw.init = &(const struct clk_init_data) {
264 .name = "mdss_0_disp_cc_mdss_byte1_clk_src",
265 .parent_data = disp_cc_0_parent_data_1,
266 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_1),
267 .flags = CLK_SET_RATE_PARENT,
268 .ops = &clk_byte2_ops,
269 },
270 };
271
272 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_aux_clk_src = {
273 .cmd_rcgr = 0x81b8,
274 .mnd_width = 0,
275 .hid_width = 5,
276 .parent_map = disp_cc_0_parent_map_2,
277 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
278 .clkr.hw.init = &(const struct clk_init_data) {
279 .name = "mdss_0_disp_cc_mdss_dptx0_aux_clk_src",
280 .parent_data = disp_cc_0_parent_data_2,
281 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_2),
282 .flags = CLK_SET_RATE_PARENT,
283 .ops = &clk_rcg2_shared_ops,
284 },
285 };
286
287 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_crypto_clk_src = {
288 .cmd_rcgr = 0x8170,
289 .mnd_width = 0,
290 .hid_width = 5,
291 .parent_map = disp_cc_0_parent_map_3,
292 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
293 .clkr.hw.init = &(const struct clk_init_data) {
294 .name = "mdss_0_disp_cc_mdss_dptx0_crypto_clk_src",
295 .parent_data = disp_cc_0_parent_data_3,
296 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_3),
297 .flags = CLK_SET_RATE_PARENT,
298 .ops = &clk_byte2_ops,
299 },
300 };
301
302 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_link_clk_src = {
303 .cmd_rcgr = 0x8154,
304 .mnd_width = 0,
305 .hid_width = 5,
306 .parent_map = disp_cc_0_parent_map_3,
307 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
308 .clkr.hw.init = &(const struct clk_init_data) {
309 .name = "mdss_0_disp_cc_mdss_dptx0_link_clk_src",
310 .parent_data = disp_cc_0_parent_data_3,
311 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_3),
312 .flags = CLK_SET_RATE_PARENT,
313 .ops = &clk_byte2_ops,
314 },
315 };
316
317 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src = {
318 .cmd_rcgr = 0x8188,
319 .mnd_width = 16,
320 .hid_width = 5,
321 .parent_map = disp_cc_0_parent_map_0,
322 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
323 .clkr.hw.init = &(const struct clk_init_data) {
324 .name = "mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src",
325 .parent_data = disp_cc_0_parent_data_0,
326 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
327 .flags = CLK_SET_RATE_PARENT,
328 .ops = &clk_dp_ops,
329 },
330 };
331
332 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src = {
333 .cmd_rcgr = 0x81a0,
334 .mnd_width = 16,
335 .hid_width = 5,
336 .parent_map = disp_cc_0_parent_map_0,
337 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
338 .clkr.hw.init = &(const struct clk_init_data) {
339 .name = "mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src",
340 .parent_data = disp_cc_0_parent_data_0,
341 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
342 .flags = CLK_SET_RATE_PARENT,
343 .ops = &clk_dp_ops,
344 },
345 };
346
347 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src = {
348 .cmd_rcgr = 0x826c,
349 .mnd_width = 16,
350 .hid_width = 5,
351 .parent_map = disp_cc_0_parent_map_0,
352 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
353 .clkr.hw.init = &(const struct clk_init_data) {
354 .name = "mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src",
355 .parent_data = disp_cc_0_parent_data_0,
356 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
357 .flags = CLK_SET_RATE_PARENT,
358 .ops = &clk_dp_ops,
359 },
360 };
361
362 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src = {
363 .cmd_rcgr = 0x8284,
364 .mnd_width = 16,
365 .hid_width = 5,
366 .parent_map = disp_cc_0_parent_map_0,
367 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
368 .clkr.hw.init = &(const struct clk_init_data) {
369 .name = "mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src",
370 .parent_data = disp_cc_0_parent_data_0,
371 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
372 .flags = CLK_SET_RATE_PARENT,
373 .ops = &clk_dp_ops,
374 },
375 };
376
377 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_aux_clk_src = {
378 .cmd_rcgr = 0x8234,
379 .mnd_width = 0,
380 .hid_width = 5,
381 .parent_map = disp_cc_0_parent_map_2,
382 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
383 .clkr.hw.init = &(const struct clk_init_data) {
384 .name = "mdss_0_disp_cc_mdss_dptx1_aux_clk_src",
385 .parent_data = disp_cc_0_parent_data_2,
386 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_2),
387 .flags = CLK_SET_RATE_PARENT,
388 .ops = &clk_rcg2_shared_ops,
389 },
390 };
391
392 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_crypto_clk_src = {
393 .cmd_rcgr = 0x821c,
394 .mnd_width = 0,
395 .hid_width = 5,
396 .parent_map = disp_cc_0_parent_map_3,
397 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
398 .clkr.hw.init = &(const struct clk_init_data) {
399 .name = "mdss_0_disp_cc_mdss_dptx1_crypto_clk_src",
400 .parent_data = disp_cc_0_parent_data_3,
401 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_3),
402 .flags = CLK_SET_RATE_PARENT,
403 .ops = &clk_byte2_ops,
404 },
405 };
406
407 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_link_clk_src = {
408 .cmd_rcgr = 0x8200,
409 .mnd_width = 0,
410 .hid_width = 5,
411 .parent_map = disp_cc_0_parent_map_3,
412 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
413 .clkr.hw.init = &(const struct clk_init_data) {
414 .name = "mdss_0_disp_cc_mdss_dptx1_link_clk_src",
415 .parent_data = disp_cc_0_parent_data_3,
416 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_3),
417 .flags = CLK_SET_RATE_PARENT,
418 .ops = &clk_byte2_ops,
419 },
420 };
421
422 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src = {
423 .cmd_rcgr = 0x81d0,
424 .mnd_width = 16,
425 .hid_width = 5,
426 .parent_map = disp_cc_0_parent_map_0,
427 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
428 .clkr.hw.init = &(const struct clk_init_data) {
429 .name = "mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src",
430 .parent_data = disp_cc_0_parent_data_0,
431 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
432 .flags = CLK_SET_RATE_PARENT,
433 .ops = &clk_dp_ops,
434 },
435 };
436
437 static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src = {
438 .cmd_rcgr = 0x81e8,
439 .mnd_width = 16,
440 .hid_width = 5,
441 .parent_map = disp_cc_0_parent_map_0,
442 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
443 .clkr.hw.init = &(const struct clk_init_data) {
444 .name = "mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src",
445 .parent_data = disp_cc_0_parent_data_0,
446 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_0),
447 .flags = CLK_SET_RATE_PARENT,
448 .ops = &clk_dp_ops,
449 },
450 };
451
452 static struct clk_rcg2 mdss_0_disp_cc_mdss_esc0_clk_src = {
453 .cmd_rcgr = 0x8124,
454 .mnd_width = 0,
455 .hid_width = 5,
456 .parent_map = disp_cc_0_parent_map_4,
457 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
458 .clkr.hw.init = &(const struct clk_init_data) {
459 .name = "mdss_0_disp_cc_mdss_esc0_clk_src",
460 .parent_data = disp_cc_0_parent_data_4,
461 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_4),
462 .flags = CLK_SET_RATE_PARENT,
463 .ops = &clk_rcg2_shared_ops,
464 },
465 };
466
467 static struct clk_rcg2 mdss_0_disp_cc_mdss_esc1_clk_src = {
468 .cmd_rcgr = 0x813c,
469 .mnd_width = 0,
470 .hid_width = 5,
471 .parent_map = disp_cc_0_parent_map_4,
472 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
473 .clkr.hw.init = &(const struct clk_init_data) {
474 .name = "mdss_0_disp_cc_mdss_esc1_clk_src",
475 .parent_data = disp_cc_0_parent_data_4,
476 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_4),
477 .flags = CLK_SET_RATE_PARENT,
478 .ops = &clk_rcg2_shared_ops,
479 },
480 };
481
482 static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_mdp_clk_src[] = {
483 F(375000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
484 F(500000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
485 F(575000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
486 F(650000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
487 { }
488 };
489
490 static struct clk_rcg2 mdss_0_disp_cc_mdss_mdp_clk_src = {
491 .cmd_rcgr = 0x80bc,
492 .mnd_width = 0,
493 .hid_width = 5,
494 .parent_map = disp_cc_0_parent_map_6,
495 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_mdp_clk_src,
496 .clkr.hw.init = &(const struct clk_init_data) {
497 .name = "mdss_0_disp_cc_mdss_mdp_clk_src",
498 .parent_data = disp_cc_0_parent_data_6,
499 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_6),
500 .flags = CLK_SET_RATE_PARENT,
501 .ops = &clk_rcg2_shared_ops,
502 },
503 };
504
505 static struct clk_rcg2 mdss_0_disp_cc_mdss_pclk0_clk_src = {
506 .cmd_rcgr = 0x808c,
507 .mnd_width = 8,
508 .hid_width = 5,
509 .parent_map = disp_cc_0_parent_map_1,
510 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
511 .clkr.hw.init = &(const struct clk_init_data) {
512 .name = "mdss_0_disp_cc_mdss_pclk0_clk_src",
513 .parent_data = disp_cc_0_parent_data_1,
514 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_1),
515 .flags = CLK_SET_RATE_PARENT,
516 .ops = &clk_pixel_ops,
517 },
518 };
519
520 static struct clk_rcg2 mdss_0_disp_cc_mdss_pclk1_clk_src = {
521 .cmd_rcgr = 0x80a4,
522 .mnd_width = 8,
523 .hid_width = 5,
524 .parent_map = disp_cc_0_parent_map_1,
525 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
526 .clkr.hw.init = &(const struct clk_init_data) {
527 .name = "mdss_0_disp_cc_mdss_pclk1_clk_src",
528 .parent_data = disp_cc_0_parent_data_1,
529 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_1),
530 .flags = CLK_SET_RATE_PARENT,
531 .ops = &clk_pixel_ops,
532 },
533 };
534
535 static struct clk_rcg2 mdss_0_disp_cc_mdss_vsync_clk_src = {
536 .cmd_rcgr = 0x80d4,
537 .mnd_width = 0,
538 .hid_width = 5,
539 .parent_map = disp_cc_0_parent_map_2,
540 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
541 .clkr.hw.init = &(const struct clk_init_data) {
542 .name = "mdss_0_disp_cc_mdss_vsync_clk_src",
543 .parent_data = disp_cc_0_parent_data_2,
544 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_2),
545 .flags = CLK_SET_RATE_PARENT,
546 .ops = &clk_rcg2_shared_ops,
547 },
548 };
549
550 static const struct freq_tbl ftbl_mdss_0_disp_cc_sleep_clk_src[] = {
551 F(32000, P_SLEEP_CLK, 1, 0, 0),
552 { }
553 };
554
555 static struct clk_rcg2 mdss_0_disp_cc_sleep_clk_src = {
556 .cmd_rcgr = 0xc058,
557 .mnd_width = 0,
558 .hid_width = 5,
559 .parent_map = disp_cc_0_parent_map_7,
560 .freq_tbl = ftbl_mdss_0_disp_cc_sleep_clk_src,
561 .clkr.hw.init = &(const struct clk_init_data) {
562 .name = "mdss_0_disp_cc_sleep_clk_src",
563 .parent_data = disp_cc_0_parent_data_7,
564 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_7),
565 .flags = CLK_SET_RATE_PARENT,
566 .ops = &clk_rcg2_shared_ops,
567 },
568 };
569
570 static struct clk_rcg2 mdss_0_disp_cc_xo_clk_src = {
571 .cmd_rcgr = 0xc03c,
572 .mnd_width = 0,
573 .hid_width = 5,
574 .parent_map = disp_cc_0_parent_map_2,
575 .freq_tbl = ftbl_mdss_0_disp_cc_mdss_byte0_clk_src,
576 .clkr.hw.init = &(const struct clk_init_data) {
577 .name = "mdss_0_disp_cc_xo_clk_src",
578 .parent_data = disp_cc_0_parent_data_2_ao,
579 .num_parents = ARRAY_SIZE(disp_cc_0_parent_data_2_ao),
580 .flags = CLK_SET_RATE_PARENT,
581 .ops = &clk_rcg2_shared_ops,
582 },
583 };
584
585 static struct clk_regmap_div mdss_0_disp_cc_mdss_byte0_div_clk_src = {
586 .reg = 0x8104,
587 .shift = 0,
588 .width = 4,
589 .clkr.hw.init = &(const struct clk_init_data) {
590 .name = "mdss_0_disp_cc_mdss_byte0_div_clk_src",
591 .parent_hws = (const struct clk_hw*[]) {
592 &mdss_0_disp_cc_mdss_byte0_clk_src.clkr.hw,
593 },
594 .num_parents = 1,
595 .flags = CLK_SET_RATE_PARENT,
596 .ops = &clk_regmap_div_ops,
597 },
598 };
599
600 static struct clk_regmap_div mdss_0_disp_cc_mdss_byte1_div_clk_src = {
601 .reg = 0x8120,
602 .shift = 0,
603 .width = 4,
604 .clkr.hw.init = &(const struct clk_init_data) {
605 .name = "mdss_0_disp_cc_mdss_byte1_div_clk_src",
606 .parent_hws = (const struct clk_hw*[]) {
607 &mdss_0_disp_cc_mdss_byte1_clk_src.clkr.hw,
608 },
609 .num_parents = 1,
610 .flags = CLK_SET_RATE_PARENT,
611 .ops = &clk_regmap_div_ops,
612 },
613 };
614
615 static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx0_link_div_clk_src = {
616 .reg = 0x816c,
617 .shift = 0,
618 .width = 4,
619 .clkr.hw.init = &(const struct clk_init_data) {
620 .name = "mdss_0_disp_cc_mdss_dptx0_link_div_clk_src",
621 .parent_hws = (const struct clk_hw*[]) {
622 &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
623 },
624 .num_parents = 1,
625 .flags = CLK_SET_RATE_PARENT,
626 .ops = &clk_regmap_div_ro_ops,
627 },
628 };
629
630 static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx1_link_div_clk_src = {
631 .reg = 0x8218,
632 .shift = 0,
633 .width = 4,
634 .clkr.hw.init = &(const struct clk_init_data) {
635 .name = "mdss_0_disp_cc_mdss_dptx1_link_div_clk_src",
636 .parent_hws = (const struct clk_hw*[]) {
637 &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
638 },
639 .num_parents = 1,
640 .flags = CLK_SET_RATE_PARENT,
641 .ops = &clk_regmap_div_ro_ops,
642 },
643 };
644
645 static struct clk_branch mdss_0_disp_cc_mdss_ahb1_clk = {
646 .halt_reg = 0x8088,
647 .halt_check = BRANCH_HALT,
648 .clkr = {
649 .enable_reg = 0x8088,
650 .enable_mask = BIT(0),
651 .hw.init = &(const struct clk_init_data) {
652 .name = "mdss_0_disp_cc_mdss_ahb1_clk",
653 .parent_hws = (const struct clk_hw*[]) {
654 &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw,
655 },
656 .num_parents = 1,
657 .flags = CLK_SET_RATE_PARENT,
658 .ops = &clk_branch2_ops,
659 },
660 },
661 };
662
663 static struct clk_branch mdss_0_disp_cc_mdss_ahb_clk = {
664 .halt_reg = 0x8084,
665 .halt_check = BRANCH_HALT,
666 .clkr = {
667 .enable_reg = 0x8084,
668 .enable_mask = BIT(0),
669 .hw.init = &(const struct clk_init_data) {
670 .name = "mdss_0_disp_cc_mdss_ahb_clk",
671 .parent_hws = (const struct clk_hw*[]) {
672 &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw,
673 },
674 .num_parents = 1,
675 .flags = CLK_SET_RATE_PARENT,
676 .ops = &clk_branch2_ops,
677 },
678 },
679 };
680
681 static struct clk_branch mdss_0_disp_cc_mdss_byte0_clk = {
682 .halt_reg = 0x8034,
683 .halt_check = BRANCH_HALT,
684 .clkr = {
685 .enable_reg = 0x8034,
686 .enable_mask = BIT(0),
687 .hw.init = &(const struct clk_init_data) {
688 .name = "mdss_0_disp_cc_mdss_byte0_clk",
689 .parent_hws = (const struct clk_hw*[]) {
690 &mdss_0_disp_cc_mdss_byte0_clk_src.clkr.hw,
691 },
692 .num_parents = 1,
693 .flags = CLK_SET_RATE_PARENT,
694 .ops = &clk_branch2_ops,
695 },
696 },
697 };
698
699 static struct clk_branch mdss_0_disp_cc_mdss_byte0_intf_clk = {
700 .halt_reg = 0x8038,
701 .halt_check = BRANCH_HALT,
702 .clkr = {
703 .enable_reg = 0x8038,
704 .enable_mask = BIT(0),
705 .hw.init = &(const struct clk_init_data) {
706 .name = "mdss_0_disp_cc_mdss_byte0_intf_clk",
707 .parent_hws = (const struct clk_hw*[]) {
708 &mdss_0_disp_cc_mdss_byte0_div_clk_src.clkr.hw,
709 },
710 .num_parents = 1,
711 .flags = CLK_SET_RATE_PARENT,
712 .ops = &clk_branch2_ops,
713 },
714 },
715 };
716
717 static struct clk_branch mdss_0_disp_cc_mdss_byte1_clk = {
718 .halt_reg = 0x803c,
719 .halt_check = BRANCH_HALT,
720 .clkr = {
721 .enable_reg = 0x803c,
722 .enable_mask = BIT(0),
723 .hw.init = &(const struct clk_init_data) {
724 .name = "mdss_0_disp_cc_mdss_byte1_clk",
725 .parent_hws = (const struct clk_hw*[]) {
726 &mdss_0_disp_cc_mdss_byte1_clk_src.clkr.hw,
727 },
728 .num_parents = 1,
729 .flags = CLK_SET_RATE_PARENT,
730 .ops = &clk_branch2_ops,
731 },
732 },
733 };
734
735 static struct clk_branch mdss_0_disp_cc_mdss_byte1_intf_clk = {
736 .halt_reg = 0x8040,
737 .halt_check = BRANCH_HALT,
738 .clkr = {
739 .enable_reg = 0x8040,
740 .enable_mask = BIT(0),
741 .hw.init = &(const struct clk_init_data) {
742 .name = "mdss_0_disp_cc_mdss_byte1_intf_clk",
743 .parent_hws = (const struct clk_hw*[]) {
744 &mdss_0_disp_cc_mdss_byte1_div_clk_src.clkr.hw,
745 },
746 .num_parents = 1,
747 .flags = CLK_SET_RATE_PARENT,
748 .ops = &clk_branch2_ops,
749 },
750 },
751 };
752
753 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_aux_clk = {
754 .halt_reg = 0x805c,
755 .halt_check = BRANCH_HALT,
756 .clkr = {
757 .enable_reg = 0x805c,
758 .enable_mask = BIT(0),
759 .hw.init = &(const struct clk_init_data) {
760 .name = "mdss_0_disp_cc_mdss_dptx0_aux_clk",
761 .parent_hws = (const struct clk_hw*[]) {
762 &mdss_0_disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
763 },
764 .num_parents = 1,
765 .flags = CLK_SET_RATE_PARENT,
766 .ops = &clk_branch2_ops,
767 },
768 },
769 };
770
771 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_crypto_clk = {
772 .halt_reg = 0x8058,
773 .halt_check = BRANCH_HALT,
774 .clkr = {
775 .enable_reg = 0x8058,
776 .enable_mask = BIT(0),
777 .hw.init = &(const struct clk_init_data) {
778 .name = "mdss_0_disp_cc_mdss_dptx0_crypto_clk",
779 .parent_hws = (const struct clk_hw*[]) {
780 &mdss_0_disp_cc_mdss_dptx0_crypto_clk_src.clkr.hw,
781 },
782 .num_parents = 1,
783 .flags = CLK_SET_RATE_PARENT,
784 .ops = &clk_branch2_ops,
785 },
786 },
787 };
788
789 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_link_clk = {
790 .halt_reg = 0x804c,
791 .halt_check = BRANCH_HALT,
792 .clkr = {
793 .enable_reg = 0x804c,
794 .enable_mask = BIT(0),
795 .hw.init = &(const struct clk_init_data) {
796 .name = "mdss_0_disp_cc_mdss_dptx0_link_clk",
797 .parent_hws = (const struct clk_hw*[]) {
798 &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
799 },
800 .num_parents = 1,
801 .flags = CLK_SET_RATE_PARENT,
802 .ops = &clk_branch2_ops,
803 },
804 },
805 };
806
807 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_link_intf_clk = {
808 .halt_reg = 0x8050,
809 .halt_check = BRANCH_HALT,
810 .clkr = {
811 .enable_reg = 0x8050,
812 .enable_mask = BIT(0),
813 .hw.init = &(const struct clk_init_data) {
814 .name = "mdss_0_disp_cc_mdss_dptx0_link_intf_clk",
815 .parent_hws = (const struct clk_hw*[]) {
816 &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
817 },
818 .num_parents = 1,
819 .flags = CLK_SET_RATE_PARENT,
820 .ops = &clk_branch2_ops,
821 },
822 },
823 };
824
825 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel0_clk = {
826 .halt_reg = 0x8060,
827 .halt_check = BRANCH_HALT,
828 .clkr = {
829 .enable_reg = 0x8060,
830 .enable_mask = BIT(0),
831 .hw.init = &(const struct clk_init_data) {
832 .name = "mdss_0_disp_cc_mdss_dptx0_pixel0_clk",
833 .parent_hws = (const struct clk_hw*[]) {
834 &mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
835 },
836 .num_parents = 1,
837 .flags = CLK_SET_RATE_PARENT,
838 .ops = &clk_branch2_ops,
839 },
840 },
841 };
842
843 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel1_clk = {
844 .halt_reg = 0x8064,
845 .halt_check = BRANCH_HALT,
846 .clkr = {
847 .enable_reg = 0x8064,
848 .enable_mask = BIT(0),
849 .hw.init = &(const struct clk_init_data) {
850 .name = "mdss_0_disp_cc_mdss_dptx0_pixel1_clk",
851 .parent_hws = (const struct clk_hw*[]) {
852 &mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
853 },
854 .num_parents = 1,
855 .flags = CLK_SET_RATE_PARENT,
856 .ops = &clk_branch2_ops,
857 },
858 },
859 };
860
861 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel2_clk = {
862 .halt_reg = 0x8264,
863 .halt_check = BRANCH_HALT,
864 .clkr = {
865 .enable_reg = 0x8264,
866 .enable_mask = BIT(0),
867 .hw.init = &(const struct clk_init_data) {
868 .name = "mdss_0_disp_cc_mdss_dptx0_pixel2_clk",
869 .parent_hws = (const struct clk_hw*[]) {
870 &mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src.clkr.hw,
871 },
872 .num_parents = 1,
873 .flags = CLK_SET_RATE_PARENT,
874 .ops = &clk_branch2_ops,
875 },
876 },
877 };
878
879 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel3_clk = {
880 .halt_reg = 0x8268,
881 .halt_check = BRANCH_HALT,
882 .clkr = {
883 .enable_reg = 0x8268,
884 .enable_mask = BIT(0),
885 .hw.init = &(const struct clk_init_data) {
886 .name = "mdss_0_disp_cc_mdss_dptx0_pixel3_clk",
887 .parent_hws = (const struct clk_hw*[]) {
888 &mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src.clkr.hw,
889 },
890 .num_parents = 1,
891 .flags = CLK_SET_RATE_PARENT,
892 .ops = &clk_branch2_ops,
893 },
894 },
895 };
896
897 static struct clk_branch mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
898 .halt_reg = 0x8054,
899 .halt_check = BRANCH_HALT,
900 .clkr = {
901 .enable_reg = 0x8054,
902 .enable_mask = BIT(0),
903 .hw.init = &(const struct clk_init_data) {
904 .name = "mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_clk",
905 .parent_hws = (const struct clk_hw*[]) {
906 &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
907 },
908 .num_parents = 1,
909 .flags = CLK_SET_RATE_PARENT,
910 .ops = &clk_branch2_ops,
911 },
912 },
913 };
914
915 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_aux_clk = {
916 .halt_reg = 0x8080,
917 .halt_check = BRANCH_HALT,
918 .clkr = {
919 .enable_reg = 0x8080,
920 .enable_mask = BIT(0),
921 .hw.init = &(const struct clk_init_data) {
922 .name = "mdss_0_disp_cc_mdss_dptx1_aux_clk",
923 .parent_hws = (const struct clk_hw*[]) {
924 &mdss_0_disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
925 },
926 .num_parents = 1,
927 .flags = CLK_SET_RATE_PARENT,
928 .ops = &clk_branch2_ops,
929 },
930 },
931 };
932
933 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_crypto_clk = {
934 .halt_reg = 0x807c,
935 .halt_check = BRANCH_HALT,
936 .clkr = {
937 .enable_reg = 0x807c,
938 .enable_mask = BIT(0),
939 .hw.init = &(const struct clk_init_data) {
940 .name = "mdss_0_disp_cc_mdss_dptx1_crypto_clk",
941 .parent_hws = (const struct clk_hw*[]) {
942 &mdss_0_disp_cc_mdss_dptx1_crypto_clk_src.clkr.hw,
943 },
944 .num_parents = 1,
945 .flags = CLK_SET_RATE_PARENT,
946 .ops = &clk_branch2_ops,
947 },
948 },
949 };
950
951 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_link_clk = {
952 .halt_reg = 0x8070,
953 .halt_check = BRANCH_HALT,
954 .clkr = {
955 .enable_reg = 0x8070,
956 .enable_mask = BIT(0),
957 .hw.init = &(const struct clk_init_data) {
958 .name = "mdss_0_disp_cc_mdss_dptx1_link_clk",
959 .parent_hws = (const struct clk_hw*[]) {
960 &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
961 },
962 .num_parents = 1,
963 .flags = CLK_SET_RATE_PARENT,
964 .ops = &clk_branch2_ops,
965 },
966 },
967 };
968
969 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_link_intf_clk = {
970 .halt_reg = 0x8074,
971 .halt_check = BRANCH_HALT,
972 .clkr = {
973 .enable_reg = 0x8074,
974 .enable_mask = BIT(0),
975 .hw.init = &(const struct clk_init_data) {
976 .name = "mdss_0_disp_cc_mdss_dptx1_link_intf_clk",
977 .parent_hws = (const struct clk_hw*[]) {
978 &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
979 },
980 .num_parents = 1,
981 .flags = CLK_SET_RATE_PARENT,
982 .ops = &clk_branch2_ops,
983 },
984 },
985 };
986
987 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel0_clk = {
988 .halt_reg = 0x8068,
989 .halt_check = BRANCH_HALT,
990 .clkr = {
991 .enable_reg = 0x8068,
992 .enable_mask = BIT(0),
993 .hw.init = &(const struct clk_init_data) {
994 .name = "mdss_0_disp_cc_mdss_dptx1_pixel0_clk",
995 .parent_hws = (const struct clk_hw*[]) {
996 &mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
997 },
998 .num_parents = 1,
999 .flags = CLK_SET_RATE_PARENT,
1000 .ops = &clk_branch2_ops,
1001 },
1002 },
1003 };
1004
1005 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel1_clk = {
1006 .halt_reg = 0x806c,
1007 .halt_check = BRANCH_HALT,
1008 .clkr = {
1009 .enable_reg = 0x806c,
1010 .enable_mask = BIT(0),
1011 .hw.init = &(const struct clk_init_data) {
1012 .name = "mdss_0_disp_cc_mdss_dptx1_pixel1_clk",
1013 .parent_hws = (const struct clk_hw*[]) {
1014 &mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
1015 },
1016 .num_parents = 1,
1017 .flags = CLK_SET_RATE_PARENT,
1018 .ops = &clk_branch2_ops,
1019 },
1020 },
1021 };
1022
1023 static struct clk_branch mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
1024 .halt_reg = 0x8078,
1025 .halt_check = BRANCH_HALT,
1026 .clkr = {
1027 .enable_reg = 0x8078,
1028 .enable_mask = BIT(0),
1029 .hw.init = &(const struct clk_init_data) {
1030 .name = "mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_clk",
1031 .parent_hws = (const struct clk_hw*[]) {
1032 &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
1033 },
1034 .num_parents = 1,
1035 .flags = CLK_SET_RATE_PARENT,
1036 .ops = &clk_branch2_ops,
1037 },
1038 },
1039 };
1040
1041 static struct clk_branch mdss_0_disp_cc_mdss_esc0_clk = {
1042 .halt_reg = 0x8044,
1043 .halt_check = BRANCH_HALT,
1044 .clkr = {
1045 .enable_reg = 0x8044,
1046 .enable_mask = BIT(0),
1047 .hw.init = &(const struct clk_init_data) {
1048 .name = "mdss_0_disp_cc_mdss_esc0_clk",
1049 .parent_hws = (const struct clk_hw*[]) {
1050 &mdss_0_disp_cc_mdss_esc0_clk_src.clkr.hw,
1051 },
1052 .num_parents = 1,
1053 .flags = CLK_SET_RATE_PARENT,
1054 .ops = &clk_branch2_ops,
1055 },
1056 },
1057 };
1058
1059 static struct clk_branch mdss_0_disp_cc_mdss_esc1_clk = {
1060 .halt_reg = 0x8048,
1061 .halt_check = BRANCH_HALT,
1062 .clkr = {
1063 .enable_reg = 0x8048,
1064 .enable_mask = BIT(0),
1065 .hw.init = &(const struct clk_init_data) {
1066 .name = "mdss_0_disp_cc_mdss_esc1_clk",
1067 .parent_hws = (const struct clk_hw*[]) {
1068 &mdss_0_disp_cc_mdss_esc1_clk_src.clkr.hw,
1069 },
1070 .num_parents = 1,
1071 .flags = CLK_SET_RATE_PARENT,
1072 .ops = &clk_branch2_ops,
1073 },
1074 },
1075 };
1076
1077 static struct clk_branch mdss_0_disp_cc_mdss_mdp1_clk = {
1078 .halt_reg = 0x8014,
1079 .halt_check = BRANCH_HALT,
1080 .clkr = {
1081 .enable_reg = 0x8014,
1082 .enable_mask = BIT(0),
1083 .hw.init = &(const struct clk_init_data) {
1084 .name = "mdss_0_disp_cc_mdss_mdp1_clk",
1085 .parent_hws = (const struct clk_hw*[]) {
1086 &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw,
1087 },
1088 .num_parents = 1,
1089 .flags = CLK_SET_RATE_PARENT,
1090 .ops = &clk_branch2_ops,
1091 },
1092 },
1093 };
1094
1095 static struct clk_branch mdss_0_disp_cc_mdss_mdp_clk = {
1096 .halt_reg = 0x800c,
1097 .halt_check = BRANCH_HALT,
1098 .clkr = {
1099 .enable_reg = 0x800c,
1100 .enable_mask = BIT(0),
1101 .hw.init = &(const struct clk_init_data) {
1102 .name = "mdss_0_disp_cc_mdss_mdp_clk",
1103 .parent_hws = (const struct clk_hw*[]) {
1104 &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw,
1105 },
1106 .num_parents = 1,
1107 .flags = CLK_SET_RATE_PARENT,
1108 .ops = &clk_branch2_ops,
1109 },
1110 },
1111 };
1112
1113 static struct clk_branch mdss_0_disp_cc_mdss_mdp_lut1_clk = {
1114 .halt_reg = 0x8024,
1115 .halt_check = BRANCH_HALT_VOTED,
1116 .clkr = {
1117 .enable_reg = 0x8024,
1118 .enable_mask = BIT(0),
1119 .hw.init = &(const struct clk_init_data) {
1120 .name = "mdss_0_disp_cc_mdss_mdp_lut1_clk",
1121 .parent_hws = (const struct clk_hw*[]) {
1122 &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw,
1123 },
1124 .num_parents = 1,
1125 .flags = CLK_SET_RATE_PARENT,
1126 .ops = &clk_branch2_ops,
1127 },
1128 },
1129 };
1130
1131 static struct clk_branch mdss_0_disp_cc_mdss_mdp_lut_clk = {
1132 .halt_reg = 0x801c,
1133 .halt_check = BRANCH_HALT_VOTED,
1134 .clkr = {
1135 .enable_reg = 0x801c,
1136 .enable_mask = BIT(0),
1137 .hw.init = &(const struct clk_init_data) {
1138 .name = "mdss_0_disp_cc_mdss_mdp_lut_clk",
1139 .parent_hws = (const struct clk_hw*[]) {
1140 &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw,
1141 },
1142 .num_parents = 1,
1143 .flags = CLK_SET_RATE_PARENT,
1144 .ops = &clk_branch2_ops,
1145 },
1146 },
1147 };
1148
1149 static struct clk_branch mdss_0_disp_cc_mdss_non_gdsc_ahb_clk = {
1150 .halt_reg = 0xa004,
1151 .halt_check = BRANCH_HALT_VOTED,
1152 .clkr = {
1153 .enable_reg = 0xa004,
1154 .enable_mask = BIT(0),
1155 .hw.init = &(const struct clk_init_data) {
1156 .name = "mdss_0_disp_cc_mdss_non_gdsc_ahb_clk",
1157 .parent_hws = (const struct clk_hw*[]) {
1158 &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw,
1159 },
1160 .num_parents = 1,
1161 .flags = CLK_SET_RATE_PARENT,
1162 .ops = &clk_branch2_ops,
1163 },
1164 },
1165 };
1166
1167 static struct clk_branch mdss_0_disp_cc_mdss_pclk0_clk = {
1168 .halt_reg = 0x8004,
1169 .halt_check = BRANCH_HALT,
1170 .clkr = {
1171 .enable_reg = 0x8004,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(const struct clk_init_data) {
1174 .name = "mdss_0_disp_cc_mdss_pclk0_clk",
1175 .parent_hws = (const struct clk_hw*[]) {
1176 &mdss_0_disp_cc_mdss_pclk0_clk_src.clkr.hw,
1177 },
1178 .num_parents = 1,
1179 .flags = CLK_SET_RATE_PARENT,
1180 .ops = &clk_branch2_ops,
1181 },
1182 },
1183 };
1184
1185 static struct clk_branch mdss_0_disp_cc_mdss_pclk1_clk = {
1186 .halt_reg = 0x8008,
1187 .halt_check = BRANCH_HALT,
1188 .clkr = {
1189 .enable_reg = 0x8008,
1190 .enable_mask = BIT(0),
1191 .hw.init = &(const struct clk_init_data) {
1192 .name = "mdss_0_disp_cc_mdss_pclk1_clk",
1193 .parent_hws = (const struct clk_hw*[]) {
1194 &mdss_0_disp_cc_mdss_pclk1_clk_src.clkr.hw,
1195 },
1196 .num_parents = 1,
1197 .flags = CLK_SET_RATE_PARENT,
1198 .ops = &clk_branch2_ops,
1199 },
1200 },
1201 };
1202
1203 static struct clk_branch mdss_0_disp_cc_mdss_pll_lock_monitor_clk = {
1204 .halt_reg = 0xe000,
1205 .halt_check = BRANCH_HALT,
1206 .clkr = {
1207 .enable_reg = 0xe000,
1208 .enable_mask = BIT(0),
1209 .hw.init = &(const struct clk_init_data) {
1210 .name = "mdss_0_disp_cc_mdss_pll_lock_monitor_clk",
1211 .parent_hws = (const struct clk_hw*[]) {
1212 &mdss_0_disp_cc_xo_clk_src.clkr.hw,
1213 },
1214 .num_parents = 1,
1215 .flags = CLK_SET_RATE_PARENT,
1216 .ops = &clk_branch2_ops,
1217 },
1218 },
1219 };
1220
1221 static struct clk_branch mdss_0_disp_cc_mdss_rscc_ahb_clk = {
1222 .halt_reg = 0xa00c,
1223 .halt_check = BRANCH_HALT,
1224 .clkr = {
1225 .enable_reg = 0xa00c,
1226 .enable_mask = BIT(0),
1227 .hw.init = &(const struct clk_init_data) {
1228 .name = "mdss_0_disp_cc_mdss_rscc_ahb_clk",
1229 .parent_hws = (const struct clk_hw*[]) {
1230 &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw,
1231 },
1232 .num_parents = 1,
1233 .flags = CLK_SET_RATE_PARENT,
1234 .ops = &clk_branch2_ops,
1235 },
1236 },
1237 };
1238
1239 static struct clk_branch mdss_0_disp_cc_mdss_rscc_vsync_clk = {
1240 .halt_reg = 0xa008,
1241 .halt_check = BRANCH_HALT,
1242 .clkr = {
1243 .enable_reg = 0xa008,
1244 .enable_mask = BIT(0),
1245 .hw.init = &(const struct clk_init_data) {
1246 .name = "mdss_0_disp_cc_mdss_rscc_vsync_clk",
1247 .parent_hws = (const struct clk_hw*[]) {
1248 &mdss_0_disp_cc_mdss_vsync_clk_src.clkr.hw,
1249 },
1250 .num_parents = 1,
1251 .flags = CLK_SET_RATE_PARENT,
1252 .ops = &clk_branch2_ops,
1253 },
1254 },
1255 };
1256
1257 static struct clk_branch mdss_0_disp_cc_mdss_vsync1_clk = {
1258 .halt_reg = 0x8030,
1259 .halt_check = BRANCH_HALT,
1260 .clkr = {
1261 .enable_reg = 0x8030,
1262 .enable_mask = BIT(0),
1263 .hw.init = &(const struct clk_init_data) {
1264 .name = "mdss_0_disp_cc_mdss_vsync1_clk",
1265 .parent_hws = (const struct clk_hw*[]) {
1266 &mdss_0_disp_cc_mdss_vsync_clk_src.clkr.hw,
1267 },
1268 .num_parents = 1,
1269 .flags = CLK_SET_RATE_PARENT,
1270 .ops = &clk_branch2_ops,
1271 },
1272 },
1273 };
1274
1275 static struct clk_branch mdss_0_disp_cc_mdss_vsync_clk = {
1276 .halt_reg = 0x802c,
1277 .halt_check = BRANCH_HALT,
1278 .clkr = {
1279 .enable_reg = 0x802c,
1280 .enable_mask = BIT(0),
1281 .hw.init = &(const struct clk_init_data) {
1282 .name = "mdss_0_disp_cc_mdss_vsync_clk",
1283 .parent_hws = (const struct clk_hw*[]) {
1284 &mdss_0_disp_cc_mdss_vsync_clk_src.clkr.hw,
1285 },
1286 .num_parents = 1,
1287 .flags = CLK_SET_RATE_PARENT,
1288 .ops = &clk_branch2_ops,
1289 },
1290 },
1291 };
1292
1293 static struct clk_branch mdss_0_disp_cc_sm_obs_clk = {
1294 .halt_reg = 0x11014,
1295 .halt_check = BRANCH_HALT_SKIP,
1296 .clkr = {
1297 .enable_reg = 0x11014,
1298 .enable_mask = BIT(0),
1299 .hw.init = &(const struct clk_init_data) {
1300 .name = "mdss_0_disp_cc_sm_obs_clk",
1301 .ops = &clk_branch2_ops,
1302 },
1303 },
1304 };
1305
1306 static struct gdsc mdss_0_disp_cc_mdss_core_gdsc = {
1307 .gdscr = 0x9000,
1308 .en_rest_wait_val = 0x2,
1309 .en_few_wait_val = 0x2,
1310 .clk_dis_wait_val = 0xf,
1311 .pd = {
1312 .name = "mdss_0_disp_cc_mdss_core_gdsc",
1313 },
1314 .pwrsts = PWRSTS_OFF_ON,
1315 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL,
1316 };
1317
1318 static struct gdsc mdss_0_disp_cc_mdss_core_int2_gdsc = {
1319 .gdscr = 0xd000,
1320 .en_rest_wait_val = 0x2,
1321 .en_few_wait_val = 0x2,
1322 .clk_dis_wait_val = 0xf,
1323 .pd = {
1324 .name = "mdss_0_disp_cc_mdss_core_int2_gdsc",
1325 },
1326 .pwrsts = PWRSTS_OFF_ON,
1327 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL,
1328 };
1329
1330 static struct clk_regmap *disp_cc_0_sa8775p_clocks[] = {
1331 [MDSS_DISP_CC_MDSS_AHB1_CLK] = &mdss_0_disp_cc_mdss_ahb1_clk.clkr,
1332 [MDSS_DISP_CC_MDSS_AHB_CLK] = &mdss_0_disp_cc_mdss_ahb_clk.clkr,
1333 [MDSS_DISP_CC_MDSS_AHB_CLK_SRC] = &mdss_0_disp_cc_mdss_ahb_clk_src.clkr,
1334 [MDSS_DISP_CC_MDSS_BYTE0_CLK] = &mdss_0_disp_cc_mdss_byte0_clk.clkr,
1335 [MDSS_DISP_CC_MDSS_BYTE0_CLK_SRC] = &mdss_0_disp_cc_mdss_byte0_clk_src.clkr,
1336 [MDSS_DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &mdss_0_disp_cc_mdss_byte0_div_clk_src.clkr,
1337 [MDSS_DISP_CC_MDSS_BYTE0_INTF_CLK] = &mdss_0_disp_cc_mdss_byte0_intf_clk.clkr,
1338 [MDSS_DISP_CC_MDSS_BYTE1_CLK] = &mdss_0_disp_cc_mdss_byte1_clk.clkr,
1339 [MDSS_DISP_CC_MDSS_BYTE1_CLK_SRC] = &mdss_0_disp_cc_mdss_byte1_clk_src.clkr,
1340 [MDSS_DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &mdss_0_disp_cc_mdss_byte1_div_clk_src.clkr,
1341 [MDSS_DISP_CC_MDSS_BYTE1_INTF_CLK] = &mdss_0_disp_cc_mdss_byte1_intf_clk.clkr,
1342 [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK] = &mdss_0_disp_cc_mdss_dptx0_aux_clk.clkr,
1343 [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_aux_clk_src.clkr,
1344 [MDSS_DISP_CC_MDSS_DPTX0_CRYPTO_CLK] = &mdss_0_disp_cc_mdss_dptx0_crypto_clk.clkr,
1345 [MDSS_DISP_CC_MDSS_DPTX0_CRYPTO_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_crypto_clk_src.clkr,
1346 [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK] = &mdss_0_disp_cc_mdss_dptx0_link_clk.clkr,
1347 [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr,
1348 [MDSS_DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] =
1349 &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr,
1350 [MDSS_DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] = &mdss_0_disp_cc_mdss_dptx0_link_intf_clk.clkr,
1351 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK] = &mdss_0_disp_cc_mdss_dptx0_pixel0_clk.clkr,
1352 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src.clkr,
1353 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK] = &mdss_0_disp_cc_mdss_dptx0_pixel1_clk.clkr,
1354 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src.clkr,
1355 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK] = &mdss_0_disp_cc_mdss_dptx0_pixel2_clk.clkr,
1356 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src.clkr,
1357 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK] = &mdss_0_disp_cc_mdss_dptx0_pixel3_clk.clkr,
1358 [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src.clkr,
1359 [MDSS_DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =
1360 &mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr,
1361 [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK] = &mdss_0_disp_cc_mdss_dptx1_aux_clk.clkr,
1362 [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx1_aux_clk_src.clkr,
1363 [MDSS_DISP_CC_MDSS_DPTX1_CRYPTO_CLK] = &mdss_0_disp_cc_mdss_dptx1_crypto_clk.clkr,
1364 [MDSS_DISP_CC_MDSS_DPTX1_CRYPTO_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx1_crypto_clk_src.clkr,
1365 [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK] = &mdss_0_disp_cc_mdss_dptx1_link_clk.clkr,
1366 [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr,
1367 [MDSS_DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] =
1368 &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr,
1369 [MDSS_DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] = &mdss_0_disp_cc_mdss_dptx1_link_intf_clk.clkr,
1370 [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK] = &mdss_0_disp_cc_mdss_dptx1_pixel0_clk.clkr,
1371 [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src.clkr,
1372 [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK] = &mdss_0_disp_cc_mdss_dptx1_pixel1_clk.clkr,
1373 [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] = &mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src.clkr,
1374 [MDSS_DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =
1375 &mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr,
1376 [MDSS_DISP_CC_MDSS_ESC0_CLK] = &mdss_0_disp_cc_mdss_esc0_clk.clkr,
1377 [MDSS_DISP_CC_MDSS_ESC0_CLK_SRC] = &mdss_0_disp_cc_mdss_esc0_clk_src.clkr,
1378 [MDSS_DISP_CC_MDSS_ESC1_CLK] = &mdss_0_disp_cc_mdss_esc1_clk.clkr,
1379 [MDSS_DISP_CC_MDSS_ESC1_CLK_SRC] = &mdss_0_disp_cc_mdss_esc1_clk_src.clkr,
1380 [MDSS_DISP_CC_MDSS_MDP1_CLK] = &mdss_0_disp_cc_mdss_mdp1_clk.clkr,
1381 [MDSS_DISP_CC_MDSS_MDP_CLK] = &mdss_0_disp_cc_mdss_mdp_clk.clkr,
1382 [MDSS_DISP_CC_MDSS_MDP_CLK_SRC] = &mdss_0_disp_cc_mdss_mdp_clk_src.clkr,
1383 [MDSS_DISP_CC_MDSS_MDP_LUT1_CLK] = &mdss_0_disp_cc_mdss_mdp_lut1_clk.clkr,
1384 [MDSS_DISP_CC_MDSS_MDP_LUT_CLK] = &mdss_0_disp_cc_mdss_mdp_lut_clk.clkr,
1385 [MDSS_DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &mdss_0_disp_cc_mdss_non_gdsc_ahb_clk.clkr,
1386 [MDSS_DISP_CC_MDSS_PCLK0_CLK] = &mdss_0_disp_cc_mdss_pclk0_clk.clkr,
1387 [MDSS_DISP_CC_MDSS_PCLK0_CLK_SRC] = &mdss_0_disp_cc_mdss_pclk0_clk_src.clkr,
1388 [MDSS_DISP_CC_MDSS_PCLK1_CLK] = &mdss_0_disp_cc_mdss_pclk1_clk.clkr,
1389 [MDSS_DISP_CC_MDSS_PCLK1_CLK_SRC] = &mdss_0_disp_cc_mdss_pclk1_clk_src.clkr,
1390 [MDSS_DISP_CC_MDSS_PLL_LOCK_MONITOR_CLK] = &mdss_0_disp_cc_mdss_pll_lock_monitor_clk.clkr,
1391 [MDSS_DISP_CC_MDSS_RSCC_AHB_CLK] = &mdss_0_disp_cc_mdss_rscc_ahb_clk.clkr,
1392 [MDSS_DISP_CC_MDSS_RSCC_VSYNC_CLK] = &mdss_0_disp_cc_mdss_rscc_vsync_clk.clkr,
1393 [MDSS_DISP_CC_MDSS_VSYNC1_CLK] = &mdss_0_disp_cc_mdss_vsync1_clk.clkr,
1394 [MDSS_DISP_CC_MDSS_VSYNC_CLK] = &mdss_0_disp_cc_mdss_vsync_clk.clkr,
1395 [MDSS_DISP_CC_MDSS_VSYNC_CLK_SRC] = &mdss_0_disp_cc_mdss_vsync_clk_src.clkr,
1396 [MDSS_DISP_CC_PLL0] = &mdss_0_disp_cc_pll0.clkr,
1397 [MDSS_DISP_CC_PLL1] = &mdss_0_disp_cc_pll1.clkr,
1398 [MDSS_DISP_CC_SLEEP_CLK_SRC] = &mdss_0_disp_cc_sleep_clk_src.clkr,
1399 [MDSS_DISP_CC_SM_OBS_CLK] = &mdss_0_disp_cc_sm_obs_clk.clkr,
1400 [MDSS_DISP_CC_XO_CLK_SRC] = &mdss_0_disp_cc_xo_clk_src.clkr,
1401 };
1402
1403 static struct gdsc *disp_cc_0_sa8775p_gdscs[] = {
1404 [MDSS_DISP_CC_MDSS_CORE_GDSC] = &mdss_0_disp_cc_mdss_core_gdsc,
1405 [MDSS_DISP_CC_MDSS_CORE_INT2_GDSC] = &mdss_0_disp_cc_mdss_core_int2_gdsc,
1406 };
1407
1408 static const struct qcom_reset_map disp_cc_0_sa8775p_resets[] = {
1409 [MDSS_DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
1410 [MDSS_DISP_CC_MDSS_RSCC_BCR] = { 0xa000 },
1411 };
1412
1413 static const struct regmap_config disp_cc_0_sa8775p_regmap_config = {
1414 .reg_bits = 32,
1415 .reg_stride = 4,
1416 .val_bits = 32,
1417 .max_register = 0x12414,
1418 .fast_io = true,
1419 };
1420
1421 static struct qcom_cc_desc disp_cc_0_sa8775p_desc = {
1422 .config = &disp_cc_0_sa8775p_regmap_config,
1423 .clks = disp_cc_0_sa8775p_clocks,
1424 .num_clks = ARRAY_SIZE(disp_cc_0_sa8775p_clocks),
1425 .resets = disp_cc_0_sa8775p_resets,
1426 .num_resets = ARRAY_SIZE(disp_cc_0_sa8775p_resets),
1427 .gdscs = disp_cc_0_sa8775p_gdscs,
1428 .num_gdscs = ARRAY_SIZE(disp_cc_0_sa8775p_gdscs),
1429 };
1430
1431 static const struct of_device_id disp_cc_0_sa8775p_match_table[] = {
1432 { .compatible = "qcom,sa8775p-dispcc0" },
1433 { }
1434 };
1435 MODULE_DEVICE_TABLE(of, disp_cc_0_sa8775p_match_table);
1436
disp_cc_0_sa8775p_probe(struct platform_device * pdev)1437 static int disp_cc_0_sa8775p_probe(struct platform_device *pdev)
1438 {
1439 struct regmap *regmap;
1440 int ret;
1441
1442 ret = devm_pm_runtime_enable(&pdev->dev);
1443 if (ret)
1444 return ret;
1445
1446 ret = pm_runtime_resume_and_get(&pdev->dev);
1447 if (ret)
1448 return ret;
1449
1450 regmap = qcom_cc_map(pdev, &disp_cc_0_sa8775p_desc);
1451 if (IS_ERR(regmap)) {
1452 pm_runtime_put(&pdev->dev);
1453 return PTR_ERR(regmap);
1454 }
1455
1456 clk_lucid_evo_pll_configure(&mdss_0_disp_cc_pll0, regmap, &mdss_0_disp_cc_pll0_config);
1457 clk_lucid_evo_pll_configure(&mdss_0_disp_cc_pll1, regmap, &mdss_0_disp_cc_pll1_config);
1458
1459 /* Keep some clocks always enabled */
1460 qcom_branch_set_clk_en(regmap, 0xc070); /* MDSS_0_DISP_CC_SLEEP_CLK */
1461 qcom_branch_set_clk_en(regmap, 0xc054); /* MDSS_0_DISP_CC_XO_CLK */
1462
1463 ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_0_sa8775p_desc, regmap);
1464
1465 pm_runtime_put(&pdev->dev);
1466
1467 return ret;
1468 }
1469
1470 static struct platform_driver disp_cc_0_sa8775p_driver = {
1471 .probe = disp_cc_0_sa8775p_probe,
1472 .driver = {
1473 .name = "dispcc0-sa8775p",
1474 .of_match_table = disp_cc_0_sa8775p_match_table,
1475 },
1476 };
1477
1478 module_platform_driver(disp_cc_0_sa8775p_driver);
1479
1480 MODULE_DESCRIPTION("QTI DISPCC0 SA8775P Driver");
1481 MODULE_LICENSE("GPL");
1482