xref: /openbmc/linux/drivers/clk/qcom/mmcc-msm8998.c (revision f3d7c2cd)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2019, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16 
17 #include <dt-bindings/clock/qcom,mmcc-msm8998.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-regmap-divider.h"
22 #include "clk-alpha-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-branch.h"
25 #include "reset.h"
26 #include "gdsc.h"
27 
28 enum {
29 	P_XO,
30 	P_GPLL0,
31 	P_GPLL0_DIV,
32 	P_MMPLL0_OUT_EVEN,
33 	P_MMPLL1_OUT_EVEN,
34 	P_MMPLL3_OUT_EVEN,
35 	P_MMPLL4_OUT_EVEN,
36 	P_MMPLL5_OUT_EVEN,
37 	P_MMPLL6_OUT_EVEN,
38 	P_MMPLL7_OUT_EVEN,
39 	P_MMPLL10_OUT_EVEN,
40 	P_DSI0PLL,
41 	P_DSI1PLL,
42 	P_DSI0PLL_BYTE,
43 	P_DSI1PLL_BYTE,
44 	P_HDMIPLL,
45 	P_DPVCO,
46 	P_DPLINK,
47 	P_CORE_BI_PLL_TEST_SE,
48 };
49 
50 static struct clk_fixed_factor gpll0_div = {
51 	.mult = 1,
52 	.div = 2,
53 	.hw.init = &(struct clk_init_data){
54 		.name = "mmss_gpll0_div",
55 		.parent_data = &(const struct clk_parent_data){
56 			.fw_name = "gpll0",
57 			.name = "gpll0"
58 		},
59 		.num_parents = 1,
60 		.ops = &clk_fixed_factor_ops,
61 	},
62 };
63 
64 static const struct clk_div_table post_div_table_fabia_even[] = {
65 	{ 0x0, 1 },
66 	{ 0x1, 2 },
67 	{ 0x3, 4 },
68 	{ 0x7, 8 },
69 	{ }
70 };
71 
72 static struct clk_alpha_pll mmpll0 = {
73 	.offset = 0xc000,
74 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
75 	.clkr = {
76 		.enable_reg = 0x1e0,
77 		.enable_mask = BIT(0),
78 		.hw.init = &(struct clk_init_data){
79 			.name = "mmpll0",
80 			.parent_data = &(const struct clk_parent_data){
81 				.fw_name = "xo",
82 				.name = "xo"
83 			},
84 			.num_parents = 1,
85 			.ops = &clk_alpha_pll_fixed_fabia_ops,
86 		},
87 	},
88 };
89 
90 static struct clk_alpha_pll_postdiv mmpll0_out_even = {
91 	.offset = 0xc000,
92 	.post_div_shift = 8,
93 	.post_div_table = post_div_table_fabia_even,
94 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
95 	.width = 4,
96 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
97 	.clkr.hw.init = &(struct clk_init_data){
98 		.name = "mmpll0_out_even",
99 		.parent_hws = (const struct clk_hw *[]){ &mmpll0.clkr.hw },
100 		.num_parents = 1,
101 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
102 	},
103 };
104 
105 static struct clk_alpha_pll mmpll1 = {
106 	.offset = 0xc050,
107 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
108 	.clkr = {
109 		.enable_reg = 0x1e0,
110 		.enable_mask = BIT(1),
111 		.hw.init = &(struct clk_init_data){
112 			.name = "mmpll1",
113 			.parent_data = &(const struct clk_parent_data){
114 				.fw_name = "xo",
115 				.name = "xo"
116 			},
117 			.num_parents = 1,
118 			.ops = &clk_alpha_pll_fixed_fabia_ops,
119 		},
120 	},
121 };
122 
123 static struct clk_alpha_pll_postdiv mmpll1_out_even = {
124 	.offset = 0xc050,
125 	.post_div_shift = 8,
126 	.post_div_table = post_div_table_fabia_even,
127 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
128 	.width = 4,
129 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
130 	.clkr.hw.init = &(struct clk_init_data){
131 		.name = "mmpll1_out_even",
132 		.parent_hws = (const struct clk_hw *[]){ &mmpll1.clkr.hw },
133 		.num_parents = 1,
134 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
135 	},
136 };
137 
138 static struct clk_alpha_pll mmpll3 = {
139 	.offset = 0x0,
140 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
141 	.clkr.hw.init = &(struct clk_init_data){
142 		.name = "mmpll3",
143 		.parent_data = &(const struct clk_parent_data){
144 			.fw_name = "xo",
145 			.name = "xo"
146 		},
147 		.num_parents = 1,
148 		.ops = &clk_alpha_pll_fixed_fabia_ops,
149 	},
150 };
151 
152 static struct clk_alpha_pll_postdiv mmpll3_out_even = {
153 	.offset = 0x0,
154 	.post_div_shift = 8,
155 	.post_div_table = post_div_table_fabia_even,
156 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
157 	.width = 4,
158 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
159 	.clkr.hw.init = &(struct clk_init_data){
160 		.name = "mmpll3_out_even",
161 		.parent_hws = (const struct clk_hw *[]){ &mmpll3.clkr.hw },
162 		.num_parents = 1,
163 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
164 	},
165 };
166 
167 static struct clk_alpha_pll mmpll4 = {
168 	.offset = 0x50,
169 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
170 	.clkr.hw.init = &(struct clk_init_data){
171 		.name = "mmpll4",
172 		.parent_data = &(const struct clk_parent_data){
173 			.fw_name = "xo",
174 			.name = "xo"
175 		},
176 		.num_parents = 1,
177 		.ops = &clk_alpha_pll_fixed_fabia_ops,
178 	},
179 };
180 
181 static struct clk_alpha_pll_postdiv mmpll4_out_even = {
182 	.offset = 0x50,
183 	.post_div_shift = 8,
184 	.post_div_table = post_div_table_fabia_even,
185 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
186 	.width = 4,
187 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
188 	.clkr.hw.init = &(struct clk_init_data){
189 		.name = "mmpll4_out_even",
190 		.parent_hws = (const struct clk_hw *[]){ &mmpll4.clkr.hw },
191 		.num_parents = 1,
192 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
193 	},
194 };
195 
196 static struct clk_alpha_pll mmpll5 = {
197 	.offset = 0xa0,
198 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
199 	.clkr.hw.init = &(struct clk_init_data){
200 		.name = "mmpll5",
201 		.parent_data = &(const struct clk_parent_data){
202 			.fw_name = "xo",
203 			.name = "xo"
204 		},
205 		.num_parents = 1,
206 		.ops = &clk_alpha_pll_fixed_fabia_ops,
207 	},
208 };
209 
210 static struct clk_alpha_pll_postdiv mmpll5_out_even = {
211 	.offset = 0xa0,
212 	.post_div_shift = 8,
213 	.post_div_table = post_div_table_fabia_even,
214 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
215 	.width = 4,
216 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
217 	.clkr.hw.init = &(struct clk_init_data){
218 		.name = "mmpll5_out_even",
219 		.parent_hws = (const struct clk_hw *[]){ &mmpll5.clkr.hw },
220 		.num_parents = 1,
221 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
222 	},
223 };
224 
225 static struct clk_alpha_pll mmpll6 = {
226 	.offset = 0xf0,
227 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
228 	.clkr.hw.init = &(struct clk_init_data){
229 		.name = "mmpll6",
230 		.parent_data = &(const struct clk_parent_data){
231 			.fw_name = "xo",
232 			.name = "xo"
233 		},
234 		.num_parents = 1,
235 		.ops = &clk_alpha_pll_fixed_fabia_ops,
236 	},
237 };
238 
239 static struct clk_alpha_pll_postdiv mmpll6_out_even = {
240 	.offset = 0xf0,
241 	.post_div_shift = 8,
242 	.post_div_table = post_div_table_fabia_even,
243 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
244 	.width = 4,
245 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
246 	.clkr.hw.init = &(struct clk_init_data){
247 		.name = "mmpll6_out_even",
248 		.parent_hws = (const struct clk_hw *[]){ &mmpll6.clkr.hw },
249 		.num_parents = 1,
250 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
251 	},
252 };
253 
254 static struct clk_alpha_pll mmpll7 = {
255 	.offset = 0x140,
256 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
257 	.clkr.hw.init = &(struct clk_init_data){
258 		.name = "mmpll7",
259 		.parent_data = &(const struct clk_parent_data){
260 			.fw_name = "xo",
261 			.name = "xo"
262 		},
263 		.num_parents = 1,
264 		.ops = &clk_alpha_pll_fixed_fabia_ops,
265 	},
266 };
267 
268 static struct clk_alpha_pll_postdiv mmpll7_out_even = {
269 	.offset = 0x140,
270 	.post_div_shift = 8,
271 	.post_div_table = post_div_table_fabia_even,
272 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
273 	.width = 4,
274 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
275 	.clkr.hw.init = &(struct clk_init_data){
276 		.name = "mmpll7_out_even",
277 		.parent_hws = (const struct clk_hw *[]){ &mmpll7.clkr.hw },
278 		.num_parents = 1,
279 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
280 	},
281 };
282 
283 static struct clk_alpha_pll mmpll10 = {
284 	.offset = 0x190,
285 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
286 	.clkr.hw.init = &(struct clk_init_data){
287 		.name = "mmpll10",
288 		.parent_data = &(const struct clk_parent_data){
289 			.fw_name = "xo",
290 			.name = "xo"
291 		},
292 		.num_parents = 1,
293 		.ops = &clk_alpha_pll_fixed_fabia_ops,
294 	},
295 };
296 
297 static struct clk_alpha_pll_postdiv mmpll10_out_even = {
298 	.offset = 0x190,
299 	.post_div_shift = 8,
300 	.post_div_table = post_div_table_fabia_even,
301 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
302 	.width = 4,
303 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
304 	.clkr.hw.init = &(struct clk_init_data){
305 		.name = "mmpll10_out_even",
306 		.parent_hws = (const struct clk_hw *[]){ &mmpll10.clkr.hw },
307 		.num_parents = 1,
308 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
309 	},
310 };
311 
312 static const struct parent_map mmss_xo_hdmi_map[] = {
313 	{ P_XO, 0 },
314 	{ P_HDMIPLL, 1 },
315 	{ P_CORE_BI_PLL_TEST_SE, 7 }
316 };
317 
318 static const struct clk_parent_data mmss_xo_hdmi[] = {
319 	{ .fw_name = "xo", .name = "xo" },
320 	{ .fw_name = "hdmipll", .name = "hdmipll" },
321 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
322 };
323 
324 static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
325 	{ P_XO, 0 },
326 	{ P_DSI0PLL, 1 },
327 	{ P_DSI1PLL, 2 },
328 	{ P_CORE_BI_PLL_TEST_SE, 7 }
329 };
330 
331 static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = {
332 	{ .fw_name = "xo", .name = "xo" },
333 	{ .fw_name = "dsi0dsi", .name = "dsi0dsi" },
334 	{ .fw_name = "dsi1dsi", .name = "dsi1dsi" },
335 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
336 };
337 
338 static const struct parent_map mmss_xo_dsibyte_map[] = {
339 	{ P_XO, 0 },
340 	{ P_DSI0PLL_BYTE, 1 },
341 	{ P_DSI1PLL_BYTE, 2 },
342 	{ P_CORE_BI_PLL_TEST_SE, 7 }
343 };
344 
345 static const struct clk_parent_data mmss_xo_dsibyte[] = {
346 	{ .fw_name = "xo", .name = "xo" },
347 	{ .fw_name = "dsi0byte", .name = "dsi0byte" },
348 	{ .fw_name = "dsi1byte", .name = "dsi1byte" },
349 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
350 };
351 
352 static const struct parent_map mmss_xo_dp_map[] = {
353 	{ P_XO, 0 },
354 	{ P_DPLINK, 1 },
355 	{ P_DPVCO, 2 },
356 	{ P_CORE_BI_PLL_TEST_SE, 7 }
357 };
358 
359 static const struct clk_parent_data mmss_xo_dp[] = {
360 	{ .fw_name = "xo", .name = "xo" },
361 	{ .fw_name = "dplink", .name = "dplink" },
362 	{ .fw_name = "dpvco", .name = "dpvco" },
363 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
364 };
365 
366 static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
367 	{ P_XO, 0 },
368 	{ P_GPLL0, 5 },
369 	{ P_GPLL0_DIV, 6 },
370 	{ P_CORE_BI_PLL_TEST_SE, 7 }
371 };
372 
373 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = {
374 	{ .fw_name = "xo", .name = "xo" },
375 	{ .fw_name = "gpll0", .name = "gpll0" },
376 	{ .hw = &gpll0_div.hw },
377 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
378 };
379 
380 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
381 	{ P_XO, 0 },
382 	{ P_MMPLL0_OUT_EVEN, 1 },
383 	{ P_GPLL0, 5 },
384 	{ P_GPLL0_DIV, 6 },
385 	{ P_CORE_BI_PLL_TEST_SE, 7 }
386 };
387 
388 static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = {
389 	{ .fw_name = "xo", .name = "xo" },
390 	{ .hw = &mmpll0_out_even.clkr.hw },
391 	{ .fw_name = "gpll0", .name = "gpll0" },
392 	{ .hw = &gpll0_div.hw },
393 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
394 };
395 
396 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
397 	{ P_XO, 0 },
398 	{ P_MMPLL0_OUT_EVEN, 1 },
399 	{ P_MMPLL1_OUT_EVEN, 2 },
400 	{ P_GPLL0, 5 },
401 	{ P_GPLL0_DIV, 6 },
402 	{ P_CORE_BI_PLL_TEST_SE, 7 }
403 };
404 
405 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
406 	{ .fw_name = "xo", .name = "xo" },
407 	{ .hw = &mmpll0_out_even.clkr.hw },
408 	{ .hw = &mmpll1_out_even.clkr.hw },
409 	{ .fw_name = "gpll0", .name = "gpll0" },
410 	{ .hw = &gpll0_div.hw },
411 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
412 };
413 
414 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
415 	{ P_XO, 0 },
416 	{ P_MMPLL0_OUT_EVEN, 1 },
417 	{ P_MMPLL5_OUT_EVEN, 2 },
418 	{ P_GPLL0, 5 },
419 	{ P_GPLL0_DIV, 6 },
420 	{ P_CORE_BI_PLL_TEST_SE, 7 }
421 };
422 
423 static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
424 	{ .fw_name = "xo", .name = "xo" },
425 	{ .hw = &mmpll0_out_even.clkr.hw },
426 	{ .hw = &mmpll5_out_even.clkr.hw },
427 	{ .fw_name = "gpll0", .name = "gpll0" },
428 	{ .hw = &gpll0_div.hw },
429 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
430 };
431 
432 static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = {
433 	{ P_XO, 0 },
434 	{ P_MMPLL0_OUT_EVEN, 1 },
435 	{ P_MMPLL3_OUT_EVEN, 3 },
436 	{ P_MMPLL6_OUT_EVEN, 4 },
437 	{ P_GPLL0, 5 },
438 	{ P_GPLL0_DIV, 6 },
439 	{ P_CORE_BI_PLL_TEST_SE, 7 }
440 };
441 
442 static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div[] = {
443 	{ .fw_name = "xo", .name = "xo" },
444 	{ .hw = &mmpll0_out_even.clkr.hw },
445 	{ .hw = &mmpll3_out_even.clkr.hw },
446 	{ .hw = &mmpll6_out_even.clkr.hw },
447 	{ .fw_name = "gpll0", .name = "gpll0" },
448 	{ .hw = &gpll0_div.hw },
449 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
450 };
451 
452 static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
453 	{ P_XO, 0 },
454 	{ P_MMPLL4_OUT_EVEN, 1 },
455 	{ P_MMPLL7_OUT_EVEN, 2 },
456 	{ P_MMPLL10_OUT_EVEN, 3 },
457 	{ P_GPLL0, 5 },
458 	{ P_GPLL0_DIV, 6 },
459 	{ P_CORE_BI_PLL_TEST_SE, 7 }
460 };
461 
462 static const struct clk_parent_data mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = {
463 	{ .fw_name = "xo", .name = "xo" },
464 	{ .hw = &mmpll4_out_even.clkr.hw },
465 	{ .hw = &mmpll7_out_even.clkr.hw },
466 	{ .hw = &mmpll10_out_even.clkr.hw },
467 	{ .fw_name = "gpll0", .name = "gpll0" },
468 	{ .hw = &gpll0_div.hw },
469 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
470 };
471 
472 static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
473 	{ P_XO, 0 },
474 	{ P_MMPLL0_OUT_EVEN, 1 },
475 	{ P_MMPLL7_OUT_EVEN, 2 },
476 	{ P_MMPLL10_OUT_EVEN, 3 },
477 	{ P_GPLL0, 5 },
478 	{ P_GPLL0_DIV, 6 },
479 	{ P_CORE_BI_PLL_TEST_SE, 7 }
480 };
481 
482 static const struct clk_parent_data mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div[] = {
483 	{ .fw_name = "xo", .name = "xo" },
484 	{ .hw = &mmpll0_out_even.clkr.hw },
485 	{ .hw = &mmpll7_out_even.clkr.hw },
486 	{ .hw = &mmpll10_out_even.clkr.hw },
487 	{ .fw_name = "gpll0", .name = "gpll0" },
488 	{ .hw = &gpll0_div.hw },
489 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
490 };
491 
492 static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
493 	{ P_XO, 0 },
494 	{ P_MMPLL0_OUT_EVEN, 1 },
495 	{ P_MMPLL4_OUT_EVEN, 2 },
496 	{ P_MMPLL7_OUT_EVEN, 3 },
497 	{ P_MMPLL10_OUT_EVEN, 4 },
498 	{ P_GPLL0, 5 },
499 	{ P_GPLL0_DIV, 6 },
500 	{ P_CORE_BI_PLL_TEST_SE, 7 }
501 };
502 
503 static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = {
504 	{ .fw_name = "xo", .name = "xo" },
505 	{ .hw = &mmpll0_out_even.clkr.hw },
506 	{ .hw = &mmpll4_out_even.clkr.hw },
507 	{ .hw = &mmpll7_out_even.clkr.hw },
508 	{ .hw = &mmpll10_out_even.clkr.hw },
509 	{ .fw_name = "gpll0", .name = "gpll0" },
510 	{ .hw = &gpll0_div.hw },
511 	{ .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
512 };
513 
514 static struct clk_rcg2 byte0_clk_src = {
515 	.cmd_rcgr = 0x2120,
516 	.hid_width = 5,
517 	.parent_map = mmss_xo_dsibyte_map,
518 	.clkr.hw.init = &(struct clk_init_data){
519 		.name = "byte0_clk_src",
520 		.parent_data = mmss_xo_dsibyte,
521 		.num_parents = 4,
522 		.ops = &clk_byte2_ops,
523 		.flags = CLK_SET_RATE_PARENT,
524 	},
525 };
526 
527 static struct clk_rcg2 byte1_clk_src = {
528 	.cmd_rcgr = 0x2140,
529 	.hid_width = 5,
530 	.parent_map = mmss_xo_dsibyte_map,
531 	.clkr.hw.init = &(struct clk_init_data){
532 		.name = "byte1_clk_src",
533 		.parent_data = mmss_xo_dsibyte,
534 		.num_parents = 4,
535 		.ops = &clk_byte2_ops,
536 		.flags = CLK_SET_RATE_PARENT,
537 	},
538 };
539 
540 static const struct freq_tbl ftbl_cci_clk_src[] = {
541 	F(37500000, P_GPLL0, 16, 0, 0),
542 	F(50000000, P_GPLL0, 12, 0, 0),
543 	F(100000000, P_GPLL0, 6, 0, 0),
544 	{ }
545 };
546 
547 static struct clk_rcg2 cci_clk_src = {
548 	.cmd_rcgr = 0x3300,
549 	.hid_width = 5,
550 	.parent_map = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map,
551 	.freq_tbl = ftbl_cci_clk_src,
552 	.clkr.hw.init = &(struct clk_init_data){
553 		.name = "cci_clk_src",
554 		.parent_data = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div,
555 		.num_parents = 7,
556 		.ops = &clk_rcg2_ops,
557 	},
558 };
559 
560 static const struct freq_tbl ftbl_cpp_clk_src[] = {
561 	F(100000000, P_GPLL0, 6, 0, 0),
562 	F(200000000, P_GPLL0, 3, 0, 0),
563 	F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
564 	F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
565 	F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
566 	F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
567 	F(600000000, P_GPLL0, 1, 0, 0),
568 	{ }
569 };
570 
571 static struct clk_rcg2 cpp_clk_src = {
572 	.cmd_rcgr = 0x3640,
573 	.hid_width = 5,
574 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
575 	.freq_tbl = ftbl_cpp_clk_src,
576 	.clkr.hw.init = &(struct clk_init_data){
577 		.name = "cpp_clk_src",
578 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
579 		.num_parents = 8,
580 		.ops = &clk_rcg2_ops,
581 	},
582 };
583 
584 static const struct freq_tbl ftbl_csi_clk_src[] = {
585 	F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0),
586 	F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0),
587 	F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0),
588 	F(300000000, P_GPLL0, 2, 0, 0),
589 	F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
590 	F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
591 	{ }
592 };
593 
594 static struct clk_rcg2 csi0_clk_src = {
595 	.cmd_rcgr = 0x3090,
596 	.hid_width = 5,
597 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
598 	.freq_tbl = ftbl_csi_clk_src,
599 	.clkr.hw.init = &(struct clk_init_data){
600 		.name = "csi0_clk_src",
601 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
602 		.num_parents = 8,
603 		.ops = &clk_rcg2_ops,
604 	},
605 };
606 
607 static struct clk_rcg2 csi1_clk_src = {
608 	.cmd_rcgr = 0x3100,
609 	.hid_width = 5,
610 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
611 	.freq_tbl = ftbl_csi_clk_src,
612 	.clkr.hw.init = &(struct clk_init_data){
613 		.name = "csi1_clk_src",
614 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
615 		.num_parents = 8,
616 		.ops = &clk_rcg2_ops,
617 	},
618 };
619 
620 static struct clk_rcg2 csi2_clk_src = {
621 	.cmd_rcgr = 0x3160,
622 	.hid_width = 5,
623 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
624 	.freq_tbl = ftbl_csi_clk_src,
625 	.clkr.hw.init = &(struct clk_init_data){
626 		.name = "csi2_clk_src",
627 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
628 		.num_parents = 8,
629 		.ops = &clk_rcg2_ops,
630 	},
631 };
632 
633 static struct clk_rcg2 csi3_clk_src = {
634 	.cmd_rcgr = 0x31c0,
635 	.hid_width = 5,
636 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
637 	.freq_tbl = ftbl_csi_clk_src,
638 	.clkr.hw.init = &(struct clk_init_data){
639 		.name = "csi3_clk_src",
640 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
641 		.num_parents = 8,
642 		.ops = &clk_rcg2_ops,
643 	},
644 };
645 
646 static const struct freq_tbl ftbl_csiphy_clk_src[] = {
647 	F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0),
648 	F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0),
649 	F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0),
650 	F(300000000, P_GPLL0, 2, 0, 0),
651 	F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
652 	{ }
653 };
654 
655 static struct clk_rcg2 csiphy_clk_src = {
656 	.cmd_rcgr = 0x3800,
657 	.hid_width = 5,
658 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
659 	.freq_tbl = ftbl_csiphy_clk_src,
660 	.clkr.hw.init = &(struct clk_init_data){
661 		.name = "csiphy_clk_src",
662 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
663 		.num_parents = 8,
664 		.ops = &clk_rcg2_ops,
665 	},
666 };
667 
668 static const struct freq_tbl ftbl_csiphytimer_clk_src[] = {
669 	F(200000000, P_GPLL0, 3, 0, 0),
670 	F(269333333, P_MMPLL0_OUT_EVEN, 3, 0, 0),
671 	{ }
672 };
673 
674 static struct clk_rcg2 csi0phytimer_clk_src = {
675 	.cmd_rcgr = 0x3000,
676 	.hid_width = 5,
677 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
678 	.freq_tbl = ftbl_csiphytimer_clk_src,
679 	.clkr.hw.init = &(struct clk_init_data){
680 		.name = "csi0phytimer_clk_src",
681 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
682 		.num_parents = 8,
683 		.ops = &clk_rcg2_ops,
684 	},
685 };
686 
687 static struct clk_rcg2 csi1phytimer_clk_src = {
688 	.cmd_rcgr = 0x3030,
689 	.hid_width = 5,
690 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
691 	.freq_tbl = ftbl_csiphytimer_clk_src,
692 	.clkr.hw.init = &(struct clk_init_data){
693 		.name = "csi1phytimer_clk_src",
694 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
695 		.num_parents = 8,
696 		.ops = &clk_rcg2_ops,
697 	},
698 };
699 
700 static struct clk_rcg2 csi2phytimer_clk_src = {
701 	.cmd_rcgr = 0x3060,
702 	.hid_width = 5,
703 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
704 	.freq_tbl = ftbl_csiphytimer_clk_src,
705 	.clkr.hw.init = &(struct clk_init_data){
706 		.name = "csi2phytimer_clk_src",
707 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
708 		.num_parents = 8,
709 		.ops = &clk_rcg2_ops,
710 	},
711 };
712 
713 static const struct freq_tbl ftbl_dp_aux_clk_src[] = {
714 	F(19200000, P_XO, 1, 0, 0),
715 	{ }
716 };
717 
718 static struct clk_rcg2 dp_aux_clk_src = {
719 	.cmd_rcgr = 0x2260,
720 	.hid_width = 5,
721 	.parent_map = mmss_xo_gpll0_gpll0_div_map,
722 	.freq_tbl = ftbl_dp_aux_clk_src,
723 	.clkr.hw.init = &(struct clk_init_data){
724 		.name = "dp_aux_clk_src",
725 		.parent_data = mmss_xo_gpll0_gpll0_div,
726 		.num_parents = 4,
727 		.ops = &clk_rcg2_ops,
728 	},
729 };
730 
731 static const struct freq_tbl ftbl_dp_crypto_clk_src[] = {
732 	F(101250, P_DPLINK, 1, 5, 16),
733 	F(168750, P_DPLINK, 1, 5, 16),
734 	F(337500, P_DPLINK, 1, 5, 16),
735 	{ }
736 };
737 
738 static struct clk_rcg2 dp_crypto_clk_src = {
739 	.cmd_rcgr = 0x2220,
740 	.hid_width = 5,
741 	.parent_map = mmss_xo_dp_map,
742 	.freq_tbl = ftbl_dp_crypto_clk_src,
743 	.clkr.hw.init = &(struct clk_init_data){
744 		.name = "dp_crypto_clk_src",
745 		.parent_data = mmss_xo_dp,
746 		.num_parents = 4,
747 		.ops = &clk_rcg2_ops,
748 	},
749 };
750 
751 static const struct freq_tbl ftbl_dp_link_clk_src[] = {
752 	F(162000, P_DPLINK, 2, 0, 0),
753 	F(270000, P_DPLINK, 2, 0, 0),
754 	F(540000, P_DPLINK, 2, 0, 0),
755 	{ }
756 };
757 
758 static struct clk_rcg2 dp_link_clk_src = {
759 	.cmd_rcgr = 0x2200,
760 	.hid_width = 5,
761 	.parent_map = mmss_xo_dp_map,
762 	.freq_tbl = ftbl_dp_link_clk_src,
763 	.clkr.hw.init = &(struct clk_init_data){
764 		.name = "dp_link_clk_src",
765 		.parent_data = mmss_xo_dp,
766 		.num_parents = 4,
767 		.ops = &clk_rcg2_ops,
768 	},
769 };
770 
771 static const struct freq_tbl ftbl_dp_pixel_clk_src[] = {
772 	F(154000000, P_DPVCO, 1, 0, 0),
773 	F(337500000, P_DPVCO, 2, 0, 0),
774 	F(675000000, P_DPVCO, 2, 0, 0),
775 	{ }
776 };
777 
778 static struct clk_rcg2 dp_pixel_clk_src = {
779 	.cmd_rcgr = 0x2240,
780 	.hid_width = 5,
781 	.parent_map = mmss_xo_dp_map,
782 	.freq_tbl = ftbl_dp_pixel_clk_src,
783 	.clkr.hw.init = &(struct clk_init_data){
784 		.name = "dp_pixel_clk_src",
785 		.parent_data = mmss_xo_dp,
786 		.num_parents = 4,
787 		.ops = &clk_rcg2_ops,
788 	},
789 };
790 
791 static const struct freq_tbl ftbl_esc_clk_src[] = {
792 	F(19200000, P_XO, 1, 0, 0),
793 	{ }
794 };
795 
796 static struct clk_rcg2 esc0_clk_src = {
797 	.cmd_rcgr = 0x2160,
798 	.hid_width = 5,
799 	.parent_map = mmss_xo_dsibyte_map,
800 	.freq_tbl = ftbl_esc_clk_src,
801 	.clkr.hw.init = &(struct clk_init_data){
802 		.name = "esc0_clk_src",
803 		.parent_data = mmss_xo_dsibyte,
804 		.num_parents = 4,
805 		.ops = &clk_rcg2_ops,
806 	},
807 };
808 
809 static struct clk_rcg2 esc1_clk_src = {
810 	.cmd_rcgr = 0x2180,
811 	.hid_width = 5,
812 	.parent_map = mmss_xo_dsibyte_map,
813 	.freq_tbl = ftbl_esc_clk_src,
814 	.clkr.hw.init = &(struct clk_init_data){
815 		.name = "esc1_clk_src",
816 		.parent_data = mmss_xo_dsibyte,
817 		.num_parents = 4,
818 		.ops = &clk_rcg2_ops,
819 	},
820 };
821 
822 static const struct freq_tbl ftbl_extpclk_clk_src[] = {
823 	{ .src = P_HDMIPLL },
824 	{ }
825 };
826 
827 static struct clk_rcg2 extpclk_clk_src = {
828 	.cmd_rcgr = 0x2060,
829 	.hid_width = 5,
830 	.parent_map = mmss_xo_hdmi_map,
831 	.freq_tbl = ftbl_extpclk_clk_src,
832 	.clkr.hw.init = &(struct clk_init_data){
833 		.name = "extpclk_clk_src",
834 		.parent_data = mmss_xo_hdmi,
835 		.num_parents = 3,
836 		.ops = &clk_byte_ops,
837 		.flags = CLK_SET_RATE_PARENT,
838 	},
839 };
840 
841 static const struct freq_tbl ftbl_fd_core_clk_src[] = {
842 	F(100000000, P_GPLL0, 6, 0, 0),
843 	F(200000000, P_GPLL0, 3, 0, 0),
844 	F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
845 	F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
846 	F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
847 	{ }
848 };
849 
850 static struct clk_rcg2 fd_core_clk_src = {
851 	.cmd_rcgr = 0x3b00,
852 	.hid_width = 5,
853 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
854 	.freq_tbl = ftbl_fd_core_clk_src,
855 	.clkr.hw.init = &(struct clk_init_data){
856 		.name = "fd_core_clk_src",
857 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
858 		.num_parents = 8,
859 		.ops = &clk_rcg2_ops,
860 	},
861 };
862 
863 static const struct freq_tbl ftbl_hdmi_clk_src[] = {
864 	F(19200000, P_XO, 1, 0, 0),
865 	{ }
866 };
867 
868 static struct clk_rcg2 hdmi_clk_src = {
869 	.cmd_rcgr = 0x2100,
870 	.hid_width = 5,
871 	.parent_map = mmss_xo_gpll0_gpll0_div_map,
872 	.freq_tbl = ftbl_hdmi_clk_src,
873 	.clkr.hw.init = &(struct clk_init_data){
874 		.name = "hdmi_clk_src",
875 		.parent_data = mmss_xo_gpll0_gpll0_div,
876 		.num_parents = 4,
877 		.ops = &clk_rcg2_ops,
878 	},
879 };
880 
881 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
882 	F(75000000, P_GPLL0, 8, 0, 0),
883 	F(150000000, P_GPLL0, 4, 0, 0),
884 	F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0),
885 	F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
886 	{ }
887 };
888 
889 static struct clk_rcg2 jpeg0_clk_src = {
890 	.cmd_rcgr = 0x3500,
891 	.hid_width = 5,
892 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
893 	.freq_tbl = ftbl_jpeg0_clk_src,
894 	.clkr.hw.init = &(struct clk_init_data){
895 		.name = "jpeg0_clk_src",
896 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
897 		.num_parents = 8,
898 		.ops = &clk_rcg2_ops,
899 	},
900 };
901 
902 static const struct freq_tbl ftbl_maxi_clk_src[] = {
903 	F(19200000, P_XO, 1, 0, 0),
904 	F(75000000, P_GPLL0_DIV, 4, 0, 0),
905 	F(171428571, P_GPLL0, 3.5, 0, 0),
906 	F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0),
907 	F(406000000, P_MMPLL1_OUT_EVEN, 2, 0, 0),
908 	{ }
909 };
910 
911 static struct clk_rcg2 maxi_clk_src = {
912 	.cmd_rcgr = 0xf020,
913 	.hid_width = 5,
914 	.parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
915 	.freq_tbl = ftbl_maxi_clk_src,
916 	.clkr.hw.init = &(struct clk_init_data){
917 		.name = "maxi_clk_src",
918 		.parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
919 		.num_parents = 6,
920 		.ops = &clk_rcg2_ops,
921 	},
922 };
923 
924 static const struct freq_tbl ftbl_mclk_clk_src[] = {
925 	F(4800000, P_XO, 4, 0, 0),
926 	F(6000000, P_GPLL0_DIV, 10, 1, 5),
927 	F(8000000, P_GPLL0_DIV, 1, 2, 75),
928 	F(9600000, P_XO, 2, 0, 0),
929 	F(16666667, P_GPLL0_DIV, 2, 1, 9),
930 	F(19200000, P_XO, 1, 0, 0),
931 	F(24000000, P_GPLL0_DIV, 1, 2, 25),
932 	F(33333333, P_GPLL0_DIV, 1, 2, 9),
933 	F(48000000, P_GPLL0, 1, 2, 25),
934 	F(66666667, P_GPLL0, 1, 2, 9),
935 	{ }
936 };
937 
938 static struct clk_rcg2 mclk0_clk_src = {
939 	.cmd_rcgr = 0x3360,
940 	.hid_width = 5,
941 	.parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
942 	.freq_tbl = ftbl_mclk_clk_src,
943 	.clkr.hw.init = &(struct clk_init_data){
944 		.name = "mclk0_clk_src",
945 		.parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
946 		.num_parents = 7,
947 		.ops = &clk_rcg2_ops,
948 	},
949 };
950 
951 static struct clk_rcg2 mclk1_clk_src = {
952 	.cmd_rcgr = 0x3390,
953 	.hid_width = 5,
954 	.parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
955 	.freq_tbl = ftbl_mclk_clk_src,
956 	.clkr.hw.init = &(struct clk_init_data){
957 		.name = "mclk1_clk_src",
958 		.parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
959 		.num_parents = 7,
960 		.ops = &clk_rcg2_ops,
961 	},
962 };
963 
964 static struct clk_rcg2 mclk2_clk_src = {
965 	.cmd_rcgr = 0x33c0,
966 	.hid_width = 5,
967 	.parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
968 	.freq_tbl = ftbl_mclk_clk_src,
969 	.clkr.hw.init = &(struct clk_init_data){
970 		.name = "mclk2_clk_src",
971 		.parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
972 		.num_parents = 7,
973 		.ops = &clk_rcg2_ops,
974 	},
975 };
976 
977 static struct clk_rcg2 mclk3_clk_src = {
978 	.cmd_rcgr = 0x33f0,
979 	.hid_width = 5,
980 	.parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
981 	.freq_tbl = ftbl_mclk_clk_src,
982 	.clkr.hw.init = &(struct clk_init_data){
983 		.name = "mclk3_clk_src",
984 		.parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
985 		.num_parents = 7,
986 		.ops = &clk_rcg2_ops,
987 	},
988 };
989 
990 static const struct freq_tbl ftbl_mdp_clk_src[] = {
991 	F(85714286, P_GPLL0, 7, 0, 0),
992 	F(100000000, P_GPLL0, 6, 0, 0),
993 	F(150000000, P_GPLL0, 4, 0, 0),
994 	F(171428571, P_GPLL0, 3.5, 0, 0),
995 	F(200000000, P_GPLL0, 3, 0, 0),
996 	F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0),
997 	F(300000000, P_GPLL0, 2, 0, 0),
998 	F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0),
999 	F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0),
1000 	{ }
1001 };
1002 
1003 static struct clk_rcg2 mdp_clk_src = {
1004 	.cmd_rcgr = 0x2040,
1005 	.hid_width = 5,
1006 	.parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
1007 	.freq_tbl = ftbl_mdp_clk_src,
1008 	.clkr.hw.init = &(struct clk_init_data){
1009 		.name = "mdp_clk_src",
1010 		.parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
1011 		.num_parents = 6,
1012 		.ops = &clk_rcg2_ops,
1013 	},
1014 };
1015 
1016 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1017 	F(19200000, P_XO, 1, 0, 0),
1018 	{ }
1019 };
1020 
1021 static struct clk_rcg2 vsync_clk_src = {
1022 	.cmd_rcgr = 0x2080,
1023 	.hid_width = 5,
1024 	.parent_map = mmss_xo_gpll0_gpll0_div_map,
1025 	.freq_tbl = ftbl_vsync_clk_src,
1026 	.clkr.hw.init = &(struct clk_init_data){
1027 		.name = "vsync_clk_src",
1028 		.parent_data = mmss_xo_gpll0_gpll0_div,
1029 		.num_parents = 4,
1030 		.ops = &clk_rcg2_ops,
1031 	},
1032 };
1033 
1034 static const struct freq_tbl ftbl_ahb_clk_src[] = {
1035 	F(19200000, P_XO, 1, 0, 0),
1036 	F(40000000, P_GPLL0, 15, 0, 0),
1037 	F(80800000, P_MMPLL0_OUT_EVEN, 10, 0, 0),
1038 	{ }
1039 };
1040 
1041 static struct clk_rcg2 ahb_clk_src = {
1042 	.cmd_rcgr = 0x5000,
1043 	.hid_width = 5,
1044 	.parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
1045 	.freq_tbl = ftbl_ahb_clk_src,
1046 	.clkr.hw.init = &(struct clk_init_data){
1047 		.name = "ahb_clk_src",
1048 		.parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
1049 		.num_parents = 5,
1050 		.ops = &clk_rcg2_ops,
1051 	},
1052 };
1053 
1054 static const struct freq_tbl ftbl_axi_clk_src[] = {
1055 	F(75000000, P_GPLL0, 8, 0, 0),
1056 	F(171428571, P_GPLL0, 3.5, 0, 0),
1057 	F(240000000, P_GPLL0, 2.5, 0, 0),
1058 	F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0),
1059 	F(406000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
1060 	{ }
1061 };
1062 
1063 /* RO to linux */
1064 static struct clk_rcg2 axi_clk_src = {
1065 	.cmd_rcgr = 0xd000,
1066 	.hid_width = 5,
1067 	.parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
1068 	.freq_tbl = ftbl_axi_clk_src,
1069 	.clkr.hw.init = &(struct clk_init_data){
1070 		.name = "axi_clk_src",
1071 		.parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
1072 		.num_parents = 6,
1073 		.ops = &clk_rcg2_ops,
1074 	},
1075 };
1076 
1077 static struct clk_rcg2 pclk0_clk_src = {
1078 	.cmd_rcgr = 0x2000,
1079 	.mnd_width = 8,
1080 	.hid_width = 5,
1081 	.parent_map = mmss_xo_dsi0pll_dsi1pll_map,
1082 	.clkr.hw.init = &(struct clk_init_data){
1083 		.name = "pclk0_clk_src",
1084 		.parent_data = mmss_xo_dsi0pll_dsi1pll,
1085 		.num_parents = 4,
1086 		.ops = &clk_pixel_ops,
1087 		.flags = CLK_SET_RATE_PARENT,
1088 	},
1089 };
1090 
1091 static struct clk_rcg2 pclk1_clk_src = {
1092 	.cmd_rcgr = 0x2020,
1093 	.mnd_width = 8,
1094 	.hid_width = 5,
1095 	.parent_map = mmss_xo_dsi0pll_dsi1pll_map,
1096 	.clkr.hw.init = &(struct clk_init_data){
1097 		.name = "pclk1_clk_src",
1098 		.parent_data = mmss_xo_dsi0pll_dsi1pll,
1099 		.num_parents = 4,
1100 		.ops = &clk_pixel_ops,
1101 		.flags = CLK_SET_RATE_PARENT,
1102 	},
1103 };
1104 
1105 static const struct freq_tbl ftbl_rot_clk_src[] = {
1106 	F(171428571, P_GPLL0, 3.5, 0, 0),
1107 	F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0),
1108 	F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0),
1109 	F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0),
1110 	{ }
1111 };
1112 
1113 static struct clk_rcg2 rot_clk_src = {
1114 	.cmd_rcgr = 0x21a0,
1115 	.hid_width = 5,
1116 	.parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
1117 	.freq_tbl = ftbl_rot_clk_src,
1118 	.clkr.hw.init = &(struct clk_init_data){
1119 		.name = "rot_clk_src",
1120 		.parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
1121 		.num_parents = 6,
1122 		.ops = &clk_rcg2_ops,
1123 	},
1124 };
1125 
1126 static const struct freq_tbl ftbl_video_core_clk_src[] = {
1127 	F(200000000, P_GPLL0, 3, 0, 0),
1128 	F(269330000, P_MMPLL0_OUT_EVEN, 3, 0, 0),
1129 	F(355200000, P_MMPLL6_OUT_EVEN, 2.5, 0, 0),
1130 	F(444000000, P_MMPLL6_OUT_EVEN, 2, 0, 0),
1131 	F(533000000, P_MMPLL3_OUT_EVEN, 2, 0, 0),
1132 	{ }
1133 };
1134 
1135 static struct clk_rcg2 video_core_clk_src = {
1136 	.cmd_rcgr = 0x1000,
1137 	.hid_width = 5,
1138 	.parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1139 	.freq_tbl = ftbl_video_core_clk_src,
1140 	.clkr.hw.init = &(struct clk_init_data){
1141 		.name = "video_core_clk_src",
1142 		.parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1143 		.num_parents = 7,
1144 		.ops = &clk_rcg2_ops,
1145 	},
1146 };
1147 
1148 static struct clk_rcg2 video_subcore0_clk_src = {
1149 	.cmd_rcgr = 0x1060,
1150 	.hid_width = 5,
1151 	.parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1152 	.freq_tbl = ftbl_video_core_clk_src,
1153 	.clkr.hw.init = &(struct clk_init_data){
1154 		.name = "video_subcore0_clk_src",
1155 		.parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1156 		.num_parents = 7,
1157 		.ops = &clk_rcg2_ops,
1158 	},
1159 };
1160 
1161 static struct clk_rcg2 video_subcore1_clk_src = {
1162 	.cmd_rcgr = 0x1080,
1163 	.hid_width = 5,
1164 	.parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1165 	.freq_tbl = ftbl_video_core_clk_src,
1166 	.clkr.hw.init = &(struct clk_init_data){
1167 		.name = "video_subcore1_clk_src",
1168 		.parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1169 		.num_parents = 7,
1170 		.ops = &clk_rcg2_ops,
1171 	},
1172 };
1173 
1174 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1175 	F(200000000, P_GPLL0, 3, 0, 0),
1176 	F(300000000, P_GPLL0, 2, 0, 0),
1177 	F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0),
1178 	F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
1179 	F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
1180 	F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
1181 	F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
1182 	F(600000000, P_GPLL0, 1, 0, 0),
1183 	{ }
1184 };
1185 
1186 static struct clk_rcg2 vfe0_clk_src = {
1187 	.cmd_rcgr = 0x3600,
1188 	.hid_width = 5,
1189 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
1190 	.freq_tbl = ftbl_vfe_clk_src,
1191 	.clkr.hw.init = &(struct clk_init_data){
1192 		.name = "vfe0_clk_src",
1193 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
1194 		.num_parents = 8,
1195 		.ops = &clk_rcg2_ops,
1196 	},
1197 };
1198 
1199 static struct clk_rcg2 vfe1_clk_src = {
1200 	.cmd_rcgr = 0x3620,
1201 	.hid_width = 5,
1202 	.parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
1203 	.freq_tbl = ftbl_vfe_clk_src,
1204 	.clkr.hw.init = &(struct clk_init_data){
1205 		.name = "vfe1_clk_src",
1206 		.parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
1207 		.num_parents = 8,
1208 		.ops = &clk_rcg2_ops,
1209 	},
1210 };
1211 
1212 static struct clk_branch misc_ahb_clk = {
1213 	.halt_reg = 0x328,
1214 	.hwcg_reg = 0x328,
1215 	.hwcg_bit = 1,
1216 	.clkr = {
1217 		.enable_reg = 0x328,
1218 		.enable_mask = BIT(0),
1219 		.hw.init = &(struct clk_init_data){
1220 			.name = "misc_ahb_clk",
1221 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1222 			.num_parents = 1,
1223 			.ops = &clk_branch2_ops,
1224 			.flags = CLK_SET_RATE_PARENT,
1225 		},
1226 	},
1227 };
1228 
1229 static struct clk_branch video_core_clk = {
1230 	.halt_reg = 0x1028,
1231 	.clkr = {
1232 		.enable_reg = 0x1028,
1233 		.enable_mask = BIT(0),
1234 		.hw.init = &(struct clk_init_data){
1235 			.name = "video_core_clk",
1236 			.parent_hws = (const struct clk_hw *[]){ &video_core_clk_src.clkr.hw },
1237 			.num_parents = 1,
1238 			.ops = &clk_branch2_ops,
1239 			.flags = CLK_SET_RATE_PARENT,
1240 		},
1241 	},
1242 };
1243 
1244 static struct clk_branch video_ahb_clk = {
1245 	.halt_reg = 0x1030,
1246 	.hwcg_reg = 0x1030,
1247 	.hwcg_bit = 1,
1248 	.clkr = {
1249 		.enable_reg = 0x1030,
1250 		.enable_mask = BIT(0),
1251 		.hw.init = &(struct clk_init_data){
1252 			.name = "video_ahb_clk",
1253 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1254 			.num_parents = 1,
1255 			.ops = &clk_branch2_ops,
1256 			.flags = CLK_SET_RATE_PARENT,
1257 		},
1258 	},
1259 };
1260 
1261 static struct clk_branch video_axi_clk = {
1262 	.halt_reg = 0x1034,
1263 	.clkr = {
1264 		.enable_reg = 0x1034,
1265 		.enable_mask = BIT(0),
1266 		.hw.init = &(struct clk_init_data){
1267 			.name = "video_axi_clk",
1268 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
1269 			.num_parents = 1,
1270 			.ops = &clk_branch2_ops,
1271 		},
1272 	},
1273 };
1274 
1275 static struct clk_branch video_maxi_clk = {
1276 	.halt_reg = 0x1038,
1277 	.clkr = {
1278 		.enable_reg = 0x1038,
1279 		.enable_mask = BIT(0),
1280 		.hw.init = &(struct clk_init_data){
1281 			.name = "video_maxi_clk",
1282 			.parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
1283 			.num_parents = 1,
1284 			.ops = &clk_branch2_ops,
1285 			.flags = CLK_SET_RATE_PARENT,
1286 		},
1287 	},
1288 };
1289 
1290 static struct clk_branch video_subcore0_clk = {
1291 	.halt_reg = 0x1048,
1292 	.clkr = {
1293 		.enable_reg = 0x1048,
1294 		.enable_mask = BIT(0),
1295 		.hw.init = &(struct clk_init_data){
1296 			.name = "video_subcore0_clk",
1297 			.parent_hws = (const struct clk_hw *[]){ &video_subcore0_clk_src.clkr.hw },
1298 			.num_parents = 1,
1299 			.ops = &clk_branch2_ops,
1300 			.flags = CLK_SET_RATE_PARENT,
1301 		},
1302 	},
1303 };
1304 
1305 static struct clk_branch video_subcore1_clk = {
1306 	.halt_reg = 0x104c,
1307 	.clkr = {
1308 		.enable_reg = 0x104c,
1309 		.enable_mask = BIT(0),
1310 		.hw.init = &(struct clk_init_data){
1311 			.name = "video_subcore1_clk",
1312 			.parent_hws = (const struct clk_hw *[]){ &video_subcore1_clk_src.clkr.hw },
1313 			.num_parents = 1,
1314 			.ops = &clk_branch2_ops,
1315 			.flags = CLK_SET_RATE_PARENT,
1316 		},
1317 	},
1318 };
1319 
1320 static struct clk_branch mdss_ahb_clk = {
1321 	.halt_reg = 0x2308,
1322 	.hwcg_reg = 0x2308,
1323 	.hwcg_bit = 1,
1324 	.clkr = {
1325 		.enable_reg = 0x2308,
1326 		.enable_mask = BIT(0),
1327 		.hw.init = &(struct clk_init_data){
1328 			.name = "mdss_ahb_clk",
1329 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1330 			.num_parents = 1,
1331 			.ops = &clk_branch2_ops,
1332 			.flags = CLK_SET_RATE_PARENT,
1333 		},
1334 	},
1335 };
1336 
1337 static struct clk_branch mdss_hdmi_dp_ahb_clk = {
1338 	.halt_reg = 0x230c,
1339 	.clkr = {
1340 		.enable_reg = 0x230c,
1341 		.enable_mask = BIT(0),
1342 		.hw.init = &(struct clk_init_data){
1343 			.name = "mdss_hdmi_dp_ahb_clk",
1344 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1345 			.num_parents = 1,
1346 			.ops = &clk_branch2_ops,
1347 			.flags = CLK_SET_RATE_PARENT,
1348 		},
1349 	},
1350 };
1351 
1352 static struct clk_branch mdss_axi_clk = {
1353 	.halt_reg = 0x2310,
1354 	.clkr = {
1355 		.enable_reg = 0x2310,
1356 		.enable_mask = BIT(0),
1357 		.hw.init = &(struct clk_init_data){
1358 			.name = "mdss_axi_clk",
1359 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
1360 			.num_parents = 1,
1361 			.ops = &clk_branch2_ops,
1362 		},
1363 	},
1364 };
1365 
1366 static struct clk_branch mdss_pclk0_clk = {
1367 	.halt_reg = 0x2314,
1368 	.clkr = {
1369 		.enable_reg = 0x2314,
1370 		.enable_mask = BIT(0),
1371 		.hw.init = &(struct clk_init_data){
1372 			.name = "mdss_pclk0_clk",
1373 			.parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw },
1374 			.num_parents = 1,
1375 			.ops = &clk_branch2_ops,
1376 			.flags = CLK_SET_RATE_PARENT,
1377 		},
1378 	},
1379 };
1380 
1381 static struct clk_branch mdss_pclk1_clk = {
1382 	.halt_reg = 0x2318,
1383 	.clkr = {
1384 		.enable_reg = 0x2318,
1385 		.enable_mask = BIT(0),
1386 		.hw.init = &(struct clk_init_data){
1387 			.name = "mdss_pclk1_clk",
1388 			.parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw },
1389 			.num_parents = 1,
1390 			.ops = &clk_branch2_ops,
1391 			.flags = CLK_SET_RATE_PARENT,
1392 		},
1393 	},
1394 };
1395 
1396 static struct clk_branch mdss_mdp_clk = {
1397 	.halt_reg = 0x231c,
1398 	.clkr = {
1399 		.enable_reg = 0x231c,
1400 		.enable_mask = BIT(0),
1401 		.hw.init = &(struct clk_init_data){
1402 			.name = "mdss_mdp_clk",
1403 			.parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },
1404 			.num_parents = 1,
1405 			.ops = &clk_branch2_ops,
1406 			.flags = CLK_SET_RATE_PARENT,
1407 		},
1408 	},
1409 };
1410 
1411 static struct clk_branch mdss_mdp_lut_clk = {
1412 	.halt_reg = 0x2320,
1413 	.clkr = {
1414 		.enable_reg = 0x2320,
1415 		.enable_mask = BIT(0),
1416 		.hw.init = &(struct clk_init_data){
1417 			.name = "mdss_mdp_lut_clk",
1418 			.parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },
1419 			.num_parents = 1,
1420 			.ops = &clk_branch2_ops,
1421 			.flags = CLK_SET_RATE_PARENT,
1422 		},
1423 	},
1424 };
1425 
1426 static struct clk_branch mdss_extpclk_clk = {
1427 	.halt_reg = 0x2324,
1428 	.clkr = {
1429 		.enable_reg = 0x2324,
1430 		.enable_mask = BIT(0),
1431 		.hw.init = &(struct clk_init_data){
1432 			.name = "mdss_extpclk_clk",
1433 			.parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw },
1434 			.num_parents = 1,
1435 			.ops = &clk_branch2_ops,
1436 			.flags = CLK_SET_RATE_PARENT,
1437 		},
1438 	},
1439 };
1440 
1441 static struct clk_branch mdss_vsync_clk = {
1442 	.halt_reg = 0x2328,
1443 	.clkr = {
1444 		.enable_reg = 0x2328,
1445 		.enable_mask = BIT(0),
1446 		.hw.init = &(struct clk_init_data){
1447 			.name = "mdss_vsync_clk",
1448 			.parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw },
1449 			.num_parents = 1,
1450 			.ops = &clk_branch2_ops,
1451 			.flags = CLK_SET_RATE_PARENT,
1452 		},
1453 	},
1454 };
1455 
1456 static struct clk_branch mdss_hdmi_clk = {
1457 	.halt_reg = 0x2338,
1458 	.clkr = {
1459 		.enable_reg = 0x2338,
1460 		.enable_mask = BIT(0),
1461 		.hw.init = &(struct clk_init_data){
1462 			.name = "mdss_hdmi_clk",
1463 			.parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw },
1464 			.num_parents = 1,
1465 			.ops = &clk_branch2_ops,
1466 			.flags = CLK_SET_RATE_PARENT,
1467 		},
1468 	},
1469 };
1470 
1471 static struct clk_branch mdss_byte0_clk = {
1472 	.halt_reg = 0x233c,
1473 	.clkr = {
1474 		.enable_reg = 0x233c,
1475 		.enable_mask = BIT(0),
1476 		.hw.init = &(struct clk_init_data){
1477 			.name = "mdss_byte0_clk",
1478 			.parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },
1479 			.num_parents = 1,
1480 			.ops = &clk_branch2_ops,
1481 			.flags = CLK_SET_RATE_PARENT,
1482 		},
1483 	},
1484 };
1485 
1486 static struct clk_branch mdss_byte1_clk = {
1487 	.halt_reg = 0x2340,
1488 	.clkr = {
1489 		.enable_reg = 0x2340,
1490 		.enable_mask = BIT(0),
1491 		.hw.init = &(struct clk_init_data){
1492 			.name = "mdss_byte1_clk",
1493 			.parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },
1494 			.num_parents = 1,
1495 			.ops = &clk_branch2_ops,
1496 			.flags = CLK_SET_RATE_PARENT,
1497 		},
1498 	},
1499 };
1500 
1501 static struct clk_branch mdss_esc0_clk = {
1502 	.halt_reg = 0x2344,
1503 	.clkr = {
1504 		.enable_reg = 0x2344,
1505 		.enable_mask = BIT(0),
1506 		.hw.init = &(struct clk_init_data){
1507 			.name = "mdss_esc0_clk",
1508 			.parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw },
1509 			.num_parents = 1,
1510 			.ops = &clk_branch2_ops,
1511 			.flags = CLK_SET_RATE_PARENT,
1512 		},
1513 	},
1514 };
1515 
1516 static struct clk_branch mdss_esc1_clk = {
1517 	.halt_reg = 0x2348,
1518 	.clkr = {
1519 		.enable_reg = 0x2348,
1520 		.enable_mask = BIT(0),
1521 		.hw.init = &(struct clk_init_data){
1522 			.name = "mdss_esc1_clk",
1523 			.parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw },
1524 			.num_parents = 1,
1525 			.ops = &clk_branch2_ops,
1526 			.flags = CLK_SET_RATE_PARENT,
1527 		},
1528 	},
1529 };
1530 
1531 static struct clk_branch mdss_rot_clk = {
1532 	.halt_reg = 0x2350,
1533 	.clkr = {
1534 		.enable_reg = 0x2350,
1535 		.enable_mask = BIT(0),
1536 		.hw.init = &(struct clk_init_data){
1537 			.name = "mdss_rot_clk",
1538 			.parent_hws = (const struct clk_hw *[]){ &rot_clk_src.clkr.hw },
1539 			.num_parents = 1,
1540 			.ops = &clk_branch2_ops,
1541 			.flags = CLK_SET_RATE_PARENT,
1542 		},
1543 	},
1544 };
1545 
1546 static struct clk_branch mdss_dp_link_clk = {
1547 	.halt_reg = 0x2354,
1548 	.clkr = {
1549 		.enable_reg = 0x2354,
1550 		.enable_mask = BIT(0),
1551 		.hw.init = &(struct clk_init_data){
1552 			.name = "mdss_dp_link_clk",
1553 			.parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw },
1554 			.num_parents = 1,
1555 			.ops = &clk_branch2_ops,
1556 			.flags = CLK_SET_RATE_PARENT,
1557 		},
1558 	},
1559 };
1560 
1561 static struct clk_branch mdss_dp_link_intf_clk = {
1562 	.halt_reg = 0x2358,
1563 	.clkr = {
1564 		.enable_reg = 0x2358,
1565 		.enable_mask = BIT(0),
1566 		.hw.init = &(struct clk_init_data){
1567 			.name = "mdss_dp_link_intf_clk",
1568 			.parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw },
1569 			.num_parents = 1,
1570 			.ops = &clk_branch2_ops,
1571 			.flags = CLK_SET_RATE_PARENT,
1572 		},
1573 	},
1574 };
1575 
1576 static struct clk_branch mdss_dp_crypto_clk = {
1577 	.halt_reg = 0x235c,
1578 	.clkr = {
1579 		.enable_reg = 0x235c,
1580 		.enable_mask = BIT(0),
1581 		.hw.init = &(struct clk_init_data){
1582 			.name = "mdss_dp_crypto_clk",
1583 			.parent_hws = (const struct clk_hw *[]){ &dp_crypto_clk_src.clkr.hw },
1584 			.num_parents = 1,
1585 			.ops = &clk_branch2_ops,
1586 			.flags = CLK_SET_RATE_PARENT,
1587 		},
1588 	},
1589 };
1590 
1591 static struct clk_branch mdss_dp_pixel_clk = {
1592 	.halt_reg = 0x2360,
1593 	.clkr = {
1594 		.enable_reg = 0x2360,
1595 		.enable_mask = BIT(0),
1596 		.hw.init = &(struct clk_init_data){
1597 			.name = "mdss_dp_pixel_clk",
1598 			.parent_hws = (const struct clk_hw *[]){ &dp_pixel_clk_src.clkr.hw },
1599 			.num_parents = 1,
1600 			.ops = &clk_branch2_ops,
1601 			.flags = CLK_SET_RATE_PARENT,
1602 		},
1603 	},
1604 };
1605 
1606 static struct clk_branch mdss_dp_aux_clk = {
1607 	.halt_reg = 0x2364,
1608 	.clkr = {
1609 		.enable_reg = 0x2364,
1610 		.enable_mask = BIT(0),
1611 		.hw.init = &(struct clk_init_data){
1612 			.name = "mdss_dp_aux_clk",
1613 			.parent_hws = (const struct clk_hw *[]){ &dp_aux_clk_src.clkr.hw },
1614 			.num_parents = 1,
1615 			.ops = &clk_branch2_ops,
1616 			.flags = CLK_SET_RATE_PARENT,
1617 		},
1618 	},
1619 };
1620 
1621 static struct clk_branch mdss_byte0_intf_clk = {
1622 	.halt_reg = 0x2374,
1623 	.clkr = {
1624 		.enable_reg = 0x2374,
1625 		.enable_mask = BIT(0),
1626 		.hw.init = &(struct clk_init_data){
1627 			.name = "mdss_byte0_intf_clk",
1628 			.parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },
1629 			.num_parents = 1,
1630 			.ops = &clk_branch2_ops,
1631 			.flags = CLK_SET_RATE_PARENT,
1632 		},
1633 	},
1634 };
1635 
1636 static struct clk_branch mdss_byte1_intf_clk = {
1637 	.halt_reg = 0x2378,
1638 	.clkr = {
1639 		.enable_reg = 0x2378,
1640 		.enable_mask = BIT(0),
1641 		.hw.init = &(struct clk_init_data){
1642 			.name = "mdss_byte1_intf_clk",
1643 			.parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },
1644 			.num_parents = 1,
1645 			.ops = &clk_branch2_ops,
1646 			.flags = CLK_SET_RATE_PARENT,
1647 		},
1648 	},
1649 };
1650 
1651 static struct clk_branch camss_csi0phytimer_clk = {
1652 	.halt_reg = 0x3024,
1653 	.clkr = {
1654 		.enable_reg = 0x3024,
1655 		.enable_mask = BIT(0),
1656 		.hw.init = &(struct clk_init_data){
1657 			.name = "camss_csi0phytimer_clk",
1658 			.parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw },
1659 			.num_parents = 1,
1660 			.ops = &clk_branch2_ops,
1661 			.flags = CLK_SET_RATE_PARENT,
1662 		},
1663 	},
1664 };
1665 
1666 static struct clk_branch camss_csi1phytimer_clk = {
1667 	.halt_reg = 0x3054,
1668 	.clkr = {
1669 		.enable_reg = 0x3054,
1670 		.enable_mask = BIT(0),
1671 		.hw.init = &(struct clk_init_data){
1672 			.name = "camss_csi1phytimer_clk",
1673 			.parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw },
1674 			.num_parents = 1,
1675 			.ops = &clk_branch2_ops,
1676 			.flags = CLK_SET_RATE_PARENT,
1677 		},
1678 	},
1679 };
1680 
1681 static struct clk_branch camss_csi2phytimer_clk = {
1682 	.halt_reg = 0x3084,
1683 	.clkr = {
1684 		.enable_reg = 0x3084,
1685 		.enable_mask = BIT(0),
1686 		.hw.init = &(struct clk_init_data){
1687 			.name = "camss_csi2phytimer_clk",
1688 			.parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw },
1689 			.num_parents = 1,
1690 			.ops = &clk_branch2_ops,
1691 			.flags = CLK_SET_RATE_PARENT,
1692 		},
1693 	},
1694 };
1695 
1696 static struct clk_branch camss_csi0_clk = {
1697 	.halt_reg = 0x30b4,
1698 	.clkr = {
1699 		.enable_reg = 0x30b4,
1700 		.enable_mask = BIT(0),
1701 		.hw.init = &(struct clk_init_data){
1702 			.name = "camss_csi0_clk",
1703 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1704 			.num_parents = 1,
1705 			.ops = &clk_branch2_ops,
1706 			.flags = CLK_SET_RATE_PARENT,
1707 		},
1708 	},
1709 };
1710 
1711 static struct clk_branch camss_csi0_ahb_clk = {
1712 	.halt_reg = 0x30bc,
1713 	.clkr = {
1714 		.enable_reg = 0x30bc,
1715 		.enable_mask = BIT(0),
1716 		.hw.init = &(struct clk_init_data){
1717 			.name = "camss_csi0_ahb_clk",
1718 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1719 			.num_parents = 1,
1720 			.ops = &clk_branch2_ops,
1721 			.flags = CLK_SET_RATE_PARENT,
1722 		},
1723 	},
1724 };
1725 
1726 static struct clk_branch camss_csi0rdi_clk = {
1727 	.halt_reg = 0x30d4,
1728 	.clkr = {
1729 		.enable_reg = 0x30d4,
1730 		.enable_mask = BIT(0),
1731 		.hw.init = &(struct clk_init_data){
1732 			.name = "camss_csi0rdi_clk",
1733 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1734 			.num_parents = 1,
1735 			.ops = &clk_branch2_ops,
1736 			.flags = CLK_SET_RATE_PARENT,
1737 		},
1738 	},
1739 };
1740 
1741 static struct clk_branch camss_csi0pix_clk = {
1742 	.halt_reg = 0x30e4,
1743 	.clkr = {
1744 		.enable_reg = 0x30e4,
1745 		.enable_mask = BIT(0),
1746 		.hw.init = &(struct clk_init_data){
1747 			.name = "camss_csi0pix_clk",
1748 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1749 			.num_parents = 1,
1750 			.ops = &clk_branch2_ops,
1751 			.flags = CLK_SET_RATE_PARENT,
1752 		},
1753 	},
1754 };
1755 
1756 static struct clk_branch camss_csi1_clk = {
1757 	.halt_reg = 0x3124,
1758 	.clkr = {
1759 		.enable_reg = 0x3124,
1760 		.enable_mask = BIT(0),
1761 		.hw.init = &(struct clk_init_data){
1762 			.name = "camss_csi1_clk",
1763 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1764 			.num_parents = 1,
1765 			.ops = &clk_branch2_ops,
1766 			.flags = CLK_SET_RATE_PARENT,
1767 		},
1768 	},
1769 };
1770 
1771 static struct clk_branch camss_csi1_ahb_clk = {
1772 	.halt_reg = 0x3128,
1773 	.clkr = {
1774 		.enable_reg = 0x3128,
1775 		.enable_mask = BIT(0),
1776 		.hw.init = &(struct clk_init_data){
1777 			.name = "camss_csi1_ahb_clk",
1778 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1779 			.num_parents = 1,
1780 			.ops = &clk_branch2_ops,
1781 			.flags = CLK_SET_RATE_PARENT,
1782 		},
1783 	},
1784 };
1785 
1786 static struct clk_branch camss_csi1rdi_clk = {
1787 	.halt_reg = 0x3144,
1788 	.clkr = {
1789 		.enable_reg = 0x3144,
1790 		.enable_mask = BIT(0),
1791 		.hw.init = &(struct clk_init_data){
1792 			.name = "camss_csi1rdi_clk",
1793 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1794 			.num_parents = 1,
1795 			.ops = &clk_branch2_ops,
1796 			.flags = CLK_SET_RATE_PARENT,
1797 		},
1798 	},
1799 };
1800 
1801 static struct clk_branch camss_csi1pix_clk = {
1802 	.halt_reg = 0x3154,
1803 	.clkr = {
1804 		.enable_reg = 0x3154,
1805 		.enable_mask = BIT(0),
1806 		.hw.init = &(struct clk_init_data){
1807 			.name = "camss_csi1pix_clk",
1808 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1809 			.num_parents = 1,
1810 			.ops = &clk_branch2_ops,
1811 			.flags = CLK_SET_RATE_PARENT,
1812 		},
1813 	},
1814 };
1815 
1816 static struct clk_branch camss_csi2_clk = {
1817 	.halt_reg = 0x3184,
1818 	.clkr = {
1819 		.enable_reg = 0x3184,
1820 		.enable_mask = BIT(0),
1821 		.hw.init = &(struct clk_init_data){
1822 			.name = "camss_csi2_clk",
1823 			.parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1824 			.num_parents = 1,
1825 			.ops = &clk_branch2_ops,
1826 			.flags = CLK_SET_RATE_PARENT,
1827 		},
1828 	},
1829 };
1830 
1831 static struct clk_branch camss_csi2_ahb_clk = {
1832 	.halt_reg = 0x3188,
1833 	.clkr = {
1834 		.enable_reg = 0x3188,
1835 		.enable_mask = BIT(0),
1836 		.hw.init = &(struct clk_init_data){
1837 			.name = "camss_csi2_ahb_clk",
1838 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1839 			.num_parents = 1,
1840 			.ops = &clk_branch2_ops,
1841 			.flags = CLK_SET_RATE_PARENT,
1842 		},
1843 	},
1844 };
1845 
1846 static struct clk_branch camss_csi2rdi_clk = {
1847 	.halt_reg = 0x31a4,
1848 	.clkr = {
1849 		.enable_reg = 0x31a4,
1850 		.enable_mask = BIT(0),
1851 		.hw.init = &(struct clk_init_data){
1852 			.name = "camss_csi2rdi_clk",
1853 			.parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1854 			.num_parents = 1,
1855 			.ops = &clk_branch2_ops,
1856 			.flags = CLK_SET_RATE_PARENT,
1857 		},
1858 	},
1859 };
1860 
1861 static struct clk_branch camss_csi2pix_clk = {
1862 	.halt_reg = 0x31b4,
1863 	.clkr = {
1864 		.enable_reg = 0x31b4,
1865 		.enable_mask = BIT(0),
1866 		.hw.init = &(struct clk_init_data){
1867 			.name = "camss_csi2pix_clk",
1868 			.parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1869 			.num_parents = 1,
1870 			.ops = &clk_branch2_ops,
1871 			.flags = CLK_SET_RATE_PARENT,
1872 		},
1873 	},
1874 };
1875 
1876 static struct clk_branch camss_csi3_clk = {
1877 	.halt_reg = 0x31e4,
1878 	.clkr = {
1879 		.enable_reg = 0x31e4,
1880 		.enable_mask = BIT(0),
1881 		.hw.init = &(struct clk_init_data){
1882 			.name = "camss_csi3_clk",
1883 			.parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1884 			.num_parents = 1,
1885 			.ops = &clk_branch2_ops,
1886 			.flags = CLK_SET_RATE_PARENT,
1887 		},
1888 	},
1889 };
1890 
1891 static struct clk_branch camss_csi3_ahb_clk = {
1892 	.halt_reg = 0x31e8,
1893 	.clkr = {
1894 		.enable_reg = 0x31e8,
1895 		.enable_mask = BIT(0),
1896 		.hw.init = &(struct clk_init_data){
1897 			.name = "camss_csi3_ahb_clk",
1898 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1899 			.num_parents = 1,
1900 			.ops = &clk_branch2_ops,
1901 			.flags = CLK_SET_RATE_PARENT,
1902 		},
1903 	},
1904 };
1905 
1906 static struct clk_branch camss_csi3rdi_clk = {
1907 	.halt_reg = 0x3204,
1908 	.clkr = {
1909 		.enable_reg = 0x3204,
1910 		.enable_mask = BIT(0),
1911 		.hw.init = &(struct clk_init_data){
1912 			.name = "camss_csi3rdi_clk",
1913 			.parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1914 			.num_parents = 1,
1915 			.ops = &clk_branch2_ops,
1916 			.flags = CLK_SET_RATE_PARENT,
1917 		},
1918 	},
1919 };
1920 
1921 static struct clk_branch camss_csi3pix_clk = {
1922 	.halt_reg = 0x3214,
1923 	.clkr = {
1924 		.enable_reg = 0x3214,
1925 		.enable_mask = BIT(0),
1926 		.hw.init = &(struct clk_init_data){
1927 			.name = "camss_csi3pix_clk",
1928 			.parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1929 			.num_parents = 1,
1930 			.ops = &clk_branch2_ops,
1931 			.flags = CLK_SET_RATE_PARENT,
1932 		},
1933 	},
1934 };
1935 
1936 static struct clk_branch camss_ispif_ahb_clk = {
1937 	.halt_reg = 0x3224,
1938 	.clkr = {
1939 		.enable_reg = 0x3224,
1940 		.enable_mask = BIT(0),
1941 		.hw.init = &(struct clk_init_data){
1942 			.name = "camss_ispif_ahb_clk",
1943 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1944 			.num_parents = 1,
1945 			.ops = &clk_branch2_ops,
1946 			.flags = CLK_SET_RATE_PARENT,
1947 		},
1948 	},
1949 };
1950 
1951 static struct clk_branch camss_cci_clk = {
1952 	.halt_reg = 0x3344,
1953 	.clkr = {
1954 		.enable_reg = 0x3344,
1955 		.enable_mask = BIT(0),
1956 		.hw.init = &(struct clk_init_data){
1957 			.name = "camss_cci_clk",
1958 			.parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw },
1959 			.num_parents = 1,
1960 			.ops = &clk_branch2_ops,
1961 			.flags = CLK_SET_RATE_PARENT,
1962 		},
1963 	},
1964 };
1965 
1966 static struct clk_branch camss_cci_ahb_clk = {
1967 	.halt_reg = 0x3348,
1968 	.clkr = {
1969 		.enable_reg = 0x3348,
1970 		.enable_mask = BIT(0),
1971 		.hw.init = &(struct clk_init_data){
1972 			.name = "camss_cci_ahb_clk",
1973 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1974 			.num_parents = 1,
1975 			.ops = &clk_branch2_ops,
1976 			.flags = CLK_SET_RATE_PARENT,
1977 		},
1978 	},
1979 };
1980 
1981 static struct clk_branch camss_mclk0_clk = {
1982 	.halt_reg = 0x3384,
1983 	.clkr = {
1984 		.enable_reg = 0x3384,
1985 		.enable_mask = BIT(0),
1986 		.hw.init = &(struct clk_init_data){
1987 			.name = "camss_mclk0_clk",
1988 			.parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw },
1989 			.num_parents = 1,
1990 			.ops = &clk_branch2_ops,
1991 			.flags = CLK_SET_RATE_PARENT,
1992 		},
1993 	},
1994 };
1995 
1996 static struct clk_branch camss_mclk1_clk = {
1997 	.halt_reg = 0x33b4,
1998 	.clkr = {
1999 		.enable_reg = 0x33b4,
2000 		.enable_mask = BIT(0),
2001 		.hw.init = &(struct clk_init_data){
2002 			.name = "camss_mclk1_clk",
2003 			.parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw },
2004 			.num_parents = 1,
2005 			.ops = &clk_branch2_ops,
2006 			.flags = CLK_SET_RATE_PARENT,
2007 		},
2008 	},
2009 };
2010 
2011 static struct clk_branch camss_mclk2_clk = {
2012 	.halt_reg = 0x33e4,
2013 	.clkr = {
2014 		.enable_reg = 0x33e4,
2015 		.enable_mask = BIT(0),
2016 		.hw.init = &(struct clk_init_data){
2017 			.name = "camss_mclk2_clk",
2018 			.parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw },
2019 			.num_parents = 1,
2020 			.ops = &clk_branch2_ops,
2021 			.flags = CLK_SET_RATE_PARENT,
2022 		},
2023 	},
2024 };
2025 
2026 static struct clk_branch camss_mclk3_clk = {
2027 	.halt_reg = 0x3414,
2028 	.clkr = {
2029 		.enable_reg = 0x3414,
2030 		.enable_mask = BIT(0),
2031 		.hw.init = &(struct clk_init_data){
2032 			.name = "camss_mclk3_clk",
2033 			.parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw },
2034 			.num_parents = 1,
2035 			.ops = &clk_branch2_ops,
2036 			.flags = CLK_SET_RATE_PARENT,
2037 		},
2038 	},
2039 };
2040 
2041 static struct clk_branch camss_top_ahb_clk = {
2042 	.halt_reg = 0x3484,
2043 	.clkr = {
2044 		.enable_reg = 0x3484,
2045 		.enable_mask = BIT(0),
2046 		.hw.init = &(struct clk_init_data){
2047 			.name = "camss_top_ahb_clk",
2048 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2049 			.num_parents = 1,
2050 			.ops = &clk_branch2_ops,
2051 			.flags = CLK_SET_RATE_PARENT,
2052 		},
2053 	},
2054 };
2055 
2056 static struct clk_branch camss_ahb_clk = {
2057 	.halt_reg = 0x348c,
2058 	.clkr = {
2059 		.enable_reg = 0x348c,
2060 		.enable_mask = BIT(0),
2061 		.hw.init = &(struct clk_init_data){
2062 			.name = "camss_ahb_clk",
2063 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2064 			.num_parents = 1,
2065 			.ops = &clk_branch2_ops,
2066 			.flags = CLK_SET_RATE_PARENT,
2067 		},
2068 	},
2069 };
2070 
2071 static struct clk_branch camss_micro_ahb_clk = {
2072 	.halt_reg = 0x3494,
2073 	.clkr = {
2074 		.enable_reg = 0x3494,
2075 		.enable_mask = BIT(0),
2076 		.hw.init = &(struct clk_init_data){
2077 			.name = "camss_micro_ahb_clk",
2078 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2079 			.num_parents = 1,
2080 			.ops = &clk_branch2_ops,
2081 			.flags = CLK_SET_RATE_PARENT,
2082 		},
2083 	},
2084 };
2085 
2086 static struct clk_branch camss_jpeg0_clk = {
2087 	.halt_reg = 0x35a8,
2088 	.clkr = {
2089 		.enable_reg = 0x35a8,
2090 		.enable_mask = BIT(0),
2091 		.hw.init = &(struct clk_init_data){
2092 			.name = "camss_jpeg0_clk",
2093 			.parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw },
2094 			.num_parents = 1,
2095 			.ops = &clk_branch2_ops,
2096 			.flags = CLK_SET_RATE_PARENT,
2097 		},
2098 	},
2099 };
2100 
2101 static struct clk_branch camss_jpeg_ahb_clk = {
2102 	.halt_reg = 0x35b4,
2103 	.clkr = {
2104 		.enable_reg = 0x35b4,
2105 		.enable_mask = BIT(0),
2106 		.hw.init = &(struct clk_init_data){
2107 			.name = "camss_jpeg_ahb_clk",
2108 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2109 			.num_parents = 1,
2110 			.ops = &clk_branch2_ops,
2111 			.flags = CLK_SET_RATE_PARENT,
2112 		},
2113 	},
2114 };
2115 
2116 static struct clk_branch camss_jpeg_axi_clk = {
2117 	.halt_reg = 0x35b8,
2118 	.clkr = {
2119 		.enable_reg = 0x35b8,
2120 		.enable_mask = BIT(0),
2121 		.hw.init = &(struct clk_init_data){
2122 			.name = "camss_jpeg_axi_clk",
2123 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2124 			.num_parents = 1,
2125 			.ops = &clk_branch2_ops,
2126 		},
2127 	},
2128 };
2129 
2130 static struct clk_branch camss_vfe0_ahb_clk = {
2131 	.halt_reg = 0x3668,
2132 	.clkr = {
2133 		.enable_reg = 0x3668,
2134 		.enable_mask = BIT(0),
2135 		.hw.init = &(struct clk_init_data){
2136 			.name = "camss_vfe0_ahb_clk",
2137 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2138 			.num_parents = 1,
2139 			.ops = &clk_branch2_ops,
2140 			.flags = CLK_SET_RATE_PARENT,
2141 		},
2142 	},
2143 };
2144 
2145 static struct clk_branch camss_vfe1_ahb_clk = {
2146 	.halt_reg = 0x3678,
2147 	.clkr = {
2148 		.enable_reg = 0x3678,
2149 		.enable_mask = BIT(0),
2150 		.hw.init = &(struct clk_init_data){
2151 			.name = "camss_vfe1_ahb_clk",
2152 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2153 			.num_parents = 1,
2154 			.ops = &clk_branch2_ops,
2155 			.flags = CLK_SET_RATE_PARENT,
2156 		},
2157 	},
2158 };
2159 
2160 static struct clk_branch camss_vfe0_clk = {
2161 	.halt_reg = 0x36a8,
2162 	.clkr = {
2163 		.enable_reg = 0x36a8,
2164 		.enable_mask = BIT(0),
2165 		.hw.init = &(struct clk_init_data){
2166 			.name = "camss_vfe0_clk",
2167 			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2168 			.num_parents = 1,
2169 			.ops = &clk_branch2_ops,
2170 			.flags = CLK_SET_RATE_PARENT,
2171 		},
2172 	},
2173 };
2174 
2175 static struct clk_branch camss_vfe1_clk = {
2176 	.halt_reg = 0x36ac,
2177 	.clkr = {
2178 		.enable_reg = 0x36ac,
2179 		.enable_mask = BIT(0),
2180 		.hw.init = &(struct clk_init_data){
2181 			.name = "camss_vfe1_clk",
2182 			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2183 			.num_parents = 1,
2184 			.ops = &clk_branch2_ops,
2185 			.flags = CLK_SET_RATE_PARENT,
2186 		},
2187 	},
2188 };
2189 
2190 static struct clk_branch camss_cpp_clk = {
2191 	.halt_reg = 0x36b0,
2192 	.clkr = {
2193 		.enable_reg = 0x36b0,
2194 		.enable_mask = BIT(0),
2195 		.hw.init = &(struct clk_init_data){
2196 			.name = "camss_cpp_clk",
2197 			.parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw },
2198 			.num_parents = 1,
2199 			.ops = &clk_branch2_ops,
2200 			.flags = CLK_SET_RATE_PARENT,
2201 		},
2202 	},
2203 };
2204 
2205 static struct clk_branch camss_cpp_ahb_clk = {
2206 	.halt_reg = 0x36b4,
2207 	.clkr = {
2208 		.enable_reg = 0x36b4,
2209 		.enable_mask = BIT(0),
2210 		.hw.init = &(struct clk_init_data){
2211 			.name = "camss_cpp_ahb_clk",
2212 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2213 			.num_parents = 1,
2214 			.ops = &clk_branch2_ops,
2215 			.flags = CLK_SET_RATE_PARENT,
2216 		},
2217 	},
2218 };
2219 
2220 static struct clk_branch camss_vfe_vbif_ahb_clk = {
2221 	.halt_reg = 0x36b8,
2222 	.clkr = {
2223 		.enable_reg = 0x36b8,
2224 		.enable_mask = BIT(0),
2225 		.hw.init = &(struct clk_init_data){
2226 			.name = "camss_vfe_vbif_ahb_clk",
2227 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2228 			.num_parents = 1,
2229 			.ops = &clk_branch2_ops,
2230 			.flags = CLK_SET_RATE_PARENT,
2231 		},
2232 	},
2233 };
2234 
2235 static struct clk_branch camss_vfe_vbif_axi_clk = {
2236 	.halt_reg = 0x36bc,
2237 	.clkr = {
2238 		.enable_reg = 0x36bc,
2239 		.enable_mask = BIT(0),
2240 		.hw.init = &(struct clk_init_data){
2241 			.name = "camss_vfe_vbif_axi_clk",
2242 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2243 			.num_parents = 1,
2244 			.ops = &clk_branch2_ops,
2245 		},
2246 	},
2247 };
2248 
2249 static struct clk_branch camss_cpp_axi_clk = {
2250 	.halt_reg = 0x36c4,
2251 	.clkr = {
2252 		.enable_reg = 0x36c4,
2253 		.enable_mask = BIT(0),
2254 		.hw.init = &(struct clk_init_data){
2255 			.name = "camss_cpp_axi_clk",
2256 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2257 			.num_parents = 1,
2258 			.ops = &clk_branch2_ops,
2259 		},
2260 	},
2261 };
2262 
2263 static struct clk_branch camss_cpp_vbif_ahb_clk = {
2264 	.halt_reg = 0x36c8,
2265 	.clkr = {
2266 		.enable_reg = 0x36c8,
2267 		.enable_mask = BIT(0),
2268 		.hw.init = &(struct clk_init_data){
2269 			.name = "camss_cpp_vbif_ahb_clk",
2270 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2271 			.num_parents = 1,
2272 			.ops = &clk_branch2_ops,
2273 			.flags = CLK_SET_RATE_PARENT,
2274 		},
2275 	},
2276 };
2277 
2278 static struct clk_branch camss_csi_vfe0_clk = {
2279 	.halt_reg = 0x3704,
2280 	.clkr = {
2281 		.enable_reg = 0x3704,
2282 		.enable_mask = BIT(0),
2283 		.hw.init = &(struct clk_init_data){
2284 			.name = "camss_csi_vfe0_clk",
2285 			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2286 			.num_parents = 1,
2287 			.ops = &clk_branch2_ops,
2288 			.flags = CLK_SET_RATE_PARENT,
2289 		},
2290 	},
2291 };
2292 
2293 static struct clk_branch camss_csi_vfe1_clk = {
2294 	.halt_reg = 0x3714,
2295 	.clkr = {
2296 		.enable_reg = 0x3714,
2297 		.enable_mask = BIT(0),
2298 		.hw.init = &(struct clk_init_data){
2299 			.name = "camss_csi_vfe1_clk",
2300 			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2301 			.num_parents = 1,
2302 			.ops = &clk_branch2_ops,
2303 			.flags = CLK_SET_RATE_PARENT,
2304 		},
2305 	},
2306 };
2307 
2308 static struct clk_branch camss_vfe0_stream_clk = {
2309 	.halt_reg = 0x3720,
2310 	.clkr = {
2311 		.enable_reg = 0x3720,
2312 		.enable_mask = BIT(0),
2313 		.hw.init = &(struct clk_init_data){
2314 			.name = "camss_vfe0_stream_clk",
2315 			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2316 			.num_parents = 1,
2317 			.ops = &clk_branch2_ops,
2318 			.flags = CLK_SET_RATE_PARENT,
2319 		},
2320 	},
2321 };
2322 
2323 static struct clk_branch camss_vfe1_stream_clk = {
2324 	.halt_reg = 0x3724,
2325 	.clkr = {
2326 		.enable_reg = 0x3724,
2327 		.enable_mask = BIT(0),
2328 		.hw.init = &(struct clk_init_data){
2329 			.name = "camss_vfe1_stream_clk",
2330 			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2331 			.num_parents = 1,
2332 			.ops = &clk_branch2_ops,
2333 			.flags = CLK_SET_RATE_PARENT,
2334 		},
2335 	},
2336 };
2337 
2338 static struct clk_branch camss_cphy_csid0_clk = {
2339 	.halt_reg = 0x3730,
2340 	.clkr = {
2341 		.enable_reg = 0x3730,
2342 		.enable_mask = BIT(0),
2343 		.hw.init = &(struct clk_init_data){
2344 			.name = "camss_cphy_csid0_clk",
2345 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2346 			.num_parents = 1,
2347 			.ops = &clk_branch2_ops,
2348 			.flags = CLK_SET_RATE_PARENT,
2349 		},
2350 	},
2351 };
2352 
2353 static struct clk_branch camss_cphy_csid1_clk = {
2354 	.halt_reg = 0x3734,
2355 	.clkr = {
2356 		.enable_reg = 0x3734,
2357 		.enable_mask = BIT(0),
2358 		.hw.init = &(struct clk_init_data){
2359 			.name = "camss_cphy_csid1_clk",
2360 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2361 			.num_parents = 1,
2362 			.ops = &clk_branch2_ops,
2363 			.flags = CLK_SET_RATE_PARENT,
2364 		},
2365 	},
2366 };
2367 
2368 static struct clk_branch camss_cphy_csid2_clk = {
2369 	.halt_reg = 0x3738,
2370 	.clkr = {
2371 		.enable_reg = 0x3738,
2372 		.enable_mask = BIT(0),
2373 		.hw.init = &(struct clk_init_data){
2374 			.name = "camss_cphy_csid2_clk",
2375 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2376 			.num_parents = 1,
2377 			.ops = &clk_branch2_ops,
2378 			.flags = CLK_SET_RATE_PARENT,
2379 		},
2380 	},
2381 };
2382 
2383 static struct clk_branch camss_cphy_csid3_clk = {
2384 	.halt_reg = 0x373c,
2385 	.clkr = {
2386 		.enable_reg = 0x373c,
2387 		.enable_mask = BIT(0),
2388 		.hw.init = &(struct clk_init_data){
2389 			.name = "camss_cphy_csid3_clk",
2390 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2391 			.num_parents = 1,
2392 			.ops = &clk_branch2_ops,
2393 			.flags = CLK_SET_RATE_PARENT,
2394 		},
2395 	},
2396 };
2397 
2398 static struct clk_branch camss_csiphy0_clk = {
2399 	.halt_reg = 0x3740,
2400 	.clkr = {
2401 		.enable_reg = 0x3740,
2402 		.enable_mask = BIT(0),
2403 		.hw.init = &(struct clk_init_data){
2404 			.name = "camss_csiphy0_clk",
2405 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2406 			.num_parents = 1,
2407 			.ops = &clk_branch2_ops,
2408 			.flags = CLK_SET_RATE_PARENT,
2409 		},
2410 	},
2411 };
2412 
2413 static struct clk_branch camss_csiphy1_clk = {
2414 	.halt_reg = 0x3744,
2415 	.clkr = {
2416 		.enable_reg = 0x3744,
2417 		.enable_mask = BIT(0),
2418 		.hw.init = &(struct clk_init_data){
2419 			.name = "camss_csiphy1_clk",
2420 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2421 			.num_parents = 1,
2422 			.ops = &clk_branch2_ops,
2423 			.flags = CLK_SET_RATE_PARENT,
2424 		},
2425 	},
2426 };
2427 
2428 static struct clk_branch camss_csiphy2_clk = {
2429 	.halt_reg = 0x3748,
2430 	.clkr = {
2431 		.enable_reg = 0x3748,
2432 		.enable_mask = BIT(0),
2433 		.hw.init = &(struct clk_init_data){
2434 			.name = "camss_csiphy2_clk",
2435 			.parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2436 			.num_parents = 1,
2437 			.ops = &clk_branch2_ops,
2438 			.flags = CLK_SET_RATE_PARENT,
2439 		},
2440 	},
2441 };
2442 
2443 static struct clk_branch fd_core_clk = {
2444 	.halt_reg = 0x3b68,
2445 	.clkr = {
2446 		.enable_reg = 0x3b68,
2447 		.enable_mask = BIT(0),
2448 		.hw.init = &(struct clk_init_data){
2449 			.name = "fd_core_clk",
2450 			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
2451 			.num_parents = 1,
2452 			.ops = &clk_branch2_ops,
2453 			.flags = CLK_SET_RATE_PARENT,
2454 		},
2455 	},
2456 };
2457 
2458 static struct clk_branch fd_core_uar_clk = {
2459 	.halt_reg = 0x3b6c,
2460 	.clkr = {
2461 		.enable_reg = 0x3b6c,
2462 		.enable_mask = BIT(0),
2463 		.hw.init = &(struct clk_init_data){
2464 			.name = "fd_core_uar_clk",
2465 			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
2466 			.num_parents = 1,
2467 			.ops = &clk_branch2_ops,
2468 			.flags = CLK_SET_RATE_PARENT,
2469 		},
2470 	},
2471 };
2472 
2473 static struct clk_branch fd_ahb_clk = {
2474 	.halt_reg = 0x3b74,
2475 	.clkr = {
2476 		.enable_reg = 0x3b74,
2477 		.enable_mask = BIT(0),
2478 		.hw.init = &(struct clk_init_data){
2479 			.name = "fd_ahb_clk",
2480 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2481 			.num_parents = 1,
2482 			.ops = &clk_branch2_ops,
2483 			.flags = CLK_SET_RATE_PARENT,
2484 		},
2485 	},
2486 };
2487 
2488 static struct clk_branch mnoc_ahb_clk = {
2489 	.halt_reg = 0x5024,
2490 	.clkr = {
2491 		.enable_reg = 0x5024,
2492 		.enable_mask = BIT(0),
2493 		.hw.init = &(struct clk_init_data){
2494 			.name = "mnoc_ahb_clk",
2495 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2496 			.num_parents = 1,
2497 			.ops = &clk_branch2_ops,
2498 			.flags = CLK_SET_RATE_PARENT,
2499 		},
2500 	},
2501 };
2502 
2503 static struct clk_branch bimc_smmu_ahb_clk = {
2504 	.halt_reg = 0xe004,
2505 	.hwcg_reg = 0xe004,
2506 	.hwcg_bit = 1,
2507 	.clkr = {
2508 		.enable_reg = 0xe004,
2509 		.enable_mask = BIT(0),
2510 		.hw.init = &(struct clk_init_data){
2511 			.name = "bimc_smmu_ahb_clk",
2512 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2513 			.num_parents = 1,
2514 			.ops = &clk_branch2_ops,
2515 			.flags = CLK_SET_RATE_PARENT,
2516 		},
2517 	},
2518 };
2519 
2520 static struct clk_branch bimc_smmu_axi_clk = {
2521 	.halt_reg = 0xe008,
2522 	.hwcg_reg = 0xe008,
2523 	.hwcg_bit = 1,
2524 	.clkr = {
2525 		.enable_reg = 0xe008,
2526 		.enable_mask = BIT(0),
2527 		.hw.init = &(struct clk_init_data){
2528 			.name = "bimc_smmu_axi_clk",
2529 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2530 			.num_parents = 1,
2531 			.ops = &clk_branch2_ops,
2532 		},
2533 	},
2534 };
2535 
2536 static struct clk_branch mnoc_maxi_clk = {
2537 	.halt_reg = 0xf004,
2538 	.clkr = {
2539 		.enable_reg = 0xf004,
2540 		.enable_mask = BIT(0),
2541 		.hw.init = &(struct clk_init_data){
2542 			.name = "mnoc_maxi_clk",
2543 			.parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
2544 			.num_parents = 1,
2545 			.ops = &clk_branch2_ops,
2546 			.flags = CLK_SET_RATE_PARENT,
2547 		},
2548 	},
2549 };
2550 
2551 static struct clk_branch vmem_maxi_clk = {
2552 	.halt_reg = 0xf064,
2553 	.clkr = {
2554 		.enable_reg = 0xf064,
2555 		.enable_mask = BIT(0),
2556 		.hw.init = &(struct clk_init_data){
2557 			.name = "vmem_maxi_clk",
2558 			.parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
2559 			.num_parents = 1,
2560 			.ops = &clk_branch2_ops,
2561 			.flags = CLK_SET_RATE_PARENT,
2562 		},
2563 	},
2564 };
2565 
2566 static struct clk_branch vmem_ahb_clk = {
2567 	.halt_reg = 0xf068,
2568 	.clkr = {
2569 		.enable_reg = 0xf068,
2570 		.enable_mask = BIT(0),
2571 		.hw.init = &(struct clk_init_data){
2572 			.name = "vmem_ahb_clk",
2573 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2574 			.num_parents = 1,
2575 			.ops = &clk_branch2_ops,
2576 			.flags = CLK_SET_RATE_PARENT,
2577 		},
2578 	},
2579 };
2580 
2581 static struct clk_hw *mmcc_msm8998_hws[] = {
2582 	&gpll0_div.hw,
2583 };
2584 
2585 static struct gdsc video_top_gdsc = {
2586 	.gdscr = 0x1024,
2587 	.pd = {
2588 		.name = "video_top",
2589 	},
2590 	.pwrsts = PWRSTS_OFF_ON,
2591 };
2592 
2593 static struct gdsc video_subcore0_gdsc = {
2594 	.gdscr = 0x1040,
2595 	.pd = {
2596 		.name = "video_subcore0",
2597 	},
2598 	.parent = &video_top_gdsc.pd,
2599 	.pwrsts = PWRSTS_OFF_ON,
2600 };
2601 
2602 static struct gdsc video_subcore1_gdsc = {
2603 	.gdscr = 0x1044,
2604 	.pd = {
2605 		.name = "video_subcore1",
2606 	},
2607 	.parent = &video_top_gdsc.pd,
2608 	.pwrsts = PWRSTS_OFF_ON,
2609 };
2610 
2611 static struct gdsc mdss_gdsc = {
2612 	.gdscr = 0x2304,
2613 	.cxcs = (unsigned int []){ 0x2310, 0x2350, 0x231c, 0x2320 },
2614 	.cxc_count = 4,
2615 	.pd = {
2616 		.name = "mdss",
2617 	},
2618 	.pwrsts = PWRSTS_OFF_ON,
2619 };
2620 
2621 static struct gdsc camss_top_gdsc = {
2622 	.gdscr = 0x34a0,
2623 	.cxcs = (unsigned int []){ 0x35b8, 0x36c4, 0x3704, 0x3714, 0x3494,
2624 				   0x35a8, 0x3868 },
2625 	.cxc_count = 7,
2626 	.pd = {
2627 		.name = "camss_top",
2628 	},
2629 	.pwrsts = PWRSTS_OFF_ON,
2630 };
2631 
2632 static struct gdsc camss_vfe0_gdsc = {
2633 	.gdscr = 0x3664,
2634 	.pd = {
2635 		.name = "camss_vfe0",
2636 	},
2637 	.parent = &camss_top_gdsc.pd,
2638 	.pwrsts = PWRSTS_OFF_ON,
2639 };
2640 
2641 static struct gdsc camss_vfe1_gdsc = {
2642 	.gdscr = 0x3674,
2643 	.pd = {
2644 		.name = "camss_vfe1_gdsc",
2645 	},
2646 	.parent = &camss_top_gdsc.pd,
2647 	.pwrsts = PWRSTS_OFF_ON,
2648 };
2649 
2650 static struct gdsc camss_cpp_gdsc = {
2651 	.gdscr = 0x36d4,
2652 	.pd = {
2653 		.name = "camss_cpp",
2654 	},
2655 	.parent = &camss_top_gdsc.pd,
2656 	.pwrsts = PWRSTS_OFF_ON,
2657 };
2658 
2659 static struct gdsc bimc_smmu_gdsc = {
2660 	.gdscr = 0xe020,
2661 	.gds_hw_ctrl = 0xe024,
2662 	.pd = {
2663 		.name = "bimc_smmu",
2664 	},
2665 	.pwrsts = PWRSTS_OFF_ON,
2666 	.flags = HW_CTRL | ALWAYS_ON,
2667 };
2668 
2669 static struct clk_regmap *mmcc_msm8998_clocks[] = {
2670 	[MMPLL0] = &mmpll0.clkr,
2671 	[MMPLL0_OUT_EVEN] = &mmpll0_out_even.clkr,
2672 	[MMPLL1] = &mmpll1.clkr,
2673 	[MMPLL1_OUT_EVEN] = &mmpll1_out_even.clkr,
2674 	[MMPLL3] = &mmpll3.clkr,
2675 	[MMPLL3_OUT_EVEN] = &mmpll3_out_even.clkr,
2676 	[MMPLL4] = &mmpll4.clkr,
2677 	[MMPLL4_OUT_EVEN] = &mmpll4_out_even.clkr,
2678 	[MMPLL5] = &mmpll5.clkr,
2679 	[MMPLL5_OUT_EVEN] = &mmpll5_out_even.clkr,
2680 	[MMPLL6] = &mmpll6.clkr,
2681 	[MMPLL6_OUT_EVEN] = &mmpll6_out_even.clkr,
2682 	[MMPLL7] = &mmpll7.clkr,
2683 	[MMPLL7_OUT_EVEN] = &mmpll7_out_even.clkr,
2684 	[MMPLL10] = &mmpll10.clkr,
2685 	[MMPLL10_OUT_EVEN] = &mmpll10_out_even.clkr,
2686 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2687 	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2688 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
2689 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
2690 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2691 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2692 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2693 	[CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2694 	[CSIPHY_CLK_SRC] = &csiphy_clk_src.clkr,
2695 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2696 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2697 	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2698 	[DP_AUX_CLK_SRC] = &dp_aux_clk_src.clkr,
2699 	[DP_CRYPTO_CLK_SRC] = &dp_crypto_clk_src.clkr,
2700 	[DP_LINK_CLK_SRC] = &dp_link_clk_src.clkr,
2701 	[DP_PIXEL_CLK_SRC] = &dp_pixel_clk_src.clkr,
2702 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2703 	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2704 	[EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2705 	[FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
2706 	[HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2707 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2708 	[MAXI_CLK_SRC] = &maxi_clk_src.clkr,
2709 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2710 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2711 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2712 	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2713 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
2714 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2715 	[AHB_CLK_SRC] = &ahb_clk_src.clkr,
2716 	[AXI_CLK_SRC] = &axi_clk_src.clkr,
2717 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2718 	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2719 	[ROT_CLK_SRC] = &rot_clk_src.clkr,
2720 	[VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
2721 	[VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
2722 	[VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
2723 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2724 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2725 	[MISC_AHB_CLK] = &misc_ahb_clk.clkr,
2726 	[VIDEO_CORE_CLK] = &video_core_clk.clkr,
2727 	[VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
2728 	[VIDEO_AXI_CLK] = &video_axi_clk.clkr,
2729 	[VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
2730 	[VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
2731 	[VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
2732 	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2733 	[MDSS_HDMI_DP_AHB_CLK] = &mdss_hdmi_dp_ahb_clk.clkr,
2734 	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2735 	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2736 	[MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
2737 	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2738 	[MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2739 	[MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
2740 	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2741 	[MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
2742 	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2743 	[MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
2744 	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2745 	[MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
2746 	[MDSS_ROT_CLK] = &mdss_rot_clk.clkr,
2747 	[MDSS_DP_LINK_CLK] = &mdss_dp_link_clk.clkr,
2748 	[MDSS_DP_LINK_INTF_CLK] = &mdss_dp_link_intf_clk.clkr,
2749 	[MDSS_DP_CRYPTO_CLK] = &mdss_dp_crypto_clk.clkr,
2750 	[MDSS_DP_PIXEL_CLK] = &mdss_dp_pixel_clk.clkr,
2751 	[MDSS_DP_AUX_CLK] = &mdss_dp_aux_clk.clkr,
2752 	[MDSS_BYTE0_INTF_CLK] = &mdss_byte0_intf_clk.clkr,
2753 	[MDSS_BYTE1_INTF_CLK] = &mdss_byte1_intf_clk.clkr,
2754 	[CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
2755 	[CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
2756 	[CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
2757 	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2758 	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2759 	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2760 	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2761 	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2762 	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2763 	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2764 	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2765 	[CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2766 	[CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2767 	[CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2768 	[CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2769 	[CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2770 	[CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2771 	[CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2772 	[CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2773 	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2774 	[CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
2775 	[CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
2776 	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2777 	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2778 	[CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2779 	[CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2780 	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2781 	[CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
2782 	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2783 	[CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
2784 	[CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
2785 	[CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
2786 	[CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
2787 	[CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
2788 	[CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
2789 	[CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
2790 	[CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
2791 	[CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
2792 	[CAMSS_VFE_VBIF_AHB_CLK] = &camss_vfe_vbif_ahb_clk.clkr,
2793 	[CAMSS_VFE_VBIF_AXI_CLK] = &camss_vfe_vbif_axi_clk.clkr,
2794 	[CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
2795 	[CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
2796 	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2797 	[CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2798 	[CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
2799 	[CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
2800 	[CAMSS_CPHY_CSID0_CLK] = &camss_cphy_csid0_clk.clkr,
2801 	[CAMSS_CPHY_CSID1_CLK] = &camss_cphy_csid1_clk.clkr,
2802 	[CAMSS_CPHY_CSID2_CLK] = &camss_cphy_csid2_clk.clkr,
2803 	[CAMSS_CPHY_CSID3_CLK] = &camss_cphy_csid3_clk.clkr,
2804 	[CAMSS_CSIPHY0_CLK] = &camss_csiphy0_clk.clkr,
2805 	[CAMSS_CSIPHY1_CLK] = &camss_csiphy1_clk.clkr,
2806 	[CAMSS_CSIPHY2_CLK] = &camss_csiphy2_clk.clkr,
2807 	[FD_CORE_CLK] = &fd_core_clk.clkr,
2808 	[FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
2809 	[FD_AHB_CLK] = &fd_ahb_clk.clkr,
2810 	[MNOC_AHB_CLK] = &mnoc_ahb_clk.clkr,
2811 	[BIMC_SMMU_AHB_CLK] = &bimc_smmu_ahb_clk.clkr,
2812 	[BIMC_SMMU_AXI_CLK] = &bimc_smmu_axi_clk.clkr,
2813 	[MNOC_MAXI_CLK] = &mnoc_maxi_clk.clkr,
2814 	[VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
2815 	[VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
2816 };
2817 
2818 static struct gdsc *mmcc_msm8998_gdscs[] = {
2819 	[VIDEO_TOP_GDSC] = &video_top_gdsc,
2820 	[VIDEO_SUBCORE0_GDSC] = &video_subcore0_gdsc,
2821 	[VIDEO_SUBCORE1_GDSC] = &video_subcore1_gdsc,
2822 	[MDSS_GDSC] = &mdss_gdsc,
2823 	[CAMSS_TOP_GDSC] = &camss_top_gdsc,
2824 	[CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc,
2825 	[CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc,
2826 	[CAMSS_CPP_GDSC] = &camss_cpp_gdsc,
2827 	[BIMC_SMMU_GDSC] = &bimc_smmu_gdsc,
2828 };
2829 
2830 static const struct qcom_reset_map mmcc_msm8998_resets[] = {
2831 	[SPDM_BCR] = { 0x200 },
2832 	[SPDM_RM_BCR] = { 0x300 },
2833 	[MISC_BCR] = { 0x320 },
2834 	[VIDEO_TOP_BCR] = { 0x1020 },
2835 	[THROTTLE_VIDEO_BCR] = { 0x1180 },
2836 	[MDSS_BCR] = { 0x2300 },
2837 	[THROTTLE_MDSS_BCR] = { 0x2460 },
2838 	[CAMSS_PHY0_BCR] = { 0x3020 },
2839 	[CAMSS_PHY1_BCR] = { 0x3050 },
2840 	[CAMSS_PHY2_BCR] = { 0x3080 },
2841 	[CAMSS_CSI0_BCR] = { 0x30b0 },
2842 	[CAMSS_CSI0RDI_BCR] = { 0x30d0 },
2843 	[CAMSS_CSI0PIX_BCR] = { 0x30e0 },
2844 	[CAMSS_CSI1_BCR] = { 0x3120 },
2845 	[CAMSS_CSI1RDI_BCR] = { 0x3140 },
2846 	[CAMSS_CSI1PIX_BCR] = { 0x3150 },
2847 	[CAMSS_CSI2_BCR] = { 0x3180 },
2848 	[CAMSS_CSI2RDI_BCR] = { 0x31a0 },
2849 	[CAMSS_CSI2PIX_BCR] = { 0x31b0 },
2850 	[CAMSS_CSI3_BCR] = { 0x31e0 },
2851 	[CAMSS_CSI3RDI_BCR] = { 0x3200 },
2852 	[CAMSS_CSI3PIX_BCR] = { 0x3210 },
2853 	[CAMSS_ISPIF_BCR] = { 0x3220 },
2854 	[CAMSS_CCI_BCR] = { 0x3340 },
2855 	[CAMSS_TOP_BCR] = { 0x3480 },
2856 	[CAMSS_AHB_BCR] = { 0x3488 },
2857 	[CAMSS_MICRO_BCR] = { 0x3490 },
2858 	[CAMSS_JPEG_BCR] = { 0x35a0 },
2859 	[CAMSS_VFE0_BCR] = { 0x3660 },
2860 	[CAMSS_VFE1_BCR] = { 0x3670 },
2861 	[CAMSS_VFE_VBIF_BCR] = { 0x36a0 },
2862 	[CAMSS_CPP_TOP_BCR] = { 0x36c0 },
2863 	[CAMSS_CPP_BCR] = { 0x36d0 },
2864 	[CAMSS_CSI_VFE0_BCR] = { 0x3700 },
2865 	[CAMSS_CSI_VFE1_BCR] = { 0x3710 },
2866 	[CAMSS_FD_BCR] = { 0x3b60 },
2867 	[THROTTLE_CAMSS_BCR] = { 0x3c30 },
2868 	[MNOCAHB_BCR] = { 0x5020 },
2869 	[MNOCAXI_BCR] = { 0xd020 },
2870 	[BMIC_SMMU_BCR] = { 0xe000 },
2871 	[MNOC_MAXI_BCR] = { 0xf000 },
2872 	[VMEM_BCR] = { 0xf060 },
2873 	[BTO_BCR] = { 0x10004 },
2874 };
2875 
2876 static const struct regmap_config mmcc_msm8998_regmap_config = {
2877 	.reg_bits	= 32,
2878 	.reg_stride	= 4,
2879 	.val_bits	= 32,
2880 	.max_register	= 0x10004,
2881 	.fast_io	= true,
2882 };
2883 
2884 static const struct qcom_cc_desc mmcc_msm8998_desc = {
2885 	.config = &mmcc_msm8998_regmap_config,
2886 	.clks = mmcc_msm8998_clocks,
2887 	.num_clks = ARRAY_SIZE(mmcc_msm8998_clocks),
2888 	.resets = mmcc_msm8998_resets,
2889 	.num_resets = ARRAY_SIZE(mmcc_msm8998_resets),
2890 	.gdscs = mmcc_msm8998_gdscs,
2891 	.num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs),
2892 	.clk_hws = mmcc_msm8998_hws,
2893 	.num_clk_hws = ARRAY_SIZE(mmcc_msm8998_hws),
2894 };
2895 
2896 static const struct of_device_id mmcc_msm8998_match_table[] = {
2897 	{ .compatible = "qcom,mmcc-msm8998" },
2898 	{ }
2899 };
2900 MODULE_DEVICE_TABLE(of, mmcc_msm8998_match_table);
2901 
2902 static int mmcc_msm8998_probe(struct platform_device *pdev)
2903 {
2904 	struct regmap *regmap;
2905 
2906 	regmap = qcom_cc_map(pdev, &mmcc_msm8998_desc);
2907 	if (IS_ERR(regmap))
2908 		return PTR_ERR(regmap);
2909 
2910 	return qcom_cc_really_probe(pdev, &mmcc_msm8998_desc, regmap);
2911 }
2912 
2913 static struct platform_driver mmcc_msm8998_driver = {
2914 	.probe		= mmcc_msm8998_probe,
2915 	.driver		= {
2916 		.name	= "mmcc-msm8998",
2917 		.of_match_table = mmcc_msm8998_match_table,
2918 	},
2919 };
2920 module_platform_driver(mmcc_msm8998_driver);
2921 
2922 MODULE_DESCRIPTION("QCOM MMCC MSM8998 Driver");
2923 MODULE_LICENSE("GPL v2");
2924