xref: /linux/drivers/clk/qcom/camcc-sm8450.c (revision 3a2c4d55e32ad65efebdb6de44eef3bfa08bb49d)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/regmap.h>
10 
11 #include <dt-bindings/clock/qcom,sm8450-camcc.h>
12 
13 #include "clk-alpha-pll.h"
14 #include "clk-branch.h"
15 #include "clk-pll.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap-divider.h"
18 #include "clk-regmap-mux.h"
19 #include "clk-regmap.h"
20 #include "common.h"
21 #include "gdsc.h"
22 #include "reset.h"
23 
24 enum {
25 	DT_IFACE,
26 	DT_BI_TCXO,
27 	DT_BI_TCXO_AO,
28 	DT_SLEEP_CLK
29 };
30 
31 enum {
32 	P_BI_TCXO,
33 	P_CAM_CC_PLL0_OUT_EVEN,
34 	P_CAM_CC_PLL0_OUT_MAIN,
35 	P_CAM_CC_PLL0_OUT_ODD,
36 	P_CAM_CC_PLL1_OUT_EVEN,
37 	P_CAM_CC_PLL2_OUT_EVEN,
38 	P_CAM_CC_PLL2_OUT_MAIN,
39 	P_CAM_CC_PLL3_OUT_EVEN,
40 	P_CAM_CC_PLL4_OUT_EVEN,
41 	P_CAM_CC_PLL5_OUT_EVEN,
42 	P_CAM_CC_PLL6_OUT_EVEN,
43 	P_CAM_CC_PLL7_OUT_EVEN,
44 	P_CAM_CC_PLL8_OUT_EVEN,
45 	P_SLEEP_CLK,
46 };
47 
48 static const struct pll_vco lucid_evo_vco[] = {
49 	{ 249600000, 2000000000, 0 },
50 };
51 
52 static const struct pll_vco rivian_evo_vco[] = {
53 	{ 864000000, 1056000000, 0 },
54 };
55 
56 static const struct pll_vco rivian_ole_vco[] = {
57 	{ 864000000, 1075000000, 0 },
58 };
59 
60 static const struct clk_parent_data pll_parent_data_tcxo = { .index = DT_BI_TCXO };
61 
62 static const struct alpha_pll_config cam_cc_pll0_config = {
63 	.l = 0x3e,
64 	.alpha = 0x8000,
65 	.config_ctl_val = 0x20485699,
66 	.config_ctl_hi_val = 0x00182261,
67 	.config_ctl_hi1_val = 0x32aa299c,
68 	.user_ctl_val = 0x00008400,
69 	.user_ctl_hi_val = 0x00000805,
70 };
71 
72 static const struct alpha_pll_config sm8475_cam_cc_pll0_config = {
73 	.l = 0x3e,
74 	.alpha = 0x8000,
75 	.config_ctl_val = 0x20485699,
76 	.config_ctl_hi_val = 0x00182261,
77 	.config_ctl_hi1_val = 0x82aa299c,
78 	.test_ctl_val = 0x00000000,
79 	.test_ctl_hi_val = 0x00000003,
80 	.test_ctl_hi1_val = 0x00009000,
81 	.test_ctl_hi2_val = 0x00000034,
82 	.user_ctl_val = 0x00008400,
83 	.user_ctl_hi_val = 0x00000005,
84 };
85 
86 static struct clk_alpha_pll cam_cc_pll0 = {
87 	.offset = 0x0,
88 	.config = &cam_cc_pll0_config,
89 	.vco_table = lucid_evo_vco,
90 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
91 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
92 	.clkr = {
93 		.hw.init = &(const struct clk_init_data) {
94 			.name = "cam_cc_pll0",
95 			.parent_data = &pll_parent_data_tcxo,
96 			.num_parents = 1,
97 			.ops = &clk_alpha_pll_lucid_evo_ops,
98 		},
99 	},
100 };
101 
102 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
103 	{ 0x1, 2 },
104 	{ }
105 };
106 
107 static struct clk_init_data sm8475_cam_cc_pll0_out_even_init = {
108 	.name = "cam_cc_pll0_out_even",
109 	.parent_hws = (const struct clk_hw*[]) {
110 		&cam_cc_pll0.clkr.hw,
111 	},
112 	.num_parents = 1,
113 	.flags = CLK_SET_RATE_PARENT,
114 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
115 };
116 
117 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
118 	.offset = 0x0,
119 	.post_div_shift = 10,
120 	.post_div_table = post_div_table_cam_cc_pll0_out_even,
121 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
122 	.width = 4,
123 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
124 	.clkr.hw.init = &(const struct clk_init_data) {
125 		.name = "cam_cc_pll0_out_even",
126 		.parent_hws = (const struct clk_hw*[]) {
127 			&cam_cc_pll0.clkr.hw,
128 		},
129 		.num_parents = 1,
130 		.flags = CLK_SET_RATE_PARENT,
131 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
132 	},
133 };
134 
135 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
136 	{ 0x2, 3 },
137 	{ }
138 };
139 
140 static struct clk_init_data sm8475_cam_cc_pll0_out_odd_init = {
141 	.name = "cam_cc_pll0_out_odd",
142 	.parent_hws = (const struct clk_hw*[]) {
143 		&cam_cc_pll0.clkr.hw,
144 	},
145 	.num_parents = 1,
146 	.flags = CLK_SET_RATE_PARENT,
147 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
148 };
149 
150 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
151 	.offset = 0x0,
152 	.post_div_shift = 14,
153 	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
154 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
155 	.width = 4,
156 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
157 	.clkr.hw.init = &(const struct clk_init_data) {
158 		.name = "cam_cc_pll0_out_odd",
159 		.parent_hws = (const struct clk_hw*[]) {
160 			&cam_cc_pll0.clkr.hw,
161 		},
162 		.num_parents = 1,
163 		.flags = CLK_SET_RATE_PARENT,
164 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
165 	},
166 };
167 
168 static const struct alpha_pll_config cam_cc_pll1_config = {
169 	.l = 0x25,
170 	.alpha = 0xeaaa,
171 	.config_ctl_val = 0x20485699,
172 	.config_ctl_hi_val = 0x00182261,
173 	.config_ctl_hi1_val = 0x32aa299c,
174 	.user_ctl_val = 0x00000400,
175 	.user_ctl_hi_val = 0x00000805,
176 };
177 
178 static const struct alpha_pll_config sm8475_cam_cc_pll1_config = {
179 	.l = 0x25,
180 	.alpha = 0xeaaa,
181 	.config_ctl_val = 0x20485699,
182 	.config_ctl_hi_val = 0x00182261,
183 	.config_ctl_hi1_val = 0x82aa299c,
184 	.test_ctl_val = 0x00000000,
185 	.test_ctl_hi_val = 0x00000003,
186 	.test_ctl_hi1_val = 0x00009000,
187 	.test_ctl_hi2_val = 0x00000034,
188 	.user_ctl_val = 0x00000400,
189 	.user_ctl_hi_val = 0x00000005,
190 };
191 
192 static struct clk_alpha_pll cam_cc_pll1 = {
193 	.offset = 0x1000,
194 	.config = &cam_cc_pll1_config,
195 	.vco_table = lucid_evo_vco,
196 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
197 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
198 	.clkr = {
199 		.hw.init = &(const struct clk_init_data) {
200 			.name = "cam_cc_pll1",
201 			.parent_data = &pll_parent_data_tcxo,
202 			.num_parents = 1,
203 			.ops = &clk_alpha_pll_lucid_evo_ops,
204 		},
205 	},
206 };
207 
208 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
209 	{ 0x1, 2 },
210 	{ }
211 };
212 
213 static struct clk_init_data sm8475_cam_cc_pll1_out_even_init = {
214 	.name = "cam_cc_pll1_out_even",
215 	.parent_hws = (const struct clk_hw*[]) {
216 		&cam_cc_pll1.clkr.hw,
217 	},
218 	.num_parents = 1,
219 	.flags = CLK_SET_RATE_PARENT,
220 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
221 };
222 
223 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
224 	.offset = 0x1000,
225 	.post_div_shift = 10,
226 	.post_div_table = post_div_table_cam_cc_pll1_out_even,
227 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
228 	.width = 4,
229 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
230 	.clkr.hw.init = &(const struct clk_init_data) {
231 		.name = "cam_cc_pll1_out_even",
232 		.parent_hws = (const struct clk_hw*[]) {
233 			&cam_cc_pll1.clkr.hw,
234 		},
235 		.num_parents = 1,
236 		.flags = CLK_SET_RATE_PARENT,
237 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
238 	},
239 };
240 
241 static const struct alpha_pll_config cam_cc_pll2_config = {
242 	.l = 0x32,
243 	.alpha = 0x0,
244 	.config_ctl_val = 0x90008820,
245 	.config_ctl_hi_val = 0x00890263,
246 	.config_ctl_hi1_val = 0x00000217,
247 };
248 
249 static const struct alpha_pll_config sm8475_cam_cc_pll2_config = {
250 	.l = 0x32,
251 	.alpha = 0x0,
252 	.config_ctl_val = 0x10000030,
253 	.config_ctl_hi_val = 0x80890263,
254 	.config_ctl_hi1_val = 0x00000217,
255 	.user_ctl_val = 0x00000001,
256 	.user_ctl_hi_val = 0x00000000,
257 };
258 
259 static struct clk_alpha_pll cam_cc_pll2 = {
260 	.offset = 0x2000,
261 	.config = &cam_cc_pll2_config,
262 	.vco_table = rivian_evo_vco,
263 	.num_vco = ARRAY_SIZE(rivian_evo_vco),
264 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
265 	.clkr = {
266 		.hw.init = &(const struct clk_init_data) {
267 			.name = "cam_cc_pll2",
268 			.parent_data = &pll_parent_data_tcxo,
269 			.num_parents = 1,
270 			.ops = &clk_alpha_pll_rivian_evo_ops,
271 		},
272 	},
273 };
274 
275 static const struct alpha_pll_config cam_cc_pll3_config = {
276 	.l = 0x2d,
277 	.alpha = 0x0,
278 	.config_ctl_val = 0x20485699,
279 	.config_ctl_hi_val = 0x00182261,
280 	.config_ctl_hi1_val = 0x32aa299c,
281 	.user_ctl_val = 0x00000400,
282 	.user_ctl_hi_val = 0x00000805,
283 };
284 
285 static const struct alpha_pll_config sm8475_cam_cc_pll3_config = {
286 	.l = 0x2d,
287 	.alpha = 0x0,
288 	.config_ctl_val = 0x20485699,
289 	.config_ctl_hi_val = 0x00182261,
290 	.config_ctl_hi1_val = 0x82aa299c,
291 	.test_ctl_val = 0x00000000,
292 	.test_ctl_hi_val = 0x00000003,
293 	.test_ctl_hi1_val = 0x00009000,
294 	.test_ctl_hi2_val = 0x00000034,
295 	.user_ctl_val = 0x00000400,
296 	.user_ctl_hi_val = 0x00000005,
297 };
298 
299 static struct clk_alpha_pll cam_cc_pll3 = {
300 	.offset = 0x3000,
301 	.config = &cam_cc_pll3_config,
302 	.vco_table = lucid_evo_vco,
303 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
304 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
305 	.clkr = {
306 		.hw.init = &(const struct clk_init_data) {
307 			.name = "cam_cc_pll3",
308 			.parent_data = &pll_parent_data_tcxo,
309 			.num_parents = 1,
310 			.ops = &clk_alpha_pll_lucid_evo_ops,
311 		},
312 	},
313 };
314 
315 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
316 	{ 0x1, 2 },
317 	{ }
318 };
319 
320 static struct clk_init_data sm8475_cam_cc_pll3_out_even_init = {
321 	.name = "cam_cc_pll3_out_even",
322 	.parent_hws = (const struct clk_hw*[]) {
323 		&cam_cc_pll3.clkr.hw,
324 	},
325 	.num_parents = 1,
326 	.flags = CLK_SET_RATE_PARENT,
327 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
328 };
329 
330 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
331 	.offset = 0x3000,
332 	.post_div_shift = 10,
333 	.post_div_table = post_div_table_cam_cc_pll3_out_even,
334 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
335 	.width = 4,
336 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
337 	.clkr.hw.init = &(const struct clk_init_data) {
338 		.name = "cam_cc_pll3_out_even",
339 		.parent_hws = (const struct clk_hw*[]) {
340 			&cam_cc_pll3.clkr.hw,
341 		},
342 		.num_parents = 1,
343 		.flags = CLK_SET_RATE_PARENT,
344 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
345 	},
346 };
347 
348 static const struct alpha_pll_config cam_cc_pll4_config = {
349 	.l = 0x2d,
350 	.alpha = 0x0,
351 	.config_ctl_val = 0x20485699,
352 	.config_ctl_hi_val = 0x00182261,
353 	.config_ctl_hi1_val = 0x32aa299c,
354 	.user_ctl_val = 0x00000400,
355 	.user_ctl_hi_val = 0x00000805,
356 };
357 
358 static const struct alpha_pll_config sm8475_cam_cc_pll4_config = {
359 	.l = 0x2d,
360 	.alpha = 0x0,
361 	.config_ctl_val = 0x20485699,
362 	.config_ctl_hi_val = 0x00182261,
363 	.config_ctl_hi1_val = 0x82aa299c,
364 	.test_ctl_val = 0x00000000,
365 	.test_ctl_hi_val = 0x00000003,
366 	.test_ctl_hi1_val = 0x00009000,
367 	.test_ctl_hi2_val = 0x00000034,
368 	.user_ctl_val = 0x00000400,
369 	.user_ctl_hi_val = 0x00000005,
370 };
371 
372 static struct clk_alpha_pll cam_cc_pll4 = {
373 	.offset = 0x4000,
374 	.config = &cam_cc_pll4_config,
375 	.vco_table = lucid_evo_vco,
376 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
377 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
378 	.clkr = {
379 		.hw.init = &(const struct clk_init_data) {
380 			.name = "cam_cc_pll4",
381 			.parent_data = &pll_parent_data_tcxo,
382 			.num_parents = 1,
383 			.ops = &clk_alpha_pll_lucid_evo_ops,
384 		},
385 	},
386 };
387 
388 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
389 	{ 0x1, 2 },
390 	{ }
391 };
392 
393 static struct clk_init_data sm8475_cam_cc_pll4_out_even_init = {
394 	.name = "cam_cc_pll4_out_even",
395 	.parent_hws = (const struct clk_hw*[]) {
396 		&cam_cc_pll4.clkr.hw,
397 	},
398 	.num_parents = 1,
399 	.flags = CLK_SET_RATE_PARENT,
400 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
401 };
402 
403 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
404 	.offset = 0x4000,
405 	.post_div_shift = 10,
406 	.post_div_table = post_div_table_cam_cc_pll4_out_even,
407 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
408 	.width = 4,
409 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
410 	.clkr.hw.init = &(const struct clk_init_data) {
411 		.name = "cam_cc_pll4_out_even",
412 		.parent_hws = (const struct clk_hw*[]) {
413 			&cam_cc_pll4.clkr.hw,
414 		},
415 		.num_parents = 1,
416 		.flags = CLK_SET_RATE_PARENT,
417 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
418 	},
419 };
420 
421 static const struct alpha_pll_config cam_cc_pll5_config = {
422 	.l = 0x2d,
423 	.alpha = 0x0,
424 	.config_ctl_val = 0x20485699,
425 	.config_ctl_hi_val = 0x00182261,
426 	.config_ctl_hi1_val = 0x32aa299c,
427 	.user_ctl_val = 0x00000400,
428 	.user_ctl_hi_val = 0x00000805,
429 };
430 
431 static const struct alpha_pll_config sm8475_cam_cc_pll5_config = {
432 	.l = 0x2d,
433 	.alpha = 0x0,
434 	.config_ctl_val = 0x20485699,
435 	.config_ctl_hi_val = 0x00182261,
436 	.config_ctl_hi1_val = 0x82aa299c,
437 	.test_ctl_val = 0x00000000,
438 	.test_ctl_hi_val = 0x00000003,
439 	.test_ctl_hi1_val = 0x00009000,
440 	.test_ctl_hi2_val = 0x00000034,
441 	.user_ctl_val = 0x00000400,
442 	.user_ctl_hi_val = 0x00000005,
443 };
444 
445 static struct clk_alpha_pll cam_cc_pll5 = {
446 	.offset = 0x5000,
447 	.config = &cam_cc_pll5_config,
448 	.vco_table = lucid_evo_vco,
449 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
450 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
451 	.clkr = {
452 		.hw.init = &(const struct clk_init_data) {
453 			.name = "cam_cc_pll5",
454 			.parent_data = &pll_parent_data_tcxo,
455 			.num_parents = 1,
456 			.ops = &clk_alpha_pll_lucid_evo_ops,
457 		},
458 	},
459 };
460 
461 static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
462 	{ 0x1, 2 },
463 	{ }
464 };
465 
466 static struct clk_init_data sm8475_cam_cc_pll5_out_even_init = {
467 	.name = "cam_cc_pll5_out_even",
468 	.parent_hws = (const struct clk_hw*[]) {
469 		&cam_cc_pll5.clkr.hw,
470 	},
471 	.num_parents = 1,
472 	.flags = CLK_SET_RATE_PARENT,
473 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
474 };
475 
476 static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
477 	.offset = 0x5000,
478 	.post_div_shift = 10,
479 	.post_div_table = post_div_table_cam_cc_pll5_out_even,
480 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
481 	.width = 4,
482 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
483 	.clkr.hw.init = &(const struct clk_init_data) {
484 		.name = "cam_cc_pll5_out_even",
485 		.parent_hws = (const struct clk_hw*[]) {
486 			&cam_cc_pll5.clkr.hw,
487 		},
488 		.num_parents = 1,
489 		.flags = CLK_SET_RATE_PARENT,
490 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
491 	},
492 };
493 
494 static const struct alpha_pll_config cam_cc_pll6_config = {
495 	.l = 0x2d,
496 	.alpha = 0x0,
497 	.config_ctl_val = 0x20485699,
498 	.config_ctl_hi_val = 0x00182261,
499 	.config_ctl_hi1_val = 0x32aa299c,
500 	.user_ctl_val = 0x00000400,
501 	.user_ctl_hi_val = 0x00000805,
502 };
503 
504 static const struct alpha_pll_config sm8475_cam_cc_pll6_config = {
505 	.l = 0x2d,
506 	.alpha = 0x0,
507 	.config_ctl_val = 0x20485699,
508 	.config_ctl_hi_val = 0x00182261,
509 	.config_ctl_hi1_val = 0x82aa299c,
510 	.test_ctl_val = 0x00000000,
511 	.test_ctl_hi_val = 0x00000003,
512 	.test_ctl_hi1_val = 0x00009000,
513 	.test_ctl_hi2_val = 0x00000034,
514 	.user_ctl_val = 0x00000400,
515 	.user_ctl_hi_val = 0x00000005,
516 };
517 
518 static struct clk_alpha_pll cam_cc_pll6 = {
519 	.offset = 0x6000,
520 	.config = &cam_cc_pll6_config,
521 	.vco_table = lucid_evo_vco,
522 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
523 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
524 	.clkr = {
525 		.hw.init = &(const struct clk_init_data) {
526 			.name = "cam_cc_pll6",
527 			.parent_data = &pll_parent_data_tcxo,
528 			.num_parents = 1,
529 			.ops = &clk_alpha_pll_lucid_evo_ops,
530 		},
531 	},
532 };
533 
534 static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
535 	{ 0x1, 2 },
536 	{ }
537 };
538 
539 static struct clk_init_data sm8475_cam_cc_pll6_out_even_init = {
540 	.name = "cam_cc_pll6_out_even",
541 	.parent_hws = (const struct clk_hw*[]) {
542 		&cam_cc_pll6.clkr.hw,
543 	},
544 	.num_parents = 1,
545 	.flags = CLK_SET_RATE_PARENT,
546 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
547 };
548 
549 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
550 	.offset = 0x6000,
551 	.post_div_shift = 10,
552 	.post_div_table = post_div_table_cam_cc_pll6_out_even,
553 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
554 	.width = 4,
555 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
556 	.clkr.hw.init = &(const struct clk_init_data) {
557 		.name = "cam_cc_pll6_out_even",
558 		.parent_hws = (const struct clk_hw*[]) {
559 			&cam_cc_pll6.clkr.hw,
560 		},
561 		.num_parents = 1,
562 		.flags = CLK_SET_RATE_PARENT,
563 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
564 	},
565 };
566 
567 static const struct alpha_pll_config cam_cc_pll7_config = {
568 	.l = 0x2d,
569 	.alpha = 0x0,
570 	.config_ctl_val = 0x20485699,
571 	.config_ctl_hi_val = 0x00182261,
572 	.config_ctl_hi1_val = 0x32aa299c,
573 	.user_ctl_val = 0x00000400,
574 	.user_ctl_hi_val = 0x00000805,
575 };
576 
577 static const struct alpha_pll_config sm8475_cam_cc_pll7_config = {
578 	.l = 0x2d,
579 	.alpha = 0x0,
580 	.config_ctl_val = 0x20485699,
581 	.config_ctl_hi_val = 0x00182261,
582 	.config_ctl_hi1_val = 0x82aa299c,
583 	.test_ctl_val = 0x00000000,
584 	.test_ctl_hi_val = 0x00000003,
585 	.test_ctl_hi1_val = 0x00009000,
586 	.test_ctl_hi2_val = 0x00000034,
587 	.user_ctl_val = 0x00000400,
588 	.user_ctl_hi_val = 0x00000005,
589 };
590 
591 static struct clk_alpha_pll cam_cc_pll7 = {
592 	.offset = 0x7000,
593 	.config = &cam_cc_pll7_config,
594 	.vco_table = lucid_evo_vco,
595 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
596 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
597 	.clkr = {
598 		.hw.init = &(const struct clk_init_data) {
599 			.name = "cam_cc_pll7",
600 			.parent_data = &pll_parent_data_tcxo,
601 			.num_parents = 1,
602 			.ops = &clk_alpha_pll_lucid_evo_ops,
603 		},
604 	},
605 };
606 
607 static const struct clk_div_table post_div_table_cam_cc_pll7_out_even[] = {
608 	{ 0x1, 2 },
609 	{ }
610 };
611 
612 static struct clk_init_data sm8475_cam_cc_pll7_out_even_init = {
613 	.name = "cam_cc_pll7_out_even",
614 	.parent_hws = (const struct clk_hw*[]) {
615 		&cam_cc_pll7.clkr.hw,
616 	},
617 	.num_parents = 1,
618 	.flags = CLK_SET_RATE_PARENT,
619 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
620 };
621 
622 static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = {
623 	.offset = 0x7000,
624 	.post_div_shift = 10,
625 	.post_div_table = post_div_table_cam_cc_pll7_out_even,
626 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even),
627 	.width = 4,
628 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
629 	.clkr.hw.init = &(const struct clk_init_data) {
630 		.name = "cam_cc_pll7_out_even",
631 		.parent_hws = (const struct clk_hw*[]) {
632 			&cam_cc_pll7.clkr.hw,
633 		},
634 		.num_parents = 1,
635 		.flags = CLK_SET_RATE_PARENT,
636 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
637 	},
638 };
639 
640 static const struct alpha_pll_config cam_cc_pll8_config = {
641 	.l = 0x32,
642 	.alpha = 0x0,
643 	.config_ctl_val = 0x20485699,
644 	.config_ctl_hi_val = 0x00182261,
645 	.config_ctl_hi1_val = 0x32aa299c,
646 	.user_ctl_val = 0x00000400,
647 	.user_ctl_hi_val = 0x00000805,
648 };
649 
650 static const struct alpha_pll_config sm8475_cam_cc_pll8_config = {
651 	.l = 0x32,
652 	.alpha = 0x0,
653 	.config_ctl_val = 0x20485699,
654 	.config_ctl_hi_val = 0x00182261,
655 	.config_ctl_hi1_val = 0x82aa299c,
656 	.test_ctl_val = 0x00000000,
657 	.test_ctl_hi_val = 0x00000003,
658 	.test_ctl_hi1_val = 0x00009000,
659 	.test_ctl_hi2_val = 0x00000034,
660 	.user_ctl_val = 0x00000400,
661 	.user_ctl_hi_val = 0x00000005,
662 };
663 
664 static struct clk_alpha_pll cam_cc_pll8 = {
665 	.offset = 0x8000,
666 	.config = &cam_cc_pll8_config,
667 	.vco_table = lucid_evo_vco,
668 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
669 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
670 	.clkr = {
671 		.hw.init = &(const struct clk_init_data) {
672 			.name = "cam_cc_pll8",
673 			.parent_data = &pll_parent_data_tcxo,
674 			.num_parents = 1,
675 			.ops = &clk_alpha_pll_lucid_evo_ops,
676 		},
677 	},
678 };
679 
680 static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = {
681 	{ 0x1, 2 },
682 	{ }
683 };
684 
685 static struct clk_init_data sm8475_cam_cc_pll8_out_even_init = {
686 	.name = "cam_cc_pll8_out_even",
687 	.parent_hws = (const struct clk_hw*[]) {
688 		&cam_cc_pll8.clkr.hw,
689 	},
690 	.num_parents = 1,
691 	.flags = CLK_SET_RATE_PARENT,
692 	.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
693 };
694 
695 static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = {
696 	.offset = 0x8000,
697 	.post_div_shift = 10,
698 	.post_div_table = post_div_table_cam_cc_pll8_out_even,
699 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even),
700 	.width = 4,
701 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
702 	.clkr.hw.init = &(const struct clk_init_data) {
703 		.name = "cam_cc_pll8_out_even",
704 		.parent_hws = (const struct clk_hw*[]) {
705 			&cam_cc_pll8.clkr.hw,
706 		},
707 		.num_parents = 1,
708 		.flags = CLK_SET_RATE_PARENT,
709 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
710 	},
711 };
712 
713 static const struct parent_map cam_cc_parent_map_0[] = {
714 	{ P_BI_TCXO, 0 },
715 	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
716 	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
717 	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
718 	{ P_CAM_CC_PLL8_OUT_EVEN, 5 },
719 };
720 
721 static const struct clk_parent_data cam_cc_parent_data_0[] = {
722 	{ .index = DT_BI_TCXO },
723 	{ .hw = &cam_cc_pll0.clkr.hw },
724 	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
725 	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
726 	{ .hw = &cam_cc_pll8_out_even.clkr.hw },
727 };
728 
729 static const struct parent_map cam_cc_parent_map_1[] = {
730 	{ P_BI_TCXO, 0 },
731 	{ P_CAM_CC_PLL2_OUT_EVEN, 3 },
732 	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
733 };
734 
735 static const struct clk_parent_data cam_cc_parent_data_1[] = {
736 	{ .index = DT_BI_TCXO },
737 	{ .hw = &cam_cc_pll2.clkr.hw },
738 	{ .hw = &cam_cc_pll2.clkr.hw },
739 };
740 
741 static const struct parent_map cam_cc_parent_map_2[] = {
742 	{ P_BI_TCXO, 0 },
743 	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
744 };
745 
746 static const struct clk_parent_data cam_cc_parent_data_2[] = {
747 	{ .index = DT_BI_TCXO },
748 	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
749 };
750 
751 static const struct parent_map cam_cc_parent_map_3[] = {
752 	{ P_BI_TCXO, 0 },
753 	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
754 };
755 
756 static const struct clk_parent_data cam_cc_parent_data_3[] = {
757 	{ .index = DT_BI_TCXO },
758 	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
759 };
760 
761 static const struct parent_map cam_cc_parent_map_4[] = {
762 	{ P_BI_TCXO, 0 },
763 	{ P_CAM_CC_PLL5_OUT_EVEN, 6 },
764 };
765 
766 static const struct clk_parent_data cam_cc_parent_data_4[] = {
767 	{ .index = DT_BI_TCXO },
768 	{ .hw = &cam_cc_pll5_out_even.clkr.hw },
769 };
770 
771 static const struct parent_map cam_cc_parent_map_5[] = {
772 	{ P_BI_TCXO, 0 },
773 	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
774 };
775 
776 static const struct clk_parent_data cam_cc_parent_data_5[] = {
777 	{ .index = DT_BI_TCXO },
778 	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
779 };
780 
781 static const struct parent_map cam_cc_parent_map_6[] = {
782 	{ P_BI_TCXO, 0 },
783 	{ P_CAM_CC_PLL6_OUT_EVEN, 6 },
784 };
785 
786 static const struct clk_parent_data cam_cc_parent_data_6[] = {
787 	{ .index = DT_BI_TCXO },
788 	{ .hw = &cam_cc_pll6_out_even.clkr.hw },
789 };
790 
791 static const struct parent_map cam_cc_parent_map_7[] = {
792 	{ P_BI_TCXO, 0 },
793 	{ P_CAM_CC_PLL7_OUT_EVEN, 6 },
794 };
795 
796 static const struct clk_parent_data cam_cc_parent_data_7[] = {
797 	{ .index = DT_BI_TCXO },
798 	{ .hw = &cam_cc_pll7_out_even.clkr.hw },
799 };
800 
801 static const struct parent_map cam_cc_parent_map_8[] = {
802 	{ P_SLEEP_CLK, 0 },
803 };
804 
805 static const struct clk_parent_data cam_cc_parent_data_8[] = {
806 	{ .index = DT_SLEEP_CLK },
807 };
808 
809 static const struct parent_map cam_cc_parent_map_9[] = {
810 	{ P_BI_TCXO, 0 },
811 };
812 
813 static const struct clk_parent_data cam_cc_parent_data_9_ao[] = {
814 	{ .index = DT_BI_TCXO_AO, .name = "bi_tcxo_ao" },
815 };
816 
817 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
818 	F(19200000, P_BI_TCXO, 1, 0, 0),
819 	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
820 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
821 	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
822 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
823 	{ }
824 };
825 
826 static struct clk_rcg2 cam_cc_bps_clk_src = {
827 	.cmd_rcgr = 0x10050,
828 	.mnd_width = 0,
829 	.hid_width = 5,
830 	.parent_map = cam_cc_parent_map_0,
831 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
832 	.clkr.hw.init = &(const struct clk_init_data) {
833 		.name = "cam_cc_bps_clk_src",
834 		.parent_data = cam_cc_parent_data_0,
835 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
836 		.flags = CLK_SET_RATE_PARENT,
837 		.ops = &clk_rcg2_ops,
838 	},
839 };
840 
841 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
842 	F(19200000, P_BI_TCXO, 1, 0, 0),
843 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
844 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
845 	{ }
846 };
847 
848 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
849 	.cmd_rcgr = 0x13194,
850 	.mnd_width = 0,
851 	.hid_width = 5,
852 	.parent_map = cam_cc_parent_map_0,
853 	.freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
854 	.clkr.hw.init = &(const struct clk_init_data) {
855 		.name = "cam_cc_camnoc_axi_clk_src",
856 		.parent_data = cam_cc_parent_data_0,
857 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
858 		.flags = CLK_SET_RATE_PARENT,
859 		.ops = &clk_rcg2_ops,
860 	},
861 };
862 
863 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
864 	F(19200000, P_BI_TCXO, 1, 0, 0),
865 	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
866 	{ }
867 };
868 
869 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
870 	.cmd_rcgr = 0x1312c,
871 	.mnd_width = 8,
872 	.hid_width = 5,
873 	.parent_map = cam_cc_parent_map_0,
874 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
875 	.clkr.hw.init = &(const struct clk_init_data) {
876 		.name = "cam_cc_cci_0_clk_src",
877 		.parent_data = cam_cc_parent_data_0,
878 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
879 		.flags = CLK_SET_RATE_PARENT,
880 		.ops = &clk_rcg2_ops,
881 	},
882 };
883 
884 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
885 	.cmd_rcgr = 0x13148,
886 	.mnd_width = 8,
887 	.hid_width = 5,
888 	.parent_map = cam_cc_parent_map_0,
889 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
890 	.clkr.hw.init = &(const struct clk_init_data) {
891 		.name = "cam_cc_cci_1_clk_src",
892 		.parent_data = cam_cc_parent_data_0,
893 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
894 		.flags = CLK_SET_RATE_PARENT,
895 		.ops = &clk_rcg2_ops,
896 	},
897 };
898 
899 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
900 	F(19200000, P_BI_TCXO, 1, 0, 0),
901 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
902 	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
903 	{ }
904 };
905 
906 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
907 	.cmd_rcgr = 0x1104c,
908 	.mnd_width = 0,
909 	.hid_width = 5,
910 	.parent_map = cam_cc_parent_map_0,
911 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
912 	.clkr.hw.init = &(const struct clk_init_data) {
913 		.name = "cam_cc_cphy_rx_clk_src",
914 		.parent_data = cam_cc_parent_data_0,
915 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
916 		.flags = CLK_SET_RATE_PARENT,
917 		.ops = &clk_rcg2_ops,
918 	},
919 };
920 
921 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
922 	F(19200000, P_BI_TCXO, 1, 0, 0),
923 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
924 	{ }
925 };
926 
927 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
928 	.cmd_rcgr = 0x150e0,
929 	.mnd_width = 0,
930 	.hid_width = 5,
931 	.parent_map = cam_cc_parent_map_0,
932 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
933 	.clkr.hw.init = &(const struct clk_init_data) {
934 		.name = "cam_cc_csi0phytimer_clk_src",
935 		.parent_data = cam_cc_parent_data_0,
936 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
937 		.flags = CLK_SET_RATE_PARENT,
938 		.ops = &clk_rcg2_ops,
939 	},
940 };
941 
942 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
943 	.cmd_rcgr = 0x15104,
944 	.mnd_width = 0,
945 	.hid_width = 5,
946 	.parent_map = cam_cc_parent_map_0,
947 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
948 	.clkr.hw.init = &(const struct clk_init_data) {
949 		.name = "cam_cc_csi1phytimer_clk_src",
950 		.parent_data = cam_cc_parent_data_0,
951 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
952 		.flags = CLK_SET_RATE_PARENT,
953 		.ops = &clk_rcg2_ops,
954 	},
955 };
956 
957 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
958 	.cmd_rcgr = 0x15124,
959 	.mnd_width = 0,
960 	.hid_width = 5,
961 	.parent_map = cam_cc_parent_map_0,
962 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
963 	.clkr.hw.init = &(const struct clk_init_data) {
964 		.name = "cam_cc_csi2phytimer_clk_src",
965 		.parent_data = cam_cc_parent_data_0,
966 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
967 		.flags = CLK_SET_RATE_PARENT,
968 		.ops = &clk_rcg2_ops,
969 	},
970 };
971 
972 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
973 	.cmd_rcgr = 0x1514c,
974 	.mnd_width = 0,
975 	.hid_width = 5,
976 	.parent_map = cam_cc_parent_map_0,
977 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
978 	.clkr.hw.init = &(const struct clk_init_data) {
979 		.name = "cam_cc_csi3phytimer_clk_src",
980 		.parent_data = cam_cc_parent_data_0,
981 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
982 		.flags = CLK_SET_RATE_PARENT,
983 		.ops = &clk_rcg2_ops,
984 	},
985 };
986 
987 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
988 	.cmd_rcgr = 0x1516c,
989 	.mnd_width = 0,
990 	.hid_width = 5,
991 	.parent_map = cam_cc_parent_map_0,
992 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
993 	.clkr.hw.init = &(const struct clk_init_data) {
994 		.name = "cam_cc_csi4phytimer_clk_src",
995 		.parent_data = cam_cc_parent_data_0,
996 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
997 		.flags = CLK_SET_RATE_PARENT,
998 		.ops = &clk_rcg2_ops,
999 	},
1000 };
1001 
1002 static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
1003 	.cmd_rcgr = 0x1518c,
1004 	.mnd_width = 0,
1005 	.hid_width = 5,
1006 	.parent_map = cam_cc_parent_map_0,
1007 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1008 	.clkr.hw.init = &(const struct clk_init_data) {
1009 		.name = "cam_cc_csi5phytimer_clk_src",
1010 		.parent_data = cam_cc_parent_data_0,
1011 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1012 		.flags = CLK_SET_RATE_PARENT,
1013 		.ops = &clk_rcg2_ops,
1014 	},
1015 };
1016 
1017 static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = {
1018 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1019 	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
1020 	{ }
1021 };
1022 
1023 static struct clk_rcg2 cam_cc_csid_clk_src = {
1024 	.cmd_rcgr = 0x13174,
1025 	.mnd_width = 0,
1026 	.hid_width = 5,
1027 	.parent_map = cam_cc_parent_map_0,
1028 	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1029 	.clkr.hw.init = &(const struct clk_init_data) {
1030 		.name = "cam_cc_csid_clk_src",
1031 		.parent_data = cam_cc_parent_data_0,
1032 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1033 		.flags = CLK_SET_RATE_PARENT,
1034 		.ops = &clk_rcg2_ops,
1035 	},
1036 };
1037 
1038 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
1039 	F(19200000, P_BI_TCXO, 1, 0, 0),
1040 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
1041 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
1042 	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1043 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1044 	{ }
1045 };
1046 
1047 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
1048 	.cmd_rcgr = 0x10018,
1049 	.mnd_width = 0,
1050 	.hid_width = 5,
1051 	.parent_map = cam_cc_parent_map_0,
1052 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
1053 	.clkr.hw.init = &(const struct clk_init_data) {
1054 		.name = "cam_cc_fast_ahb_clk_src",
1055 		.parent_data = cam_cc_parent_data_0,
1056 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1057 		.flags = CLK_SET_RATE_PARENT,
1058 		.ops = &clk_rcg2_ops,
1059 	},
1060 };
1061 
1062 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
1063 	F(19200000, P_BI_TCXO, 1, 0, 0),
1064 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1065 	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
1066 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
1067 	{ }
1068 };
1069 
1070 static struct clk_rcg2 cam_cc_icp_clk_src = {
1071 	.cmd_rcgr = 0x13108,
1072 	.mnd_width = 0,
1073 	.hid_width = 5,
1074 	.parent_map = cam_cc_parent_map_0,
1075 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
1076 	.clkr.hw.init = &(const struct clk_init_data) {
1077 		.name = "cam_cc_icp_clk_src",
1078 		.parent_data = cam_cc_parent_data_0,
1079 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1080 		.flags = CLK_SET_RATE_PARENT,
1081 		.ops = &clk_rcg2_ops,
1082 	},
1083 };
1084 
1085 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
1086 	F(19200000, P_BI_TCXO, 1, 0, 0),
1087 	F(432000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1088 	F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1089 	F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1090 	F(727000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1091 	{ }
1092 };
1093 
1094 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
1095 	.cmd_rcgr = 0x11018,
1096 	.mnd_width = 0,
1097 	.hid_width = 5,
1098 	.parent_map = cam_cc_parent_map_2,
1099 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
1100 	.clkr.hw.init = &(const struct clk_init_data) {
1101 		.name = "cam_cc_ife_0_clk_src",
1102 		.parent_data = cam_cc_parent_data_2,
1103 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1104 		.flags = CLK_SET_RATE_PARENT,
1105 		.ops = &clk_rcg2_ops,
1106 	},
1107 };
1108 
1109 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
1110 	F(19200000, P_BI_TCXO, 1, 0, 0),
1111 	F(432000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1112 	F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1113 	F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1114 	F(727000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1115 	{ }
1116 };
1117 
1118 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
1119 	.cmd_rcgr = 0x12018,
1120 	.mnd_width = 0,
1121 	.hid_width = 5,
1122 	.parent_map = cam_cc_parent_map_3,
1123 	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
1124 	.clkr.hw.init = &(const struct clk_init_data) {
1125 		.name = "cam_cc_ife_1_clk_src",
1126 		.parent_data = cam_cc_parent_data_3,
1127 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
1128 		.flags = CLK_SET_RATE_PARENT,
1129 		.ops = &clk_rcg2_ops,
1130 	},
1131 };
1132 
1133 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
1134 	F(432000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1135 	F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1136 	F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1137 	F(727000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1138 	{ }
1139 };
1140 
1141 static struct clk_rcg2 cam_cc_ife_2_clk_src = {
1142 	.cmd_rcgr = 0x12064,
1143 	.mnd_width = 0,
1144 	.hid_width = 5,
1145 	.parent_map = cam_cc_parent_map_4,
1146 	.freq_tbl = ftbl_cam_cc_ife_2_clk_src,
1147 	.clkr.hw.init = &(const struct clk_init_data) {
1148 		.name = "cam_cc_ife_2_clk_src",
1149 		.parent_data = cam_cc_parent_data_4,
1150 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
1151 		.flags = CLK_SET_RATE_PARENT,
1152 		.ops = &clk_rcg2_ops,
1153 	},
1154 };
1155 
1156 static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = {
1157 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1158 	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
1159 	{ }
1160 };
1161 
1162 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
1163 	.cmd_rcgr = 0x13000,
1164 	.mnd_width = 0,
1165 	.hid_width = 5,
1166 	.parent_map = cam_cc_parent_map_0,
1167 	.freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
1168 	.clkr.hw.init = &(const struct clk_init_data) {
1169 		.name = "cam_cc_ife_lite_clk_src",
1170 		.parent_data = cam_cc_parent_data_0,
1171 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1172 		.flags = CLK_SET_RATE_PARENT,
1173 		.ops = &clk_rcg2_ops,
1174 	},
1175 };
1176 
1177 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
1178 	.cmd_rcgr = 0x13024,
1179 	.mnd_width = 0,
1180 	.hid_width = 5,
1181 	.parent_map = cam_cc_parent_map_0,
1182 	.freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
1183 	.clkr.hw.init = &(const struct clk_init_data) {
1184 		.name = "cam_cc_ife_lite_csid_clk_src",
1185 		.parent_data = cam_cc_parent_data_0,
1186 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1187 		.flags = CLK_SET_RATE_PARENT,
1188 		.ops = &clk_rcg2_ops,
1189 	},
1190 };
1191 
1192 static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = {
1193 	F(364000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1194 	F(500000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1195 	F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1196 	F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1197 	{ }
1198 };
1199 
1200 static struct clk_rcg2 cam_cc_ipe_nps_clk_src = {
1201 	.cmd_rcgr = 0x1008c,
1202 	.mnd_width = 0,
1203 	.hid_width = 5,
1204 	.parent_map = cam_cc_parent_map_5,
1205 	.freq_tbl = ftbl_cam_cc_ipe_nps_clk_src,
1206 	.clkr.hw.init = &(const struct clk_init_data) {
1207 		.name = "cam_cc_ipe_nps_clk_src",
1208 		.parent_data = cam_cc_parent_data_5,
1209 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
1210 		.flags = CLK_SET_RATE_PARENT,
1211 		.ops = &clk_rcg2_ops,
1212 	},
1213 };
1214 
1215 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1216 	.cmd_rcgr = 0x130dc,
1217 	.mnd_width = 0,
1218 	.hid_width = 5,
1219 	.parent_map = cam_cc_parent_map_0,
1220 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
1221 	.clkr.hw.init = &(const struct clk_init_data) {
1222 		.name = "cam_cc_jpeg_clk_src",
1223 		.parent_data = cam_cc_parent_data_0,
1224 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1225 		.flags = CLK_SET_RATE_PARENT,
1226 		.ops = &clk_rcg2_ops,
1227 	},
1228 };
1229 
1230 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1231 	F(19200000, P_BI_TCXO, 1, 0, 0),
1232 	F(24000000, P_CAM_CC_PLL2_OUT_MAIN, 10, 1, 4),
1233 	F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0),
1234 	{ }
1235 };
1236 
1237 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1238 	.cmd_rcgr = 0x15000,
1239 	.mnd_width = 8,
1240 	.hid_width = 5,
1241 	.parent_map = cam_cc_parent_map_1,
1242 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1243 	.clkr.hw.init = &(const struct clk_init_data) {
1244 		.name = "cam_cc_mclk0_clk_src",
1245 		.parent_data = cam_cc_parent_data_1,
1246 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1247 		.flags = CLK_SET_RATE_PARENT,
1248 		.ops = &clk_rcg2_ops,
1249 	},
1250 };
1251 
1252 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1253 	.cmd_rcgr = 0x1501c,
1254 	.mnd_width = 8,
1255 	.hid_width = 5,
1256 	.parent_map = cam_cc_parent_map_1,
1257 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1258 	.clkr.hw.init = &(const struct clk_init_data) {
1259 		.name = "cam_cc_mclk1_clk_src",
1260 		.parent_data = cam_cc_parent_data_1,
1261 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1262 		.flags = CLK_SET_RATE_PARENT,
1263 		.ops = &clk_rcg2_ops,
1264 	},
1265 };
1266 
1267 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1268 	.cmd_rcgr = 0x15038,
1269 	.mnd_width = 8,
1270 	.hid_width = 5,
1271 	.parent_map = cam_cc_parent_map_1,
1272 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1273 	.clkr.hw.init = &(const struct clk_init_data) {
1274 		.name = "cam_cc_mclk2_clk_src",
1275 		.parent_data = cam_cc_parent_data_1,
1276 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1277 		.flags = CLK_SET_RATE_PARENT,
1278 		.ops = &clk_rcg2_ops,
1279 	},
1280 };
1281 
1282 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1283 	.cmd_rcgr = 0x15054,
1284 	.mnd_width = 8,
1285 	.hid_width = 5,
1286 	.parent_map = cam_cc_parent_map_1,
1287 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1288 	.clkr.hw.init = &(const struct clk_init_data) {
1289 		.name = "cam_cc_mclk3_clk_src",
1290 		.parent_data = cam_cc_parent_data_1,
1291 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1292 		.flags = CLK_SET_RATE_PARENT,
1293 		.ops = &clk_rcg2_ops,
1294 	},
1295 };
1296 
1297 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1298 	.cmd_rcgr = 0x15070,
1299 	.mnd_width = 8,
1300 	.hid_width = 5,
1301 	.parent_map = cam_cc_parent_map_1,
1302 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1303 	.clkr.hw.init = &(const struct clk_init_data) {
1304 		.name = "cam_cc_mclk4_clk_src",
1305 		.parent_data = cam_cc_parent_data_1,
1306 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1307 		.flags = CLK_SET_RATE_PARENT,
1308 		.ops = &clk_rcg2_ops,
1309 	},
1310 };
1311 
1312 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1313 	.cmd_rcgr = 0x1508c,
1314 	.mnd_width = 8,
1315 	.hid_width = 5,
1316 	.parent_map = cam_cc_parent_map_1,
1317 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1318 	.clkr.hw.init = &(const struct clk_init_data) {
1319 		.name = "cam_cc_mclk5_clk_src",
1320 		.parent_data = cam_cc_parent_data_1,
1321 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1322 		.flags = CLK_SET_RATE_PARENT,
1323 		.ops = &clk_rcg2_ops,
1324 	},
1325 };
1326 
1327 static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1328 	.cmd_rcgr = 0x150a8,
1329 	.mnd_width = 8,
1330 	.hid_width = 5,
1331 	.parent_map = cam_cc_parent_map_1,
1332 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1333 	.clkr.hw.init = &(const struct clk_init_data) {
1334 		.name = "cam_cc_mclk6_clk_src",
1335 		.parent_data = cam_cc_parent_data_1,
1336 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1337 		.flags = CLK_SET_RATE_PARENT,
1338 		.ops = &clk_rcg2_ops,
1339 	},
1340 };
1341 
1342 static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1343 	.cmd_rcgr = 0x150c4,
1344 	.mnd_width = 8,
1345 	.hid_width = 5,
1346 	.parent_map = cam_cc_parent_map_1,
1347 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1348 	.clkr.hw.init = &(const struct clk_init_data) {
1349 		.name = "cam_cc_mclk7_clk_src",
1350 		.parent_data = cam_cc_parent_data_1,
1351 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1352 		.flags = CLK_SET_RATE_PARENT,
1353 		.ops = &clk_rcg2_ops,
1354 	},
1355 };
1356 
1357 static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1358 	F(19200000, P_BI_TCXO, 1, 0, 0),
1359 	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1360 	F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1361 	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1362 	{ }
1363 };
1364 
1365 static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1366 	.cmd_rcgr = 0x131bc,
1367 	.mnd_width = 0,
1368 	.hid_width = 5,
1369 	.parent_map = cam_cc_parent_map_0,
1370 	.freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1371 	.clkr.hw.init = &(const struct clk_init_data) {
1372 		.name = "cam_cc_qdss_debug_clk_src",
1373 		.parent_data = cam_cc_parent_data_0,
1374 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1375 		.flags = CLK_SET_RATE_PARENT,
1376 		.ops = &clk_rcg2_ops,
1377 	},
1378 };
1379 
1380 static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
1381 	F(432000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1382 	F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1383 	F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1384 	F(727000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1385 	{ }
1386 };
1387 
1388 static struct clk_rcg2 cam_cc_sfe_0_clk_src = {
1389 	.cmd_rcgr = 0x13064,
1390 	.mnd_width = 0,
1391 	.hid_width = 5,
1392 	.parent_map = cam_cc_parent_map_6,
1393 	.freq_tbl = ftbl_cam_cc_sfe_0_clk_src,
1394 	.clkr.hw.init = &(const struct clk_init_data) {
1395 		.name = "cam_cc_sfe_0_clk_src",
1396 		.parent_data = cam_cc_parent_data_6,
1397 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1398 		.flags = CLK_SET_RATE_PARENT,
1399 		.ops = &clk_rcg2_ops,
1400 	},
1401 };
1402 
1403 static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = {
1404 	F(432000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1405 	F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1406 	F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1407 	F(727000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1408 	{ }
1409 };
1410 
1411 static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
1412 	.cmd_rcgr = 0x130ac,
1413 	.mnd_width = 0,
1414 	.hid_width = 5,
1415 	.parent_map = cam_cc_parent_map_7,
1416 	.freq_tbl = ftbl_cam_cc_sfe_1_clk_src,
1417 	.clkr.hw.init = &(const struct clk_init_data) {
1418 		.name = "cam_cc_sfe_1_clk_src",
1419 		.parent_data = cam_cc_parent_data_7,
1420 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1421 		.flags = CLK_SET_RATE_PARENT,
1422 		.ops = &clk_rcg2_ops,
1423 	},
1424 };
1425 
1426 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1427 	F(32000, P_SLEEP_CLK, 1, 0, 0),
1428 	{ }
1429 };
1430 
1431 static struct clk_rcg2 cam_cc_sleep_clk_src = {
1432 	.cmd_rcgr = 0x13210,
1433 	.mnd_width = 0,
1434 	.hid_width = 5,
1435 	.parent_map = cam_cc_parent_map_8,
1436 	.freq_tbl = ftbl_cam_cc_sleep_clk_src,
1437 	.clkr.hw.init = &(const struct clk_init_data) {
1438 		.name = "cam_cc_sleep_clk_src",
1439 		.parent_data = cam_cc_parent_data_8,
1440 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1441 		.flags = CLK_SET_RATE_PARENT,
1442 		.ops = &clk_rcg2_ops,
1443 	},
1444 };
1445 
1446 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1447 	F(19200000, P_BI_TCXO, 1, 0, 0),
1448 	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1449 	{ }
1450 };
1451 
1452 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1453 	.cmd_rcgr = 0x10034,
1454 	.mnd_width = 8,
1455 	.hid_width = 5,
1456 	.parent_map = cam_cc_parent_map_0,
1457 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1458 	.clkr.hw.init = &(const struct clk_init_data) {
1459 		.name = "cam_cc_slow_ahb_clk_src",
1460 		.parent_data = cam_cc_parent_data_0,
1461 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1462 		.flags = CLK_SET_RATE_PARENT,
1463 		.ops = &clk_rcg2_ops,
1464 	},
1465 };
1466 
1467 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1468 	F(19200000, P_BI_TCXO, 1, 0, 0),
1469 	{ }
1470 };
1471 
1472 static struct clk_rcg2 cam_cc_xo_clk_src = {
1473 	.cmd_rcgr = 0x131f4,
1474 	.mnd_width = 0,
1475 	.hid_width = 5,
1476 	.parent_map = cam_cc_parent_map_9,
1477 	.freq_tbl = ftbl_cam_cc_xo_clk_src,
1478 	.clkr.hw.init = &(const struct clk_init_data) {
1479 		.name = "cam_cc_xo_clk_src",
1480 		.parent_data = cam_cc_parent_data_9_ao,
1481 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_9_ao),
1482 		.flags = CLK_SET_RATE_PARENT,
1483 		.ops = &clk_rcg2_ops,
1484 	},
1485 };
1486 
1487 static struct clk_branch cam_cc_bps_ahb_clk = {
1488 	.halt_reg = 0x1004c,
1489 	.halt_check = BRANCH_HALT,
1490 	.clkr = {
1491 		.enable_reg = 0x1004c,
1492 		.enable_mask = BIT(0),
1493 		.hw.init = &(const struct clk_init_data) {
1494 			.name = "cam_cc_bps_ahb_clk",
1495 			.parent_hws = (const struct clk_hw*[]) {
1496 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1497 			},
1498 			.num_parents = 1,
1499 			.flags = CLK_SET_RATE_PARENT,
1500 			.ops = &clk_branch2_ops,
1501 		},
1502 	},
1503 };
1504 
1505 static struct clk_branch cam_cc_bps_clk = {
1506 	.halt_reg = 0x10068,
1507 	.halt_check = BRANCH_HALT,
1508 	.clkr = {
1509 		.enable_reg = 0x10068,
1510 		.enable_mask = BIT(0),
1511 		.hw.init = &(const struct clk_init_data) {
1512 			.name = "cam_cc_bps_clk",
1513 			.parent_hws = (const struct clk_hw*[]) {
1514 				&cam_cc_bps_clk_src.clkr.hw,
1515 			},
1516 			.num_parents = 1,
1517 			.flags = CLK_SET_RATE_PARENT,
1518 			.ops = &clk_branch2_ops,
1519 		},
1520 	},
1521 };
1522 
1523 static struct clk_branch cam_cc_bps_fast_ahb_clk = {
1524 	.halt_reg = 0x10030,
1525 	.halt_check = BRANCH_HALT,
1526 	.clkr = {
1527 		.enable_reg = 0x10030,
1528 		.enable_mask = BIT(0),
1529 		.hw.init = &(const struct clk_init_data) {
1530 			.name = "cam_cc_bps_fast_ahb_clk",
1531 			.parent_hws = (const struct clk_hw*[]) {
1532 				&cam_cc_fast_ahb_clk_src.clkr.hw,
1533 			},
1534 			.num_parents = 1,
1535 			.flags = CLK_SET_RATE_PARENT,
1536 			.ops = &clk_branch2_ops,
1537 		},
1538 	},
1539 };
1540 
1541 static struct clk_branch cam_cc_camnoc_axi_clk = {
1542 	.halt_reg = 0x131ac,
1543 	.halt_check = BRANCH_HALT,
1544 	.clkr = {
1545 		.enable_reg = 0x131ac,
1546 		.enable_mask = BIT(0),
1547 		.hw.init = &(const struct clk_init_data) {
1548 			.name = "cam_cc_camnoc_axi_clk",
1549 			.parent_hws = (const struct clk_hw*[]) {
1550 				&cam_cc_camnoc_axi_clk_src.clkr.hw,
1551 			},
1552 			.num_parents = 1,
1553 			.flags = CLK_SET_RATE_PARENT,
1554 			.ops = &clk_branch2_ops,
1555 		},
1556 	},
1557 };
1558 
1559 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1560 	.halt_reg = 0x131b4,
1561 	.halt_check = BRANCH_HALT,
1562 	.clkr = {
1563 		.enable_reg = 0x131b4,
1564 		.enable_mask = BIT(0),
1565 		.hw.init = &(const struct clk_init_data) {
1566 			.name = "cam_cc_camnoc_dcd_xo_clk",
1567 			.parent_hws = (const struct clk_hw*[]) {
1568 				&cam_cc_xo_clk_src.clkr.hw,
1569 			},
1570 			.num_parents = 1,
1571 			.flags = CLK_SET_RATE_PARENT,
1572 			.ops = &clk_branch2_ops,
1573 		},
1574 	},
1575 };
1576 
1577 static struct clk_branch cam_cc_cci_0_clk = {
1578 	.halt_reg = 0x13144,
1579 	.halt_check = BRANCH_HALT,
1580 	.clkr = {
1581 		.enable_reg = 0x13144,
1582 		.enable_mask = BIT(0),
1583 		.hw.init = &(const struct clk_init_data) {
1584 			.name = "cam_cc_cci_0_clk",
1585 			.parent_hws = (const struct clk_hw*[]) {
1586 				&cam_cc_cci_0_clk_src.clkr.hw,
1587 			},
1588 			.num_parents = 1,
1589 			.flags = CLK_SET_RATE_PARENT,
1590 			.ops = &clk_branch2_ops,
1591 		},
1592 	},
1593 };
1594 
1595 static struct clk_branch cam_cc_cci_1_clk = {
1596 	.halt_reg = 0x13160,
1597 	.halt_check = BRANCH_HALT,
1598 	.clkr = {
1599 		.enable_reg = 0x13160,
1600 		.enable_mask = BIT(0),
1601 		.hw.init = &(const struct clk_init_data) {
1602 			.name = "cam_cc_cci_1_clk",
1603 			.parent_hws = (const struct clk_hw*[]) {
1604 				&cam_cc_cci_1_clk_src.clkr.hw,
1605 			},
1606 			.num_parents = 1,
1607 			.flags = CLK_SET_RATE_PARENT,
1608 			.ops = &clk_branch2_ops,
1609 		},
1610 	},
1611 };
1612 
1613 static struct clk_branch cam_cc_core_ahb_clk = {
1614 	.halt_reg = 0x131f0,
1615 	.halt_check = BRANCH_HALT_DELAY,
1616 	.clkr = {
1617 		.enable_reg = 0x131f0,
1618 		.enable_mask = BIT(0),
1619 		.hw.init = &(const struct clk_init_data) {
1620 			.name = "cam_cc_core_ahb_clk",
1621 			.parent_hws = (const struct clk_hw*[]) {
1622 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1623 			},
1624 			.num_parents = 1,
1625 			.flags = CLK_SET_RATE_PARENT,
1626 			.ops = &clk_branch2_ops,
1627 		},
1628 	},
1629 };
1630 
1631 static struct clk_branch cam_cc_cpas_ahb_clk = {
1632 	.halt_reg = 0x13164,
1633 	.halt_check = BRANCH_HALT,
1634 	.clkr = {
1635 		.enable_reg = 0x13164,
1636 		.enable_mask = BIT(0),
1637 		.hw.init = &(const struct clk_init_data) {
1638 			.name = "cam_cc_cpas_ahb_clk",
1639 			.parent_hws = (const struct clk_hw*[]) {
1640 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1641 			},
1642 			.num_parents = 1,
1643 			.flags = CLK_SET_RATE_PARENT,
1644 			.ops = &clk_branch2_ops,
1645 		},
1646 	},
1647 };
1648 
1649 static struct clk_branch cam_cc_cpas_bps_clk = {
1650 	.halt_reg = 0x10070,
1651 	.halt_check = BRANCH_HALT,
1652 	.clkr = {
1653 		.enable_reg = 0x10070,
1654 		.enable_mask = BIT(0),
1655 		.hw.init = &(const struct clk_init_data) {
1656 			.name = "cam_cc_cpas_bps_clk",
1657 			.parent_hws = (const struct clk_hw*[]) {
1658 				&cam_cc_bps_clk_src.clkr.hw,
1659 			},
1660 			.num_parents = 1,
1661 			.flags = CLK_SET_RATE_PARENT,
1662 			.ops = &clk_branch2_ops,
1663 		},
1664 	},
1665 };
1666 
1667 static struct clk_branch cam_cc_cpas_fast_ahb_clk = {
1668 	.halt_reg = 0x1316c,
1669 	.halt_check = BRANCH_HALT,
1670 	.clkr = {
1671 		.enable_reg = 0x1316c,
1672 		.enable_mask = BIT(0),
1673 		.hw.init = &(const struct clk_init_data) {
1674 			.name = "cam_cc_cpas_fast_ahb_clk",
1675 			.parent_hws = (const struct clk_hw*[]) {
1676 				&cam_cc_fast_ahb_clk_src.clkr.hw,
1677 			},
1678 			.num_parents = 1,
1679 			.flags = CLK_SET_RATE_PARENT,
1680 			.ops = &clk_branch2_ops,
1681 		},
1682 	},
1683 };
1684 
1685 static struct clk_branch cam_cc_cpas_ife_0_clk = {
1686 	.halt_reg = 0x11038,
1687 	.halt_check = BRANCH_HALT,
1688 	.clkr = {
1689 		.enable_reg = 0x11038,
1690 		.enable_mask = BIT(0),
1691 		.hw.init = &(const struct clk_init_data) {
1692 			.name = "cam_cc_cpas_ife_0_clk",
1693 			.parent_hws = (const struct clk_hw*[]) {
1694 				&cam_cc_ife_0_clk_src.clkr.hw,
1695 			},
1696 			.num_parents = 1,
1697 			.flags = CLK_SET_RATE_PARENT,
1698 			.ops = &clk_branch2_ops,
1699 		},
1700 	},
1701 };
1702 
1703 static struct clk_branch cam_cc_cpas_ife_1_clk = {
1704 	.halt_reg = 0x12038,
1705 	.halt_check = BRANCH_HALT,
1706 	.clkr = {
1707 		.enable_reg = 0x12038,
1708 		.enable_mask = BIT(0),
1709 		.hw.init = &(const struct clk_init_data) {
1710 			.name = "cam_cc_cpas_ife_1_clk",
1711 			.parent_hws = (const struct clk_hw*[]) {
1712 				&cam_cc_ife_1_clk_src.clkr.hw,
1713 			},
1714 			.num_parents = 1,
1715 			.flags = CLK_SET_RATE_PARENT,
1716 			.ops = &clk_branch2_ops,
1717 		},
1718 	},
1719 };
1720 
1721 static struct clk_branch cam_cc_cpas_ife_2_clk = {
1722 	.halt_reg = 0x12084,
1723 	.halt_check = BRANCH_HALT,
1724 	.clkr = {
1725 		.enable_reg = 0x12084,
1726 		.enable_mask = BIT(0),
1727 		.hw.init = &(const struct clk_init_data) {
1728 			.name = "cam_cc_cpas_ife_2_clk",
1729 			.parent_hws = (const struct clk_hw*[]) {
1730 				&cam_cc_ife_2_clk_src.clkr.hw,
1731 			},
1732 			.num_parents = 1,
1733 			.flags = CLK_SET_RATE_PARENT,
1734 			.ops = &clk_branch2_ops,
1735 		},
1736 	},
1737 };
1738 
1739 static struct clk_branch cam_cc_cpas_ife_lite_clk = {
1740 	.halt_reg = 0x13020,
1741 	.halt_check = BRANCH_HALT,
1742 	.clkr = {
1743 		.enable_reg = 0x13020,
1744 		.enable_mask = BIT(0),
1745 		.hw.init = &(const struct clk_init_data) {
1746 			.name = "cam_cc_cpas_ife_lite_clk",
1747 			.parent_hws = (const struct clk_hw*[]) {
1748 				&cam_cc_ife_lite_clk_src.clkr.hw,
1749 			},
1750 			.num_parents = 1,
1751 			.flags = CLK_SET_RATE_PARENT,
1752 			.ops = &clk_branch2_ops,
1753 		},
1754 	},
1755 };
1756 
1757 static struct clk_branch cam_cc_cpas_ipe_nps_clk = {
1758 	.halt_reg = 0x100ac,
1759 	.halt_check = BRANCH_HALT,
1760 	.clkr = {
1761 		.enable_reg = 0x100ac,
1762 		.enable_mask = BIT(0),
1763 		.hw.init = &(const struct clk_init_data) {
1764 			.name = "cam_cc_cpas_ipe_nps_clk",
1765 			.parent_hws = (const struct clk_hw*[]) {
1766 				&cam_cc_ipe_nps_clk_src.clkr.hw,
1767 			},
1768 			.num_parents = 1,
1769 			.flags = CLK_SET_RATE_PARENT,
1770 			.ops = &clk_branch2_ops,
1771 		},
1772 	},
1773 };
1774 
1775 static struct clk_branch cam_cc_cpas_sbi_clk = {
1776 	.halt_reg = 0x100ec,
1777 	.halt_check = BRANCH_HALT,
1778 	.clkr = {
1779 		.enable_reg = 0x100ec,
1780 		.enable_mask = BIT(0),
1781 		.hw.init = &(const struct clk_init_data) {
1782 			.name = "cam_cc_cpas_sbi_clk",
1783 			.parent_hws = (const struct clk_hw*[]) {
1784 				&cam_cc_ife_0_clk_src.clkr.hw,
1785 			},
1786 			.num_parents = 1,
1787 			.flags = CLK_SET_RATE_PARENT,
1788 			.ops = &clk_branch2_ops,
1789 		},
1790 	},
1791 };
1792 
1793 static struct clk_branch cam_cc_cpas_sfe_0_clk = {
1794 	.halt_reg = 0x13084,
1795 	.halt_check = BRANCH_HALT,
1796 	.clkr = {
1797 		.enable_reg = 0x13084,
1798 		.enable_mask = BIT(0),
1799 		.hw.init = &(const struct clk_init_data) {
1800 			.name = "cam_cc_cpas_sfe_0_clk",
1801 			.parent_hws = (const struct clk_hw*[]) {
1802 				&cam_cc_sfe_0_clk_src.clkr.hw,
1803 			},
1804 			.num_parents = 1,
1805 			.flags = CLK_SET_RATE_PARENT,
1806 			.ops = &clk_branch2_ops,
1807 		},
1808 	},
1809 };
1810 
1811 static struct clk_branch cam_cc_cpas_sfe_1_clk = {
1812 	.halt_reg = 0x130cc,
1813 	.halt_check = BRANCH_HALT,
1814 	.clkr = {
1815 		.enable_reg = 0x130cc,
1816 		.enable_mask = BIT(0),
1817 		.hw.init = &(const struct clk_init_data) {
1818 			.name = "cam_cc_cpas_sfe_1_clk",
1819 			.parent_hws = (const struct clk_hw*[]) {
1820 				&cam_cc_sfe_1_clk_src.clkr.hw,
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 cam_cc_csi0phytimer_clk = {
1830 	.halt_reg = 0x150f8,
1831 	.halt_check = BRANCH_HALT,
1832 	.clkr = {
1833 		.enable_reg = 0x150f8,
1834 		.enable_mask = BIT(0),
1835 		.hw.init = &(const struct clk_init_data) {
1836 			.name = "cam_cc_csi0phytimer_clk",
1837 			.parent_hws = (const struct clk_hw*[]) {
1838 				&cam_cc_csi0phytimer_clk_src.clkr.hw,
1839 			},
1840 			.num_parents = 1,
1841 			.flags = CLK_SET_RATE_PARENT,
1842 			.ops = &clk_branch2_ops,
1843 		},
1844 	},
1845 };
1846 
1847 static struct clk_branch cam_cc_csi1phytimer_clk = {
1848 	.halt_reg = 0x1511c,
1849 	.halt_check = BRANCH_HALT,
1850 	.clkr = {
1851 		.enable_reg = 0x1511c,
1852 		.enable_mask = BIT(0),
1853 		.hw.init = &(const struct clk_init_data) {
1854 			.name = "cam_cc_csi1phytimer_clk",
1855 			.parent_hws = (const struct clk_hw*[]) {
1856 				&cam_cc_csi1phytimer_clk_src.clkr.hw,
1857 			},
1858 			.num_parents = 1,
1859 			.flags = CLK_SET_RATE_PARENT,
1860 			.ops = &clk_branch2_ops,
1861 		},
1862 	},
1863 };
1864 
1865 static struct clk_branch cam_cc_csi2phytimer_clk = {
1866 	.halt_reg = 0x1513c,
1867 	.halt_check = BRANCH_HALT,
1868 	.clkr = {
1869 		.enable_reg = 0x1513c,
1870 		.enable_mask = BIT(0),
1871 		.hw.init = &(const struct clk_init_data) {
1872 			.name = "cam_cc_csi2phytimer_clk",
1873 			.parent_hws = (const struct clk_hw*[]) {
1874 				&cam_cc_csi2phytimer_clk_src.clkr.hw,
1875 			},
1876 			.num_parents = 1,
1877 			.flags = CLK_SET_RATE_PARENT,
1878 			.ops = &clk_branch2_ops,
1879 		},
1880 	},
1881 };
1882 
1883 static struct clk_branch cam_cc_csi3phytimer_clk = {
1884 	.halt_reg = 0x15164,
1885 	.halt_check = BRANCH_HALT,
1886 	.clkr = {
1887 		.enable_reg = 0x15164,
1888 		.enable_mask = BIT(0),
1889 		.hw.init = &(const struct clk_init_data) {
1890 			.name = "cam_cc_csi3phytimer_clk",
1891 			.parent_hws = (const struct clk_hw*[]) {
1892 				&cam_cc_csi3phytimer_clk_src.clkr.hw,
1893 			},
1894 			.num_parents = 1,
1895 			.flags = CLK_SET_RATE_PARENT,
1896 			.ops = &clk_branch2_ops,
1897 		},
1898 	},
1899 };
1900 
1901 static struct clk_branch cam_cc_csi4phytimer_clk = {
1902 	.halt_reg = 0x15184,
1903 	.halt_check = BRANCH_HALT,
1904 	.clkr = {
1905 		.enable_reg = 0x15184,
1906 		.enable_mask = BIT(0),
1907 		.hw.init = &(const struct clk_init_data) {
1908 			.name = "cam_cc_csi4phytimer_clk",
1909 			.parent_hws = (const struct clk_hw*[]) {
1910 				&cam_cc_csi4phytimer_clk_src.clkr.hw,
1911 			},
1912 			.num_parents = 1,
1913 			.flags = CLK_SET_RATE_PARENT,
1914 			.ops = &clk_branch2_ops,
1915 		},
1916 	},
1917 };
1918 
1919 static struct clk_branch cam_cc_csi5phytimer_clk = {
1920 	.halt_reg = 0x151a4,
1921 	.halt_check = BRANCH_HALT,
1922 	.clkr = {
1923 		.enable_reg = 0x151a4,
1924 		.enable_mask = BIT(0),
1925 		.hw.init = &(const struct clk_init_data) {
1926 			.name = "cam_cc_csi5phytimer_clk",
1927 			.parent_hws = (const struct clk_hw*[]) {
1928 				&cam_cc_csi5phytimer_clk_src.clkr.hw,
1929 			},
1930 			.num_parents = 1,
1931 			.flags = CLK_SET_RATE_PARENT,
1932 			.ops = &clk_branch2_ops,
1933 		},
1934 	},
1935 };
1936 
1937 static struct clk_branch cam_cc_csid_clk = {
1938 	.halt_reg = 0x1318c,
1939 	.halt_check = BRANCH_HALT,
1940 	.clkr = {
1941 		.enable_reg = 0x1318c,
1942 		.enable_mask = BIT(0),
1943 		.hw.init = &(const struct clk_init_data) {
1944 			.name = "cam_cc_csid_clk",
1945 			.parent_hws = (const struct clk_hw*[]) {
1946 				&cam_cc_csid_clk_src.clkr.hw,
1947 			},
1948 			.num_parents = 1,
1949 			.flags = CLK_SET_RATE_PARENT,
1950 			.ops = &clk_branch2_ops,
1951 		},
1952 	},
1953 };
1954 
1955 static struct clk_branch cam_cc_csid_csiphy_rx_clk = {
1956 	.halt_reg = 0x15100,
1957 	.halt_check = BRANCH_HALT,
1958 	.clkr = {
1959 		.enable_reg = 0x15100,
1960 		.enable_mask = BIT(0),
1961 		.hw.init = &(const struct clk_init_data) {
1962 			.name = "cam_cc_csid_csiphy_rx_clk",
1963 			.parent_hws = (const struct clk_hw*[]) {
1964 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1965 			},
1966 			.num_parents = 1,
1967 			.flags = CLK_SET_RATE_PARENT,
1968 			.ops = &clk_branch2_ops,
1969 		},
1970 	},
1971 };
1972 
1973 static struct clk_branch cam_cc_csiphy0_clk = {
1974 	.halt_reg = 0x150fc,
1975 	.halt_check = BRANCH_HALT,
1976 	.clkr = {
1977 		.enable_reg = 0x150fc,
1978 		.enable_mask = BIT(0),
1979 		.hw.init = &(const struct clk_init_data) {
1980 			.name = "cam_cc_csiphy0_clk",
1981 			.parent_hws = (const struct clk_hw*[]) {
1982 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1983 			},
1984 			.num_parents = 1,
1985 			.flags = CLK_SET_RATE_PARENT,
1986 			.ops = &clk_branch2_ops,
1987 		},
1988 	},
1989 };
1990 
1991 static struct clk_branch cam_cc_csiphy1_clk = {
1992 	.halt_reg = 0x15120,
1993 	.halt_check = BRANCH_HALT,
1994 	.clkr = {
1995 		.enable_reg = 0x15120,
1996 		.enable_mask = BIT(0),
1997 		.hw.init = &(const struct clk_init_data) {
1998 			.name = "cam_cc_csiphy1_clk",
1999 			.parent_hws = (const struct clk_hw*[]) {
2000 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2001 			},
2002 			.num_parents = 1,
2003 			.flags = CLK_SET_RATE_PARENT,
2004 			.ops = &clk_branch2_ops,
2005 		},
2006 	},
2007 };
2008 
2009 static struct clk_branch cam_cc_csiphy2_clk = {
2010 	.halt_reg = 0x15140,
2011 	.halt_check = BRANCH_HALT,
2012 	.clkr = {
2013 		.enable_reg = 0x15140,
2014 		.enable_mask = BIT(0),
2015 		.hw.init = &(const struct clk_init_data) {
2016 			.name = "cam_cc_csiphy2_clk",
2017 			.parent_hws = (const struct clk_hw*[]) {
2018 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2019 			},
2020 			.num_parents = 1,
2021 			.flags = CLK_SET_RATE_PARENT,
2022 			.ops = &clk_branch2_ops,
2023 		},
2024 	},
2025 };
2026 
2027 static struct clk_branch cam_cc_csiphy3_clk = {
2028 	.halt_reg = 0x15168,
2029 	.halt_check = BRANCH_HALT,
2030 	.clkr = {
2031 		.enable_reg = 0x15168,
2032 		.enable_mask = BIT(0),
2033 		.hw.init = &(const struct clk_init_data) {
2034 			.name = "cam_cc_csiphy3_clk",
2035 			.parent_hws = (const struct clk_hw*[]) {
2036 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2037 			},
2038 			.num_parents = 1,
2039 			.flags = CLK_SET_RATE_PARENT,
2040 			.ops = &clk_branch2_ops,
2041 		},
2042 	},
2043 };
2044 
2045 static struct clk_branch cam_cc_csiphy4_clk = {
2046 	.halt_reg = 0x15188,
2047 	.halt_check = BRANCH_HALT,
2048 	.clkr = {
2049 		.enable_reg = 0x15188,
2050 		.enable_mask = BIT(0),
2051 		.hw.init = &(const struct clk_init_data) {
2052 			.name = "cam_cc_csiphy4_clk",
2053 			.parent_hws = (const struct clk_hw*[]) {
2054 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2055 			},
2056 			.num_parents = 1,
2057 			.flags = CLK_SET_RATE_PARENT,
2058 			.ops = &clk_branch2_ops,
2059 		},
2060 	},
2061 };
2062 
2063 static struct clk_branch cam_cc_csiphy5_clk = {
2064 	.halt_reg = 0x151a8,
2065 	.halt_check = BRANCH_HALT,
2066 	.clkr = {
2067 		.enable_reg = 0x151a8,
2068 		.enable_mask = BIT(0),
2069 		.hw.init = &(const struct clk_init_data) {
2070 			.name = "cam_cc_csiphy5_clk",
2071 			.parent_hws = (const struct clk_hw*[]) {
2072 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2073 			},
2074 			.num_parents = 1,
2075 			.flags = CLK_SET_RATE_PARENT,
2076 			.ops = &clk_branch2_ops,
2077 		},
2078 	},
2079 };
2080 
2081 static struct clk_branch cam_cc_icp_ahb_clk = {
2082 	.halt_reg = 0x13128,
2083 	.halt_check = BRANCH_HALT,
2084 	.clkr = {
2085 		.enable_reg = 0x13128,
2086 		.enable_mask = BIT(0),
2087 		.hw.init = &(const struct clk_init_data) {
2088 			.name = "cam_cc_icp_ahb_clk",
2089 			.parent_hws = (const struct clk_hw*[]) {
2090 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2091 			},
2092 			.num_parents = 1,
2093 			.flags = CLK_SET_RATE_PARENT,
2094 			.ops = &clk_branch2_ops,
2095 		},
2096 	},
2097 };
2098 
2099 static struct clk_branch cam_cc_icp_clk = {
2100 	.halt_reg = 0x13120,
2101 	.halt_check = BRANCH_HALT,
2102 	.clkr = {
2103 		.enable_reg = 0x13120,
2104 		.enable_mask = BIT(0),
2105 		.hw.init = &(const struct clk_init_data) {
2106 			.name = "cam_cc_icp_clk",
2107 			.parent_hws = (const struct clk_hw*[]) {
2108 				&cam_cc_icp_clk_src.clkr.hw,
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 cam_cc_ife_0_clk = {
2118 	.halt_reg = 0x11030,
2119 	.halt_check = BRANCH_HALT,
2120 	.clkr = {
2121 		.enable_reg = 0x11030,
2122 		.enable_mask = BIT(0),
2123 		.hw.init = &(const struct clk_init_data) {
2124 			.name = "cam_cc_ife_0_clk",
2125 			.parent_hws = (const struct clk_hw*[]) {
2126 				&cam_cc_ife_0_clk_src.clkr.hw,
2127 			},
2128 			.num_parents = 1,
2129 			.flags = CLK_SET_RATE_PARENT,
2130 			.ops = &clk_branch2_ops,
2131 		},
2132 	},
2133 };
2134 
2135 static struct clk_branch cam_cc_ife_0_dsp_clk = {
2136 	.halt_reg = 0x1103c,
2137 	.halt_check = BRANCH_HALT,
2138 	.clkr = {
2139 		.enable_reg = 0x1103c,
2140 		.enable_mask = BIT(0),
2141 		.hw.init = &(const struct clk_init_data) {
2142 			.name = "cam_cc_ife_0_dsp_clk",
2143 			.parent_hws = (const struct clk_hw*[]) {
2144 				&cam_cc_ife_0_clk_src.clkr.hw,
2145 			},
2146 			.num_parents = 1,
2147 			.flags = CLK_SET_RATE_PARENT,
2148 			.ops = &clk_branch2_ops,
2149 		},
2150 	},
2151 };
2152 
2153 static struct clk_branch cam_cc_ife_0_fast_ahb_clk = {
2154 	.halt_reg = 0x11048,
2155 	.halt_check = BRANCH_HALT,
2156 	.clkr = {
2157 		.enable_reg = 0x11048,
2158 		.enable_mask = BIT(0),
2159 		.hw.init = &(const struct clk_init_data) {
2160 			.name = "cam_cc_ife_0_fast_ahb_clk",
2161 			.parent_hws = (const struct clk_hw*[]) {
2162 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2163 			},
2164 			.num_parents = 1,
2165 			.flags = CLK_SET_RATE_PARENT,
2166 			.ops = &clk_branch2_ops,
2167 		},
2168 	},
2169 };
2170 
2171 static struct clk_branch cam_cc_ife_1_clk = {
2172 	.halt_reg = 0x12030,
2173 	.halt_check = BRANCH_HALT,
2174 	.clkr = {
2175 		.enable_reg = 0x12030,
2176 		.enable_mask = BIT(0),
2177 		.hw.init = &(const struct clk_init_data) {
2178 			.name = "cam_cc_ife_1_clk",
2179 			.parent_hws = (const struct clk_hw*[]) {
2180 				&cam_cc_ife_1_clk_src.clkr.hw,
2181 			},
2182 			.num_parents = 1,
2183 			.flags = CLK_SET_RATE_PARENT,
2184 			.ops = &clk_branch2_ops,
2185 		},
2186 	},
2187 };
2188 
2189 static struct clk_branch cam_cc_ife_1_dsp_clk = {
2190 	.halt_reg = 0x1203c,
2191 	.halt_check = BRANCH_HALT,
2192 	.clkr = {
2193 		.enable_reg = 0x1203c,
2194 		.enable_mask = BIT(0),
2195 		.hw.init = &(const struct clk_init_data) {
2196 			.name = "cam_cc_ife_1_dsp_clk",
2197 			.parent_hws = (const struct clk_hw*[]) {
2198 				&cam_cc_ife_1_clk_src.clkr.hw,
2199 			},
2200 			.num_parents = 1,
2201 			.flags = CLK_SET_RATE_PARENT,
2202 			.ops = &clk_branch2_ops,
2203 		},
2204 	},
2205 };
2206 
2207 static struct clk_branch cam_cc_ife_1_fast_ahb_clk = {
2208 	.halt_reg = 0x12048,
2209 	.halt_check = BRANCH_HALT,
2210 	.clkr = {
2211 		.enable_reg = 0x12048,
2212 		.enable_mask = BIT(0),
2213 		.hw.init = &(const struct clk_init_data) {
2214 			.name = "cam_cc_ife_1_fast_ahb_clk",
2215 			.parent_hws = (const struct clk_hw*[]) {
2216 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2217 			},
2218 			.num_parents = 1,
2219 			.flags = CLK_SET_RATE_PARENT,
2220 			.ops = &clk_branch2_ops,
2221 		},
2222 	},
2223 };
2224 
2225 static struct clk_branch cam_cc_ife_2_clk = {
2226 	.halt_reg = 0x1207c,
2227 	.halt_check = BRANCH_HALT,
2228 	.clkr = {
2229 		.enable_reg = 0x1207c,
2230 		.enable_mask = BIT(0),
2231 		.hw.init = &(const struct clk_init_data) {
2232 			.name = "cam_cc_ife_2_clk",
2233 			.parent_hws = (const struct clk_hw*[]) {
2234 				&cam_cc_ife_2_clk_src.clkr.hw,
2235 			},
2236 			.num_parents = 1,
2237 			.flags = CLK_SET_RATE_PARENT,
2238 			.ops = &clk_branch2_ops,
2239 		},
2240 	},
2241 };
2242 
2243 static struct clk_branch cam_cc_ife_2_dsp_clk = {
2244 	.halt_reg = 0x12088,
2245 	.halt_check = BRANCH_HALT,
2246 	.clkr = {
2247 		.enable_reg = 0x12088,
2248 		.enable_mask = BIT(0),
2249 		.hw.init = &(const struct clk_init_data) {
2250 			.name = "cam_cc_ife_2_dsp_clk",
2251 			.parent_hws = (const struct clk_hw*[]) {
2252 				&cam_cc_ife_2_clk_src.clkr.hw,
2253 			},
2254 			.num_parents = 1,
2255 			.flags = CLK_SET_RATE_PARENT,
2256 			.ops = &clk_branch2_ops,
2257 		},
2258 	},
2259 };
2260 
2261 static struct clk_branch cam_cc_ife_2_fast_ahb_clk = {
2262 	.halt_reg = 0x12094,
2263 	.halt_check = BRANCH_HALT,
2264 	.clkr = {
2265 		.enable_reg = 0x12094,
2266 		.enable_mask = BIT(0),
2267 		.hw.init = &(const struct clk_init_data) {
2268 			.name = "cam_cc_ife_2_fast_ahb_clk",
2269 			.parent_hws = (const struct clk_hw*[]) {
2270 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2271 			},
2272 			.num_parents = 1,
2273 			.flags = CLK_SET_RATE_PARENT,
2274 			.ops = &clk_branch2_ops,
2275 		},
2276 	},
2277 };
2278 
2279 static struct clk_branch cam_cc_ife_lite_ahb_clk = {
2280 	.halt_reg = 0x13048,
2281 	.halt_check = BRANCH_HALT,
2282 	.clkr = {
2283 		.enable_reg = 0x13048,
2284 		.enable_mask = BIT(0),
2285 		.hw.init = &(const struct clk_init_data) {
2286 			.name = "cam_cc_ife_lite_ahb_clk",
2287 			.parent_hws = (const struct clk_hw*[]) {
2288 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2289 			},
2290 			.num_parents = 1,
2291 			.flags = CLK_SET_RATE_PARENT,
2292 			.ops = &clk_branch2_ops,
2293 		},
2294 	},
2295 };
2296 
2297 static struct clk_branch cam_cc_ife_lite_clk = {
2298 	.halt_reg = 0x13018,
2299 	.halt_check = BRANCH_HALT,
2300 	.clkr = {
2301 		.enable_reg = 0x13018,
2302 		.enable_mask = BIT(0),
2303 		.hw.init = &(const struct clk_init_data) {
2304 			.name = "cam_cc_ife_lite_clk",
2305 			.parent_hws = (const struct clk_hw*[]) {
2306 				&cam_cc_ife_lite_clk_src.clkr.hw,
2307 			},
2308 			.num_parents = 1,
2309 			.flags = CLK_SET_RATE_PARENT,
2310 			.ops = &clk_branch2_ops,
2311 		},
2312 	},
2313 };
2314 
2315 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
2316 	.halt_reg = 0x13044,
2317 	.halt_check = BRANCH_HALT,
2318 	.clkr = {
2319 		.enable_reg = 0x13044,
2320 		.enable_mask = BIT(0),
2321 		.hw.init = &(const struct clk_init_data) {
2322 			.name = "cam_cc_ife_lite_cphy_rx_clk",
2323 			.parent_hws = (const struct clk_hw*[]) {
2324 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2325 			},
2326 			.num_parents = 1,
2327 			.flags = CLK_SET_RATE_PARENT,
2328 			.ops = &clk_branch2_ops,
2329 		},
2330 	},
2331 };
2332 
2333 static struct clk_branch cam_cc_ife_lite_csid_clk = {
2334 	.halt_reg = 0x1303c,
2335 	.halt_check = BRANCH_HALT,
2336 	.clkr = {
2337 		.enable_reg = 0x1303c,
2338 		.enable_mask = BIT(0),
2339 		.hw.init = &(const struct clk_init_data) {
2340 			.name = "cam_cc_ife_lite_csid_clk",
2341 			.parent_hws = (const struct clk_hw*[]) {
2342 				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
2343 			},
2344 			.num_parents = 1,
2345 			.flags = CLK_SET_RATE_PARENT,
2346 			.ops = &clk_branch2_ops,
2347 		},
2348 	},
2349 };
2350 
2351 static struct clk_branch cam_cc_ipe_nps_ahb_clk = {
2352 	.halt_reg = 0x100c0,
2353 	.halt_check = BRANCH_HALT,
2354 	.clkr = {
2355 		.enable_reg = 0x100c0,
2356 		.enable_mask = BIT(0),
2357 		.hw.init = &(const struct clk_init_data) {
2358 			.name = "cam_cc_ipe_nps_ahb_clk",
2359 			.parent_hws = (const struct clk_hw*[]) {
2360 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2361 			},
2362 			.num_parents = 1,
2363 			.flags = CLK_SET_RATE_PARENT,
2364 			.ops = &clk_branch2_ops,
2365 		},
2366 	},
2367 };
2368 
2369 static struct clk_branch cam_cc_ipe_nps_clk = {
2370 	.halt_reg = 0x100a4,
2371 	.halt_check = BRANCH_HALT,
2372 	.clkr = {
2373 		.enable_reg = 0x100a4,
2374 		.enable_mask = BIT(0),
2375 		.hw.init = &(const struct clk_init_data) {
2376 			.name = "cam_cc_ipe_nps_clk",
2377 			.parent_hws = (const struct clk_hw*[]) {
2378 				&cam_cc_ipe_nps_clk_src.clkr.hw,
2379 			},
2380 			.num_parents = 1,
2381 			.flags = CLK_SET_RATE_PARENT,
2382 			.ops = &clk_branch2_ops,
2383 		},
2384 	},
2385 };
2386 
2387 static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = {
2388 	.halt_reg = 0x100c4,
2389 	.halt_check = BRANCH_HALT,
2390 	.clkr = {
2391 		.enable_reg = 0x100c4,
2392 		.enable_mask = BIT(0),
2393 		.hw.init = &(const struct clk_init_data) {
2394 			.name = "cam_cc_ipe_nps_fast_ahb_clk",
2395 			.parent_hws = (const struct clk_hw*[]) {
2396 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2397 			},
2398 			.num_parents = 1,
2399 			.flags = CLK_SET_RATE_PARENT,
2400 			.ops = &clk_branch2_ops,
2401 		},
2402 	},
2403 };
2404 
2405 static struct clk_branch cam_cc_ipe_pps_clk = {
2406 	.halt_reg = 0x100b0,
2407 	.halt_check = BRANCH_HALT,
2408 	.clkr = {
2409 		.enable_reg = 0x100b0,
2410 		.enable_mask = BIT(0),
2411 		.hw.init = &(const struct clk_init_data) {
2412 			.name = "cam_cc_ipe_pps_clk",
2413 			.parent_hws = (const struct clk_hw*[]) {
2414 				&cam_cc_ipe_nps_clk_src.clkr.hw,
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 cam_cc_ipe_pps_fast_ahb_clk = {
2424 	.halt_reg = 0x100c8,
2425 	.halt_check = BRANCH_HALT,
2426 	.clkr = {
2427 		.enable_reg = 0x100c8,
2428 		.enable_mask = BIT(0),
2429 		.hw.init = &(const struct clk_init_data) {
2430 			.name = "cam_cc_ipe_pps_fast_ahb_clk",
2431 			.parent_hws = (const struct clk_hw*[]) {
2432 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2433 			},
2434 			.num_parents = 1,
2435 			.flags = CLK_SET_RATE_PARENT,
2436 			.ops = &clk_branch2_ops,
2437 		},
2438 	},
2439 };
2440 
2441 static struct clk_branch cam_cc_jpeg_clk = {
2442 	.halt_reg = 0x130f4,
2443 	.halt_check = BRANCH_HALT,
2444 	.clkr = {
2445 		.enable_reg = 0x130f4,
2446 		.enable_mask = BIT(0),
2447 		.hw.init = &(const struct clk_init_data) {
2448 			.name = "cam_cc_jpeg_clk",
2449 			.parent_hws = (const struct clk_hw*[]) {
2450 				&cam_cc_jpeg_clk_src.clkr.hw,
2451 			},
2452 			.num_parents = 1,
2453 			.flags = CLK_SET_RATE_PARENT,
2454 			.ops = &clk_branch2_ops,
2455 		},
2456 	},
2457 };
2458 
2459 static struct clk_branch cam_cc_mclk0_clk = {
2460 	.halt_reg = 0x15018,
2461 	.halt_check = BRANCH_HALT,
2462 	.clkr = {
2463 		.enable_reg = 0x15018,
2464 		.enable_mask = BIT(0),
2465 		.hw.init = &(const struct clk_init_data) {
2466 			.name = "cam_cc_mclk0_clk",
2467 			.parent_hws = (const struct clk_hw*[]) {
2468 				&cam_cc_mclk0_clk_src.clkr.hw,
2469 			},
2470 			.num_parents = 1,
2471 			.flags = CLK_SET_RATE_PARENT,
2472 			.ops = &clk_branch2_ops,
2473 		},
2474 	},
2475 };
2476 
2477 static struct clk_branch cam_cc_mclk1_clk = {
2478 	.halt_reg = 0x15034,
2479 	.halt_check = BRANCH_HALT,
2480 	.clkr = {
2481 		.enable_reg = 0x15034,
2482 		.enable_mask = BIT(0),
2483 		.hw.init = &(const struct clk_init_data) {
2484 			.name = "cam_cc_mclk1_clk",
2485 			.parent_hws = (const struct clk_hw*[]) {
2486 				&cam_cc_mclk1_clk_src.clkr.hw,
2487 			},
2488 			.num_parents = 1,
2489 			.flags = CLK_SET_RATE_PARENT,
2490 			.ops = &clk_branch2_ops,
2491 		},
2492 	},
2493 };
2494 
2495 static struct clk_branch cam_cc_mclk2_clk = {
2496 	.halt_reg = 0x15050,
2497 	.halt_check = BRANCH_HALT,
2498 	.clkr = {
2499 		.enable_reg = 0x15050,
2500 		.enable_mask = BIT(0),
2501 		.hw.init = &(const struct clk_init_data) {
2502 			.name = "cam_cc_mclk2_clk",
2503 			.parent_hws = (const struct clk_hw*[]) {
2504 				&cam_cc_mclk2_clk_src.clkr.hw,
2505 			},
2506 			.num_parents = 1,
2507 			.flags = CLK_SET_RATE_PARENT,
2508 			.ops = &clk_branch2_ops,
2509 		},
2510 	},
2511 };
2512 
2513 static struct clk_branch cam_cc_mclk3_clk = {
2514 	.halt_reg = 0x1506c,
2515 	.halt_check = BRANCH_HALT,
2516 	.clkr = {
2517 		.enable_reg = 0x1506c,
2518 		.enable_mask = BIT(0),
2519 		.hw.init = &(const struct clk_init_data) {
2520 			.name = "cam_cc_mclk3_clk",
2521 			.parent_hws = (const struct clk_hw*[]) {
2522 				&cam_cc_mclk3_clk_src.clkr.hw,
2523 			},
2524 			.num_parents = 1,
2525 			.flags = CLK_SET_RATE_PARENT,
2526 			.ops = &clk_branch2_ops,
2527 		},
2528 	},
2529 };
2530 
2531 static struct clk_branch cam_cc_mclk4_clk = {
2532 	.halt_reg = 0x15088,
2533 	.halt_check = BRANCH_HALT,
2534 	.clkr = {
2535 		.enable_reg = 0x15088,
2536 		.enable_mask = BIT(0),
2537 		.hw.init = &(const struct clk_init_data) {
2538 			.name = "cam_cc_mclk4_clk",
2539 			.parent_hws = (const struct clk_hw*[]) {
2540 				&cam_cc_mclk4_clk_src.clkr.hw,
2541 			},
2542 			.num_parents = 1,
2543 			.flags = CLK_SET_RATE_PARENT,
2544 			.ops = &clk_branch2_ops,
2545 		},
2546 	},
2547 };
2548 
2549 static struct clk_branch cam_cc_mclk5_clk = {
2550 	.halt_reg = 0x150a4,
2551 	.halt_check = BRANCH_HALT,
2552 	.clkr = {
2553 		.enable_reg = 0x150a4,
2554 		.enable_mask = BIT(0),
2555 		.hw.init = &(const struct clk_init_data) {
2556 			.name = "cam_cc_mclk5_clk",
2557 			.parent_hws = (const struct clk_hw*[]) {
2558 				&cam_cc_mclk5_clk_src.clkr.hw,
2559 			},
2560 			.num_parents = 1,
2561 			.flags = CLK_SET_RATE_PARENT,
2562 			.ops = &clk_branch2_ops,
2563 		},
2564 	},
2565 };
2566 
2567 static struct clk_branch cam_cc_mclk6_clk = {
2568 	.halt_reg = 0x150c0,
2569 	.halt_check = BRANCH_HALT,
2570 	.clkr = {
2571 		.enable_reg = 0x150c0,
2572 		.enable_mask = BIT(0),
2573 		.hw.init = &(const struct clk_init_data) {
2574 			.name = "cam_cc_mclk6_clk",
2575 			.parent_hws = (const struct clk_hw*[]) {
2576 				&cam_cc_mclk6_clk_src.clkr.hw,
2577 			},
2578 			.num_parents = 1,
2579 			.flags = CLK_SET_RATE_PARENT,
2580 			.ops = &clk_branch2_ops,
2581 		},
2582 	},
2583 };
2584 
2585 static struct clk_branch cam_cc_mclk7_clk = {
2586 	.halt_reg = 0x150dc,
2587 	.halt_check = BRANCH_HALT,
2588 	.clkr = {
2589 		.enable_reg = 0x150dc,
2590 		.enable_mask = BIT(0),
2591 		.hw.init = &(const struct clk_init_data) {
2592 			.name = "cam_cc_mclk7_clk",
2593 			.parent_hws = (const struct clk_hw*[]) {
2594 				&cam_cc_mclk7_clk_src.clkr.hw,
2595 			},
2596 			.num_parents = 1,
2597 			.flags = CLK_SET_RATE_PARENT,
2598 			.ops = &clk_branch2_ops,
2599 		},
2600 	},
2601 };
2602 
2603 static struct clk_branch cam_cc_qdss_debug_clk = {
2604 	.halt_reg = 0x131d4,
2605 	.halt_check = BRANCH_HALT,
2606 	.clkr = {
2607 		.enable_reg = 0x131d4,
2608 		.enable_mask = BIT(0),
2609 		.hw.init = &(const struct clk_init_data) {
2610 			.name = "cam_cc_qdss_debug_clk",
2611 			.parent_hws = (const struct clk_hw*[]) {
2612 				&cam_cc_qdss_debug_clk_src.clkr.hw,
2613 			},
2614 			.num_parents = 1,
2615 			.flags = CLK_SET_RATE_PARENT,
2616 			.ops = &clk_branch2_ops,
2617 		},
2618 	},
2619 };
2620 
2621 static struct clk_branch cam_cc_qdss_debug_xo_clk = {
2622 	.halt_reg = 0x131d8,
2623 	.halt_check = BRANCH_HALT,
2624 	.clkr = {
2625 		.enable_reg = 0x131d8,
2626 		.enable_mask = BIT(0),
2627 		.hw.init = &(const struct clk_init_data) {
2628 			.name = "cam_cc_qdss_debug_xo_clk",
2629 			.parent_hws = (const struct clk_hw*[]) {
2630 				&cam_cc_xo_clk_src.clkr.hw,
2631 			},
2632 			.num_parents = 1,
2633 			.flags = CLK_SET_RATE_PARENT,
2634 			.ops = &clk_branch2_ops,
2635 		},
2636 	},
2637 };
2638 
2639 static struct clk_branch cam_cc_sbi_ahb_clk = {
2640 	.halt_reg = 0x100f0,
2641 	.halt_check = BRANCH_HALT,
2642 	.clkr = {
2643 		.enable_reg = 0x100f0,
2644 		.enable_mask = BIT(0),
2645 		.hw.init = &(const struct clk_init_data) {
2646 			.name = "cam_cc_sbi_ahb_clk",
2647 			.parent_hws = (const struct clk_hw*[]) {
2648 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2649 			},
2650 			.num_parents = 1,
2651 			.flags = CLK_SET_RATE_PARENT,
2652 			.ops = &clk_branch2_ops,
2653 		},
2654 	},
2655 };
2656 
2657 static struct clk_branch cam_cc_sbi_clk = {
2658 	.halt_reg = 0x100e4,
2659 	.halt_check = BRANCH_HALT,
2660 	.clkr = {
2661 		.enable_reg = 0x100e4,
2662 		.enable_mask = BIT(0),
2663 		.hw.init = &(const struct clk_init_data) {
2664 			.name = "cam_cc_sbi_clk",
2665 			.parent_hws = (const struct clk_hw*[]) {
2666 				&cam_cc_ife_0_clk_src.clkr.hw,
2667 			},
2668 			.num_parents = 1,
2669 			.flags = CLK_SET_RATE_PARENT,
2670 			.ops = &clk_branch2_ops,
2671 		},
2672 	},
2673 };
2674 
2675 static struct clk_branch cam_cc_sfe_0_clk = {
2676 	.halt_reg = 0x1307c,
2677 	.halt_check = BRANCH_HALT,
2678 	.clkr = {
2679 		.enable_reg = 0x1307c,
2680 		.enable_mask = BIT(0),
2681 		.hw.init = &(const struct clk_init_data) {
2682 			.name = "cam_cc_sfe_0_clk",
2683 			.parent_hws = (const struct clk_hw*[]) {
2684 				&cam_cc_sfe_0_clk_src.clkr.hw,
2685 			},
2686 			.num_parents = 1,
2687 			.flags = CLK_SET_RATE_PARENT,
2688 			.ops = &clk_branch2_ops,
2689 		},
2690 	},
2691 };
2692 
2693 static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = {
2694 	.halt_reg = 0x13090,
2695 	.halt_check = BRANCH_HALT,
2696 	.clkr = {
2697 		.enable_reg = 0x13090,
2698 		.enable_mask = BIT(0),
2699 		.hw.init = &(const struct clk_init_data) {
2700 			.name = "cam_cc_sfe_0_fast_ahb_clk",
2701 			.parent_hws = (const struct clk_hw*[]) {
2702 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2703 			},
2704 			.num_parents = 1,
2705 			.flags = CLK_SET_RATE_PARENT,
2706 			.ops = &clk_branch2_ops,
2707 		},
2708 	},
2709 };
2710 
2711 static struct clk_branch cam_cc_sfe_1_clk = {
2712 	.halt_reg = 0x130c4,
2713 	.halt_check = BRANCH_HALT,
2714 	.clkr = {
2715 		.enable_reg = 0x130c4,
2716 		.enable_mask = BIT(0),
2717 		.hw.init = &(const struct clk_init_data) {
2718 			.name = "cam_cc_sfe_1_clk",
2719 			.parent_hws = (const struct clk_hw*[]) {
2720 				&cam_cc_sfe_1_clk_src.clkr.hw,
2721 			},
2722 			.num_parents = 1,
2723 			.flags = CLK_SET_RATE_PARENT,
2724 			.ops = &clk_branch2_ops,
2725 		},
2726 	},
2727 };
2728 
2729 static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = {
2730 	.halt_reg = 0x130d8,
2731 	.halt_check = BRANCH_HALT,
2732 	.clkr = {
2733 		.enable_reg = 0x130d8,
2734 		.enable_mask = BIT(0),
2735 		.hw.init = &(const struct clk_init_data) {
2736 			.name = "cam_cc_sfe_1_fast_ahb_clk",
2737 			.parent_hws = (const struct clk_hw*[]) {
2738 				&cam_cc_fast_ahb_clk_src.clkr.hw,
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 cam_cc_sleep_clk = {
2748 	.halt_reg = 0x13228,
2749 	.halt_check = BRANCH_HALT,
2750 	.clkr = {
2751 		.enable_reg = 0x13228,
2752 		.enable_mask = BIT(0),
2753 		.hw.init = &(const struct clk_init_data) {
2754 			.name = "cam_cc_sleep_clk",
2755 			.parent_hws = (const struct clk_hw*[]) {
2756 				&cam_cc_sleep_clk_src.clkr.hw,
2757 			},
2758 			.num_parents = 1,
2759 			.flags = CLK_SET_RATE_PARENT,
2760 			.ops = &clk_branch2_ops,
2761 		},
2762 	},
2763 };
2764 
2765 static struct clk_regmap *cam_cc_sm8450_clocks[] = {
2766 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2767 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2768 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2769 	[CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
2770 	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2771 	[CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2772 	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2773 	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2774 	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2775 	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2776 	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2777 	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2778 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2779 	[CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr,
2780 	[CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr,
2781 	[CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr,
2782 	[CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr,
2783 	[CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr,
2784 	[CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr,
2785 	[CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr,
2786 	[CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr,
2787 	[CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr,
2788 	[CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr,
2789 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2790 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2791 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2792 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2793 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2794 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2795 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2796 	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2797 	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2798 	[CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
2799 	[CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
2800 	[CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
2801 	[CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
2802 	[CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr,
2803 	[CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr,
2804 	[CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr,
2805 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2806 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2807 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2808 	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2809 	[CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
2810 	[CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
2811 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2812 	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2813 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2814 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2815 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2816 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2817 	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2818 	[CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr,
2819 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2820 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2821 	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2822 	[CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr,
2823 	[CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
2824 	[CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
2825 	[CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr,
2826 	[CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr,
2827 	[CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
2828 	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
2829 	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
2830 	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
2831 	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
2832 	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
2833 	[CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr,
2834 	[CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr,
2835 	[CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr,
2836 	[CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr,
2837 	[CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr,
2838 	[CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr,
2839 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2840 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2841 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2842 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2843 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2844 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2845 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2846 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2847 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2848 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2849 	[CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2850 	[CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2851 	[CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2852 	[CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2853 	[CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
2854 	[CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
2855 	[CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
2856 	[CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
2857 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2858 	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2859 	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2860 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2861 	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
2862 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2863 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2864 	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
2865 	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2866 	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
2867 	[CAM_CC_PLL5] = &cam_cc_pll5.clkr,
2868 	[CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
2869 	[CAM_CC_PLL6] = &cam_cc_pll6.clkr,
2870 	[CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
2871 	[CAM_CC_PLL7] = &cam_cc_pll7.clkr,
2872 	[CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr,
2873 	[CAM_CC_PLL8] = &cam_cc_pll8.clkr,
2874 	[CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
2875 	[CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
2876 	[CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
2877 	[CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
2878 	[CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr,
2879 	[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
2880 	[CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
2881 	[CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
2882 	[CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,
2883 	[CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
2884 	[CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
2885 	[CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
2886 	[CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
2887 	[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
2888 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2889 	[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2890 };
2891 
2892 static const struct qcom_reset_map cam_cc_sm8450_resets[] = {
2893 	[CAM_CC_BPS_BCR] = { 0x10000 },
2894 	[CAM_CC_ICP_BCR] = { 0x13104 },
2895 	[CAM_CC_IFE_0_BCR] = { 0x11000 },
2896 	[CAM_CC_IFE_1_BCR] = { 0x12000 },
2897 	[CAM_CC_IFE_2_BCR] = { 0x1204c },
2898 	[CAM_CC_IPE_0_BCR] = { 0x10074 },
2899 	[CAM_CC_QDSS_DEBUG_BCR] = { 0x131b8 },
2900 	[CAM_CC_SBI_BCR] = { 0x100cc },
2901 	[CAM_CC_SFE_0_BCR] = { 0x1304c },
2902 	[CAM_CC_SFE_1_BCR] = { 0x13094 },
2903 };
2904 
2905 static struct clk_alpha_pll *cam_cc_sm8450_plls[] = {
2906 	&cam_cc_pll0,
2907 	&cam_cc_pll1,
2908 	&cam_cc_pll2,
2909 	&cam_cc_pll3,
2910 	&cam_cc_pll4,
2911 	&cam_cc_pll5,
2912 	&cam_cc_pll6,
2913 	&cam_cc_pll7,
2914 	&cam_cc_pll8,
2915 };
2916 
2917 static const u32 cam_cc_sm8450_critical_cbcrs[] = {
2918 	0x1320c, /* CAM_CC_GDSC_CLK */
2919 };
2920 
2921 static const struct regmap_config cam_cc_sm8450_regmap_config = {
2922 	.reg_bits = 32,
2923 	.reg_stride = 4,
2924 	.val_bits = 32,
2925 	.max_register = 0x1601c,
2926 	.fast_io = true,
2927 };
2928 
2929 static struct gdsc titan_top_gdsc;
2930 
2931 static struct gdsc bps_gdsc = {
2932 	.gdscr = 0x10004,
2933 	.pd = {
2934 		.name = "bps_gdsc",
2935 	},
2936 	.flags = HW_CTRL | POLL_CFG_GDSCR,
2937 	.parent = &titan_top_gdsc.pd,
2938 	.pwrsts = PWRSTS_OFF_ON,
2939 };
2940 
2941 static struct gdsc ipe_0_gdsc = {
2942 	.gdscr = 0x10078,
2943 	.pd = {
2944 		.name = "ipe_0_gdsc",
2945 	},
2946 	.flags = HW_CTRL | POLL_CFG_GDSCR,
2947 	.parent = &titan_top_gdsc.pd,
2948 	.pwrsts = PWRSTS_OFF_ON,
2949 };
2950 
2951 static struct gdsc sbi_gdsc = {
2952 	.gdscr = 0x100d0,
2953 	.pd = {
2954 		.name = "sbi_gdsc",
2955 	},
2956 	.flags = POLL_CFG_GDSCR,
2957 	.parent = &titan_top_gdsc.pd,
2958 	.pwrsts = PWRSTS_OFF_ON,
2959 };
2960 
2961 static struct gdsc ife_0_gdsc = {
2962 	.gdscr = 0x11004,
2963 	.pd = {
2964 		.name = "ife_0_gdsc",
2965 	},
2966 	.flags = POLL_CFG_GDSCR,
2967 	.parent = &titan_top_gdsc.pd,
2968 	.pwrsts = PWRSTS_OFF_ON,
2969 };
2970 
2971 static struct gdsc ife_1_gdsc = {
2972 	.gdscr = 0x12004,
2973 	.pd = {
2974 		.name = "ife_1_gdsc",
2975 	},
2976 	.flags = POLL_CFG_GDSCR,
2977 	.parent = &titan_top_gdsc.pd,
2978 	.pwrsts = PWRSTS_OFF_ON,
2979 };
2980 
2981 static struct gdsc ife_2_gdsc = {
2982 	.gdscr = 0x12050,
2983 	.pd = {
2984 		.name = "ife_2_gdsc",
2985 	},
2986 	.flags = POLL_CFG_GDSCR,
2987 	.parent = &titan_top_gdsc.pd,
2988 	.pwrsts = PWRSTS_OFF_ON,
2989 };
2990 
2991 static struct gdsc sfe_0_gdsc = {
2992 	.gdscr = 0x13050,
2993 	.pd = {
2994 		.name = "sfe_0_gdsc",
2995 	},
2996 	.flags = POLL_CFG_GDSCR,
2997 	.parent = &titan_top_gdsc.pd,
2998 	.pwrsts = PWRSTS_OFF_ON,
2999 };
3000 
3001 static struct gdsc sfe_1_gdsc = {
3002 	.gdscr = 0x13098,
3003 	.pd = {
3004 		.name = "sfe_1_gdsc",
3005 	},
3006 	.flags = POLL_CFG_GDSCR,
3007 	.parent = &titan_top_gdsc.pd,
3008 	.pwrsts = PWRSTS_OFF_ON,
3009 };
3010 
3011 static struct gdsc titan_top_gdsc = {
3012 	.gdscr = 0x131dc,
3013 	.pd = {
3014 		.name = "titan_top_gdsc",
3015 	},
3016 	.flags = POLL_CFG_GDSCR,
3017 	.pwrsts = PWRSTS_OFF_ON,
3018 };
3019 
3020 static struct gdsc *cam_cc_sm8450_gdscs[] = {
3021 	[BPS_GDSC] = &bps_gdsc,
3022 	[IPE_0_GDSC] = &ipe_0_gdsc,
3023 	[SBI_GDSC] = &sbi_gdsc,
3024 	[IFE_0_GDSC] = &ife_0_gdsc,
3025 	[IFE_1_GDSC] = &ife_1_gdsc,
3026 	[IFE_2_GDSC] = &ife_2_gdsc,
3027 	[SFE_0_GDSC] = &sfe_0_gdsc,
3028 	[SFE_1_GDSC] = &sfe_1_gdsc,
3029 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
3030 };
3031 
3032 static const struct qcom_cc_driver_data cam_cc_sm8450_driver_data = {
3033 	.alpha_plls = cam_cc_sm8450_plls,
3034 	.num_alpha_plls = ARRAY_SIZE(cam_cc_sm8450_plls),
3035 	.clk_cbcrs = cam_cc_sm8450_critical_cbcrs,
3036 	.num_clk_cbcrs = ARRAY_SIZE(cam_cc_sm8450_critical_cbcrs),
3037 };
3038 
3039 static const struct qcom_cc_desc cam_cc_sm8450_desc = {
3040 	.config = &cam_cc_sm8450_regmap_config,
3041 	.clks = cam_cc_sm8450_clocks,
3042 	.num_clks = ARRAY_SIZE(cam_cc_sm8450_clocks),
3043 	.resets = cam_cc_sm8450_resets,
3044 	.num_resets = ARRAY_SIZE(cam_cc_sm8450_resets),
3045 	.gdscs = cam_cc_sm8450_gdscs,
3046 	.num_gdscs = ARRAY_SIZE(cam_cc_sm8450_gdscs),
3047 	.use_rpm = true,
3048 	.driver_data = &cam_cc_sm8450_driver_data,
3049 };
3050 
3051 static const struct of_device_id cam_cc_sm8450_match_table[] = {
3052 	{ .compatible = "qcom,sm8450-camcc" },
3053 	{ .compatible = "qcom,sm8475-camcc" },
3054 	{ }
3055 };
3056 MODULE_DEVICE_TABLE(of, cam_cc_sm8450_match_table);
3057 
3058 static int cam_cc_sm8450_probe(struct platform_device *pdev)
3059 {
3060 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8475-camcc")) {
3061 		/* Update CAMCC PLL0 */
3062 		cam_cc_pll0.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3063 		cam_cc_pll0_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3064 		cam_cc_pll0_out_even.clkr.hw.init = &sm8475_cam_cc_pll0_out_even_init;
3065 		cam_cc_pll0_out_odd.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3066 		cam_cc_pll0_out_odd.clkr.hw.init = &sm8475_cam_cc_pll0_out_odd_init;
3067 
3068 		/* Update CAMCC PLL1 */
3069 		cam_cc_pll1.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3070 		cam_cc_pll1_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3071 		cam_cc_pll1_out_even.clkr.hw.init = &sm8475_cam_cc_pll1_out_even_init;
3072 
3073 		/* Update CAMCC PLL2 */
3074 		cam_cc_pll2.vco_table = rivian_ole_vco;
3075 
3076 		/* Update CAMCC PLL3 */
3077 		cam_cc_pll3.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3078 		cam_cc_pll3_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3079 		cam_cc_pll3_out_even.clkr.hw.init = &sm8475_cam_cc_pll3_out_even_init;
3080 
3081 		/* Update CAMCC PLL4 */
3082 		cam_cc_pll4.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3083 		cam_cc_pll4_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3084 		cam_cc_pll4_out_even.clkr.hw.init = &sm8475_cam_cc_pll4_out_even_init;
3085 
3086 		/* Update CAMCC PLL5 */
3087 		cam_cc_pll5.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3088 		cam_cc_pll5_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3089 		cam_cc_pll5_out_even.clkr.hw.init = &sm8475_cam_cc_pll5_out_even_init;
3090 
3091 		/* Update CAMCC PLL6 */
3092 		cam_cc_pll6.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3093 		cam_cc_pll6_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3094 		cam_cc_pll6_out_even.clkr.hw.init = &sm8475_cam_cc_pll6_out_even_init;
3095 
3096 		/* Update CAMCC PLL7 */
3097 		cam_cc_pll7.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3098 		cam_cc_pll7_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3099 		cam_cc_pll7_out_even.clkr.hw.init = &sm8475_cam_cc_pll7_out_even_init;
3100 
3101 		/* Update CAMCC PLL8 */
3102 		cam_cc_pll8.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3103 		cam_cc_pll8_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3104 		cam_cc_pll8_out_even.clkr.hw.init = &sm8475_cam_cc_pll8_out_even_init;
3105 
3106 		cam_cc_pll0.config = &sm8475_cam_cc_pll0_config;
3107 		cam_cc_pll1.config = &sm8475_cam_cc_pll1_config;
3108 		cam_cc_pll2.config = &sm8475_cam_cc_pll2_config;
3109 		cam_cc_pll3.config = &sm8475_cam_cc_pll3_config;
3110 		cam_cc_pll4.config = &sm8475_cam_cc_pll4_config;
3111 		cam_cc_pll5.config = &sm8475_cam_cc_pll5_config;
3112 		cam_cc_pll6.config = &sm8475_cam_cc_pll6_config;
3113 		cam_cc_pll7.config = &sm8475_cam_cc_pll7_config;
3114 		cam_cc_pll8.config = &sm8475_cam_cc_pll8_config;
3115 	}
3116 
3117 	return qcom_cc_probe(pdev, &cam_cc_sm8450_desc);
3118 }
3119 
3120 static struct platform_driver cam_cc_sm8450_driver = {
3121 	.probe = cam_cc_sm8450_probe,
3122 	.driver = {
3123 		.name = "camcc-sm8450",
3124 		.of_match_table = cam_cc_sm8450_match_table,
3125 	},
3126 };
3127 
3128 module_platform_driver(cam_cc_sm8450_driver);
3129 
3130 MODULE_DESCRIPTION("QCOM CAMCC SM8450 / SM8475 Driver");
3131 MODULE_LICENSE("GPL");
3132