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