xref: /linux/drivers/clk/qcom/camcc-sm8150.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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/err.h>
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/platform_device.h>
11 #include <linux/of.h>
12 #include <linux/regmap.h>
13 #include <linux/pm_runtime.h>
14 
15 #include <dt-bindings/clock/qcom,sm8150-camcc.h>
16 
17 #include "clk-alpha-pll.h"
18 #include "clk-branch.h"
19 #include "clk-rcg.h"
20 #include "clk-regmap.h"
21 #include "common.h"
22 #include "gdsc.h"
23 #include "reset.h"
24 
25 enum {
26 	DT_BI_TCXO,
27 	DT_IFACE,
28 };
29 
30 enum {
31 	P_BI_TCXO,
32 	P_CAM_CC_PLL0_OUT_EVEN,
33 	P_CAM_CC_PLL0_OUT_MAIN,
34 	P_CAM_CC_PLL0_OUT_ODD,
35 	P_CAM_CC_PLL1_OUT_EVEN,
36 	P_CAM_CC_PLL2_OUT_EARLY,
37 	P_CAM_CC_PLL2_OUT_MAIN,
38 	P_CAM_CC_PLL3_OUT_EVEN,
39 	P_CAM_CC_PLL4_OUT_EVEN,
40 };
41 
42 static const struct pll_vco regera_vco[] = {
43 	{ 600000000, 3300000000, 0 },
44 };
45 
46 static const struct pll_vco trion_vco[] = {
47 	{ 249600000, 2000000000, 0 },
48 };
49 
50 static const struct alpha_pll_config cam_cc_pll0_config = {
51 	.l = 0x3e,
52 	.alpha = 0x8000,
53 	.config_ctl_val = 0x20485699,
54 	.config_ctl_hi_val = 0x00002267,
55 	.config_ctl_hi1_val = 0x00000024,
56 	.test_ctl_val = 0x00000000,
57 	.test_ctl_hi_val = 0x00000000,
58 	.test_ctl_hi1_val = 0x00000020,
59 	.user_ctl_val = 0x00003100,
60 	.user_ctl_hi_val = 0x00000805,
61 	.user_ctl_hi1_val = 0x000000D0,
62 };
63 
64 static struct clk_alpha_pll cam_cc_pll0 = {
65 	.offset = 0x0,
66 	.vco_table = trion_vco,
67 	.num_vco = ARRAY_SIZE(trion_vco),
68 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
69 	.clkr = {
70 		.hw.init = &(const struct clk_init_data) {
71 			.name = "cam_cc_pll0",
72 			.parent_data = &(const struct clk_parent_data) {
73 				.index = DT_BI_TCXO,
74 			},
75 			.num_parents = 1,
76 			.ops = &clk_alpha_pll_trion_ops,
77 		},
78 	},
79 };
80 
81 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
82 	{ 0x1, 2 },
83 	{ }
84 };
85 
86 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
87 	.offset = 0x0,
88 	.post_div_shift = 8,
89 	.post_div_table = post_div_table_cam_cc_pll0_out_even,
90 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
91 	.width = 4,
92 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
93 	.clkr.hw.init = &(const struct clk_init_data) {
94 		.name = "cam_cc_pll0_out_even",
95 		.parent_hws = (const struct clk_hw*[]) {
96 			&cam_cc_pll0.clkr.hw,
97 		},
98 		.num_parents = 1,
99 		.flags = CLK_SET_RATE_PARENT,
100 		.ops = &clk_alpha_pll_postdiv_trion_ops,
101 	},
102 };
103 
104 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
105 	{ 0x3, 3 },
106 	{ }
107 };
108 
109 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
110 	.offset = 0x0,
111 	.post_div_shift = 12,
112 	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
113 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
114 	.width = 4,
115 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
116 	.clkr.hw.init = &(const struct clk_init_data) {
117 		.name = "cam_cc_pll0_out_odd",
118 		.parent_hws = (const struct clk_hw*[]) {
119 			&cam_cc_pll0.clkr.hw,
120 		},
121 		.num_parents = 1,
122 		.flags = CLK_SET_RATE_PARENT,
123 		.ops = &clk_alpha_pll_postdiv_trion_ops,
124 	},
125 };
126 
127 static const struct alpha_pll_config cam_cc_pll1_config = {
128 	.l = 0x1f,
129 	.alpha = 0x4000,
130 	.config_ctl_val = 0x20485699,
131 	.config_ctl_hi_val = 0x00002267,
132 	.config_ctl_hi1_val = 0x00000024,
133 	.test_ctl_val = 0x00000000,
134 	.test_ctl_hi_val = 0x00000000,
135 	.test_ctl_hi1_val = 0x00000020,
136 	.user_ctl_val = 0x00000100,
137 	.user_ctl_hi_val = 0x00000805,
138 	.user_ctl_hi1_val = 0x000000D0,
139 };
140 
141 static struct clk_alpha_pll cam_cc_pll1 = {
142 	.offset = 0x1000,
143 	.vco_table = trion_vco,
144 	.num_vco = ARRAY_SIZE(trion_vco),
145 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
146 	.clkr = {
147 		.hw.init = &(const struct clk_init_data) {
148 			.name = "cam_cc_pll1",
149 			.parent_data = &(const struct clk_parent_data) {
150 				.index = DT_BI_TCXO,
151 			},
152 			.num_parents = 1,
153 			.ops = &clk_alpha_pll_trion_ops,
154 		},
155 	},
156 };
157 
158 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
159 	{ 0x1, 2 },
160 	{ }
161 };
162 
163 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
164 	.offset = 0x1000,
165 	.post_div_shift = 8,
166 	.post_div_table = post_div_table_cam_cc_pll1_out_even,
167 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
168 	.width = 4,
169 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
170 	.clkr.hw.init = &(const struct clk_init_data) {
171 		.name = "cam_cc_pll1_out_even",
172 		.parent_hws = (const struct clk_hw*[]) {
173 			&cam_cc_pll1.clkr.hw,
174 		},
175 		.num_parents = 1,
176 		.flags = CLK_SET_RATE_PARENT,
177 		.ops = &clk_alpha_pll_postdiv_trion_ops,
178 	},
179 };
180 
181 static const struct alpha_pll_config cam_cc_pll2_config = {
182 	.l = 0x32,
183 	.alpha = 0x0,
184 	.config_ctl_val = 0x10000807,
185 	.config_ctl_hi_val = 0x00000011,
186 	.config_ctl_hi1_val = 0x04300142,
187 	.test_ctl_val = 0x04000400,
188 	.test_ctl_hi_val = 0x00004000,
189 	.test_ctl_hi1_val = 0x00000000,
190 	.user_ctl_val = 0x00000100,
191 	.user_ctl_hi_val = 0x00000000,
192 	.user_ctl_hi1_val = 0x00000000,
193 };
194 
195 static struct clk_alpha_pll cam_cc_pll2 = {
196 	.offset = 0x2000,
197 	.vco_table = regera_vco,
198 	.num_vco = ARRAY_SIZE(regera_vco),
199 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_REGERA],
200 	.clkr = {
201 		.hw.init = &(const struct clk_init_data) {
202 			.name = "cam_cc_pll2",
203 			.parent_data = &(const struct clk_parent_data) {
204 				.index = DT_BI_TCXO,
205 			},
206 			.num_parents = 1,
207 			.ops = &clk_alpha_pll_regera_ops,
208 		},
209 	},
210 };
211 
212 static const struct clk_div_table post_div_table_cam_cc_pll2_out_main[] = {
213 	{ 0x1, 2 },
214 	{ }
215 };
216 
217 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main = {
218 	.offset = 0x2000,
219 	.post_div_shift = 8,
220 	.post_div_table = post_div_table_cam_cc_pll2_out_main,
221 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main),
222 	.width = 2,
223 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_REGERA],
224 	.clkr.hw.init = &(const struct clk_init_data) {
225 		.name = "cam_cc_pll2_out_main",
226 		.parent_hws = (const struct clk_hw*[]) {
227 			&cam_cc_pll2.clkr.hw,
228 		},
229 		.num_parents = 1,
230 		.flags = CLK_SET_RATE_PARENT,
231 		.ops = &clk_alpha_pll_postdiv_trion_ops,
232 	},
233 };
234 
235 static const struct alpha_pll_config cam_cc_pll3_config = {
236 	.l = 0x29,
237 	.alpha = 0xaaaa,
238 	.config_ctl_val = 0x20485699,
239 	.config_ctl_hi_val = 0x00002267,
240 	.config_ctl_hi1_val = 0x00000024,
241 	.test_ctl_val = 0x00000000,
242 	.test_ctl_hi_val = 0x00000000,
243 	.test_ctl_hi1_val = 0x00000020,
244 	.user_ctl_val = 0x00000100,
245 	.user_ctl_hi_val = 0x00000805,
246 	.user_ctl_hi1_val = 0x000000D0,
247 };
248 
249 static struct clk_alpha_pll cam_cc_pll3 = {
250 	.offset = 0x3000,
251 	.vco_table = trion_vco,
252 	.num_vco = ARRAY_SIZE(trion_vco),
253 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
254 	.clkr = {
255 		.hw.init = &(const struct clk_init_data) {
256 			.name = "cam_cc_pll3",
257 			.parent_data = &(const struct clk_parent_data) {
258 				.index = DT_BI_TCXO,
259 			},
260 			.num_parents = 1,
261 			.ops = &clk_alpha_pll_trion_ops,
262 		},
263 	},
264 };
265 
266 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
267 	{ 0x1, 2 },
268 	{ }
269 };
270 
271 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
272 	.offset = 0x3000,
273 	.post_div_shift = 8,
274 	.post_div_table = post_div_table_cam_cc_pll3_out_even,
275 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
276 	.width = 4,
277 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
278 	.clkr.hw.init = &(const struct clk_init_data) {
279 		.name = "cam_cc_pll3_out_even",
280 		.parent_hws = (const struct clk_hw*[]) {
281 			&cam_cc_pll3.clkr.hw,
282 		},
283 		.num_parents = 1,
284 		.flags = CLK_SET_RATE_PARENT,
285 		.ops = &clk_alpha_pll_postdiv_trion_ops,
286 	},
287 };
288 
289 static const struct alpha_pll_config cam_cc_pll4_config = {
290 	.l = 0x29,
291 	.alpha = 0xaaaa,
292 	.config_ctl_val = 0x20485699,
293 	.config_ctl_hi_val = 0x00002267,
294 	.config_ctl_hi1_val = 0x00000024,
295 	.test_ctl_val = 0x00000000,
296 	.test_ctl_hi_val = 0x00000000,
297 	.test_ctl_hi1_val = 0x00000020,
298 	.user_ctl_val = 0x00000100,
299 	.user_ctl_hi_val = 0x00000805,
300 	.user_ctl_hi1_val = 0x000000D0,
301 };
302 
303 static struct clk_alpha_pll cam_cc_pll4 = {
304 	.offset = 0x4000,
305 	.vco_table = trion_vco,
306 	.num_vco = ARRAY_SIZE(trion_vco),
307 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
308 	.clkr = {
309 		.hw.init = &(const struct clk_init_data) {
310 			.name = "cam_cc_pll4",
311 			.parent_data = &(const struct clk_parent_data) {
312 				.index = DT_BI_TCXO,
313 			},
314 			.num_parents = 1,
315 			.ops = &clk_alpha_pll_trion_ops,
316 		},
317 	},
318 };
319 
320 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
321 	{ 0x1, 2 },
322 	{ }
323 };
324 
325 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
326 	.offset = 0x4000,
327 	.post_div_shift = 8,
328 	.post_div_table = post_div_table_cam_cc_pll4_out_even,
329 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
330 	.width = 4,
331 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
332 	.clkr.hw.init = &(const struct clk_init_data) {
333 		.name = "cam_cc_pll4_out_even",
334 		.parent_hws = (const struct clk_hw*[]) {
335 			&cam_cc_pll4.clkr.hw,
336 		},
337 		.num_parents = 1,
338 		.flags = CLK_SET_RATE_PARENT,
339 		.ops = &clk_alpha_pll_postdiv_trion_ops,
340 	},
341 };
342 
343 static const struct parent_map cam_cc_parent_map_0[] = {
344 	{ P_BI_TCXO, 0 },
345 	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
346 	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
347 	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
348 	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
349 };
350 
351 static const struct clk_parent_data cam_cc_parent_data_0[] = {
352 	{ .index = DT_BI_TCXO },
353 	{ .hw = &cam_cc_pll0.clkr.hw },
354 	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
355 	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
356 	{ .hw = &cam_cc_pll2_out_main.clkr.hw },
357 };
358 
359 static const struct parent_map cam_cc_parent_map_1[] = {
360 	{ P_BI_TCXO, 0 },
361 	{ P_CAM_CC_PLL2_OUT_EARLY, 5 },
362 };
363 
364 static const struct clk_parent_data cam_cc_parent_data_1[] = {
365 	{ .index = DT_BI_TCXO },
366 	{ .hw = &cam_cc_pll2.clkr.hw },
367 };
368 
369 static const struct parent_map cam_cc_parent_map_2[] = {
370 	{ P_BI_TCXO, 0 },
371 	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
372 };
373 
374 static const struct clk_parent_data cam_cc_parent_data_2[] = {
375 	{ .index = DT_BI_TCXO },
376 	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
377 };
378 
379 static const struct parent_map cam_cc_parent_map_3[] = {
380 	{ P_BI_TCXO, 0 },
381 	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
382 };
383 
384 static const struct clk_parent_data cam_cc_parent_data_3[] = {
385 	{ .index = DT_BI_TCXO },
386 	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
387 };
388 
389 static const struct parent_map cam_cc_parent_map_4[] = {
390 	{ P_BI_TCXO, 0 },
391 	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
392 };
393 
394 static const struct clk_parent_data cam_cc_parent_data_4[] = {
395 	{ .index = DT_BI_TCXO },
396 	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
397 };
398 
399 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
400 	F(19200000, P_BI_TCXO, 1, 0, 0),
401 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
402 	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
403 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
404 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
405 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
406 	{ }
407 };
408 
409 static struct clk_rcg2 cam_cc_bps_clk_src = {
410 	.cmd_rcgr = 0x7010,
411 	.mnd_width = 0,
412 	.hid_width = 5,
413 	.parent_map = cam_cc_parent_map_0,
414 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
415 	.clkr.hw.init = &(const struct clk_init_data) {
416 		.name = "cam_cc_bps_clk_src",
417 		.parent_data = cam_cc_parent_data_0,
418 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
419 		.flags = CLK_SET_RATE_PARENT,
420 		.ops = &clk_rcg2_shared_ops,
421 	},
422 };
423 
424 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
425 	F(19200000, P_BI_TCXO, 1, 0, 0),
426 	F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
427 	F(266666667, P_CAM_CC_PLL0_OUT_ODD, 1.5, 0, 0),
428 	F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
429 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
430 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
431 	{ }
432 };
433 
434 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
435 	.cmd_rcgr = 0xc170,
436 	.mnd_width = 0,
437 	.hid_width = 5,
438 	.parent_map = cam_cc_parent_map_0,
439 	.freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
440 	.clkr.hw.init = &(const struct clk_init_data) {
441 		.name = "cam_cc_camnoc_axi_clk_src",
442 		.parent_data = cam_cc_parent_data_0,
443 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
444 		.flags = CLK_SET_RATE_PARENT,
445 		.ops = &clk_rcg2_shared_ops,
446 	},
447 };
448 
449 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
450 	F(19200000, P_BI_TCXO, 1, 0, 0),
451 	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
452 	{ }
453 };
454 
455 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
456 	.cmd_rcgr = 0xc108,
457 	.mnd_width = 8,
458 	.hid_width = 5,
459 	.parent_map = cam_cc_parent_map_0,
460 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
461 	.clkr.hw.init = &(const struct clk_init_data) {
462 		.name = "cam_cc_cci_0_clk_src",
463 		.parent_data = cam_cc_parent_data_0,
464 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
465 		.flags = CLK_SET_RATE_PARENT,
466 		.ops = &clk_rcg2_shared_ops,
467 	},
468 };
469 
470 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
471 	.cmd_rcgr = 0xc124,
472 	.mnd_width = 8,
473 	.hid_width = 5,
474 	.parent_map = cam_cc_parent_map_0,
475 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
476 	.clkr.hw.init = &(const struct clk_init_data) {
477 		.name = "cam_cc_cci_1_clk_src",
478 		.parent_data = cam_cc_parent_data_0,
479 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
480 		.flags = CLK_SET_RATE_PARENT,
481 		.ops = &clk_rcg2_shared_ops,
482 	},
483 };
484 
485 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
486 	F(19200000, P_BI_TCXO, 1, 0, 0),
487 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
488 	{ }
489 };
490 
491 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
492 	.cmd_rcgr = 0xa064,
493 	.mnd_width = 0,
494 	.hid_width = 5,
495 	.parent_map = cam_cc_parent_map_0,
496 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
497 	.clkr.hw.init = &(const struct clk_init_data) {
498 		.name = "cam_cc_cphy_rx_clk_src",
499 		.parent_data = cam_cc_parent_data_0,
500 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
501 		.flags = CLK_SET_RATE_PARENT,
502 		.ops = &clk_rcg2_shared_ops,
503 	},
504 };
505 
506 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
507 	F(19200000, P_BI_TCXO, 1, 0, 0),
508 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
509 	{ }
510 };
511 
512 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
513 	.cmd_rcgr = 0x6004,
514 	.mnd_width = 0,
515 	.hid_width = 5,
516 	.parent_map = cam_cc_parent_map_0,
517 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
518 	.clkr.hw.init = &(const struct clk_init_data) {
519 		.name = "cam_cc_csi0phytimer_clk_src",
520 		.parent_data = cam_cc_parent_data_0,
521 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
522 		.flags = CLK_SET_RATE_PARENT,
523 		.ops = &clk_rcg2_shared_ops,
524 	},
525 };
526 
527 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
528 	.cmd_rcgr = 0x6028,
529 	.mnd_width = 0,
530 	.hid_width = 5,
531 	.parent_map = cam_cc_parent_map_0,
532 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
533 	.clkr.hw.init = &(const struct clk_init_data) {
534 		.name = "cam_cc_csi1phytimer_clk_src",
535 		.parent_data = cam_cc_parent_data_0,
536 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
537 		.flags = CLK_SET_RATE_PARENT,
538 		.ops = &clk_rcg2_shared_ops,
539 	},
540 };
541 
542 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
543 	.cmd_rcgr = 0x604c,
544 	.mnd_width = 0,
545 	.hid_width = 5,
546 	.parent_map = cam_cc_parent_map_0,
547 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
548 	.clkr.hw.init = &(const struct clk_init_data) {
549 		.name = "cam_cc_csi2phytimer_clk_src",
550 		.parent_data = cam_cc_parent_data_0,
551 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
552 		.flags = CLK_SET_RATE_PARENT,
553 		.ops = &clk_rcg2_shared_ops,
554 	},
555 };
556 
557 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
558 	.cmd_rcgr = 0x6070,
559 	.mnd_width = 0,
560 	.hid_width = 5,
561 	.parent_map = cam_cc_parent_map_0,
562 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
563 	.clkr.hw.init = &(const struct clk_init_data) {
564 		.name = "cam_cc_csi3phytimer_clk_src",
565 		.parent_data = cam_cc_parent_data_0,
566 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
567 		.flags = CLK_SET_RATE_PARENT,
568 		.ops = &clk_rcg2_shared_ops,
569 	},
570 };
571 
572 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
573 	F(19200000, P_BI_TCXO, 1, 0, 0),
574 	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
575 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
576 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
577 	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
578 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
579 	{ }
580 };
581 
582 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
583 	.cmd_rcgr = 0x703c,
584 	.mnd_width = 0,
585 	.hid_width = 5,
586 	.parent_map = cam_cc_parent_map_0,
587 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
588 	.clkr.hw.init = &(const struct clk_init_data) {
589 		.name = "cam_cc_fast_ahb_clk_src",
590 		.parent_data = cam_cc_parent_data_0,
591 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
592 		.flags = CLK_SET_RATE_PARENT,
593 		.ops = &clk_rcg2_shared_ops,
594 	},
595 };
596 
597 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
598 	F(19200000, P_BI_TCXO, 1, 0, 0),
599 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
600 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
601 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
602 	{ }
603 };
604 
605 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
606 	.cmd_rcgr = 0xc0e0,
607 	.mnd_width = 0,
608 	.hid_width = 5,
609 	.parent_map = cam_cc_parent_map_0,
610 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
611 	.clkr.hw.init = &(const struct clk_init_data) {
612 		.name = "cam_cc_fd_core_clk_src",
613 		.parent_data = cam_cc_parent_data_0,
614 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
615 		.flags = CLK_SET_RATE_PARENT,
616 		.ops = &clk_rcg2_shared_ops,
617 	},
618 };
619 
620 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
621 	F(19200000, P_BI_TCXO, 1, 0, 0),
622 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
623 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
624 	{ }
625 };
626 
627 static struct clk_rcg2 cam_cc_icp_clk_src = {
628 	.cmd_rcgr = 0xc0b8,
629 	.mnd_width = 0,
630 	.hid_width = 5,
631 	.parent_map = cam_cc_parent_map_0,
632 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
633 	.clkr.hw.init = &(const struct clk_init_data) {
634 		.name = "cam_cc_icp_clk_src",
635 		.parent_data = cam_cc_parent_data_0,
636 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
637 		.flags = CLK_SET_RATE_PARENT,
638 		.ops = &clk_rcg2_shared_ops,
639 	},
640 };
641 
642 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
643 	F(19200000, P_BI_TCXO, 1, 0, 0),
644 	F(400000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
645 	F(558000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
646 	F(637000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
647 	F(847000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
648 	F(950000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
649 	{ }
650 };
651 
652 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
653 	.cmd_rcgr = 0xa010,
654 	.mnd_width = 0,
655 	.hid_width = 5,
656 	.parent_map = cam_cc_parent_map_2,
657 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
658 	.clkr.hw.init = &(const struct clk_init_data) {
659 		.name = "cam_cc_ife_0_clk_src",
660 		.parent_data = cam_cc_parent_data_2,
661 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
662 		.flags = CLK_SET_RATE_PARENT,
663 		.ops = &clk_rcg2_shared_ops,
664 	},
665 };
666 
667 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
668 	F(19200000, P_BI_TCXO, 1, 0, 0),
669 	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
670 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
671 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
672 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
673 	{ }
674 };
675 
676 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
677 	.cmd_rcgr = 0xa03c,
678 	.mnd_width = 0,
679 	.hid_width = 5,
680 	.parent_map = cam_cc_parent_map_0,
681 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
682 	.clkr.hw.init = &(const struct clk_init_data) {
683 		.name = "cam_cc_ife_0_csid_clk_src",
684 		.parent_data = cam_cc_parent_data_0,
685 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
686 		.flags = CLK_SET_RATE_PARENT,
687 		.ops = &clk_rcg2_shared_ops,
688 	},
689 };
690 
691 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
692 	F(19200000, P_BI_TCXO, 1, 0, 0),
693 	F(400000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
694 	F(558000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
695 	F(637000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
696 	F(847000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
697 	F(950000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
698 	{ }
699 };
700 
701 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
702 	.cmd_rcgr = 0xb010,
703 	.mnd_width = 0,
704 	.hid_width = 5,
705 	.parent_map = cam_cc_parent_map_3,
706 	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
707 	.clkr.hw.init = &(const struct clk_init_data) {
708 		.name = "cam_cc_ife_1_clk_src",
709 		.parent_data = cam_cc_parent_data_3,
710 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
711 		.flags = CLK_SET_RATE_PARENT,
712 		.ops = &clk_rcg2_shared_ops,
713 	},
714 };
715 
716 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
717 	.cmd_rcgr = 0xb034,
718 	.mnd_width = 0,
719 	.hid_width = 5,
720 	.parent_map = cam_cc_parent_map_0,
721 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
722 	.clkr.hw.init = &(const struct clk_init_data) {
723 		.name = "cam_cc_ife_1_csid_clk_src",
724 		.parent_data = cam_cc_parent_data_0,
725 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
726 		.flags = CLK_SET_RATE_PARENT,
727 		.ops = &clk_rcg2_shared_ops,
728 	},
729 };
730 
731 static const struct freq_tbl ftbl_cam_cc_ife_lite_0_clk_src[] = {
732 	F(19200000, P_BI_TCXO, 1, 0, 0),
733 	F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
734 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
735 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
736 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
737 	{ }
738 };
739 
740 static struct clk_rcg2 cam_cc_ife_lite_0_clk_src = {
741 	.cmd_rcgr = 0xc004,
742 	.mnd_width = 0,
743 	.hid_width = 5,
744 	.parent_map = cam_cc_parent_map_0,
745 	.freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
746 	.clkr.hw.init = &(const struct clk_init_data) {
747 		.name = "cam_cc_ife_lite_0_clk_src",
748 		.parent_data = cam_cc_parent_data_0,
749 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
750 		.flags = CLK_SET_RATE_PARENT,
751 		.ops = &clk_rcg2_shared_ops,
752 	},
753 };
754 
755 static struct clk_rcg2 cam_cc_ife_lite_0_csid_clk_src = {
756 	.cmd_rcgr = 0xc020,
757 	.mnd_width = 0,
758 	.hid_width = 5,
759 	.parent_map = cam_cc_parent_map_0,
760 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
761 	.clkr.hw.init = &(const struct clk_init_data) {
762 		.name = "cam_cc_ife_lite_0_csid_clk_src",
763 		.parent_data = cam_cc_parent_data_0,
764 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
765 		.flags = CLK_SET_RATE_PARENT,
766 		.ops = &clk_rcg2_shared_ops,
767 	},
768 };
769 
770 static struct clk_rcg2 cam_cc_ife_lite_1_clk_src = {
771 	.cmd_rcgr = 0xc048,
772 	.mnd_width = 0,
773 	.hid_width = 5,
774 	.parent_map = cam_cc_parent_map_0,
775 	.freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
776 	.clkr.hw.init = &(const struct clk_init_data) {
777 		.name = "cam_cc_ife_lite_1_clk_src",
778 		.parent_data = cam_cc_parent_data_0,
779 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
780 		.flags = CLK_SET_RATE_PARENT,
781 		.ops = &clk_rcg2_shared_ops,
782 	},
783 };
784 
785 static struct clk_rcg2 cam_cc_ife_lite_1_csid_clk_src = {
786 	.cmd_rcgr = 0xc064,
787 	.mnd_width = 0,
788 	.hid_width = 5,
789 	.parent_map = cam_cc_parent_map_0,
790 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
791 	.clkr.hw.init = &(const struct clk_init_data) {
792 		.name = "cam_cc_ife_lite_1_csid_clk_src",
793 		.parent_data = cam_cc_parent_data_0,
794 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
795 		.flags = CLK_SET_RATE_PARENT,
796 		.ops = &clk_rcg2_shared_ops,
797 	},
798 };
799 
800 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
801 	F(19200000, P_BI_TCXO, 1, 0, 0),
802 	F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
803 	F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
804 	F(520000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
805 	F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
806 	{ }
807 };
808 
809 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
810 	.cmd_rcgr = 0x8010,
811 	.mnd_width = 0,
812 	.hid_width = 5,
813 	.parent_map = cam_cc_parent_map_4,
814 	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
815 	.clkr.hw.init = &(const struct clk_init_data) {
816 		.name = "cam_cc_ipe_0_clk_src",
817 		.parent_data = cam_cc_parent_data_4,
818 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
819 		.flags = CLK_SET_RATE_PARENT,
820 		.ops = &clk_rcg2_shared_ops,
821 	},
822 };
823 
824 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
825 	.cmd_rcgr = 0xc08c,
826 	.mnd_width = 0,
827 	.hid_width = 5,
828 	.parent_map = cam_cc_parent_map_0,
829 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
830 	.clkr.hw.init = &(const struct clk_init_data) {
831 		.name = "cam_cc_jpeg_clk_src",
832 		.parent_data = cam_cc_parent_data_0,
833 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
834 		.flags = CLK_SET_RATE_PARENT,
835 		.ops = &clk_rcg2_shared_ops,
836 	},
837 };
838 
839 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
840 	F(19200000, P_BI_TCXO, 1, 0, 0),
841 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
842 	F(240000000, P_CAM_CC_PLL2_OUT_MAIN, 2, 0, 0),
843 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
844 	F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
845 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
846 	{ }
847 };
848 
849 static struct clk_rcg2 cam_cc_lrme_clk_src = {
850 	.cmd_rcgr = 0xc144,
851 	.mnd_width = 0,
852 	.hid_width = 5,
853 	.parent_map = cam_cc_parent_map_0,
854 	.freq_tbl = ftbl_cam_cc_lrme_clk_src,
855 	.clkr.hw.init = &(const struct clk_init_data) {
856 		.name = "cam_cc_lrme_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 const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
865 	F(12000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 8),
866 	F(19200000, P_BI_TCXO, 1, 0, 0),
867 	F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 4),
868 	F(68571429, P_CAM_CC_PLL2_OUT_EARLY, 14, 0, 0),
869 	{ }
870 };
871 
872 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
873 	.cmd_rcgr = 0x5004,
874 	.mnd_width = 8,
875 	.hid_width = 5,
876 	.parent_map = cam_cc_parent_map_1,
877 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
878 	.clkr.hw.init = &(const struct clk_init_data) {
879 		.name = "cam_cc_mclk0_clk_src",
880 		.parent_data = cam_cc_parent_data_1,
881 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
882 		.flags = CLK_SET_RATE_PARENT,
883 		.ops = &clk_rcg2_shared_ops,
884 	},
885 };
886 
887 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
888 	.cmd_rcgr = 0x5024,
889 	.mnd_width = 8,
890 	.hid_width = 5,
891 	.parent_map = cam_cc_parent_map_1,
892 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
893 	.clkr.hw.init = &(const struct clk_init_data) {
894 		.name = "cam_cc_mclk1_clk_src",
895 		.parent_data = cam_cc_parent_data_1,
896 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
897 		.flags = CLK_SET_RATE_PARENT,
898 		.ops = &clk_rcg2_shared_ops,
899 	},
900 };
901 
902 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
903 	.cmd_rcgr = 0x5044,
904 	.mnd_width = 8,
905 	.hid_width = 5,
906 	.parent_map = cam_cc_parent_map_1,
907 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
908 	.clkr.hw.init = &(const struct clk_init_data) {
909 		.name = "cam_cc_mclk2_clk_src",
910 		.parent_data = cam_cc_parent_data_1,
911 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
912 		.flags = CLK_SET_RATE_PARENT,
913 		.ops = &clk_rcg2_shared_ops,
914 	},
915 };
916 
917 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
918 	.cmd_rcgr = 0x5064,
919 	.mnd_width = 8,
920 	.hid_width = 5,
921 	.parent_map = cam_cc_parent_map_1,
922 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
923 	.clkr.hw.init = &(const struct clk_init_data) {
924 		.name = "cam_cc_mclk3_clk_src",
925 		.parent_data = cam_cc_parent_data_1,
926 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
927 		.flags = CLK_SET_RATE_PARENT,
928 		.ops = &clk_rcg2_shared_ops,
929 	},
930 };
931 
932 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
933 	F(19200000, P_BI_TCXO, 1, 0, 0),
934 	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
935 	{ }
936 };
937 
938 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
939 	.cmd_rcgr = 0x7058,
940 	.mnd_width = 8,
941 	.hid_width = 5,
942 	.parent_map = cam_cc_parent_map_0,
943 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
944 	.clkr.hw.init = &(const struct clk_init_data) {
945 		.name = "cam_cc_slow_ahb_clk_src",
946 		.parent_data = cam_cc_parent_data_0,
947 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
948 		.flags = CLK_SET_RATE_PARENT,
949 		.ops = &clk_rcg2_shared_ops,
950 	},
951 };
952 
953 static struct clk_branch cam_cc_bps_ahb_clk = {
954 	.halt_reg = 0x7070,
955 	.halt_check = BRANCH_HALT,
956 	.clkr = {
957 		.enable_reg = 0x7070,
958 		.enable_mask = BIT(0),
959 		.hw.init = &(const struct clk_init_data) {
960 			.name = "cam_cc_bps_ahb_clk",
961 			.parent_hws = (const struct clk_hw*[]) {
962 				&cam_cc_slow_ahb_clk_src.clkr.hw,
963 			},
964 			.num_parents = 1,
965 			.flags = CLK_SET_RATE_PARENT,
966 			.ops = &clk_branch2_ops,
967 		},
968 	},
969 };
970 
971 static struct clk_branch cam_cc_bps_areg_clk = {
972 	.halt_reg = 0x7054,
973 	.halt_check = BRANCH_HALT,
974 	.clkr = {
975 		.enable_reg = 0x7054,
976 		.enable_mask = BIT(0),
977 		.hw.init = &(const struct clk_init_data) {
978 			.name = "cam_cc_bps_areg_clk",
979 			.parent_hws = (const struct clk_hw*[]) {
980 				&cam_cc_fast_ahb_clk_src.clkr.hw,
981 			},
982 			.num_parents = 1,
983 			.flags = CLK_SET_RATE_PARENT,
984 			.ops = &clk_branch2_ops,
985 		},
986 	},
987 };
988 
989 static struct clk_branch cam_cc_bps_axi_clk = {
990 	.halt_reg = 0x7038,
991 	.halt_check = BRANCH_HALT,
992 	.clkr = {
993 		.enable_reg = 0x7038,
994 		.enable_mask = BIT(0),
995 		.hw.init = &(const struct clk_init_data) {
996 			.name = "cam_cc_bps_axi_clk",
997 			.parent_hws = (const struct clk_hw*[]) {
998 				&cam_cc_camnoc_axi_clk_src.clkr.hw,
999 			},
1000 			.num_parents = 1,
1001 			.flags = CLK_SET_RATE_PARENT,
1002 			.ops = &clk_branch2_ops,
1003 		},
1004 	},
1005 };
1006 
1007 static struct clk_branch cam_cc_bps_clk = {
1008 	.halt_reg = 0x7028,
1009 	.halt_check = BRANCH_HALT,
1010 	.clkr = {
1011 		.enable_reg = 0x7028,
1012 		.enable_mask = BIT(0),
1013 		.hw.init = &(const struct clk_init_data) {
1014 			.name = "cam_cc_bps_clk",
1015 			.parent_hws = (const struct clk_hw*[]) {
1016 				&cam_cc_bps_clk_src.clkr.hw,
1017 			},
1018 			.num_parents = 1,
1019 			.flags = CLK_SET_RATE_PARENT,
1020 			.ops = &clk_branch2_ops,
1021 		},
1022 	},
1023 };
1024 
1025 static struct clk_branch cam_cc_camnoc_axi_clk = {
1026 	.halt_reg = 0xc18c,
1027 	.halt_check = BRANCH_HALT,
1028 	.clkr = {
1029 		.enable_reg = 0xc18c,
1030 		.enable_mask = BIT(0),
1031 		.hw.init = &(const struct clk_init_data) {
1032 			.name = "cam_cc_camnoc_axi_clk",
1033 			.parent_hws = (const struct clk_hw*[]) {
1034 				&cam_cc_camnoc_axi_clk_src.clkr.hw,
1035 			},
1036 			.num_parents = 1,
1037 			.flags = CLK_SET_RATE_PARENT,
1038 			.ops = &clk_branch2_ops,
1039 		},
1040 	},
1041 };
1042 
1043 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1044 	.halt_reg = 0xc194,
1045 	.halt_check = BRANCH_HALT,
1046 	.clkr = {
1047 		.enable_reg = 0xc194,
1048 		.enable_mask = BIT(0),
1049 		.hw.init = &(const struct clk_init_data) {
1050 			.name = "cam_cc_camnoc_dcd_xo_clk",
1051 			.ops = &clk_branch2_ops,
1052 		},
1053 	},
1054 };
1055 
1056 static struct clk_branch cam_cc_cci_0_clk = {
1057 	.halt_reg = 0xc120,
1058 	.halt_check = BRANCH_HALT,
1059 	.clkr = {
1060 		.enable_reg = 0xc120,
1061 		.enable_mask = BIT(0),
1062 		.hw.init = &(const struct clk_init_data) {
1063 			.name = "cam_cc_cci_0_clk",
1064 			.parent_hws = (const struct clk_hw*[]) {
1065 				&cam_cc_cci_0_clk_src.clkr.hw,
1066 			},
1067 			.num_parents = 1,
1068 			.flags = CLK_SET_RATE_PARENT,
1069 			.ops = &clk_branch2_ops,
1070 		},
1071 	},
1072 };
1073 
1074 static struct clk_branch cam_cc_cci_1_clk = {
1075 	.halt_reg = 0xc13c,
1076 	.halt_check = BRANCH_HALT,
1077 	.clkr = {
1078 		.enable_reg = 0xc13c,
1079 		.enable_mask = BIT(0),
1080 		.hw.init = &(const struct clk_init_data) {
1081 			.name = "cam_cc_cci_1_clk",
1082 			.parent_hws = (const struct clk_hw*[]) {
1083 				&cam_cc_cci_1_clk_src.clkr.hw,
1084 			},
1085 			.num_parents = 1,
1086 			.flags = CLK_SET_RATE_PARENT,
1087 			.ops = &clk_branch2_ops,
1088 		},
1089 	},
1090 };
1091 
1092 static struct clk_branch cam_cc_core_ahb_clk = {
1093 	.halt_reg = 0xc1c8,
1094 	.halt_check = BRANCH_HALT_DELAY,
1095 	.clkr = {
1096 		.enable_reg = 0xc1c8,
1097 		.enable_mask = BIT(0),
1098 		.hw.init = &(const struct clk_init_data) {
1099 			.name = "cam_cc_core_ahb_clk",
1100 			.parent_hws = (const struct clk_hw*[]) {
1101 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1102 			},
1103 			.num_parents = 1,
1104 			.flags = CLK_SET_RATE_PARENT,
1105 			.ops = &clk_branch2_ops,
1106 		},
1107 	},
1108 };
1109 
1110 static struct clk_branch cam_cc_cpas_ahb_clk = {
1111 	.halt_reg = 0xc168,
1112 	.halt_check = BRANCH_HALT,
1113 	.clkr = {
1114 		.enable_reg = 0xc168,
1115 		.enable_mask = BIT(0),
1116 		.hw.init = &(const struct clk_init_data) {
1117 			.name = "cam_cc_cpas_ahb_clk",
1118 			.parent_hws = (const struct clk_hw*[]) {
1119 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1120 			},
1121 			.num_parents = 1,
1122 			.flags = CLK_SET_RATE_PARENT,
1123 			.ops = &clk_branch2_ops,
1124 		},
1125 	},
1126 };
1127 
1128 static struct clk_branch cam_cc_csi0phytimer_clk = {
1129 	.halt_reg = 0x601c,
1130 	.halt_check = BRANCH_HALT,
1131 	.clkr = {
1132 		.enable_reg = 0x601c,
1133 		.enable_mask = BIT(0),
1134 		.hw.init = &(const struct clk_init_data) {
1135 			.name = "cam_cc_csi0phytimer_clk",
1136 			.parent_hws = (const struct clk_hw*[]) {
1137 				&cam_cc_csi0phytimer_clk_src.clkr.hw,
1138 			},
1139 			.num_parents = 1,
1140 			.flags = CLK_SET_RATE_PARENT,
1141 			.ops = &clk_branch2_ops,
1142 		},
1143 	},
1144 };
1145 
1146 static struct clk_branch cam_cc_csi1phytimer_clk = {
1147 	.halt_reg = 0x6040,
1148 	.halt_check = BRANCH_HALT,
1149 	.clkr = {
1150 		.enable_reg = 0x6040,
1151 		.enable_mask = BIT(0),
1152 		.hw.init = &(const struct clk_init_data) {
1153 			.name = "cam_cc_csi1phytimer_clk",
1154 			.parent_hws = (const struct clk_hw*[]) {
1155 				&cam_cc_csi1phytimer_clk_src.clkr.hw,
1156 			},
1157 			.num_parents = 1,
1158 			.flags = CLK_SET_RATE_PARENT,
1159 			.ops = &clk_branch2_ops,
1160 		},
1161 	},
1162 };
1163 
1164 static struct clk_branch cam_cc_csi2phytimer_clk = {
1165 	.halt_reg = 0x6064,
1166 	.halt_check = BRANCH_HALT,
1167 	.clkr = {
1168 		.enable_reg = 0x6064,
1169 		.enable_mask = BIT(0),
1170 		.hw.init = &(const struct clk_init_data) {
1171 			.name = "cam_cc_csi2phytimer_clk",
1172 			.parent_hws = (const struct clk_hw*[]) {
1173 				&cam_cc_csi2phytimer_clk_src.clkr.hw,
1174 			},
1175 			.num_parents = 1,
1176 			.flags = CLK_SET_RATE_PARENT,
1177 			.ops = &clk_branch2_ops,
1178 		},
1179 	},
1180 };
1181 
1182 static struct clk_branch cam_cc_csi3phytimer_clk = {
1183 	.halt_reg = 0x6088,
1184 	.halt_check = BRANCH_HALT,
1185 	.clkr = {
1186 		.enable_reg = 0x6088,
1187 		.enable_mask = BIT(0),
1188 		.hw.init = &(const struct clk_init_data) {
1189 			.name = "cam_cc_csi3phytimer_clk",
1190 			.parent_hws = (const struct clk_hw*[]) {
1191 				&cam_cc_csi3phytimer_clk_src.clkr.hw,
1192 			},
1193 			.num_parents = 1,
1194 			.flags = CLK_SET_RATE_PARENT,
1195 			.ops = &clk_branch2_ops,
1196 		},
1197 	},
1198 };
1199 
1200 static struct clk_branch cam_cc_csiphy0_clk = {
1201 	.halt_reg = 0x6020,
1202 	.halt_check = BRANCH_HALT,
1203 	.clkr = {
1204 		.enable_reg = 0x6020,
1205 		.enable_mask = BIT(0),
1206 		.hw.init = &(const struct clk_init_data) {
1207 			.name = "cam_cc_csiphy0_clk",
1208 			.parent_hws = (const struct clk_hw*[]) {
1209 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1210 			},
1211 			.num_parents = 1,
1212 			.flags = CLK_SET_RATE_PARENT,
1213 			.ops = &clk_branch2_ops,
1214 		},
1215 	},
1216 };
1217 
1218 static struct clk_branch cam_cc_csiphy1_clk = {
1219 	.halt_reg = 0x6044,
1220 	.halt_check = BRANCH_HALT,
1221 	.clkr = {
1222 		.enable_reg = 0x6044,
1223 		.enable_mask = BIT(0),
1224 		.hw.init = &(const struct clk_init_data) {
1225 			.name = "cam_cc_csiphy1_clk",
1226 			.parent_hws = (const struct clk_hw*[]) {
1227 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1228 			},
1229 			.num_parents = 1,
1230 			.flags = CLK_SET_RATE_PARENT,
1231 			.ops = &clk_branch2_ops,
1232 		},
1233 	},
1234 };
1235 
1236 static struct clk_branch cam_cc_csiphy2_clk = {
1237 	.halt_reg = 0x6068,
1238 	.halt_check = BRANCH_HALT,
1239 	.clkr = {
1240 		.enable_reg = 0x6068,
1241 		.enable_mask = BIT(0),
1242 		.hw.init = &(const struct clk_init_data) {
1243 			.name = "cam_cc_csiphy2_clk",
1244 			.parent_hws = (const struct clk_hw*[]) {
1245 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1246 			},
1247 			.num_parents = 1,
1248 			.flags = CLK_SET_RATE_PARENT,
1249 			.ops = &clk_branch2_ops,
1250 		},
1251 	},
1252 };
1253 
1254 static struct clk_branch cam_cc_csiphy3_clk = {
1255 	.halt_reg = 0x608c,
1256 	.halt_check = BRANCH_HALT,
1257 	.clkr = {
1258 		.enable_reg = 0x608c,
1259 		.enable_mask = BIT(0),
1260 		.hw.init = &(const struct clk_init_data) {
1261 			.name = "cam_cc_csiphy3_clk",
1262 			.parent_hws = (const struct clk_hw*[]) {
1263 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1264 			},
1265 			.num_parents = 1,
1266 			.flags = CLK_SET_RATE_PARENT,
1267 			.ops = &clk_branch2_ops,
1268 		},
1269 	},
1270 };
1271 
1272 static struct clk_branch cam_cc_fd_core_clk = {
1273 	.halt_reg = 0xc0f8,
1274 	.halt_check = BRANCH_HALT,
1275 	.clkr = {
1276 		.enable_reg = 0xc0f8,
1277 		.enable_mask = BIT(0),
1278 		.hw.init = &(const struct clk_init_data) {
1279 			.name = "cam_cc_fd_core_clk",
1280 			.parent_hws = (const struct clk_hw*[]) {
1281 				&cam_cc_fd_core_clk_src.clkr.hw,
1282 			},
1283 			.num_parents = 1,
1284 			.flags = CLK_SET_RATE_PARENT,
1285 			.ops = &clk_branch2_ops,
1286 		},
1287 	},
1288 };
1289 
1290 static struct clk_branch cam_cc_fd_core_uar_clk = {
1291 	.halt_reg = 0xc100,
1292 	.halt_check = BRANCH_HALT,
1293 	.clkr = {
1294 		.enable_reg = 0xc100,
1295 		.enable_mask = BIT(0),
1296 		.hw.init = &(const struct clk_init_data) {
1297 			.name = "cam_cc_fd_core_uar_clk",
1298 			.parent_hws = (const struct clk_hw*[]) {
1299 				&cam_cc_fd_core_clk_src.clkr.hw,
1300 			},
1301 			.num_parents = 1,
1302 			.flags = CLK_SET_RATE_PARENT,
1303 			.ops = &clk_branch2_ops,
1304 		},
1305 	},
1306 };
1307 
1308 static struct clk_branch cam_cc_icp_ahb_clk = {
1309 	.halt_reg = 0xc0d8,
1310 	.halt_check = BRANCH_HALT,
1311 	.clkr = {
1312 		.enable_reg = 0xc0d8,
1313 		.enable_mask = BIT(0),
1314 		.hw.init = &(const struct clk_init_data) {
1315 			.name = "cam_cc_icp_ahb_clk",
1316 			.parent_hws = (const struct clk_hw*[]) {
1317 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1318 			},
1319 			.num_parents = 1,
1320 			.flags = CLK_SET_RATE_PARENT,
1321 			.ops = &clk_branch2_ops,
1322 		},
1323 	},
1324 };
1325 
1326 static struct clk_branch cam_cc_icp_clk = {
1327 	.halt_reg = 0xc0d0,
1328 	.halt_check = BRANCH_HALT,
1329 	.clkr = {
1330 		.enable_reg = 0xc0d0,
1331 		.enable_mask = BIT(0),
1332 		.hw.init = &(const struct clk_init_data) {
1333 			.name = "cam_cc_icp_clk",
1334 			.parent_hws = (const struct clk_hw*[]) {
1335 				&cam_cc_icp_clk_src.clkr.hw,
1336 			},
1337 			.num_parents = 1,
1338 			.flags = CLK_SET_RATE_PARENT,
1339 			.ops = &clk_branch2_ops,
1340 		},
1341 	},
1342 };
1343 
1344 static struct clk_branch cam_cc_ife_0_axi_clk = {
1345 	.halt_reg = 0xa080,
1346 	.halt_check = BRANCH_HALT,
1347 	.clkr = {
1348 		.enable_reg = 0xa080,
1349 		.enable_mask = BIT(0),
1350 		.hw.init = &(const struct clk_init_data) {
1351 			.name = "cam_cc_ife_0_axi_clk",
1352 			.parent_hws = (const struct clk_hw*[]) {
1353 				&cam_cc_camnoc_axi_clk_src.clkr.hw,
1354 			},
1355 			.num_parents = 1,
1356 			.flags = CLK_SET_RATE_PARENT,
1357 			.ops = &clk_branch2_ops,
1358 		},
1359 	},
1360 };
1361 
1362 static struct clk_branch cam_cc_ife_0_clk = {
1363 	.halt_reg = 0xa028,
1364 	.halt_check = BRANCH_HALT,
1365 	.clkr = {
1366 		.enable_reg = 0xa028,
1367 		.enable_mask = BIT(0),
1368 		.hw.init = &(const struct clk_init_data) {
1369 			.name = "cam_cc_ife_0_clk",
1370 			.parent_hws = (const struct clk_hw*[]) {
1371 				&cam_cc_ife_0_clk_src.clkr.hw,
1372 			},
1373 			.num_parents = 1,
1374 			.flags = CLK_SET_RATE_PARENT,
1375 			.ops = &clk_branch2_ops,
1376 		},
1377 	},
1378 };
1379 
1380 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1381 	.halt_reg = 0xa07c,
1382 	.halt_check = BRANCH_HALT,
1383 	.clkr = {
1384 		.enable_reg = 0xa07c,
1385 		.enable_mask = BIT(0),
1386 		.hw.init = &(const struct clk_init_data) {
1387 			.name = "cam_cc_ife_0_cphy_rx_clk",
1388 			.parent_hws = (const struct clk_hw*[]) {
1389 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1390 			},
1391 			.num_parents = 1,
1392 			.flags = CLK_SET_RATE_PARENT,
1393 			.ops = &clk_branch2_ops,
1394 		},
1395 	},
1396 };
1397 
1398 static struct clk_branch cam_cc_ife_0_csid_clk = {
1399 	.halt_reg = 0xa054,
1400 	.halt_check = BRANCH_HALT,
1401 	.clkr = {
1402 		.enable_reg = 0xa054,
1403 		.enable_mask = BIT(0),
1404 		.hw.init = &(const struct clk_init_data) {
1405 			.name = "cam_cc_ife_0_csid_clk",
1406 			.parent_hws = (const struct clk_hw*[]) {
1407 				&cam_cc_ife_0_csid_clk_src.clkr.hw,
1408 			},
1409 			.num_parents = 1,
1410 			.flags = CLK_SET_RATE_PARENT,
1411 			.ops = &clk_branch2_ops,
1412 		},
1413 	},
1414 };
1415 
1416 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1417 	.halt_reg = 0xa038,
1418 	.halt_check = BRANCH_HALT,
1419 	.clkr = {
1420 		.enable_reg = 0xa038,
1421 		.enable_mask = BIT(0),
1422 		.hw.init = &(const struct clk_init_data) {
1423 			.name = "cam_cc_ife_0_dsp_clk",
1424 			.parent_hws = (const struct clk_hw*[]) {
1425 				&cam_cc_ife_0_clk_src.clkr.hw,
1426 			},
1427 			.num_parents = 1,
1428 			.flags = CLK_SET_RATE_PARENT,
1429 			.ops = &clk_branch2_ops,
1430 		},
1431 	},
1432 };
1433 
1434 static struct clk_branch cam_cc_ife_1_axi_clk = {
1435 	.halt_reg = 0xb058,
1436 	.halt_check = BRANCH_HALT,
1437 	.clkr = {
1438 		.enable_reg = 0xb058,
1439 		.enable_mask = BIT(0),
1440 		.hw.init = &(const struct clk_init_data) {
1441 			.name = "cam_cc_ife_1_axi_clk",
1442 			.parent_hws = (const struct clk_hw*[]) {
1443 				&cam_cc_camnoc_axi_clk_src.clkr.hw,
1444 			},
1445 			.num_parents = 1,
1446 			.flags = CLK_SET_RATE_PARENT,
1447 			.ops = &clk_branch2_ops,
1448 		},
1449 	},
1450 };
1451 
1452 static struct clk_branch cam_cc_ife_1_clk = {
1453 	.halt_reg = 0xb028,
1454 	.halt_check = BRANCH_HALT,
1455 	.clkr = {
1456 		.enable_reg = 0xb028,
1457 		.enable_mask = BIT(0),
1458 		.hw.init = &(const struct clk_init_data) {
1459 			.name = "cam_cc_ife_1_clk",
1460 			.parent_hws = (const struct clk_hw*[]) {
1461 				&cam_cc_ife_1_clk_src.clkr.hw,
1462 			},
1463 			.num_parents = 1,
1464 			.flags = CLK_SET_RATE_PARENT,
1465 			.ops = &clk_branch2_ops,
1466 		},
1467 	},
1468 };
1469 
1470 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1471 	.halt_reg = 0xb054,
1472 	.halt_check = BRANCH_HALT,
1473 	.clkr = {
1474 		.enable_reg = 0xb054,
1475 		.enable_mask = BIT(0),
1476 		.hw.init = &(const struct clk_init_data) {
1477 			.name = "cam_cc_ife_1_cphy_rx_clk",
1478 			.parent_hws = (const struct clk_hw*[]) {
1479 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1480 			},
1481 			.num_parents = 1,
1482 			.flags = CLK_SET_RATE_PARENT,
1483 			.ops = &clk_branch2_ops,
1484 		},
1485 	},
1486 };
1487 
1488 static struct clk_branch cam_cc_ife_1_csid_clk = {
1489 	.halt_reg = 0xb04c,
1490 	.halt_check = BRANCH_HALT,
1491 	.clkr = {
1492 		.enable_reg = 0xb04c,
1493 		.enable_mask = BIT(0),
1494 		.hw.init = &(const struct clk_init_data) {
1495 			.name = "cam_cc_ife_1_csid_clk",
1496 			.parent_hws = (const struct clk_hw*[]) {
1497 				&cam_cc_ife_1_csid_clk_src.clkr.hw,
1498 			},
1499 			.num_parents = 1,
1500 			.flags = CLK_SET_RATE_PARENT,
1501 			.ops = &clk_branch2_ops,
1502 		},
1503 	},
1504 };
1505 
1506 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1507 	.halt_reg = 0xb030,
1508 	.halt_check = BRANCH_HALT,
1509 	.clkr = {
1510 		.enable_reg = 0xb030,
1511 		.enable_mask = BIT(0),
1512 		.hw.init = &(const struct clk_init_data) {
1513 			.name = "cam_cc_ife_1_dsp_clk",
1514 			.parent_hws = (const struct clk_hw*[]) {
1515 				&cam_cc_ife_1_clk_src.clkr.hw,
1516 			},
1517 			.num_parents = 1,
1518 			.flags = CLK_SET_RATE_PARENT,
1519 			.ops = &clk_branch2_ops,
1520 		},
1521 	},
1522 };
1523 
1524 static struct clk_branch cam_cc_ife_lite_0_clk = {
1525 	.halt_reg = 0xc01c,
1526 	.halt_check = BRANCH_HALT,
1527 	.clkr = {
1528 		.enable_reg = 0xc01c,
1529 		.enable_mask = BIT(0),
1530 		.hw.init = &(const struct clk_init_data) {
1531 			.name = "cam_cc_ife_lite_0_clk",
1532 			.parent_hws = (const struct clk_hw*[]) {
1533 				&cam_cc_ife_lite_0_clk_src.clkr.hw,
1534 			},
1535 			.num_parents = 1,
1536 			.flags = CLK_SET_RATE_PARENT,
1537 			.ops = &clk_branch2_ops,
1538 		},
1539 	},
1540 };
1541 
1542 static struct clk_branch cam_cc_ife_lite_0_cphy_rx_clk = {
1543 	.halt_reg = 0xc040,
1544 	.halt_check = BRANCH_HALT,
1545 	.clkr = {
1546 		.enable_reg = 0xc040,
1547 		.enable_mask = BIT(0),
1548 		.hw.init = &(const struct clk_init_data) {
1549 			.name = "cam_cc_ife_lite_0_cphy_rx_clk",
1550 			.parent_hws = (const struct clk_hw*[]) {
1551 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1552 			},
1553 			.num_parents = 1,
1554 			.flags = CLK_SET_RATE_PARENT,
1555 			.ops = &clk_branch2_ops,
1556 		},
1557 	},
1558 };
1559 
1560 static struct clk_branch cam_cc_ife_lite_0_csid_clk = {
1561 	.halt_reg = 0xc038,
1562 	.halt_check = BRANCH_HALT,
1563 	.clkr = {
1564 		.enable_reg = 0xc038,
1565 		.enable_mask = BIT(0),
1566 		.hw.init = &(const struct clk_init_data) {
1567 			.name = "cam_cc_ife_lite_0_csid_clk",
1568 			.parent_hws = (const struct clk_hw*[]) {
1569 				&cam_cc_ife_lite_0_csid_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_ife_lite_1_clk = {
1579 	.halt_reg = 0xc060,
1580 	.halt_check = BRANCH_HALT,
1581 	.clkr = {
1582 		.enable_reg = 0xc060,
1583 		.enable_mask = BIT(0),
1584 		.hw.init = &(const struct clk_init_data) {
1585 			.name = "cam_cc_ife_lite_1_clk",
1586 			.parent_hws = (const struct clk_hw*[]) {
1587 				&cam_cc_ife_lite_1_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_ife_lite_1_cphy_rx_clk = {
1597 	.halt_reg = 0xc084,
1598 	.halt_check = BRANCH_HALT,
1599 	.clkr = {
1600 		.enable_reg = 0xc084,
1601 		.enable_mask = BIT(0),
1602 		.hw.init = &(const struct clk_init_data) {
1603 			.name = "cam_cc_ife_lite_1_cphy_rx_clk",
1604 			.parent_hws = (const struct clk_hw*[]) {
1605 				&cam_cc_cphy_rx_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_ife_lite_1_csid_clk = {
1615 	.halt_reg = 0xc07c,
1616 	.halt_check = BRANCH_HALT,
1617 	.clkr = {
1618 		.enable_reg = 0xc07c,
1619 		.enable_mask = BIT(0),
1620 		.hw.init = &(const struct clk_init_data) {
1621 			.name = "cam_cc_ife_lite_1_csid_clk",
1622 			.parent_hws = (const struct clk_hw*[]) {
1623 				&cam_cc_ife_lite_1_csid_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_ipe_0_ahb_clk = {
1633 	.halt_reg = 0x8040,
1634 	.halt_check = BRANCH_HALT,
1635 	.clkr = {
1636 		.enable_reg = 0x8040,
1637 		.enable_mask = BIT(0),
1638 		.hw.init = &(const struct clk_init_data) {
1639 			.name = "cam_cc_ipe_0_ahb_clk",
1640 			.parent_hws = (const struct clk_hw*[]) {
1641 				&cam_cc_slow_ahb_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_ipe_0_areg_clk = {
1651 	.halt_reg = 0x803c,
1652 	.halt_check = BRANCH_HALT,
1653 	.clkr = {
1654 		.enable_reg = 0x803c,
1655 		.enable_mask = BIT(0),
1656 		.hw.init = &(const struct clk_init_data) {
1657 			.name = "cam_cc_ipe_0_areg_clk",
1658 			.parent_hws = (const struct clk_hw*[]) {
1659 				&cam_cc_fast_ahb_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_ipe_0_axi_clk = {
1669 	.halt_reg = 0x8038,
1670 	.halt_check = BRANCH_HALT,
1671 	.clkr = {
1672 		.enable_reg = 0x8038,
1673 		.enable_mask = BIT(0),
1674 		.hw.init = &(const struct clk_init_data) {
1675 			.name = "cam_cc_ipe_0_axi_clk",
1676 			.parent_hws = (const struct clk_hw*[]) {
1677 				&cam_cc_camnoc_axi_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_ipe_0_clk = {
1687 	.halt_reg = 0x8028,
1688 	.halt_check = BRANCH_HALT,
1689 	.clkr = {
1690 		.enable_reg = 0x8028,
1691 		.enable_mask = BIT(0),
1692 		.hw.init = &(const struct clk_init_data) {
1693 			.name = "cam_cc_ipe_0_clk",
1694 			.parent_hws = (const struct clk_hw*[]) {
1695 				&cam_cc_ipe_0_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_ipe_1_ahb_clk = {
1705 	.halt_reg = 0x9028,
1706 	.halt_check = BRANCH_HALT,
1707 	.clkr = {
1708 		.enable_reg = 0x9028,
1709 		.enable_mask = BIT(0),
1710 		.hw.init = &(const struct clk_init_data) {
1711 			.name = "cam_cc_ipe_1_ahb_clk",
1712 			.parent_hws = (const struct clk_hw*[]) {
1713 				&cam_cc_slow_ahb_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_ipe_1_areg_clk = {
1723 	.halt_reg = 0x9024,
1724 	.halt_check = BRANCH_HALT,
1725 	.clkr = {
1726 		.enable_reg = 0x9024,
1727 		.enable_mask = BIT(0),
1728 		.hw.init = &(const struct clk_init_data) {
1729 			.name = "cam_cc_ipe_1_areg_clk",
1730 			.parent_hws = (const struct clk_hw*[]) {
1731 				&cam_cc_fast_ahb_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_ipe_1_axi_clk = {
1741 	.halt_reg = 0x9020,
1742 	.halt_check = BRANCH_HALT,
1743 	.clkr = {
1744 		.enable_reg = 0x9020,
1745 		.enable_mask = BIT(0),
1746 		.hw.init = &(const struct clk_init_data) {
1747 			.name = "cam_cc_ipe_1_axi_clk",
1748 			.parent_hws = (const struct clk_hw*[]) {
1749 				&cam_cc_camnoc_axi_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_ipe_1_clk = {
1759 	.halt_reg = 0x9010,
1760 	.halt_check = BRANCH_HALT,
1761 	.clkr = {
1762 		.enable_reg = 0x9010,
1763 		.enable_mask = BIT(0),
1764 		.hw.init = &(const struct clk_init_data) {
1765 			.name = "cam_cc_ipe_1_clk",
1766 			.parent_hws = (const struct clk_hw*[]) {
1767 				&cam_cc_ipe_0_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_jpeg_clk = {
1777 	.halt_reg = 0xc0a4,
1778 	.halt_check = BRANCH_HALT,
1779 	.clkr = {
1780 		.enable_reg = 0xc0a4,
1781 		.enable_mask = BIT(0),
1782 		.hw.init = &(const struct clk_init_data) {
1783 			.name = "cam_cc_jpeg_clk",
1784 			.parent_hws = (const struct clk_hw*[]) {
1785 				&cam_cc_jpeg_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_lrme_clk = {
1795 	.halt_reg = 0xc15c,
1796 	.halt_check = BRANCH_HALT,
1797 	.clkr = {
1798 		.enable_reg = 0xc15c,
1799 		.enable_mask = BIT(0),
1800 		.hw.init = &(const struct clk_init_data) {
1801 			.name = "cam_cc_lrme_clk",
1802 			.parent_hws = (const struct clk_hw*[]) {
1803 				&cam_cc_lrme_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_mclk0_clk = {
1813 	.halt_reg = 0x501c,
1814 	.halt_check = BRANCH_HALT,
1815 	.clkr = {
1816 		.enable_reg = 0x501c,
1817 		.enable_mask = BIT(0),
1818 		.hw.init = &(const struct clk_init_data) {
1819 			.name = "cam_cc_mclk0_clk",
1820 			.parent_hws = (const struct clk_hw*[]) {
1821 				&cam_cc_mclk0_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_mclk1_clk = {
1831 	.halt_reg = 0x503c,
1832 	.halt_check = BRANCH_HALT,
1833 	.clkr = {
1834 		.enable_reg = 0x503c,
1835 		.enable_mask = BIT(0),
1836 		.hw.init = &(const struct clk_init_data) {
1837 			.name = "cam_cc_mclk1_clk",
1838 			.parent_hws = (const struct clk_hw*[]) {
1839 				&cam_cc_mclk1_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_mclk2_clk = {
1849 	.halt_reg = 0x505c,
1850 	.halt_check = BRANCH_HALT,
1851 	.clkr = {
1852 		.enable_reg = 0x505c,
1853 		.enable_mask = BIT(0),
1854 		.hw.init = &(const struct clk_init_data) {
1855 			.name = "cam_cc_mclk2_clk",
1856 			.parent_hws = (const struct clk_hw*[]) {
1857 				&cam_cc_mclk2_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_mclk3_clk = {
1867 	.halt_reg = 0x507c,
1868 	.halt_check = BRANCH_HALT,
1869 	.clkr = {
1870 		.enable_reg = 0x507c,
1871 		.enable_mask = BIT(0),
1872 		.hw.init = &(const struct clk_init_data) {
1873 			.name = "cam_cc_mclk3_clk",
1874 			.parent_hws = (const struct clk_hw*[]) {
1875 				&cam_cc_mclk3_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 gdsc titan_top_gdsc = {
1885 	.gdscr = 0xc1bc,
1886 	.en_rest_wait_val = 0x2,
1887 	.en_few_wait_val = 0x2,
1888 	.clk_dis_wait_val = 0xf,
1889 	.pd = {
1890 		.name = "titan_top_gdsc",
1891 	},
1892 	.pwrsts = PWRSTS_OFF_ON,
1893 	.flags = POLL_CFG_GDSCR,
1894 };
1895 
1896 static struct gdsc bps_gdsc = {
1897 	.gdscr = 0x7004,
1898 	.en_rest_wait_val = 0x2,
1899 	.en_few_wait_val = 0x2,
1900 	.clk_dis_wait_val = 0xf,
1901 	.pd = {
1902 		.name = "bps_gdsc",
1903 	},
1904 	.pwrsts = PWRSTS_OFF_ON,
1905 	.parent = &titan_top_gdsc.pd,
1906 	.flags = POLL_CFG_GDSCR,
1907 };
1908 
1909 static struct gdsc ife_0_gdsc = {
1910 	.gdscr = 0xa004,
1911 	.en_rest_wait_val = 0x2,
1912 	.en_few_wait_val = 0x2,
1913 	.clk_dis_wait_val = 0xf,
1914 	.pd = {
1915 		.name = "ife_0_gdsc",
1916 	},
1917 	.pwrsts = PWRSTS_OFF_ON,
1918 	.parent = &titan_top_gdsc.pd,
1919 	.flags = POLL_CFG_GDSCR,
1920 };
1921 
1922 static struct gdsc ife_1_gdsc = {
1923 	.gdscr = 0xb004,
1924 	.en_rest_wait_val = 0x2,
1925 	.en_few_wait_val = 0x2,
1926 	.clk_dis_wait_val = 0xf,
1927 	.pd = {
1928 		.name = "ife_1_gdsc",
1929 	},
1930 	.pwrsts = PWRSTS_OFF_ON,
1931 	.parent = &titan_top_gdsc.pd,
1932 	.flags = POLL_CFG_GDSCR,
1933 };
1934 
1935 static struct gdsc ipe_0_gdsc = {
1936 	.gdscr = 0x8004,
1937 	.en_rest_wait_val = 0x2,
1938 	.en_few_wait_val = 0x2,
1939 	.clk_dis_wait_val = 0xf,
1940 	.pd = {
1941 		.name = "ipe_0_gdsc",
1942 	},
1943 	.pwrsts = PWRSTS_OFF_ON,
1944 	.parent = &titan_top_gdsc.pd,
1945 	.flags = POLL_CFG_GDSCR,
1946 };
1947 
1948 static struct gdsc ipe_1_gdsc = {
1949 	.gdscr = 0x9004,
1950 	.en_rest_wait_val = 0x2,
1951 	.en_few_wait_val = 0x2,
1952 	.clk_dis_wait_val = 0xf,
1953 	.pd = {
1954 		.name = "ipe_1_gdsc",
1955 	},
1956 	.pwrsts = PWRSTS_OFF_ON,
1957 	.parent = &titan_top_gdsc.pd,
1958 	.flags = POLL_CFG_GDSCR,
1959 };
1960 
1961 static struct clk_regmap *cam_cc_sm8150_clocks[] = {
1962 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
1963 	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
1964 	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
1965 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
1966 	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
1967 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
1968 	[CAM_CC_PLL2_OUT_MAIN] = &cam_cc_pll2_out_main.clkr,
1969 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
1970 	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
1971 	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
1972 	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
1973 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
1974 	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
1975 	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
1976 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
1977 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
1978 	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
1979 	[CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
1980 	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
1981 	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
1982 	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
1983 	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
1984 	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
1985 	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
1986 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
1987 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
1988 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
1989 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
1990 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
1991 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
1992 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
1993 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
1994 	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
1995 	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
1996 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
1997 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
1998 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
1999 	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2000 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2001 	[CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
2002 	[CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
2003 	[CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
2004 	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2005 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2006 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2007 	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
2008 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2009 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2010 	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
2011 	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
2012 	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
2013 	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2014 	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
2015 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2016 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2017 	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
2018 	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
2019 	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
2020 	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2021 	[CAM_CC_IFE_LITE_0_CLK] = &cam_cc_ife_lite_0_clk.clkr,
2022 	[CAM_CC_IFE_LITE_0_CLK_SRC] = &cam_cc_ife_lite_0_clk_src.clkr,
2023 	[CAM_CC_IFE_LITE_0_CPHY_RX_CLK] = &cam_cc_ife_lite_0_cphy_rx_clk.clkr,
2024 	[CAM_CC_IFE_LITE_0_CSID_CLK] = &cam_cc_ife_lite_0_csid_clk.clkr,
2025 	[CAM_CC_IFE_LITE_0_CSID_CLK_SRC] = &cam_cc_ife_lite_0_csid_clk_src.clkr,
2026 	[CAM_CC_IFE_LITE_1_CLK] = &cam_cc_ife_lite_1_clk.clkr,
2027 	[CAM_CC_IFE_LITE_1_CLK_SRC] = &cam_cc_ife_lite_1_clk_src.clkr,
2028 	[CAM_CC_IFE_LITE_1_CPHY_RX_CLK] = &cam_cc_ife_lite_1_cphy_rx_clk.clkr,
2029 	[CAM_CC_IFE_LITE_1_CSID_CLK] = &cam_cc_ife_lite_1_csid_clk.clkr,
2030 	[CAM_CC_IFE_LITE_1_CSID_CLK_SRC] = &cam_cc_ife_lite_1_csid_clk_src.clkr,
2031 	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
2032 	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
2033 	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
2034 	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
2035 	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
2036 	[CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
2037 	[CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
2038 	[CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
2039 	[CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
2040 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2041 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2042 	[CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
2043 	[CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
2044 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2045 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2046 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2047 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2048 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2049 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2050 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2051 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2052 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2053 };
2054 
2055 static struct gdsc *cam_cc_sm8150_gdscs[] = {
2056 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
2057 	[BPS_GDSC] = &bps_gdsc,
2058 	[IFE_0_GDSC] = &ife_0_gdsc,
2059 	[IFE_1_GDSC] = &ife_1_gdsc,
2060 	[IPE_0_GDSC] = &ipe_0_gdsc,
2061 	[IPE_1_GDSC] = &ipe_1_gdsc,
2062 };
2063 
2064 static const struct qcom_reset_map cam_cc_sm8150_resets[] = {
2065 	[CAM_CC_BPS_BCR] = { 0x7000 },
2066 	[CAM_CC_CAMNOC_BCR] = { 0xc16c },
2067 	[CAM_CC_CCI_BCR] = { 0xc104 },
2068 	[CAM_CC_CPAS_BCR] = { 0xc164 },
2069 	[CAM_CC_CSI0PHY_BCR] = { 0x6000 },
2070 	[CAM_CC_CSI1PHY_BCR] = { 0x6024 },
2071 	[CAM_CC_CSI2PHY_BCR] = { 0x6048 },
2072 	[CAM_CC_CSI3PHY_BCR] = { 0x606c },
2073 	[CAM_CC_FD_BCR] = { 0xc0dc },
2074 	[CAM_CC_ICP_BCR] = { 0xc0b4 },
2075 	[CAM_CC_IFE_0_BCR] = { 0xa000 },
2076 	[CAM_CC_IFE_1_BCR] = { 0xb000 },
2077 	[CAM_CC_IFE_LITE_0_BCR] = { 0xc000 },
2078 	[CAM_CC_IFE_LITE_1_BCR] = { 0xc044 },
2079 	[CAM_CC_IPE_0_BCR] = { 0x8000 },
2080 	[CAM_CC_IPE_1_BCR] = { 0x9000 },
2081 	[CAM_CC_JPEG_BCR] = { 0xc088 },
2082 	[CAM_CC_LRME_BCR] = { 0xc140 },
2083 	[CAM_CC_MCLK0_BCR] = { 0x5000 },
2084 	[CAM_CC_MCLK1_BCR] = { 0x5020 },
2085 	[CAM_CC_MCLK2_BCR] = { 0x5040 },
2086 	[CAM_CC_MCLK3_BCR] = { 0x5060 },
2087 };
2088 
2089 static const struct regmap_config cam_cc_sm8150_regmap_config = {
2090 	.reg_bits = 32,
2091 	.reg_stride = 4,
2092 	.val_bits = 32,
2093 	.max_register = 0xe004,
2094 	.fast_io = true,
2095 };
2096 
2097 static struct qcom_cc_desc cam_cc_sm8150_desc = {
2098 	.config = &cam_cc_sm8150_regmap_config,
2099 	.clks = cam_cc_sm8150_clocks,
2100 	.num_clks = ARRAY_SIZE(cam_cc_sm8150_clocks),
2101 	.resets = cam_cc_sm8150_resets,
2102 	.num_resets = ARRAY_SIZE(cam_cc_sm8150_resets),
2103 	.gdscs = cam_cc_sm8150_gdscs,
2104 	.num_gdscs = ARRAY_SIZE(cam_cc_sm8150_gdscs),
2105 };
2106 
2107 static const struct of_device_id cam_cc_sm8150_match_table[] = {
2108 	{ .compatible = "qcom,sm8150-camcc" },
2109 	{ }
2110 };
2111 MODULE_DEVICE_TABLE(of, cam_cc_sm8150_match_table);
2112 
2113 static int cam_cc_sm8150_probe(struct platform_device *pdev)
2114 {
2115 	struct regmap *regmap;
2116 	int ret;
2117 
2118 	ret = devm_pm_runtime_enable(&pdev->dev);
2119 	if (ret)
2120 		return ret;
2121 
2122 	ret = pm_runtime_resume_and_get(&pdev->dev);
2123 	if (ret)
2124 		return ret;
2125 
2126 	regmap = qcom_cc_map(pdev, &cam_cc_sm8150_desc);
2127 	if (IS_ERR(regmap)) {
2128 		pm_runtime_put(&pdev->dev);
2129 		return PTR_ERR(regmap);
2130 	}
2131 
2132 	clk_trion_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
2133 	clk_trion_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
2134 	clk_regera_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
2135 	clk_trion_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
2136 	clk_trion_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
2137 
2138 	/* Keep the critical clock always-on */
2139 	qcom_branch_set_clk_en(regmap, 0xc1e4); /* cam_cc_gdsc_clk */
2140 
2141 	ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sm8150_desc, regmap);
2142 
2143 	pm_runtime_put(&pdev->dev);
2144 
2145 	return ret;
2146 }
2147 
2148 static struct platform_driver cam_cc_sm8150_driver = {
2149 	.probe = cam_cc_sm8150_probe,
2150 	.driver = {
2151 		.name = "camcc-sm8150",
2152 		.of_match_table = cam_cc_sm8150_match_table,
2153 	},
2154 };
2155 
2156 module_platform_driver(cam_cc_sm8150_driver);
2157 
2158 MODULE_DESCRIPTION("QTI CAM_CC SM8150 Driver");
2159 MODULE_LICENSE("GPL");
2160