xref: /openbmc/linux/drivers/clk/qcom/mmcc-apq8084.c (revision 8ffdff6a)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/regmap.h>
10 #include <linux/reset-controller.h>
11 
12 #include <dt-bindings/clock/qcom,mmcc-apq8084.h>
13 #include <dt-bindings/reset/qcom,mmcc-apq8084.h>
14 
15 #include "common.h"
16 #include "clk-regmap.h"
17 #include "clk-pll.h"
18 #include "clk-rcg.h"
19 #include "clk-branch.h"
20 #include "reset.h"
21 #include "gdsc.h"
22 
23 enum {
24 	P_XO,
25 	P_MMPLL0,
26 	P_EDPLINK,
27 	P_MMPLL1,
28 	P_HDMIPLL,
29 	P_GPLL0,
30 	P_EDPVCO,
31 	P_MMPLL4,
32 	P_DSI0PLL,
33 	P_DSI0PLL_BYTE,
34 	P_MMPLL2,
35 	P_MMPLL3,
36 	P_GPLL1,
37 	P_DSI1PLL,
38 	P_DSI1PLL_BYTE,
39 	P_MMSLEEP,
40 };
41 
42 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
43 	{ P_XO, 0 },
44 	{ P_MMPLL0, 1 },
45 	{ P_MMPLL1, 2 },
46 	{ P_GPLL0, 5 }
47 };
48 
49 static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = {
50 	"xo",
51 	"mmpll0_vote",
52 	"mmpll1_vote",
53 	"mmss_gpll0_vote",
54 };
55 
56 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
57 	{ P_XO, 0 },
58 	{ P_MMPLL0, 1 },
59 	{ P_HDMIPLL, 4 },
60 	{ P_GPLL0, 5 },
61 	{ P_DSI0PLL, 2 },
62 	{ P_DSI1PLL, 3 }
63 };
64 
65 static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
66 	"xo",
67 	"mmpll0_vote",
68 	"hdmipll",
69 	"mmss_gpll0_vote",
70 	"dsi0pll",
71 	"dsi1pll",
72 };
73 
74 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
75 	{ P_XO, 0 },
76 	{ P_MMPLL0, 1 },
77 	{ P_MMPLL1, 2 },
78 	{ P_GPLL0, 5 },
79 	{ P_MMPLL2, 3 }
80 };
81 
82 static const char * const mmcc_xo_mmpll0_1_2_gpll0[] = {
83 	"xo",
84 	"mmpll0_vote",
85 	"mmpll1_vote",
86 	"mmss_gpll0_vote",
87 	"mmpll2",
88 };
89 
90 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
91 	{ P_XO, 0 },
92 	{ P_MMPLL0, 1 },
93 	{ P_MMPLL1, 2 },
94 	{ P_GPLL0, 5 },
95 	{ P_MMPLL3, 3 }
96 };
97 
98 static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = {
99 	"xo",
100 	"mmpll0_vote",
101 	"mmpll1_vote",
102 	"mmss_gpll0_vote",
103 	"mmpll3",
104 };
105 
106 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
107 	{ P_XO, 0 },
108 	{ P_EDPLINK, 4 },
109 	{ P_HDMIPLL, 3 },
110 	{ P_EDPVCO, 5 },
111 	{ P_DSI0PLL, 1 },
112 	{ P_DSI1PLL, 2 }
113 };
114 
115 static const char * const mmcc_xo_dsi_hdmi_edp[] = {
116 	"xo",
117 	"edp_link_clk",
118 	"hdmipll",
119 	"edp_vco_div",
120 	"dsi0pll",
121 	"dsi1pll",
122 };
123 
124 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
125 	{ P_XO, 0 },
126 	{ P_EDPLINK, 4 },
127 	{ P_HDMIPLL, 3 },
128 	{ P_GPLL0, 5 },
129 	{ P_DSI0PLL, 1 },
130 	{ P_DSI1PLL, 2 }
131 };
132 
133 static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = {
134 	"xo",
135 	"edp_link_clk",
136 	"hdmipll",
137 	"gpll0_vote",
138 	"dsi0pll",
139 	"dsi1pll",
140 };
141 
142 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
143 	{ P_XO, 0 },
144 	{ P_EDPLINK, 4 },
145 	{ P_HDMIPLL, 3 },
146 	{ P_GPLL0, 5 },
147 	{ P_DSI0PLL_BYTE, 1 },
148 	{ P_DSI1PLL_BYTE, 2 }
149 };
150 
151 static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
152 	"xo",
153 	"edp_link_clk",
154 	"hdmipll",
155 	"gpll0_vote",
156 	"dsi0pllbyte",
157 	"dsi1pllbyte",
158 };
159 
160 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {
161 	{ P_XO, 0 },
162 	{ P_MMPLL0, 1 },
163 	{ P_MMPLL1, 2 },
164 	{ P_GPLL0, 5 },
165 	{ P_MMPLL4, 3 }
166 };
167 
168 static const char * const mmcc_xo_mmpll0_1_4_gpll0[] = {
169 	"xo",
170 	"mmpll0",
171 	"mmpll1",
172 	"mmpll4",
173 	"gpll0",
174 };
175 
176 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {
177 	{ P_XO, 0 },
178 	{ P_MMPLL0, 1 },
179 	{ P_MMPLL1, 2 },
180 	{ P_MMPLL4, 3 },
181 	{ P_GPLL0, 5 },
182 	{ P_GPLL1, 4 }
183 };
184 
185 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0[] = {
186 	"xo",
187 	"mmpll0",
188 	"mmpll1",
189 	"mmpll4",
190 	"gpll1",
191 	"gpll0",
192 };
193 
194 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {
195 	{ P_XO, 0 },
196 	{ P_MMPLL0, 1 },
197 	{ P_MMPLL1, 2 },
198 	{ P_MMPLL4, 3 },
199 	{ P_GPLL0, 5 },
200 	{ P_GPLL1, 4 },
201 	{ P_MMSLEEP, 6 }
202 };
203 
204 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {
205 	"xo",
206 	"mmpll0",
207 	"mmpll1",
208 	"mmpll4",
209 	"gpll1",
210 	"gpll0",
211 	"sleep_clk_src",
212 };
213 
214 static struct clk_pll mmpll0 = {
215 	.l_reg = 0x0004,
216 	.m_reg = 0x0008,
217 	.n_reg = 0x000c,
218 	.config_reg = 0x0014,
219 	.mode_reg = 0x0000,
220 	.status_reg = 0x001c,
221 	.status_bit = 17,
222 	.clkr.hw.init = &(struct clk_init_data){
223 		.name = "mmpll0",
224 		.parent_names = (const char *[]){ "xo" },
225 		.num_parents = 1,
226 		.ops = &clk_pll_ops,
227 	},
228 };
229 
230 static struct clk_regmap mmpll0_vote = {
231 	.enable_reg = 0x0100,
232 	.enable_mask = BIT(0),
233 	.hw.init = &(struct clk_init_data){
234 		.name = "mmpll0_vote",
235 		.parent_names = (const char *[]){ "mmpll0" },
236 		.num_parents = 1,
237 		.ops = &clk_pll_vote_ops,
238 	},
239 };
240 
241 static struct clk_pll mmpll1 = {
242 	.l_reg = 0x0044,
243 	.m_reg = 0x0048,
244 	.n_reg = 0x004c,
245 	.config_reg = 0x0050,
246 	.mode_reg = 0x0040,
247 	.status_reg = 0x005c,
248 	.status_bit = 17,
249 	.clkr.hw.init = &(struct clk_init_data){
250 		.name = "mmpll1",
251 		.parent_names = (const char *[]){ "xo" },
252 		.num_parents = 1,
253 		.ops = &clk_pll_ops,
254 	},
255 };
256 
257 static struct clk_regmap mmpll1_vote = {
258 	.enable_reg = 0x0100,
259 	.enable_mask = BIT(1),
260 	.hw.init = &(struct clk_init_data){
261 		.name = "mmpll1_vote",
262 		.parent_names = (const char *[]){ "mmpll1" },
263 		.num_parents = 1,
264 		.ops = &clk_pll_vote_ops,
265 	},
266 };
267 
268 static struct clk_pll mmpll2 = {
269 	.l_reg = 0x4104,
270 	.m_reg = 0x4108,
271 	.n_reg = 0x410c,
272 	.config_reg = 0x4110,
273 	.mode_reg = 0x4100,
274 	.status_reg = 0x411c,
275 	.clkr.hw.init = &(struct clk_init_data){
276 		.name = "mmpll2",
277 		.parent_names = (const char *[]){ "xo" },
278 		.num_parents = 1,
279 		.ops = &clk_pll_ops,
280 	},
281 };
282 
283 static struct clk_pll mmpll3 = {
284 	.l_reg = 0x0084,
285 	.m_reg = 0x0088,
286 	.n_reg = 0x008c,
287 	.config_reg = 0x0090,
288 	.mode_reg = 0x0080,
289 	.status_reg = 0x009c,
290 	.status_bit = 17,
291 	.clkr.hw.init = &(struct clk_init_data){
292 		.name = "mmpll3",
293 		.parent_names = (const char *[]){ "xo" },
294 		.num_parents = 1,
295 		.ops = &clk_pll_ops,
296 	},
297 };
298 
299 static struct clk_pll mmpll4 = {
300 	.l_reg = 0x00a4,
301 	.m_reg = 0x00a8,
302 	.n_reg = 0x00ac,
303 	.config_reg = 0x00b0,
304 	.mode_reg = 0x0080,
305 	.status_reg = 0x00bc,
306 	.clkr.hw.init = &(struct clk_init_data){
307 		.name = "mmpll4",
308 		.parent_names = (const char *[]){ "xo" },
309 		.num_parents = 1,
310 		.ops = &clk_pll_ops,
311 	},
312 };
313 
314 static struct clk_rcg2 mmss_ahb_clk_src = {
315 	.cmd_rcgr = 0x5000,
316 	.hid_width = 5,
317 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
318 	.clkr.hw.init = &(struct clk_init_data){
319 		.name = "mmss_ahb_clk_src",
320 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
321 		.num_parents = 4,
322 		.ops = &clk_rcg2_ops,
323 	},
324 };
325 
326 static struct freq_tbl ftbl_mmss_axi_clk[] = {
327 	F(19200000, P_XO, 1, 0, 0),
328 	F(37500000, P_GPLL0, 16, 0, 0),
329 	F(50000000, P_GPLL0, 12, 0, 0),
330 	F(75000000, P_GPLL0, 8, 0, 0),
331 	F(100000000, P_GPLL0, 6, 0, 0),
332 	F(150000000, P_GPLL0, 4, 0, 0),
333 	F(333430000, P_MMPLL1, 3.5, 0, 0),
334 	F(400000000, P_MMPLL0, 2, 0, 0),
335 	F(466800000, P_MMPLL1, 2.5, 0, 0),
336 };
337 
338 static struct clk_rcg2 mmss_axi_clk_src = {
339 	.cmd_rcgr = 0x5040,
340 	.hid_width = 5,
341 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
342 	.freq_tbl = ftbl_mmss_axi_clk,
343 	.clkr.hw.init = &(struct clk_init_data){
344 		.name = "mmss_axi_clk_src",
345 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
346 		.num_parents = 4,
347 		.ops = &clk_rcg2_ops,
348 	},
349 };
350 
351 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
352 	F(19200000, P_XO, 1, 0, 0),
353 	F(37500000, P_GPLL0, 16, 0, 0),
354 	F(50000000, P_GPLL0, 12, 0, 0),
355 	F(75000000, P_GPLL0, 8, 0, 0),
356 	F(109090000, P_GPLL0, 5.5, 0, 0),
357 	F(150000000, P_GPLL0, 4, 0, 0),
358 	F(228570000, P_MMPLL0, 3.5, 0, 0),
359 	F(320000000, P_MMPLL0, 2.5, 0, 0),
360 };
361 
362 static struct clk_rcg2 ocmemnoc_clk_src = {
363 	.cmd_rcgr = 0x5090,
364 	.hid_width = 5,
365 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
366 	.freq_tbl = ftbl_ocmemnoc_clk,
367 	.clkr.hw.init = &(struct clk_init_data){
368 		.name = "ocmemnoc_clk_src",
369 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
370 		.num_parents = 4,
371 		.ops = &clk_rcg2_ops,
372 	},
373 };
374 
375 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
376 	F(100000000, P_GPLL0, 6, 0, 0),
377 	F(200000000, P_MMPLL0, 4, 0, 0),
378 	{ }
379 };
380 
381 static struct clk_rcg2 csi0_clk_src = {
382 	.cmd_rcgr = 0x3090,
383 	.hid_width = 5,
384 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
385 	.freq_tbl = ftbl_camss_csi0_3_clk,
386 	.clkr.hw.init = &(struct clk_init_data){
387 		.name = "csi0_clk_src",
388 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
389 		.num_parents = 5,
390 		.ops = &clk_rcg2_ops,
391 	},
392 };
393 
394 static struct clk_rcg2 csi1_clk_src = {
395 	.cmd_rcgr = 0x3100,
396 	.hid_width = 5,
397 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
398 	.freq_tbl = ftbl_camss_csi0_3_clk,
399 	.clkr.hw.init = &(struct clk_init_data){
400 		.name = "csi1_clk_src",
401 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
402 		.num_parents = 5,
403 		.ops = &clk_rcg2_ops,
404 	},
405 };
406 
407 static struct clk_rcg2 csi2_clk_src = {
408 	.cmd_rcgr = 0x3160,
409 	.hid_width = 5,
410 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
411 	.freq_tbl = ftbl_camss_csi0_3_clk,
412 	.clkr.hw.init = &(struct clk_init_data){
413 		.name = "csi2_clk_src",
414 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
415 		.num_parents = 5,
416 		.ops = &clk_rcg2_ops,
417 	},
418 };
419 
420 static struct clk_rcg2 csi3_clk_src = {
421 	.cmd_rcgr = 0x31c0,
422 	.hid_width = 5,
423 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
424 	.freq_tbl = ftbl_camss_csi0_3_clk,
425 	.clkr.hw.init = &(struct clk_init_data){
426 		.name = "csi3_clk_src",
427 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
428 		.num_parents = 5,
429 		.ops = &clk_rcg2_ops,
430 	},
431 };
432 
433 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
434 	F(37500000, P_GPLL0, 16, 0, 0),
435 	F(50000000, P_GPLL0, 12, 0, 0),
436 	F(60000000, P_GPLL0, 10, 0, 0),
437 	F(80000000, P_GPLL0, 7.5, 0, 0),
438 	F(100000000, P_GPLL0, 6, 0, 0),
439 	F(109090000, P_GPLL0, 5.5, 0, 0),
440 	F(133330000, P_GPLL0, 4.5, 0, 0),
441 	F(200000000, P_GPLL0, 3, 0, 0),
442 	F(228570000, P_MMPLL0, 3.5, 0, 0),
443 	F(266670000, P_MMPLL0, 3, 0, 0),
444 	F(320000000, P_MMPLL0, 2.5, 0, 0),
445 	F(465000000, P_MMPLL4, 2, 0, 0),
446 	F(600000000, P_GPLL0, 1, 0, 0),
447 	{ }
448 };
449 
450 static struct clk_rcg2 vfe0_clk_src = {
451 	.cmd_rcgr = 0x3600,
452 	.hid_width = 5,
453 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
454 	.freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
455 	.clkr.hw.init = &(struct clk_init_data){
456 		.name = "vfe0_clk_src",
457 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
458 		.num_parents = 5,
459 		.ops = &clk_rcg2_ops,
460 	},
461 };
462 
463 static struct clk_rcg2 vfe1_clk_src = {
464 	.cmd_rcgr = 0x3620,
465 	.hid_width = 5,
466 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
467 	.freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
468 	.clkr.hw.init = &(struct clk_init_data){
469 		.name = "vfe1_clk_src",
470 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
471 		.num_parents = 5,
472 		.ops = &clk_rcg2_ops,
473 	},
474 };
475 
476 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
477 	F(37500000, P_GPLL0, 16, 0, 0),
478 	F(60000000, P_GPLL0, 10, 0, 0),
479 	F(75000000, P_GPLL0, 8, 0, 0),
480 	F(85710000, P_GPLL0, 7, 0, 0),
481 	F(100000000, P_GPLL0, 6, 0, 0),
482 	F(150000000, P_GPLL0, 4, 0, 0),
483 	F(160000000, P_MMPLL0, 5, 0, 0),
484 	F(200000000, P_MMPLL0, 4, 0, 0),
485 	F(228570000, P_MMPLL0, 3.5, 0, 0),
486 	F(300000000, P_GPLL0, 2, 0, 0),
487 	F(320000000, P_MMPLL0, 2.5, 0, 0),
488 	{ }
489 };
490 
491 static struct clk_rcg2 mdp_clk_src = {
492 	.cmd_rcgr = 0x2040,
493 	.hid_width = 5,
494 	.parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
495 	.freq_tbl = ftbl_mdss_mdp_clk,
496 	.clkr.hw.init = &(struct clk_init_data){
497 		.name = "mdp_clk_src",
498 		.parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
499 		.num_parents = 6,
500 		.ops = &clk_rcg2_ops,
501 	},
502 };
503 
504 static struct clk_rcg2 gfx3d_clk_src = {
505 	.cmd_rcgr = 0x4000,
506 	.hid_width = 5,
507 	.parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
508 	.clkr.hw.init = &(struct clk_init_data){
509 		.name = "gfx3d_clk_src",
510 		.parent_names = mmcc_xo_mmpll0_1_2_gpll0,
511 		.num_parents = 5,
512 		.ops = &clk_rcg2_ops,
513 	},
514 };
515 
516 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
517 	F(75000000, P_GPLL0, 8, 0, 0),
518 	F(133330000, P_GPLL0, 4.5, 0, 0),
519 	F(200000000, P_GPLL0, 3, 0, 0),
520 	F(228570000, P_MMPLL0, 3.5, 0, 0),
521 	F(266670000, P_MMPLL0, 3, 0, 0),
522 	F(320000000, P_MMPLL0, 2.5, 0, 0),
523 	{ }
524 };
525 
526 static struct clk_rcg2 jpeg0_clk_src = {
527 	.cmd_rcgr = 0x3500,
528 	.hid_width = 5,
529 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
530 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
531 	.clkr.hw.init = &(struct clk_init_data){
532 		.name = "jpeg0_clk_src",
533 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
534 		.num_parents = 5,
535 		.ops = &clk_rcg2_ops,
536 	},
537 };
538 
539 static struct clk_rcg2 jpeg1_clk_src = {
540 	.cmd_rcgr = 0x3520,
541 	.hid_width = 5,
542 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
543 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
544 	.clkr.hw.init = &(struct clk_init_data){
545 		.name = "jpeg1_clk_src",
546 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
547 		.num_parents = 5,
548 		.ops = &clk_rcg2_ops,
549 	},
550 };
551 
552 static struct clk_rcg2 jpeg2_clk_src = {
553 	.cmd_rcgr = 0x3540,
554 	.hid_width = 5,
555 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
556 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
557 	.clkr.hw.init = &(struct clk_init_data){
558 		.name = "jpeg2_clk_src",
559 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
560 		.num_parents = 5,
561 		.ops = &clk_rcg2_ops,
562 	},
563 };
564 
565 static struct clk_rcg2 pclk0_clk_src = {
566 	.cmd_rcgr = 0x2000,
567 	.mnd_width = 8,
568 	.hid_width = 5,
569 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
570 	.clkr.hw.init = &(struct clk_init_data){
571 		.name = "pclk0_clk_src",
572 		.parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
573 		.num_parents = 6,
574 		.ops = &clk_pixel_ops,
575 		.flags = CLK_SET_RATE_PARENT,
576 	},
577 };
578 
579 static struct clk_rcg2 pclk1_clk_src = {
580 	.cmd_rcgr = 0x2020,
581 	.mnd_width = 8,
582 	.hid_width = 5,
583 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
584 	.clkr.hw.init = &(struct clk_init_data){
585 		.name = "pclk1_clk_src",
586 		.parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
587 		.num_parents = 6,
588 		.ops = &clk_pixel_ops,
589 		.flags = CLK_SET_RATE_PARENT,
590 	},
591 };
592 
593 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
594 	F(50000000, P_GPLL0, 12, 0, 0),
595 	F(100000000, P_GPLL0, 6, 0, 0),
596 	F(133330000, P_GPLL0, 4.5, 0, 0),
597 	F(200000000, P_MMPLL0, 4, 0, 0),
598 	F(266670000, P_MMPLL0, 3, 0, 0),
599 	F(465000000, P_MMPLL3, 2, 0, 0),
600 	{ }
601 };
602 
603 static struct clk_rcg2 vcodec0_clk_src = {
604 	.cmd_rcgr = 0x1000,
605 	.mnd_width = 8,
606 	.hid_width = 5,
607 	.parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
608 	.freq_tbl = ftbl_venus0_vcodec0_clk,
609 	.clkr.hw.init = &(struct clk_init_data){
610 		.name = "vcodec0_clk_src",
611 		.parent_names = mmcc_xo_mmpll0_1_3_gpll0,
612 		.num_parents = 5,
613 		.ops = &clk_rcg2_ops,
614 	},
615 };
616 
617 static struct freq_tbl ftbl_avsync_vp_clk[] = {
618 	F(150000000, P_GPLL0, 4, 0, 0),
619 	F(320000000, P_MMPLL0, 2.5, 0, 0),
620 	{ }
621 };
622 
623 static struct clk_rcg2 vp_clk_src = {
624 	.cmd_rcgr = 0x2430,
625 	.hid_width = 5,
626 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
627 	.freq_tbl = ftbl_avsync_vp_clk,
628 	.clkr.hw.init = &(struct clk_init_data){
629 		.name = "vp_clk_src",
630 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
631 		.num_parents = 4,
632 		.ops = &clk_rcg2_ops,
633 	},
634 };
635 
636 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
637 	F(19200000, P_XO, 1, 0, 0),
638 	{ }
639 };
640 
641 static struct clk_rcg2 cci_clk_src = {
642 	.cmd_rcgr = 0x3300,
643 	.mnd_width = 8,
644 	.hid_width = 5,
645 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
646 	.freq_tbl = ftbl_camss_cci_cci_clk,
647 	.clkr.hw.init = &(struct clk_init_data){
648 		.name = "cci_clk_src",
649 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
650 		.num_parents = 6,
651 		.ops = &clk_rcg2_ops,
652 	},
653 };
654 
655 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
656 	F(10000, P_XO, 16, 1, 120),
657 	F(24000, P_XO, 16, 1, 50),
658 	F(6000000, P_GPLL0, 10, 1, 10),
659 	F(12000000, P_GPLL0, 10, 1, 5),
660 	F(13000000, P_GPLL0, 4, 13, 150),
661 	F(24000000, P_GPLL0, 5, 1, 5),
662 	{ }
663 };
664 
665 static struct clk_rcg2 camss_gp0_clk_src = {
666 	.cmd_rcgr = 0x3420,
667 	.mnd_width = 8,
668 	.hid_width = 5,
669 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
670 	.freq_tbl = ftbl_camss_gp0_1_clk,
671 	.clkr.hw.init = &(struct clk_init_data){
672 		.name = "camss_gp0_clk_src",
673 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
674 		.num_parents = 7,
675 		.ops = &clk_rcg2_ops,
676 	},
677 };
678 
679 static struct clk_rcg2 camss_gp1_clk_src = {
680 	.cmd_rcgr = 0x3450,
681 	.mnd_width = 8,
682 	.hid_width = 5,
683 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
684 	.freq_tbl = ftbl_camss_gp0_1_clk,
685 	.clkr.hw.init = &(struct clk_init_data){
686 		.name = "camss_gp1_clk_src",
687 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
688 		.num_parents = 7,
689 		.ops = &clk_rcg2_ops,
690 	},
691 };
692 
693 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
694 	F(4800000, P_XO, 4, 0, 0),
695 	F(6000000, P_GPLL0, 10, 1, 10),
696 	F(8000000, P_GPLL0, 15, 1, 5),
697 	F(9600000, P_XO, 2, 0, 0),
698 	F(16000000, P_MMPLL0, 10, 1, 5),
699 	F(19200000, P_XO, 1, 0, 0),
700 	F(24000000, P_GPLL0, 5, 1, 5),
701 	F(32000000, P_MMPLL0, 5, 1, 5),
702 	F(48000000, P_GPLL0, 12.5, 0, 0),
703 	F(64000000, P_MMPLL0, 12.5, 0, 0),
704 	{ }
705 };
706 
707 static struct clk_rcg2 mclk0_clk_src = {
708 	.cmd_rcgr = 0x3360,
709 	.mnd_width = 8,
710 	.hid_width = 5,
711 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
712 	.freq_tbl = ftbl_camss_mclk0_3_clk,
713 	.clkr.hw.init = &(struct clk_init_data){
714 		.name = "mclk0_clk_src",
715 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
716 		.num_parents = 6,
717 		.ops = &clk_rcg2_ops,
718 	},
719 };
720 
721 static struct clk_rcg2 mclk1_clk_src = {
722 	.cmd_rcgr = 0x3390,
723 	.mnd_width = 8,
724 	.hid_width = 5,
725 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
726 	.freq_tbl = ftbl_camss_mclk0_3_clk,
727 	.clkr.hw.init = &(struct clk_init_data){
728 		.name = "mclk1_clk_src",
729 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
730 		.num_parents = 6,
731 		.ops = &clk_rcg2_ops,
732 	},
733 };
734 
735 static struct clk_rcg2 mclk2_clk_src = {
736 	.cmd_rcgr = 0x33c0,
737 	.mnd_width = 8,
738 	.hid_width = 5,
739 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
740 	.freq_tbl = ftbl_camss_mclk0_3_clk,
741 	.clkr.hw.init = &(struct clk_init_data){
742 		.name = "mclk2_clk_src",
743 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
744 		.num_parents = 6,
745 		.ops = &clk_rcg2_ops,
746 	},
747 };
748 
749 static struct clk_rcg2 mclk3_clk_src = {
750 	.cmd_rcgr = 0x33f0,
751 	.mnd_width = 8,
752 	.hid_width = 5,
753 	.parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
754 	.freq_tbl = ftbl_camss_mclk0_3_clk,
755 	.clkr.hw.init = &(struct clk_init_data){
756 		.name = "mclk3_clk_src",
757 		.parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
758 		.num_parents = 6,
759 		.ops = &clk_rcg2_ops,
760 	},
761 };
762 
763 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
764 	F(100000000, P_GPLL0, 6, 0, 0),
765 	F(200000000, P_MMPLL0, 4, 0, 0),
766 	{ }
767 };
768 
769 static struct clk_rcg2 csi0phytimer_clk_src = {
770 	.cmd_rcgr = 0x3000,
771 	.hid_width = 5,
772 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
773 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
774 	.clkr.hw.init = &(struct clk_init_data){
775 		.name = "csi0phytimer_clk_src",
776 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
777 		.num_parents = 5,
778 		.ops = &clk_rcg2_ops,
779 	},
780 };
781 
782 static struct clk_rcg2 csi1phytimer_clk_src = {
783 	.cmd_rcgr = 0x3030,
784 	.hid_width = 5,
785 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
786 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
787 	.clkr.hw.init = &(struct clk_init_data){
788 		.name = "csi1phytimer_clk_src",
789 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
790 		.num_parents = 5,
791 		.ops = &clk_rcg2_ops,
792 	},
793 };
794 
795 static struct clk_rcg2 csi2phytimer_clk_src = {
796 	.cmd_rcgr = 0x3060,
797 	.hid_width = 5,
798 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
799 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
800 	.clkr.hw.init = &(struct clk_init_data){
801 		.name = "csi2phytimer_clk_src",
802 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
803 		.num_parents = 5,
804 		.ops = &clk_rcg2_ops,
805 	},
806 };
807 
808 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
809 	F(133330000, P_GPLL0, 4.5, 0, 0),
810 	F(266670000, P_MMPLL0, 3, 0, 0),
811 	F(320000000, P_MMPLL0, 2.5, 0, 0),
812 	F(372000000, P_MMPLL4, 2.5, 0, 0),
813 	F(465000000, P_MMPLL4, 2, 0, 0),
814 	F(600000000, P_GPLL0, 1, 0, 0),
815 	{ }
816 };
817 
818 static struct clk_rcg2 cpp_clk_src = {
819 	.cmd_rcgr = 0x3640,
820 	.hid_width = 5,
821 	.parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
822 	.freq_tbl = ftbl_camss_vfe_cpp_clk,
823 	.clkr.hw.init = &(struct clk_init_data){
824 		.name = "cpp_clk_src",
825 		.parent_names = mmcc_xo_mmpll0_1_4_gpll0,
826 		.num_parents = 5,
827 		.ops = &clk_rcg2_ops,
828 	},
829 };
830 
831 static struct clk_rcg2 byte0_clk_src = {
832 	.cmd_rcgr = 0x2120,
833 	.hid_width = 5,
834 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
835 	.clkr.hw.init = &(struct clk_init_data){
836 		.name = "byte0_clk_src",
837 		.parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
838 		.num_parents = 6,
839 		.ops = &clk_byte2_ops,
840 		.flags = CLK_SET_RATE_PARENT,
841 	},
842 };
843 
844 static struct clk_rcg2 byte1_clk_src = {
845 	.cmd_rcgr = 0x2140,
846 	.hid_width = 5,
847 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
848 	.clkr.hw.init = &(struct clk_init_data){
849 		.name = "byte1_clk_src",
850 		.parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
851 		.num_parents = 6,
852 		.ops = &clk_byte2_ops,
853 		.flags = CLK_SET_RATE_PARENT,
854 	},
855 };
856 
857 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
858 	F(19200000, P_XO, 1, 0, 0),
859 	{ }
860 };
861 
862 static struct clk_rcg2 edpaux_clk_src = {
863 	.cmd_rcgr = 0x20e0,
864 	.hid_width = 5,
865 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
866 	.freq_tbl = ftbl_mdss_edpaux_clk,
867 	.clkr.hw.init = &(struct clk_init_data){
868 		.name = "edpaux_clk_src",
869 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
870 		.num_parents = 4,
871 		.ops = &clk_rcg2_ops,
872 	},
873 };
874 
875 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
876 	F(135000000, P_EDPLINK, 2, 0, 0),
877 	F(270000000, P_EDPLINK, 11, 0, 0),
878 	{ }
879 };
880 
881 static struct clk_rcg2 edplink_clk_src = {
882 	.cmd_rcgr = 0x20c0,
883 	.hid_width = 5,
884 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
885 	.freq_tbl = ftbl_mdss_edplink_clk,
886 	.clkr.hw.init = &(struct clk_init_data){
887 		.name = "edplink_clk_src",
888 		.parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
889 		.num_parents = 6,
890 		.ops = &clk_rcg2_ops,
891 		.flags = CLK_SET_RATE_PARENT,
892 	},
893 };
894 
895 static struct freq_tbl edp_pixel_freq_tbl[] = {
896 	{ .src = P_EDPVCO },
897 	{ }
898 };
899 
900 static struct clk_rcg2 edppixel_clk_src = {
901 	.cmd_rcgr = 0x20a0,
902 	.mnd_width = 8,
903 	.hid_width = 5,
904 	.parent_map = mmcc_xo_dsi_hdmi_edp_map,
905 	.freq_tbl = edp_pixel_freq_tbl,
906 	.clkr.hw.init = &(struct clk_init_data){
907 		.name = "edppixel_clk_src",
908 		.parent_names = mmcc_xo_dsi_hdmi_edp,
909 		.num_parents = 6,
910 		.ops = &clk_edp_pixel_ops,
911 	},
912 };
913 
914 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
915 	F(19200000, P_XO, 1, 0, 0),
916 	{ }
917 };
918 
919 static struct clk_rcg2 esc0_clk_src = {
920 	.cmd_rcgr = 0x2160,
921 	.hid_width = 5,
922 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
923 	.freq_tbl = ftbl_mdss_esc0_1_clk,
924 	.clkr.hw.init = &(struct clk_init_data){
925 		.name = "esc0_clk_src",
926 		.parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
927 		.num_parents = 6,
928 		.ops = &clk_rcg2_ops,
929 	},
930 };
931 
932 static struct clk_rcg2 esc1_clk_src = {
933 	.cmd_rcgr = 0x2180,
934 	.hid_width = 5,
935 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
936 	.freq_tbl = ftbl_mdss_esc0_1_clk,
937 	.clkr.hw.init = &(struct clk_init_data){
938 		.name = "esc1_clk_src",
939 		.parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
940 		.num_parents = 6,
941 		.ops = &clk_rcg2_ops,
942 	},
943 };
944 
945 static struct freq_tbl extpclk_freq_tbl[] = {
946 	{ .src = P_HDMIPLL },
947 	{ }
948 };
949 
950 static struct clk_rcg2 extpclk_clk_src = {
951 	.cmd_rcgr = 0x2060,
952 	.hid_width = 5,
953 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
954 	.freq_tbl = extpclk_freq_tbl,
955 	.clkr.hw.init = &(struct clk_init_data){
956 		.name = "extpclk_clk_src",
957 		.parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
958 		.num_parents = 6,
959 		.ops = &clk_byte_ops,
960 		.flags = CLK_SET_RATE_PARENT,
961 	},
962 };
963 
964 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
965 	F(19200000, P_XO, 1, 0, 0),
966 	{ }
967 };
968 
969 static struct clk_rcg2 hdmi_clk_src = {
970 	.cmd_rcgr = 0x2100,
971 	.hid_width = 5,
972 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
973 	.freq_tbl = ftbl_mdss_hdmi_clk,
974 	.clkr.hw.init = &(struct clk_init_data){
975 		.name = "hdmi_clk_src",
976 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
977 		.num_parents = 4,
978 		.ops = &clk_rcg2_ops,
979 	},
980 };
981 
982 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
983 	F(19200000, P_XO, 1, 0, 0),
984 	{ }
985 };
986 
987 static struct clk_rcg2 vsync_clk_src = {
988 	.cmd_rcgr = 0x2080,
989 	.hid_width = 5,
990 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
991 	.freq_tbl = ftbl_mdss_vsync_clk,
992 	.clkr.hw.init = &(struct clk_init_data){
993 		.name = "vsync_clk_src",
994 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
995 		.num_parents = 4,
996 		.ops = &clk_rcg2_ops,
997 	},
998 };
999 
1000 static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1001 	F(50000000, P_GPLL0, 12, 0, 0),
1002 	{ }
1003 };
1004 
1005 static struct clk_rcg2 rbcpr_clk_src = {
1006 	.cmd_rcgr = 0x4060,
1007 	.hid_width = 5,
1008 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1009 	.freq_tbl = ftbl_mmss_rbcpr_clk,
1010 	.clkr.hw.init = &(struct clk_init_data){
1011 		.name = "rbcpr_clk_src",
1012 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1013 		.num_parents = 4,
1014 		.ops = &clk_rcg2_ops,
1015 	},
1016 };
1017 
1018 static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1019 	F(19200000, P_XO, 1, 0, 0),
1020 	{ }
1021 };
1022 
1023 static struct clk_rcg2 rbbmtimer_clk_src = {
1024 	.cmd_rcgr = 0x4090,
1025 	.hid_width = 5,
1026 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1027 	.freq_tbl = ftbl_oxili_rbbmtimer_clk,
1028 	.clkr.hw.init = &(struct clk_init_data){
1029 		.name = "rbbmtimer_clk_src",
1030 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1031 		.num_parents = 4,
1032 		.ops = &clk_rcg2_ops,
1033 	},
1034 };
1035 
1036 static struct freq_tbl ftbl_vpu_maple_clk[] = {
1037 	F(50000000, P_GPLL0, 12, 0, 0),
1038 	F(100000000, P_GPLL0, 6, 0, 0),
1039 	F(133330000, P_GPLL0, 4.5, 0, 0),
1040 	F(200000000, P_MMPLL0, 4, 0, 0),
1041 	F(266670000, P_MMPLL0, 3, 0, 0),
1042 	F(465000000, P_MMPLL3, 2, 0, 0),
1043 	{ }
1044 };
1045 
1046 static struct clk_rcg2 maple_clk_src = {
1047 	.cmd_rcgr = 0x1320,
1048 	.hid_width = 5,
1049 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1050 	.freq_tbl = ftbl_vpu_maple_clk,
1051 	.clkr.hw.init = &(struct clk_init_data){
1052 		.name = "maple_clk_src",
1053 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1054 		.num_parents = 4,
1055 		.ops = &clk_rcg2_ops,
1056 	},
1057 };
1058 
1059 static struct freq_tbl ftbl_vpu_vdp_clk[] = {
1060 	F(50000000, P_GPLL0, 12, 0, 0),
1061 	F(100000000, P_GPLL0, 6, 0, 0),
1062 	F(200000000, P_MMPLL0, 4, 0, 0),
1063 	F(320000000, P_MMPLL0, 2.5, 0, 0),
1064 	F(400000000, P_MMPLL0, 2, 0, 0),
1065 	{ }
1066 };
1067 
1068 static struct clk_rcg2 vdp_clk_src = {
1069 	.cmd_rcgr = 0x1300,
1070 	.hid_width = 5,
1071 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1072 	.freq_tbl = ftbl_vpu_vdp_clk,
1073 	.clkr.hw.init = &(struct clk_init_data){
1074 		.name = "vdp_clk_src",
1075 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1076 		.num_parents = 4,
1077 		.ops = &clk_rcg2_ops,
1078 	},
1079 };
1080 
1081 static struct freq_tbl ftbl_vpu_bus_clk[] = {
1082 	F(40000000, P_GPLL0, 15, 0, 0),
1083 	F(80000000, P_MMPLL0, 10, 0, 0),
1084 	{ }
1085 };
1086 
1087 static struct clk_rcg2 vpu_bus_clk_src = {
1088 	.cmd_rcgr = 0x1340,
1089 	.hid_width = 5,
1090 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1091 	.freq_tbl = ftbl_vpu_bus_clk,
1092 	.clkr.hw.init = &(struct clk_init_data){
1093 		.name = "vpu_bus_clk_src",
1094 		.parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1095 		.num_parents = 4,
1096 		.ops = &clk_rcg2_ops,
1097 	},
1098 };
1099 
1100 static struct clk_branch mmss_cxo_clk = {
1101 	.halt_reg = 0x5104,
1102 	.clkr = {
1103 		.enable_reg = 0x5104,
1104 		.enable_mask = BIT(0),
1105 		.hw.init = &(struct clk_init_data){
1106 			.name = "mmss_cxo_clk",
1107 			.parent_names = (const char *[]){ "xo" },
1108 			.num_parents = 1,
1109 			.flags = CLK_SET_RATE_PARENT,
1110 			.ops = &clk_branch2_ops,
1111 		},
1112 	},
1113 };
1114 
1115 static struct clk_branch mmss_sleepclk_clk = {
1116 	.halt_reg = 0x5100,
1117 	.clkr = {
1118 		.enable_reg = 0x5100,
1119 		.enable_mask = BIT(0),
1120 		.hw.init = &(struct clk_init_data){
1121 			.name = "mmss_sleepclk_clk",
1122 			.parent_names = (const char *[]){
1123 				"sleep_clk_src",
1124 			},
1125 			.num_parents = 1,
1126 			.flags = CLK_SET_RATE_PARENT,
1127 			.ops = &clk_branch2_ops,
1128 		},
1129 	},
1130 };
1131 
1132 static struct clk_branch avsync_ahb_clk = {
1133 	.halt_reg = 0x2414,
1134 	.clkr = {
1135 		.enable_reg = 0x2414,
1136 		.enable_mask = BIT(0),
1137 		.hw.init = &(struct clk_init_data){
1138 			.name = "avsync_ahb_clk",
1139 			.parent_names = (const char *[]){
1140 				"mmss_ahb_clk_src",
1141 			},
1142 			.num_parents = 1,
1143 			.flags = CLK_SET_RATE_PARENT,
1144 			.ops = &clk_branch2_ops,
1145 		},
1146 	},
1147 };
1148 
1149 static struct clk_branch avsync_edppixel_clk = {
1150 	.halt_reg = 0x2418,
1151 	.clkr = {
1152 		.enable_reg = 0x2418,
1153 		.enable_mask = BIT(0),
1154 		.hw.init = &(struct clk_init_data){
1155 			.name = "avsync_edppixel_clk",
1156 			.parent_names = (const char *[]){
1157 				"edppixel_clk_src",
1158 			},
1159 			.num_parents = 1,
1160 			.flags = CLK_SET_RATE_PARENT,
1161 			.ops = &clk_branch2_ops,
1162 		},
1163 	},
1164 };
1165 
1166 static struct clk_branch avsync_extpclk_clk = {
1167 	.halt_reg = 0x2410,
1168 	.clkr = {
1169 		.enable_reg = 0x2410,
1170 		.enable_mask = BIT(0),
1171 		.hw.init = &(struct clk_init_data){
1172 			.name = "avsync_extpclk_clk",
1173 			.parent_names = (const char *[]){
1174 				"extpclk_clk_src",
1175 			},
1176 			.num_parents = 1,
1177 			.flags = CLK_SET_RATE_PARENT,
1178 			.ops = &clk_branch2_ops,
1179 		},
1180 	},
1181 };
1182 
1183 static struct clk_branch avsync_pclk0_clk = {
1184 	.halt_reg = 0x241c,
1185 	.clkr = {
1186 		.enable_reg = 0x241c,
1187 		.enable_mask = BIT(0),
1188 		.hw.init = &(struct clk_init_data){
1189 			.name = "avsync_pclk0_clk",
1190 			.parent_names = (const char *[]){
1191 				"pclk0_clk_src",
1192 			},
1193 			.num_parents = 1,
1194 			.flags = CLK_SET_RATE_PARENT,
1195 			.ops = &clk_branch2_ops,
1196 		},
1197 	},
1198 };
1199 
1200 static struct clk_branch avsync_pclk1_clk = {
1201 	.halt_reg = 0x2420,
1202 	.clkr = {
1203 		.enable_reg = 0x2420,
1204 		.enable_mask = BIT(0),
1205 		.hw.init = &(struct clk_init_data){
1206 			.name = "avsync_pclk1_clk",
1207 			.parent_names = (const char *[]){
1208 				"pclk1_clk_src",
1209 			},
1210 			.num_parents = 1,
1211 			.flags = CLK_SET_RATE_PARENT,
1212 			.ops = &clk_branch2_ops,
1213 		},
1214 	},
1215 };
1216 
1217 static struct clk_branch avsync_vp_clk = {
1218 	.halt_reg = 0x2404,
1219 	.clkr = {
1220 		.enable_reg = 0x2404,
1221 		.enable_mask = BIT(0),
1222 		.hw.init = &(struct clk_init_data){
1223 			.name = "avsync_vp_clk",
1224 			.parent_names = (const char *[]){
1225 				"vp_clk_src",
1226 			},
1227 			.num_parents = 1,
1228 			.flags = CLK_SET_RATE_PARENT,
1229 			.ops = &clk_branch2_ops,
1230 		},
1231 	},
1232 };
1233 
1234 static struct clk_branch camss_ahb_clk = {
1235 	.halt_reg = 0x348c,
1236 	.clkr = {
1237 		.enable_reg = 0x348c,
1238 		.enable_mask = BIT(0),
1239 		.hw.init = &(struct clk_init_data){
1240 			.name = "camss_ahb_clk",
1241 			.parent_names = (const char *[]){
1242 				"mmss_ahb_clk_src",
1243 			},
1244 			.num_parents = 1,
1245 			.flags = CLK_SET_RATE_PARENT,
1246 			.ops = &clk_branch2_ops,
1247 		},
1248 	},
1249 };
1250 
1251 static struct clk_branch camss_cci_cci_ahb_clk = {
1252 	.halt_reg = 0x3348,
1253 	.clkr = {
1254 		.enable_reg = 0x3348,
1255 		.enable_mask = BIT(0),
1256 		.hw.init = &(struct clk_init_data){
1257 			.name = "camss_cci_cci_ahb_clk",
1258 			.parent_names = (const char *[]){
1259 				"mmss_ahb_clk_src",
1260 			},
1261 			.num_parents = 1,
1262 			.ops = &clk_branch2_ops,
1263 		},
1264 	},
1265 };
1266 
1267 static struct clk_branch camss_cci_cci_clk = {
1268 	.halt_reg = 0x3344,
1269 	.clkr = {
1270 		.enable_reg = 0x3344,
1271 		.enable_mask = BIT(0),
1272 		.hw.init = &(struct clk_init_data){
1273 			.name = "camss_cci_cci_clk",
1274 			.parent_names = (const char *[]){
1275 				"cci_clk_src",
1276 			},
1277 			.num_parents = 1,
1278 			.flags = CLK_SET_RATE_PARENT,
1279 			.ops = &clk_branch2_ops,
1280 		},
1281 	},
1282 };
1283 
1284 static struct clk_branch camss_csi0_ahb_clk = {
1285 	.halt_reg = 0x30bc,
1286 	.clkr = {
1287 		.enable_reg = 0x30bc,
1288 		.enable_mask = BIT(0),
1289 		.hw.init = &(struct clk_init_data){
1290 			.name = "camss_csi0_ahb_clk",
1291 			.parent_names = (const char *[]){
1292 				"mmss_ahb_clk_src",
1293 			},
1294 			.num_parents = 1,
1295 			.ops = &clk_branch2_ops,
1296 		},
1297 	},
1298 };
1299 
1300 static struct clk_branch camss_csi0_clk = {
1301 	.halt_reg = 0x30b4,
1302 	.clkr = {
1303 		.enable_reg = 0x30b4,
1304 		.enable_mask = BIT(0),
1305 		.hw.init = &(struct clk_init_data){
1306 			.name = "camss_csi0_clk",
1307 			.parent_names = (const char *[]){
1308 				"csi0_clk_src",
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 camss_csi0phy_clk = {
1318 	.halt_reg = 0x30c4,
1319 	.clkr = {
1320 		.enable_reg = 0x30c4,
1321 		.enable_mask = BIT(0),
1322 		.hw.init = &(struct clk_init_data){
1323 			.name = "camss_csi0phy_clk",
1324 			.parent_names = (const char *[]){
1325 				"csi0_clk_src",
1326 			},
1327 			.num_parents = 1,
1328 			.flags = CLK_SET_RATE_PARENT,
1329 			.ops = &clk_branch2_ops,
1330 		},
1331 	},
1332 };
1333 
1334 static struct clk_branch camss_csi0pix_clk = {
1335 	.halt_reg = 0x30e4,
1336 	.clkr = {
1337 		.enable_reg = 0x30e4,
1338 		.enable_mask = BIT(0),
1339 		.hw.init = &(struct clk_init_data){
1340 			.name = "camss_csi0pix_clk",
1341 			.parent_names = (const char *[]){
1342 				"csi0_clk_src",
1343 			},
1344 			.num_parents = 1,
1345 			.flags = CLK_SET_RATE_PARENT,
1346 			.ops = &clk_branch2_ops,
1347 		},
1348 	},
1349 };
1350 
1351 static struct clk_branch camss_csi0rdi_clk = {
1352 	.halt_reg = 0x30d4,
1353 	.clkr = {
1354 		.enable_reg = 0x30d4,
1355 		.enable_mask = BIT(0),
1356 		.hw.init = &(struct clk_init_data){
1357 			.name = "camss_csi0rdi_clk",
1358 			.parent_names = (const char *[]){
1359 				"csi0_clk_src",
1360 			},
1361 			.num_parents = 1,
1362 			.flags = CLK_SET_RATE_PARENT,
1363 			.ops = &clk_branch2_ops,
1364 		},
1365 	},
1366 };
1367 
1368 static struct clk_branch camss_csi1_ahb_clk = {
1369 	.halt_reg = 0x3128,
1370 	.clkr = {
1371 		.enable_reg = 0x3128,
1372 		.enable_mask = BIT(0),
1373 		.hw.init = &(struct clk_init_data){
1374 			.name = "camss_csi1_ahb_clk",
1375 			.parent_names = (const char *[]){
1376 				"mmss_ahb_clk_src",
1377 			},
1378 			.num_parents = 1,
1379 			.flags = CLK_SET_RATE_PARENT,
1380 			.ops = &clk_branch2_ops,
1381 		},
1382 	},
1383 };
1384 
1385 static struct clk_branch camss_csi1_clk = {
1386 	.halt_reg = 0x3124,
1387 	.clkr = {
1388 		.enable_reg = 0x3124,
1389 		.enable_mask = BIT(0),
1390 		.hw.init = &(struct clk_init_data){
1391 			.name = "camss_csi1_clk",
1392 			.parent_names = (const char *[]){
1393 				"csi1_clk_src",
1394 			},
1395 			.num_parents = 1,
1396 			.flags = CLK_SET_RATE_PARENT,
1397 			.ops = &clk_branch2_ops,
1398 		},
1399 	},
1400 };
1401 
1402 static struct clk_branch camss_csi1phy_clk = {
1403 	.halt_reg = 0x3134,
1404 	.clkr = {
1405 		.enable_reg = 0x3134,
1406 		.enable_mask = BIT(0),
1407 		.hw.init = &(struct clk_init_data){
1408 			.name = "camss_csi1phy_clk",
1409 			.parent_names = (const char *[]){
1410 				"csi1_clk_src",
1411 			},
1412 			.num_parents = 1,
1413 			.flags = CLK_SET_RATE_PARENT,
1414 			.ops = &clk_branch2_ops,
1415 		},
1416 	},
1417 };
1418 
1419 static struct clk_branch camss_csi1pix_clk = {
1420 	.halt_reg = 0x3154,
1421 	.clkr = {
1422 		.enable_reg = 0x3154,
1423 		.enable_mask = BIT(0),
1424 		.hw.init = &(struct clk_init_data){
1425 			.name = "camss_csi1pix_clk",
1426 			.parent_names = (const char *[]){
1427 				"csi1_clk_src",
1428 			},
1429 			.num_parents = 1,
1430 			.flags = CLK_SET_RATE_PARENT,
1431 			.ops = &clk_branch2_ops,
1432 		},
1433 	},
1434 };
1435 
1436 static struct clk_branch camss_csi1rdi_clk = {
1437 	.halt_reg = 0x3144,
1438 	.clkr = {
1439 		.enable_reg = 0x3144,
1440 		.enable_mask = BIT(0),
1441 		.hw.init = &(struct clk_init_data){
1442 			.name = "camss_csi1rdi_clk",
1443 			.parent_names = (const char *[]){
1444 				"csi1_clk_src",
1445 			},
1446 			.num_parents = 1,
1447 			.flags = CLK_SET_RATE_PARENT,
1448 			.ops = &clk_branch2_ops,
1449 		},
1450 	},
1451 };
1452 
1453 static struct clk_branch camss_csi2_ahb_clk = {
1454 	.halt_reg = 0x3188,
1455 	.clkr = {
1456 		.enable_reg = 0x3188,
1457 		.enable_mask = BIT(0),
1458 		.hw.init = &(struct clk_init_data){
1459 			.name = "camss_csi2_ahb_clk",
1460 			.parent_names = (const char *[]){
1461 				"mmss_ahb_clk_src",
1462 			},
1463 			.num_parents = 1,
1464 			.ops = &clk_branch2_ops,
1465 		},
1466 	},
1467 };
1468 
1469 static struct clk_branch camss_csi2_clk = {
1470 	.halt_reg = 0x3184,
1471 	.clkr = {
1472 		.enable_reg = 0x3184,
1473 		.enable_mask = BIT(0),
1474 		.hw.init = &(struct clk_init_data){
1475 			.name = "camss_csi2_clk",
1476 			.parent_names = (const char *[]){
1477 				"csi2_clk_src",
1478 			},
1479 			.num_parents = 1,
1480 			.flags = CLK_SET_RATE_PARENT,
1481 			.ops = &clk_branch2_ops,
1482 		},
1483 	},
1484 };
1485 
1486 static struct clk_branch camss_csi2phy_clk = {
1487 	.halt_reg = 0x3194,
1488 	.clkr = {
1489 		.enable_reg = 0x3194,
1490 		.enable_mask = BIT(0),
1491 		.hw.init = &(struct clk_init_data){
1492 			.name = "camss_csi2phy_clk",
1493 			.parent_names = (const char *[]){
1494 				"csi2_clk_src",
1495 			},
1496 			.num_parents = 1,
1497 			.flags = CLK_SET_RATE_PARENT,
1498 			.ops = &clk_branch2_ops,
1499 		},
1500 	},
1501 };
1502 
1503 static struct clk_branch camss_csi2pix_clk = {
1504 	.halt_reg = 0x31b4,
1505 	.clkr = {
1506 		.enable_reg = 0x31b4,
1507 		.enable_mask = BIT(0),
1508 		.hw.init = &(struct clk_init_data){
1509 			.name = "camss_csi2pix_clk",
1510 			.parent_names = (const char *[]){
1511 				"csi2_clk_src",
1512 			},
1513 			.num_parents = 1,
1514 			.flags = CLK_SET_RATE_PARENT,
1515 			.ops = &clk_branch2_ops,
1516 		},
1517 	},
1518 };
1519 
1520 static struct clk_branch camss_csi2rdi_clk = {
1521 	.halt_reg = 0x31a4,
1522 	.clkr = {
1523 		.enable_reg = 0x31a4,
1524 		.enable_mask = BIT(0),
1525 		.hw.init = &(struct clk_init_data){
1526 			.name = "camss_csi2rdi_clk",
1527 			.parent_names = (const char *[]){
1528 				"csi2_clk_src",
1529 			},
1530 			.num_parents = 1,
1531 			.flags = CLK_SET_RATE_PARENT,
1532 			.ops = &clk_branch2_ops,
1533 		},
1534 	},
1535 };
1536 
1537 static struct clk_branch camss_csi3_ahb_clk = {
1538 	.halt_reg = 0x31e8,
1539 	.clkr = {
1540 		.enable_reg = 0x31e8,
1541 		.enable_mask = BIT(0),
1542 		.hw.init = &(struct clk_init_data){
1543 			.name = "camss_csi3_ahb_clk",
1544 			.parent_names = (const char *[]){
1545 				"mmss_ahb_clk_src",
1546 			},
1547 			.num_parents = 1,
1548 			.ops = &clk_branch2_ops,
1549 		},
1550 	},
1551 };
1552 
1553 static struct clk_branch camss_csi3_clk = {
1554 	.halt_reg = 0x31e4,
1555 	.clkr = {
1556 		.enable_reg = 0x31e4,
1557 		.enable_mask = BIT(0),
1558 		.hw.init = &(struct clk_init_data){
1559 			.name = "camss_csi3_clk",
1560 			.parent_names = (const char *[]){
1561 				"csi3_clk_src",
1562 			},
1563 			.num_parents = 1,
1564 			.flags = CLK_SET_RATE_PARENT,
1565 			.ops = &clk_branch2_ops,
1566 		},
1567 	},
1568 };
1569 
1570 static struct clk_branch camss_csi3phy_clk = {
1571 	.halt_reg = 0x31f4,
1572 	.clkr = {
1573 		.enable_reg = 0x31f4,
1574 		.enable_mask = BIT(0),
1575 		.hw.init = &(struct clk_init_data){
1576 			.name = "camss_csi3phy_clk",
1577 			.parent_names = (const char *[]){
1578 				"csi3_clk_src",
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 camss_csi3pix_clk = {
1588 	.halt_reg = 0x3214,
1589 	.clkr = {
1590 		.enable_reg = 0x3214,
1591 		.enable_mask = BIT(0),
1592 		.hw.init = &(struct clk_init_data){
1593 			.name = "camss_csi3pix_clk",
1594 			.parent_names = (const char *[]){
1595 				"csi3_clk_src",
1596 			},
1597 			.num_parents = 1,
1598 			.flags = CLK_SET_RATE_PARENT,
1599 			.ops = &clk_branch2_ops,
1600 		},
1601 	},
1602 };
1603 
1604 static struct clk_branch camss_csi3rdi_clk = {
1605 	.halt_reg = 0x3204,
1606 	.clkr = {
1607 		.enable_reg = 0x3204,
1608 		.enable_mask = BIT(0),
1609 		.hw.init = &(struct clk_init_data){
1610 			.name = "camss_csi3rdi_clk",
1611 			.parent_names = (const char *[]){
1612 				"csi3_clk_src",
1613 			},
1614 			.num_parents = 1,
1615 			.flags = CLK_SET_RATE_PARENT,
1616 			.ops = &clk_branch2_ops,
1617 		},
1618 	},
1619 };
1620 
1621 static struct clk_branch camss_csi_vfe0_clk = {
1622 	.halt_reg = 0x3704,
1623 	.clkr = {
1624 		.enable_reg = 0x3704,
1625 		.enable_mask = BIT(0),
1626 		.hw.init = &(struct clk_init_data){
1627 			.name = "camss_csi_vfe0_clk",
1628 			.parent_names = (const char *[]){
1629 				"vfe0_clk_src",
1630 			},
1631 			.num_parents = 1,
1632 			.flags = CLK_SET_RATE_PARENT,
1633 			.ops = &clk_branch2_ops,
1634 		},
1635 	},
1636 };
1637 
1638 static struct clk_branch camss_csi_vfe1_clk = {
1639 	.halt_reg = 0x3714,
1640 	.clkr = {
1641 		.enable_reg = 0x3714,
1642 		.enable_mask = BIT(0),
1643 		.hw.init = &(struct clk_init_data){
1644 			.name = "camss_csi_vfe1_clk",
1645 			.parent_names = (const char *[]){
1646 				"vfe1_clk_src",
1647 			},
1648 			.num_parents = 1,
1649 			.flags = CLK_SET_RATE_PARENT,
1650 			.ops = &clk_branch2_ops,
1651 		},
1652 	},
1653 };
1654 
1655 static struct clk_branch camss_gp0_clk = {
1656 	.halt_reg = 0x3444,
1657 	.clkr = {
1658 		.enable_reg = 0x3444,
1659 		.enable_mask = BIT(0),
1660 		.hw.init = &(struct clk_init_data){
1661 			.name = "camss_gp0_clk",
1662 			.parent_names = (const char *[]){
1663 				"camss_gp0_clk_src",
1664 			},
1665 			.num_parents = 1,
1666 			.flags = CLK_SET_RATE_PARENT,
1667 			.ops = &clk_branch2_ops,
1668 		},
1669 	},
1670 };
1671 
1672 static struct clk_branch camss_gp1_clk = {
1673 	.halt_reg = 0x3474,
1674 	.clkr = {
1675 		.enable_reg = 0x3474,
1676 		.enable_mask = BIT(0),
1677 		.hw.init = &(struct clk_init_data){
1678 			.name = "camss_gp1_clk",
1679 			.parent_names = (const char *[]){
1680 				"camss_gp1_clk_src",
1681 			},
1682 			.num_parents = 1,
1683 			.flags = CLK_SET_RATE_PARENT,
1684 			.ops = &clk_branch2_ops,
1685 		},
1686 	},
1687 };
1688 
1689 static struct clk_branch camss_ispif_ahb_clk = {
1690 	.halt_reg = 0x3224,
1691 	.clkr = {
1692 		.enable_reg = 0x3224,
1693 		.enable_mask = BIT(0),
1694 		.hw.init = &(struct clk_init_data){
1695 			.name = "camss_ispif_ahb_clk",
1696 			.parent_names = (const char *[]){
1697 				"mmss_ahb_clk_src",
1698 			},
1699 			.num_parents = 1,
1700 			.flags = CLK_SET_RATE_PARENT,
1701 			.ops = &clk_branch2_ops,
1702 		},
1703 	},
1704 };
1705 
1706 static struct clk_branch camss_jpeg_jpeg0_clk = {
1707 	.halt_reg = 0x35a8,
1708 	.clkr = {
1709 		.enable_reg = 0x35a8,
1710 		.enable_mask = BIT(0),
1711 		.hw.init = &(struct clk_init_data){
1712 			.name = "camss_jpeg_jpeg0_clk",
1713 			.parent_names = (const char *[]){
1714 				"jpeg0_clk_src",
1715 			},
1716 			.num_parents = 1,
1717 			.flags = CLK_SET_RATE_PARENT,
1718 			.ops = &clk_branch2_ops,
1719 		},
1720 	},
1721 };
1722 
1723 static struct clk_branch camss_jpeg_jpeg1_clk = {
1724 	.halt_reg = 0x35ac,
1725 	.clkr = {
1726 		.enable_reg = 0x35ac,
1727 		.enable_mask = BIT(0),
1728 		.hw.init = &(struct clk_init_data){
1729 			.name = "camss_jpeg_jpeg1_clk",
1730 			.parent_names = (const char *[]){
1731 				"jpeg1_clk_src",
1732 			},
1733 			.num_parents = 1,
1734 			.flags = CLK_SET_RATE_PARENT,
1735 			.ops = &clk_branch2_ops,
1736 		},
1737 	},
1738 };
1739 
1740 static struct clk_branch camss_jpeg_jpeg2_clk = {
1741 	.halt_reg = 0x35b0,
1742 	.clkr = {
1743 		.enable_reg = 0x35b0,
1744 		.enable_mask = BIT(0),
1745 		.hw.init = &(struct clk_init_data){
1746 			.name = "camss_jpeg_jpeg2_clk",
1747 			.parent_names = (const char *[]){
1748 				"jpeg2_clk_src",
1749 			},
1750 			.num_parents = 1,
1751 			.flags = CLK_SET_RATE_PARENT,
1752 			.ops = &clk_branch2_ops,
1753 		},
1754 	},
1755 };
1756 
1757 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1758 	.halt_reg = 0x35b4,
1759 	.clkr = {
1760 		.enable_reg = 0x35b4,
1761 		.enable_mask = BIT(0),
1762 		.hw.init = &(struct clk_init_data){
1763 			.name = "camss_jpeg_jpeg_ahb_clk",
1764 			.parent_names = (const char *[]){
1765 				"mmss_ahb_clk_src",
1766 			},
1767 			.num_parents = 1,
1768 			.ops = &clk_branch2_ops,
1769 		},
1770 	},
1771 };
1772 
1773 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1774 	.halt_reg = 0x35b8,
1775 	.clkr = {
1776 		.enable_reg = 0x35b8,
1777 		.enable_mask = BIT(0),
1778 		.hw.init = &(struct clk_init_data){
1779 			.name = "camss_jpeg_jpeg_axi_clk",
1780 			.parent_names = (const char *[]){
1781 				"mmss_axi_clk_src",
1782 			},
1783 			.num_parents = 1,
1784 			.ops = &clk_branch2_ops,
1785 		},
1786 	},
1787 };
1788 
1789 static struct clk_branch camss_mclk0_clk = {
1790 	.halt_reg = 0x3384,
1791 	.clkr = {
1792 		.enable_reg = 0x3384,
1793 		.enable_mask = BIT(0),
1794 		.hw.init = &(struct clk_init_data){
1795 			.name = "camss_mclk0_clk",
1796 			.parent_names = (const char *[]){
1797 				"mclk0_clk_src",
1798 			},
1799 			.num_parents = 1,
1800 			.flags = CLK_SET_RATE_PARENT,
1801 			.ops = &clk_branch2_ops,
1802 		},
1803 	},
1804 };
1805 
1806 static struct clk_branch camss_mclk1_clk = {
1807 	.halt_reg = 0x33b4,
1808 	.clkr = {
1809 		.enable_reg = 0x33b4,
1810 		.enable_mask = BIT(0),
1811 		.hw.init = &(struct clk_init_data){
1812 			.name = "camss_mclk1_clk",
1813 			.parent_names = (const char *[]){
1814 				"mclk1_clk_src",
1815 			},
1816 			.num_parents = 1,
1817 			.flags = CLK_SET_RATE_PARENT,
1818 			.ops = &clk_branch2_ops,
1819 		},
1820 	},
1821 };
1822 
1823 static struct clk_branch camss_mclk2_clk = {
1824 	.halt_reg = 0x33e4,
1825 	.clkr = {
1826 		.enable_reg = 0x33e4,
1827 		.enable_mask = BIT(0),
1828 		.hw.init = &(struct clk_init_data){
1829 			.name = "camss_mclk2_clk",
1830 			.parent_names = (const char *[]){
1831 				"mclk2_clk_src",
1832 			},
1833 			.num_parents = 1,
1834 			.flags = CLK_SET_RATE_PARENT,
1835 			.ops = &clk_branch2_ops,
1836 		},
1837 	},
1838 };
1839 
1840 static struct clk_branch camss_mclk3_clk = {
1841 	.halt_reg = 0x3414,
1842 	.clkr = {
1843 		.enable_reg = 0x3414,
1844 		.enable_mask = BIT(0),
1845 		.hw.init = &(struct clk_init_data){
1846 			.name = "camss_mclk3_clk",
1847 			.parent_names = (const char *[]){
1848 				"mclk3_clk_src",
1849 			},
1850 			.num_parents = 1,
1851 			.flags = CLK_SET_RATE_PARENT,
1852 			.ops = &clk_branch2_ops,
1853 		},
1854 	},
1855 };
1856 
1857 static struct clk_branch camss_micro_ahb_clk = {
1858 	.halt_reg = 0x3494,
1859 	.clkr = {
1860 		.enable_reg = 0x3494,
1861 		.enable_mask = BIT(0),
1862 		.hw.init = &(struct clk_init_data){
1863 			.name = "camss_micro_ahb_clk",
1864 			.parent_names = (const char *[]){
1865 				"mmss_ahb_clk_src",
1866 			},
1867 			.num_parents = 1,
1868 			.ops = &clk_branch2_ops,
1869 		},
1870 	},
1871 };
1872 
1873 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1874 	.halt_reg = 0x3024,
1875 	.clkr = {
1876 		.enable_reg = 0x3024,
1877 		.enable_mask = BIT(0),
1878 		.hw.init = &(struct clk_init_data){
1879 			.name = "camss_phy0_csi0phytimer_clk",
1880 			.parent_names = (const char *[]){
1881 				"csi0phytimer_clk_src",
1882 			},
1883 			.num_parents = 1,
1884 			.flags = CLK_SET_RATE_PARENT,
1885 			.ops = &clk_branch2_ops,
1886 		},
1887 	},
1888 };
1889 
1890 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1891 	.halt_reg = 0x3054,
1892 	.clkr = {
1893 		.enable_reg = 0x3054,
1894 		.enable_mask = BIT(0),
1895 		.hw.init = &(struct clk_init_data){
1896 			.name = "camss_phy1_csi1phytimer_clk",
1897 			.parent_names = (const char *[]){
1898 				"csi1phytimer_clk_src",
1899 			},
1900 			.num_parents = 1,
1901 			.flags = CLK_SET_RATE_PARENT,
1902 			.ops = &clk_branch2_ops,
1903 		},
1904 	},
1905 };
1906 
1907 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1908 	.halt_reg = 0x3084,
1909 	.clkr = {
1910 		.enable_reg = 0x3084,
1911 		.enable_mask = BIT(0),
1912 		.hw.init = &(struct clk_init_data){
1913 			.name = "camss_phy2_csi2phytimer_clk",
1914 			.parent_names = (const char *[]){
1915 				"csi2phytimer_clk_src",
1916 			},
1917 			.num_parents = 1,
1918 			.flags = CLK_SET_RATE_PARENT,
1919 			.ops = &clk_branch2_ops,
1920 		},
1921 	},
1922 };
1923 
1924 static struct clk_branch camss_top_ahb_clk = {
1925 	.halt_reg = 0x3484,
1926 	.clkr = {
1927 		.enable_reg = 0x3484,
1928 		.enable_mask = BIT(0),
1929 		.hw.init = &(struct clk_init_data){
1930 			.name = "camss_top_ahb_clk",
1931 			.parent_names = (const char *[]){
1932 				"mmss_ahb_clk_src",
1933 			},
1934 			.num_parents = 1,
1935 			.flags = CLK_SET_RATE_PARENT,
1936 			.ops = &clk_branch2_ops,
1937 		},
1938 	},
1939 };
1940 
1941 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1942 	.halt_reg = 0x36b4,
1943 	.clkr = {
1944 		.enable_reg = 0x36b4,
1945 		.enable_mask = BIT(0),
1946 		.hw.init = &(struct clk_init_data){
1947 			.name = "camss_vfe_cpp_ahb_clk",
1948 			.parent_names = (const char *[]){
1949 				"mmss_ahb_clk_src",
1950 			},
1951 			.num_parents = 1,
1952 			.flags = CLK_SET_RATE_PARENT,
1953 			.ops = &clk_branch2_ops,
1954 		},
1955 	},
1956 };
1957 
1958 static struct clk_branch camss_vfe_cpp_clk = {
1959 	.halt_reg = 0x36b0,
1960 	.clkr = {
1961 		.enable_reg = 0x36b0,
1962 		.enable_mask = BIT(0),
1963 		.hw.init = &(struct clk_init_data){
1964 			.name = "camss_vfe_cpp_clk",
1965 			.parent_names = (const char *[]){
1966 				"cpp_clk_src",
1967 			},
1968 			.num_parents = 1,
1969 			.flags = CLK_SET_RATE_PARENT,
1970 			.ops = &clk_branch2_ops,
1971 		},
1972 	},
1973 };
1974 
1975 static struct clk_branch camss_vfe_vfe0_clk = {
1976 	.halt_reg = 0x36a8,
1977 	.clkr = {
1978 		.enable_reg = 0x36a8,
1979 		.enable_mask = BIT(0),
1980 		.hw.init = &(struct clk_init_data){
1981 			.name = "camss_vfe_vfe0_clk",
1982 			.parent_names = (const char *[]){
1983 				"vfe0_clk_src",
1984 			},
1985 			.num_parents = 1,
1986 			.flags = CLK_SET_RATE_PARENT,
1987 			.ops = &clk_branch2_ops,
1988 		},
1989 	},
1990 };
1991 
1992 static struct clk_branch camss_vfe_vfe1_clk = {
1993 	.halt_reg = 0x36ac,
1994 	.clkr = {
1995 		.enable_reg = 0x36ac,
1996 		.enable_mask = BIT(0),
1997 		.hw.init = &(struct clk_init_data){
1998 			.name = "camss_vfe_vfe1_clk",
1999 			.parent_names = (const char *[]){
2000 				"vfe1_clk_src",
2001 			},
2002 			.num_parents = 1,
2003 			.flags = CLK_SET_RATE_PARENT,
2004 			.ops = &clk_branch2_ops,
2005 		},
2006 	},
2007 };
2008 
2009 static struct clk_branch camss_vfe_vfe_ahb_clk = {
2010 	.halt_reg = 0x36b8,
2011 	.clkr = {
2012 		.enable_reg = 0x36b8,
2013 		.enable_mask = BIT(0),
2014 		.hw.init = &(struct clk_init_data){
2015 			.name = "camss_vfe_vfe_ahb_clk",
2016 			.parent_names = (const char *[]){
2017 				"mmss_ahb_clk_src",
2018 			},
2019 			.num_parents = 1,
2020 			.flags = CLK_SET_RATE_PARENT,
2021 			.ops = &clk_branch2_ops,
2022 		},
2023 	},
2024 };
2025 
2026 static struct clk_branch camss_vfe_vfe_axi_clk = {
2027 	.halt_reg = 0x36bc,
2028 	.clkr = {
2029 		.enable_reg = 0x36bc,
2030 		.enable_mask = BIT(0),
2031 		.hw.init = &(struct clk_init_data){
2032 			.name = "camss_vfe_vfe_axi_clk",
2033 			.parent_names = (const char *[]){
2034 				"mmss_axi_clk_src",
2035 			},
2036 			.num_parents = 1,
2037 			.flags = CLK_SET_RATE_PARENT,
2038 			.ops = &clk_branch2_ops,
2039 		},
2040 	},
2041 };
2042 
2043 static struct clk_branch mdss_ahb_clk = {
2044 	.halt_reg = 0x2308,
2045 	.clkr = {
2046 		.enable_reg = 0x2308,
2047 		.enable_mask = BIT(0),
2048 		.hw.init = &(struct clk_init_data){
2049 			.name = "mdss_ahb_clk",
2050 			.parent_names = (const char *[]){
2051 				"mmss_ahb_clk_src",
2052 			},
2053 			.num_parents = 1,
2054 			.flags = CLK_SET_RATE_PARENT,
2055 			.ops = &clk_branch2_ops,
2056 		},
2057 	},
2058 };
2059 
2060 static struct clk_branch mdss_axi_clk = {
2061 	.halt_reg = 0x2310,
2062 	.clkr = {
2063 		.enable_reg = 0x2310,
2064 		.enable_mask = BIT(0),
2065 		.hw.init = &(struct clk_init_data){
2066 			.name = "mdss_axi_clk",
2067 			.parent_names = (const char *[]){
2068 				"mmss_axi_clk_src",
2069 			},
2070 			.num_parents = 1,
2071 			.flags = CLK_SET_RATE_PARENT,
2072 			.ops = &clk_branch2_ops,
2073 		},
2074 	},
2075 };
2076 
2077 static struct clk_branch mdss_byte0_clk = {
2078 	.halt_reg = 0x233c,
2079 	.clkr = {
2080 		.enable_reg = 0x233c,
2081 		.enable_mask = BIT(0),
2082 		.hw.init = &(struct clk_init_data){
2083 			.name = "mdss_byte0_clk",
2084 			.parent_names = (const char *[]){
2085 				"byte0_clk_src",
2086 			},
2087 			.num_parents = 1,
2088 			.flags = CLK_SET_RATE_PARENT,
2089 			.ops = &clk_branch2_ops,
2090 		},
2091 	},
2092 };
2093 
2094 static struct clk_branch mdss_byte1_clk = {
2095 	.halt_reg = 0x2340,
2096 	.clkr = {
2097 		.enable_reg = 0x2340,
2098 		.enable_mask = BIT(0),
2099 		.hw.init = &(struct clk_init_data){
2100 			.name = "mdss_byte1_clk",
2101 			.parent_names = (const char *[]){
2102 				"byte1_clk_src",
2103 			},
2104 			.num_parents = 1,
2105 			.flags = CLK_SET_RATE_PARENT,
2106 			.ops = &clk_branch2_ops,
2107 		},
2108 	},
2109 };
2110 
2111 static struct clk_branch mdss_edpaux_clk = {
2112 	.halt_reg = 0x2334,
2113 	.clkr = {
2114 		.enable_reg = 0x2334,
2115 		.enable_mask = BIT(0),
2116 		.hw.init = &(struct clk_init_data){
2117 			.name = "mdss_edpaux_clk",
2118 			.parent_names = (const char *[]){
2119 				"edpaux_clk_src",
2120 			},
2121 			.num_parents = 1,
2122 			.flags = CLK_SET_RATE_PARENT,
2123 			.ops = &clk_branch2_ops,
2124 		},
2125 	},
2126 };
2127 
2128 static struct clk_branch mdss_edplink_clk = {
2129 	.halt_reg = 0x2330,
2130 	.clkr = {
2131 		.enable_reg = 0x2330,
2132 		.enable_mask = BIT(0),
2133 		.hw.init = &(struct clk_init_data){
2134 			.name = "mdss_edplink_clk",
2135 			.parent_names = (const char *[]){
2136 				"edplink_clk_src",
2137 			},
2138 			.num_parents = 1,
2139 			.flags = CLK_SET_RATE_PARENT,
2140 			.ops = &clk_branch2_ops,
2141 		},
2142 	},
2143 };
2144 
2145 static struct clk_branch mdss_edppixel_clk = {
2146 	.halt_reg = 0x232c,
2147 	.clkr = {
2148 		.enable_reg = 0x232c,
2149 		.enable_mask = BIT(0),
2150 		.hw.init = &(struct clk_init_data){
2151 			.name = "mdss_edppixel_clk",
2152 			.parent_names = (const char *[]){
2153 				"edppixel_clk_src",
2154 			},
2155 			.num_parents = 1,
2156 			.flags = CLK_SET_RATE_PARENT,
2157 			.ops = &clk_branch2_ops,
2158 		},
2159 	},
2160 };
2161 
2162 static struct clk_branch mdss_esc0_clk = {
2163 	.halt_reg = 0x2344,
2164 	.clkr = {
2165 		.enable_reg = 0x2344,
2166 		.enable_mask = BIT(0),
2167 		.hw.init = &(struct clk_init_data){
2168 			.name = "mdss_esc0_clk",
2169 			.parent_names = (const char *[]){
2170 				"esc0_clk_src",
2171 			},
2172 			.num_parents = 1,
2173 			.flags = CLK_SET_RATE_PARENT,
2174 			.ops = &clk_branch2_ops,
2175 		},
2176 	},
2177 };
2178 
2179 static struct clk_branch mdss_esc1_clk = {
2180 	.halt_reg = 0x2348,
2181 	.clkr = {
2182 		.enable_reg = 0x2348,
2183 		.enable_mask = BIT(0),
2184 		.hw.init = &(struct clk_init_data){
2185 			.name = "mdss_esc1_clk",
2186 			.parent_names = (const char *[]){
2187 				"esc1_clk_src",
2188 			},
2189 			.num_parents = 1,
2190 			.flags = CLK_SET_RATE_PARENT,
2191 			.ops = &clk_branch2_ops,
2192 		},
2193 	},
2194 };
2195 
2196 static struct clk_branch mdss_extpclk_clk = {
2197 	.halt_reg = 0x2324,
2198 	.clkr = {
2199 		.enable_reg = 0x2324,
2200 		.enable_mask = BIT(0),
2201 		.hw.init = &(struct clk_init_data){
2202 			.name = "mdss_extpclk_clk",
2203 			.parent_names = (const char *[]){
2204 				"extpclk_clk_src",
2205 			},
2206 			.num_parents = 1,
2207 			.flags = CLK_SET_RATE_PARENT,
2208 			.ops = &clk_branch2_ops,
2209 		},
2210 	},
2211 };
2212 
2213 static struct clk_branch mdss_hdmi_ahb_clk = {
2214 	.halt_reg = 0x230c,
2215 	.clkr = {
2216 		.enable_reg = 0x230c,
2217 		.enable_mask = BIT(0),
2218 		.hw.init = &(struct clk_init_data){
2219 			.name = "mdss_hdmi_ahb_clk",
2220 			.parent_names = (const char *[]){
2221 				"mmss_ahb_clk_src",
2222 			},
2223 			.num_parents = 1,
2224 			.flags = CLK_SET_RATE_PARENT,
2225 			.ops = &clk_branch2_ops,
2226 		},
2227 	},
2228 };
2229 
2230 static struct clk_branch mdss_hdmi_clk = {
2231 	.halt_reg = 0x2338,
2232 	.clkr = {
2233 		.enable_reg = 0x2338,
2234 		.enable_mask = BIT(0),
2235 		.hw.init = &(struct clk_init_data){
2236 			.name = "mdss_hdmi_clk",
2237 			.parent_names = (const char *[]){
2238 				"hdmi_clk_src",
2239 			},
2240 			.num_parents = 1,
2241 			.flags = CLK_SET_RATE_PARENT,
2242 			.ops = &clk_branch2_ops,
2243 		},
2244 	},
2245 };
2246 
2247 static struct clk_branch mdss_mdp_clk = {
2248 	.halt_reg = 0x231c,
2249 	.clkr = {
2250 		.enable_reg = 0x231c,
2251 		.enable_mask = BIT(0),
2252 		.hw.init = &(struct clk_init_data){
2253 			.name = "mdss_mdp_clk",
2254 			.parent_names = (const char *[]){
2255 				"mdp_clk_src",
2256 			},
2257 			.num_parents = 1,
2258 			.flags = CLK_SET_RATE_PARENT,
2259 			.ops = &clk_branch2_ops,
2260 		},
2261 	},
2262 };
2263 
2264 static struct clk_branch mdss_mdp_lut_clk = {
2265 	.halt_reg = 0x2320,
2266 	.clkr = {
2267 		.enable_reg = 0x2320,
2268 		.enable_mask = BIT(0),
2269 		.hw.init = &(struct clk_init_data){
2270 			.name = "mdss_mdp_lut_clk",
2271 			.parent_names = (const char *[]){
2272 				"mdp_clk_src",
2273 			},
2274 			.num_parents = 1,
2275 			.flags = CLK_SET_RATE_PARENT,
2276 			.ops = &clk_branch2_ops,
2277 		},
2278 	},
2279 };
2280 
2281 static struct clk_branch mdss_pclk0_clk = {
2282 	.halt_reg = 0x2314,
2283 	.clkr = {
2284 		.enable_reg = 0x2314,
2285 		.enable_mask = BIT(0),
2286 		.hw.init = &(struct clk_init_data){
2287 			.name = "mdss_pclk0_clk",
2288 			.parent_names = (const char *[]){
2289 				"pclk0_clk_src",
2290 			},
2291 			.num_parents = 1,
2292 			.flags = CLK_SET_RATE_PARENT,
2293 			.ops = &clk_branch2_ops,
2294 		},
2295 	},
2296 };
2297 
2298 static struct clk_branch mdss_pclk1_clk = {
2299 	.halt_reg = 0x2318,
2300 	.clkr = {
2301 		.enable_reg = 0x2318,
2302 		.enable_mask = BIT(0),
2303 		.hw.init = &(struct clk_init_data){
2304 			.name = "mdss_pclk1_clk",
2305 			.parent_names = (const char *[]){
2306 				"pclk1_clk_src",
2307 			},
2308 			.num_parents = 1,
2309 			.flags = CLK_SET_RATE_PARENT,
2310 			.ops = &clk_branch2_ops,
2311 		},
2312 	},
2313 };
2314 
2315 static struct clk_branch mdss_vsync_clk = {
2316 	.halt_reg = 0x2328,
2317 	.clkr = {
2318 		.enable_reg = 0x2328,
2319 		.enable_mask = BIT(0),
2320 		.hw.init = &(struct clk_init_data){
2321 			.name = "mdss_vsync_clk",
2322 			.parent_names = (const char *[]){
2323 				"vsync_clk_src",
2324 			},
2325 			.num_parents = 1,
2326 			.flags = CLK_SET_RATE_PARENT,
2327 			.ops = &clk_branch2_ops,
2328 		},
2329 	},
2330 };
2331 
2332 static struct clk_branch mmss_rbcpr_ahb_clk = {
2333 	.halt_reg = 0x4088,
2334 	.clkr = {
2335 		.enable_reg = 0x4088,
2336 		.enable_mask = BIT(0),
2337 		.hw.init = &(struct clk_init_data){
2338 			.name = "mmss_rbcpr_ahb_clk",
2339 			.parent_names = (const char *[]){
2340 				"mmss_ahb_clk_src",
2341 			},
2342 			.num_parents = 1,
2343 			.flags = CLK_SET_RATE_PARENT,
2344 			.ops = &clk_branch2_ops,
2345 		},
2346 	},
2347 };
2348 
2349 static struct clk_branch mmss_rbcpr_clk = {
2350 	.halt_reg = 0x4084,
2351 	.clkr = {
2352 		.enable_reg = 0x4084,
2353 		.enable_mask = BIT(0),
2354 		.hw.init = &(struct clk_init_data){
2355 			.name = "mmss_rbcpr_clk",
2356 			.parent_names = (const char *[]){
2357 				"rbcpr_clk_src",
2358 			},
2359 			.num_parents = 1,
2360 			.flags = CLK_SET_RATE_PARENT,
2361 			.ops = &clk_branch2_ops,
2362 		},
2363 	},
2364 };
2365 
2366 static struct clk_branch mmss_spdm_ahb_clk = {
2367 	.halt_reg = 0x0230,
2368 	.clkr = {
2369 		.enable_reg = 0x0230,
2370 		.enable_mask = BIT(0),
2371 		.hw.init = &(struct clk_init_data){
2372 			.name = "mmss_spdm_ahb_clk",
2373 			.parent_names = (const char *[]){
2374 				"mmss_spdm_ahb_div_clk",
2375 			},
2376 			.num_parents = 1,
2377 			.flags = CLK_SET_RATE_PARENT,
2378 			.ops = &clk_branch2_ops,
2379 		},
2380 	},
2381 };
2382 
2383 static struct clk_branch mmss_spdm_axi_clk = {
2384 	.halt_reg = 0x0210,
2385 	.clkr = {
2386 		.enable_reg = 0x0210,
2387 		.enable_mask = BIT(0),
2388 		.hw.init = &(struct clk_init_data){
2389 			.name = "mmss_spdm_axi_clk",
2390 			.parent_names = (const char *[]){
2391 				"mmss_spdm_axi_div_clk",
2392 			},
2393 			.num_parents = 1,
2394 			.flags = CLK_SET_RATE_PARENT,
2395 			.ops = &clk_branch2_ops,
2396 		},
2397 	},
2398 };
2399 
2400 static struct clk_branch mmss_spdm_csi0_clk = {
2401 	.halt_reg = 0x023c,
2402 	.clkr = {
2403 		.enable_reg = 0x023c,
2404 		.enable_mask = BIT(0),
2405 		.hw.init = &(struct clk_init_data){
2406 			.name = "mmss_spdm_csi0_clk",
2407 			.parent_names = (const char *[]){
2408 				"mmss_spdm_csi0_div_clk",
2409 			},
2410 			.num_parents = 1,
2411 			.flags = CLK_SET_RATE_PARENT,
2412 			.ops = &clk_branch2_ops,
2413 		},
2414 	},
2415 };
2416 
2417 static struct clk_branch mmss_spdm_gfx3d_clk = {
2418 	.halt_reg = 0x022c,
2419 	.clkr = {
2420 		.enable_reg = 0x022c,
2421 		.enable_mask = BIT(0),
2422 		.hw.init = &(struct clk_init_data){
2423 			.name = "mmss_spdm_gfx3d_clk",
2424 			.parent_names = (const char *[]){
2425 				"mmss_spdm_gfx3d_div_clk",
2426 			},
2427 			.num_parents = 1,
2428 			.flags = CLK_SET_RATE_PARENT,
2429 			.ops = &clk_branch2_ops,
2430 		},
2431 	},
2432 };
2433 
2434 static struct clk_branch mmss_spdm_jpeg0_clk = {
2435 	.halt_reg = 0x0204,
2436 	.clkr = {
2437 		.enable_reg = 0x0204,
2438 		.enable_mask = BIT(0),
2439 		.hw.init = &(struct clk_init_data){
2440 			.name = "mmss_spdm_jpeg0_clk",
2441 			.parent_names = (const char *[]){
2442 				"mmss_spdm_jpeg0_div_clk",
2443 			},
2444 			.num_parents = 1,
2445 			.flags = CLK_SET_RATE_PARENT,
2446 			.ops = &clk_branch2_ops,
2447 		},
2448 	},
2449 };
2450 
2451 static struct clk_branch mmss_spdm_jpeg1_clk = {
2452 	.halt_reg = 0x0208,
2453 	.clkr = {
2454 		.enable_reg = 0x0208,
2455 		.enable_mask = BIT(0),
2456 		.hw.init = &(struct clk_init_data){
2457 			.name = "mmss_spdm_jpeg1_clk",
2458 			.parent_names = (const char *[]){
2459 				"mmss_spdm_jpeg1_div_clk",
2460 			},
2461 			.num_parents = 1,
2462 			.flags = CLK_SET_RATE_PARENT,
2463 			.ops = &clk_branch2_ops,
2464 		},
2465 	},
2466 };
2467 
2468 static struct clk_branch mmss_spdm_jpeg2_clk = {
2469 	.halt_reg = 0x0224,
2470 	.clkr = {
2471 		.enable_reg = 0x0224,
2472 		.enable_mask = BIT(0),
2473 		.hw.init = &(struct clk_init_data){
2474 			.name = "mmss_spdm_jpeg2_clk",
2475 			.parent_names = (const char *[]){
2476 				"mmss_spdm_jpeg2_div_clk",
2477 			},
2478 			.num_parents = 1,
2479 			.flags = CLK_SET_RATE_PARENT,
2480 			.ops = &clk_branch2_ops,
2481 		},
2482 	},
2483 };
2484 
2485 static struct clk_branch mmss_spdm_mdp_clk = {
2486 	.halt_reg = 0x020c,
2487 	.clkr = {
2488 		.enable_reg = 0x020c,
2489 		.enable_mask = BIT(0),
2490 		.hw.init = &(struct clk_init_data){
2491 			.name = "mmss_spdm_mdp_clk",
2492 			.parent_names = (const char *[]){
2493 				"mmss_spdm_mdp_div_clk",
2494 			},
2495 			.num_parents = 1,
2496 			.flags = CLK_SET_RATE_PARENT,
2497 			.ops = &clk_branch2_ops,
2498 		},
2499 	},
2500 };
2501 
2502 static struct clk_branch mmss_spdm_pclk0_clk = {
2503 	.halt_reg = 0x0234,
2504 	.clkr = {
2505 		.enable_reg = 0x0234,
2506 		.enable_mask = BIT(0),
2507 		.hw.init = &(struct clk_init_data){
2508 			.name = "mmss_spdm_pclk0_clk",
2509 			.parent_names = (const char *[]){
2510 				"mmss_spdm_pclk0_div_clk",
2511 			},
2512 			.num_parents = 1,
2513 			.flags = CLK_SET_RATE_PARENT,
2514 			.ops = &clk_branch2_ops,
2515 		},
2516 	},
2517 };
2518 
2519 static struct clk_branch mmss_spdm_pclk1_clk = {
2520 	.halt_reg = 0x0228,
2521 	.clkr = {
2522 		.enable_reg = 0x0228,
2523 		.enable_mask = BIT(0),
2524 		.hw.init = &(struct clk_init_data){
2525 			.name = "mmss_spdm_pclk1_clk",
2526 			.parent_names = (const char *[]){
2527 				"mmss_spdm_pclk1_div_clk",
2528 			},
2529 			.num_parents = 1,
2530 			.flags = CLK_SET_RATE_PARENT,
2531 			.ops = &clk_branch2_ops,
2532 		},
2533 	},
2534 };
2535 
2536 static struct clk_branch mmss_spdm_vcodec0_clk = {
2537 	.halt_reg = 0x0214,
2538 	.clkr = {
2539 		.enable_reg = 0x0214,
2540 		.enable_mask = BIT(0),
2541 		.hw.init = &(struct clk_init_data){
2542 			.name = "mmss_spdm_vcodec0_clk",
2543 			.parent_names = (const char *[]){
2544 				"mmss_spdm_vcodec0_div_clk",
2545 			},
2546 			.num_parents = 1,
2547 			.flags = CLK_SET_RATE_PARENT,
2548 			.ops = &clk_branch2_ops,
2549 		},
2550 	},
2551 };
2552 
2553 static struct clk_branch mmss_spdm_vfe0_clk = {
2554 	.halt_reg = 0x0218,
2555 	.clkr = {
2556 		.enable_reg = 0x0218,
2557 		.enable_mask = BIT(0),
2558 		.hw.init = &(struct clk_init_data){
2559 			.name = "mmss_spdm_vfe0_clk",
2560 			.parent_names = (const char *[]){
2561 				"mmss_spdm_vfe0_div_clk",
2562 			},
2563 			.num_parents = 1,
2564 			.flags = CLK_SET_RATE_PARENT,
2565 			.ops = &clk_branch2_ops,
2566 		},
2567 	},
2568 };
2569 
2570 static struct clk_branch mmss_spdm_vfe1_clk = {
2571 	.halt_reg = 0x021c,
2572 	.clkr = {
2573 		.enable_reg = 0x021c,
2574 		.enable_mask = BIT(0),
2575 		.hw.init = &(struct clk_init_data){
2576 			.name = "mmss_spdm_vfe1_clk",
2577 			.parent_names = (const char *[]){
2578 				"mmss_spdm_vfe1_div_clk",
2579 			},
2580 			.num_parents = 1,
2581 			.flags = CLK_SET_RATE_PARENT,
2582 			.ops = &clk_branch2_ops,
2583 		},
2584 	},
2585 };
2586 
2587 static struct clk_branch mmss_spdm_rm_axi_clk = {
2588 	.halt_reg = 0x0304,
2589 	.clkr = {
2590 		.enable_reg = 0x0304,
2591 		.enable_mask = BIT(0),
2592 		.hw.init = &(struct clk_init_data){
2593 			.name = "mmss_spdm_rm_axi_clk",
2594 			.parent_names = (const char *[]){
2595 				"mmss_axi_clk_src",
2596 			},
2597 			.num_parents = 1,
2598 			.flags = CLK_SET_RATE_PARENT,
2599 			.ops = &clk_branch2_ops,
2600 		},
2601 	},
2602 };
2603 
2604 static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = {
2605 	.halt_reg = 0x0308,
2606 	.clkr = {
2607 		.enable_reg = 0x0308,
2608 		.enable_mask = BIT(0),
2609 		.hw.init = &(struct clk_init_data){
2610 			.name = "mmss_spdm_rm_ocmemnoc_clk",
2611 			.parent_names = (const char *[]){
2612 				"ocmemnoc_clk_src",
2613 			},
2614 			.num_parents = 1,
2615 			.flags = CLK_SET_RATE_PARENT,
2616 			.ops = &clk_branch2_ops,
2617 		},
2618 	},
2619 };
2620 
2621 
2622 static struct clk_branch mmss_misc_ahb_clk = {
2623 	.halt_reg = 0x502c,
2624 	.clkr = {
2625 		.enable_reg = 0x502c,
2626 		.enable_mask = BIT(0),
2627 		.hw.init = &(struct clk_init_data){
2628 			.name = "mmss_misc_ahb_clk",
2629 			.parent_names = (const char *[]){
2630 				"mmss_ahb_clk_src",
2631 			},
2632 			.num_parents = 1,
2633 			.flags = CLK_SET_RATE_PARENT,
2634 			.ops = &clk_branch2_ops,
2635 		},
2636 	},
2637 };
2638 
2639 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2640 	.halt_reg = 0x5024,
2641 	.clkr = {
2642 		.enable_reg = 0x5024,
2643 		.enable_mask = BIT(0),
2644 		.hw.init = &(struct clk_init_data){
2645 			.name = "mmss_mmssnoc_ahb_clk",
2646 			.parent_names = (const char *[]){
2647 				"mmss_ahb_clk_src",
2648 			},
2649 			.num_parents = 1,
2650 			.ops = &clk_branch2_ops,
2651 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2652 		},
2653 	},
2654 };
2655 
2656 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2657 	.halt_reg = 0x5028,
2658 	.clkr = {
2659 		.enable_reg = 0x5028,
2660 		.enable_mask = BIT(0),
2661 		.hw.init = &(struct clk_init_data){
2662 			.name = "mmss_mmssnoc_bto_ahb_clk",
2663 			.parent_names = (const char *[]){
2664 				"mmss_ahb_clk_src",
2665 			},
2666 			.num_parents = 1,
2667 			.ops = &clk_branch2_ops,
2668 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2669 		},
2670 	},
2671 };
2672 
2673 static struct clk_branch mmss_mmssnoc_axi_clk = {
2674 	.halt_reg = 0x506c,
2675 	.clkr = {
2676 		.enable_reg = 0x506c,
2677 		.enable_mask = BIT(0),
2678 		.hw.init = &(struct clk_init_data){
2679 			.name = "mmss_mmssnoc_axi_clk",
2680 			.parent_names = (const char *[]){
2681 				"mmss_axi_clk_src",
2682 			},
2683 			.num_parents = 1,
2684 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2685 			.ops = &clk_branch2_ops,
2686 		},
2687 	},
2688 };
2689 
2690 static struct clk_branch mmss_s0_axi_clk = {
2691 	.halt_reg = 0x5064,
2692 	.clkr = {
2693 		.enable_reg = 0x5064,
2694 		.enable_mask = BIT(0),
2695 		.hw.init = &(struct clk_init_data){
2696 			.name = "mmss_s0_axi_clk",
2697 			.parent_names = (const char *[]){
2698 				"mmss_axi_clk_src",
2699 			},
2700 			.num_parents = 1,
2701 			.ops = &clk_branch2_ops,
2702 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2703 		},
2704 	},
2705 };
2706 
2707 static struct clk_branch ocmemcx_ahb_clk = {
2708 	.halt_reg = 0x405c,
2709 	.clkr = {
2710 		.enable_reg = 0x405c,
2711 		.enable_mask = BIT(0),
2712 		.hw.init = &(struct clk_init_data){
2713 			.name = "ocmemcx_ahb_clk",
2714 			.parent_names = (const char *[]){
2715 				"mmss_ahb_clk_src",
2716 			},
2717 			.num_parents = 1,
2718 			.flags = CLK_SET_RATE_PARENT,
2719 			.ops = &clk_branch2_ops,
2720 		},
2721 	},
2722 };
2723 
2724 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2725 	.halt_reg = 0x4058,
2726 	.clkr = {
2727 		.enable_reg = 0x4058,
2728 		.enable_mask = BIT(0),
2729 		.hw.init = &(struct clk_init_data){
2730 			.name = "ocmemcx_ocmemnoc_clk",
2731 			.parent_names = (const char *[]){
2732 				"ocmemnoc_clk_src",
2733 			},
2734 			.num_parents = 1,
2735 			.flags = CLK_SET_RATE_PARENT,
2736 			.ops = &clk_branch2_ops,
2737 		},
2738 	},
2739 };
2740 
2741 static struct clk_branch oxili_ocmemgx_clk = {
2742 	.halt_reg = 0x402c,
2743 	.clkr = {
2744 		.enable_reg = 0x402c,
2745 		.enable_mask = BIT(0),
2746 		.hw.init = &(struct clk_init_data){
2747 			.name = "oxili_ocmemgx_clk",
2748 			.parent_names = (const char *[]){
2749 				"gfx3d_clk_src",
2750 			},
2751 			.num_parents = 1,
2752 			.flags = CLK_SET_RATE_PARENT,
2753 			.ops = &clk_branch2_ops,
2754 		},
2755 	},
2756 };
2757 
2758 static struct clk_branch oxili_gfx3d_clk = {
2759 	.halt_reg = 0x4028,
2760 	.clkr = {
2761 		.enable_reg = 0x4028,
2762 		.enable_mask = BIT(0),
2763 		.hw.init = &(struct clk_init_data){
2764 			.name = "oxili_gfx3d_clk",
2765 			.parent_names = (const char *[]){
2766 				"gfx3d_clk_src",
2767 			},
2768 			.num_parents = 1,
2769 			.flags = CLK_SET_RATE_PARENT,
2770 			.ops = &clk_branch2_ops,
2771 		},
2772 	},
2773 };
2774 
2775 static struct clk_branch oxili_rbbmtimer_clk = {
2776 	.halt_reg = 0x40b0,
2777 	.clkr = {
2778 		.enable_reg = 0x40b0,
2779 		.enable_mask = BIT(0),
2780 		.hw.init = &(struct clk_init_data){
2781 			.name = "oxili_rbbmtimer_clk",
2782 			.parent_names = (const char *[]){
2783 				"rbbmtimer_clk_src",
2784 			},
2785 			.num_parents = 1,
2786 			.flags = CLK_SET_RATE_PARENT,
2787 			.ops = &clk_branch2_ops,
2788 		},
2789 	},
2790 };
2791 
2792 static struct clk_branch oxilicx_ahb_clk = {
2793 	.halt_reg = 0x403c,
2794 	.clkr = {
2795 		.enable_reg = 0x403c,
2796 		.enable_mask = BIT(0),
2797 		.hw.init = &(struct clk_init_data){
2798 			.name = "oxilicx_ahb_clk",
2799 			.parent_names = (const char *[]){
2800 				"mmss_ahb_clk_src",
2801 			},
2802 			.num_parents = 1,
2803 			.flags = CLK_SET_RATE_PARENT,
2804 			.ops = &clk_branch2_ops,
2805 		},
2806 	},
2807 };
2808 
2809 static struct clk_branch venus0_ahb_clk = {
2810 	.halt_reg = 0x1030,
2811 	.clkr = {
2812 		.enable_reg = 0x1030,
2813 		.enable_mask = BIT(0),
2814 		.hw.init = &(struct clk_init_data){
2815 			.name = "venus0_ahb_clk",
2816 			.parent_names = (const char *[]){
2817 				"mmss_ahb_clk_src",
2818 			},
2819 			.num_parents = 1,
2820 			.flags = CLK_SET_RATE_PARENT,
2821 			.ops = &clk_branch2_ops,
2822 		},
2823 	},
2824 };
2825 
2826 static struct clk_branch venus0_axi_clk = {
2827 	.halt_reg = 0x1034,
2828 	.clkr = {
2829 		.enable_reg = 0x1034,
2830 		.enable_mask = BIT(0),
2831 		.hw.init = &(struct clk_init_data){
2832 			.name = "venus0_axi_clk",
2833 			.parent_names = (const char *[]){
2834 				"mmss_axi_clk_src",
2835 			},
2836 			.num_parents = 1,
2837 			.flags = CLK_SET_RATE_PARENT,
2838 			.ops = &clk_branch2_ops,
2839 		},
2840 	},
2841 };
2842 
2843 static struct clk_branch venus0_core0_vcodec_clk = {
2844 	.halt_reg = 0x1048,
2845 	.clkr = {
2846 		.enable_reg = 0x1048,
2847 		.enable_mask = BIT(0),
2848 		.hw.init = &(struct clk_init_data){
2849 			.name = "venus0_core0_vcodec_clk",
2850 			.parent_names = (const char *[]){
2851 				"vcodec0_clk_src",
2852 			},
2853 			.num_parents = 1,
2854 			.flags = CLK_SET_RATE_PARENT,
2855 			.ops = &clk_branch2_ops,
2856 		},
2857 	},
2858 };
2859 
2860 static struct clk_branch venus0_core1_vcodec_clk = {
2861 	.halt_reg = 0x104c,
2862 	.clkr = {
2863 		.enable_reg = 0x104c,
2864 		.enable_mask = BIT(0),
2865 		.hw.init = &(struct clk_init_data){
2866 			.name = "venus0_core1_vcodec_clk",
2867 			.parent_names = (const char *[]){
2868 				"vcodec0_clk_src",
2869 			},
2870 			.num_parents = 1,
2871 			.flags = CLK_SET_RATE_PARENT,
2872 			.ops = &clk_branch2_ops,
2873 		},
2874 	},
2875 };
2876 
2877 static struct clk_branch venus0_ocmemnoc_clk = {
2878 	.halt_reg = 0x1038,
2879 	.clkr = {
2880 		.enable_reg = 0x1038,
2881 		.enable_mask = BIT(0),
2882 		.hw.init = &(struct clk_init_data){
2883 			.name = "venus0_ocmemnoc_clk",
2884 			.parent_names = (const char *[]){
2885 				"ocmemnoc_clk_src",
2886 			},
2887 			.num_parents = 1,
2888 			.flags = CLK_SET_RATE_PARENT,
2889 			.ops = &clk_branch2_ops,
2890 		},
2891 	},
2892 };
2893 
2894 static struct clk_branch venus0_vcodec0_clk = {
2895 	.halt_reg = 0x1028,
2896 	.clkr = {
2897 		.enable_reg = 0x1028,
2898 		.enable_mask = BIT(0),
2899 		.hw.init = &(struct clk_init_data){
2900 			.name = "venus0_vcodec0_clk",
2901 			.parent_names = (const char *[]){
2902 				"vcodec0_clk_src",
2903 			},
2904 			.num_parents = 1,
2905 			.flags = CLK_SET_RATE_PARENT,
2906 			.ops = &clk_branch2_ops,
2907 		},
2908 	},
2909 };
2910 
2911 static struct clk_branch vpu_ahb_clk = {
2912 	.halt_reg = 0x1430,
2913 	.clkr = {
2914 		.enable_reg = 0x1430,
2915 		.enable_mask = BIT(0),
2916 		.hw.init = &(struct clk_init_data){
2917 			.name = "vpu_ahb_clk",
2918 			.parent_names = (const char *[]){
2919 				"mmss_ahb_clk_src",
2920 			},
2921 			.num_parents = 1,
2922 			.flags = CLK_SET_RATE_PARENT,
2923 			.ops = &clk_branch2_ops,
2924 		},
2925 	},
2926 };
2927 
2928 static struct clk_branch vpu_axi_clk = {
2929 	.halt_reg = 0x143c,
2930 	.clkr = {
2931 		.enable_reg = 0x143c,
2932 		.enable_mask = BIT(0),
2933 		.hw.init = &(struct clk_init_data){
2934 			.name = "vpu_axi_clk",
2935 			.parent_names = (const char *[]){
2936 				"mmss_axi_clk_src",
2937 			},
2938 			.num_parents = 1,
2939 			.flags = CLK_SET_RATE_PARENT,
2940 			.ops = &clk_branch2_ops,
2941 		},
2942 	},
2943 };
2944 
2945 static struct clk_branch vpu_bus_clk = {
2946 	.halt_reg = 0x1440,
2947 	.clkr = {
2948 		.enable_reg = 0x1440,
2949 		.enable_mask = BIT(0),
2950 		.hw.init = &(struct clk_init_data){
2951 			.name = "vpu_bus_clk",
2952 			.parent_names = (const char *[]){
2953 				"vpu_bus_clk_src",
2954 			},
2955 			.num_parents = 1,
2956 			.flags = CLK_SET_RATE_PARENT,
2957 			.ops = &clk_branch2_ops,
2958 		},
2959 	},
2960 };
2961 
2962 static struct clk_branch vpu_cxo_clk = {
2963 	.halt_reg = 0x1434,
2964 	.clkr = {
2965 		.enable_reg = 0x1434,
2966 		.enable_mask = BIT(0),
2967 		.hw.init = &(struct clk_init_data){
2968 			.name = "vpu_cxo_clk",
2969 			.parent_names = (const char *[]){ "xo" },
2970 			.num_parents = 1,
2971 			.flags = CLK_SET_RATE_PARENT,
2972 			.ops = &clk_branch2_ops,
2973 		},
2974 	},
2975 };
2976 
2977 static struct clk_branch vpu_maple_clk = {
2978 	.halt_reg = 0x142c,
2979 	.clkr = {
2980 		.enable_reg = 0x142c,
2981 		.enable_mask = BIT(0),
2982 		.hw.init = &(struct clk_init_data){
2983 			.name = "vpu_maple_clk",
2984 			.parent_names = (const char *[]){
2985 				"maple_clk_src",
2986 			},
2987 			.num_parents = 1,
2988 			.flags = CLK_SET_RATE_PARENT,
2989 			.ops = &clk_branch2_ops,
2990 		},
2991 	},
2992 };
2993 
2994 static struct clk_branch vpu_sleep_clk = {
2995 	.halt_reg = 0x1438,
2996 	.clkr = {
2997 		.enable_reg = 0x1438,
2998 		.enable_mask = BIT(0),
2999 		.hw.init = &(struct clk_init_data){
3000 			.name = "vpu_sleep_clk",
3001 			.parent_names = (const char *[]){
3002 				"sleep_clk_src",
3003 			},
3004 			.num_parents = 1,
3005 			.flags = CLK_SET_RATE_PARENT,
3006 			.ops = &clk_branch2_ops,
3007 		},
3008 	},
3009 };
3010 
3011 static struct clk_branch vpu_vdp_clk = {
3012 	.halt_reg = 0x1428,
3013 	.clkr = {
3014 		.enable_reg = 0x1428,
3015 		.enable_mask = BIT(0),
3016 		.hw.init = &(struct clk_init_data){
3017 			.name = "vpu_vdp_clk",
3018 			.parent_names = (const char *[]){
3019 				"vdp_clk_src",
3020 			},
3021 			.num_parents = 1,
3022 			.flags = CLK_SET_RATE_PARENT,
3023 			.ops = &clk_branch2_ops,
3024 		},
3025 	},
3026 };
3027 
3028 static const struct pll_config mmpll1_config = {
3029 	.l = 60,
3030 	.m = 25,
3031 	.n = 32,
3032 	.vco_val = 0x0,
3033 	.vco_mask = 0x3 << 20,
3034 	.pre_div_val = 0x0,
3035 	.pre_div_mask = 0x7 << 12,
3036 	.post_div_val = 0x0,
3037 	.post_div_mask = 0x3 << 8,
3038 	.mn_ena_mask = BIT(24),
3039 	.main_output_mask = BIT(0),
3040 };
3041 
3042 static const struct pll_config mmpll3_config = {
3043 	.l = 48,
3044 	.m = 7,
3045 	.n = 16,
3046 	.vco_val = 0x0,
3047 	.vco_mask = 0x3 << 20,
3048 	.pre_div_val = 0x0,
3049 	.pre_div_mask = 0x7 << 12,
3050 	.post_div_val = 0x0,
3051 	.post_div_mask = 0x3 << 8,
3052 	.mn_ena_mask = BIT(24),
3053 	.main_output_mask = BIT(0),
3054 	.aux_output_mask = BIT(1),
3055 };
3056 
3057 static struct gdsc venus0_gdsc = {
3058 	.gdscr = 0x1024,
3059 	.pd = {
3060 		.name = "venus0",
3061 	},
3062 	.pwrsts = PWRSTS_OFF_ON,
3063 };
3064 
3065 static struct gdsc venus0_core0_gdsc = {
3066 	.gdscr = 0x1040,
3067 	.pd = {
3068 		.name = "venus0_core0",
3069 	},
3070 	.pwrsts = PWRSTS_OFF_ON,
3071 };
3072 
3073 static struct gdsc venus0_core1_gdsc = {
3074 	.gdscr = 0x1044,
3075 	.pd = {
3076 		.name = "venus0_core1",
3077 	},
3078 	.pwrsts = PWRSTS_OFF_ON,
3079 };
3080 
3081 static struct gdsc mdss_gdsc = {
3082 	.gdscr = 0x2304,
3083 	.cxcs = (unsigned int []){ 0x231c, 0x2320 },
3084 	.cxc_count = 2,
3085 	.pd = {
3086 		.name = "mdss",
3087 	},
3088 	.pwrsts = PWRSTS_OFF_ON,
3089 };
3090 
3091 static struct gdsc camss_jpeg_gdsc = {
3092 	.gdscr = 0x35a4,
3093 	.pd = {
3094 		.name = "camss_jpeg",
3095 	},
3096 	.pwrsts = PWRSTS_OFF_ON,
3097 };
3098 
3099 static struct gdsc camss_vfe_gdsc = {
3100 	.gdscr = 0x36a4,
3101 	.cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },
3102 	.cxc_count = 3,
3103 	.pd = {
3104 		.name = "camss_vfe",
3105 	},
3106 	.pwrsts = PWRSTS_OFF_ON,
3107 };
3108 
3109 static struct gdsc oxili_gdsc = {
3110 	.gdscr = 0x4024,
3111 	.cxcs = (unsigned int []){ 0x4028 },
3112 	.cxc_count = 1,
3113 	.pd = {
3114 		.name = "oxili",
3115 	},
3116 	.pwrsts = PWRSTS_OFF_ON,
3117 };
3118 
3119 static struct gdsc oxilicx_gdsc = {
3120 	.gdscr = 0x4034,
3121 	.pd = {
3122 		.name = "oxilicx",
3123 	},
3124 	.pwrsts = PWRSTS_OFF_ON,
3125 };
3126 
3127 static struct clk_regmap *mmcc_apq8084_clocks[] = {
3128 	[MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
3129 	[MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
3130 	[MMPLL0] = &mmpll0.clkr,
3131 	[MMPLL0_VOTE] = &mmpll0_vote,
3132 	[MMPLL1] = &mmpll1.clkr,
3133 	[MMPLL1_VOTE] = &mmpll1_vote,
3134 	[MMPLL2] = &mmpll2.clkr,
3135 	[MMPLL3] = &mmpll3.clkr,
3136 	[MMPLL4] = &mmpll4.clkr,
3137 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3138 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3139 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3140 	[CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3141 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3142 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3143 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3144 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
3145 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3146 	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3147 	[OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
3148 	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3149 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3150 	[JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
3151 	[JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3152 	[EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
3153 	[EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3154 	[VP_CLK_SRC] = &vp_clk_src.clkr,
3155 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
3156 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3157 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3158 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3159 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3160 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3161 	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3162 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3163 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3164 	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3165 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3166 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3167 	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3168 	[EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
3169 	[EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
3170 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3171 	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3172 	[HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3173 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3174 	[MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3175 	[RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3176 	[MAPLE_CLK_SRC] = &maple_clk_src.clkr,
3177 	[VDP_CLK_SRC] = &vdp_clk_src.clkr,
3178 	[VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
3179 	[MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
3180 	[MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
3181 	[AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
3182 	[AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
3183 	[AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
3184 	[AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
3185 	[AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
3186 	[AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
3187 	[CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3188 	[CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
3189 	[CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
3190 	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3191 	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3192 	[CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3193 	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3194 	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3195 	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3196 	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3197 	[CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3198 	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3199 	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3200 	[CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3201 	[CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3202 	[CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3203 	[CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3204 	[CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3205 	[CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3206 	[CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3207 	[CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3208 	[CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3209 	[CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3210 	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3211 	[CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3212 	[CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3213 	[CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3214 	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3215 	[CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
3216 	[CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
3217 	[CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
3218 	[CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
3219 	[CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
3220 	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3221 	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3222 	[CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3223 	[CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3224 	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3225 	[CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
3226 	[CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
3227 	[CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
3228 	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3229 	[CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
3230 	[CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
3231 	[CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
3232 	[CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
3233 	[CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
3234 	[CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
3235 	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3236 	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3237 	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3238 	[MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3239 	[MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3240 	[MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3241 	[MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3242 	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3243 	[MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3244 	[MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3245 	[MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3246 	[MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3247 	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3248 	[MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3249 	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3250 	[MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3251 	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3252 	[MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3253 	[MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3254 	[MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr,
3255 	[MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr,
3256 	[MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr,
3257 	[MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr,
3258 	[MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr,
3259 	[MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr,
3260 	[MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr,
3261 	[MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr,
3262 	[MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr,
3263 	[MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr,
3264 	[MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr,
3265 	[MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr,
3266 	[MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr,
3267 	[MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr,
3268 	[MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr,
3269 	[MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3270 	[MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3271 	[MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3272 	[MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3273 	[MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3274 	[OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3275 	[OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3276 	[OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3277 	[OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3278 	[OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3279 	[OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3280 	[VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3281 	[VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3282 	[VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3283 	[VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3284 	[VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3285 	[VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3286 	[VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3287 	[VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3288 	[VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3289 	[VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3290 	[VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3291 	[VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3292 	[VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3293 };
3294 
3295 static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3296 	[MMSS_SPDM_RESET] = { 0x0200 },
3297 	[MMSS_SPDM_RM_RESET] = { 0x0300 },
3298 	[VENUS0_RESET] = { 0x1020 },
3299 	[VPU_RESET] = { 0x1400 },
3300 	[MDSS_RESET] = { 0x2300 },
3301 	[AVSYNC_RESET] = { 0x2400 },
3302 	[CAMSS_PHY0_RESET] = { 0x3020 },
3303 	[CAMSS_PHY1_RESET] = { 0x3050 },
3304 	[CAMSS_PHY2_RESET] = { 0x3080 },
3305 	[CAMSS_CSI0_RESET] = { 0x30b0 },
3306 	[CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3307 	[CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3308 	[CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3309 	[CAMSS_CSI1_RESET] = { 0x3120 },
3310 	[CAMSS_CSI1PHY_RESET] = { 0x3130 },
3311 	[CAMSS_CSI1RDI_RESET] = { 0x3140 },
3312 	[CAMSS_CSI1PIX_RESET] = { 0x3150 },
3313 	[CAMSS_CSI2_RESET] = { 0x3180 },
3314 	[CAMSS_CSI2PHY_RESET] = { 0x3190 },
3315 	[CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3316 	[CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3317 	[CAMSS_CSI3_RESET] = { 0x31e0 },
3318 	[CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3319 	[CAMSS_CSI3RDI_RESET] = { 0x3200 },
3320 	[CAMSS_CSI3PIX_RESET] = { 0x3210 },
3321 	[CAMSS_ISPIF_RESET] = { 0x3220 },
3322 	[CAMSS_CCI_RESET] = { 0x3340 },
3323 	[CAMSS_MCLK0_RESET] = { 0x3380 },
3324 	[CAMSS_MCLK1_RESET] = { 0x33b0 },
3325 	[CAMSS_MCLK2_RESET] = { 0x33e0 },
3326 	[CAMSS_MCLK3_RESET] = { 0x3410 },
3327 	[CAMSS_GP0_RESET] = { 0x3440 },
3328 	[CAMSS_GP1_RESET] = { 0x3470 },
3329 	[CAMSS_TOP_RESET] = { 0x3480 },
3330 	[CAMSS_AHB_RESET] = { 0x3488 },
3331 	[CAMSS_MICRO_RESET] = { 0x3490 },
3332 	[CAMSS_JPEG_RESET] = { 0x35a0 },
3333 	[CAMSS_VFE_RESET] = { 0x36a0 },
3334 	[CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3335 	[CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3336 	[OXILI_RESET] = { 0x4020 },
3337 	[OXILICX_RESET] = { 0x4030 },
3338 	[OCMEMCX_RESET] = { 0x4050 },
3339 	[MMSS_RBCRP_RESET] = { 0x4080 },
3340 	[MMSSNOCAHB_RESET] = { 0x5020 },
3341 	[MMSSNOCAXI_RESET] = { 0x5060 },
3342 };
3343 
3344 static struct gdsc *mmcc_apq8084_gdscs[] = {
3345 	[VENUS0_GDSC] = &venus0_gdsc,
3346 	[VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,
3347 	[VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,
3348 	[MDSS_GDSC] = &mdss_gdsc,
3349 	[CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
3350 	[CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
3351 	[OXILI_GDSC] = &oxili_gdsc,
3352 	[OXILICX_GDSC] = &oxilicx_gdsc,
3353 };
3354 
3355 static const struct regmap_config mmcc_apq8084_regmap_config = {
3356 	.reg_bits	= 32,
3357 	.reg_stride	= 4,
3358 	.val_bits	= 32,
3359 	.max_register	= 0x5104,
3360 	.fast_io	= true,
3361 };
3362 
3363 static const struct qcom_cc_desc mmcc_apq8084_desc = {
3364 	.config = &mmcc_apq8084_regmap_config,
3365 	.clks = mmcc_apq8084_clocks,
3366 	.num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3367 	.resets = mmcc_apq8084_resets,
3368 	.num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3369 	.gdscs = mmcc_apq8084_gdscs,
3370 	.num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),
3371 };
3372 
3373 static const struct of_device_id mmcc_apq8084_match_table[] = {
3374 	{ .compatible = "qcom,mmcc-apq8084" },
3375 	{ }
3376 };
3377 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3378 
3379 static int mmcc_apq8084_probe(struct platform_device *pdev)
3380 {
3381 	int ret;
3382 	struct regmap *regmap;
3383 
3384 	ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3385 	if (ret)
3386 		return ret;
3387 
3388 	regmap = dev_get_regmap(&pdev->dev, NULL);
3389 	clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3390 	clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3391 
3392 	return 0;
3393 }
3394 
3395 static struct platform_driver mmcc_apq8084_driver = {
3396 	.probe		= mmcc_apq8084_probe,
3397 	.driver		= {
3398 		.name	= "mmcc-apq8084",
3399 		.of_match_table = mmcc_apq8084_match_table,
3400 	},
3401 };
3402 module_platform_driver(mmcc_apq8084_driver);
3403 
3404 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3405 MODULE_LICENSE("GPL v2");
3406 MODULE_ALIAS("platform:mmcc-apq8084");
3407