1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/mod_devicetable.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/pm_runtime.h>
11 #include <linux/regmap.h>
12 
13 #include <dt-bindings/clock/qcom,sm8650-camcc.h>
14 
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap.h"
19 #include "common.h"
20 #include "gdsc.h"
21 #include "reset.h"
22 
23 enum {
24 	DT_IFACE,
25 	DT_BI_TCXO,
26 	DT_BI_TCXO_AO,
27 	DT_SLEEP_CLK,
28 };
29 
30 enum {
31 	P_BI_TCXO,
32 	P_BI_TCXO_AO,
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_CAM_CC_PLL9_OUT_EVEN,
46 	P_CAM_CC_PLL9_OUT_ODD,
47 	P_CAM_CC_PLL10_OUT_EVEN,
48 	P_SLEEP_CLK,
49 };
50 
51 static const struct pll_vco lucid_ole_vco[] = {
52 	{ 249600000, 2300000000, 0 },
53 };
54 
55 static const struct pll_vco rivian_ole_vco[] = {
56 	{ 777000000, 1285000000, 0 },
57 };
58 
59 static const struct alpha_pll_config cam_cc_pll0_config = {
60 	.l = 0x3e,
61 	.alpha = 0x8000,
62 	.config_ctl_val = 0x20485699,
63 	.config_ctl_hi_val = 0x00182261,
64 	.config_ctl_hi1_val = 0x82aa299c,
65 	.test_ctl_val = 0x00000000,
66 	.test_ctl_hi_val = 0x00000003,
67 	.test_ctl_hi1_val = 0x00009000,
68 	.test_ctl_hi2_val = 0x00000034,
69 	.user_ctl_val = 0x00008400,
70 	.user_ctl_hi_val = 0x00000005,
71 };
72 
73 static struct clk_alpha_pll cam_cc_pll0 = {
74 	.offset = 0x0,
75 	.vco_table = lucid_ole_vco,
76 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
77 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
78 	.clkr = {
79 		.hw.init = &(const struct clk_init_data) {
80 			.name = "cam_cc_pll0",
81 			.parent_data = &(const struct clk_parent_data) {
82 				.index = DT_BI_TCXO,
83 			},
84 			.num_parents = 1,
85 			.ops = &clk_alpha_pll_lucid_evo_ops,
86 		},
87 	},
88 };
89 
90 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
91 	{ 0x1, 2 },
92 	{ }
93 };
94 
95 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
96 	.offset = 0x0,
97 	.post_div_shift = 10,
98 	.post_div_table = post_div_table_cam_cc_pll0_out_even,
99 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
100 	.width = 4,
101 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
102 	.clkr.hw.init = &(const struct clk_init_data) {
103 		.name = "cam_cc_pll0_out_even",
104 		.parent_hws = (const struct clk_hw*[]) {
105 			&cam_cc_pll0.clkr.hw,
106 		},
107 		.num_parents = 1,
108 		.flags = CLK_SET_RATE_PARENT,
109 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
110 	},
111 };
112 
113 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
114 	{ 0x2, 3 },
115 	{ }
116 };
117 
118 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
119 	.offset = 0x0,
120 	.post_div_shift = 14,
121 	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
122 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
123 	.width = 4,
124 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
125 	.clkr.hw.init = &(const struct clk_init_data) {
126 		.name = "cam_cc_pll0_out_odd",
127 		.parent_hws = (const struct clk_hw*[]) {
128 			&cam_cc_pll0.clkr.hw,
129 		},
130 		.num_parents = 1,
131 		.flags = CLK_SET_RATE_PARENT,
132 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
133 	},
134 };
135 
136 static const struct alpha_pll_config cam_cc_pll1_config = {
137 	.l = 0x31,
138 	.alpha = 0x7aaa,
139 	.config_ctl_val = 0x20485699,
140 	.config_ctl_hi_val = 0x00182261,
141 	.config_ctl_hi1_val = 0x82aa299c,
142 	.test_ctl_val = 0x00000000,
143 	.test_ctl_hi_val = 0x00000003,
144 	.test_ctl_hi1_val = 0x00009000,
145 	.test_ctl_hi2_val = 0x00000034,
146 	.user_ctl_val = 0x00000400,
147 	.user_ctl_hi_val = 0x00000005,
148 };
149 
150 static struct clk_alpha_pll cam_cc_pll1 = {
151 	.offset = 0x1000,
152 	.vco_table = lucid_ole_vco,
153 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
154 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
155 	.clkr = {
156 		.hw.init = &(const struct clk_init_data) {
157 			.name = "cam_cc_pll1",
158 			.parent_data = &(const struct clk_parent_data) {
159 				.index = DT_BI_TCXO,
160 			},
161 			.num_parents = 1,
162 			.ops = &clk_alpha_pll_lucid_evo_ops,
163 		},
164 	},
165 };
166 
167 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
168 	{ 0x1, 2 },
169 	{ }
170 };
171 
172 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
173 	.offset = 0x1000,
174 	.post_div_shift = 10,
175 	.post_div_table = post_div_table_cam_cc_pll1_out_even,
176 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
177 	.width = 4,
178 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
179 	.clkr.hw.init = &(const struct clk_init_data) {
180 		.name = "cam_cc_pll1_out_even",
181 		.parent_hws = (const struct clk_hw*[]) {
182 			&cam_cc_pll1.clkr.hw,
183 		},
184 		.num_parents = 1,
185 		.flags = CLK_SET_RATE_PARENT,
186 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
187 	},
188 };
189 
190 static const struct alpha_pll_config cam_cc_pll2_config = {
191 	.l = 0x32,
192 	.alpha = 0x0,
193 	.config_ctl_val = 0x10000030,
194 	.config_ctl_hi_val = 0x80890263,
195 	.config_ctl_hi1_val = 0x00000217,
196 	.user_ctl_val = 0x00000001,
197 	.user_ctl_hi_val = 0x00000000,
198 };
199 
200 static struct clk_alpha_pll cam_cc_pll2 = {
201 	.offset = 0x2000,
202 	.vco_table = rivian_ole_vco,
203 	.num_vco = ARRAY_SIZE(rivian_ole_vco),
204 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
205 	.clkr = {
206 		.hw.init = &(const struct clk_init_data) {
207 			.name = "cam_cc_pll2",
208 			.parent_data = &(const struct clk_parent_data) {
209 				.index = DT_BI_TCXO,
210 			},
211 			.num_parents = 1,
212 			.ops = &clk_alpha_pll_rivian_evo_ops,
213 		},
214 	},
215 };
216 
217 static const struct alpha_pll_config cam_cc_pll3_config = {
218 	.l = 0x30,
219 	.alpha = 0x8aaa,
220 	.config_ctl_val = 0x20485699,
221 	.config_ctl_hi_val = 0x00182261,
222 	.config_ctl_hi1_val = 0x82aa299c,
223 	.test_ctl_val = 0x00000000,
224 	.test_ctl_hi_val = 0x00000003,
225 	.test_ctl_hi1_val = 0x00009000,
226 	.test_ctl_hi2_val = 0x00000034,
227 	.user_ctl_val = 0x00000400,
228 	.user_ctl_hi_val = 0x00000005,
229 };
230 
231 static struct clk_alpha_pll cam_cc_pll3 = {
232 	.offset = 0x3000,
233 	.vco_table = lucid_ole_vco,
234 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
235 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
236 	.clkr = {
237 		.hw.init = &(const struct clk_init_data) {
238 			.name = "cam_cc_pll3",
239 			.parent_data = &(const struct clk_parent_data) {
240 				.index = DT_BI_TCXO,
241 			},
242 			.num_parents = 1,
243 			.ops = &clk_alpha_pll_lucid_evo_ops,
244 		},
245 	},
246 };
247 
248 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
249 	{ 0x1, 2 },
250 	{ }
251 };
252 
253 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
254 	.offset = 0x3000,
255 	.post_div_shift = 10,
256 	.post_div_table = post_div_table_cam_cc_pll3_out_even,
257 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
258 	.width = 4,
259 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
260 	.clkr.hw.init = &(const struct clk_init_data) {
261 		.name = "cam_cc_pll3_out_even",
262 		.parent_hws = (const struct clk_hw*[]) {
263 			&cam_cc_pll3.clkr.hw,
264 		},
265 		.num_parents = 1,
266 		.flags = CLK_SET_RATE_PARENT,
267 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
268 	},
269 };
270 
271 static const struct alpha_pll_config cam_cc_pll4_config = {
272 	.l = 0x30,
273 	.alpha = 0x8aaa,
274 	.config_ctl_val = 0x20485699,
275 	.config_ctl_hi_val = 0x00182261,
276 	.config_ctl_hi1_val = 0x82aa299c,
277 	.test_ctl_val = 0x00000000,
278 	.test_ctl_hi_val = 0x00000003,
279 	.test_ctl_hi1_val = 0x00009000,
280 	.test_ctl_hi2_val = 0x00000034,
281 	.user_ctl_val = 0x00000400,
282 	.user_ctl_hi_val = 0x00000005,
283 };
284 
285 static struct clk_alpha_pll cam_cc_pll4 = {
286 	.offset = 0x4000,
287 	.vco_table = lucid_ole_vco,
288 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
289 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
290 	.clkr = {
291 		.hw.init = &(const struct clk_init_data) {
292 			.name = "cam_cc_pll4",
293 			.parent_data = &(const struct clk_parent_data) {
294 				.index = DT_BI_TCXO,
295 			},
296 			.num_parents = 1,
297 			.ops = &clk_alpha_pll_lucid_evo_ops,
298 		},
299 	},
300 };
301 
302 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
303 	{ 0x1, 2 },
304 	{ }
305 };
306 
307 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
308 	.offset = 0x4000,
309 	.post_div_shift = 10,
310 	.post_div_table = post_div_table_cam_cc_pll4_out_even,
311 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
312 	.width = 4,
313 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
314 	.clkr.hw.init = &(const struct clk_init_data) {
315 		.name = "cam_cc_pll4_out_even",
316 		.parent_hws = (const struct clk_hw*[]) {
317 			&cam_cc_pll4.clkr.hw,
318 		},
319 		.num_parents = 1,
320 		.flags = CLK_SET_RATE_PARENT,
321 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
322 	},
323 };
324 
325 static const struct alpha_pll_config cam_cc_pll5_config = {
326 	.l = 0x30,
327 	.alpha = 0x8aaa,
328 	.config_ctl_val = 0x20485699,
329 	.config_ctl_hi_val = 0x00182261,
330 	.config_ctl_hi1_val = 0x82aa299c,
331 	.test_ctl_val = 0x00000000,
332 	.test_ctl_hi_val = 0x00000003,
333 	.test_ctl_hi1_val = 0x00009000,
334 	.test_ctl_hi2_val = 0x00000034,
335 	.user_ctl_val = 0x00000400,
336 	.user_ctl_hi_val = 0x00000005,
337 };
338 
339 static struct clk_alpha_pll cam_cc_pll5 = {
340 	.offset = 0x5000,
341 	.vco_table = lucid_ole_vco,
342 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
343 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
344 	.clkr = {
345 		.hw.init = &(const struct clk_init_data) {
346 			.name = "cam_cc_pll5",
347 			.parent_data = &(const struct clk_parent_data) {
348 				.index = DT_BI_TCXO,
349 			},
350 			.num_parents = 1,
351 			.ops = &clk_alpha_pll_lucid_evo_ops,
352 		},
353 	},
354 };
355 
356 static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
357 	{ 0x1, 2 },
358 	{ }
359 };
360 
361 static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
362 	.offset = 0x5000,
363 	.post_div_shift = 10,
364 	.post_div_table = post_div_table_cam_cc_pll5_out_even,
365 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
366 	.width = 4,
367 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
368 	.clkr.hw.init = &(const struct clk_init_data) {
369 		.name = "cam_cc_pll5_out_even",
370 		.parent_hws = (const struct clk_hw*[]) {
371 			&cam_cc_pll5.clkr.hw,
372 		},
373 		.num_parents = 1,
374 		.flags = CLK_SET_RATE_PARENT,
375 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
376 	},
377 };
378 
379 static const struct alpha_pll_config cam_cc_pll6_config = {
380 	.l = 0x30,
381 	.alpha = 0x8aaa,
382 	.config_ctl_val = 0x20485699,
383 	.config_ctl_hi_val = 0x00182261,
384 	.config_ctl_hi1_val = 0x82aa299c,
385 	.test_ctl_val = 0x00000000,
386 	.test_ctl_hi_val = 0x00000003,
387 	.test_ctl_hi1_val = 0x00009000,
388 	.test_ctl_hi2_val = 0x00000034,
389 	.user_ctl_val = 0x00000400,
390 	.user_ctl_hi_val = 0x00000005,
391 };
392 
393 static struct clk_alpha_pll cam_cc_pll6 = {
394 	.offset = 0x6000,
395 	.vco_table = lucid_ole_vco,
396 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
397 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
398 	.clkr = {
399 		.hw.init = &(const struct clk_init_data) {
400 			.name = "cam_cc_pll6",
401 			.parent_data = &(const struct clk_parent_data) {
402 				.index = DT_BI_TCXO,
403 			},
404 			.num_parents = 1,
405 			.ops = &clk_alpha_pll_lucid_evo_ops,
406 		},
407 	},
408 };
409 
410 static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
411 	{ 0x1, 2 },
412 	{ }
413 };
414 
415 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
416 	.offset = 0x6000,
417 	.post_div_shift = 10,
418 	.post_div_table = post_div_table_cam_cc_pll6_out_even,
419 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
420 	.width = 4,
421 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
422 	.clkr.hw.init = &(const struct clk_init_data) {
423 		.name = "cam_cc_pll6_out_even",
424 		.parent_hws = (const struct clk_hw*[]) {
425 			&cam_cc_pll6.clkr.hw,
426 		},
427 		.num_parents = 1,
428 		.flags = CLK_SET_RATE_PARENT,
429 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
430 	},
431 };
432 
433 static const struct alpha_pll_config cam_cc_pll7_config = {
434 	.l = 0x30,
435 	.alpha = 0x8aaa,
436 	.config_ctl_val = 0x20485699,
437 	.config_ctl_hi_val = 0x00182261,
438 	.config_ctl_hi1_val = 0x82aa299c,
439 	.test_ctl_val = 0x00000000,
440 	.test_ctl_hi_val = 0x00000003,
441 	.test_ctl_hi1_val = 0x00009000,
442 	.test_ctl_hi2_val = 0x00000034,
443 	.user_ctl_val = 0x00000400,
444 	.user_ctl_hi_val = 0x00000005,
445 };
446 
447 static struct clk_alpha_pll cam_cc_pll7 = {
448 	.offset = 0x7000,
449 	.vco_table = lucid_ole_vco,
450 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
451 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
452 	.clkr = {
453 		.hw.init = &(const struct clk_init_data) {
454 			.name = "cam_cc_pll7",
455 			.parent_data = &(const struct clk_parent_data) {
456 				.index = DT_BI_TCXO,
457 			},
458 			.num_parents = 1,
459 			.ops = &clk_alpha_pll_lucid_evo_ops,
460 		},
461 	},
462 };
463 
464 static const struct clk_div_table post_div_table_cam_cc_pll7_out_even[] = {
465 	{ 0x1, 2 },
466 	{ }
467 };
468 
469 static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = {
470 	.offset = 0x7000,
471 	.post_div_shift = 10,
472 	.post_div_table = post_div_table_cam_cc_pll7_out_even,
473 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even),
474 	.width = 4,
475 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
476 	.clkr.hw.init = &(const struct clk_init_data) {
477 		.name = "cam_cc_pll7_out_even",
478 		.parent_hws = (const struct clk_hw*[]) {
479 			&cam_cc_pll7.clkr.hw,
480 		},
481 		.num_parents = 1,
482 		.flags = CLK_SET_RATE_PARENT,
483 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
484 	},
485 };
486 
487 static const struct alpha_pll_config cam_cc_pll8_config = {
488 	.l = 0x14,
489 	.alpha = 0xd555,
490 	.config_ctl_val = 0x20485699,
491 	.config_ctl_hi_val = 0x00182261,
492 	.config_ctl_hi1_val = 0x82aa299c,
493 	.test_ctl_val = 0x00000000,
494 	.test_ctl_hi_val = 0x00000003,
495 	.test_ctl_hi1_val = 0x00009000,
496 	.test_ctl_hi2_val = 0x00000034,
497 	.user_ctl_val = 0x00000400,
498 	.user_ctl_hi_val = 0x00000005,
499 };
500 
501 static struct clk_alpha_pll cam_cc_pll8 = {
502 	.offset = 0x8000,
503 	.vco_table = lucid_ole_vco,
504 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
505 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
506 	.clkr = {
507 		.hw.init = &(const struct clk_init_data) {
508 			.name = "cam_cc_pll8",
509 			.parent_data = &(const struct clk_parent_data) {
510 				.index = DT_BI_TCXO,
511 			},
512 			.num_parents = 1,
513 			.ops = &clk_alpha_pll_lucid_evo_ops,
514 		},
515 	},
516 };
517 
518 static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = {
519 	{ 0x1, 2 },
520 	{ }
521 };
522 
523 static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = {
524 	.offset = 0x8000,
525 	.post_div_shift = 10,
526 	.post_div_table = post_div_table_cam_cc_pll8_out_even,
527 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even),
528 	.width = 4,
529 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
530 	.clkr.hw.init = &(const struct clk_init_data) {
531 		.name = "cam_cc_pll8_out_even",
532 		.parent_hws = (const struct clk_hw*[]) {
533 			&cam_cc_pll8.clkr.hw,
534 		},
535 		.num_parents = 1,
536 		.flags = CLK_SET_RATE_PARENT,
537 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
538 	},
539 };
540 
541 static const struct alpha_pll_config cam_cc_pll9_config = {
542 	.l = 0x32,
543 	.alpha = 0x0,
544 	.config_ctl_val = 0x20485699,
545 	.config_ctl_hi_val = 0x00182261,
546 	.config_ctl_hi1_val = 0x82aa299c,
547 	.test_ctl_val = 0x00000000,
548 	.test_ctl_hi_val = 0x00000003,
549 	.test_ctl_hi1_val = 0x00009000,
550 	.test_ctl_hi2_val = 0x00000034,
551 	.user_ctl_val = 0x00008400,
552 	.user_ctl_hi_val = 0x00000005,
553 };
554 
555 static struct clk_alpha_pll cam_cc_pll9 = {
556 	.offset = 0x9000,
557 	.vco_table = lucid_ole_vco,
558 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
559 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
560 	.clkr = {
561 		.hw.init = &(const struct clk_init_data) {
562 			.name = "cam_cc_pll9",
563 			.parent_data = &(const struct clk_parent_data) {
564 				.index = DT_BI_TCXO,
565 			},
566 			.num_parents = 1,
567 			.ops = &clk_alpha_pll_lucid_evo_ops,
568 		},
569 	},
570 };
571 
572 static const struct clk_div_table post_div_table_cam_cc_pll9_out_even[] = {
573 	{ 0x1, 2 },
574 	{ }
575 };
576 
577 static struct clk_alpha_pll_postdiv cam_cc_pll9_out_even = {
578 	.offset = 0x9000,
579 	.post_div_shift = 10,
580 	.post_div_table = post_div_table_cam_cc_pll9_out_even,
581 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll9_out_even),
582 	.width = 4,
583 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
584 	.clkr.hw.init = &(const struct clk_init_data) {
585 		.name = "cam_cc_pll9_out_even",
586 		.parent_hws = (const struct clk_hw*[]) {
587 			&cam_cc_pll9.clkr.hw,
588 		},
589 		.num_parents = 1,
590 		.flags = CLK_SET_RATE_PARENT,
591 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
592 	},
593 };
594 
595 static const struct clk_div_table post_div_table_cam_cc_pll9_out_odd[] = {
596 	{ 0x2, 3 },
597 	{ }
598 };
599 
600 static struct clk_alpha_pll_postdiv cam_cc_pll9_out_odd = {
601 	.offset = 0x9000,
602 	.post_div_shift = 14,
603 	.post_div_table = post_div_table_cam_cc_pll9_out_odd,
604 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll9_out_odd),
605 	.width = 4,
606 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
607 	.clkr.hw.init = &(const struct clk_init_data) {
608 		.name = "cam_cc_pll9_out_odd",
609 		.parent_hws = (const struct clk_hw*[]) {
610 			&cam_cc_pll9.clkr.hw,
611 		},
612 		.num_parents = 1,
613 		.flags = CLK_SET_RATE_PARENT,
614 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
615 	},
616 };
617 
618 static const struct alpha_pll_config cam_cc_pll10_config = {
619 	.l = 0x30,
620 	.alpha = 0x8aaa,
621 	.config_ctl_val = 0x20485699,
622 	.config_ctl_hi_val = 0x00182261,
623 	.config_ctl_hi1_val = 0x82aa299c,
624 	.test_ctl_val = 0x00000000,
625 	.test_ctl_hi_val = 0x00000003,
626 	.test_ctl_hi1_val = 0x00009000,
627 	.test_ctl_hi2_val = 0x00000034,
628 	.user_ctl_val = 0x00000400,
629 	.user_ctl_hi_val = 0x00000005,
630 };
631 
632 static struct clk_alpha_pll cam_cc_pll10 = {
633 	.offset = 0xa000,
634 	.vco_table = lucid_ole_vco,
635 	.num_vco = ARRAY_SIZE(lucid_ole_vco),
636 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
637 	.clkr = {
638 		.hw.init = &(const struct clk_init_data) {
639 			.name = "cam_cc_pll10",
640 			.parent_data = &(const struct clk_parent_data) {
641 				.index = DT_BI_TCXO,
642 			},
643 			.num_parents = 1,
644 			.ops = &clk_alpha_pll_lucid_evo_ops,
645 		},
646 	},
647 };
648 
649 static const struct clk_div_table post_div_table_cam_cc_pll10_out_even[] = {
650 	{ 0x1, 2 },
651 	{ }
652 };
653 
654 static struct clk_alpha_pll_postdiv cam_cc_pll10_out_even = {
655 	.offset = 0xa000,
656 	.post_div_shift = 10,
657 	.post_div_table = post_div_table_cam_cc_pll10_out_even,
658 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll10_out_even),
659 	.width = 4,
660 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
661 	.clkr.hw.init = &(const struct clk_init_data) {
662 		.name = "cam_cc_pll10_out_even",
663 		.parent_hws = (const struct clk_hw*[]) {
664 			&cam_cc_pll10.clkr.hw,
665 		},
666 		.num_parents = 1,
667 		.flags = CLK_SET_RATE_PARENT,
668 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
669 	},
670 };
671 
672 static const struct parent_map cam_cc_parent_map_0[] = {
673 	{ P_BI_TCXO, 0 },
674 	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
675 	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
676 	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
677 	{ P_CAM_CC_PLL9_OUT_ODD, 4 },
678 	{ P_CAM_CC_PLL9_OUT_EVEN, 5 },
679 };
680 
681 static const struct clk_parent_data cam_cc_parent_data_0[] = {
682 	{ .index = DT_BI_TCXO },
683 	{ .hw = &cam_cc_pll0.clkr.hw },
684 	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
685 	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
686 	{ .hw = &cam_cc_pll9_out_odd.clkr.hw },
687 	{ .hw = &cam_cc_pll9_out_even.clkr.hw },
688 };
689 
690 static const struct parent_map cam_cc_parent_map_1[] = {
691 	{ P_BI_TCXO, 0 },
692 	{ P_CAM_CC_PLL2_OUT_EVEN, 3 },
693 	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
694 };
695 
696 static const struct clk_parent_data cam_cc_parent_data_1[] = {
697 	{ .index = DT_BI_TCXO },
698 	{ .hw = &cam_cc_pll2.clkr.hw },
699 	{ .hw = &cam_cc_pll2.clkr.hw },
700 };
701 
702 static const struct parent_map cam_cc_parent_map_2[] = {
703 	{ P_BI_TCXO, 0 },
704 	{ P_CAM_CC_PLL8_OUT_EVEN, 6 },
705 };
706 
707 static const struct clk_parent_data cam_cc_parent_data_2[] = {
708 	{ .index = DT_BI_TCXO },
709 	{ .hw = &cam_cc_pll8_out_even.clkr.hw },
710 };
711 
712 static const struct parent_map cam_cc_parent_map_3[] = {
713 	{ P_BI_TCXO, 0 },
714 	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
715 };
716 
717 static const struct clk_parent_data cam_cc_parent_data_3[] = {
718 	{ .index = DT_BI_TCXO },
719 	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
720 };
721 
722 static const struct parent_map cam_cc_parent_map_4[] = {
723 	{ P_BI_TCXO, 0 },
724 	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
725 };
726 
727 static const struct clk_parent_data cam_cc_parent_data_4[] = {
728 	{ .index = DT_BI_TCXO },
729 	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
730 };
731 
732 static const struct parent_map cam_cc_parent_map_5[] = {
733 	{ P_BI_TCXO, 0 },
734 	{ P_CAM_CC_PLL5_OUT_EVEN, 6 },
735 };
736 
737 static const struct clk_parent_data cam_cc_parent_data_5[] = {
738 	{ .index = DT_BI_TCXO },
739 	{ .hw = &cam_cc_pll5_out_even.clkr.hw },
740 };
741 
742 static const struct parent_map cam_cc_parent_map_6[] = {
743 	{ P_BI_TCXO, 0 },
744 	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
745 };
746 
747 static const struct clk_parent_data cam_cc_parent_data_6[] = {
748 	{ .index = DT_BI_TCXO },
749 	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
750 };
751 
752 static const struct parent_map cam_cc_parent_map_7[] = {
753 	{ P_BI_TCXO, 0 },
754 	{ P_CAM_CC_PLL6_OUT_EVEN, 6 },
755 };
756 
757 static const struct clk_parent_data cam_cc_parent_data_7[] = {
758 	{ .index = DT_BI_TCXO },
759 	{ .hw = &cam_cc_pll6_out_even.clkr.hw },
760 };
761 
762 static const struct parent_map cam_cc_parent_map_8[] = {
763 	{ P_BI_TCXO, 0 },
764 	{ P_CAM_CC_PLL7_OUT_EVEN, 6 },
765 };
766 
767 static const struct clk_parent_data cam_cc_parent_data_8[] = {
768 	{ .index = DT_BI_TCXO },
769 	{ .hw = &cam_cc_pll7_out_even.clkr.hw },
770 };
771 
772 static const struct parent_map cam_cc_parent_map_9[] = {
773 	{ P_BI_TCXO, 0 },
774 	{ P_CAM_CC_PLL10_OUT_EVEN, 6 },
775 };
776 
777 static const struct clk_parent_data cam_cc_parent_data_9[] = {
778 	{ .index = DT_BI_TCXO },
779 	{ .hw = &cam_cc_pll10_out_even.clkr.hw },
780 };
781 
782 static const struct parent_map cam_cc_parent_map_10[] = {
783 	{ P_SLEEP_CLK, 0 },
784 };
785 
786 static const struct clk_parent_data cam_cc_parent_data_10[] = {
787 	{ .index = DT_SLEEP_CLK },
788 };
789 
790 static const struct parent_map cam_cc_parent_map_11_ao[] = {
791 	{ P_BI_TCXO_AO, 0 },
792 };
793 
794 static const struct clk_parent_data cam_cc_parent_data_11_ao[] = {
795 	{ .index = DT_BI_TCXO_AO },
796 };
797 
798 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
799 	F(19200000, P_BI_TCXO, 1, 0, 0),
800 	F(200000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
801 	F(400000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
802 	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
803 	F(785000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
804 	{ }
805 };
806 
807 static struct clk_rcg2 cam_cc_bps_clk_src = {
808 	.cmd_rcgr = 0x10050,
809 	.mnd_width = 0,
810 	.hid_width = 5,
811 	.parent_map = cam_cc_parent_map_2,
812 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
813 	.clkr.hw.init = &(const struct clk_init_data) {
814 		.name = "cam_cc_bps_clk_src",
815 		.parent_data = cam_cc_parent_data_2,
816 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
817 		.flags = CLK_SET_RATE_PARENT,
818 		.ops = &clk_rcg2_shared_ops,
819 	},
820 };
821 
822 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_rt_clk_src[] = {
823 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
824 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
825 	{ }
826 };
827 
828 static struct clk_rcg2 cam_cc_camnoc_axi_rt_clk_src = {
829 	.cmd_rcgr = 0x1325c,
830 	.mnd_width = 0,
831 	.hid_width = 5,
832 	.parent_map = cam_cc_parent_map_0,
833 	.freq_tbl = ftbl_cam_cc_camnoc_axi_rt_clk_src,
834 	.clkr.hw.init = &(const struct clk_init_data) {
835 		.name = "cam_cc_camnoc_axi_rt_clk_src",
836 		.parent_data = cam_cc_parent_data_0,
837 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
838 		.flags = CLK_SET_RATE_PARENT,
839 		.ops = &clk_rcg2_shared_ops,
840 	},
841 };
842 
843 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
844 	F(19200000, P_BI_TCXO, 1, 0, 0),
845 	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
846 	{ }
847 };
848 
849 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
850 	.cmd_rcgr = 0x131cc,
851 	.mnd_width = 8,
852 	.hid_width = 5,
853 	.parent_map = cam_cc_parent_map_0,
854 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
855 	.clkr.hw.init = &(const struct clk_init_data) {
856 		.name = "cam_cc_cci_0_clk_src",
857 		.parent_data = cam_cc_parent_data_0,
858 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
859 		.flags = CLK_SET_RATE_PARENT,
860 		.ops = &clk_rcg2_shared_ops,
861 	},
862 };
863 
864 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
865 	.cmd_rcgr = 0x131e8,
866 	.mnd_width = 8,
867 	.hid_width = 5,
868 	.parent_map = cam_cc_parent_map_0,
869 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
870 	.clkr.hw.init = &(const struct clk_init_data) {
871 		.name = "cam_cc_cci_1_clk_src",
872 		.parent_data = cam_cc_parent_data_0,
873 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
874 		.flags = CLK_SET_RATE_PARENT,
875 		.ops = &clk_rcg2_shared_ops,
876 	},
877 };
878 
879 static struct clk_rcg2 cam_cc_cci_2_clk_src = {
880 	.cmd_rcgr = 0x13204,
881 	.mnd_width = 8,
882 	.hid_width = 5,
883 	.parent_map = cam_cc_parent_map_0,
884 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
885 	.clkr.hw.init = &(const struct clk_init_data) {
886 		.name = "cam_cc_cci_2_clk_src",
887 		.parent_data = cam_cc_parent_data_0,
888 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
889 		.flags = CLK_SET_RATE_PARENT,
890 		.ops = &clk_rcg2_shared_ops,
891 	},
892 };
893 
894 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
895 	F(19200000, P_BI_TCXO, 1, 0, 0),
896 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
897 	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
898 	{ }
899 };
900 
901 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
902 	.cmd_rcgr = 0x1104c,
903 	.mnd_width = 0,
904 	.hid_width = 5,
905 	.parent_map = cam_cc_parent_map_0,
906 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
907 	.clkr.hw.init = &(const struct clk_init_data) {
908 		.name = "cam_cc_cphy_rx_clk_src",
909 		.parent_data = cam_cc_parent_data_0,
910 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
911 		.flags = CLK_SET_RATE_PARENT,
912 		.ops = &clk_rcg2_shared_ops,
913 	},
914 };
915 
916 static const struct freq_tbl ftbl_cam_cc_cre_clk_src[] = {
917 	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
918 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
919 	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
920 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
921 	{ }
922 };
923 
924 static struct clk_rcg2 cam_cc_cre_clk_src = {
925 	.cmd_rcgr = 0x13144,
926 	.mnd_width = 0,
927 	.hid_width = 5,
928 	.parent_map = cam_cc_parent_map_0,
929 	.freq_tbl = ftbl_cam_cc_cre_clk_src,
930 	.clkr.hw.init = &(const struct clk_init_data) {
931 		.name = "cam_cc_cre_clk_src",
932 		.parent_data = cam_cc_parent_data_0,
933 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
934 		.flags = CLK_SET_RATE_PARENT,
935 		.ops = &clk_rcg2_shared_ops,
936 	},
937 };
938 
939 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
940 	F(19200000, P_BI_TCXO, 1, 0, 0),
941 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
942 	{ }
943 };
944 
945 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
946 	.cmd_rcgr = 0x150e0,
947 	.mnd_width = 0,
948 	.hid_width = 5,
949 	.parent_map = cam_cc_parent_map_0,
950 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
951 	.clkr.hw.init = &(const struct clk_init_data) {
952 		.name = "cam_cc_csi0phytimer_clk_src",
953 		.parent_data = cam_cc_parent_data_0,
954 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
955 		.flags = CLK_SET_RATE_PARENT,
956 		.ops = &clk_rcg2_shared_ops,
957 	},
958 };
959 
960 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
961 	.cmd_rcgr = 0x15104,
962 	.mnd_width = 0,
963 	.hid_width = 5,
964 	.parent_map = cam_cc_parent_map_0,
965 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
966 	.clkr.hw.init = &(const struct clk_init_data) {
967 		.name = "cam_cc_csi1phytimer_clk_src",
968 		.parent_data = cam_cc_parent_data_0,
969 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
970 		.flags = CLK_SET_RATE_PARENT,
971 		.ops = &clk_rcg2_shared_ops,
972 	},
973 };
974 
975 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
976 	.cmd_rcgr = 0x15124,
977 	.mnd_width = 0,
978 	.hid_width = 5,
979 	.parent_map = cam_cc_parent_map_0,
980 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
981 	.clkr.hw.init = &(const struct clk_init_data) {
982 		.name = "cam_cc_csi2phytimer_clk_src",
983 		.parent_data = cam_cc_parent_data_0,
984 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
985 		.flags = CLK_SET_RATE_PARENT,
986 		.ops = &clk_rcg2_shared_ops,
987 	},
988 };
989 
990 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
991 	.cmd_rcgr = 0x15144,
992 	.mnd_width = 0,
993 	.hid_width = 5,
994 	.parent_map = cam_cc_parent_map_0,
995 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
996 	.clkr.hw.init = &(const struct clk_init_data) {
997 		.name = "cam_cc_csi3phytimer_clk_src",
998 		.parent_data = cam_cc_parent_data_0,
999 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1000 		.flags = CLK_SET_RATE_PARENT,
1001 		.ops = &clk_rcg2_shared_ops,
1002 	},
1003 };
1004 
1005 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
1006 	.cmd_rcgr = 0x15164,
1007 	.mnd_width = 0,
1008 	.hid_width = 5,
1009 	.parent_map = cam_cc_parent_map_0,
1010 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1011 	.clkr.hw.init = &(const struct clk_init_data) {
1012 		.name = "cam_cc_csi4phytimer_clk_src",
1013 		.parent_data = cam_cc_parent_data_0,
1014 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1015 		.flags = CLK_SET_RATE_PARENT,
1016 		.ops = &clk_rcg2_shared_ops,
1017 	},
1018 };
1019 
1020 static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
1021 	.cmd_rcgr = 0x15184,
1022 	.mnd_width = 0,
1023 	.hid_width = 5,
1024 	.parent_map = cam_cc_parent_map_0,
1025 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1026 	.clkr.hw.init = &(const struct clk_init_data) {
1027 		.name = "cam_cc_csi5phytimer_clk_src",
1028 		.parent_data = cam_cc_parent_data_0,
1029 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1030 		.flags = CLK_SET_RATE_PARENT,
1031 		.ops = &clk_rcg2_shared_ops,
1032 	},
1033 };
1034 
1035 static struct clk_rcg2 cam_cc_csi6phytimer_clk_src = {
1036 	.cmd_rcgr = 0x151a4,
1037 	.mnd_width = 0,
1038 	.hid_width = 5,
1039 	.parent_map = cam_cc_parent_map_0,
1040 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1041 	.clkr.hw.init = &(const struct clk_init_data) {
1042 		.name = "cam_cc_csi6phytimer_clk_src",
1043 		.parent_data = cam_cc_parent_data_0,
1044 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1045 		.flags = CLK_SET_RATE_PARENT,
1046 		.ops = &clk_rcg2_shared_ops,
1047 	},
1048 };
1049 
1050 static struct clk_rcg2 cam_cc_csi7phytimer_clk_src = {
1051 	.cmd_rcgr = 0x151c4,
1052 	.mnd_width = 0,
1053 	.hid_width = 5,
1054 	.parent_map = cam_cc_parent_map_0,
1055 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1056 	.clkr.hw.init = &(const struct clk_init_data) {
1057 		.name = "cam_cc_csi7phytimer_clk_src",
1058 		.parent_data = cam_cc_parent_data_0,
1059 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1060 		.flags = CLK_SET_RATE_PARENT,
1061 		.ops = &clk_rcg2_shared_ops,
1062 	},
1063 };
1064 
1065 static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = {
1066 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1067 	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
1068 	{ }
1069 };
1070 
1071 static struct clk_rcg2 cam_cc_csid_clk_src = {
1072 	.cmd_rcgr = 0x13238,
1073 	.mnd_width = 0,
1074 	.hid_width = 5,
1075 	.parent_map = cam_cc_parent_map_0,
1076 	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1077 	.clkr.hw.init = &(const struct clk_init_data) {
1078 		.name = "cam_cc_csid_clk_src",
1079 		.parent_data = cam_cc_parent_data_0,
1080 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1081 		.flags = CLK_SET_RATE_PARENT,
1082 		.ops = &clk_rcg2_shared_ops,
1083 	},
1084 };
1085 
1086 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
1087 	F(19200000, P_BI_TCXO, 1, 0, 0),
1088 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
1089 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1090 	{ }
1091 };
1092 
1093 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
1094 	.cmd_rcgr = 0x10018,
1095 	.mnd_width = 0,
1096 	.hid_width = 5,
1097 	.parent_map = cam_cc_parent_map_0,
1098 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
1099 	.clkr.hw.init = &(const struct clk_init_data) {
1100 		.name = "cam_cc_fast_ahb_clk_src",
1101 		.parent_data = cam_cc_parent_data_0,
1102 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1103 		.flags = CLK_SET_RATE_PARENT,
1104 		.ops = &clk_rcg2_shared_ops,
1105 	},
1106 };
1107 
1108 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
1109 	F(19200000, P_BI_TCXO, 1, 0, 0),
1110 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1111 	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1112 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
1113 	{ }
1114 };
1115 
1116 static struct clk_rcg2 cam_cc_icp_clk_src = {
1117 	.cmd_rcgr = 0x131a4,
1118 	.mnd_width = 0,
1119 	.hid_width = 5,
1120 	.parent_map = cam_cc_parent_map_0,
1121 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
1122 	.clkr.hw.init = &(const struct clk_init_data) {
1123 		.name = "cam_cc_icp_clk_src",
1124 		.parent_data = cam_cc_parent_data_0,
1125 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1126 		.flags = CLK_SET_RATE_PARENT,
1127 		.ops = &clk_rcg2_shared_ops,
1128 	},
1129 };
1130 
1131 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
1132 	F(19200000, P_BI_TCXO, 1, 0, 0),
1133 	F(466000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1134 	F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1135 	F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1136 	F(785000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1137 	{ }
1138 };
1139 
1140 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
1141 	.cmd_rcgr = 0x11018,
1142 	.mnd_width = 0,
1143 	.hid_width = 5,
1144 	.parent_map = cam_cc_parent_map_3,
1145 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
1146 	.clkr.hw.init = &(const struct clk_init_data) {
1147 		.name = "cam_cc_ife_0_clk_src",
1148 		.parent_data = cam_cc_parent_data_3,
1149 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
1150 		.flags = CLK_SET_RATE_PARENT,
1151 		.ops = &clk_rcg2_shared_ops,
1152 	},
1153 };
1154 
1155 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
1156 	F(19200000, P_BI_TCXO, 1, 0, 0),
1157 	F(466000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1158 	F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1159 	F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1160 	F(785000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1161 	{ }
1162 };
1163 
1164 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
1165 	.cmd_rcgr = 0x12018,
1166 	.mnd_width = 0,
1167 	.hid_width = 5,
1168 	.parent_map = cam_cc_parent_map_4,
1169 	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
1170 	.clkr.hw.init = &(const struct clk_init_data) {
1171 		.name = "cam_cc_ife_1_clk_src",
1172 		.parent_data = cam_cc_parent_data_4,
1173 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
1174 		.flags = CLK_SET_RATE_PARENT,
1175 		.ops = &clk_rcg2_shared_ops,
1176 	},
1177 };
1178 
1179 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
1180 	F(19200000, P_BI_TCXO, 1, 0, 0),
1181 	F(466000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1182 	F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1183 	F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1184 	F(785000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1185 	{ }
1186 };
1187 
1188 static struct clk_rcg2 cam_cc_ife_2_clk_src = {
1189 	.cmd_rcgr = 0x12068,
1190 	.mnd_width = 0,
1191 	.hid_width = 5,
1192 	.parent_map = cam_cc_parent_map_5,
1193 	.freq_tbl = ftbl_cam_cc_ife_2_clk_src,
1194 	.clkr.hw.init = &(const struct clk_init_data) {
1195 		.name = "cam_cc_ife_2_clk_src",
1196 		.parent_data = cam_cc_parent_data_5,
1197 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
1198 		.flags = CLK_SET_RATE_PARENT,
1199 		.ops = &clk_rcg2_shared_ops,
1200 	},
1201 };
1202 
1203 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
1204 	.cmd_rcgr = 0x13000,
1205 	.mnd_width = 0,
1206 	.hid_width = 5,
1207 	.parent_map = cam_cc_parent_map_0,
1208 	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1209 	.clkr.hw.init = &(const struct clk_init_data) {
1210 		.name = "cam_cc_ife_lite_clk_src",
1211 		.parent_data = cam_cc_parent_data_0,
1212 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1213 		.flags = CLK_SET_RATE_PARENT,
1214 		.ops = &clk_rcg2_shared_ops,
1215 	},
1216 };
1217 
1218 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
1219 	.cmd_rcgr = 0x13028,
1220 	.mnd_width = 0,
1221 	.hid_width = 5,
1222 	.parent_map = cam_cc_parent_map_0,
1223 	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1224 	.clkr.hw.init = &(const struct clk_init_data) {
1225 		.name = "cam_cc_ife_lite_csid_clk_src",
1226 		.parent_data = cam_cc_parent_data_0,
1227 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1228 		.flags = CLK_SET_RATE_PARENT,
1229 		.ops = &clk_rcg2_shared_ops,
1230 	},
1231 };
1232 
1233 static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = {
1234 	F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1235 	F(575000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1236 	F(675000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1237 	F(825000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1238 	{ }
1239 };
1240 
1241 static struct clk_rcg2 cam_cc_ipe_nps_clk_src = {
1242 	.cmd_rcgr = 0x10094,
1243 	.mnd_width = 0,
1244 	.hid_width = 5,
1245 	.parent_map = cam_cc_parent_map_6,
1246 	.freq_tbl = ftbl_cam_cc_ipe_nps_clk_src,
1247 	.clkr.hw.init = &(const struct clk_init_data) {
1248 		.name = "cam_cc_ipe_nps_clk_src",
1249 		.parent_data = cam_cc_parent_data_6,
1250 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1251 		.flags = CLK_SET_RATE_PARENT,
1252 		.ops = &clk_rcg2_shared_ops,
1253 	},
1254 };
1255 
1256 static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = {
1257 	F(19200000, P_BI_TCXO, 1, 0, 0),
1258 	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
1259 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1260 	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1261 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
1262 	{ }
1263 };
1264 
1265 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1266 	.cmd_rcgr = 0x13168,
1267 	.mnd_width = 0,
1268 	.hid_width = 5,
1269 	.parent_map = cam_cc_parent_map_0,
1270 	.freq_tbl = ftbl_cam_cc_jpeg_clk_src,
1271 	.clkr.hw.init = &(const struct clk_init_data) {
1272 		.name = "cam_cc_jpeg_clk_src",
1273 		.parent_data = cam_cc_parent_data_0,
1274 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1275 		.flags = CLK_SET_RATE_PARENT,
1276 		.ops = &clk_rcg2_shared_ops,
1277 	},
1278 };
1279 
1280 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1281 	F(19200000, P_BI_TCXO, 1, 0, 0),
1282 	F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 4),
1283 	F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0),
1284 	{ }
1285 };
1286 
1287 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1288 	.cmd_rcgr = 0x15000,
1289 	.mnd_width = 8,
1290 	.hid_width = 5,
1291 	.parent_map = cam_cc_parent_map_1,
1292 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1293 	.clkr.hw.init = &(const struct clk_init_data) {
1294 		.name = "cam_cc_mclk0_clk_src",
1295 		.parent_data = cam_cc_parent_data_1,
1296 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1297 		.flags = CLK_SET_RATE_PARENT,
1298 		.ops = &clk_rcg2_shared_ops,
1299 	},
1300 };
1301 
1302 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1303 	.cmd_rcgr = 0x1501c,
1304 	.mnd_width = 8,
1305 	.hid_width = 5,
1306 	.parent_map = cam_cc_parent_map_1,
1307 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1308 	.clkr.hw.init = &(const struct clk_init_data) {
1309 		.name = "cam_cc_mclk1_clk_src",
1310 		.parent_data = cam_cc_parent_data_1,
1311 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1312 		.flags = CLK_SET_RATE_PARENT,
1313 		.ops = &clk_rcg2_shared_ops,
1314 	},
1315 };
1316 
1317 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1318 	.cmd_rcgr = 0x15038,
1319 	.mnd_width = 8,
1320 	.hid_width = 5,
1321 	.parent_map = cam_cc_parent_map_1,
1322 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1323 	.clkr.hw.init = &(const struct clk_init_data) {
1324 		.name = "cam_cc_mclk2_clk_src",
1325 		.parent_data = cam_cc_parent_data_1,
1326 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1327 		.flags = CLK_SET_RATE_PARENT,
1328 		.ops = &clk_rcg2_shared_ops,
1329 	},
1330 };
1331 
1332 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1333 	.cmd_rcgr = 0x15054,
1334 	.mnd_width = 8,
1335 	.hid_width = 5,
1336 	.parent_map = cam_cc_parent_map_1,
1337 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1338 	.clkr.hw.init = &(const struct clk_init_data) {
1339 		.name = "cam_cc_mclk3_clk_src",
1340 		.parent_data = cam_cc_parent_data_1,
1341 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1342 		.flags = CLK_SET_RATE_PARENT,
1343 		.ops = &clk_rcg2_shared_ops,
1344 	},
1345 };
1346 
1347 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1348 	.cmd_rcgr = 0x15070,
1349 	.mnd_width = 8,
1350 	.hid_width = 5,
1351 	.parent_map = cam_cc_parent_map_1,
1352 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1353 	.clkr.hw.init = &(const struct clk_init_data) {
1354 		.name = "cam_cc_mclk4_clk_src",
1355 		.parent_data = cam_cc_parent_data_1,
1356 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1357 		.flags = CLK_SET_RATE_PARENT,
1358 		.ops = &clk_rcg2_shared_ops,
1359 	},
1360 };
1361 
1362 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1363 	.cmd_rcgr = 0x1508c,
1364 	.mnd_width = 8,
1365 	.hid_width = 5,
1366 	.parent_map = cam_cc_parent_map_1,
1367 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1368 	.clkr.hw.init = &(const struct clk_init_data) {
1369 		.name = "cam_cc_mclk5_clk_src",
1370 		.parent_data = cam_cc_parent_data_1,
1371 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1372 		.flags = CLK_SET_RATE_PARENT,
1373 		.ops = &clk_rcg2_shared_ops,
1374 	},
1375 };
1376 
1377 static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1378 	.cmd_rcgr = 0x150a8,
1379 	.mnd_width = 8,
1380 	.hid_width = 5,
1381 	.parent_map = cam_cc_parent_map_1,
1382 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1383 	.clkr.hw.init = &(const struct clk_init_data) {
1384 		.name = "cam_cc_mclk6_clk_src",
1385 		.parent_data = cam_cc_parent_data_1,
1386 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1387 		.flags = CLK_SET_RATE_PARENT,
1388 		.ops = &clk_rcg2_shared_ops,
1389 	},
1390 };
1391 
1392 static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1393 	.cmd_rcgr = 0x150c4,
1394 	.mnd_width = 8,
1395 	.hid_width = 5,
1396 	.parent_map = cam_cc_parent_map_1,
1397 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1398 	.clkr.hw.init = &(const struct clk_init_data) {
1399 		.name = "cam_cc_mclk7_clk_src",
1400 		.parent_data = cam_cc_parent_data_1,
1401 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1402 		.flags = CLK_SET_RATE_PARENT,
1403 		.ops = &clk_rcg2_shared_ops,
1404 	},
1405 };
1406 
1407 static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1408 	F(19200000, P_BI_TCXO, 1, 0, 0),
1409 	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1410 	F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1411 	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1412 	{ }
1413 };
1414 
1415 static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1416 	.cmd_rcgr = 0x1329c,
1417 	.mnd_width = 0,
1418 	.hid_width = 5,
1419 	.parent_map = cam_cc_parent_map_0,
1420 	.freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1421 	.clkr.hw.init = &(const struct clk_init_data) {
1422 		.name = "cam_cc_qdss_debug_clk_src",
1423 		.parent_data = cam_cc_parent_data_0,
1424 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1425 		.flags = CLK_SET_RATE_PARENT,
1426 		.ops = &clk_rcg2_shared_ops,
1427 	},
1428 };
1429 
1430 static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
1431 	F(466000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1432 	F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1433 	F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1434 	F(785000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1435 	{ }
1436 };
1437 
1438 static struct clk_rcg2 cam_cc_sfe_0_clk_src = {
1439 	.cmd_rcgr = 0x1306c,
1440 	.mnd_width = 0,
1441 	.hid_width = 5,
1442 	.parent_map = cam_cc_parent_map_7,
1443 	.freq_tbl = ftbl_cam_cc_sfe_0_clk_src,
1444 	.clkr.hw.init = &(const struct clk_init_data) {
1445 		.name = "cam_cc_sfe_0_clk_src",
1446 		.parent_data = cam_cc_parent_data_7,
1447 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1448 		.flags = CLK_SET_RATE_PARENT,
1449 		.ops = &clk_rcg2_shared_ops,
1450 	},
1451 };
1452 
1453 static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = {
1454 	F(466000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1455 	F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1456 	F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1457 	F(785000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1458 	{ }
1459 };
1460 
1461 static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
1462 	.cmd_rcgr = 0x130bc,
1463 	.mnd_width = 0,
1464 	.hid_width = 5,
1465 	.parent_map = cam_cc_parent_map_8,
1466 	.freq_tbl = ftbl_cam_cc_sfe_1_clk_src,
1467 	.clkr.hw.init = &(const struct clk_init_data) {
1468 		.name = "cam_cc_sfe_1_clk_src",
1469 		.parent_data = cam_cc_parent_data_8,
1470 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1471 		.flags = CLK_SET_RATE_PARENT,
1472 		.ops = &clk_rcg2_shared_ops,
1473 	},
1474 };
1475 
1476 static const struct freq_tbl ftbl_cam_cc_sfe_2_clk_src[] = {
1477 	F(466000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1478 	F(594000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1479 	F(675000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1480 	F(785000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1481 	{ }
1482 };
1483 
1484 static struct clk_rcg2 cam_cc_sfe_2_clk_src = {
1485 	.cmd_rcgr = 0x1310c,
1486 	.mnd_width = 0,
1487 	.hid_width = 5,
1488 	.parent_map = cam_cc_parent_map_9,
1489 	.freq_tbl = ftbl_cam_cc_sfe_2_clk_src,
1490 	.clkr.hw.init = &(const struct clk_init_data) {
1491 		.name = "cam_cc_sfe_2_clk_src",
1492 		.parent_data = cam_cc_parent_data_9,
1493 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_9),
1494 		.flags = CLK_SET_RATE_PARENT,
1495 		.ops = &clk_rcg2_shared_ops,
1496 	},
1497 };
1498 
1499 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1500 	F(32000, P_SLEEP_CLK, 1, 0, 0),
1501 	{ }
1502 };
1503 
1504 static struct clk_rcg2 cam_cc_sleep_clk_src = {
1505 	.cmd_rcgr = 0x132f0,
1506 	.mnd_width = 0,
1507 	.hid_width = 5,
1508 	.parent_map = cam_cc_parent_map_10,
1509 	.freq_tbl = ftbl_cam_cc_sleep_clk_src,
1510 	.clkr.hw.init = &(const struct clk_init_data) {
1511 		.name = "cam_cc_sleep_clk_src",
1512 		.parent_data = cam_cc_parent_data_10,
1513 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_10),
1514 		.flags = CLK_SET_RATE_PARENT,
1515 		.ops = &clk_rcg2_shared_ops,
1516 	},
1517 };
1518 
1519 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1520 	F(19200000, P_BI_TCXO, 1, 0, 0),
1521 	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1522 	{ }
1523 };
1524 
1525 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1526 	.cmd_rcgr = 0x10034,
1527 	.mnd_width = 0,
1528 	.hid_width = 5,
1529 	.parent_map = cam_cc_parent_map_0,
1530 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1531 	.clkr.hw.init = &(const struct clk_init_data) {
1532 		.name = "cam_cc_slow_ahb_clk_src",
1533 		.parent_data = cam_cc_parent_data_0,
1534 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1535 		.flags = CLK_SET_RATE_PARENT,
1536 		.ops = &clk_rcg2_shared_ops,
1537 	},
1538 };
1539 
1540 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1541 	F(19200000, P_BI_TCXO_AO, 1, 0, 0),
1542 	{ }
1543 };
1544 
1545 static struct clk_rcg2 cam_cc_xo_clk_src = {
1546 	.cmd_rcgr = 0x132d4,
1547 	.mnd_width = 0,
1548 	.hid_width = 5,
1549 	.parent_map = cam_cc_parent_map_11_ao,
1550 	.freq_tbl = ftbl_cam_cc_xo_clk_src,
1551 	.clkr.hw.init = &(const struct clk_init_data) {
1552 		.name = "cam_cc_xo_clk_src",
1553 		.parent_data = cam_cc_parent_data_11_ao,
1554 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_11_ao),
1555 		.flags = CLK_SET_RATE_PARENT,
1556 		.ops = &clk_rcg2_shared_ops,
1557 	},
1558 };
1559 
1560 static struct clk_branch cam_cc_bps_ahb_clk = {
1561 	.halt_reg = 0x1004c,
1562 	.halt_check = BRANCH_HALT,
1563 	.clkr = {
1564 		.enable_reg = 0x1004c,
1565 		.enable_mask = BIT(0),
1566 		.hw.init = &(const struct clk_init_data) {
1567 			.name = "cam_cc_bps_ahb_clk",
1568 			.parent_hws = (const struct clk_hw*[]) {
1569 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1570 			},
1571 			.num_parents = 1,
1572 			.flags = CLK_SET_RATE_PARENT,
1573 			.ops = &clk_branch2_ops,
1574 		},
1575 	},
1576 };
1577 
1578 static struct clk_branch cam_cc_bps_clk = {
1579 	.halt_reg = 0x10068,
1580 	.halt_check = BRANCH_HALT,
1581 	.clkr = {
1582 		.enable_reg = 0x10068,
1583 		.enable_mask = BIT(0),
1584 		.hw.init = &(const struct clk_init_data) {
1585 			.name = "cam_cc_bps_clk",
1586 			.parent_hws = (const struct clk_hw*[]) {
1587 				&cam_cc_bps_clk_src.clkr.hw,
1588 			},
1589 			.num_parents = 1,
1590 			.flags = CLK_SET_RATE_PARENT,
1591 			.ops = &clk_branch2_ops,
1592 		},
1593 	},
1594 };
1595 
1596 static struct clk_branch cam_cc_bps_fast_ahb_clk = {
1597 	.halt_reg = 0x10030,
1598 	.halt_check = BRANCH_HALT,
1599 	.clkr = {
1600 		.enable_reg = 0x10030,
1601 		.enable_mask = BIT(0),
1602 		.hw.init = &(const struct clk_init_data) {
1603 			.name = "cam_cc_bps_fast_ahb_clk",
1604 			.parent_hws = (const struct clk_hw*[]) {
1605 				&cam_cc_fast_ahb_clk_src.clkr.hw,
1606 			},
1607 			.num_parents = 1,
1608 			.flags = CLK_SET_RATE_PARENT,
1609 			.ops = &clk_branch2_ops,
1610 		},
1611 	},
1612 };
1613 
1614 static struct clk_branch cam_cc_bps_shift_clk = {
1615 	.halt_reg = 0x10078,
1616 	.halt_check = BRANCH_HALT_VOTED,
1617 	.clkr = {
1618 		.enable_reg = 0x10078,
1619 		.enable_mask = BIT(0),
1620 		.hw.init = &(const struct clk_init_data) {
1621 			.name = "cam_cc_bps_shift_clk",
1622 			.parent_hws = (const struct clk_hw*[]) {
1623 				&cam_cc_xo_clk_src.clkr.hw,
1624 			},
1625 			.num_parents = 1,
1626 			.flags = CLK_SET_RATE_PARENT,
1627 			.ops = &clk_branch2_ops,
1628 		},
1629 	},
1630 };
1631 
1632 static struct clk_branch cam_cc_camnoc_axi_nrt_clk = {
1633 	.halt_reg = 0x13284,
1634 	.halt_check = BRANCH_HALT,
1635 	.clkr = {
1636 		.enable_reg = 0x13284,
1637 		.enable_mask = BIT(0),
1638 		.hw.init = &(const struct clk_init_data) {
1639 			.name = "cam_cc_camnoc_axi_nrt_clk",
1640 			.parent_hws = (const struct clk_hw*[]) {
1641 				&cam_cc_camnoc_axi_rt_clk_src.clkr.hw,
1642 			},
1643 			.num_parents = 1,
1644 			.flags = CLK_SET_RATE_PARENT,
1645 			.ops = &clk_branch2_ops,
1646 		},
1647 	},
1648 };
1649 
1650 static struct clk_branch cam_cc_camnoc_axi_rt_clk = {
1651 	.halt_reg = 0x13274,
1652 	.halt_check = BRANCH_HALT,
1653 	.clkr = {
1654 		.enable_reg = 0x13274,
1655 		.enable_mask = BIT(0),
1656 		.hw.init = &(const struct clk_init_data) {
1657 			.name = "cam_cc_camnoc_axi_rt_clk",
1658 			.parent_hws = (const struct clk_hw*[]) {
1659 				&cam_cc_camnoc_axi_rt_clk_src.clkr.hw,
1660 			},
1661 			.num_parents = 1,
1662 			.flags = CLK_SET_RATE_PARENT,
1663 			.ops = &clk_branch2_ops,
1664 		},
1665 	},
1666 };
1667 
1668 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1669 	.halt_reg = 0x13290,
1670 	.halt_check = BRANCH_HALT,
1671 	.clkr = {
1672 		.enable_reg = 0x13290,
1673 		.enable_mask = BIT(0),
1674 		.hw.init = &(const struct clk_init_data) {
1675 			.name = "cam_cc_camnoc_dcd_xo_clk",
1676 			.parent_hws = (const struct clk_hw*[]) {
1677 				&cam_cc_xo_clk_src.clkr.hw,
1678 			},
1679 			.num_parents = 1,
1680 			.flags = CLK_SET_RATE_PARENT,
1681 			.ops = &clk_branch2_ops,
1682 		},
1683 	},
1684 };
1685 
1686 static struct clk_branch cam_cc_camnoc_xo_clk = {
1687 	.halt_reg = 0x13294,
1688 	.halt_check = BRANCH_HALT,
1689 	.clkr = {
1690 		.enable_reg = 0x13294,
1691 		.enable_mask = BIT(0),
1692 		.hw.init = &(const struct clk_init_data) {
1693 			.name = "cam_cc_camnoc_xo_clk",
1694 			.parent_hws = (const struct clk_hw*[]) {
1695 				&cam_cc_xo_clk_src.clkr.hw,
1696 			},
1697 			.num_parents = 1,
1698 			.flags = CLK_SET_RATE_PARENT,
1699 			.ops = &clk_branch2_ops,
1700 		},
1701 	},
1702 };
1703 
1704 static struct clk_branch cam_cc_cci_0_clk = {
1705 	.halt_reg = 0x131e4,
1706 	.halt_check = BRANCH_HALT,
1707 	.clkr = {
1708 		.enable_reg = 0x131e4,
1709 		.enable_mask = BIT(0),
1710 		.hw.init = &(const struct clk_init_data) {
1711 			.name = "cam_cc_cci_0_clk",
1712 			.parent_hws = (const struct clk_hw*[]) {
1713 				&cam_cc_cci_0_clk_src.clkr.hw,
1714 			},
1715 			.num_parents = 1,
1716 			.flags = CLK_SET_RATE_PARENT,
1717 			.ops = &clk_branch2_ops,
1718 		},
1719 	},
1720 };
1721 
1722 static struct clk_branch cam_cc_cci_1_clk = {
1723 	.halt_reg = 0x13200,
1724 	.halt_check = BRANCH_HALT,
1725 	.clkr = {
1726 		.enable_reg = 0x13200,
1727 		.enable_mask = BIT(0),
1728 		.hw.init = &(const struct clk_init_data) {
1729 			.name = "cam_cc_cci_1_clk",
1730 			.parent_hws = (const struct clk_hw*[]) {
1731 				&cam_cc_cci_1_clk_src.clkr.hw,
1732 			},
1733 			.num_parents = 1,
1734 			.flags = CLK_SET_RATE_PARENT,
1735 			.ops = &clk_branch2_ops,
1736 		},
1737 	},
1738 };
1739 
1740 static struct clk_branch cam_cc_cci_2_clk = {
1741 	.halt_reg = 0x1321c,
1742 	.halt_check = BRANCH_HALT,
1743 	.clkr = {
1744 		.enable_reg = 0x1321c,
1745 		.enable_mask = BIT(0),
1746 		.hw.init = &(const struct clk_init_data) {
1747 			.name = "cam_cc_cci_2_clk",
1748 			.parent_hws = (const struct clk_hw*[]) {
1749 				&cam_cc_cci_2_clk_src.clkr.hw,
1750 			},
1751 			.num_parents = 1,
1752 			.flags = CLK_SET_RATE_PARENT,
1753 			.ops = &clk_branch2_ops,
1754 		},
1755 	},
1756 };
1757 
1758 static struct clk_branch cam_cc_core_ahb_clk = {
1759 	.halt_reg = 0x132d0,
1760 	.halt_check = BRANCH_HALT_DELAY,
1761 	.clkr = {
1762 		.enable_reg = 0x132d0,
1763 		.enable_mask = BIT(0),
1764 		.hw.init = &(const struct clk_init_data) {
1765 			.name = "cam_cc_core_ahb_clk",
1766 			.parent_hws = (const struct clk_hw*[]) {
1767 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1768 			},
1769 			.num_parents = 1,
1770 			.flags = CLK_SET_RATE_PARENT,
1771 			.ops = &clk_branch2_ops,
1772 		},
1773 	},
1774 };
1775 
1776 static struct clk_branch cam_cc_cpas_ahb_clk = {
1777 	.halt_reg = 0x13220,
1778 	.halt_check = BRANCH_HALT,
1779 	.clkr = {
1780 		.enable_reg = 0x13220,
1781 		.enable_mask = BIT(0),
1782 		.hw.init = &(const struct clk_init_data) {
1783 			.name = "cam_cc_cpas_ahb_clk",
1784 			.parent_hws = (const struct clk_hw*[]) {
1785 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1786 			},
1787 			.num_parents = 1,
1788 			.flags = CLK_SET_RATE_PARENT,
1789 			.ops = &clk_branch2_ops,
1790 		},
1791 	},
1792 };
1793 
1794 static struct clk_branch cam_cc_cpas_bps_clk = {
1795 	.halt_reg = 0x10074,
1796 	.halt_check = BRANCH_HALT,
1797 	.clkr = {
1798 		.enable_reg = 0x10074,
1799 		.enable_mask = BIT(0),
1800 		.hw.init = &(const struct clk_init_data) {
1801 			.name = "cam_cc_cpas_bps_clk",
1802 			.parent_hws = (const struct clk_hw*[]) {
1803 				&cam_cc_bps_clk_src.clkr.hw,
1804 			},
1805 			.num_parents = 1,
1806 			.flags = CLK_SET_RATE_PARENT,
1807 			.ops = &clk_branch2_ops,
1808 		},
1809 	},
1810 };
1811 
1812 static struct clk_branch cam_cc_cpas_cre_clk = {
1813 	.halt_reg = 0x13160,
1814 	.halt_check = BRANCH_HALT,
1815 	.clkr = {
1816 		.enable_reg = 0x13160,
1817 		.enable_mask = BIT(0),
1818 		.hw.init = &(const struct clk_init_data) {
1819 			.name = "cam_cc_cpas_cre_clk",
1820 			.parent_hws = (const struct clk_hw*[]) {
1821 				&cam_cc_cre_clk_src.clkr.hw,
1822 			},
1823 			.num_parents = 1,
1824 			.flags = CLK_SET_RATE_PARENT,
1825 			.ops = &clk_branch2_ops,
1826 		},
1827 	},
1828 };
1829 
1830 static struct clk_branch cam_cc_cpas_fast_ahb_clk = {
1831 	.halt_reg = 0x1322c,
1832 	.halt_check = BRANCH_HALT,
1833 	.clkr = {
1834 		.enable_reg = 0x1322c,
1835 		.enable_mask = BIT(0),
1836 		.hw.init = &(const struct clk_init_data) {
1837 			.name = "cam_cc_cpas_fast_ahb_clk",
1838 			.parent_hws = (const struct clk_hw*[]) {
1839 				&cam_cc_fast_ahb_clk_src.clkr.hw,
1840 			},
1841 			.num_parents = 1,
1842 			.flags = CLK_SET_RATE_PARENT,
1843 			.ops = &clk_branch2_ops,
1844 		},
1845 	},
1846 };
1847 
1848 static struct clk_branch cam_cc_cpas_ife_0_clk = {
1849 	.halt_reg = 0x1103c,
1850 	.halt_check = BRANCH_HALT,
1851 	.clkr = {
1852 		.enable_reg = 0x1103c,
1853 		.enable_mask = BIT(0),
1854 		.hw.init = &(const struct clk_init_data) {
1855 			.name = "cam_cc_cpas_ife_0_clk",
1856 			.parent_hws = (const struct clk_hw*[]) {
1857 				&cam_cc_ife_0_clk_src.clkr.hw,
1858 			},
1859 			.num_parents = 1,
1860 			.flags = CLK_SET_RATE_PARENT,
1861 			.ops = &clk_branch2_ops,
1862 		},
1863 	},
1864 };
1865 
1866 static struct clk_branch cam_cc_cpas_ife_1_clk = {
1867 	.halt_reg = 0x1203c,
1868 	.halt_check = BRANCH_HALT,
1869 	.clkr = {
1870 		.enable_reg = 0x1203c,
1871 		.enable_mask = BIT(0),
1872 		.hw.init = &(const struct clk_init_data) {
1873 			.name = "cam_cc_cpas_ife_1_clk",
1874 			.parent_hws = (const struct clk_hw*[]) {
1875 				&cam_cc_ife_1_clk_src.clkr.hw,
1876 			},
1877 			.num_parents = 1,
1878 			.flags = CLK_SET_RATE_PARENT,
1879 			.ops = &clk_branch2_ops,
1880 		},
1881 	},
1882 };
1883 
1884 static struct clk_branch cam_cc_cpas_ife_2_clk = {
1885 	.halt_reg = 0x1208c,
1886 	.halt_check = BRANCH_HALT,
1887 	.clkr = {
1888 		.enable_reg = 0x1208c,
1889 		.enable_mask = BIT(0),
1890 		.hw.init = &(const struct clk_init_data) {
1891 			.name = "cam_cc_cpas_ife_2_clk",
1892 			.parent_hws = (const struct clk_hw*[]) {
1893 				&cam_cc_ife_2_clk_src.clkr.hw,
1894 			},
1895 			.num_parents = 1,
1896 			.flags = CLK_SET_RATE_PARENT,
1897 			.ops = &clk_branch2_ops,
1898 		},
1899 	},
1900 };
1901 
1902 static struct clk_branch cam_cc_cpas_ife_lite_clk = {
1903 	.halt_reg = 0x13024,
1904 	.halt_check = BRANCH_HALT,
1905 	.clkr = {
1906 		.enable_reg = 0x13024,
1907 		.enable_mask = BIT(0),
1908 		.hw.init = &(const struct clk_init_data) {
1909 			.name = "cam_cc_cpas_ife_lite_clk",
1910 			.parent_hws = (const struct clk_hw*[]) {
1911 				&cam_cc_ife_lite_clk_src.clkr.hw,
1912 			},
1913 			.num_parents = 1,
1914 			.flags = CLK_SET_RATE_PARENT,
1915 			.ops = &clk_branch2_ops,
1916 		},
1917 	},
1918 };
1919 
1920 static struct clk_branch cam_cc_cpas_ipe_nps_clk = {
1921 	.halt_reg = 0x100b8,
1922 	.halt_check = BRANCH_HALT,
1923 	.clkr = {
1924 		.enable_reg = 0x100b8,
1925 		.enable_mask = BIT(0),
1926 		.hw.init = &(const struct clk_init_data) {
1927 			.name = "cam_cc_cpas_ipe_nps_clk",
1928 			.parent_hws = (const struct clk_hw*[]) {
1929 				&cam_cc_ipe_nps_clk_src.clkr.hw,
1930 			},
1931 			.num_parents = 1,
1932 			.flags = CLK_SET_RATE_PARENT,
1933 			.ops = &clk_branch2_ops,
1934 		},
1935 	},
1936 };
1937 
1938 static struct clk_branch cam_cc_cpas_sbi_clk = {
1939 	.halt_reg = 0x10104,
1940 	.halt_check = BRANCH_HALT,
1941 	.clkr = {
1942 		.enable_reg = 0x10104,
1943 		.enable_mask = BIT(0),
1944 		.hw.init = &(const struct clk_init_data) {
1945 			.name = "cam_cc_cpas_sbi_clk",
1946 			.parent_hws = (const struct clk_hw*[]) {
1947 				&cam_cc_ife_0_clk_src.clkr.hw,
1948 			},
1949 			.num_parents = 1,
1950 			.flags = CLK_SET_RATE_PARENT,
1951 			.ops = &clk_branch2_ops,
1952 		},
1953 	},
1954 };
1955 
1956 static struct clk_branch cam_cc_cpas_sfe_0_clk = {
1957 	.halt_reg = 0x13090,
1958 	.halt_check = BRANCH_HALT,
1959 	.clkr = {
1960 		.enable_reg = 0x13090,
1961 		.enable_mask = BIT(0),
1962 		.hw.init = &(const struct clk_init_data) {
1963 			.name = "cam_cc_cpas_sfe_0_clk",
1964 			.parent_hws = (const struct clk_hw*[]) {
1965 				&cam_cc_sfe_0_clk_src.clkr.hw,
1966 			},
1967 			.num_parents = 1,
1968 			.flags = CLK_SET_RATE_PARENT,
1969 			.ops = &clk_branch2_ops,
1970 		},
1971 	},
1972 };
1973 
1974 static struct clk_branch cam_cc_cpas_sfe_1_clk = {
1975 	.halt_reg = 0x130e0,
1976 	.halt_check = BRANCH_HALT,
1977 	.clkr = {
1978 		.enable_reg = 0x130e0,
1979 		.enable_mask = BIT(0),
1980 		.hw.init = &(const struct clk_init_data) {
1981 			.name = "cam_cc_cpas_sfe_1_clk",
1982 			.parent_hws = (const struct clk_hw*[]) {
1983 				&cam_cc_sfe_1_clk_src.clkr.hw,
1984 			},
1985 			.num_parents = 1,
1986 			.flags = CLK_SET_RATE_PARENT,
1987 			.ops = &clk_branch2_ops,
1988 		},
1989 	},
1990 };
1991 
1992 static struct clk_branch cam_cc_cpas_sfe_2_clk = {
1993 	.halt_reg = 0x13130,
1994 	.halt_check = BRANCH_HALT,
1995 	.clkr = {
1996 		.enable_reg = 0x13130,
1997 		.enable_mask = BIT(0),
1998 		.hw.init = &(const struct clk_init_data) {
1999 			.name = "cam_cc_cpas_sfe_2_clk",
2000 			.parent_hws = (const struct clk_hw*[]) {
2001 				&cam_cc_sfe_2_clk_src.clkr.hw,
2002 			},
2003 			.num_parents = 1,
2004 			.flags = CLK_SET_RATE_PARENT,
2005 			.ops = &clk_branch2_ops,
2006 		},
2007 	},
2008 };
2009 
2010 static struct clk_branch cam_cc_cre_ahb_clk = {
2011 	.halt_reg = 0x13164,
2012 	.halt_check = BRANCH_HALT,
2013 	.clkr = {
2014 		.enable_reg = 0x13164,
2015 		.enable_mask = BIT(0),
2016 		.hw.init = &(const struct clk_init_data) {
2017 			.name = "cam_cc_cre_ahb_clk",
2018 			.parent_hws = (const struct clk_hw*[]) {
2019 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2020 			},
2021 			.num_parents = 1,
2022 			.flags = CLK_SET_RATE_PARENT,
2023 			.ops = &clk_branch2_ops,
2024 		},
2025 	},
2026 };
2027 
2028 static struct clk_branch cam_cc_cre_clk = {
2029 	.halt_reg = 0x1315c,
2030 	.halt_check = BRANCH_HALT,
2031 	.clkr = {
2032 		.enable_reg = 0x1315c,
2033 		.enable_mask = BIT(0),
2034 		.hw.init = &(const struct clk_init_data) {
2035 			.name = "cam_cc_cre_clk",
2036 			.parent_hws = (const struct clk_hw*[]) {
2037 				&cam_cc_cre_clk_src.clkr.hw,
2038 			},
2039 			.num_parents = 1,
2040 			.flags = CLK_SET_RATE_PARENT,
2041 			.ops = &clk_branch2_ops,
2042 		},
2043 	},
2044 };
2045 
2046 static struct clk_branch cam_cc_csi0phytimer_clk = {
2047 	.halt_reg = 0x150f8,
2048 	.halt_check = BRANCH_HALT,
2049 	.clkr = {
2050 		.enable_reg = 0x150f8,
2051 		.enable_mask = BIT(0),
2052 		.hw.init = &(const struct clk_init_data) {
2053 			.name = "cam_cc_csi0phytimer_clk",
2054 			.parent_hws = (const struct clk_hw*[]) {
2055 				&cam_cc_csi0phytimer_clk_src.clkr.hw,
2056 			},
2057 			.num_parents = 1,
2058 			.flags = CLK_SET_RATE_PARENT,
2059 			.ops = &clk_branch2_ops,
2060 		},
2061 	},
2062 };
2063 
2064 static struct clk_branch cam_cc_csi1phytimer_clk = {
2065 	.halt_reg = 0x1511c,
2066 	.halt_check = BRANCH_HALT,
2067 	.clkr = {
2068 		.enable_reg = 0x1511c,
2069 		.enable_mask = BIT(0),
2070 		.hw.init = &(const struct clk_init_data) {
2071 			.name = "cam_cc_csi1phytimer_clk",
2072 			.parent_hws = (const struct clk_hw*[]) {
2073 				&cam_cc_csi1phytimer_clk_src.clkr.hw,
2074 			},
2075 			.num_parents = 1,
2076 			.flags = CLK_SET_RATE_PARENT,
2077 			.ops = &clk_branch2_ops,
2078 		},
2079 	},
2080 };
2081 
2082 static struct clk_branch cam_cc_csi2phytimer_clk = {
2083 	.halt_reg = 0x1513c,
2084 	.halt_check = BRANCH_HALT,
2085 	.clkr = {
2086 		.enable_reg = 0x1513c,
2087 		.enable_mask = BIT(0),
2088 		.hw.init = &(const struct clk_init_data) {
2089 			.name = "cam_cc_csi2phytimer_clk",
2090 			.parent_hws = (const struct clk_hw*[]) {
2091 				&cam_cc_csi2phytimer_clk_src.clkr.hw,
2092 			},
2093 			.num_parents = 1,
2094 			.flags = CLK_SET_RATE_PARENT,
2095 			.ops = &clk_branch2_ops,
2096 		},
2097 	},
2098 };
2099 
2100 static struct clk_branch cam_cc_csi3phytimer_clk = {
2101 	.halt_reg = 0x1515c,
2102 	.halt_check = BRANCH_HALT,
2103 	.clkr = {
2104 		.enable_reg = 0x1515c,
2105 		.enable_mask = BIT(0),
2106 		.hw.init = &(const struct clk_init_data) {
2107 			.name = "cam_cc_csi3phytimer_clk",
2108 			.parent_hws = (const struct clk_hw*[]) {
2109 				&cam_cc_csi3phytimer_clk_src.clkr.hw,
2110 			},
2111 			.num_parents = 1,
2112 			.flags = CLK_SET_RATE_PARENT,
2113 			.ops = &clk_branch2_ops,
2114 		},
2115 	},
2116 };
2117 
2118 static struct clk_branch cam_cc_csi4phytimer_clk = {
2119 	.halt_reg = 0x1517c,
2120 	.halt_check = BRANCH_HALT,
2121 	.clkr = {
2122 		.enable_reg = 0x1517c,
2123 		.enable_mask = BIT(0),
2124 		.hw.init = &(const struct clk_init_data) {
2125 			.name = "cam_cc_csi4phytimer_clk",
2126 			.parent_hws = (const struct clk_hw*[]) {
2127 				&cam_cc_csi4phytimer_clk_src.clkr.hw,
2128 			},
2129 			.num_parents = 1,
2130 			.flags = CLK_SET_RATE_PARENT,
2131 			.ops = &clk_branch2_ops,
2132 		},
2133 	},
2134 };
2135 
2136 static struct clk_branch cam_cc_csi5phytimer_clk = {
2137 	.halt_reg = 0x1519c,
2138 	.halt_check = BRANCH_HALT,
2139 	.clkr = {
2140 		.enable_reg = 0x1519c,
2141 		.enable_mask = BIT(0),
2142 		.hw.init = &(const struct clk_init_data) {
2143 			.name = "cam_cc_csi5phytimer_clk",
2144 			.parent_hws = (const struct clk_hw*[]) {
2145 				&cam_cc_csi5phytimer_clk_src.clkr.hw,
2146 			},
2147 			.num_parents = 1,
2148 			.flags = CLK_SET_RATE_PARENT,
2149 			.ops = &clk_branch2_ops,
2150 		},
2151 	},
2152 };
2153 
2154 static struct clk_branch cam_cc_csi6phytimer_clk = {
2155 	.halt_reg = 0x151bc,
2156 	.halt_check = BRANCH_HALT,
2157 	.clkr = {
2158 		.enable_reg = 0x151bc,
2159 		.enable_mask = BIT(0),
2160 		.hw.init = &(const struct clk_init_data) {
2161 			.name = "cam_cc_csi6phytimer_clk",
2162 			.parent_hws = (const struct clk_hw*[]) {
2163 				&cam_cc_csi6phytimer_clk_src.clkr.hw,
2164 			},
2165 			.num_parents = 1,
2166 			.flags = CLK_SET_RATE_PARENT,
2167 			.ops = &clk_branch2_ops,
2168 		},
2169 	},
2170 };
2171 
2172 static struct clk_branch cam_cc_csi7phytimer_clk = {
2173 	.halt_reg = 0x151dc,
2174 	.halt_check = BRANCH_HALT,
2175 	.clkr = {
2176 		.enable_reg = 0x151dc,
2177 		.enable_mask = BIT(0),
2178 		.hw.init = &(const struct clk_init_data) {
2179 			.name = "cam_cc_csi7phytimer_clk",
2180 			.parent_hws = (const struct clk_hw*[]) {
2181 				&cam_cc_csi7phytimer_clk_src.clkr.hw,
2182 			},
2183 			.num_parents = 1,
2184 			.flags = CLK_SET_RATE_PARENT,
2185 			.ops = &clk_branch2_ops,
2186 		},
2187 	},
2188 };
2189 
2190 static struct clk_branch cam_cc_csid_clk = {
2191 	.halt_reg = 0x13250,
2192 	.halt_check = BRANCH_HALT,
2193 	.clkr = {
2194 		.enable_reg = 0x13250,
2195 		.enable_mask = BIT(0),
2196 		.hw.init = &(const struct clk_init_data) {
2197 			.name = "cam_cc_csid_clk",
2198 			.parent_hws = (const struct clk_hw*[]) {
2199 				&cam_cc_csid_clk_src.clkr.hw,
2200 			},
2201 			.num_parents = 1,
2202 			.flags = CLK_SET_RATE_PARENT,
2203 			.ops = &clk_branch2_ops,
2204 		},
2205 	},
2206 };
2207 
2208 static struct clk_branch cam_cc_csid_csiphy_rx_clk = {
2209 	.halt_reg = 0x15100,
2210 	.halt_check = BRANCH_HALT,
2211 	.clkr = {
2212 		.enable_reg = 0x15100,
2213 		.enable_mask = BIT(0),
2214 		.hw.init = &(const struct clk_init_data) {
2215 			.name = "cam_cc_csid_csiphy_rx_clk",
2216 			.parent_hws = (const struct clk_hw*[]) {
2217 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2218 			},
2219 			.num_parents = 1,
2220 			.flags = CLK_SET_RATE_PARENT,
2221 			.ops = &clk_branch2_ops,
2222 		},
2223 	},
2224 };
2225 
2226 static struct clk_branch cam_cc_csiphy0_clk = {
2227 	.halt_reg = 0x150fc,
2228 	.halt_check = BRANCH_HALT,
2229 	.clkr = {
2230 		.enable_reg = 0x150fc,
2231 		.enable_mask = BIT(0),
2232 		.hw.init = &(const struct clk_init_data) {
2233 			.name = "cam_cc_csiphy0_clk",
2234 			.parent_hws = (const struct clk_hw*[]) {
2235 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2236 			},
2237 			.num_parents = 1,
2238 			.flags = CLK_SET_RATE_PARENT,
2239 			.ops = &clk_branch2_ops,
2240 		},
2241 	},
2242 };
2243 
2244 static struct clk_branch cam_cc_csiphy1_clk = {
2245 	.halt_reg = 0x15120,
2246 	.halt_check = BRANCH_HALT,
2247 	.clkr = {
2248 		.enable_reg = 0x15120,
2249 		.enable_mask = BIT(0),
2250 		.hw.init = &(const struct clk_init_data) {
2251 			.name = "cam_cc_csiphy1_clk",
2252 			.parent_hws = (const struct clk_hw*[]) {
2253 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2254 			},
2255 			.num_parents = 1,
2256 			.flags = CLK_SET_RATE_PARENT,
2257 			.ops = &clk_branch2_ops,
2258 		},
2259 	},
2260 };
2261 
2262 static struct clk_branch cam_cc_csiphy2_clk = {
2263 	.halt_reg = 0x15140,
2264 	.halt_check = BRANCH_HALT,
2265 	.clkr = {
2266 		.enable_reg = 0x15140,
2267 		.enable_mask = BIT(0),
2268 		.hw.init = &(const struct clk_init_data) {
2269 			.name = "cam_cc_csiphy2_clk",
2270 			.parent_hws = (const struct clk_hw*[]) {
2271 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2272 			},
2273 			.num_parents = 1,
2274 			.flags = CLK_SET_RATE_PARENT,
2275 			.ops = &clk_branch2_ops,
2276 		},
2277 	},
2278 };
2279 
2280 static struct clk_branch cam_cc_csiphy3_clk = {
2281 	.halt_reg = 0x15160,
2282 	.halt_check = BRANCH_HALT,
2283 	.clkr = {
2284 		.enable_reg = 0x15160,
2285 		.enable_mask = BIT(0),
2286 		.hw.init = &(const struct clk_init_data) {
2287 			.name = "cam_cc_csiphy3_clk",
2288 			.parent_hws = (const struct clk_hw*[]) {
2289 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2290 			},
2291 			.num_parents = 1,
2292 			.flags = CLK_SET_RATE_PARENT,
2293 			.ops = &clk_branch2_ops,
2294 		},
2295 	},
2296 };
2297 
2298 static struct clk_branch cam_cc_csiphy4_clk = {
2299 	.halt_reg = 0x15180,
2300 	.halt_check = BRANCH_HALT,
2301 	.clkr = {
2302 		.enable_reg = 0x15180,
2303 		.enable_mask = BIT(0),
2304 		.hw.init = &(const struct clk_init_data) {
2305 			.name = "cam_cc_csiphy4_clk",
2306 			.parent_hws = (const struct clk_hw*[]) {
2307 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2308 			},
2309 			.num_parents = 1,
2310 			.flags = CLK_SET_RATE_PARENT,
2311 			.ops = &clk_branch2_ops,
2312 		},
2313 	},
2314 };
2315 
2316 static struct clk_branch cam_cc_csiphy5_clk = {
2317 	.halt_reg = 0x151a0,
2318 	.halt_check = BRANCH_HALT,
2319 	.clkr = {
2320 		.enable_reg = 0x151a0,
2321 		.enable_mask = BIT(0),
2322 		.hw.init = &(const struct clk_init_data) {
2323 			.name = "cam_cc_csiphy5_clk",
2324 			.parent_hws = (const struct clk_hw*[]) {
2325 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2326 			},
2327 			.num_parents = 1,
2328 			.flags = CLK_SET_RATE_PARENT,
2329 			.ops = &clk_branch2_ops,
2330 		},
2331 	},
2332 };
2333 
2334 static struct clk_branch cam_cc_csiphy6_clk = {
2335 	.halt_reg = 0x151c0,
2336 	.halt_check = BRANCH_HALT,
2337 	.clkr = {
2338 		.enable_reg = 0x151c0,
2339 		.enable_mask = BIT(0),
2340 		.hw.init = &(const struct clk_init_data) {
2341 			.name = "cam_cc_csiphy6_clk",
2342 			.parent_hws = (const struct clk_hw*[]) {
2343 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2344 			},
2345 			.num_parents = 1,
2346 			.flags = CLK_SET_RATE_PARENT,
2347 			.ops = &clk_branch2_ops,
2348 		},
2349 	},
2350 };
2351 
2352 static struct clk_branch cam_cc_csiphy7_clk = {
2353 	.halt_reg = 0x151e0,
2354 	.halt_check = BRANCH_HALT,
2355 	.clkr = {
2356 		.enable_reg = 0x151e0,
2357 		.enable_mask = BIT(0),
2358 		.hw.init = &(const struct clk_init_data) {
2359 			.name = "cam_cc_csiphy7_clk",
2360 			.parent_hws = (const struct clk_hw*[]) {
2361 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2362 			},
2363 			.num_parents = 1,
2364 			.flags = CLK_SET_RATE_PARENT,
2365 			.ops = &clk_branch2_ops,
2366 		},
2367 	},
2368 };
2369 
2370 static struct clk_branch cam_cc_icp_ahb_clk = {
2371 	.halt_reg = 0x131c8,
2372 	.halt_check = BRANCH_HALT,
2373 	.clkr = {
2374 		.enable_reg = 0x131c8,
2375 		.enable_mask = BIT(0),
2376 		.hw.init = &(const struct clk_init_data) {
2377 			.name = "cam_cc_icp_ahb_clk",
2378 			.parent_hws = (const struct clk_hw*[]) {
2379 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2380 			},
2381 			.num_parents = 1,
2382 			.flags = CLK_SET_RATE_PARENT,
2383 			.ops = &clk_branch2_ops,
2384 		},
2385 	},
2386 };
2387 
2388 static struct clk_branch cam_cc_icp_clk = {
2389 	.halt_reg = 0x131bc,
2390 	.halt_check = BRANCH_HALT,
2391 	.clkr = {
2392 		.enable_reg = 0x131bc,
2393 		.enable_mask = BIT(0),
2394 		.hw.init = &(const struct clk_init_data) {
2395 			.name = "cam_cc_icp_clk",
2396 			.parent_hws = (const struct clk_hw*[]) {
2397 				&cam_cc_icp_clk_src.clkr.hw,
2398 			},
2399 			.num_parents = 1,
2400 			.flags = CLK_SET_RATE_PARENT,
2401 			.ops = &clk_branch2_ops,
2402 		},
2403 	},
2404 };
2405 
2406 static struct clk_branch cam_cc_ife_0_clk = {
2407 	.halt_reg = 0x11030,
2408 	.halt_check = BRANCH_HALT,
2409 	.clkr = {
2410 		.enable_reg = 0x11030,
2411 		.enable_mask = BIT(0),
2412 		.hw.init = &(const struct clk_init_data) {
2413 			.name = "cam_cc_ife_0_clk",
2414 			.parent_hws = (const struct clk_hw*[]) {
2415 				&cam_cc_ife_0_clk_src.clkr.hw,
2416 			},
2417 			.num_parents = 1,
2418 			.flags = CLK_SET_RATE_PARENT,
2419 			.ops = &clk_branch2_ops,
2420 		},
2421 	},
2422 };
2423 
2424 static struct clk_branch cam_cc_ife_0_fast_ahb_clk = {
2425 	.halt_reg = 0x11048,
2426 	.halt_check = BRANCH_HALT,
2427 	.clkr = {
2428 		.enable_reg = 0x11048,
2429 		.enable_mask = BIT(0),
2430 		.hw.init = &(const struct clk_init_data) {
2431 			.name = "cam_cc_ife_0_fast_ahb_clk",
2432 			.parent_hws = (const struct clk_hw*[]) {
2433 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2434 			},
2435 			.num_parents = 1,
2436 			.flags = CLK_SET_RATE_PARENT,
2437 			.ops = &clk_branch2_ops,
2438 		},
2439 	},
2440 };
2441 
2442 static struct clk_branch cam_cc_ife_0_shift_clk = {
2443 	.halt_reg = 0x11064,
2444 	.halt_check = BRANCH_HALT_VOTED,
2445 	.clkr = {
2446 		.enable_reg = 0x11064,
2447 		.enable_mask = BIT(0),
2448 		.hw.init = &(const struct clk_init_data) {
2449 			.name = "cam_cc_ife_0_shift_clk",
2450 			.parent_hws = (const struct clk_hw*[]) {
2451 				&cam_cc_xo_clk_src.clkr.hw,
2452 			},
2453 			.num_parents = 1,
2454 			.flags = CLK_SET_RATE_PARENT,
2455 			.ops = &clk_branch2_ops,
2456 		},
2457 	},
2458 };
2459 
2460 static struct clk_branch cam_cc_ife_1_clk = {
2461 	.halt_reg = 0x12030,
2462 	.halt_check = BRANCH_HALT,
2463 	.clkr = {
2464 		.enable_reg = 0x12030,
2465 		.enable_mask = BIT(0),
2466 		.hw.init = &(const struct clk_init_data) {
2467 			.name = "cam_cc_ife_1_clk",
2468 			.parent_hws = (const struct clk_hw*[]) {
2469 				&cam_cc_ife_1_clk_src.clkr.hw,
2470 			},
2471 			.num_parents = 1,
2472 			.flags = CLK_SET_RATE_PARENT,
2473 			.ops = &clk_branch2_ops,
2474 		},
2475 	},
2476 };
2477 
2478 static struct clk_branch cam_cc_ife_1_fast_ahb_clk = {
2479 	.halt_reg = 0x12048,
2480 	.halt_check = BRANCH_HALT,
2481 	.clkr = {
2482 		.enable_reg = 0x12048,
2483 		.enable_mask = BIT(0),
2484 		.hw.init = &(const struct clk_init_data) {
2485 			.name = "cam_cc_ife_1_fast_ahb_clk",
2486 			.parent_hws = (const struct clk_hw*[]) {
2487 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2488 			},
2489 			.num_parents = 1,
2490 			.flags = CLK_SET_RATE_PARENT,
2491 			.ops = &clk_branch2_ops,
2492 		},
2493 	},
2494 };
2495 
2496 static struct clk_branch cam_cc_ife_1_shift_clk = {
2497 	.halt_reg = 0x1204c,
2498 	.halt_check = BRANCH_HALT_VOTED,
2499 	.clkr = {
2500 		.enable_reg = 0x1204c,
2501 		.enable_mask = BIT(0),
2502 		.hw.init = &(const struct clk_init_data) {
2503 			.name = "cam_cc_ife_1_shift_clk",
2504 			.parent_hws = (const struct clk_hw*[]) {
2505 				&cam_cc_xo_clk_src.clkr.hw,
2506 			},
2507 			.num_parents = 1,
2508 			.flags = CLK_SET_RATE_PARENT,
2509 			.ops = &clk_branch2_ops,
2510 		},
2511 	},
2512 };
2513 
2514 static struct clk_branch cam_cc_ife_2_clk = {
2515 	.halt_reg = 0x12080,
2516 	.halt_check = BRANCH_HALT,
2517 	.clkr = {
2518 		.enable_reg = 0x12080,
2519 		.enable_mask = BIT(0),
2520 		.hw.init = &(const struct clk_init_data) {
2521 			.name = "cam_cc_ife_2_clk",
2522 			.parent_hws = (const struct clk_hw*[]) {
2523 				&cam_cc_ife_2_clk_src.clkr.hw,
2524 			},
2525 			.num_parents = 1,
2526 			.flags = CLK_SET_RATE_PARENT,
2527 			.ops = &clk_branch2_ops,
2528 		},
2529 	},
2530 };
2531 
2532 static struct clk_branch cam_cc_ife_2_fast_ahb_clk = {
2533 	.halt_reg = 0x12098,
2534 	.halt_check = BRANCH_HALT,
2535 	.clkr = {
2536 		.enable_reg = 0x12098,
2537 		.enable_mask = BIT(0),
2538 		.hw.init = &(const struct clk_init_data) {
2539 			.name = "cam_cc_ife_2_fast_ahb_clk",
2540 			.parent_hws = (const struct clk_hw*[]) {
2541 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2542 			},
2543 			.num_parents = 1,
2544 			.flags = CLK_SET_RATE_PARENT,
2545 			.ops = &clk_branch2_ops,
2546 		},
2547 	},
2548 };
2549 
2550 static struct clk_branch cam_cc_ife_2_shift_clk = {
2551 	.halt_reg = 0x1209c,
2552 	.halt_check = BRANCH_HALT_VOTED,
2553 	.clkr = {
2554 		.enable_reg = 0x1209c,
2555 		.enable_mask = BIT(0),
2556 		.hw.init = &(const struct clk_init_data) {
2557 			.name = "cam_cc_ife_2_shift_clk",
2558 			.parent_hws = (const struct clk_hw*[]) {
2559 				&cam_cc_xo_clk_src.clkr.hw,
2560 			},
2561 			.num_parents = 1,
2562 			.flags = CLK_SET_RATE_PARENT,
2563 			.ops = &clk_branch2_ops,
2564 		},
2565 	},
2566 };
2567 
2568 static struct clk_branch cam_cc_ife_lite_ahb_clk = {
2569 	.halt_reg = 0x13050,
2570 	.halt_check = BRANCH_HALT,
2571 	.clkr = {
2572 		.enable_reg = 0x13050,
2573 		.enable_mask = BIT(0),
2574 		.hw.init = &(const struct clk_init_data) {
2575 			.name = "cam_cc_ife_lite_ahb_clk",
2576 			.parent_hws = (const struct clk_hw*[]) {
2577 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2578 			},
2579 			.num_parents = 1,
2580 			.flags = CLK_SET_RATE_PARENT,
2581 			.ops = &clk_branch2_ops,
2582 		},
2583 	},
2584 };
2585 
2586 static struct clk_branch cam_cc_ife_lite_clk = {
2587 	.halt_reg = 0x13018,
2588 	.halt_check = BRANCH_HALT,
2589 	.clkr = {
2590 		.enable_reg = 0x13018,
2591 		.enable_mask = BIT(0),
2592 		.hw.init = &(const struct clk_init_data) {
2593 			.name = "cam_cc_ife_lite_clk",
2594 			.parent_hws = (const struct clk_hw*[]) {
2595 				&cam_cc_ife_lite_clk_src.clkr.hw,
2596 			},
2597 			.num_parents = 1,
2598 			.flags = CLK_SET_RATE_PARENT,
2599 			.ops = &clk_branch2_ops,
2600 		},
2601 	},
2602 };
2603 
2604 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
2605 	.halt_reg = 0x1304c,
2606 	.halt_check = BRANCH_HALT,
2607 	.clkr = {
2608 		.enable_reg = 0x1304c,
2609 		.enable_mask = BIT(0),
2610 		.hw.init = &(const struct clk_init_data) {
2611 			.name = "cam_cc_ife_lite_cphy_rx_clk",
2612 			.parent_hws = (const struct clk_hw*[]) {
2613 				&cam_cc_cphy_rx_clk_src.clkr.hw,
2614 			},
2615 			.num_parents = 1,
2616 			.flags = CLK_SET_RATE_PARENT,
2617 			.ops = &clk_branch2_ops,
2618 		},
2619 	},
2620 };
2621 
2622 static struct clk_branch cam_cc_ife_lite_csid_clk = {
2623 	.halt_reg = 0x13040,
2624 	.halt_check = BRANCH_HALT,
2625 	.clkr = {
2626 		.enable_reg = 0x13040,
2627 		.enable_mask = BIT(0),
2628 		.hw.init = &(const struct clk_init_data) {
2629 			.name = "cam_cc_ife_lite_csid_clk",
2630 			.parent_hws = (const struct clk_hw*[]) {
2631 				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
2632 			},
2633 			.num_parents = 1,
2634 			.flags = CLK_SET_RATE_PARENT,
2635 			.ops = &clk_branch2_ops,
2636 		},
2637 	},
2638 };
2639 
2640 static struct clk_branch cam_cc_ipe_nps_ahb_clk = {
2641 	.halt_reg = 0x100d0,
2642 	.halt_check = BRANCH_HALT,
2643 	.clkr = {
2644 		.enable_reg = 0x100d0,
2645 		.enable_mask = BIT(0),
2646 		.hw.init = &(const struct clk_init_data) {
2647 			.name = "cam_cc_ipe_nps_ahb_clk",
2648 			.parent_hws = (const struct clk_hw*[]) {
2649 				&cam_cc_slow_ahb_clk_src.clkr.hw,
2650 			},
2651 			.num_parents = 1,
2652 			.flags = CLK_SET_RATE_PARENT,
2653 			.ops = &clk_branch2_ops,
2654 		},
2655 	},
2656 };
2657 
2658 static struct clk_branch cam_cc_ipe_nps_clk = {
2659 	.halt_reg = 0x100ac,
2660 	.halt_check = BRANCH_HALT,
2661 	.clkr = {
2662 		.enable_reg = 0x100ac,
2663 		.enable_mask = BIT(0),
2664 		.hw.init = &(const struct clk_init_data) {
2665 			.name = "cam_cc_ipe_nps_clk",
2666 			.parent_hws = (const struct clk_hw*[]) {
2667 				&cam_cc_ipe_nps_clk_src.clkr.hw,
2668 			},
2669 			.num_parents = 1,
2670 			.flags = CLK_SET_RATE_PARENT,
2671 			.ops = &clk_branch2_ops,
2672 		},
2673 	},
2674 };
2675 
2676 static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = {
2677 	.halt_reg = 0x100d4,
2678 	.halt_check = BRANCH_HALT,
2679 	.clkr = {
2680 		.enable_reg = 0x100d4,
2681 		.enable_mask = BIT(0),
2682 		.hw.init = &(const struct clk_init_data) {
2683 			.name = "cam_cc_ipe_nps_fast_ahb_clk",
2684 			.parent_hws = (const struct clk_hw*[]) {
2685 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2686 			},
2687 			.num_parents = 1,
2688 			.flags = CLK_SET_RATE_PARENT,
2689 			.ops = &clk_branch2_ops,
2690 		},
2691 	},
2692 };
2693 
2694 static struct clk_branch cam_cc_ipe_pps_clk = {
2695 	.halt_reg = 0x100bc,
2696 	.halt_check = BRANCH_HALT,
2697 	.clkr = {
2698 		.enable_reg = 0x100bc,
2699 		.enable_mask = BIT(0),
2700 		.hw.init = &(const struct clk_init_data) {
2701 			.name = "cam_cc_ipe_pps_clk",
2702 			.parent_hws = (const struct clk_hw*[]) {
2703 				&cam_cc_ipe_nps_clk_src.clkr.hw,
2704 			},
2705 			.num_parents = 1,
2706 			.flags = CLK_SET_RATE_PARENT,
2707 			.ops = &clk_branch2_ops,
2708 		},
2709 	},
2710 };
2711 
2712 static struct clk_branch cam_cc_ipe_pps_fast_ahb_clk = {
2713 	.halt_reg = 0x100d8,
2714 	.halt_check = BRANCH_HALT,
2715 	.clkr = {
2716 		.enable_reg = 0x100d8,
2717 		.enable_mask = BIT(0),
2718 		.hw.init = &(const struct clk_init_data) {
2719 			.name = "cam_cc_ipe_pps_fast_ahb_clk",
2720 			.parent_hws = (const struct clk_hw*[]) {
2721 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2722 			},
2723 			.num_parents = 1,
2724 			.flags = CLK_SET_RATE_PARENT,
2725 			.ops = &clk_branch2_ops,
2726 		},
2727 	},
2728 };
2729 
2730 static struct clk_branch cam_cc_ipe_shift_clk = {
2731 	.halt_reg = 0x100dc,
2732 	.halt_check = BRANCH_HALT_VOTED,
2733 	.clkr = {
2734 		.enable_reg = 0x100dc,
2735 		.enable_mask = BIT(0),
2736 		.hw.init = &(const struct clk_init_data) {
2737 			.name = "cam_cc_ipe_shift_clk",
2738 			.parent_hws = (const struct clk_hw*[]) {
2739 				&cam_cc_xo_clk_src.clkr.hw,
2740 			},
2741 			.num_parents = 1,
2742 			.flags = CLK_SET_RATE_PARENT,
2743 			.ops = &clk_branch2_ops,
2744 		},
2745 	},
2746 };
2747 
2748 static struct clk_branch cam_cc_jpeg_1_clk = {
2749 	.halt_reg = 0x1318c,
2750 	.halt_check = BRANCH_HALT,
2751 	.clkr = {
2752 		.enable_reg = 0x1318c,
2753 		.enable_mask = BIT(0),
2754 		.hw.init = &(const struct clk_init_data) {
2755 			.name = "cam_cc_jpeg_1_clk",
2756 			.parent_hws = (const struct clk_hw*[]) {
2757 				&cam_cc_jpeg_clk_src.clkr.hw,
2758 			},
2759 			.num_parents = 1,
2760 			.flags = CLK_SET_RATE_PARENT,
2761 			.ops = &clk_branch2_ops,
2762 		},
2763 	},
2764 };
2765 
2766 static struct clk_branch cam_cc_jpeg_clk = {
2767 	.halt_reg = 0x13180,
2768 	.halt_check = BRANCH_HALT,
2769 	.clkr = {
2770 		.enable_reg = 0x13180,
2771 		.enable_mask = BIT(0),
2772 		.hw.init = &(const struct clk_init_data) {
2773 			.name = "cam_cc_jpeg_clk",
2774 			.parent_hws = (const struct clk_hw*[]) {
2775 				&cam_cc_jpeg_clk_src.clkr.hw,
2776 			},
2777 			.num_parents = 1,
2778 			.flags = CLK_SET_RATE_PARENT,
2779 			.ops = &clk_branch2_ops,
2780 		},
2781 	},
2782 };
2783 
2784 static struct clk_branch cam_cc_mclk0_clk = {
2785 	.halt_reg = 0x15018,
2786 	.halt_check = BRANCH_HALT,
2787 	.clkr = {
2788 		.enable_reg = 0x15018,
2789 		.enable_mask = BIT(0),
2790 		.hw.init = &(const struct clk_init_data) {
2791 			.name = "cam_cc_mclk0_clk",
2792 			.parent_hws = (const struct clk_hw*[]) {
2793 				&cam_cc_mclk0_clk_src.clkr.hw,
2794 			},
2795 			.num_parents = 1,
2796 			.flags = CLK_SET_RATE_PARENT,
2797 			.ops = &clk_branch2_ops,
2798 		},
2799 	},
2800 };
2801 
2802 static struct clk_branch cam_cc_mclk1_clk = {
2803 	.halt_reg = 0x15034,
2804 	.halt_check = BRANCH_HALT,
2805 	.clkr = {
2806 		.enable_reg = 0x15034,
2807 		.enable_mask = BIT(0),
2808 		.hw.init = &(const struct clk_init_data) {
2809 			.name = "cam_cc_mclk1_clk",
2810 			.parent_hws = (const struct clk_hw*[]) {
2811 				&cam_cc_mclk1_clk_src.clkr.hw,
2812 			},
2813 			.num_parents = 1,
2814 			.flags = CLK_SET_RATE_PARENT,
2815 			.ops = &clk_branch2_ops,
2816 		},
2817 	},
2818 };
2819 
2820 static struct clk_branch cam_cc_mclk2_clk = {
2821 	.halt_reg = 0x15050,
2822 	.halt_check = BRANCH_HALT,
2823 	.clkr = {
2824 		.enable_reg = 0x15050,
2825 		.enable_mask = BIT(0),
2826 		.hw.init = &(const struct clk_init_data) {
2827 			.name = "cam_cc_mclk2_clk",
2828 			.parent_hws = (const struct clk_hw*[]) {
2829 				&cam_cc_mclk2_clk_src.clkr.hw,
2830 			},
2831 			.num_parents = 1,
2832 			.flags = CLK_SET_RATE_PARENT,
2833 			.ops = &clk_branch2_ops,
2834 		},
2835 	},
2836 };
2837 
2838 static struct clk_branch cam_cc_mclk3_clk = {
2839 	.halt_reg = 0x1506c,
2840 	.halt_check = BRANCH_HALT,
2841 	.clkr = {
2842 		.enable_reg = 0x1506c,
2843 		.enable_mask = BIT(0),
2844 		.hw.init = &(const struct clk_init_data) {
2845 			.name = "cam_cc_mclk3_clk",
2846 			.parent_hws = (const struct clk_hw*[]) {
2847 				&cam_cc_mclk3_clk_src.clkr.hw,
2848 			},
2849 			.num_parents = 1,
2850 			.flags = CLK_SET_RATE_PARENT,
2851 			.ops = &clk_branch2_ops,
2852 		},
2853 	},
2854 };
2855 
2856 static struct clk_branch cam_cc_mclk4_clk = {
2857 	.halt_reg = 0x15088,
2858 	.halt_check = BRANCH_HALT,
2859 	.clkr = {
2860 		.enable_reg = 0x15088,
2861 		.enable_mask = BIT(0),
2862 		.hw.init = &(const struct clk_init_data) {
2863 			.name = "cam_cc_mclk4_clk",
2864 			.parent_hws = (const struct clk_hw*[]) {
2865 				&cam_cc_mclk4_clk_src.clkr.hw,
2866 			},
2867 			.num_parents = 1,
2868 			.flags = CLK_SET_RATE_PARENT,
2869 			.ops = &clk_branch2_ops,
2870 		},
2871 	},
2872 };
2873 
2874 static struct clk_branch cam_cc_mclk5_clk = {
2875 	.halt_reg = 0x150a4,
2876 	.halt_check = BRANCH_HALT,
2877 	.clkr = {
2878 		.enable_reg = 0x150a4,
2879 		.enable_mask = BIT(0),
2880 		.hw.init = &(const struct clk_init_data) {
2881 			.name = "cam_cc_mclk5_clk",
2882 			.parent_hws = (const struct clk_hw*[]) {
2883 				&cam_cc_mclk5_clk_src.clkr.hw,
2884 			},
2885 			.num_parents = 1,
2886 			.flags = CLK_SET_RATE_PARENT,
2887 			.ops = &clk_branch2_ops,
2888 		},
2889 	},
2890 };
2891 
2892 static struct clk_branch cam_cc_mclk6_clk = {
2893 	.halt_reg = 0x150c0,
2894 	.halt_check = BRANCH_HALT,
2895 	.clkr = {
2896 		.enable_reg = 0x150c0,
2897 		.enable_mask = BIT(0),
2898 		.hw.init = &(const struct clk_init_data) {
2899 			.name = "cam_cc_mclk6_clk",
2900 			.parent_hws = (const struct clk_hw*[]) {
2901 				&cam_cc_mclk6_clk_src.clkr.hw,
2902 			},
2903 			.num_parents = 1,
2904 			.flags = CLK_SET_RATE_PARENT,
2905 			.ops = &clk_branch2_ops,
2906 		},
2907 	},
2908 };
2909 
2910 static struct clk_branch cam_cc_mclk7_clk = {
2911 	.halt_reg = 0x150dc,
2912 	.halt_check = BRANCH_HALT,
2913 	.clkr = {
2914 		.enable_reg = 0x150dc,
2915 		.enable_mask = BIT(0),
2916 		.hw.init = &(const struct clk_init_data) {
2917 			.name = "cam_cc_mclk7_clk",
2918 			.parent_hws = (const struct clk_hw*[]) {
2919 				&cam_cc_mclk7_clk_src.clkr.hw,
2920 			},
2921 			.num_parents = 1,
2922 			.flags = CLK_SET_RATE_PARENT,
2923 			.ops = &clk_branch2_ops,
2924 		},
2925 	},
2926 };
2927 
2928 static struct clk_branch cam_cc_qdss_debug_clk = {
2929 	.halt_reg = 0x132b4,
2930 	.halt_check = BRANCH_HALT,
2931 	.clkr = {
2932 		.enable_reg = 0x132b4,
2933 		.enable_mask = BIT(0),
2934 		.hw.init = &(const struct clk_init_data) {
2935 			.name = "cam_cc_qdss_debug_clk",
2936 			.parent_hws = (const struct clk_hw*[]) {
2937 				&cam_cc_qdss_debug_clk_src.clkr.hw,
2938 			},
2939 			.num_parents = 1,
2940 			.flags = CLK_SET_RATE_PARENT,
2941 			.ops = &clk_branch2_ops,
2942 		},
2943 	},
2944 };
2945 
2946 static struct clk_branch cam_cc_qdss_debug_xo_clk = {
2947 	.halt_reg = 0x132b8,
2948 	.halt_check = BRANCH_HALT,
2949 	.clkr = {
2950 		.enable_reg = 0x132b8,
2951 		.enable_mask = BIT(0),
2952 		.hw.init = &(const struct clk_init_data) {
2953 			.name = "cam_cc_qdss_debug_xo_clk",
2954 			.parent_hws = (const struct clk_hw*[]) {
2955 				&cam_cc_xo_clk_src.clkr.hw,
2956 			},
2957 			.num_parents = 1,
2958 			.flags = CLK_SET_RATE_PARENT,
2959 			.ops = &clk_branch2_ops,
2960 		},
2961 	},
2962 };
2963 
2964 static struct clk_branch cam_cc_sbi_clk = {
2965 	.halt_reg = 0x100f8,
2966 	.halt_check = BRANCH_HALT,
2967 	.clkr = {
2968 		.enable_reg = 0x100f8,
2969 		.enable_mask = BIT(0),
2970 		.hw.init = &(const struct clk_init_data) {
2971 			.name = "cam_cc_sbi_clk",
2972 			.parent_hws = (const struct clk_hw*[]) {
2973 				&cam_cc_ife_0_clk_src.clkr.hw,
2974 			},
2975 			.num_parents = 1,
2976 			.flags = CLK_SET_RATE_PARENT,
2977 			.ops = &clk_branch2_ops,
2978 		},
2979 	},
2980 };
2981 
2982 static struct clk_branch cam_cc_sbi_fast_ahb_clk = {
2983 	.halt_reg = 0x10108,
2984 	.halt_check = BRANCH_HALT,
2985 	.clkr = {
2986 		.enable_reg = 0x10108,
2987 		.enable_mask = BIT(0),
2988 		.hw.init = &(const struct clk_init_data) {
2989 			.name = "cam_cc_sbi_fast_ahb_clk",
2990 			.parent_hws = (const struct clk_hw*[]) {
2991 				&cam_cc_fast_ahb_clk_src.clkr.hw,
2992 			},
2993 			.num_parents = 1,
2994 			.flags = CLK_SET_RATE_PARENT,
2995 			.ops = &clk_branch2_ops,
2996 		},
2997 	},
2998 };
2999 
3000 static struct clk_branch cam_cc_sbi_shift_clk = {
3001 	.halt_reg = 0x1010c,
3002 	.halt_check = BRANCH_HALT_VOTED,
3003 	.clkr = {
3004 		.enable_reg = 0x1010c,
3005 		.enable_mask = BIT(0),
3006 		.hw.init = &(const struct clk_init_data) {
3007 			.name = "cam_cc_sbi_shift_clk",
3008 			.parent_hws = (const struct clk_hw*[]) {
3009 				&cam_cc_xo_clk_src.clkr.hw,
3010 			},
3011 			.num_parents = 1,
3012 			.flags = CLK_SET_RATE_PARENT,
3013 			.ops = &clk_branch2_ops,
3014 		},
3015 	},
3016 };
3017 
3018 static struct clk_branch cam_cc_sfe_0_clk = {
3019 	.halt_reg = 0x13084,
3020 	.halt_check = BRANCH_HALT,
3021 	.clkr = {
3022 		.enable_reg = 0x13084,
3023 		.enable_mask = BIT(0),
3024 		.hw.init = &(const struct clk_init_data) {
3025 			.name = "cam_cc_sfe_0_clk",
3026 			.parent_hws = (const struct clk_hw*[]) {
3027 				&cam_cc_sfe_0_clk_src.clkr.hw,
3028 			},
3029 			.num_parents = 1,
3030 			.flags = CLK_SET_RATE_PARENT,
3031 			.ops = &clk_branch2_ops,
3032 		},
3033 	},
3034 };
3035 
3036 static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = {
3037 	.halt_reg = 0x1309c,
3038 	.halt_check = BRANCH_HALT,
3039 	.clkr = {
3040 		.enable_reg = 0x1309c,
3041 		.enable_mask = BIT(0),
3042 		.hw.init = &(const struct clk_init_data) {
3043 			.name = "cam_cc_sfe_0_fast_ahb_clk",
3044 			.parent_hws = (const struct clk_hw*[]) {
3045 				&cam_cc_fast_ahb_clk_src.clkr.hw,
3046 			},
3047 			.num_parents = 1,
3048 			.flags = CLK_SET_RATE_PARENT,
3049 			.ops = &clk_branch2_ops,
3050 		},
3051 	},
3052 };
3053 
3054 static struct clk_branch cam_cc_sfe_0_shift_clk = {
3055 	.halt_reg = 0x130a0,
3056 	.halt_check = BRANCH_HALT_VOTED,
3057 	.clkr = {
3058 		.enable_reg = 0x130a0,
3059 		.enable_mask = BIT(0),
3060 		.hw.init = &(const struct clk_init_data) {
3061 			.name = "cam_cc_sfe_0_shift_clk",
3062 			.parent_hws = (const struct clk_hw*[]) {
3063 				&cam_cc_xo_clk_src.clkr.hw,
3064 			},
3065 			.num_parents = 1,
3066 			.flags = CLK_SET_RATE_PARENT,
3067 			.ops = &clk_branch2_ops,
3068 		},
3069 	},
3070 };
3071 
3072 static struct clk_branch cam_cc_sfe_1_clk = {
3073 	.halt_reg = 0x130d4,
3074 	.halt_check = BRANCH_HALT,
3075 	.clkr = {
3076 		.enable_reg = 0x130d4,
3077 		.enable_mask = BIT(0),
3078 		.hw.init = &(const struct clk_init_data) {
3079 			.name = "cam_cc_sfe_1_clk",
3080 			.parent_hws = (const struct clk_hw*[]) {
3081 				&cam_cc_sfe_1_clk_src.clkr.hw,
3082 			},
3083 			.num_parents = 1,
3084 			.flags = CLK_SET_RATE_PARENT,
3085 			.ops = &clk_branch2_ops,
3086 		},
3087 	},
3088 };
3089 
3090 static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = {
3091 	.halt_reg = 0x130ec,
3092 	.halt_check = BRANCH_HALT,
3093 	.clkr = {
3094 		.enable_reg = 0x130ec,
3095 		.enable_mask = BIT(0),
3096 		.hw.init = &(const struct clk_init_data) {
3097 			.name = "cam_cc_sfe_1_fast_ahb_clk",
3098 			.parent_hws = (const struct clk_hw*[]) {
3099 				&cam_cc_fast_ahb_clk_src.clkr.hw,
3100 			},
3101 			.num_parents = 1,
3102 			.flags = CLK_SET_RATE_PARENT,
3103 			.ops = &clk_branch2_ops,
3104 		},
3105 	},
3106 };
3107 
3108 static struct clk_branch cam_cc_sfe_1_shift_clk = {
3109 	.halt_reg = 0x130f0,
3110 	.halt_check = BRANCH_HALT_VOTED,
3111 	.clkr = {
3112 		.enable_reg = 0x130f0,
3113 		.enable_mask = BIT(0),
3114 		.hw.init = &(const struct clk_init_data) {
3115 			.name = "cam_cc_sfe_1_shift_clk",
3116 			.parent_hws = (const struct clk_hw*[]) {
3117 				&cam_cc_xo_clk_src.clkr.hw,
3118 			},
3119 			.num_parents = 1,
3120 			.flags = CLK_SET_RATE_PARENT,
3121 			.ops = &clk_branch2_ops,
3122 		},
3123 	},
3124 };
3125 
3126 static struct clk_branch cam_cc_sfe_2_clk = {
3127 	.halt_reg = 0x13124,
3128 	.halt_check = BRANCH_HALT,
3129 	.clkr = {
3130 		.enable_reg = 0x13124,
3131 		.enable_mask = BIT(0),
3132 		.hw.init = &(const struct clk_init_data) {
3133 			.name = "cam_cc_sfe_2_clk",
3134 			.parent_hws = (const struct clk_hw*[]) {
3135 				&cam_cc_sfe_2_clk_src.clkr.hw,
3136 			},
3137 			.num_parents = 1,
3138 			.flags = CLK_SET_RATE_PARENT,
3139 			.ops = &clk_branch2_ops,
3140 		},
3141 	},
3142 };
3143 
3144 static struct clk_branch cam_cc_sfe_2_fast_ahb_clk = {
3145 	.halt_reg = 0x1313c,
3146 	.halt_check = BRANCH_HALT,
3147 	.clkr = {
3148 		.enable_reg = 0x1313c,
3149 		.enable_mask = BIT(0),
3150 		.hw.init = &(const struct clk_init_data) {
3151 			.name = "cam_cc_sfe_2_fast_ahb_clk",
3152 			.parent_hws = (const struct clk_hw*[]) {
3153 				&cam_cc_fast_ahb_clk_src.clkr.hw,
3154 			},
3155 			.num_parents = 1,
3156 			.flags = CLK_SET_RATE_PARENT,
3157 			.ops = &clk_branch2_ops,
3158 		},
3159 	},
3160 };
3161 
3162 static struct clk_branch cam_cc_sfe_2_shift_clk = {
3163 	.halt_reg = 0x13140,
3164 	.halt_check = BRANCH_HALT_VOTED,
3165 	.clkr = {
3166 		.enable_reg = 0x13140,
3167 		.enable_mask = BIT(0),
3168 		.hw.init = &(const struct clk_init_data) {
3169 			.name = "cam_cc_sfe_2_shift_clk",
3170 			.parent_hws = (const struct clk_hw*[]) {
3171 				&cam_cc_xo_clk_src.clkr.hw,
3172 			},
3173 			.num_parents = 1,
3174 			.flags = CLK_SET_RATE_PARENT,
3175 			.ops = &clk_branch2_ops,
3176 		},
3177 	},
3178 };
3179 
3180 static struct clk_branch cam_cc_titan_top_shift_clk = {
3181 	.halt_reg = 0x1330c,
3182 	.halt_check = BRANCH_HALT_VOTED,
3183 	.clkr = {
3184 		.enable_reg = 0x1330c,
3185 		.enable_mask = BIT(0),
3186 		.hw.init = &(const struct clk_init_data) {
3187 			.name = "cam_cc_titan_top_shift_clk",
3188 			.parent_hws = (const struct clk_hw*[]) {
3189 				&cam_cc_xo_clk_src.clkr.hw,
3190 			},
3191 			.num_parents = 1,
3192 			.flags = CLK_SET_RATE_PARENT,
3193 			.ops = &clk_branch2_ops,
3194 		},
3195 	},
3196 };
3197 
3198 static struct gdsc cam_cc_titan_top_gdsc = {
3199 	.gdscr = 0x132bc,
3200 	.en_rest_wait_val = 0x2,
3201 	.en_few_wait_val = 0x2,
3202 	.clk_dis_wait_val = 0xf,
3203 	.pd = {
3204 		.name = "cam_cc_titan_top_gdsc",
3205 	},
3206 	.pwrsts = PWRSTS_OFF_ON,
3207 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3208 };
3209 
3210 static struct gdsc cam_cc_bps_gdsc = {
3211 	.gdscr = 0x10004,
3212 	.en_rest_wait_val = 0x2,
3213 	.en_few_wait_val = 0x2,
3214 	.clk_dis_wait_val = 0xf,
3215 	.pd = {
3216 		.name = "cam_cc_bps_gdsc",
3217 	},
3218 	.pwrsts = PWRSTS_OFF_ON,
3219 	.parent = &cam_cc_titan_top_gdsc.pd,
3220 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3221 };
3222 
3223 static struct gdsc cam_cc_ife_0_gdsc = {
3224 	.gdscr = 0x11004,
3225 	.en_rest_wait_val = 0x2,
3226 	.en_few_wait_val = 0x2,
3227 	.clk_dis_wait_val = 0xf,
3228 	.pd = {
3229 		.name = "cam_cc_ife_0_gdsc",
3230 	},
3231 	.pwrsts = PWRSTS_OFF_ON,
3232 	.parent = &cam_cc_titan_top_gdsc.pd,
3233 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3234 };
3235 
3236 static struct gdsc cam_cc_ife_1_gdsc = {
3237 	.gdscr = 0x12004,
3238 	.en_rest_wait_val = 0x2,
3239 	.en_few_wait_val = 0x2,
3240 	.clk_dis_wait_val = 0xf,
3241 	.pd = {
3242 		.name = "cam_cc_ife_1_gdsc",
3243 	},
3244 	.pwrsts = PWRSTS_OFF_ON,
3245 	.parent = &cam_cc_titan_top_gdsc.pd,
3246 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3247 };
3248 
3249 static struct gdsc cam_cc_ife_2_gdsc = {
3250 	.gdscr = 0x12054,
3251 	.en_rest_wait_val = 0x2,
3252 	.en_few_wait_val = 0x2,
3253 	.clk_dis_wait_val = 0xf,
3254 	.pd = {
3255 		.name = "cam_cc_ife_2_gdsc",
3256 	},
3257 	.pwrsts = PWRSTS_OFF_ON,
3258 	.parent = &cam_cc_titan_top_gdsc.pd,
3259 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3260 };
3261 
3262 static struct gdsc cam_cc_ipe_0_gdsc = {
3263 	.gdscr = 0x10080,
3264 	.en_rest_wait_val = 0x2,
3265 	.en_few_wait_val = 0x2,
3266 	.clk_dis_wait_val = 0xf,
3267 	.pd = {
3268 		.name = "cam_cc_ipe_0_gdsc",
3269 	},
3270 	.pwrsts = PWRSTS_OFF_ON,
3271 	.parent = &cam_cc_titan_top_gdsc.pd,
3272 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3273 };
3274 
3275 static struct gdsc cam_cc_sbi_gdsc = {
3276 	.gdscr = 0x100e4,
3277 	.en_rest_wait_val = 0x2,
3278 	.en_few_wait_val = 0x2,
3279 	.clk_dis_wait_val = 0xf,
3280 	.pd = {
3281 		.name = "cam_cc_sbi_gdsc",
3282 	},
3283 	.pwrsts = PWRSTS_OFF_ON,
3284 	.parent = &cam_cc_titan_top_gdsc.pd,
3285 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3286 };
3287 
3288 static struct gdsc cam_cc_sfe_0_gdsc = {
3289 	.gdscr = 0x13058,
3290 	.en_rest_wait_val = 0x2,
3291 	.en_few_wait_val = 0x2,
3292 	.clk_dis_wait_val = 0xf,
3293 	.pd = {
3294 		.name = "cam_cc_sfe_0_gdsc",
3295 	},
3296 	.pwrsts = PWRSTS_OFF_ON,
3297 	.parent = &cam_cc_titan_top_gdsc.pd,
3298 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3299 };
3300 
3301 static struct gdsc cam_cc_sfe_1_gdsc = {
3302 	.gdscr = 0x130a8,
3303 	.en_rest_wait_val = 0x2,
3304 	.en_few_wait_val = 0x2,
3305 	.clk_dis_wait_val = 0xf,
3306 	.pd = {
3307 		.name = "cam_cc_sfe_1_gdsc",
3308 	},
3309 	.pwrsts = PWRSTS_OFF_ON,
3310 	.parent = &cam_cc_titan_top_gdsc.pd,
3311 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3312 };
3313 
3314 static struct gdsc cam_cc_sfe_2_gdsc = {
3315 	.gdscr = 0x130f8,
3316 	.en_rest_wait_val = 0x2,
3317 	.en_few_wait_val = 0x2,
3318 	.clk_dis_wait_val = 0xf,
3319 	.pd = {
3320 		.name = "cam_cc_sfe_2_gdsc",
3321 	},
3322 	.pwrsts = PWRSTS_OFF_ON,
3323 	.parent = &cam_cc_titan_top_gdsc.pd,
3324 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3325 };
3326 
3327 static struct clk_regmap *cam_cc_sm8650_clocks[] = {
3328 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
3329 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
3330 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
3331 	[CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
3332 	[CAM_CC_BPS_SHIFT_CLK] = &cam_cc_bps_shift_clk.clkr,
3333 	[CAM_CC_CAMNOC_AXI_NRT_CLK] = &cam_cc_camnoc_axi_nrt_clk.clkr,
3334 	[CAM_CC_CAMNOC_AXI_RT_CLK] = &cam_cc_camnoc_axi_rt_clk.clkr,
3335 	[CAM_CC_CAMNOC_AXI_RT_CLK_SRC] = &cam_cc_camnoc_axi_rt_clk_src.clkr,
3336 	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
3337 	[CAM_CC_CAMNOC_XO_CLK] = &cam_cc_camnoc_xo_clk.clkr,
3338 	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
3339 	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
3340 	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
3341 	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
3342 	[CAM_CC_CCI_2_CLK] = &cam_cc_cci_2_clk.clkr,
3343 	[CAM_CC_CCI_2_CLK_SRC] = &cam_cc_cci_2_clk_src.clkr,
3344 	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
3345 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
3346 	[CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr,
3347 	[CAM_CC_CPAS_CRE_CLK] = &cam_cc_cpas_cre_clk.clkr,
3348 	[CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr,
3349 	[CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr,
3350 	[CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr,
3351 	[CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr,
3352 	[CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr,
3353 	[CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr,
3354 	[CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr,
3355 	[CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr,
3356 	[CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr,
3357 	[CAM_CC_CPAS_SFE_2_CLK] = &cam_cc_cpas_sfe_2_clk.clkr,
3358 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
3359 	[CAM_CC_CRE_AHB_CLK] = &cam_cc_cre_ahb_clk.clkr,
3360 	[CAM_CC_CRE_CLK] = &cam_cc_cre_clk.clkr,
3361 	[CAM_CC_CRE_CLK_SRC] = &cam_cc_cre_clk_src.clkr,
3362 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
3363 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
3364 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
3365 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
3366 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
3367 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
3368 	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
3369 	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
3370 	[CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
3371 	[CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
3372 	[CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
3373 	[CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
3374 	[CAM_CC_CSI6PHYTIMER_CLK] = &cam_cc_csi6phytimer_clk.clkr,
3375 	[CAM_CC_CSI6PHYTIMER_CLK_SRC] = &cam_cc_csi6phytimer_clk_src.clkr,
3376 	[CAM_CC_CSI7PHYTIMER_CLK] = &cam_cc_csi7phytimer_clk.clkr,
3377 	[CAM_CC_CSI7PHYTIMER_CLK_SRC] = &cam_cc_csi7phytimer_clk_src.clkr,
3378 	[CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr,
3379 	[CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr,
3380 	[CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr,
3381 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
3382 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
3383 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
3384 	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
3385 	[CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
3386 	[CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
3387 	[CAM_CC_CSIPHY6_CLK] = &cam_cc_csiphy6_clk.clkr,
3388 	[CAM_CC_CSIPHY7_CLK] = &cam_cc_csiphy7_clk.clkr,
3389 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
3390 	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
3391 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
3392 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
3393 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
3394 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
3395 	[CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr,
3396 	[CAM_CC_IFE_0_SHIFT_CLK] = &cam_cc_ife_0_shift_clk.clkr,
3397 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
3398 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
3399 	[CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr,
3400 	[CAM_CC_IFE_1_SHIFT_CLK] = &cam_cc_ife_1_shift_clk.clkr,
3401 	[CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
3402 	[CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
3403 	[CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr,
3404 	[CAM_CC_IFE_2_SHIFT_CLK] = &cam_cc_ife_2_shift_clk.clkr,
3405 	[CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
3406 	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
3407 	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
3408 	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
3409 	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
3410 	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
3411 	[CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr,
3412 	[CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr,
3413 	[CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr,
3414 	[CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr,
3415 	[CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr,
3416 	[CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr,
3417 	[CAM_CC_IPE_SHIFT_CLK] = &cam_cc_ipe_shift_clk.clkr,
3418 	[CAM_CC_JPEG_1_CLK] = &cam_cc_jpeg_1_clk.clkr,
3419 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
3420 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
3421 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
3422 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
3423 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
3424 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
3425 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
3426 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
3427 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
3428 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
3429 	[CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
3430 	[CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
3431 	[CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
3432 	[CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
3433 	[CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
3434 	[CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
3435 	[CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
3436 	[CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
3437 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
3438 	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
3439 	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
3440 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
3441 	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
3442 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
3443 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
3444 	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
3445 	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
3446 	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
3447 	[CAM_CC_PLL5] = &cam_cc_pll5.clkr,
3448 	[CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
3449 	[CAM_CC_PLL6] = &cam_cc_pll6.clkr,
3450 	[CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
3451 	[CAM_CC_PLL7] = &cam_cc_pll7.clkr,
3452 	[CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr,
3453 	[CAM_CC_PLL8] = &cam_cc_pll8.clkr,
3454 	[CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
3455 	[CAM_CC_PLL9] = &cam_cc_pll9.clkr,
3456 	[CAM_CC_PLL9_OUT_EVEN] = &cam_cc_pll9_out_even.clkr,
3457 	[CAM_CC_PLL9_OUT_ODD] = &cam_cc_pll9_out_odd.clkr,
3458 	[CAM_CC_PLL10] = &cam_cc_pll10.clkr,
3459 	[CAM_CC_PLL10_OUT_EVEN] = &cam_cc_pll10_out_even.clkr,
3460 	[CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
3461 	[CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
3462 	[CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
3463 	[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
3464 	[CAM_CC_SBI_FAST_AHB_CLK] = &cam_cc_sbi_fast_ahb_clk.clkr,
3465 	[CAM_CC_SBI_SHIFT_CLK] = &cam_cc_sbi_shift_clk.clkr,
3466 	[CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
3467 	[CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
3468 	[CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,
3469 	[CAM_CC_SFE_0_SHIFT_CLK] = &cam_cc_sfe_0_shift_clk.clkr,
3470 	[CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
3471 	[CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
3472 	[CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
3473 	[CAM_CC_SFE_1_SHIFT_CLK] = &cam_cc_sfe_1_shift_clk.clkr,
3474 	[CAM_CC_SFE_2_CLK] = &cam_cc_sfe_2_clk.clkr,
3475 	[CAM_CC_SFE_2_CLK_SRC] = &cam_cc_sfe_2_clk_src.clkr,
3476 	[CAM_CC_SFE_2_FAST_AHB_CLK] = &cam_cc_sfe_2_fast_ahb_clk.clkr,
3477 	[CAM_CC_SFE_2_SHIFT_CLK] = &cam_cc_sfe_2_shift_clk.clkr,
3478 	[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
3479 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
3480 	[CAM_CC_TITAN_TOP_SHIFT_CLK] = &cam_cc_titan_top_shift_clk.clkr,
3481 	[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
3482 };
3483 
3484 static struct gdsc *cam_cc_sm8650_gdscs[] = {
3485 	[CAM_CC_TITAN_TOP_GDSC] = &cam_cc_titan_top_gdsc,
3486 	[CAM_CC_BPS_GDSC] = &cam_cc_bps_gdsc,
3487 	[CAM_CC_IFE_0_GDSC] = &cam_cc_ife_0_gdsc,
3488 	[CAM_CC_IFE_1_GDSC] = &cam_cc_ife_1_gdsc,
3489 	[CAM_CC_IFE_2_GDSC] = &cam_cc_ife_2_gdsc,
3490 	[CAM_CC_IPE_0_GDSC] = &cam_cc_ipe_0_gdsc,
3491 	[CAM_CC_SBI_GDSC] = &cam_cc_sbi_gdsc,
3492 	[CAM_CC_SFE_0_GDSC] = &cam_cc_sfe_0_gdsc,
3493 	[CAM_CC_SFE_1_GDSC] = &cam_cc_sfe_1_gdsc,
3494 	[CAM_CC_SFE_2_GDSC] = &cam_cc_sfe_2_gdsc,
3495 };
3496 
3497 static const struct qcom_reset_map cam_cc_sm8650_resets[] = {
3498 	[CAM_CC_BPS_BCR] = { 0x10000 },
3499 	[CAM_CC_DRV_BCR] = { 0x13310 },
3500 	[CAM_CC_ICP_BCR] = { 0x131a0 },
3501 	[CAM_CC_IFE_0_BCR] = { 0x11000 },
3502 	[CAM_CC_IFE_1_BCR] = { 0x12000 },
3503 	[CAM_CC_IFE_2_BCR] = { 0x12050 },
3504 	[CAM_CC_IPE_0_BCR] = { 0x1007c },
3505 	[CAM_CC_QDSS_DEBUG_BCR] = { 0x13298 },
3506 	[CAM_CC_SBI_BCR] = { 0x100e0 },
3507 	[CAM_CC_SFE_0_BCR] = { 0x13054 },
3508 	[CAM_CC_SFE_1_BCR] = { 0x130a4 },
3509 	[CAM_CC_SFE_2_BCR] = { 0x130f4 },
3510 };
3511 
3512 static const struct regmap_config cam_cc_sm8650_regmap_config = {
3513 	.reg_bits = 32,
3514 	.reg_stride = 4,
3515 	.val_bits = 32,
3516 	.max_register = 0x1603c,
3517 	.fast_io = true,
3518 };
3519 
3520 static struct qcom_cc_desc cam_cc_sm8650_desc = {
3521 	.config = &cam_cc_sm8650_regmap_config,
3522 	.clks = cam_cc_sm8650_clocks,
3523 	.num_clks = ARRAY_SIZE(cam_cc_sm8650_clocks),
3524 	.resets = cam_cc_sm8650_resets,
3525 	.num_resets = ARRAY_SIZE(cam_cc_sm8650_resets),
3526 	.gdscs = cam_cc_sm8650_gdscs,
3527 	.num_gdscs = ARRAY_SIZE(cam_cc_sm8650_gdscs),
3528 };
3529 
3530 static const struct of_device_id cam_cc_sm8650_match_table[] = {
3531 	{ .compatible = "qcom,sm8650-camcc" },
3532 	{ }
3533 };
3534 MODULE_DEVICE_TABLE(of, cam_cc_sm8650_match_table);
3535 
cam_cc_sm8650_probe(struct platform_device * pdev)3536 static int cam_cc_sm8650_probe(struct platform_device *pdev)
3537 {
3538 	struct regmap *regmap;
3539 	int ret;
3540 
3541 	ret = devm_pm_runtime_enable(&pdev->dev);
3542 	if (ret)
3543 		return ret;
3544 
3545 	ret = pm_runtime_resume_and_get(&pdev->dev);
3546 	if (ret)
3547 		return ret;
3548 
3549 	regmap = qcom_cc_map(pdev, &cam_cc_sm8650_desc);
3550 	if (IS_ERR(regmap)) {
3551 		pm_runtime_put(&pdev->dev);
3552 		return PTR_ERR(regmap);
3553 	}
3554 
3555 	clk_lucid_ole_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
3556 	clk_lucid_ole_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
3557 	clk_rivian_evo_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
3558 	clk_lucid_ole_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
3559 	clk_lucid_ole_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
3560 	clk_lucid_ole_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config);
3561 	clk_lucid_ole_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config);
3562 	clk_lucid_ole_pll_configure(&cam_cc_pll7, regmap, &cam_cc_pll7_config);
3563 	clk_lucid_ole_pll_configure(&cam_cc_pll8, regmap, &cam_cc_pll8_config);
3564 	clk_lucid_ole_pll_configure(&cam_cc_pll9, regmap, &cam_cc_pll9_config);
3565 	clk_lucid_ole_pll_configure(&cam_cc_pll10, regmap, &cam_cc_pll10_config);
3566 
3567 	/* Keep clocks always enabled */
3568 	qcom_branch_set_clk_en(regmap, 0x13318); /* CAM_CC_DRV_AHB_CLK */
3569 	qcom_branch_set_clk_en(regmap, 0x13314); /* CAM_CC_DRV_XO_CLK */
3570 	qcom_branch_set_clk_en(regmap, 0x132ec); /* CAM_CC_GDSC_CLK */
3571 	qcom_branch_set_clk_en(regmap, 0x13308); /* CAM_CC_SLEEP_CLK */
3572 
3573 	ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sm8650_desc, regmap);
3574 
3575 	pm_runtime_put(&pdev->dev);
3576 
3577 	return ret;
3578 }
3579 
3580 static struct platform_driver cam_cc_sm8650_driver = {
3581 	.probe = cam_cc_sm8650_probe,
3582 	.driver = {
3583 		.name = "camcc-sm8650",
3584 		.of_match_table = cam_cc_sm8650_match_table,
3585 	},
3586 };
3587 
3588 module_platform_driver(cam_cc_sm8650_driver);
3589 
3590 MODULE_DESCRIPTION("QTI CAMCC SM8650 Driver");
3591 MODULE_LICENSE("GPL");
3592