xref: /linux/drivers/clk/qcom/dispcc-sm8450.c (revision 9f3a2ba62c7226a6604b8aaeb92b5ff906fa4e6b)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2022, Linaro Ltd.
5  */
6 
7 #include <linux/clk.h>
8 #include <linux/clk-provider.h>
9 #include <linux/err.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/of.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15 #include <linux/pm_runtime.h>
16 
17 #include <dt-bindings/clock/qcom,sm8450-dispcc.h>
18 
19 #include "common.h"
20 #include "clk-alpha-pll.h"
21 #include "clk-branch.h"
22 #include "clk-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-regmap.h"
25 #include "clk-regmap-divider.h"
26 #include "clk-regmap-mux.h"
27 #include "reset.h"
28 #include "gdsc.h"
29 
30 /* Need to match the order of clocks in DT binding */
31 enum {
32 	DT_BI_TCXO,
33 	DT_BI_TCXO_AO,
34 	DT_AHB_CLK,
35 	DT_SLEEP_CLK,
36 
37 	DT_DSI0_PHY_PLL_OUT_BYTECLK,
38 	DT_DSI0_PHY_PLL_OUT_DSICLK,
39 	DT_DSI1_PHY_PLL_OUT_BYTECLK,
40 	DT_DSI1_PHY_PLL_OUT_DSICLK,
41 
42 	DT_DP0_PHY_PLL_LINK_CLK,
43 	DT_DP0_PHY_PLL_VCO_DIV_CLK,
44 	DT_DP1_PHY_PLL_LINK_CLK,
45 	DT_DP1_PHY_PLL_VCO_DIV_CLK,
46 	DT_DP2_PHY_PLL_LINK_CLK,
47 	DT_DP2_PHY_PLL_VCO_DIV_CLK,
48 	DT_DP3_PHY_PLL_LINK_CLK,
49 	DT_DP3_PHY_PLL_VCO_DIV_CLK,
50 };
51 
52 #define DISP_CC_MISC_CMD	0xF000
53 
54 enum {
55 	P_BI_TCXO,
56 	P_DISP_CC_PLL0_OUT_MAIN,
57 	P_DISP_CC_PLL1_OUT_EVEN,
58 	P_DISP_CC_PLL1_OUT_MAIN,
59 	P_DP0_PHY_PLL_LINK_CLK,
60 	P_DP0_PHY_PLL_VCO_DIV_CLK,
61 	P_DP1_PHY_PLL_LINK_CLK,
62 	P_DP1_PHY_PLL_VCO_DIV_CLK,
63 	P_DP2_PHY_PLL_LINK_CLK,
64 	P_DP2_PHY_PLL_VCO_DIV_CLK,
65 	P_DP3_PHY_PLL_LINK_CLK,
66 	P_DP3_PHY_PLL_VCO_DIV_CLK,
67 	P_DSI0_PHY_PLL_OUT_BYTECLK,
68 	P_DSI0_PHY_PLL_OUT_DSICLK,
69 	P_DSI1_PHY_PLL_OUT_BYTECLK,
70 	P_DSI1_PHY_PLL_OUT_DSICLK,
71 	P_SLEEP_CLK,
72 };
73 
74 static const struct pll_vco lucid_evo_vco[] = {
75 	{ 249600000, 2000000000, 0 },
76 };
77 
78 static const struct alpha_pll_config disp_cc_pll0_config = {
79 	.l = 0xD,
80 	.alpha = 0x6492,
81 	.config_ctl_val = 0x20485699,
82 	.config_ctl_hi_val = 0x00182261,
83 	.config_ctl_hi1_val = 0x32AA299C,
84 	.user_ctl_val = 0x00000000,
85 	.user_ctl_hi_val = 0x00000805,
86 };
87 
88 static const struct alpha_pll_config sm8475_disp_cc_pll0_config = {
89 	.l = 0xd,
90 	.alpha = 0x6492,
91 	.config_ctl_val = 0x20485699,
92 	.config_ctl_hi_val = 0x00182261,
93 	.config_ctl_hi1_val = 0x82aa299c,
94 	.test_ctl_val = 0x00000000,
95 	.test_ctl_hi_val = 0x00000003,
96 	.test_ctl_hi1_val = 0x00009000,
97 	.test_ctl_hi2_val = 0x00000034,
98 	.user_ctl_val = 0x00000000,
99 	.user_ctl_hi_val = 0x00000005,
100 };
101 
102 static struct clk_init_data sm8475_disp_cc_pll0_init = {
103 	.name = "disp_cc_pll0",
104 	.parent_data = &(const struct clk_parent_data) {
105 		.index = DT_BI_TCXO,
106 	},
107 	.num_parents = 1,
108 	.ops = &clk_alpha_pll_reset_lucid_ole_ops,
109 };
110 
111 static struct clk_alpha_pll disp_cc_pll0 = {
112 	.offset = 0x0,
113 	.vco_table = lucid_evo_vco,
114 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
115 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
116 	.clkr = {
117 		.hw.init = &(struct clk_init_data) {
118 			.name = "disp_cc_pll0",
119 			.parent_data = &(const struct clk_parent_data) {
120 				.index = DT_BI_TCXO,
121 			},
122 			.num_parents = 1,
123 			.ops = &clk_alpha_pll_reset_lucid_evo_ops,
124 		},
125 	},
126 };
127 
128 static const struct alpha_pll_config disp_cc_pll1_config = {
129 	.l = 0x1F,
130 	.alpha = 0x4000,
131 	.config_ctl_val = 0x20485699,
132 	.config_ctl_hi_val = 0x00182261,
133 	.config_ctl_hi1_val = 0x32AA299C,
134 	.user_ctl_val = 0x00000000,
135 	.user_ctl_hi_val = 0x00000805,
136 };
137 
138 static const struct alpha_pll_config sm8475_disp_cc_pll1_config = {
139 	.l = 0x1f,
140 	.alpha = 0x4000,
141 	.config_ctl_val = 0x20485699,
142 	.config_ctl_hi_val = 0x00182261,
143 	.config_ctl_hi1_val = 0x82aa299c,
144 	.test_ctl_val = 0x00000000,
145 	.test_ctl_hi_val = 0x00000003,
146 	.test_ctl_hi1_val = 0x00009000,
147 	.test_ctl_hi2_val = 0x00000034,
148 	.user_ctl_val = 0x00000000,
149 	.user_ctl_hi_val = 0x00000005,
150 };
151 
152 static struct clk_init_data sm8475_disp_cc_pll1_init = {
153 	.name = "disp_cc_pll1",
154 	.parent_data = &(const struct clk_parent_data) {
155 		.index = DT_BI_TCXO,
156 	},
157 	.num_parents = 1,
158 	.ops = &clk_alpha_pll_reset_lucid_ole_ops,
159 };
160 
161 static struct clk_alpha_pll disp_cc_pll1 = {
162 	.offset = 0x1000,
163 	.vco_table = lucid_evo_vco,
164 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
165 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
166 	.clkr = {
167 		.hw.init = &(struct clk_init_data) {
168 			.name = "disp_cc_pll1",
169 			.parent_data = &(const struct clk_parent_data) {
170 				.index = DT_BI_TCXO,
171 			},
172 			.num_parents = 1,
173 			.ops = &clk_alpha_pll_reset_lucid_evo_ops,
174 		},
175 	},
176 };
177 
178 static const struct parent_map disp_cc_parent_map_0[] = {
179 	{ P_BI_TCXO, 0 },
180 	{ P_DP0_PHY_PLL_LINK_CLK, 1 },
181 	{ P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
182 	{ P_DP3_PHY_PLL_VCO_DIV_CLK, 3 },
183 	{ P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
184 	{ P_DP2_PHY_PLL_VCO_DIV_CLK, 6 },
185 };
186 
187 static const struct clk_parent_data disp_cc_parent_data_0[] = {
188 	{ .index = DT_BI_TCXO },
189 	{ .index = DT_DP0_PHY_PLL_LINK_CLK },
190 	{ .index = DT_DP0_PHY_PLL_VCO_DIV_CLK },
191 	{ .index = DT_DP3_PHY_PLL_VCO_DIV_CLK },
192 	{ .index = DT_DP1_PHY_PLL_VCO_DIV_CLK },
193 	{ .index = DT_DP2_PHY_PLL_VCO_DIV_CLK },
194 };
195 
196 static const struct parent_map disp_cc_parent_map_1[] = {
197 	{ P_BI_TCXO, 0 },
198 };
199 
200 static const struct clk_parent_data disp_cc_parent_data_1[] = {
201 	{ .index = DT_BI_TCXO },
202 };
203 
204 static const struct clk_parent_data disp_cc_parent_data_1_ao[] = {
205 	{ .index = DT_BI_TCXO_AO },
206 };
207 
208 static const struct parent_map disp_cc_parent_map_2[] = {
209 	{ P_BI_TCXO, 0 },
210 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
211 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
212 	{ P_DSI1_PHY_PLL_OUT_DSICLK, 3 },
213 	{ P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
214 };
215 
216 static const struct clk_parent_data disp_cc_parent_data_2[] = {
217 	{ .index = DT_BI_TCXO },
218 	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK },
219 	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
220 	{ .index = DT_DSI1_PHY_PLL_OUT_DSICLK },
221 	{ .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
222 };
223 
224 static const struct parent_map disp_cc_parent_map_3[] = {
225 	{ P_BI_TCXO, 0 },
226 	{ P_DP0_PHY_PLL_LINK_CLK, 1 },
227 	{ P_DP1_PHY_PLL_LINK_CLK, 2 },
228 	{ P_DP2_PHY_PLL_LINK_CLK, 3 },
229 	{ P_DP3_PHY_PLL_LINK_CLK, 4 },
230 };
231 
232 static const struct clk_parent_data disp_cc_parent_data_3[] = {
233 	{ .index = DT_BI_TCXO },
234 	{ .index = DT_DP0_PHY_PLL_LINK_CLK },
235 	{ .index = DT_DP1_PHY_PLL_LINK_CLK },
236 	{ .index = DT_DP2_PHY_PLL_LINK_CLK },
237 	{ .index = DT_DP3_PHY_PLL_LINK_CLK },
238 };
239 
240 static const struct parent_map disp_cc_parent_map_4[] = {
241 	{ P_BI_TCXO, 0 },
242 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
243 	{ P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
244 };
245 
246 static const struct clk_parent_data disp_cc_parent_data_4[] = {
247 	{ .index = DT_BI_TCXO },
248 	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
249 	{ .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
250 };
251 
252 static const struct parent_map disp_cc_parent_map_5[] = {
253 	{ P_BI_TCXO, 0 },
254 	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
255 	{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
256 	{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
257 };
258 
259 static const struct clk_parent_data disp_cc_parent_data_5[] = {
260 	{ .index = DT_BI_TCXO },
261 	{ .hw = &disp_cc_pll0.clkr.hw },
262 	{ .hw = &disp_cc_pll1.clkr.hw },
263 	{ .hw = &disp_cc_pll1.clkr.hw },
264 };
265 
266 static const struct parent_map disp_cc_parent_map_6[] = {
267 	{ P_BI_TCXO, 0 },
268 	{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
269 	{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
270 };
271 
272 static const struct clk_parent_data disp_cc_parent_data_6[] = {
273 	{ .index = DT_BI_TCXO },
274 	{ .hw = &disp_cc_pll1.clkr.hw },
275 	{ .hw = &disp_cc_pll1.clkr.hw },
276 };
277 
278 static const struct parent_map disp_cc_parent_map_7[] = {
279 	{ P_SLEEP_CLK, 0 },
280 };
281 
282 static const struct clk_parent_data disp_cc_parent_data_7[] = {
283 	{ .index = DT_SLEEP_CLK },
284 };
285 
286 static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
287 	F(19200000, P_BI_TCXO, 1, 0, 0),
288 	F(37500000, P_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
289 	F(75000000, P_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
290 	{ }
291 };
292 
293 static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
294 	.cmd_rcgr = 0x8324,
295 	.mnd_width = 0,
296 	.hid_width = 5,
297 	.parent_map = disp_cc_parent_map_6,
298 	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
299 	.clkr.hw.init = &(struct clk_init_data) {
300 		.name = "disp_cc_mdss_ahb_clk_src",
301 		.parent_data = disp_cc_parent_data_6,
302 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
303 		.flags = CLK_SET_RATE_PARENT,
304 		.ops = &clk_rcg2_shared_ops,
305 	},
306 };
307 
308 static const struct freq_tbl ftbl_disp_cc_mdss_byte0_clk_src[] = {
309 	F(19200000, P_BI_TCXO, 1, 0, 0),
310 	{ }
311 };
312 
313 static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
314 	.cmd_rcgr = 0x8134,
315 	.mnd_width = 0,
316 	.hid_width = 5,
317 	.parent_map = disp_cc_parent_map_2,
318 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
319 	.clkr.hw.init = &(struct clk_init_data) {
320 		.name = "disp_cc_mdss_byte0_clk_src",
321 		.parent_data = disp_cc_parent_data_2,
322 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
323 		.flags = CLK_SET_RATE_PARENT,
324 		.ops = &clk_byte2_ops,
325 	},
326 };
327 
328 static struct clk_rcg2 disp_cc_mdss_byte1_clk_src = {
329 	.cmd_rcgr = 0x8150,
330 	.mnd_width = 0,
331 	.hid_width = 5,
332 	.parent_map = disp_cc_parent_map_2,
333 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
334 	.clkr.hw.init = &(struct clk_init_data) {
335 		.name = "disp_cc_mdss_byte1_clk_src",
336 		.parent_data = disp_cc_parent_data_2,
337 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
338 		.flags = CLK_SET_RATE_PARENT,
339 		.ops = &clk_byte2_ops,
340 	},
341 };
342 
343 static struct clk_rcg2 disp_cc_mdss_dptx0_aux_clk_src = {
344 	.cmd_rcgr = 0x81ec,
345 	.mnd_width = 0,
346 	.hid_width = 5,
347 	.parent_map = disp_cc_parent_map_1,
348 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
349 	.clkr.hw.init = &(struct clk_init_data) {
350 		.name = "disp_cc_mdss_dptx0_aux_clk_src",
351 		.parent_data = disp_cc_parent_data_1,
352 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
353 		.flags = CLK_SET_RATE_PARENT,
354 		.ops = &clk_rcg2_ops,
355 	},
356 };
357 
358 static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = {
359 	.cmd_rcgr = 0x819c,
360 	.mnd_width = 0,
361 	.hid_width = 5,
362 	.parent_map = disp_cc_parent_map_3,
363 	.clkr.hw.init = &(struct clk_init_data) {
364 		.name = "disp_cc_mdss_dptx0_link_clk_src",
365 		.parent_data = disp_cc_parent_data_3,
366 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
367 		.flags = CLK_SET_RATE_PARENT,
368 		.ops = &clk_byte2_ops,
369 	},
370 };
371 
372 static struct clk_rcg2 disp_cc_mdss_dptx0_pixel0_clk_src = {
373 	.cmd_rcgr = 0x81bc,
374 	.mnd_width = 16,
375 	.hid_width = 5,
376 	.parent_map = disp_cc_parent_map_0,
377 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
378 	.clkr.hw.init = &(struct clk_init_data) {
379 		.name = "disp_cc_mdss_dptx0_pixel0_clk_src",
380 		.parent_data = disp_cc_parent_data_0,
381 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
382 		.flags = CLK_SET_RATE_PARENT,
383 		.ops = &clk_dp_ops,
384 	},
385 };
386 
387 static struct clk_rcg2 disp_cc_mdss_dptx0_pixel1_clk_src = {
388 	.cmd_rcgr = 0x81d4,
389 	.mnd_width = 16,
390 	.hid_width = 5,
391 	.parent_map = disp_cc_parent_map_0,
392 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
393 	.clkr.hw.init = &(struct clk_init_data) {
394 		.name = "disp_cc_mdss_dptx0_pixel1_clk_src",
395 		.parent_data = disp_cc_parent_data_0,
396 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
397 		.flags = CLK_SET_RATE_PARENT,
398 		.ops = &clk_dp_ops,
399 	},
400 };
401 
402 static struct clk_rcg2 disp_cc_mdss_dptx1_aux_clk_src = {
403 	.cmd_rcgr = 0x8254,
404 	.mnd_width = 0,
405 	.hid_width = 5,
406 	.parent_map = disp_cc_parent_map_1,
407 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
408 	.clkr.hw.init = &(struct clk_init_data) {
409 		.name = "disp_cc_mdss_dptx1_aux_clk_src",
410 		.parent_data = disp_cc_parent_data_1,
411 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
412 		.flags = CLK_SET_RATE_PARENT,
413 		.ops = &clk_dp_ops,
414 	},
415 };
416 
417 static struct clk_rcg2 disp_cc_mdss_dptx1_link_clk_src = {
418 	.cmd_rcgr = 0x8234,
419 	.mnd_width = 0,
420 	.hid_width = 5,
421 	.parent_map = disp_cc_parent_map_3,
422 	.clkr.hw.init = &(struct clk_init_data) {
423 		.name = "disp_cc_mdss_dptx1_link_clk_src",
424 		.parent_data = disp_cc_parent_data_3,
425 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
426 		.flags = CLK_SET_RATE_PARENT,
427 		.ops = &clk_byte2_ops,
428 	},
429 };
430 
431 static struct clk_rcg2 disp_cc_mdss_dptx1_pixel0_clk_src = {
432 	.cmd_rcgr = 0x8204,
433 	.mnd_width = 16,
434 	.hid_width = 5,
435 	.parent_map = disp_cc_parent_map_0,
436 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
437 	.clkr.hw.init = &(struct clk_init_data) {
438 		.name = "disp_cc_mdss_dptx1_pixel0_clk_src",
439 		.parent_data = disp_cc_parent_data_0,
440 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
441 		.flags = CLK_SET_RATE_PARENT,
442 		.ops = &clk_dp_ops,
443 	},
444 };
445 
446 static struct clk_rcg2 disp_cc_mdss_dptx1_pixel1_clk_src = {
447 	.cmd_rcgr = 0x821c,
448 	.mnd_width = 16,
449 	.hid_width = 5,
450 	.parent_map = disp_cc_parent_map_0,
451 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
452 	.clkr.hw.init = &(struct clk_init_data) {
453 		.name = "disp_cc_mdss_dptx1_pixel1_clk_src",
454 		.parent_data = disp_cc_parent_data_0,
455 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
456 		.flags = CLK_SET_RATE_PARENT,
457 		.ops = &clk_dp_ops,
458 	},
459 };
460 
461 static struct clk_rcg2 disp_cc_mdss_dptx2_aux_clk_src = {
462 	.cmd_rcgr = 0x82bc,
463 	.mnd_width = 0,
464 	.hid_width = 5,
465 	.parent_map = disp_cc_parent_map_1,
466 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
467 	.clkr.hw.init = &(struct clk_init_data) {
468 		.name = "disp_cc_mdss_dptx2_aux_clk_src",
469 		.parent_data = disp_cc_parent_data_1,
470 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
471 		.flags = CLK_SET_RATE_PARENT,
472 		.ops = &clk_rcg2_ops,
473 	},
474 };
475 
476 static struct clk_rcg2 disp_cc_mdss_dptx2_link_clk_src = {
477 	.cmd_rcgr = 0x826c,
478 	.mnd_width = 0,
479 	.hid_width = 5,
480 	.parent_map = disp_cc_parent_map_3,
481 	.clkr.hw.init = &(struct clk_init_data) {
482 		.name = "disp_cc_mdss_dptx2_link_clk_src",
483 		.parent_data = disp_cc_parent_data_3,
484 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
485 		.flags = CLK_SET_RATE_PARENT,
486 		.ops = &clk_byte2_ops,
487 	},
488 };
489 
490 static struct clk_rcg2 disp_cc_mdss_dptx2_pixel0_clk_src = {
491 	.cmd_rcgr = 0x828c,
492 	.mnd_width = 16,
493 	.hid_width = 5,
494 	.parent_map = disp_cc_parent_map_0,
495 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
496 	.clkr.hw.init = &(struct clk_init_data) {
497 		.name = "disp_cc_mdss_dptx2_pixel0_clk_src",
498 		.parent_data = disp_cc_parent_data_0,
499 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
500 		.flags = CLK_SET_RATE_PARENT,
501 		.ops = &clk_dp_ops,
502 	},
503 };
504 
505 static struct clk_rcg2 disp_cc_mdss_dptx2_pixel1_clk_src = {
506 	.cmd_rcgr = 0x82a4,
507 	.mnd_width = 16,
508 	.hid_width = 5,
509 	.parent_map = disp_cc_parent_map_0,
510 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
511 	.clkr.hw.init = &(struct clk_init_data) {
512 		.name = "disp_cc_mdss_dptx2_pixel1_clk_src",
513 		.parent_data = disp_cc_parent_data_0,
514 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
515 		.flags = CLK_SET_RATE_PARENT,
516 		.ops = &clk_dp_ops,
517 	},
518 };
519 
520 static struct clk_rcg2 disp_cc_mdss_dptx3_aux_clk_src = {
521 	.cmd_rcgr = 0x8308,
522 	.mnd_width = 0,
523 	.hid_width = 5,
524 	.parent_map = disp_cc_parent_map_1,
525 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
526 	.clkr.hw.init = &(struct clk_init_data) {
527 		.name = "disp_cc_mdss_dptx3_aux_clk_src",
528 		.parent_data = disp_cc_parent_data_1,
529 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
530 		.flags = CLK_SET_RATE_PARENT,
531 		.ops = &clk_rcg2_ops,
532 	},
533 };
534 
535 static struct clk_rcg2 disp_cc_mdss_dptx3_link_clk_src = {
536 	.cmd_rcgr = 0x82ec,
537 	.mnd_width = 0,
538 	.hid_width = 5,
539 	.parent_map = disp_cc_parent_map_3,
540 	.clkr.hw.init = &(struct clk_init_data) {
541 		.name = "disp_cc_mdss_dptx3_link_clk_src",
542 		.parent_data = disp_cc_parent_data_3,
543 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
544 		.flags = CLK_SET_RATE_PARENT,
545 		.ops = &clk_byte2_ops,
546 	},
547 };
548 
549 static struct clk_rcg2 disp_cc_mdss_dptx3_pixel0_clk_src = {
550 	.cmd_rcgr = 0x82d4,
551 	.mnd_width = 16,
552 	.hid_width = 5,
553 	.parent_map = disp_cc_parent_map_0,
554 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
555 	.clkr.hw.init = &(struct clk_init_data) {
556 		.name = "disp_cc_mdss_dptx3_pixel0_clk_src",
557 		.parent_data = disp_cc_parent_data_0,
558 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
559 		.flags = CLK_SET_RATE_PARENT,
560 		.ops = &clk_dp_ops,
561 	},
562 };
563 
564 static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
565 	.cmd_rcgr = 0x816c,
566 	.mnd_width = 0,
567 	.hid_width = 5,
568 	.parent_map = disp_cc_parent_map_4,
569 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
570 	.clkr.hw.init = &(struct clk_init_data) {
571 		.name = "disp_cc_mdss_esc0_clk_src",
572 		.parent_data = disp_cc_parent_data_4,
573 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
574 		.flags = CLK_SET_RATE_PARENT,
575 		.ops = &clk_rcg2_ops,
576 	},
577 };
578 
579 static struct clk_rcg2 disp_cc_mdss_esc1_clk_src = {
580 	.cmd_rcgr = 0x8184,
581 	.mnd_width = 0,
582 	.hid_width = 5,
583 	.parent_map = disp_cc_parent_map_4,
584 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
585 	.clkr.hw.init = &(struct clk_init_data) {
586 		.name = "disp_cc_mdss_esc1_clk_src",
587 		.parent_data = disp_cc_parent_data_4,
588 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
589 		.flags = CLK_SET_RATE_PARENT,
590 		.ops = &clk_rcg2_ops,
591 	},
592 };
593 
594 static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
595 	F(19200000, P_BI_TCXO, 1, 0, 0),
596 	F(85714286, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
597 	F(100000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
598 	F(150000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
599 	F(172000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
600 	F(200000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
601 	F(325000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
602 	F(375000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
603 	F(500000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
604 	{ }
605 };
606 
607 static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
608 	.cmd_rcgr = 0x80ec,
609 	.mnd_width = 0,
610 	.hid_width = 5,
611 	.parent_map = disp_cc_parent_map_5,
612 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
613 	.clkr.hw.init = &(struct clk_init_data) {
614 		.name = "disp_cc_mdss_mdp_clk_src",
615 		.parent_data = disp_cc_parent_data_5,
616 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
617 		.flags = CLK_SET_RATE_PARENT,
618 		.ops = &clk_rcg2_shared_ops,
619 	},
620 };
621 
622 static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
623 	.cmd_rcgr = 0x80bc,
624 	.mnd_width = 8,
625 	.hid_width = 5,
626 	.parent_map = disp_cc_parent_map_2,
627 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
628 	.clkr.hw.init = &(struct clk_init_data) {
629 		.name = "disp_cc_mdss_pclk0_clk_src",
630 		.parent_data = disp_cc_parent_data_2,
631 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
632 		.flags = CLK_SET_RATE_PARENT,
633 		.ops = &clk_pixel_ops,
634 	},
635 };
636 
637 static struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = {
638 	.cmd_rcgr = 0x80d4,
639 	.mnd_width = 8,
640 	.hid_width = 5,
641 	.parent_map = disp_cc_parent_map_2,
642 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
643 	.clkr.hw.init = &(struct clk_init_data) {
644 		.name = "disp_cc_mdss_pclk1_clk_src",
645 		.parent_data = disp_cc_parent_data_2,
646 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
647 		.flags = CLK_SET_RATE_PARENT,
648 		.ops = &clk_pixel_ops,
649 	},
650 };
651 
652 static const struct freq_tbl ftbl_disp_cc_mdss_rot_clk_src[] = {
653 	F(19200000, P_BI_TCXO, 1, 0, 0),
654 	F(150000000, P_DISP_CC_PLL1_OUT_MAIN, 4, 0, 0),
655 	F(200000000, P_DISP_CC_PLL1_OUT_MAIN, 3, 0, 0),
656 	F(300000000, P_DISP_CC_PLL1_OUT_MAIN, 2, 0, 0),
657 	{ }
658 };
659 
660 static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
661 	.cmd_rcgr = 0x8104,
662 	.mnd_width = 0,
663 	.hid_width = 5,
664 	.parent_map = disp_cc_parent_map_5,
665 	.freq_tbl = ftbl_disp_cc_mdss_rot_clk_src,
666 	.clkr.hw.init = &(struct clk_init_data) {
667 		.name = "disp_cc_mdss_rot_clk_src",
668 		.parent_data = disp_cc_parent_data_5,
669 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
670 		.flags = CLK_SET_RATE_PARENT,
671 		.ops = &clk_rcg2_shared_ops,
672 	},
673 };
674 
675 static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
676 	.cmd_rcgr = 0x811c,
677 	.mnd_width = 0,
678 	.hid_width = 5,
679 	.parent_map = disp_cc_parent_map_1,
680 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
681 	.clkr.hw.init = &(struct clk_init_data) {
682 		.name = "disp_cc_mdss_vsync_clk_src",
683 		.parent_data = disp_cc_parent_data_1,
684 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
685 		.flags = CLK_SET_RATE_PARENT,
686 		.ops = &clk_rcg2_ops,
687 	},
688 };
689 
690 static const struct freq_tbl ftbl_disp_cc_sleep_clk_src[] = {
691 	F(32000, P_SLEEP_CLK, 1, 0, 0),
692 	{ }
693 };
694 
695 static struct clk_rcg2 disp_cc_sleep_clk_src = {
696 	.cmd_rcgr = 0xe060,
697 	.mnd_width = 0,
698 	.hid_width = 5,
699 	.parent_map = disp_cc_parent_map_7,
700 	.freq_tbl = ftbl_disp_cc_sleep_clk_src,
701 	.clkr.hw.init = &(struct clk_init_data) {
702 		.name = "disp_cc_sleep_clk_src",
703 		.parent_data = disp_cc_parent_data_7,
704 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_7),
705 		.flags = CLK_SET_RATE_PARENT,
706 		.ops = &clk_rcg2_ops,
707 	},
708 };
709 
710 static struct clk_rcg2 disp_cc_xo_clk_src = {
711 	.cmd_rcgr = 0xe044,
712 	.mnd_width = 0,
713 	.hid_width = 5,
714 	.parent_map = disp_cc_parent_map_1,
715 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
716 	.clkr.hw.init = &(struct clk_init_data) {
717 		.name = "disp_cc_xo_clk_src",
718 		.parent_data = disp_cc_parent_data_1_ao,
719 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1_ao),
720 		.flags = CLK_SET_RATE_PARENT,
721 		.ops = &clk_rcg2_ops,
722 	},
723 };
724 
725 static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
726 	.reg = 0x814c,
727 	.shift = 0,
728 	.width = 4,
729 	.clkr.hw.init = &(struct clk_init_data) {
730 		.name = "disp_cc_mdss_byte0_div_clk_src",
731 		.parent_hws = (const struct clk_hw*[]) {
732 			&disp_cc_mdss_byte0_clk_src.clkr.hw,
733 		},
734 		.num_parents = 1,
735 		.ops = &clk_regmap_div_ops,
736 	},
737 };
738 
739 static struct clk_regmap_div disp_cc_mdss_byte1_div_clk_src = {
740 	.reg = 0x8168,
741 	.shift = 0,
742 	.width = 4,
743 	.clkr.hw.init = &(struct clk_init_data) {
744 		.name = "disp_cc_mdss_byte1_div_clk_src",
745 		.parent_hws = (const struct clk_hw*[]) {
746 			&disp_cc_mdss_byte1_clk_src.clkr.hw,
747 		},
748 		.num_parents = 1,
749 		.ops = &clk_regmap_div_ops,
750 	},
751 };
752 
753 static struct clk_regmap_div disp_cc_mdss_dptx0_link_div_clk_src = {
754 	.reg = 0x81b4,
755 	.shift = 0,
756 	.width = 4,
757 	.clkr.hw.init = &(struct clk_init_data) {
758 		.name = "disp_cc_mdss_dptx0_link_div_clk_src",
759 		.parent_hws = (const struct clk_hw*[]) {
760 			&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
761 		},
762 		.num_parents = 1,
763 		.flags = CLK_SET_RATE_PARENT,
764 		.ops = &clk_regmap_div_ro_ops,
765 	},
766 };
767 
768 static struct clk_regmap_div disp_cc_mdss_dptx1_link_div_clk_src = {
769 	.reg = 0x824c,
770 	.shift = 0,
771 	.width = 4,
772 	.clkr.hw.init = &(struct clk_init_data) {
773 		.name = "disp_cc_mdss_dptx1_link_div_clk_src",
774 		.parent_hws = (const struct clk_hw*[]) {
775 			&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
776 		},
777 		.num_parents = 1,
778 		.flags = CLK_SET_RATE_PARENT,
779 		.ops = &clk_regmap_div_ro_ops,
780 	},
781 };
782 
783 static struct clk_regmap_div disp_cc_mdss_dptx2_link_div_clk_src = {
784 	.reg = 0x8284,
785 	.shift = 0,
786 	.width = 4,
787 	.clkr.hw.init = &(struct clk_init_data) {
788 		.name = "disp_cc_mdss_dptx2_link_div_clk_src",
789 		.parent_hws = (const struct clk_hw*[]) {
790 			&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
791 		},
792 		.num_parents = 1,
793 		.flags = CLK_SET_RATE_PARENT,
794 		.ops = &clk_regmap_div_ro_ops,
795 	},
796 };
797 
798 static struct clk_regmap_div disp_cc_mdss_dptx3_link_div_clk_src = {
799 	.reg = 0x8304,
800 	.shift = 0,
801 	.width = 4,
802 	.clkr.hw.init = &(struct clk_init_data) {
803 		.name = "disp_cc_mdss_dptx3_link_div_clk_src",
804 		.parent_hws = (const struct clk_hw*[]) {
805 			&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
806 		},
807 		.num_parents = 1,
808 		.flags = CLK_SET_RATE_PARENT,
809 		.ops = &clk_regmap_div_ro_ops,
810 	},
811 };
812 
813 static struct clk_branch disp_cc_mdss_ahb1_clk = {
814 	.halt_reg = 0xa020,
815 	.halt_check = BRANCH_HALT,
816 	.clkr = {
817 		.enable_reg = 0xa020,
818 		.enable_mask = BIT(0),
819 		.hw.init = &(struct clk_init_data) {
820 			.name = "disp_cc_mdss_ahb1_clk",
821 			.parent_hws = (const struct clk_hw*[]) {
822 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
823 			},
824 			.num_parents = 1,
825 			.flags = CLK_SET_RATE_PARENT,
826 			.ops = &clk_branch2_ops,
827 		},
828 	},
829 };
830 
831 static struct clk_branch disp_cc_mdss_ahb_clk = {
832 	.halt_reg = 0x80a4,
833 	.halt_check = BRANCH_HALT,
834 	.clkr = {
835 		.enable_reg = 0x80a4,
836 		.enable_mask = BIT(0),
837 		.hw.init = &(struct clk_init_data) {
838 			.name = "disp_cc_mdss_ahb_clk",
839 			.parent_hws = (const struct clk_hw*[]) {
840 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
841 			},
842 			.num_parents = 1,
843 			.flags = CLK_SET_RATE_PARENT,
844 			.ops = &clk_branch2_ops,
845 		},
846 	},
847 };
848 
849 static struct clk_branch disp_cc_mdss_byte0_clk = {
850 	.halt_reg = 0x8028,
851 	.halt_check = BRANCH_HALT,
852 	.clkr = {
853 		.enable_reg = 0x8028,
854 		.enable_mask = BIT(0),
855 		.hw.init = &(struct clk_init_data) {
856 			.name = "disp_cc_mdss_byte0_clk",
857 			.parent_hws = (const struct clk_hw*[]) {
858 				&disp_cc_mdss_byte0_clk_src.clkr.hw,
859 			},
860 			.num_parents = 1,
861 			.flags = CLK_SET_RATE_PARENT,
862 			.ops = &clk_branch2_ops,
863 		},
864 	},
865 };
866 
867 static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
868 	.halt_reg = 0x802c,
869 	.halt_check = BRANCH_HALT,
870 	.clkr = {
871 		.enable_reg = 0x802c,
872 		.enable_mask = BIT(0),
873 		.hw.init = &(struct clk_init_data) {
874 			.name = "disp_cc_mdss_byte0_intf_clk",
875 			.parent_hws = (const struct clk_hw*[]) {
876 				&disp_cc_mdss_byte0_div_clk_src.clkr.hw,
877 			},
878 			.num_parents = 1,
879 			.flags = CLK_SET_RATE_PARENT,
880 			.ops = &clk_branch2_ops,
881 		},
882 	},
883 };
884 
885 static struct clk_branch disp_cc_mdss_byte1_clk = {
886 	.halt_reg = 0x8030,
887 	.halt_check = BRANCH_HALT,
888 	.clkr = {
889 		.enable_reg = 0x8030,
890 		.enable_mask = BIT(0),
891 		.hw.init = &(struct clk_init_data) {
892 			.name = "disp_cc_mdss_byte1_clk",
893 			.parent_hws = (const struct clk_hw*[]) {
894 				&disp_cc_mdss_byte1_clk_src.clkr.hw,
895 			},
896 			.num_parents = 1,
897 			.flags = CLK_SET_RATE_PARENT,
898 			.ops = &clk_branch2_ops,
899 		},
900 	},
901 };
902 
903 static struct clk_branch disp_cc_mdss_byte1_intf_clk = {
904 	.halt_reg = 0x8034,
905 	.halt_check = BRANCH_HALT,
906 	.clkr = {
907 		.enable_reg = 0x8034,
908 		.enable_mask = BIT(0),
909 		.hw.init = &(struct clk_init_data) {
910 			.name = "disp_cc_mdss_byte1_intf_clk",
911 			.parent_hws = (const struct clk_hw*[]) {
912 				&disp_cc_mdss_byte1_div_clk_src.clkr.hw,
913 			},
914 			.num_parents = 1,
915 			.flags = CLK_SET_RATE_PARENT,
916 			.ops = &clk_branch2_ops,
917 		},
918 	},
919 };
920 
921 static struct clk_branch disp_cc_mdss_dptx0_aux_clk = {
922 	.halt_reg = 0x8058,
923 	.halt_check = BRANCH_HALT,
924 	.clkr = {
925 		.enable_reg = 0x8058,
926 		.enable_mask = BIT(0),
927 		.hw.init = &(struct clk_init_data) {
928 			.name = "disp_cc_mdss_dptx0_aux_clk",
929 			.parent_hws = (const struct clk_hw*[]) {
930 				&disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
931 			},
932 			.num_parents = 1,
933 			.flags = CLK_SET_RATE_PARENT,
934 			.ops = &clk_branch2_ops,
935 		},
936 	},
937 };
938 
939 static struct clk_branch disp_cc_mdss_dptx0_crypto_clk = {
940 	.halt_reg = 0x804c,
941 	.halt_check = BRANCH_HALT,
942 	.clkr = {
943 		.enable_reg = 0x804c,
944 		.enable_mask = BIT(0),
945 		.hw.init = &(struct clk_init_data) {
946 			.name = "disp_cc_mdss_dptx0_crypto_clk",
947 			.parent_hws = (const struct clk_hw*[]) {
948 				&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
949 			},
950 			.num_parents = 1,
951 			.flags = CLK_SET_RATE_PARENT,
952 			.ops = &clk_branch2_ops,
953 		},
954 	},
955 };
956 
957 static struct clk_branch disp_cc_mdss_dptx0_link_clk = {
958 	.halt_reg = 0x8040,
959 	.halt_check = BRANCH_HALT,
960 	.clkr = {
961 		.enable_reg = 0x8040,
962 		.enable_mask = BIT(0),
963 		.hw.init = &(struct clk_init_data) {
964 			.name = "disp_cc_mdss_dptx0_link_clk",
965 			.parent_hws = (const struct clk_hw*[]) {
966 				&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
967 			},
968 			.num_parents = 1,
969 			.flags = CLK_SET_RATE_PARENT,
970 			.ops = &clk_branch2_ops,
971 		},
972 	},
973 };
974 
975 static struct clk_branch disp_cc_mdss_dptx0_link_intf_clk = {
976 	.halt_reg = 0x8048,
977 	.halt_check = BRANCH_HALT,
978 	.clkr = {
979 		.enable_reg = 0x8048,
980 		.enable_mask = BIT(0),
981 		.hw.init = &(struct clk_init_data) {
982 			.name = "disp_cc_mdss_dptx0_link_intf_clk",
983 			.parent_hws = (const struct clk_hw*[]) {
984 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
985 			},
986 			.num_parents = 1,
987 			.flags = CLK_SET_RATE_PARENT,
988 			.ops = &clk_branch2_ops,
989 		},
990 	},
991 };
992 
993 static struct clk_branch disp_cc_mdss_dptx0_pixel0_clk = {
994 	.halt_reg = 0x8050,
995 	.halt_check = BRANCH_HALT,
996 	.clkr = {
997 		.enable_reg = 0x8050,
998 		.enable_mask = BIT(0),
999 		.hw.init = &(struct clk_init_data) {
1000 			.name = "disp_cc_mdss_dptx0_pixel0_clk",
1001 			.parent_hws = (const struct clk_hw*[]) {
1002 				&disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
1003 			},
1004 			.num_parents = 1,
1005 			.flags = CLK_SET_RATE_PARENT,
1006 			.ops = &clk_branch2_ops,
1007 		},
1008 	},
1009 };
1010 
1011 static struct clk_branch disp_cc_mdss_dptx0_pixel1_clk = {
1012 	.halt_reg = 0x8054,
1013 	.halt_check = BRANCH_HALT,
1014 	.clkr = {
1015 		.enable_reg = 0x8054,
1016 		.enable_mask = BIT(0),
1017 		.hw.init = &(struct clk_init_data) {
1018 			.name = "disp_cc_mdss_dptx0_pixel1_clk",
1019 			.parent_hws = (const struct clk_hw*[]) {
1020 				&disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
1021 			},
1022 			.num_parents = 1,
1023 			.flags = CLK_SET_RATE_PARENT,
1024 			.ops = &clk_branch2_ops,
1025 		},
1026 	},
1027 };
1028 
1029 static struct clk_branch disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
1030 	.halt_reg = 0x8044,
1031 	.halt_check = BRANCH_HALT,
1032 	.clkr = {
1033 		.enable_reg = 0x8044,
1034 		.enable_mask = BIT(0),
1035 		.hw.init = &(struct clk_init_data) {
1036 			.name = "disp_cc_mdss_dptx0_usb_router_link_intf_clk",
1037 			.parent_hws = (const struct clk_hw*[]) {
1038 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
1039 			},
1040 			.num_parents = 1,
1041 			.flags = CLK_SET_RATE_PARENT,
1042 			.ops = &clk_branch2_ops,
1043 		},
1044 	},
1045 };
1046 
1047 static struct clk_branch disp_cc_mdss_dptx1_aux_clk = {
1048 	.halt_reg = 0x8074,
1049 	.halt_check = BRANCH_HALT,
1050 	.clkr = {
1051 		.enable_reg = 0x8074,
1052 		.enable_mask = BIT(0),
1053 		.hw.init = &(struct clk_init_data) {
1054 			.name = "disp_cc_mdss_dptx1_aux_clk",
1055 			.parent_hws = (const struct clk_hw*[]) {
1056 				&disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
1057 			},
1058 			.num_parents = 1,
1059 			.flags = CLK_SET_RATE_PARENT,
1060 			.ops = &clk_branch2_ops,
1061 		},
1062 	},
1063 };
1064 
1065 static struct clk_branch disp_cc_mdss_dptx1_crypto_clk = {
1066 	.halt_reg = 0x8070,
1067 	.halt_check = BRANCH_HALT,
1068 	.clkr = {
1069 		.enable_reg = 0x8070,
1070 		.enable_mask = BIT(0),
1071 		.hw.init = &(struct clk_init_data) {
1072 			.name = "disp_cc_mdss_dptx1_crypto_clk",
1073 			.parent_hws = (const struct clk_hw*[]) {
1074 				&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
1075 			},
1076 			.num_parents = 1,
1077 			.flags = CLK_SET_RATE_PARENT,
1078 			.ops = &clk_branch2_ops,
1079 		},
1080 	},
1081 };
1082 
1083 static struct clk_branch disp_cc_mdss_dptx1_link_clk = {
1084 	.halt_reg = 0x8064,
1085 	.halt_check = BRANCH_HALT,
1086 	.clkr = {
1087 		.enable_reg = 0x8064,
1088 		.enable_mask = BIT(0),
1089 		.hw.init = &(struct clk_init_data) {
1090 			.name = "disp_cc_mdss_dptx1_link_clk",
1091 			.parent_hws = (const struct clk_hw*[]) {
1092 				&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
1093 			},
1094 			.num_parents = 1,
1095 			.flags = CLK_SET_RATE_PARENT,
1096 			.ops = &clk_branch2_ops,
1097 		},
1098 	},
1099 };
1100 
1101 static struct clk_branch disp_cc_mdss_dptx1_link_intf_clk = {
1102 	.halt_reg = 0x806c,
1103 	.halt_check = BRANCH_HALT,
1104 	.clkr = {
1105 		.enable_reg = 0x806c,
1106 		.enable_mask = BIT(0),
1107 		.hw.init = &(struct clk_init_data) {
1108 			.name = "disp_cc_mdss_dptx1_link_intf_clk",
1109 			.parent_hws = (const struct clk_hw*[]) {
1110 				&disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
1111 			},
1112 			.num_parents = 1,
1113 			.flags = CLK_SET_RATE_PARENT,
1114 			.ops = &clk_branch2_ops,
1115 		},
1116 	},
1117 };
1118 
1119 static struct clk_branch disp_cc_mdss_dptx1_pixel0_clk = {
1120 	.halt_reg = 0x805c,
1121 	.halt_check = BRANCH_HALT,
1122 	.clkr = {
1123 		.enable_reg = 0x805c,
1124 		.enable_mask = BIT(0),
1125 		.hw.init = &(struct clk_init_data) {
1126 			.name = "disp_cc_mdss_dptx1_pixel0_clk",
1127 			.parent_hws = (const struct clk_hw*[]) {
1128 				&disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
1129 			},
1130 			.num_parents = 1,
1131 			.flags = CLK_SET_RATE_PARENT,
1132 			.ops = &clk_branch2_ops,
1133 		},
1134 	},
1135 };
1136 
1137 static struct clk_branch disp_cc_mdss_dptx1_pixel1_clk = {
1138 	.halt_reg = 0x8060,
1139 	.halt_check = BRANCH_HALT,
1140 	.clkr = {
1141 		.enable_reg = 0x8060,
1142 		.enable_mask = BIT(0),
1143 		.hw.init = &(struct clk_init_data) {
1144 			.name = "disp_cc_mdss_dptx1_pixel1_clk",
1145 			.parent_hws = (const struct clk_hw*[]) {
1146 				&disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
1147 			},
1148 			.num_parents = 1,
1149 			.flags = CLK_SET_RATE_PARENT,
1150 			.ops = &clk_branch2_ops,
1151 		},
1152 	},
1153 };
1154 
1155 static struct clk_branch disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
1156 	.halt_reg = 0x8068,
1157 	.halt_check = BRANCH_HALT,
1158 	.clkr = {
1159 		.enable_reg = 0x8068,
1160 		.enable_mask = BIT(0),
1161 		.hw.init = &(struct clk_init_data) {
1162 			.name = "disp_cc_mdss_dptx1_usb_router_link_intf_clk",
1163 			.parent_hws = (const struct clk_hw*[]) {
1164 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
1165 			},
1166 			.num_parents = 1,
1167 			.flags = CLK_SET_RATE_PARENT,
1168 			.ops = &clk_branch2_ops,
1169 		},
1170 	},
1171 };
1172 
1173 static struct clk_branch disp_cc_mdss_dptx2_aux_clk = {
1174 	.halt_reg = 0x808c,
1175 	.halt_check = BRANCH_HALT,
1176 	.clkr = {
1177 		.enable_reg = 0x808c,
1178 		.enable_mask = BIT(0),
1179 		.hw.init = &(struct clk_init_data) {
1180 			.name = "disp_cc_mdss_dptx2_aux_clk",
1181 			.parent_hws = (const struct clk_hw*[]) {
1182 				&disp_cc_mdss_dptx2_aux_clk_src.clkr.hw,
1183 			},
1184 			.num_parents = 1,
1185 			.flags = CLK_SET_RATE_PARENT,
1186 			.ops = &clk_branch2_ops,
1187 		},
1188 	},
1189 };
1190 
1191 static struct clk_branch disp_cc_mdss_dptx2_crypto_clk = {
1192 	.halt_reg = 0x8088,
1193 	.halt_check = BRANCH_HALT,
1194 	.clkr = {
1195 		.enable_reg = 0x8088,
1196 		.enable_mask = BIT(0),
1197 		.hw.init = &(struct clk_init_data) {
1198 			.name = "disp_cc_mdss_dptx2_crypto_clk",
1199 			.parent_hws = (const struct clk_hw*[]) {
1200 				&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
1201 			},
1202 			.num_parents = 1,
1203 			.flags = CLK_SET_RATE_PARENT,
1204 			.ops = &clk_branch2_ops,
1205 		},
1206 	},
1207 };
1208 
1209 static struct clk_branch disp_cc_mdss_dptx2_link_clk = {
1210 	.halt_reg = 0x8080,
1211 	.halt_check = BRANCH_HALT,
1212 	.clkr = {
1213 		.enable_reg = 0x8080,
1214 		.enable_mask = BIT(0),
1215 		.hw.init = &(struct clk_init_data) {
1216 			.name = "disp_cc_mdss_dptx2_link_clk",
1217 			.parent_hws = (const struct clk_hw*[]) {
1218 				&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
1219 			},
1220 			.num_parents = 1,
1221 			.flags = CLK_SET_RATE_PARENT,
1222 			.ops = &clk_branch2_ops,
1223 		},
1224 	},
1225 };
1226 
1227 static struct clk_branch disp_cc_mdss_dptx2_link_intf_clk = {
1228 	.halt_reg = 0x8084,
1229 	.halt_check = BRANCH_HALT,
1230 	.clkr = {
1231 		.enable_reg = 0x8084,
1232 		.enable_mask = BIT(0),
1233 		.hw.init = &(struct clk_init_data) {
1234 			.name = "disp_cc_mdss_dptx2_link_intf_clk",
1235 			.parent_hws = (const struct clk_hw*[]) {
1236 				&disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw,
1237 			},
1238 			.num_parents = 1,
1239 			.flags = CLK_SET_RATE_PARENT,
1240 			.ops = &clk_branch2_ops,
1241 		},
1242 	},
1243 };
1244 
1245 static struct clk_branch disp_cc_mdss_dptx2_pixel0_clk = {
1246 	.halt_reg = 0x8078,
1247 	.halt_check = BRANCH_HALT,
1248 	.clkr = {
1249 		.enable_reg = 0x8078,
1250 		.enable_mask = BIT(0),
1251 		.hw.init = &(struct clk_init_data) {
1252 			.name = "disp_cc_mdss_dptx2_pixel0_clk",
1253 			.parent_hws = (const struct clk_hw*[]) {
1254 				&disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw,
1255 			},
1256 			.num_parents = 1,
1257 			.flags = CLK_SET_RATE_PARENT,
1258 			.ops = &clk_branch2_ops,
1259 		},
1260 	},
1261 };
1262 
1263 static struct clk_branch disp_cc_mdss_dptx2_pixel1_clk = {
1264 	.halt_reg = 0x807c,
1265 	.halt_check = BRANCH_HALT,
1266 	.clkr = {
1267 		.enable_reg = 0x807c,
1268 		.enable_mask = BIT(0),
1269 		.hw.init = &(struct clk_init_data) {
1270 			.name = "disp_cc_mdss_dptx2_pixel1_clk",
1271 			.parent_hws = (const struct clk_hw*[]) {
1272 				&disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw,
1273 			},
1274 			.num_parents = 1,
1275 			.flags = CLK_SET_RATE_PARENT,
1276 			.ops = &clk_branch2_ops,
1277 		},
1278 	},
1279 };
1280 
1281 static struct clk_branch disp_cc_mdss_dptx3_aux_clk = {
1282 	.halt_reg = 0x809c,
1283 	.halt_check = BRANCH_HALT,
1284 	.clkr = {
1285 		.enable_reg = 0x809c,
1286 		.enable_mask = BIT(0),
1287 		.hw.init = &(struct clk_init_data) {
1288 			.name = "disp_cc_mdss_dptx3_aux_clk",
1289 			.parent_hws = (const struct clk_hw*[]) {
1290 				&disp_cc_mdss_dptx3_aux_clk_src.clkr.hw,
1291 			},
1292 			.num_parents = 1,
1293 			.flags = CLK_SET_RATE_PARENT,
1294 			.ops = &clk_branch2_ops,
1295 		},
1296 	},
1297 };
1298 
1299 static struct clk_branch disp_cc_mdss_dptx3_crypto_clk = {
1300 	.halt_reg = 0x80a0,
1301 	.halt_check = BRANCH_HALT,
1302 	.clkr = {
1303 		.enable_reg = 0x80a0,
1304 		.enable_mask = BIT(0),
1305 		.hw.init = &(struct clk_init_data) {
1306 			.name = "disp_cc_mdss_dptx3_crypto_clk",
1307 			.parent_hws = (const struct clk_hw*[]) {
1308 				&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
1309 			},
1310 			.num_parents = 1,
1311 			.flags = CLK_SET_RATE_PARENT,
1312 			.ops = &clk_branch2_ops,
1313 		},
1314 	},
1315 };
1316 
1317 static struct clk_branch disp_cc_mdss_dptx3_link_clk = {
1318 	.halt_reg = 0x8094,
1319 	.halt_check = BRANCH_HALT,
1320 	.clkr = {
1321 		.enable_reg = 0x8094,
1322 		.enable_mask = BIT(0),
1323 		.hw.init = &(struct clk_init_data) {
1324 			.name = "disp_cc_mdss_dptx3_link_clk",
1325 			.parent_hws = (const struct clk_hw*[]) {
1326 				&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
1327 			},
1328 			.num_parents = 1,
1329 			.flags = CLK_SET_RATE_PARENT,
1330 			.ops = &clk_branch2_ops,
1331 		},
1332 	},
1333 };
1334 
1335 static struct clk_branch disp_cc_mdss_dptx3_link_intf_clk = {
1336 	.halt_reg = 0x8098,
1337 	.halt_check = BRANCH_HALT,
1338 	.clkr = {
1339 		.enable_reg = 0x8098,
1340 		.enable_mask = BIT(0),
1341 		.hw.init = &(struct clk_init_data) {
1342 			.name = "disp_cc_mdss_dptx3_link_intf_clk",
1343 			.parent_hws = (const struct clk_hw*[]) {
1344 				&disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw,
1345 			},
1346 			.num_parents = 1,
1347 			.flags = CLK_SET_RATE_PARENT,
1348 			.ops = &clk_branch2_ops,
1349 		},
1350 	},
1351 };
1352 
1353 static struct clk_branch disp_cc_mdss_dptx3_pixel0_clk = {
1354 	.halt_reg = 0x8090,
1355 	.halt_check = BRANCH_HALT,
1356 	.clkr = {
1357 		.enable_reg = 0x8090,
1358 		.enable_mask = BIT(0),
1359 		.hw.init = &(struct clk_init_data) {
1360 			.name = "disp_cc_mdss_dptx3_pixel0_clk",
1361 			.parent_hws = (const struct clk_hw*[]) {
1362 				&disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw,
1363 			},
1364 			.num_parents = 1,
1365 			.flags = CLK_SET_RATE_PARENT,
1366 			.ops = &clk_branch2_ops,
1367 		},
1368 	},
1369 };
1370 
1371 static struct clk_branch disp_cc_mdss_esc0_clk = {
1372 	.halt_reg = 0x8038,
1373 	.halt_check = BRANCH_HALT,
1374 	.clkr = {
1375 		.enable_reg = 0x8038,
1376 		.enable_mask = BIT(0),
1377 		.hw.init = &(struct clk_init_data) {
1378 			.name = "disp_cc_mdss_esc0_clk",
1379 			.parent_hws = (const struct clk_hw*[]) {
1380 				&disp_cc_mdss_esc0_clk_src.clkr.hw,
1381 			},
1382 			.num_parents = 1,
1383 			.flags = CLK_SET_RATE_PARENT,
1384 			.ops = &clk_branch2_ops,
1385 		},
1386 	},
1387 };
1388 
1389 static struct clk_branch disp_cc_mdss_esc1_clk = {
1390 	.halt_reg = 0x803c,
1391 	.halt_check = BRANCH_HALT,
1392 	.clkr = {
1393 		.enable_reg = 0x803c,
1394 		.enable_mask = BIT(0),
1395 		.hw.init = &(struct clk_init_data) {
1396 			.name = "disp_cc_mdss_esc1_clk",
1397 			.parent_hws = (const struct clk_hw*[]) {
1398 				&disp_cc_mdss_esc1_clk_src.clkr.hw,
1399 			},
1400 			.num_parents = 1,
1401 			.flags = CLK_SET_RATE_PARENT,
1402 			.ops = &clk_branch2_ops,
1403 		},
1404 	},
1405 };
1406 
1407 static struct clk_branch disp_cc_mdss_mdp1_clk = {
1408 	.halt_reg = 0xa004,
1409 	.halt_check = BRANCH_HALT,
1410 	.clkr = {
1411 		.enable_reg = 0xa004,
1412 		.enable_mask = BIT(0),
1413 		.hw.init = &(struct clk_init_data) {
1414 			.name = "disp_cc_mdss_mdp1_clk",
1415 			.parent_hws = (const struct clk_hw*[]) {
1416 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
1417 			},
1418 			.num_parents = 1,
1419 			.flags = CLK_SET_RATE_PARENT,
1420 			.ops = &clk_branch2_ops,
1421 		},
1422 	},
1423 };
1424 
1425 static struct clk_branch disp_cc_mdss_mdp_clk = {
1426 	.halt_reg = 0x800c,
1427 	.halt_check = BRANCH_HALT,
1428 	.clkr = {
1429 		.enable_reg = 0x800c,
1430 		.enable_mask = BIT(0),
1431 		.hw.init = &(struct clk_init_data) {
1432 			.name = "disp_cc_mdss_mdp_clk",
1433 			.parent_hws = (const struct clk_hw*[]) {
1434 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
1435 			},
1436 			.num_parents = 1,
1437 			.flags = CLK_SET_RATE_PARENT,
1438 			.ops = &clk_branch2_ops,
1439 		},
1440 	},
1441 };
1442 
1443 static struct clk_branch disp_cc_mdss_mdp_lut1_clk = {
1444 	.halt_reg = 0xa014,
1445 	.halt_check = BRANCH_HALT,
1446 	.clkr = {
1447 		.enable_reg = 0xa014,
1448 		.enable_mask = BIT(0),
1449 		.hw.init = &(struct clk_init_data) {
1450 			.name = "disp_cc_mdss_mdp_lut1_clk",
1451 			.parent_hws = (const struct clk_hw*[]) {
1452 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
1453 			},
1454 			.num_parents = 1,
1455 			.flags = CLK_SET_RATE_PARENT,
1456 			.ops = &clk_branch2_ops,
1457 		},
1458 	},
1459 };
1460 
1461 static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
1462 	.halt_reg = 0x801c,
1463 	.halt_check = BRANCH_HALT_VOTED,
1464 	.clkr = {
1465 		.enable_reg = 0x801c,
1466 		.enable_mask = BIT(0),
1467 		.hw.init = &(struct clk_init_data) {
1468 			.name = "disp_cc_mdss_mdp_lut_clk",
1469 			.parent_hws = (const struct clk_hw*[]) {
1470 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
1471 			},
1472 			.num_parents = 1,
1473 			.flags = CLK_SET_RATE_PARENT,
1474 			.ops = &clk_branch2_ops,
1475 		},
1476 	},
1477 };
1478 
1479 static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
1480 	.halt_reg = 0xc004,
1481 	.halt_check = BRANCH_HALT_VOTED,
1482 	.clkr = {
1483 		.enable_reg = 0xc004,
1484 		.enable_mask = BIT(0),
1485 		.hw.init = &(struct clk_init_data) {
1486 			.name = "disp_cc_mdss_non_gdsc_ahb_clk",
1487 			.parent_hws = (const struct clk_hw*[]) {
1488 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
1489 			},
1490 			.num_parents = 1,
1491 			.flags = CLK_SET_RATE_PARENT,
1492 			.ops = &clk_branch2_ops,
1493 		},
1494 	},
1495 };
1496 
1497 static struct clk_branch disp_cc_mdss_pclk0_clk = {
1498 	.halt_reg = 0x8004,
1499 	.halt_check = BRANCH_HALT,
1500 	.clkr = {
1501 		.enable_reg = 0x8004,
1502 		.enable_mask = BIT(0),
1503 		.hw.init = &(struct clk_init_data) {
1504 			.name = "disp_cc_mdss_pclk0_clk",
1505 			.parent_hws = (const struct clk_hw*[]) {
1506 				&disp_cc_mdss_pclk0_clk_src.clkr.hw,
1507 			},
1508 			.num_parents = 1,
1509 			.flags = CLK_SET_RATE_PARENT,
1510 			.ops = &clk_branch2_ops,
1511 		},
1512 	},
1513 };
1514 
1515 static struct clk_branch disp_cc_mdss_pclk1_clk = {
1516 	.halt_reg = 0x8008,
1517 	.halt_check = BRANCH_HALT,
1518 	.clkr = {
1519 		.enable_reg = 0x8008,
1520 		.enable_mask = BIT(0),
1521 		.hw.init = &(struct clk_init_data) {
1522 			.name = "disp_cc_mdss_pclk1_clk",
1523 			.parent_hws = (const struct clk_hw*[]) {
1524 				&disp_cc_mdss_pclk1_clk_src.clkr.hw,
1525 			},
1526 			.num_parents = 1,
1527 			.flags = CLK_SET_RATE_PARENT,
1528 			.ops = &clk_branch2_ops,
1529 		},
1530 	},
1531 };
1532 
1533 static struct clk_branch disp_cc_mdss_rot1_clk = {
1534 	.halt_reg = 0xa00c,
1535 	.halt_check = BRANCH_HALT,
1536 	.clkr = {
1537 		.enable_reg = 0xa00c,
1538 		.enable_mask = BIT(0),
1539 		.hw.init = &(struct clk_init_data) {
1540 			.name = "disp_cc_mdss_rot1_clk",
1541 			.parent_hws = (const struct clk_hw*[]) {
1542 				&disp_cc_mdss_rot_clk_src.clkr.hw,
1543 			},
1544 			.num_parents = 1,
1545 			.flags = CLK_SET_RATE_PARENT,
1546 			.ops = &clk_branch2_ops,
1547 		},
1548 	},
1549 };
1550 
1551 static struct clk_branch disp_cc_mdss_rot_clk = {
1552 	.halt_reg = 0x8014,
1553 	.halt_check = BRANCH_HALT,
1554 	.clkr = {
1555 		.enable_reg = 0x8014,
1556 		.enable_mask = BIT(0),
1557 		.hw.init = &(struct clk_init_data) {
1558 			.name = "disp_cc_mdss_rot_clk",
1559 			.parent_hws = (const struct clk_hw*[]) {
1560 				&disp_cc_mdss_rot_clk_src.clkr.hw,
1561 			},
1562 			.num_parents = 1,
1563 			.flags = CLK_SET_RATE_PARENT,
1564 			.ops = &clk_branch2_ops,
1565 		},
1566 	},
1567 };
1568 
1569 static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
1570 	.halt_reg = 0xc00c,
1571 	.halt_check = BRANCH_HALT,
1572 	.clkr = {
1573 		.enable_reg = 0xc00c,
1574 		.enable_mask = BIT(0),
1575 		.hw.init = &(struct clk_init_data) {
1576 			.name = "disp_cc_mdss_rscc_ahb_clk",
1577 			.parent_hws = (const struct clk_hw*[]) {
1578 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
1579 			},
1580 			.num_parents = 1,
1581 			.flags = CLK_SET_RATE_PARENT,
1582 			.ops = &clk_branch2_ops,
1583 		},
1584 	},
1585 };
1586 
1587 static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
1588 	.halt_reg = 0xc008,
1589 	.halt_check = BRANCH_HALT,
1590 	.clkr = {
1591 		.enable_reg = 0xc008,
1592 		.enable_mask = BIT(0),
1593 		.hw.init = &(struct clk_init_data) {
1594 			.name = "disp_cc_mdss_rscc_vsync_clk",
1595 			.parent_hws = (const struct clk_hw*[]) {
1596 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
1597 			},
1598 			.num_parents = 1,
1599 			.flags = CLK_SET_RATE_PARENT,
1600 			.ops = &clk_branch2_ops,
1601 		},
1602 	},
1603 };
1604 
1605 static struct clk_branch disp_cc_mdss_vsync1_clk = {
1606 	.halt_reg = 0xa01c,
1607 	.halt_check = BRANCH_HALT,
1608 	.clkr = {
1609 		.enable_reg = 0xa01c,
1610 		.enable_mask = BIT(0),
1611 		.hw.init = &(struct clk_init_data) {
1612 			.name = "disp_cc_mdss_vsync1_clk",
1613 			.parent_hws = (const struct clk_hw*[]) {
1614 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
1615 			},
1616 			.num_parents = 1,
1617 			.flags = CLK_SET_RATE_PARENT,
1618 			.ops = &clk_branch2_ops,
1619 		},
1620 	},
1621 };
1622 
1623 static struct clk_branch disp_cc_mdss_vsync_clk = {
1624 	.halt_reg = 0x8024,
1625 	.halt_check = BRANCH_HALT,
1626 	.clkr = {
1627 		.enable_reg = 0x8024,
1628 		.enable_mask = BIT(0),
1629 		.hw.init = &(struct clk_init_data) {
1630 			.name = "disp_cc_mdss_vsync_clk",
1631 			.parent_hws = (const struct clk_hw*[]) {
1632 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
1633 			},
1634 			.num_parents = 1,
1635 			.flags = CLK_SET_RATE_PARENT,
1636 			.ops = &clk_branch2_ops,
1637 		},
1638 	},
1639 };
1640 
1641 static struct clk_branch disp_cc_sleep_clk = {
1642 	.halt_reg = 0xe078,
1643 	.halt_check = BRANCH_HALT,
1644 	.clkr = {
1645 		.enable_reg = 0xe078,
1646 		.enable_mask = BIT(0),
1647 		.hw.init = &(struct clk_init_data) {
1648 			.name = "disp_cc_sleep_clk",
1649 			.parent_hws = (const struct clk_hw*[]) {
1650 				&disp_cc_sleep_clk_src.clkr.hw,
1651 			},
1652 			.num_parents = 1,
1653 			.flags = CLK_SET_RATE_PARENT,
1654 			.ops = &clk_branch2_ops,
1655 		},
1656 	},
1657 };
1658 
1659 static struct gdsc mdss_gdsc = {
1660 	.gdscr = 0x9000,
1661 	.pd = {
1662 		.name = "mdss_gdsc",
1663 	},
1664 	.pwrsts = PWRSTS_OFF_ON,
1665 	.flags = HW_CTRL | RETAIN_FF_ENABLE,
1666 };
1667 
1668 static struct gdsc mdss_int2_gdsc = {
1669 	.gdscr = 0xb000,
1670 	.pd = {
1671 		.name = "mdss_int2_gdsc",
1672 	},
1673 	.pwrsts = PWRSTS_OFF_ON,
1674 	.flags = HW_CTRL | RETAIN_FF_ENABLE,
1675 };
1676 
1677 static struct clk_regmap *disp_cc_sm8450_clocks[] = {
1678 	[DISP_CC_MDSS_AHB1_CLK] = &disp_cc_mdss_ahb1_clk.clkr,
1679 	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
1680 	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
1681 	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
1682 	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
1683 	[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
1684 	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
1685 	[DISP_CC_MDSS_BYTE1_CLK] = &disp_cc_mdss_byte1_clk.clkr,
1686 	[DISP_CC_MDSS_BYTE1_CLK_SRC] = &disp_cc_mdss_byte1_clk_src.clkr,
1687 	[DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &disp_cc_mdss_byte1_div_clk_src.clkr,
1688 	[DISP_CC_MDSS_BYTE1_INTF_CLK] = &disp_cc_mdss_byte1_intf_clk.clkr,
1689 	[DISP_CC_MDSS_DPTX0_AUX_CLK] = &disp_cc_mdss_dptx0_aux_clk.clkr,
1690 	[DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] = &disp_cc_mdss_dptx0_aux_clk_src.clkr,
1691 	[DISP_CC_MDSS_DPTX0_CRYPTO_CLK] = &disp_cc_mdss_dptx0_crypto_clk.clkr,
1692 	[DISP_CC_MDSS_DPTX0_LINK_CLK] = &disp_cc_mdss_dptx0_link_clk.clkr,
1693 	[DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] = &disp_cc_mdss_dptx0_link_clk_src.clkr,
1694 	[DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx0_link_div_clk_src.clkr,
1695 	[DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] = &disp_cc_mdss_dptx0_link_intf_clk.clkr,
1696 	[DISP_CC_MDSS_DPTX0_PIXEL0_CLK] = &disp_cc_mdss_dptx0_pixel0_clk.clkr,
1697 	[DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx0_pixel0_clk_src.clkr,
1698 	[DISP_CC_MDSS_DPTX0_PIXEL1_CLK] = &disp_cc_mdss_dptx0_pixel1_clk.clkr,
1699 	[DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx0_pixel1_clk_src.clkr,
1700 	[DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =
1701 		&disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr,
1702 	[DISP_CC_MDSS_DPTX1_AUX_CLK] = &disp_cc_mdss_dptx1_aux_clk.clkr,
1703 	[DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] = &disp_cc_mdss_dptx1_aux_clk_src.clkr,
1704 	[DISP_CC_MDSS_DPTX1_CRYPTO_CLK] = &disp_cc_mdss_dptx1_crypto_clk.clkr,
1705 	[DISP_CC_MDSS_DPTX1_LINK_CLK] = &disp_cc_mdss_dptx1_link_clk.clkr,
1706 	[DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] = &disp_cc_mdss_dptx1_link_clk_src.clkr,
1707 	[DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx1_link_div_clk_src.clkr,
1708 	[DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] = &disp_cc_mdss_dptx1_link_intf_clk.clkr,
1709 	[DISP_CC_MDSS_DPTX1_PIXEL0_CLK] = &disp_cc_mdss_dptx1_pixel0_clk.clkr,
1710 	[DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx1_pixel0_clk_src.clkr,
1711 	[DISP_CC_MDSS_DPTX1_PIXEL1_CLK] = &disp_cc_mdss_dptx1_pixel1_clk.clkr,
1712 	[DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx1_pixel1_clk_src.clkr,
1713 	[DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =
1714 		&disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr,
1715 	[DISP_CC_MDSS_DPTX2_AUX_CLK] = &disp_cc_mdss_dptx2_aux_clk.clkr,
1716 	[DISP_CC_MDSS_DPTX2_AUX_CLK_SRC] = &disp_cc_mdss_dptx2_aux_clk_src.clkr,
1717 	[DISP_CC_MDSS_DPTX2_CRYPTO_CLK] = &disp_cc_mdss_dptx2_crypto_clk.clkr,
1718 	[DISP_CC_MDSS_DPTX2_LINK_CLK] = &disp_cc_mdss_dptx2_link_clk.clkr,
1719 	[DISP_CC_MDSS_DPTX2_LINK_CLK_SRC] = &disp_cc_mdss_dptx2_link_clk_src.clkr,
1720 	[DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx2_link_div_clk_src.clkr,
1721 	[DISP_CC_MDSS_DPTX2_LINK_INTF_CLK] = &disp_cc_mdss_dptx2_link_intf_clk.clkr,
1722 	[DISP_CC_MDSS_DPTX2_PIXEL0_CLK] = &disp_cc_mdss_dptx2_pixel0_clk.clkr,
1723 	[DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx2_pixel0_clk_src.clkr,
1724 	[DISP_CC_MDSS_DPTX2_PIXEL1_CLK] = &disp_cc_mdss_dptx2_pixel1_clk.clkr,
1725 	[DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx2_pixel1_clk_src.clkr,
1726 	[DISP_CC_MDSS_DPTX3_AUX_CLK] = &disp_cc_mdss_dptx3_aux_clk.clkr,
1727 	[DISP_CC_MDSS_DPTX3_AUX_CLK_SRC] = &disp_cc_mdss_dptx3_aux_clk_src.clkr,
1728 	[DISP_CC_MDSS_DPTX3_CRYPTO_CLK] = &disp_cc_mdss_dptx3_crypto_clk.clkr,
1729 	[DISP_CC_MDSS_DPTX3_LINK_CLK] = &disp_cc_mdss_dptx3_link_clk.clkr,
1730 	[DISP_CC_MDSS_DPTX3_LINK_CLK_SRC] = &disp_cc_mdss_dptx3_link_clk_src.clkr,
1731 	[DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx3_link_div_clk_src.clkr,
1732 	[DISP_CC_MDSS_DPTX3_LINK_INTF_CLK] = &disp_cc_mdss_dptx3_link_intf_clk.clkr,
1733 	[DISP_CC_MDSS_DPTX3_PIXEL0_CLK] = &disp_cc_mdss_dptx3_pixel0_clk.clkr,
1734 	[DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx3_pixel0_clk_src.clkr,
1735 	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
1736 	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
1737 	[DISP_CC_MDSS_ESC1_CLK] = &disp_cc_mdss_esc1_clk.clkr,
1738 	[DISP_CC_MDSS_ESC1_CLK_SRC] = &disp_cc_mdss_esc1_clk_src.clkr,
1739 	[DISP_CC_MDSS_MDP1_CLK] = &disp_cc_mdss_mdp1_clk.clkr,
1740 	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
1741 	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
1742 	[DISP_CC_MDSS_MDP_LUT1_CLK] = &disp_cc_mdss_mdp_lut1_clk.clkr,
1743 	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
1744 	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
1745 	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
1746 	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
1747 	[DISP_CC_MDSS_PCLK1_CLK] = &disp_cc_mdss_pclk1_clk.clkr,
1748 	[DISP_CC_MDSS_PCLK1_CLK_SRC] = &disp_cc_mdss_pclk1_clk_src.clkr,
1749 	[DISP_CC_MDSS_ROT1_CLK] = &disp_cc_mdss_rot1_clk.clkr,
1750 	[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
1751 	[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
1752 	[DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
1753 	[DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
1754 	[DISP_CC_MDSS_VSYNC1_CLK] = &disp_cc_mdss_vsync1_clk.clkr,
1755 	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
1756 	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
1757 	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
1758 	[DISP_CC_PLL1] = &disp_cc_pll1.clkr,
1759 	[DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
1760 	[DISP_CC_SLEEP_CLK_SRC] = &disp_cc_sleep_clk_src.clkr,
1761 	[DISP_CC_XO_CLK_SRC] = &disp_cc_xo_clk_src.clkr,
1762 };
1763 
1764 static const struct qcom_reset_map disp_cc_sm8450_resets[] = {
1765 	[DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
1766 	[DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 },
1767 	[DISP_CC_MDSS_RSCC_BCR] = { 0xc000 },
1768 };
1769 
1770 static struct gdsc *disp_cc_sm8450_gdscs[] = {
1771 	[MDSS_GDSC] = &mdss_gdsc,
1772 	[MDSS_INT2_GDSC] = &mdss_int2_gdsc,
1773 };
1774 
1775 static const struct regmap_config disp_cc_sm8450_regmap_config = {
1776 	.reg_bits = 32,
1777 	.reg_stride = 4,
1778 	.val_bits = 32,
1779 	.max_register = 0x11008,
1780 	.fast_io = true,
1781 };
1782 
1783 static struct qcom_cc_desc disp_cc_sm8450_desc = {
1784 	.config = &disp_cc_sm8450_regmap_config,
1785 	.clks = disp_cc_sm8450_clocks,
1786 	.num_clks = ARRAY_SIZE(disp_cc_sm8450_clocks),
1787 	.resets = disp_cc_sm8450_resets,
1788 	.num_resets = ARRAY_SIZE(disp_cc_sm8450_resets),
1789 	.gdscs = disp_cc_sm8450_gdscs,
1790 	.num_gdscs = ARRAY_SIZE(disp_cc_sm8450_gdscs),
1791 };
1792 
1793 static const struct of_device_id disp_cc_sm8450_match_table[] = {
1794 	{ .compatible = "qcom,sm8450-dispcc" },
1795 	{ .compatible = "qcom,sm8475-dispcc" },
1796 	{ }
1797 };
1798 MODULE_DEVICE_TABLE(of, disp_cc_sm8450_match_table);
1799 
disp_cc_sm8450_probe(struct platform_device * pdev)1800 static int disp_cc_sm8450_probe(struct platform_device *pdev)
1801 {
1802 	struct regmap *regmap;
1803 	int ret;
1804 
1805 	ret = devm_pm_runtime_enable(&pdev->dev);
1806 	if (ret)
1807 		return ret;
1808 
1809 	ret = pm_runtime_resume_and_get(&pdev->dev);
1810 	if (ret)
1811 		return ret;
1812 
1813 	regmap = qcom_cc_map(pdev, &disp_cc_sm8450_desc);
1814 	if (IS_ERR(regmap)) {
1815 		ret = PTR_ERR(regmap);
1816 		goto err_put_rpm;
1817 	}
1818 
1819 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8475-dispcc")) {
1820 		/* Update DISPCC PLL0 */
1821 		disp_cc_pll0.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
1822 		disp_cc_pll0.clkr.hw.init = &sm8475_disp_cc_pll0_init;
1823 
1824 		/* Update DISPCC PLL1 */
1825 		disp_cc_pll1.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
1826 		disp_cc_pll1.clkr.hw.init = &sm8475_disp_cc_pll1_init;
1827 
1828 		clk_lucid_ole_pll_configure(&disp_cc_pll0, regmap, &sm8475_disp_cc_pll0_config);
1829 		clk_lucid_ole_pll_configure(&disp_cc_pll1, regmap, &sm8475_disp_cc_pll1_config);
1830 	} else {
1831 		clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
1832 		clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
1833 	}
1834 
1835 	/* Enable clock gating for MDP clocks */
1836 	regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
1837 
1838 	/* Keep some clocks always-on */
1839 	qcom_branch_set_clk_en(regmap, 0xe05c); /* DISP_CC_XO_CLK */
1840 
1841 	ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_sm8450_desc, regmap);
1842 	if (ret)
1843 		goto err_put_rpm;
1844 
1845 	pm_runtime_put(&pdev->dev);
1846 
1847 	return 0;
1848 
1849 err_put_rpm:
1850 	pm_runtime_put_sync(&pdev->dev);
1851 
1852 	return ret;
1853 }
1854 
1855 static struct platform_driver disp_cc_sm8450_driver = {
1856 	.probe = disp_cc_sm8450_probe,
1857 	.driver = {
1858 		.name = "disp_cc-sm8450",
1859 		.of_match_table = disp_cc_sm8450_match_table,
1860 	},
1861 };
1862 
1863 module_platform_driver(disp_cc_sm8450_driver);
1864 
1865 MODULE_DESCRIPTION("QTI DISPCC SM8450 / SM8475 Driver");
1866 MODULE_LICENSE("GPL");
1867