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