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