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