1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2025, Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/mod_devicetable.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/pm_runtime.h>
11 #include <linux/regmap.h>
12
13 #include <dt-bindings/clock/qcom,sc8180x-camcc.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap.h"
19 #include "common.h"
20 #include "gdsc.h"
21 #include "reset.h"
22
23 enum {
24 DT_IFACE,
25 DT_BI_TCXO,
26 DT_SLEEP_CLK,
27 };
28
29 enum {
30 P_BI_TCXO,
31 P_CAM_CC_PLL0_OUT_EVEN,
32 P_CAM_CC_PLL0_OUT_MAIN,
33 P_CAM_CC_PLL0_OUT_ODD,
34 P_CAM_CC_PLL1_OUT_EVEN,
35 P_CAM_CC_PLL2_OUT_EARLY,
36 P_CAM_CC_PLL2_OUT_MAIN,
37 P_CAM_CC_PLL3_OUT_EVEN,
38 P_CAM_CC_PLL4_OUT_EVEN,
39 P_CAM_CC_PLL5_OUT_EVEN,
40 P_CAM_CC_PLL6_OUT_EVEN,
41 P_SLEEP_CLK,
42 };
43
44 static const struct pll_vco regera_vco[] = {
45 { 600000000, 3300000000, 0 },
46 };
47
48 static const struct pll_vco trion_vco[] = {
49 { 249600000, 2000000000, 0 },
50 };
51
52 static const struct alpha_pll_config cam_cc_pll0_config = {
53 .l = 0x3e,
54 .alpha = 0x8000,
55 .config_ctl_val = 0x20485699,
56 .config_ctl_hi_val = 0x00002267,
57 .config_ctl_hi1_val = 0x00000024,
58 .test_ctl_hi1_val = 0x00000020,
59 .user_ctl_val = 0x00003100,
60 .user_ctl_hi_val = 0x00000805,
61 .user_ctl_hi1_val = 0x000000d0,
62 };
63
64 static struct clk_alpha_pll cam_cc_pll0 = {
65 .offset = 0x0,
66 .vco_table = trion_vco,
67 .num_vco = ARRAY_SIZE(trion_vco),
68 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
69 .clkr = {
70 .hw.init = &(const struct clk_init_data) {
71 .name = "cam_cc_pll0",
72 .parent_data = &(const struct clk_parent_data) {
73 .index = DT_BI_TCXO,
74 },
75 .num_parents = 1,
76 .ops = &clk_alpha_pll_trion_ops,
77 },
78 },
79 };
80
81 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
82 { 0x1, 2 },
83 { }
84 };
85
86 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
87 .offset = 0x0,
88 .post_div_shift = 8,
89 .post_div_table = post_div_table_cam_cc_pll0_out_even,
90 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
91 .width = 4,
92 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
93 .clkr.hw.init = &(const struct clk_init_data) {
94 .name = "cam_cc_pll0_out_even",
95 .parent_hws = (const struct clk_hw*[]) {
96 &cam_cc_pll0.clkr.hw,
97 },
98 .num_parents = 1,
99 .flags = CLK_SET_RATE_PARENT,
100 .ops = &clk_alpha_pll_postdiv_trion_ops,
101 },
102 };
103
104 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
105 { 0x3, 3 },
106 { }
107 };
108
109 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
110 .offset = 0x0,
111 .post_div_shift = 12,
112 .post_div_table = post_div_table_cam_cc_pll0_out_odd,
113 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
114 .width = 4,
115 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
116 .clkr.hw.init = &(const struct clk_init_data) {
117 .name = "cam_cc_pll0_out_odd",
118 .parent_hws = (const struct clk_hw*[]) {
119 &cam_cc_pll0.clkr.hw,
120 },
121 .num_parents = 1,
122 .flags = CLK_SET_RATE_PARENT,
123 .ops = &clk_alpha_pll_postdiv_trion_ops,
124 },
125 };
126
127 static const struct alpha_pll_config cam_cc_pll1_config = {
128 .l = 0x13,
129 .alpha = 0x8800,
130 .config_ctl_val = 0x20485699,
131 .config_ctl_hi_val = 0x00002267,
132 .config_ctl_hi1_val = 0x00000024,
133 .test_ctl_hi1_val = 0x00000020,
134 .user_ctl_val = 0x00000000,
135 .user_ctl_hi_val = 0x00000805,
136 .user_ctl_hi1_val = 0x000000d0,
137 };
138
139 static struct clk_alpha_pll cam_cc_pll1 = {
140 .offset = 0x1000,
141 .vco_table = trion_vco,
142 .num_vco = ARRAY_SIZE(trion_vco),
143 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
144 .clkr = {
145 .hw.init = &(const struct clk_init_data) {
146 .name = "cam_cc_pll1",
147 .parent_data = &(const struct clk_parent_data) {
148 .index = DT_BI_TCXO,
149 },
150 .num_parents = 1,
151 .ops = &clk_alpha_pll_trion_ops,
152 },
153 },
154 };
155
156 static const struct alpha_pll_config cam_cc_pll2_config = {
157 .l = 0x32,
158 .alpha = 0x0,
159 .config_ctl_val = 0x10000807,
160 .config_ctl_hi_val = 0x00000011,
161 .config_ctl_hi1_val = 0x04300142,
162 .test_ctl_val = 0x04000400,
163 .test_ctl_hi_val = 0x00004000,
164 .test_ctl_hi1_val = 0x00000000,
165 .user_ctl_val = 0x00000100,
166 };
167
168 static struct clk_alpha_pll cam_cc_pll2 = {
169 .offset = 0x2000,
170 .vco_table = regera_vco,
171 .num_vco = ARRAY_SIZE(regera_vco),
172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_REGERA],
173 .clkr = {
174 .hw.init = &(const struct clk_init_data) {
175 .name = "cam_cc_pll2",
176 .parent_data = &(const struct clk_parent_data) {
177 .index = DT_BI_TCXO,
178 },
179 .num_parents = 1,
180 .ops = &clk_alpha_pll_regera_ops,
181 },
182 },
183 };
184
185 static const struct clk_div_table post_div_table_cam_cc_pll2_out_main[] = {
186 { 0x1, 2 },
187 { }
188 };
189
190 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main = {
191 .offset = 0x2000,
192 .post_div_shift = 8,
193 .post_div_table = post_div_table_cam_cc_pll2_out_main,
194 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main),
195 .width = 2,
196 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_REGERA],
197 .clkr.hw.init = &(const struct clk_init_data) {
198 .name = "cam_cc_pll2_out_main",
199 .parent_hws = (const struct clk_hw*[]) {
200 &cam_cc_pll2.clkr.hw,
201 },
202 .num_parents = 1,
203 .flags = CLK_SET_RATE_PARENT,
204 .ops = &clk_alpha_pll_postdiv_trion_ops,
205 },
206 };
207
208 static const struct alpha_pll_config cam_cc_pll3_config = {
209 .l = 0x14,
210 .alpha = 0xd555,
211 .config_ctl_val = 0x20485699,
212 .config_ctl_hi_val = 0x00002267,
213 .config_ctl_hi1_val = 0x00000024,
214 .test_ctl_hi1_val = 0x00000020,
215 .user_ctl_val = 0x00000000,
216 .user_ctl_hi_val = 0x00000805,
217 .user_ctl_hi1_val = 0x000000d0,
218 };
219
220 static struct clk_alpha_pll cam_cc_pll3 = {
221 .offset = 0x3000,
222 .vco_table = trion_vco,
223 .num_vco = ARRAY_SIZE(trion_vco),
224 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
225 .clkr = {
226 .hw.init = &(const struct clk_init_data) {
227 .name = "cam_cc_pll3",
228 .parent_data = &(const struct clk_parent_data) {
229 .index = DT_BI_TCXO,
230 },
231 .num_parents = 1,
232 .ops = &clk_alpha_pll_trion_ops,
233 },
234 },
235 };
236
237 static const struct alpha_pll_config cam_cc_pll4_config = {
238 .l = 0x14,
239 .alpha = 0xd555,
240 .config_ctl_val = 0x20485699,
241 .config_ctl_hi_val = 0x00002267,
242 .config_ctl_hi1_val = 0x00000024,
243 .test_ctl_hi1_val = 0x00000020,
244 .user_ctl_val = 0x00000000,
245 .user_ctl_hi_val = 0x00000805,
246 .user_ctl_hi1_val = 0x000000d0,
247 };
248
249 static struct clk_alpha_pll cam_cc_pll4 = {
250 .offset = 0x4000,
251 .vco_table = trion_vco,
252 .num_vco = ARRAY_SIZE(trion_vco),
253 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
254 .clkr = {
255 .hw.init = &(const struct clk_init_data) {
256 .name = "cam_cc_pll4",
257 .parent_data = &(const struct clk_parent_data) {
258 .index = DT_BI_TCXO,
259 },
260 .num_parents = 1,
261 .ops = &clk_alpha_pll_trion_ops,
262 },
263 },
264 };
265
266 static const struct alpha_pll_config cam_cc_pll5_config = {
267 .l = 0x14,
268 .alpha = 0xd555,
269 .config_ctl_val = 0x20485699,
270 .config_ctl_hi_val = 0x00002267,
271 .config_ctl_hi1_val = 0x00000024,
272 .test_ctl_hi1_val = 0x00000020,
273 .user_ctl_val = 0x00000000,
274 .user_ctl_hi_val = 0x00000805,
275 .user_ctl_hi1_val = 0x000000d0,
276 };
277
278 static struct clk_alpha_pll cam_cc_pll5 = {
279 .offset = 0x4078,
280 .vco_table = trion_vco,
281 .num_vco = ARRAY_SIZE(trion_vco),
282 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
283 .clkr = {
284 .hw.init = &(const struct clk_init_data) {
285 .name = "cam_cc_pll5",
286 .parent_data = &(const struct clk_parent_data) {
287 .index = DT_BI_TCXO,
288 },
289 .num_parents = 1,
290 .ops = &clk_alpha_pll_trion_ops,
291 },
292 },
293 };
294
295 static const struct alpha_pll_config cam_cc_pll6_config = {
296 .l = 0x14,
297 .alpha = 0xd555,
298 .config_ctl_val = 0x20485699,
299 .config_ctl_hi_val = 0x00002267,
300 .config_ctl_hi1_val = 0x00000024,
301 .test_ctl_hi1_val = 0x00000020,
302 .user_ctl_val = 0x00000000,
303 .user_ctl_hi_val = 0x00000805,
304 .user_ctl_hi1_val = 0x000000d0,
305 };
306
307 static struct clk_alpha_pll cam_cc_pll6 = {
308 .offset = 0x40f0,
309 .vco_table = trion_vco,
310 .num_vco = ARRAY_SIZE(trion_vco),
311 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
312 .clkr = {
313 .hw.init = &(const struct clk_init_data) {
314 .name = "cam_cc_pll6",
315 .parent_data = &(const struct clk_parent_data) {
316 .index = DT_BI_TCXO,
317 },
318 .num_parents = 1,
319 .ops = &clk_alpha_pll_trion_ops,
320 },
321 },
322 };
323
324 static const struct parent_map cam_cc_parent_map_0[] = {
325 { P_BI_TCXO, 0 },
326 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
327 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
328 { P_CAM_CC_PLL0_OUT_ODD, 3 },
329 { P_CAM_CC_PLL2_OUT_MAIN, 5 },
330 };
331
332 static const struct clk_parent_data cam_cc_parent_data_0[] = {
333 { .index = DT_BI_TCXO },
334 { .hw = &cam_cc_pll0.clkr.hw },
335 { .hw = &cam_cc_pll0_out_even.clkr.hw },
336 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
337 { .hw = &cam_cc_pll2_out_main.clkr.hw },
338 };
339
340 static const struct parent_map cam_cc_parent_map_1[] = {
341 { P_BI_TCXO, 0 },
342 { P_CAM_CC_PLL2_OUT_EARLY, 5 },
343 };
344
345 static const struct clk_parent_data cam_cc_parent_data_1[] = {
346 { .index = DT_BI_TCXO },
347 { .hw = &cam_cc_pll2.clkr.hw },
348 };
349
350 static const struct parent_map cam_cc_parent_map_2[] = {
351 { P_BI_TCXO, 0 },
352 { P_CAM_CC_PLL3_OUT_EVEN, 6 },
353 };
354
355 static const struct clk_parent_data cam_cc_parent_data_2[] = {
356 { .index = DT_BI_TCXO },
357 { .hw = &cam_cc_pll3.clkr.hw },
358 };
359
360 static const struct parent_map cam_cc_parent_map_3[] = {
361 { P_BI_TCXO, 0 },
362 { P_CAM_CC_PLL4_OUT_EVEN, 6 },
363 };
364
365 static const struct clk_parent_data cam_cc_parent_data_3[] = {
366 { .index = DT_BI_TCXO },
367 { .hw = &cam_cc_pll4.clkr.hw },
368 };
369
370 static const struct parent_map cam_cc_parent_map_4[] = {
371 { P_BI_TCXO, 0 },
372 { P_CAM_CC_PLL5_OUT_EVEN, 6 },
373 };
374
375 static const struct clk_parent_data cam_cc_parent_data_4[] = {
376 { .index = DT_BI_TCXO },
377 { .hw = &cam_cc_pll5.clkr.hw },
378 };
379
380 static const struct parent_map cam_cc_parent_map_5[] = {
381 { P_BI_TCXO, 0 },
382 { P_CAM_CC_PLL6_OUT_EVEN, 6 },
383 };
384
385 static const struct clk_parent_data cam_cc_parent_data_5[] = {
386 { .index = DT_BI_TCXO },
387 { .hw = &cam_cc_pll6.clkr.hw },
388 };
389
390 static const struct parent_map cam_cc_parent_map_6[] = {
391 { P_BI_TCXO, 0 },
392 { P_CAM_CC_PLL1_OUT_EVEN, 4 },
393 };
394
395 static const struct clk_parent_data cam_cc_parent_data_6[] = {
396 { .index = DT_BI_TCXO },
397 { .hw = &cam_cc_pll1.clkr.hw },
398 };
399
400 static const struct parent_map cam_cc_parent_map_7[] = {
401 { P_BI_TCXO, 0 },
402 };
403
404 static const struct clk_parent_data cam_cc_parent_data_7[] = {
405 { .index = DT_BI_TCXO },
406 };
407
408 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
409 F(19200000, P_BI_TCXO, 1, 0, 0),
410 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
411 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
412 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
413 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
414 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
415 { }
416 };
417
418 static struct clk_rcg2 cam_cc_bps_clk_src = {
419 .cmd_rcgr = 0x7010,
420 .mnd_width = 0,
421 .hid_width = 5,
422 .parent_map = cam_cc_parent_map_0,
423 .freq_tbl = ftbl_cam_cc_bps_clk_src,
424 .clkr.hw.init = &(const struct clk_init_data) {
425 .name = "cam_cc_bps_clk_src",
426 .parent_data = cam_cc_parent_data_0,
427 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
428 .flags = CLK_SET_RATE_PARENT,
429 .ops = &clk_rcg2_shared_ops,
430 },
431 };
432
433 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
434 F(19200000, P_BI_TCXO, 1, 0, 0),
435 F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
436 F(266666667, P_CAM_CC_PLL0_OUT_ODD, 1.5, 0, 0),
437 F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
438 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
439 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
440 { }
441 };
442
443 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
444 .cmd_rcgr = 0xc170,
445 .mnd_width = 0,
446 .hid_width = 5,
447 .parent_map = cam_cc_parent_map_0,
448 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
449 .clkr.hw.init = &(const struct clk_init_data) {
450 .name = "cam_cc_camnoc_axi_clk_src",
451 .parent_data = cam_cc_parent_data_0,
452 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
453 .flags = CLK_SET_RATE_PARENT,
454 .ops = &clk_rcg2_shared_ops,
455 },
456 };
457
458 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
459 F(19200000, P_BI_TCXO, 1, 0, 0),
460 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
461 { }
462 };
463
464 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
465 .cmd_rcgr = 0xc108,
466 .mnd_width = 8,
467 .hid_width = 5,
468 .parent_map = cam_cc_parent_map_0,
469 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
470 .clkr.hw.init = &(const struct clk_init_data) {
471 .name = "cam_cc_cci_0_clk_src",
472 .parent_data = cam_cc_parent_data_0,
473 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
474 .flags = CLK_SET_RATE_PARENT,
475 .ops = &clk_rcg2_shared_ops,
476 },
477 };
478
479 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
480 .cmd_rcgr = 0xc124,
481 .mnd_width = 8,
482 .hid_width = 5,
483 .parent_map = cam_cc_parent_map_0,
484 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
485 .clkr.hw.init = &(const struct clk_init_data) {
486 .name = "cam_cc_cci_1_clk_src",
487 .parent_data = cam_cc_parent_data_0,
488 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
489 .flags = CLK_SET_RATE_PARENT,
490 .ops = &clk_rcg2_shared_ops,
491 },
492 };
493
494 static struct clk_rcg2 cam_cc_cci_2_clk_src = {
495 .cmd_rcgr = 0xc204,
496 .mnd_width = 8,
497 .hid_width = 5,
498 .parent_map = cam_cc_parent_map_0,
499 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
500 .clkr.hw.init = &(const struct clk_init_data) {
501 .name = "cam_cc_cci_2_clk_src",
502 .parent_data = cam_cc_parent_data_0,
503 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
504 .flags = CLK_SET_RATE_PARENT,
505 .ops = &clk_rcg2_shared_ops,
506 },
507 };
508
509 static struct clk_rcg2 cam_cc_cci_3_clk_src = {
510 .cmd_rcgr = 0xc220,
511 .mnd_width = 8,
512 .hid_width = 5,
513 .parent_map = cam_cc_parent_map_0,
514 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
515 .clkr.hw.init = &(const struct clk_init_data) {
516 .name = "cam_cc_cci_3_clk_src",
517 .parent_data = cam_cc_parent_data_0,
518 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
519 .flags = CLK_SET_RATE_PARENT,
520 .ops = &clk_rcg2_shared_ops,
521 },
522 };
523
524 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
525 F(19200000, P_BI_TCXO, 1, 0, 0),
526 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
527 { }
528 };
529
530 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
531 .cmd_rcgr = 0xa064,
532 .mnd_width = 0,
533 .hid_width = 5,
534 .parent_map = cam_cc_parent_map_0,
535 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
536 .clkr.hw.init = &(const struct clk_init_data) {
537 .name = "cam_cc_cphy_rx_clk_src",
538 .parent_data = cam_cc_parent_data_0,
539 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
540 .flags = CLK_SET_RATE_PARENT,
541 .ops = &clk_rcg2_shared_ops,
542 },
543 };
544
545 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
546 F(19200000, P_BI_TCXO, 1, 0, 0),
547 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
548 { }
549 };
550
551 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
552 .cmd_rcgr = 0x6004,
553 .mnd_width = 0,
554 .hid_width = 5,
555 .parent_map = cam_cc_parent_map_0,
556 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
557 .clkr.hw.init = &(const struct clk_init_data) {
558 .name = "cam_cc_csi0phytimer_clk_src",
559 .parent_data = cam_cc_parent_data_0,
560 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
561 .flags = CLK_SET_RATE_PARENT,
562 .ops = &clk_rcg2_shared_ops,
563 },
564 };
565
566 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
567 .cmd_rcgr = 0x6028,
568 .mnd_width = 0,
569 .hid_width = 5,
570 .parent_map = cam_cc_parent_map_0,
571 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
572 .clkr.hw.init = &(const struct clk_init_data) {
573 .name = "cam_cc_csi1phytimer_clk_src",
574 .parent_data = cam_cc_parent_data_0,
575 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
576 .flags = CLK_SET_RATE_PARENT,
577 .ops = &clk_rcg2_shared_ops,
578 },
579 };
580
581 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
582 .cmd_rcgr = 0x604c,
583 .mnd_width = 0,
584 .hid_width = 5,
585 .parent_map = cam_cc_parent_map_0,
586 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
587 .clkr.hw.init = &(const struct clk_init_data) {
588 .name = "cam_cc_csi2phytimer_clk_src",
589 .parent_data = cam_cc_parent_data_0,
590 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
591 .flags = CLK_SET_RATE_PARENT,
592 .ops = &clk_rcg2_shared_ops,
593 },
594 };
595
596 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
597 .cmd_rcgr = 0x6070,
598 .mnd_width = 0,
599 .hid_width = 5,
600 .parent_map = cam_cc_parent_map_0,
601 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
602 .clkr.hw.init = &(const struct clk_init_data) {
603 .name = "cam_cc_csi3phytimer_clk_src",
604 .parent_data = cam_cc_parent_data_0,
605 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
606 .flags = CLK_SET_RATE_PARENT,
607 .ops = &clk_rcg2_shared_ops,
608 },
609 };
610
611 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
612 F(19200000, P_BI_TCXO, 1, 0, 0),
613 F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
614 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
615 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
616 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
617 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
618 { }
619 };
620
621 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
622 .cmd_rcgr = 0x703c,
623 .mnd_width = 0,
624 .hid_width = 5,
625 .parent_map = cam_cc_parent_map_0,
626 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
627 .clkr.hw.init = &(const struct clk_init_data) {
628 .name = "cam_cc_fast_ahb_clk_src",
629 .parent_data = cam_cc_parent_data_0,
630 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
631 .flags = CLK_SET_RATE_PARENT,
632 .ops = &clk_rcg2_shared_ops,
633 },
634 };
635
636 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
637 F(19200000, P_BI_TCXO, 1, 0, 0),
638 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
639 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
640 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
641 { }
642 };
643
644 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
645 .cmd_rcgr = 0xc0e0,
646 .mnd_width = 0,
647 .hid_width = 5,
648 .parent_map = cam_cc_parent_map_0,
649 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
650 .clkr.hw.init = &(const struct clk_init_data) {
651 .name = "cam_cc_fd_core_clk_src",
652 .parent_data = cam_cc_parent_data_0,
653 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
654 .flags = CLK_SET_RATE_PARENT,
655 .ops = &clk_rcg2_shared_ops,
656 },
657 };
658
659 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
660 F(19200000, P_BI_TCXO, 1, 0, 0),
661 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
662 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
663 { }
664 };
665
666 static struct clk_rcg2 cam_cc_icp_clk_src = {
667 .cmd_rcgr = 0xc0b8,
668 .mnd_width = 0,
669 .hid_width = 5,
670 .parent_map = cam_cc_parent_map_0,
671 .freq_tbl = ftbl_cam_cc_icp_clk_src,
672 .clkr.hw.init = &(const struct clk_init_data) {
673 .name = "cam_cc_icp_clk_src",
674 .parent_data = cam_cc_parent_data_0,
675 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
676 .flags = CLK_SET_RATE_PARENT,
677 .ops = &clk_rcg2_shared_ops,
678 },
679 };
680
681 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
682 F(19200000, P_BI_TCXO, 1, 0, 0),
683 F(400000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
684 F(558000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
685 F(637000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
686 F(760000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
687 { }
688 };
689
690 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
691 .cmd_rcgr = 0xa010,
692 .mnd_width = 0,
693 .hid_width = 5,
694 .parent_map = cam_cc_parent_map_2,
695 .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
696 .clkr.hw.init = &(const struct clk_init_data) {
697 .name = "cam_cc_ife_0_clk_src",
698 .parent_data = cam_cc_parent_data_2,
699 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
700 .flags = CLK_SET_RATE_PARENT,
701 .ops = &clk_rcg2_shared_ops,
702 },
703 };
704
705 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
706 F(19200000, P_BI_TCXO, 1, 0, 0),
707 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
708 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
709 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
710 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
711 { }
712 };
713
714 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
715 .cmd_rcgr = 0xa03c,
716 .mnd_width = 0,
717 .hid_width = 5,
718 .parent_map = cam_cc_parent_map_0,
719 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
720 .clkr.hw.init = &(const struct clk_init_data) {
721 .name = "cam_cc_ife_0_csid_clk_src",
722 .parent_data = cam_cc_parent_data_0,
723 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
724 .flags = CLK_SET_RATE_PARENT,
725 .ops = &clk_rcg2_shared_ops,
726 },
727 };
728
729 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
730 F(19200000, P_BI_TCXO, 1, 0, 0),
731 F(400000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
732 F(558000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
733 F(637000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
734 F(760000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
735 { }
736 };
737
738 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
739 .cmd_rcgr = 0xb010,
740 .mnd_width = 0,
741 .hid_width = 5,
742 .parent_map = cam_cc_parent_map_3,
743 .freq_tbl = ftbl_cam_cc_ife_1_clk_src,
744 .clkr.hw.init = &(const struct clk_init_data) {
745 .name = "cam_cc_ife_1_clk_src",
746 .parent_data = cam_cc_parent_data_3,
747 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
748 .flags = CLK_SET_RATE_PARENT,
749 .ops = &clk_rcg2_shared_ops,
750 },
751 };
752
753 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
754 .cmd_rcgr = 0xb034,
755 .mnd_width = 0,
756 .hid_width = 5,
757 .parent_map = cam_cc_parent_map_0,
758 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
759 .clkr.hw.init = &(const struct clk_init_data) {
760 .name = "cam_cc_ife_1_csid_clk_src",
761 .parent_data = cam_cc_parent_data_0,
762 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
763 .flags = CLK_SET_RATE_PARENT,
764 .ops = &clk_rcg2_shared_ops,
765 },
766 };
767
768 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
769 F(19200000, P_BI_TCXO, 1, 0, 0),
770 F(400000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
771 F(558000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
772 F(637000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
773 F(760000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
774 { }
775 };
776
777 static struct clk_rcg2 cam_cc_ife_2_clk_src = {
778 .cmd_rcgr = 0xf010,
779 .mnd_width = 0,
780 .hid_width = 5,
781 .parent_map = cam_cc_parent_map_4,
782 .freq_tbl = ftbl_cam_cc_ife_2_clk_src,
783 .clkr.hw.init = &(const struct clk_init_data) {
784 .name = "cam_cc_ife_2_clk_src",
785 .parent_data = cam_cc_parent_data_4,
786 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
787 .flags = CLK_SET_RATE_PARENT,
788 .ops = &clk_rcg2_shared_ops,
789 },
790 };
791
792 static struct clk_rcg2 cam_cc_ife_2_csid_clk_src = {
793 .cmd_rcgr = 0xf03c,
794 .mnd_width = 0,
795 .hid_width = 5,
796 .parent_map = cam_cc_parent_map_0,
797 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
798 .clkr.hw.init = &(const struct clk_init_data) {
799 .name = "cam_cc_ife_2_csid_clk_src",
800 .parent_data = cam_cc_parent_data_0,
801 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
802 .flags = CLK_SET_RATE_PARENT,
803 .ops = &clk_rcg2_shared_ops,
804 },
805 };
806
807 static const struct freq_tbl ftbl_cam_cc_ife_3_clk_src[] = {
808 F(19200000, P_BI_TCXO, 1, 0, 0),
809 F(400000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
810 F(558000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
811 F(637000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
812 F(760000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
813 { }
814 };
815
816 static struct clk_rcg2 cam_cc_ife_3_clk_src = {
817 .cmd_rcgr = 0xf07c,
818 .mnd_width = 0,
819 .hid_width = 5,
820 .parent_map = cam_cc_parent_map_5,
821 .freq_tbl = ftbl_cam_cc_ife_3_clk_src,
822 .clkr.hw.init = &(const struct clk_init_data) {
823 .name = "cam_cc_ife_3_clk_src",
824 .parent_data = cam_cc_parent_data_5,
825 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
826 .flags = CLK_SET_RATE_PARENT,
827 .ops = &clk_rcg2_shared_ops,
828 },
829 };
830
831 static struct clk_rcg2 cam_cc_ife_3_csid_clk_src = {
832 .cmd_rcgr = 0xf0a8,
833 .mnd_width = 0,
834 .hid_width = 5,
835 .parent_map = cam_cc_parent_map_0,
836 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
837 .clkr.hw.init = &(const struct clk_init_data) {
838 .name = "cam_cc_ife_3_csid_clk_src",
839 .parent_data = cam_cc_parent_data_0,
840 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
841 .flags = CLK_SET_RATE_PARENT,
842 .ops = &clk_rcg2_shared_ops,
843 },
844 };
845
846 static const struct freq_tbl ftbl_cam_cc_ife_lite_0_clk_src[] = {
847 F(19200000, P_BI_TCXO, 1, 0, 0),
848 F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
849 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
850 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1, 0, 0),
851 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
852 { }
853 };
854
855 static struct clk_rcg2 cam_cc_ife_lite_0_clk_src = {
856 .cmd_rcgr = 0xc004,
857 .mnd_width = 0,
858 .hid_width = 5,
859 .parent_map = cam_cc_parent_map_0,
860 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
861 .clkr.hw.init = &(const struct clk_init_data) {
862 .name = "cam_cc_ife_lite_0_clk_src",
863 .parent_data = cam_cc_parent_data_0,
864 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
865 .flags = CLK_SET_RATE_PARENT,
866 .ops = &clk_rcg2_shared_ops,
867 },
868 };
869
870 static struct clk_rcg2 cam_cc_ife_lite_0_csid_clk_src = {
871 .cmd_rcgr = 0xc020,
872 .mnd_width = 0,
873 .hid_width = 5,
874 .parent_map = cam_cc_parent_map_0,
875 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
876 .clkr.hw.init = &(const struct clk_init_data) {
877 .name = "cam_cc_ife_lite_0_csid_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_shared_ops,
882 },
883 };
884
885 static struct clk_rcg2 cam_cc_ife_lite_1_clk_src = {
886 .cmd_rcgr = 0xc048,
887 .mnd_width = 0,
888 .hid_width = 5,
889 .parent_map = cam_cc_parent_map_0,
890 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
891 .clkr.hw.init = &(const struct clk_init_data) {
892 .name = "cam_cc_ife_lite_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_shared_ops,
897 },
898 };
899
900 static struct clk_rcg2 cam_cc_ife_lite_1_csid_clk_src = {
901 .cmd_rcgr = 0xc064,
902 .mnd_width = 0,
903 .hid_width = 5,
904 .parent_map = cam_cc_parent_map_0,
905 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
906 .clkr.hw.init = &(const struct clk_init_data) {
907 .name = "cam_cc_ife_lite_1_csid_clk_src",
908 .parent_data = cam_cc_parent_data_0,
909 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
910 .flags = CLK_SET_RATE_PARENT,
911 .ops = &clk_rcg2_shared_ops,
912 },
913 };
914
915 static struct clk_rcg2 cam_cc_ife_lite_2_clk_src = {
916 .cmd_rcgr = 0xc240,
917 .mnd_width = 0,
918 .hid_width = 5,
919 .parent_map = cam_cc_parent_map_0,
920 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
921 .clkr.hw.init = &(const struct clk_init_data) {
922 .name = "cam_cc_ife_lite_2_clk_src",
923 .parent_data = cam_cc_parent_data_0,
924 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
925 .flags = CLK_SET_RATE_PARENT,
926 .ops = &clk_rcg2_shared_ops,
927 },
928 };
929
930 static struct clk_rcg2 cam_cc_ife_lite_2_csid_clk_src = {
931 .cmd_rcgr = 0xc25c,
932 .mnd_width = 0,
933 .hid_width = 5,
934 .parent_map = cam_cc_parent_map_0,
935 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
936 .clkr.hw.init = &(const struct clk_init_data) {
937 .name = "cam_cc_ife_lite_2_csid_clk_src",
938 .parent_data = cam_cc_parent_data_0,
939 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
940 .flags = CLK_SET_RATE_PARENT,
941 .ops = &clk_rcg2_shared_ops,
942 },
943 };
944
945 static struct clk_rcg2 cam_cc_ife_lite_3_clk_src = {
946 .cmd_rcgr = 0xc284,
947 .mnd_width = 0,
948 .hid_width = 5,
949 .parent_map = cam_cc_parent_map_0,
950 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
951 .clkr.hw.init = &(const struct clk_init_data) {
952 .name = "cam_cc_ife_lite_3_clk_src",
953 .parent_data = cam_cc_parent_data_0,
954 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
955 .flags = CLK_SET_RATE_PARENT,
956 .ops = &clk_rcg2_shared_ops,
957 },
958 };
959
960 static struct clk_rcg2 cam_cc_ife_lite_3_csid_clk_src = {
961 .cmd_rcgr = 0xc2a0,
962 .mnd_width = 0,
963 .hid_width = 5,
964 .parent_map = cam_cc_parent_map_0,
965 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
966 .clkr.hw.init = &(const struct clk_init_data) {
967 .name = "cam_cc_ife_lite_3_csid_clk_src",
968 .parent_data = cam_cc_parent_data_0,
969 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
970 .flags = CLK_SET_RATE_PARENT,
971 .ops = &clk_rcg2_shared_ops,
972 },
973 };
974
975 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
976 F(19200000, P_BI_TCXO, 1, 0, 0),
977 F(375000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
978 F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
979 F(520000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
980 F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
981 { }
982 };
983
984 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
985 .cmd_rcgr = 0x8010,
986 .mnd_width = 0,
987 .hid_width = 5,
988 .parent_map = cam_cc_parent_map_6,
989 .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
990 .clkr.hw.init = &(const struct clk_init_data) {
991 .name = "cam_cc_ipe_0_clk_src",
992 .parent_data = cam_cc_parent_data_6,
993 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
994 .flags = CLK_SET_RATE_PARENT,
995 .ops = &clk_rcg2_shared_ops,
996 },
997 };
998
999 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1000 .cmd_rcgr = 0xc08c,
1001 .mnd_width = 0,
1002 .hid_width = 5,
1003 .parent_map = cam_cc_parent_map_0,
1004 .freq_tbl = ftbl_cam_cc_bps_clk_src,
1005 .clkr.hw.init = &(const struct clk_init_data) {
1006 .name = "cam_cc_jpeg_clk_src",
1007 .parent_data = cam_cc_parent_data_0,
1008 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1009 .flags = CLK_SET_RATE_PARENT,
1010 .ops = &clk_rcg2_shared_ops,
1011 },
1012 };
1013
1014 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
1015 F(19200000, P_BI_TCXO, 1, 0, 0),
1016 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
1017 F(240000000, P_CAM_CC_PLL2_OUT_MAIN, 2, 0, 0),
1018 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
1019 F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
1020 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1021 { }
1022 };
1023
1024 static struct clk_rcg2 cam_cc_lrme_clk_src = {
1025 .cmd_rcgr = 0xc144,
1026 .mnd_width = 0,
1027 .hid_width = 5,
1028 .parent_map = cam_cc_parent_map_0,
1029 .freq_tbl = ftbl_cam_cc_lrme_clk_src,
1030 .clkr.hw.init = &(const struct clk_init_data) {
1031 .name = "cam_cc_lrme_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_shared_ops,
1036 },
1037 };
1038
1039 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1040 F(19200000, P_BI_TCXO, 1, 0, 0),
1041 F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 4),
1042 F(68571429, P_CAM_CC_PLL2_OUT_EARLY, 14, 0, 0),
1043 { }
1044 };
1045
1046 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1047 .cmd_rcgr = 0x5004,
1048 .mnd_width = 8,
1049 .hid_width = 5,
1050 .parent_map = cam_cc_parent_map_1,
1051 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1052 .clkr.hw.init = &(const struct clk_init_data) {
1053 .name = "cam_cc_mclk0_clk_src",
1054 .parent_data = cam_cc_parent_data_1,
1055 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1056 .flags = CLK_SET_RATE_PARENT,
1057 .ops = &clk_rcg2_shared_ops,
1058 },
1059 };
1060
1061 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1062 .cmd_rcgr = 0x5024,
1063 .mnd_width = 8,
1064 .hid_width = 5,
1065 .parent_map = cam_cc_parent_map_1,
1066 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1067 .clkr.hw.init = &(const struct clk_init_data) {
1068 .name = "cam_cc_mclk1_clk_src",
1069 .parent_data = cam_cc_parent_data_1,
1070 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1071 .flags = CLK_SET_RATE_PARENT,
1072 .ops = &clk_rcg2_shared_ops,
1073 },
1074 };
1075
1076 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1077 .cmd_rcgr = 0x5044,
1078 .mnd_width = 8,
1079 .hid_width = 5,
1080 .parent_map = cam_cc_parent_map_1,
1081 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1082 .clkr.hw.init = &(const struct clk_init_data) {
1083 .name = "cam_cc_mclk2_clk_src",
1084 .parent_data = cam_cc_parent_data_1,
1085 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1086 .flags = CLK_SET_RATE_PARENT,
1087 .ops = &clk_rcg2_shared_ops,
1088 },
1089 };
1090
1091 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1092 .cmd_rcgr = 0x5064,
1093 .mnd_width = 8,
1094 .hid_width = 5,
1095 .parent_map = cam_cc_parent_map_1,
1096 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1097 .clkr.hw.init = &(const struct clk_init_data) {
1098 .name = "cam_cc_mclk3_clk_src",
1099 .parent_data = cam_cc_parent_data_1,
1100 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1101 .flags = CLK_SET_RATE_PARENT,
1102 .ops = &clk_rcg2_shared_ops,
1103 },
1104 };
1105
1106 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1107 .cmd_rcgr = 0x5084,
1108 .mnd_width = 8,
1109 .hid_width = 5,
1110 .parent_map = cam_cc_parent_map_1,
1111 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1112 .clkr.hw.init = &(const struct clk_init_data) {
1113 .name = "cam_cc_mclk4_clk_src",
1114 .parent_data = cam_cc_parent_data_1,
1115 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1116 .flags = CLK_SET_RATE_PARENT,
1117 .ops = &clk_rcg2_shared_ops,
1118 },
1119 };
1120
1121 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1122 .cmd_rcgr = 0x50a4,
1123 .mnd_width = 8,
1124 .hid_width = 5,
1125 .parent_map = cam_cc_parent_map_1,
1126 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1127 .clkr.hw.init = &(const struct clk_init_data) {
1128 .name = "cam_cc_mclk5_clk_src",
1129 .parent_data = cam_cc_parent_data_1,
1130 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1131 .flags = CLK_SET_RATE_PARENT,
1132 .ops = &clk_rcg2_shared_ops,
1133 },
1134 };
1135
1136 static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1137 .cmd_rcgr = 0x50c4,
1138 .mnd_width = 8,
1139 .hid_width = 5,
1140 .parent_map = cam_cc_parent_map_1,
1141 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1142 .clkr.hw.init = &(const struct clk_init_data) {
1143 .name = "cam_cc_mclk6_clk_src",
1144 .parent_data = cam_cc_parent_data_1,
1145 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1146 .flags = CLK_SET_RATE_PARENT,
1147 .ops = &clk_rcg2_shared_ops,
1148 },
1149 };
1150
1151 static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1152 .cmd_rcgr = 0x50e4,
1153 .mnd_width = 8,
1154 .hid_width = 5,
1155 .parent_map = cam_cc_parent_map_1,
1156 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1157 .clkr.hw.init = &(const struct clk_init_data) {
1158 .name = "cam_cc_mclk7_clk_src",
1159 .parent_data = cam_cc_parent_data_1,
1160 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1161 .flags = CLK_SET_RATE_PARENT,
1162 .ops = &clk_rcg2_shared_ops,
1163 },
1164 };
1165
1166 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1167 F(19200000, P_BI_TCXO, 1, 0, 0),
1168 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1169 { }
1170 };
1171
1172 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1173 .cmd_rcgr = 0x7058,
1174 .mnd_width = 8,
1175 .hid_width = 5,
1176 .parent_map = cam_cc_parent_map_0,
1177 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1178 .clkr.hw.init = &(const struct clk_init_data) {
1179 .name = "cam_cc_slow_ahb_clk_src",
1180 .parent_data = cam_cc_parent_data_0,
1181 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1182 .flags = CLK_SET_RATE_PARENT,
1183 .ops = &clk_rcg2_shared_ops,
1184 },
1185 };
1186
1187 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1188 F(19200000, P_BI_TCXO, 1, 0, 0),
1189 { }
1190 };
1191
1192 static struct clk_rcg2 cam_cc_xo_clk_src = {
1193 .cmd_rcgr = 0xc1cc,
1194 .mnd_width = 0,
1195 .hid_width = 5,
1196 .parent_map = cam_cc_parent_map_7,
1197 .freq_tbl = ftbl_cam_cc_xo_clk_src,
1198 .clkr.hw.init = &(const struct clk_init_data) {
1199 .name = "cam_cc_xo_clk_src",
1200 .parent_data = cam_cc_parent_data_7,
1201 .num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1202 .flags = CLK_SET_RATE_PARENT,
1203 .ops = &clk_rcg2_shared_ops,
1204 },
1205 };
1206
1207 static struct clk_branch cam_cc_bps_ahb_clk = {
1208 .halt_reg = 0x7070,
1209 .halt_check = BRANCH_HALT,
1210 .clkr = {
1211 .enable_reg = 0x7070,
1212 .enable_mask = BIT(0),
1213 .hw.init = &(const struct clk_init_data) {
1214 .name = "cam_cc_bps_ahb_clk",
1215 .parent_hws = (const struct clk_hw*[]) {
1216 &cam_cc_slow_ahb_clk_src.clkr.hw,
1217 },
1218 .num_parents = 1,
1219 .flags = CLK_SET_RATE_PARENT,
1220 .ops = &clk_branch2_ops,
1221 },
1222 },
1223 };
1224
1225 static struct clk_branch cam_cc_bps_areg_clk = {
1226 .halt_reg = 0x7054,
1227 .halt_check = BRANCH_HALT,
1228 .clkr = {
1229 .enable_reg = 0x7054,
1230 .enable_mask = BIT(0),
1231 .hw.init = &(const struct clk_init_data) {
1232 .name = "cam_cc_bps_areg_clk",
1233 .parent_hws = (const struct clk_hw*[]) {
1234 &cam_cc_fast_ahb_clk_src.clkr.hw,
1235 },
1236 .num_parents = 1,
1237 .flags = CLK_SET_RATE_PARENT,
1238 .ops = &clk_branch2_ops,
1239 },
1240 },
1241 };
1242
1243 static struct clk_branch cam_cc_bps_axi_clk = {
1244 .halt_reg = 0x7038,
1245 .halt_check = BRANCH_HALT,
1246 .clkr = {
1247 .enable_reg = 0x7038,
1248 .enable_mask = BIT(0),
1249 .hw.init = &(const struct clk_init_data) {
1250 .name = "cam_cc_bps_axi_clk",
1251 .parent_hws = (const struct clk_hw*[]) {
1252 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1253 },
1254 .num_parents = 1,
1255 .flags = CLK_SET_RATE_PARENT,
1256 .ops = &clk_branch2_ops,
1257 },
1258 },
1259 };
1260
1261 static struct clk_branch cam_cc_bps_clk = {
1262 .halt_reg = 0x7028,
1263 .halt_check = BRANCH_HALT,
1264 .clkr = {
1265 .enable_reg = 0x7028,
1266 .enable_mask = BIT(0),
1267 .hw.init = &(const struct clk_init_data) {
1268 .name = "cam_cc_bps_clk",
1269 .parent_hws = (const struct clk_hw*[]) {
1270 &cam_cc_bps_clk_src.clkr.hw,
1271 },
1272 .num_parents = 1,
1273 .flags = CLK_SET_RATE_PARENT,
1274 .ops = &clk_branch2_ops,
1275 },
1276 },
1277 };
1278
1279 static struct clk_branch cam_cc_camnoc_axi_clk = {
1280 .halt_reg = 0xc18c,
1281 .halt_check = BRANCH_HALT,
1282 .clkr = {
1283 .enable_reg = 0xc18c,
1284 .enable_mask = BIT(0),
1285 .hw.init = &(const struct clk_init_data) {
1286 .name = "cam_cc_camnoc_axi_clk",
1287 .parent_hws = (const struct clk_hw*[]) {
1288 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1289 },
1290 .num_parents = 1,
1291 .flags = CLK_SET_RATE_PARENT,
1292 .ops = &clk_branch2_ops,
1293 },
1294 },
1295 };
1296
1297 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1298 .halt_reg = 0xc194,
1299 .halt_check = BRANCH_HALT,
1300 .clkr = {
1301 .enable_reg = 0xc194,
1302 .enable_mask = BIT(0),
1303 .hw.init = &(const struct clk_init_data) {
1304 .name = "cam_cc_camnoc_dcd_xo_clk",
1305 .parent_hws = (const struct clk_hw*[]) {
1306 &cam_cc_xo_clk_src.clkr.hw,
1307 },
1308 .num_parents = 1,
1309 .flags = CLK_SET_RATE_PARENT,
1310 .ops = &clk_branch2_ops,
1311 },
1312 },
1313 };
1314
1315 static struct clk_branch cam_cc_cci_0_clk = {
1316 .halt_reg = 0xc120,
1317 .halt_check = BRANCH_HALT,
1318 .clkr = {
1319 .enable_reg = 0xc120,
1320 .enable_mask = BIT(0),
1321 .hw.init = &(const struct clk_init_data) {
1322 .name = "cam_cc_cci_0_clk",
1323 .parent_hws = (const struct clk_hw*[]) {
1324 &cam_cc_cci_0_clk_src.clkr.hw,
1325 },
1326 .num_parents = 1,
1327 .flags = CLK_SET_RATE_PARENT,
1328 .ops = &clk_branch2_ops,
1329 },
1330 },
1331 };
1332
1333 static struct clk_branch cam_cc_cci_1_clk = {
1334 .halt_reg = 0xc13c,
1335 .halt_check = BRANCH_HALT,
1336 .clkr = {
1337 .enable_reg = 0xc13c,
1338 .enable_mask = BIT(0),
1339 .hw.init = &(const struct clk_init_data) {
1340 .name = "cam_cc_cci_1_clk",
1341 .parent_hws = (const struct clk_hw*[]) {
1342 &cam_cc_cci_1_clk_src.clkr.hw,
1343 },
1344 .num_parents = 1,
1345 .flags = CLK_SET_RATE_PARENT,
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349 };
1350
1351 static struct clk_branch cam_cc_cci_2_clk = {
1352 .halt_reg = 0xc21c,
1353 .halt_check = BRANCH_HALT,
1354 .clkr = {
1355 .enable_reg = 0xc21c,
1356 .enable_mask = BIT(0),
1357 .hw.init = &(const struct clk_init_data) {
1358 .name = "cam_cc_cci_2_clk",
1359 .parent_hws = (const struct clk_hw*[]) {
1360 &cam_cc_cci_2_clk_src.clkr.hw,
1361 },
1362 .num_parents = 1,
1363 .flags = CLK_SET_RATE_PARENT,
1364 .ops = &clk_branch2_ops,
1365 },
1366 },
1367 };
1368
1369 static struct clk_branch cam_cc_cci_3_clk = {
1370 .halt_reg = 0xc238,
1371 .halt_check = BRANCH_HALT,
1372 .clkr = {
1373 .enable_reg = 0xc238,
1374 .enable_mask = BIT(0),
1375 .hw.init = &(const struct clk_init_data) {
1376 .name = "cam_cc_cci_3_clk",
1377 .parent_hws = (const struct clk_hw*[]) {
1378 &cam_cc_cci_3_clk_src.clkr.hw,
1379 },
1380 .num_parents = 1,
1381 .flags = CLK_SET_RATE_PARENT,
1382 .ops = &clk_branch2_ops,
1383 },
1384 },
1385 };
1386
1387 static struct clk_branch cam_cc_core_ahb_clk = {
1388 .halt_reg = 0xc1c8,
1389 .halt_check = BRANCH_HALT_VOTED,
1390 .clkr = {
1391 .enable_reg = 0xc1c8,
1392 .enable_mask = BIT(0),
1393 .hw.init = &(const struct clk_init_data) {
1394 .name = "cam_cc_core_ahb_clk",
1395 .parent_hws = (const struct clk_hw*[]) {
1396 &cam_cc_slow_ahb_clk_src.clkr.hw,
1397 },
1398 .num_parents = 1,
1399 .flags = CLK_SET_RATE_PARENT,
1400 .ops = &clk_branch2_ops,
1401 },
1402 },
1403 };
1404
1405 static struct clk_branch cam_cc_cpas_ahb_clk = {
1406 .halt_reg = 0xc168,
1407 .halt_check = BRANCH_HALT,
1408 .clkr = {
1409 .enable_reg = 0xc168,
1410 .enable_mask = BIT(0),
1411 .hw.init = &(const struct clk_init_data) {
1412 .name = "cam_cc_cpas_ahb_clk",
1413 .parent_hws = (const struct clk_hw*[]) {
1414 &cam_cc_slow_ahb_clk_src.clkr.hw,
1415 },
1416 .num_parents = 1,
1417 .flags = CLK_SET_RATE_PARENT,
1418 .ops = &clk_branch2_ops,
1419 },
1420 },
1421 };
1422
1423 static struct clk_branch cam_cc_csi0phytimer_clk = {
1424 .halt_reg = 0x601c,
1425 .halt_check = BRANCH_HALT,
1426 .clkr = {
1427 .enable_reg = 0x601c,
1428 .enable_mask = BIT(0),
1429 .hw.init = &(const struct clk_init_data) {
1430 .name = "cam_cc_csi0phytimer_clk",
1431 .parent_hws = (const struct clk_hw*[]) {
1432 &cam_cc_csi0phytimer_clk_src.clkr.hw,
1433 },
1434 .num_parents = 1,
1435 .flags = CLK_SET_RATE_PARENT,
1436 .ops = &clk_branch2_ops,
1437 },
1438 },
1439 };
1440
1441 static struct clk_branch cam_cc_csi1phytimer_clk = {
1442 .halt_reg = 0x6040,
1443 .halt_check = BRANCH_HALT,
1444 .clkr = {
1445 .enable_reg = 0x6040,
1446 .enable_mask = BIT(0),
1447 .hw.init = &(const struct clk_init_data) {
1448 .name = "cam_cc_csi1phytimer_clk",
1449 .parent_hws = (const struct clk_hw*[]) {
1450 &cam_cc_csi1phytimer_clk_src.clkr.hw,
1451 },
1452 .num_parents = 1,
1453 .flags = CLK_SET_RATE_PARENT,
1454 .ops = &clk_branch2_ops,
1455 },
1456 },
1457 };
1458
1459 static struct clk_branch cam_cc_csi2phytimer_clk = {
1460 .halt_reg = 0x6064,
1461 .halt_check = BRANCH_HALT,
1462 .clkr = {
1463 .enable_reg = 0x6064,
1464 .enable_mask = BIT(0),
1465 .hw.init = &(const struct clk_init_data) {
1466 .name = "cam_cc_csi2phytimer_clk",
1467 .parent_hws = (const struct clk_hw*[]) {
1468 &cam_cc_csi2phytimer_clk_src.clkr.hw,
1469 },
1470 .num_parents = 1,
1471 .flags = CLK_SET_RATE_PARENT,
1472 .ops = &clk_branch2_ops,
1473 },
1474 },
1475 };
1476
1477 static struct clk_branch cam_cc_csi3phytimer_clk = {
1478 .halt_reg = 0x6088,
1479 .halt_check = BRANCH_HALT,
1480 .clkr = {
1481 .enable_reg = 0x6088,
1482 .enable_mask = BIT(0),
1483 .hw.init = &(const struct clk_init_data) {
1484 .name = "cam_cc_csi3phytimer_clk",
1485 .parent_hws = (const struct clk_hw*[]) {
1486 &cam_cc_csi3phytimer_clk_src.clkr.hw,
1487 },
1488 .num_parents = 1,
1489 .flags = CLK_SET_RATE_PARENT,
1490 .ops = &clk_branch2_ops,
1491 },
1492 },
1493 };
1494
1495 static struct clk_branch cam_cc_csiphy0_clk = {
1496 .halt_reg = 0x6020,
1497 .halt_check = BRANCH_HALT,
1498 .clkr = {
1499 .enable_reg = 0x6020,
1500 .enable_mask = BIT(0),
1501 .hw.init = &(const struct clk_init_data) {
1502 .name = "cam_cc_csiphy0_clk",
1503 .parent_hws = (const struct clk_hw*[]) {
1504 &cam_cc_cphy_rx_clk_src.clkr.hw,
1505 },
1506 .num_parents = 1,
1507 .flags = CLK_SET_RATE_PARENT,
1508 .ops = &clk_branch2_ops,
1509 },
1510 },
1511 };
1512
1513 static struct clk_branch cam_cc_csiphy1_clk = {
1514 .halt_reg = 0x6044,
1515 .halt_check = BRANCH_HALT,
1516 .clkr = {
1517 .enable_reg = 0x6044,
1518 .enable_mask = BIT(0),
1519 .hw.init = &(const struct clk_init_data) {
1520 .name = "cam_cc_csiphy1_clk",
1521 .parent_hws = (const struct clk_hw*[]) {
1522 &cam_cc_cphy_rx_clk_src.clkr.hw,
1523 },
1524 .num_parents = 1,
1525 .flags = CLK_SET_RATE_PARENT,
1526 .ops = &clk_branch2_ops,
1527 },
1528 },
1529 };
1530
1531 static struct clk_branch cam_cc_csiphy2_clk = {
1532 .halt_reg = 0x6068,
1533 .halt_check = BRANCH_HALT,
1534 .clkr = {
1535 .enable_reg = 0x6068,
1536 .enable_mask = BIT(0),
1537 .hw.init = &(const struct clk_init_data) {
1538 .name = "cam_cc_csiphy2_clk",
1539 .parent_hws = (const struct clk_hw*[]) {
1540 &cam_cc_cphy_rx_clk_src.clkr.hw,
1541 },
1542 .num_parents = 1,
1543 .flags = CLK_SET_RATE_PARENT,
1544 .ops = &clk_branch2_ops,
1545 },
1546 },
1547 };
1548
1549 static struct clk_branch cam_cc_csiphy3_clk = {
1550 .halt_reg = 0x608c,
1551 .halt_check = BRANCH_HALT,
1552 .clkr = {
1553 .enable_reg = 0x608c,
1554 .enable_mask = BIT(0),
1555 .hw.init = &(const struct clk_init_data) {
1556 .name = "cam_cc_csiphy3_clk",
1557 .parent_hws = (const struct clk_hw*[]) {
1558 &cam_cc_cphy_rx_clk_src.clkr.hw,
1559 },
1560 .num_parents = 1,
1561 .flags = CLK_SET_RATE_PARENT,
1562 .ops = &clk_branch2_ops,
1563 },
1564 },
1565 };
1566
1567 static struct clk_branch cam_cc_fd_core_clk = {
1568 .halt_reg = 0xc0f8,
1569 .halt_check = BRANCH_HALT,
1570 .clkr = {
1571 .enable_reg = 0xc0f8,
1572 .enable_mask = BIT(0),
1573 .hw.init = &(const struct clk_init_data) {
1574 .name = "cam_cc_fd_core_clk",
1575 .parent_hws = (const struct clk_hw*[]) {
1576 &cam_cc_fd_core_clk_src.clkr.hw,
1577 },
1578 .num_parents = 1,
1579 .flags = CLK_SET_RATE_PARENT,
1580 .ops = &clk_branch2_ops,
1581 },
1582 },
1583 };
1584
1585 static struct clk_branch cam_cc_fd_core_uar_clk = {
1586 .halt_reg = 0xc100,
1587 .halt_check = BRANCH_HALT,
1588 .clkr = {
1589 .enable_reg = 0xc100,
1590 .enable_mask = BIT(0),
1591 .hw.init = &(const struct clk_init_data) {
1592 .name = "cam_cc_fd_core_uar_clk",
1593 .parent_hws = (const struct clk_hw*[]) {
1594 &cam_cc_fd_core_clk_src.clkr.hw,
1595 },
1596 .num_parents = 1,
1597 .flags = CLK_SET_RATE_PARENT,
1598 .ops = &clk_branch2_ops,
1599 },
1600 },
1601 };
1602
1603 static struct clk_branch cam_cc_icp_ahb_clk = {
1604 .halt_reg = 0xc0d8,
1605 .halt_check = BRANCH_HALT,
1606 .clkr = {
1607 .enable_reg = 0xc0d8,
1608 .enable_mask = BIT(0),
1609 .hw.init = &(const struct clk_init_data) {
1610 .name = "cam_cc_icp_ahb_clk",
1611 .parent_hws = (const struct clk_hw*[]) {
1612 &cam_cc_slow_ahb_clk_src.clkr.hw,
1613 },
1614 .num_parents = 1,
1615 .flags = CLK_SET_RATE_PARENT,
1616 .ops = &clk_branch2_ops,
1617 },
1618 },
1619 };
1620
1621 static struct clk_branch cam_cc_icp_clk = {
1622 .halt_reg = 0xc0d0,
1623 .halt_check = BRANCH_HALT,
1624 .clkr = {
1625 .enable_reg = 0xc0d0,
1626 .enable_mask = BIT(0),
1627 .hw.init = &(const struct clk_init_data) {
1628 .name = "cam_cc_icp_clk",
1629 .parent_hws = (const struct clk_hw*[]) {
1630 &cam_cc_icp_clk_src.clkr.hw,
1631 },
1632 .num_parents = 1,
1633 .flags = CLK_SET_RATE_PARENT,
1634 .ops = &clk_branch2_ops,
1635 },
1636 },
1637 };
1638
1639 static struct clk_branch cam_cc_ife_0_axi_clk = {
1640 .halt_reg = 0xa080,
1641 .halt_check = BRANCH_HALT,
1642 .clkr = {
1643 .enable_reg = 0xa080,
1644 .enable_mask = BIT(0),
1645 .hw.init = &(const struct clk_init_data) {
1646 .name = "cam_cc_ife_0_axi_clk",
1647 .parent_hws = (const struct clk_hw*[]) {
1648 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1649 },
1650 .num_parents = 1,
1651 .flags = CLK_SET_RATE_PARENT,
1652 .ops = &clk_branch2_ops,
1653 },
1654 },
1655 };
1656
1657 static struct clk_branch cam_cc_ife_0_clk = {
1658 .halt_reg = 0xa028,
1659 .halt_check = BRANCH_HALT,
1660 .clkr = {
1661 .enable_reg = 0xa028,
1662 .enable_mask = BIT(0),
1663 .hw.init = &(const struct clk_init_data) {
1664 .name = "cam_cc_ife_0_clk",
1665 .parent_hws = (const struct clk_hw*[]) {
1666 &cam_cc_ife_0_clk_src.clkr.hw,
1667 },
1668 .num_parents = 1,
1669 .flags = CLK_SET_RATE_PARENT,
1670 .ops = &clk_branch2_ops,
1671 },
1672 },
1673 };
1674
1675 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1676 .halt_reg = 0xa07c,
1677 .halt_check = BRANCH_HALT,
1678 .clkr = {
1679 .enable_reg = 0xa07c,
1680 .enable_mask = BIT(0),
1681 .hw.init = &(const struct clk_init_data) {
1682 .name = "cam_cc_ife_0_cphy_rx_clk",
1683 .parent_hws = (const struct clk_hw*[]) {
1684 &cam_cc_cphy_rx_clk_src.clkr.hw,
1685 },
1686 .num_parents = 1,
1687 .flags = CLK_SET_RATE_PARENT,
1688 .ops = &clk_branch2_ops,
1689 },
1690 },
1691 };
1692
1693 static struct clk_branch cam_cc_ife_0_csid_clk = {
1694 .halt_reg = 0xa054,
1695 .halt_check = BRANCH_HALT,
1696 .clkr = {
1697 .enable_reg = 0xa054,
1698 .enable_mask = BIT(0),
1699 .hw.init = &(const struct clk_init_data) {
1700 .name = "cam_cc_ife_0_csid_clk",
1701 .parent_hws = (const struct clk_hw*[]) {
1702 &cam_cc_ife_0_csid_clk_src.clkr.hw,
1703 },
1704 .num_parents = 1,
1705 .flags = CLK_SET_RATE_PARENT,
1706 .ops = &clk_branch2_ops,
1707 },
1708 },
1709 };
1710
1711 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1712 .halt_reg = 0xa038,
1713 .halt_check = BRANCH_HALT,
1714 .clkr = {
1715 .enable_reg = 0xa038,
1716 .enable_mask = BIT(0),
1717 .hw.init = &(const struct clk_init_data) {
1718 .name = "cam_cc_ife_0_dsp_clk",
1719 .parent_hws = (const struct clk_hw*[]) {
1720 &cam_cc_ife_0_clk_src.clkr.hw,
1721 },
1722 .num_parents = 1,
1723 .flags = CLK_SET_RATE_PARENT,
1724 .ops = &clk_branch2_ops,
1725 },
1726 },
1727 };
1728
1729 static struct clk_branch cam_cc_ife_1_axi_clk = {
1730 .halt_reg = 0xb058,
1731 .halt_check = BRANCH_HALT,
1732 .clkr = {
1733 .enable_reg = 0xb058,
1734 .enable_mask = BIT(0),
1735 .hw.init = &(const struct clk_init_data) {
1736 .name = "cam_cc_ife_1_axi_clk",
1737 .parent_hws = (const struct clk_hw*[]) {
1738 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1739 },
1740 .num_parents = 1,
1741 .flags = CLK_SET_RATE_PARENT,
1742 .ops = &clk_branch2_ops,
1743 },
1744 },
1745 };
1746
1747 static struct clk_branch cam_cc_ife_1_clk = {
1748 .halt_reg = 0xb028,
1749 .halt_check = BRANCH_HALT,
1750 .clkr = {
1751 .enable_reg = 0xb028,
1752 .enable_mask = BIT(0),
1753 .hw.init = &(const struct clk_init_data) {
1754 .name = "cam_cc_ife_1_clk",
1755 .parent_hws = (const struct clk_hw*[]) {
1756 &cam_cc_ife_1_clk_src.clkr.hw,
1757 },
1758 .num_parents = 1,
1759 .flags = CLK_SET_RATE_PARENT,
1760 .ops = &clk_branch2_ops,
1761 },
1762 },
1763 };
1764
1765 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1766 .halt_reg = 0xb054,
1767 .halt_check = BRANCH_HALT,
1768 .clkr = {
1769 .enable_reg = 0xb054,
1770 .enable_mask = BIT(0),
1771 .hw.init = &(const struct clk_init_data) {
1772 .name = "cam_cc_ife_1_cphy_rx_clk",
1773 .parent_hws = (const struct clk_hw*[]) {
1774 &cam_cc_cphy_rx_clk_src.clkr.hw,
1775 },
1776 .num_parents = 1,
1777 .flags = CLK_SET_RATE_PARENT,
1778 .ops = &clk_branch2_ops,
1779 },
1780 },
1781 };
1782
1783 static struct clk_branch cam_cc_ife_1_csid_clk = {
1784 .halt_reg = 0xb04c,
1785 .halt_check = BRANCH_HALT,
1786 .clkr = {
1787 .enable_reg = 0xb04c,
1788 .enable_mask = BIT(0),
1789 .hw.init = &(const struct clk_init_data) {
1790 .name = "cam_cc_ife_1_csid_clk",
1791 .parent_hws = (const struct clk_hw*[]) {
1792 &cam_cc_ife_1_csid_clk_src.clkr.hw,
1793 },
1794 .num_parents = 1,
1795 .flags = CLK_SET_RATE_PARENT,
1796 .ops = &clk_branch2_ops,
1797 },
1798 },
1799 };
1800
1801 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1802 .halt_reg = 0xb030,
1803 .halt_check = BRANCH_HALT,
1804 .clkr = {
1805 .enable_reg = 0xb030,
1806 .enable_mask = BIT(0),
1807 .hw.init = &(const struct clk_init_data) {
1808 .name = "cam_cc_ife_1_dsp_clk",
1809 .parent_hws = (const struct clk_hw*[]) {
1810 &cam_cc_ife_1_clk_src.clkr.hw,
1811 },
1812 .num_parents = 1,
1813 .flags = CLK_SET_RATE_PARENT,
1814 .ops = &clk_branch2_ops,
1815 },
1816 },
1817 };
1818
1819 static struct clk_branch cam_cc_ife_2_axi_clk = {
1820 .halt_reg = 0xf068,
1821 .halt_check = BRANCH_HALT,
1822 .clkr = {
1823 .enable_reg = 0xf068,
1824 .enable_mask = BIT(0),
1825 .hw.init = &(const struct clk_init_data) {
1826 .name = "cam_cc_ife_2_axi_clk",
1827 .parent_hws = (const struct clk_hw*[]) {
1828 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1829 },
1830 .num_parents = 1,
1831 .flags = CLK_SET_RATE_PARENT,
1832 .ops = &clk_branch2_ops,
1833 },
1834 },
1835 };
1836
1837 static struct clk_branch cam_cc_ife_2_clk = {
1838 .halt_reg = 0xf028,
1839 .halt_check = BRANCH_HALT,
1840 .clkr = {
1841 .enable_reg = 0xf028,
1842 .enable_mask = BIT(0),
1843 .hw.init = &(const struct clk_init_data) {
1844 .name = "cam_cc_ife_2_clk",
1845 .parent_hws = (const struct clk_hw*[]) {
1846 &cam_cc_ife_2_clk_src.clkr.hw,
1847 },
1848 .num_parents = 1,
1849 .flags = CLK_SET_RATE_PARENT,
1850 .ops = &clk_branch2_ops,
1851 },
1852 },
1853 };
1854
1855 static struct clk_branch cam_cc_ife_2_cphy_rx_clk = {
1856 .halt_reg = 0xf064,
1857 .halt_check = BRANCH_HALT,
1858 .clkr = {
1859 .enable_reg = 0xf064,
1860 .enable_mask = BIT(0),
1861 .hw.init = &(const struct clk_init_data) {
1862 .name = "cam_cc_ife_2_cphy_rx_clk",
1863 .parent_hws = (const struct clk_hw*[]) {
1864 &cam_cc_cphy_rx_clk_src.clkr.hw,
1865 },
1866 .num_parents = 1,
1867 .flags = CLK_SET_RATE_PARENT,
1868 .ops = &clk_branch2_ops,
1869 },
1870 },
1871 };
1872
1873 static struct clk_branch cam_cc_ife_2_csid_clk = {
1874 .halt_reg = 0xf054,
1875 .halt_check = BRANCH_HALT,
1876 .clkr = {
1877 .enable_reg = 0xf054,
1878 .enable_mask = BIT(0),
1879 .hw.init = &(const struct clk_init_data) {
1880 .name = "cam_cc_ife_2_csid_clk",
1881 .parent_hws = (const struct clk_hw*[]) {
1882 &cam_cc_ife_2_csid_clk_src.clkr.hw,
1883 },
1884 .num_parents = 1,
1885 .flags = CLK_SET_RATE_PARENT,
1886 .ops = &clk_branch2_ops,
1887 },
1888 },
1889 };
1890
1891 static struct clk_branch cam_cc_ife_2_dsp_clk = {
1892 .halt_reg = 0xf038,
1893 .halt_check = BRANCH_HALT,
1894 .clkr = {
1895 .enable_reg = 0xf038,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(const struct clk_init_data) {
1898 .name = "cam_cc_ife_2_dsp_clk",
1899 .parent_hws = (const struct clk_hw*[]) {
1900 &cam_cc_ife_2_clk_src.clkr.hw,
1901 },
1902 .num_parents = 1,
1903 .flags = CLK_SET_RATE_PARENT,
1904 .ops = &clk_branch2_ops,
1905 },
1906 },
1907 };
1908
1909 static struct clk_branch cam_cc_ife_3_axi_clk = {
1910 .halt_reg = 0xf0d4,
1911 .halt_check = BRANCH_HALT,
1912 .clkr = {
1913 .enable_reg = 0xf0d4,
1914 .enable_mask = BIT(0),
1915 .hw.init = &(const struct clk_init_data) {
1916 .name = "cam_cc_ife_3_axi_clk",
1917 .parent_hws = (const struct clk_hw*[]) {
1918 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1919 },
1920 .num_parents = 1,
1921 .flags = CLK_SET_RATE_PARENT,
1922 .ops = &clk_branch2_ops,
1923 },
1924 },
1925 };
1926
1927 static struct clk_branch cam_cc_ife_3_clk = {
1928 .halt_reg = 0xf094,
1929 .halt_check = BRANCH_HALT,
1930 .clkr = {
1931 .enable_reg = 0xf094,
1932 .enable_mask = BIT(0),
1933 .hw.init = &(const struct clk_init_data) {
1934 .name = "cam_cc_ife_3_clk",
1935 .parent_hws = (const struct clk_hw*[]) {
1936 &cam_cc_ife_3_clk_src.clkr.hw,
1937 },
1938 .num_parents = 1,
1939 .flags = CLK_SET_RATE_PARENT,
1940 .ops = &clk_branch2_ops,
1941 },
1942 },
1943 };
1944
1945 static struct clk_branch cam_cc_ife_3_cphy_rx_clk = {
1946 .halt_reg = 0xf0d0,
1947 .halt_check = BRANCH_HALT,
1948 .clkr = {
1949 .enable_reg = 0xf0d0,
1950 .enable_mask = BIT(0),
1951 .hw.init = &(const struct clk_init_data) {
1952 .name = "cam_cc_ife_3_cphy_rx_clk",
1953 .parent_hws = (const struct clk_hw*[]) {
1954 &cam_cc_cphy_rx_clk_src.clkr.hw,
1955 },
1956 .num_parents = 1,
1957 .flags = CLK_SET_RATE_PARENT,
1958 .ops = &clk_branch2_ops,
1959 },
1960 },
1961 };
1962
1963 static struct clk_branch cam_cc_ife_3_csid_clk = {
1964 .halt_reg = 0xf0c0,
1965 .halt_check = BRANCH_HALT,
1966 .clkr = {
1967 .enable_reg = 0xf0c0,
1968 .enable_mask = BIT(0),
1969 .hw.init = &(const struct clk_init_data) {
1970 .name = "cam_cc_ife_3_csid_clk",
1971 .parent_hws = (const struct clk_hw*[]) {
1972 &cam_cc_ife_3_csid_clk_src.clkr.hw,
1973 },
1974 .num_parents = 1,
1975 .flags = CLK_SET_RATE_PARENT,
1976 .ops = &clk_branch2_ops,
1977 },
1978 },
1979 };
1980
1981 static struct clk_branch cam_cc_ife_3_dsp_clk = {
1982 .halt_reg = 0xf0a4,
1983 .halt_check = BRANCH_HALT,
1984 .clkr = {
1985 .enable_reg = 0xf0a4,
1986 .enable_mask = BIT(0),
1987 .hw.init = &(const struct clk_init_data) {
1988 .name = "cam_cc_ife_3_dsp_clk",
1989 .parent_hws = (const struct clk_hw*[]) {
1990 &cam_cc_ife_3_clk_src.clkr.hw,
1991 },
1992 .num_parents = 1,
1993 .flags = CLK_SET_RATE_PARENT,
1994 .ops = &clk_branch2_ops,
1995 },
1996 },
1997 };
1998
1999 static struct clk_branch cam_cc_ife_lite_0_clk = {
2000 .halt_reg = 0xc01c,
2001 .halt_check = BRANCH_HALT,
2002 .clkr = {
2003 .enable_reg = 0xc01c,
2004 .enable_mask = BIT(0),
2005 .hw.init = &(const struct clk_init_data) {
2006 .name = "cam_cc_ife_lite_0_clk",
2007 .parent_hws = (const struct clk_hw*[]) {
2008 &cam_cc_ife_lite_0_clk_src.clkr.hw,
2009 },
2010 .num_parents = 1,
2011 .flags = CLK_SET_RATE_PARENT,
2012 .ops = &clk_branch2_ops,
2013 },
2014 },
2015 };
2016
2017 static struct clk_branch cam_cc_ife_lite_0_cphy_rx_clk = {
2018 .halt_reg = 0xc040,
2019 .halt_check = BRANCH_HALT,
2020 .clkr = {
2021 .enable_reg = 0xc040,
2022 .enable_mask = BIT(0),
2023 .hw.init = &(const struct clk_init_data) {
2024 .name = "cam_cc_ife_lite_0_cphy_rx_clk",
2025 .parent_hws = (const struct clk_hw*[]) {
2026 &cam_cc_cphy_rx_clk_src.clkr.hw,
2027 },
2028 .num_parents = 1,
2029 .flags = CLK_SET_RATE_PARENT,
2030 .ops = &clk_branch2_ops,
2031 },
2032 },
2033 };
2034
2035 static struct clk_branch cam_cc_ife_lite_0_csid_clk = {
2036 .halt_reg = 0xc038,
2037 .halt_check = BRANCH_HALT,
2038 .clkr = {
2039 .enable_reg = 0xc038,
2040 .enable_mask = BIT(0),
2041 .hw.init = &(const struct clk_init_data) {
2042 .name = "cam_cc_ife_lite_0_csid_clk",
2043 .parent_hws = (const struct clk_hw*[]) {
2044 &cam_cc_ife_lite_0_csid_clk_src.clkr.hw,
2045 },
2046 .num_parents = 1,
2047 .flags = CLK_SET_RATE_PARENT,
2048 .ops = &clk_branch2_ops,
2049 },
2050 },
2051 };
2052
2053 static struct clk_branch cam_cc_ife_lite_1_clk = {
2054 .halt_reg = 0xc060,
2055 .halt_check = BRANCH_HALT,
2056 .clkr = {
2057 .enable_reg = 0xc060,
2058 .enable_mask = BIT(0),
2059 .hw.init = &(const struct clk_init_data) {
2060 .name = "cam_cc_ife_lite_1_clk",
2061 .parent_hws = (const struct clk_hw*[]) {
2062 &cam_cc_ife_lite_1_clk_src.clkr.hw,
2063 },
2064 .num_parents = 1,
2065 .flags = CLK_SET_RATE_PARENT,
2066 .ops = &clk_branch2_ops,
2067 },
2068 },
2069 };
2070
2071 static struct clk_branch cam_cc_ife_lite_1_cphy_rx_clk = {
2072 .halt_reg = 0xc084,
2073 .halt_check = BRANCH_HALT,
2074 .clkr = {
2075 .enable_reg = 0xc084,
2076 .enable_mask = BIT(0),
2077 .hw.init = &(const struct clk_init_data) {
2078 .name = "cam_cc_ife_lite_1_cphy_rx_clk",
2079 .parent_hws = (const struct clk_hw*[]) {
2080 &cam_cc_cphy_rx_clk_src.clkr.hw,
2081 },
2082 .num_parents = 1,
2083 .flags = CLK_SET_RATE_PARENT,
2084 .ops = &clk_branch2_ops,
2085 },
2086 },
2087 };
2088
2089 static struct clk_branch cam_cc_ife_lite_1_csid_clk = {
2090 .halt_reg = 0xc07c,
2091 .halt_check = BRANCH_HALT,
2092 .clkr = {
2093 .enable_reg = 0xc07c,
2094 .enable_mask = BIT(0),
2095 .hw.init = &(const struct clk_init_data) {
2096 .name = "cam_cc_ife_lite_1_csid_clk",
2097 .parent_hws = (const struct clk_hw*[]) {
2098 &cam_cc_ife_lite_1_csid_clk_src.clkr.hw,
2099 },
2100 .num_parents = 1,
2101 .flags = CLK_SET_RATE_PARENT,
2102 .ops = &clk_branch2_ops,
2103 },
2104 },
2105 };
2106
2107 static struct clk_branch cam_cc_ife_lite_2_clk = {
2108 .halt_reg = 0xc258,
2109 .halt_check = BRANCH_HALT,
2110 .clkr = {
2111 .enable_reg = 0xc258,
2112 .enable_mask = BIT(0),
2113 .hw.init = &(const struct clk_init_data) {
2114 .name = "cam_cc_ife_lite_2_clk",
2115 .parent_hws = (const struct clk_hw*[]) {
2116 &cam_cc_ife_lite_2_clk_src.clkr.hw,
2117 },
2118 .num_parents = 1,
2119 .flags = CLK_SET_RATE_PARENT,
2120 .ops = &clk_branch2_ops,
2121 },
2122 },
2123 };
2124
2125 static struct clk_branch cam_cc_ife_lite_2_cphy_rx_clk = {
2126 .halt_reg = 0xc27c,
2127 .halt_check = BRANCH_HALT,
2128 .clkr = {
2129 .enable_reg = 0xc27c,
2130 .enable_mask = BIT(0),
2131 .hw.init = &(const struct clk_init_data) {
2132 .name = "cam_cc_ife_lite_2_cphy_rx_clk",
2133 .parent_hws = (const struct clk_hw*[]) {
2134 &cam_cc_cphy_rx_clk_src.clkr.hw,
2135 },
2136 .num_parents = 1,
2137 .flags = CLK_SET_RATE_PARENT,
2138 .ops = &clk_branch2_ops,
2139 },
2140 },
2141 };
2142
2143 static struct clk_branch cam_cc_ife_lite_2_csid_clk = {
2144 .halt_reg = 0xc274,
2145 .halt_check = BRANCH_HALT,
2146 .clkr = {
2147 .enable_reg = 0xc274,
2148 .enable_mask = BIT(0),
2149 .hw.init = &(const struct clk_init_data) {
2150 .name = "cam_cc_ife_lite_2_csid_clk",
2151 .parent_hws = (const struct clk_hw*[]) {
2152 &cam_cc_ife_lite_2_csid_clk_src.clkr.hw,
2153 },
2154 .num_parents = 1,
2155 .flags = CLK_SET_RATE_PARENT,
2156 .ops = &clk_branch2_ops,
2157 },
2158 },
2159 };
2160
2161 static struct clk_branch cam_cc_ife_lite_3_clk = {
2162 .halt_reg = 0xc29c,
2163 .halt_check = BRANCH_HALT,
2164 .clkr = {
2165 .enable_reg = 0xc29c,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(const struct clk_init_data) {
2168 .name = "cam_cc_ife_lite_3_clk",
2169 .parent_hws = (const struct clk_hw*[]) {
2170 &cam_cc_ife_lite_3_clk_src.clkr.hw,
2171 },
2172 .num_parents = 1,
2173 .flags = CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2175 },
2176 },
2177 };
2178
2179 static struct clk_branch cam_cc_ife_lite_3_cphy_rx_clk = {
2180 .halt_reg = 0xc2c0,
2181 .halt_check = BRANCH_HALT,
2182 .clkr = {
2183 .enable_reg = 0xc2c0,
2184 .enable_mask = BIT(0),
2185 .hw.init = &(const struct clk_init_data) {
2186 .name = "cam_cc_ife_lite_3_cphy_rx_clk",
2187 .parent_hws = (const struct clk_hw*[]) {
2188 &cam_cc_cphy_rx_clk_src.clkr.hw,
2189 },
2190 .num_parents = 1,
2191 .flags = CLK_SET_RATE_PARENT,
2192 .ops = &clk_branch2_ops,
2193 },
2194 },
2195 };
2196
2197 static struct clk_branch cam_cc_ife_lite_3_csid_clk = {
2198 .halt_reg = 0xc2b8,
2199 .halt_check = BRANCH_HALT,
2200 .clkr = {
2201 .enable_reg = 0xc2b8,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(const struct clk_init_data) {
2204 .name = "cam_cc_ife_lite_3_csid_clk",
2205 .parent_hws = (const struct clk_hw*[]) {
2206 &cam_cc_ife_lite_3_csid_clk_src.clkr.hw,
2207 },
2208 .num_parents = 1,
2209 .flags = CLK_SET_RATE_PARENT,
2210 .ops = &clk_branch2_ops,
2211 },
2212 },
2213 };
2214
2215 static struct clk_branch cam_cc_ipe_0_ahb_clk = {
2216 .halt_reg = 0x8040,
2217 .halt_check = BRANCH_HALT,
2218 .clkr = {
2219 .enable_reg = 0x8040,
2220 .enable_mask = BIT(0),
2221 .hw.init = &(const struct clk_init_data) {
2222 .name = "cam_cc_ipe_0_ahb_clk",
2223 .parent_hws = (const struct clk_hw*[]) {
2224 &cam_cc_slow_ahb_clk_src.clkr.hw,
2225 },
2226 .num_parents = 1,
2227 .flags = CLK_SET_RATE_PARENT,
2228 .ops = &clk_branch2_ops,
2229 },
2230 },
2231 };
2232
2233 static struct clk_branch cam_cc_ipe_0_areg_clk = {
2234 .halt_reg = 0x803c,
2235 .halt_check = BRANCH_HALT,
2236 .clkr = {
2237 .enable_reg = 0x803c,
2238 .enable_mask = BIT(0),
2239 .hw.init = &(const struct clk_init_data) {
2240 .name = "cam_cc_ipe_0_areg_clk",
2241 .parent_hws = (const struct clk_hw*[]) {
2242 &cam_cc_fast_ahb_clk_src.clkr.hw,
2243 },
2244 .num_parents = 1,
2245 .flags = CLK_SET_RATE_PARENT,
2246 .ops = &clk_branch2_ops,
2247 },
2248 },
2249 };
2250
2251 static struct clk_branch cam_cc_ipe_0_axi_clk = {
2252 .halt_reg = 0x8038,
2253 .halt_check = BRANCH_HALT,
2254 .clkr = {
2255 .enable_reg = 0x8038,
2256 .enable_mask = BIT(0),
2257 .hw.init = &(const struct clk_init_data) {
2258 .name = "cam_cc_ipe_0_axi_clk",
2259 .parent_hws = (const struct clk_hw*[]) {
2260 &cam_cc_camnoc_axi_clk_src.clkr.hw,
2261 },
2262 .num_parents = 1,
2263 .flags = CLK_SET_RATE_PARENT,
2264 .ops = &clk_branch2_ops,
2265 },
2266 },
2267 };
2268
2269 static struct clk_branch cam_cc_ipe_0_clk = {
2270 .halt_reg = 0x8028,
2271 .halt_check = BRANCH_HALT,
2272 .clkr = {
2273 .enable_reg = 0x8028,
2274 .enable_mask = BIT(0),
2275 .hw.init = &(const struct clk_init_data) {
2276 .name = "cam_cc_ipe_0_clk",
2277 .parent_hws = (const struct clk_hw*[]) {
2278 &cam_cc_ipe_0_clk_src.clkr.hw,
2279 },
2280 .num_parents = 1,
2281 .flags = CLK_SET_RATE_PARENT,
2282 .ops = &clk_branch2_ops,
2283 },
2284 },
2285 };
2286
2287 static struct clk_branch cam_cc_ipe_1_ahb_clk = {
2288 .halt_reg = 0x9028,
2289 .halt_check = BRANCH_HALT,
2290 .clkr = {
2291 .enable_reg = 0x9028,
2292 .enable_mask = BIT(0),
2293 .hw.init = &(const struct clk_init_data) {
2294 .name = "cam_cc_ipe_1_ahb_clk",
2295 .parent_hws = (const struct clk_hw*[]) {
2296 &cam_cc_slow_ahb_clk_src.clkr.hw,
2297 },
2298 .num_parents = 1,
2299 .flags = CLK_SET_RATE_PARENT,
2300 .ops = &clk_branch2_ops,
2301 },
2302 },
2303 };
2304
2305 static struct clk_branch cam_cc_ipe_1_areg_clk = {
2306 .halt_reg = 0x9024,
2307 .halt_check = BRANCH_HALT,
2308 .clkr = {
2309 .enable_reg = 0x9024,
2310 .enable_mask = BIT(0),
2311 .hw.init = &(const struct clk_init_data) {
2312 .name = "cam_cc_ipe_1_areg_clk",
2313 .parent_hws = (const struct clk_hw*[]) {
2314 &cam_cc_fast_ahb_clk_src.clkr.hw,
2315 },
2316 .num_parents = 1,
2317 .flags = CLK_SET_RATE_PARENT,
2318 .ops = &clk_branch2_ops,
2319 },
2320 },
2321 };
2322
2323 static struct clk_branch cam_cc_ipe_1_axi_clk = {
2324 .halt_reg = 0x9020,
2325 .halt_check = BRANCH_HALT,
2326 .clkr = {
2327 .enable_reg = 0x9020,
2328 .enable_mask = BIT(0),
2329 .hw.init = &(const struct clk_init_data) {
2330 .name = "cam_cc_ipe_1_axi_clk",
2331 .parent_hws = (const struct clk_hw*[]) {
2332 &cam_cc_camnoc_axi_clk_src.clkr.hw,
2333 },
2334 .num_parents = 1,
2335 .flags = CLK_SET_RATE_PARENT,
2336 .ops = &clk_branch2_ops,
2337 },
2338 },
2339 };
2340
2341 static struct clk_branch cam_cc_ipe_1_clk = {
2342 .halt_reg = 0x9010,
2343 .halt_check = BRANCH_HALT,
2344 .clkr = {
2345 .enable_reg = 0x9010,
2346 .enable_mask = BIT(0),
2347 .hw.init = &(const struct clk_init_data) {
2348 .name = "cam_cc_ipe_1_clk",
2349 .parent_hws = (const struct clk_hw*[]) {
2350 &cam_cc_ipe_0_clk_src.clkr.hw,
2351 },
2352 .num_parents = 1,
2353 .flags = CLK_SET_RATE_PARENT,
2354 .ops = &clk_branch2_ops,
2355 },
2356 },
2357 };
2358
2359 static struct clk_branch cam_cc_jpeg_clk = {
2360 .halt_reg = 0xc0a4,
2361 .halt_check = BRANCH_HALT,
2362 .clkr = {
2363 .enable_reg = 0xc0a4,
2364 .enable_mask = BIT(0),
2365 .hw.init = &(const struct clk_init_data) {
2366 .name = "cam_cc_jpeg_clk",
2367 .parent_hws = (const struct clk_hw*[]) {
2368 &cam_cc_jpeg_clk_src.clkr.hw,
2369 },
2370 .num_parents = 1,
2371 .flags = CLK_SET_RATE_PARENT,
2372 .ops = &clk_branch2_ops,
2373 },
2374 },
2375 };
2376
2377 static struct clk_branch cam_cc_lrme_clk = {
2378 .halt_reg = 0xc15c,
2379 .halt_check = BRANCH_HALT,
2380 .clkr = {
2381 .enable_reg = 0xc15c,
2382 .enable_mask = BIT(0),
2383 .hw.init = &(const struct clk_init_data) {
2384 .name = "cam_cc_lrme_clk",
2385 .parent_hws = (const struct clk_hw*[]) {
2386 &cam_cc_lrme_clk_src.clkr.hw,
2387 },
2388 .num_parents = 1,
2389 .flags = CLK_SET_RATE_PARENT,
2390 .ops = &clk_branch2_ops,
2391 },
2392 },
2393 };
2394
2395 static struct clk_branch cam_cc_mclk0_clk = {
2396 .halt_reg = 0x501c,
2397 .halt_check = BRANCH_HALT,
2398 .clkr = {
2399 .enable_reg = 0x501c,
2400 .enable_mask = BIT(0),
2401 .hw.init = &(const struct clk_init_data) {
2402 .name = "cam_cc_mclk0_clk",
2403 .parent_hws = (const struct clk_hw*[]) {
2404 &cam_cc_mclk0_clk_src.clkr.hw,
2405 },
2406 .num_parents = 1,
2407 .flags = CLK_SET_RATE_PARENT,
2408 .ops = &clk_branch2_ops,
2409 },
2410 },
2411 };
2412
2413 static struct clk_branch cam_cc_mclk1_clk = {
2414 .halt_reg = 0x503c,
2415 .halt_check = BRANCH_HALT,
2416 .clkr = {
2417 .enable_reg = 0x503c,
2418 .enable_mask = BIT(0),
2419 .hw.init = &(const struct clk_init_data) {
2420 .name = "cam_cc_mclk1_clk",
2421 .parent_hws = (const struct clk_hw*[]) {
2422 &cam_cc_mclk1_clk_src.clkr.hw,
2423 },
2424 .num_parents = 1,
2425 .flags = CLK_SET_RATE_PARENT,
2426 .ops = &clk_branch2_ops,
2427 },
2428 },
2429 };
2430
2431 static struct clk_branch cam_cc_mclk2_clk = {
2432 .halt_reg = 0x505c,
2433 .halt_check = BRANCH_HALT,
2434 .clkr = {
2435 .enable_reg = 0x505c,
2436 .enable_mask = BIT(0),
2437 .hw.init = &(const struct clk_init_data) {
2438 .name = "cam_cc_mclk2_clk",
2439 .parent_hws = (const struct clk_hw*[]) {
2440 &cam_cc_mclk2_clk_src.clkr.hw,
2441 },
2442 .num_parents = 1,
2443 .flags = CLK_SET_RATE_PARENT,
2444 .ops = &clk_branch2_ops,
2445 },
2446 },
2447 };
2448
2449 static struct clk_branch cam_cc_mclk3_clk = {
2450 .halt_reg = 0x507c,
2451 .halt_check = BRANCH_HALT,
2452 .clkr = {
2453 .enable_reg = 0x507c,
2454 .enable_mask = BIT(0),
2455 .hw.init = &(const struct clk_init_data) {
2456 .name = "cam_cc_mclk3_clk",
2457 .parent_hws = (const struct clk_hw*[]) {
2458 &cam_cc_mclk3_clk_src.clkr.hw,
2459 },
2460 .num_parents = 1,
2461 .flags = CLK_SET_RATE_PARENT,
2462 .ops = &clk_branch2_ops,
2463 },
2464 },
2465 };
2466
2467 static struct clk_branch cam_cc_mclk4_clk = {
2468 .halt_reg = 0x509c,
2469 .halt_check = BRANCH_HALT,
2470 .clkr = {
2471 .enable_reg = 0x509c,
2472 .enable_mask = BIT(0),
2473 .hw.init = &(const struct clk_init_data) {
2474 .name = "cam_cc_mclk4_clk",
2475 .parent_hws = (const struct clk_hw*[]) {
2476 &cam_cc_mclk4_clk_src.clkr.hw,
2477 },
2478 .num_parents = 1,
2479 .flags = CLK_SET_RATE_PARENT,
2480 .ops = &clk_branch2_ops,
2481 },
2482 },
2483 };
2484
2485 static struct clk_branch cam_cc_mclk5_clk = {
2486 .halt_reg = 0x50bc,
2487 .halt_check = BRANCH_HALT,
2488 .clkr = {
2489 .enable_reg = 0x50bc,
2490 .enable_mask = BIT(0),
2491 .hw.init = &(const struct clk_init_data) {
2492 .name = "cam_cc_mclk5_clk",
2493 .parent_hws = (const struct clk_hw*[]) {
2494 &cam_cc_mclk5_clk_src.clkr.hw,
2495 },
2496 .num_parents = 1,
2497 .flags = CLK_SET_RATE_PARENT,
2498 .ops = &clk_branch2_ops,
2499 },
2500 },
2501 };
2502
2503 static struct clk_branch cam_cc_mclk6_clk = {
2504 .halt_reg = 0x50dc,
2505 .halt_check = BRANCH_HALT,
2506 .clkr = {
2507 .enable_reg = 0x50dc,
2508 .enable_mask = BIT(0),
2509 .hw.init = &(const struct clk_init_data) {
2510 .name = "cam_cc_mclk6_clk",
2511 .parent_hws = (const struct clk_hw*[]) {
2512 &cam_cc_mclk6_clk_src.clkr.hw,
2513 },
2514 .num_parents = 1,
2515 .flags = CLK_SET_RATE_PARENT,
2516 .ops = &clk_branch2_ops,
2517 },
2518 },
2519 };
2520
2521 static struct clk_branch cam_cc_mclk7_clk = {
2522 .halt_reg = 0x50fc,
2523 .halt_check = BRANCH_HALT,
2524 .clkr = {
2525 .enable_reg = 0x50fc,
2526 .enable_mask = BIT(0),
2527 .hw.init = &(const struct clk_init_data) {
2528 .name = "cam_cc_mclk7_clk",
2529 .parent_hws = (const struct clk_hw*[]) {
2530 &cam_cc_mclk7_clk_src.clkr.hw,
2531 },
2532 .num_parents = 1,
2533 .flags = CLK_SET_RATE_PARENT,
2534 .ops = &clk_branch2_ops,
2535 },
2536 },
2537 };
2538
2539 static struct gdsc titan_top_gdsc = {
2540 .gdscr = 0xc1bc,
2541 .en_rest_wait_val = 0x2,
2542 .en_few_wait_val = 0x2,
2543 .clk_dis_wait_val = 0xf,
2544 .pd = {
2545 .name = "titan_top_gdsc",
2546 },
2547 .pwrsts = PWRSTS_OFF_ON,
2548 .flags = POLL_CFG_GDSCR,
2549 };
2550
2551 static struct gdsc bps_gdsc = {
2552 .gdscr = 0x7004,
2553 .en_rest_wait_val = 0x2,
2554 .en_few_wait_val = 0x2,
2555 .clk_dis_wait_val = 0xf,
2556 .pd = {
2557 .name = "bps_gdsc",
2558 },
2559 .pwrsts = PWRSTS_OFF_ON,
2560 .parent = &titan_top_gdsc.pd,
2561 .flags = POLL_CFG_GDSCR,
2562 };
2563
2564 static struct gdsc ife_0_gdsc = {
2565 .gdscr = 0xa004,
2566 .en_rest_wait_val = 0x2,
2567 .en_few_wait_val = 0x2,
2568 .clk_dis_wait_val = 0xf,
2569 .pd = {
2570 .name = "ife_0_gdsc",
2571 },
2572 .pwrsts = PWRSTS_OFF_ON,
2573 .parent = &titan_top_gdsc.pd,
2574 .flags = POLL_CFG_GDSCR,
2575 };
2576
2577 static struct gdsc ife_1_gdsc = {
2578 .gdscr = 0xb004,
2579 .en_rest_wait_val = 0x2,
2580 .en_few_wait_val = 0x2,
2581 .clk_dis_wait_val = 0xf,
2582 .pd = {
2583 .name = "ife_1_gdsc",
2584 },
2585 .pwrsts = PWRSTS_OFF_ON,
2586 .parent = &titan_top_gdsc.pd,
2587 .flags = POLL_CFG_GDSCR,
2588 };
2589
2590 static struct gdsc ife_2_gdsc = {
2591 .gdscr = 0xf004,
2592 .en_rest_wait_val = 0x2,
2593 .en_few_wait_val = 0x2,
2594 .clk_dis_wait_val = 0xf,
2595 .pd = {
2596 .name = "ife_2_gdsc",
2597 },
2598 .pwrsts = PWRSTS_OFF_ON,
2599 .parent = &titan_top_gdsc.pd,
2600 .flags = POLL_CFG_GDSCR,
2601 };
2602
2603 static struct gdsc ife_3_gdsc = {
2604 .gdscr = 0xf070,
2605 .en_rest_wait_val = 0x2,
2606 .en_few_wait_val = 0x2,
2607 .clk_dis_wait_val = 0xf,
2608 .pd = {
2609 .name = "ife_3_gdsc",
2610 },
2611 .pwrsts = PWRSTS_OFF_ON,
2612 .parent = &titan_top_gdsc.pd,
2613 .flags = POLL_CFG_GDSCR,
2614 };
2615
2616 static struct gdsc ipe_0_gdsc = {
2617 .gdscr = 0x8004,
2618 .en_rest_wait_val = 0x2,
2619 .en_few_wait_val = 0x2,
2620 .clk_dis_wait_val = 0xf,
2621 .pd = {
2622 .name = "ipe_0_gdsc",
2623 },
2624 .pwrsts = PWRSTS_OFF_ON,
2625 .parent = &titan_top_gdsc.pd,
2626 .flags = POLL_CFG_GDSCR,
2627 };
2628
2629 static struct gdsc ipe_1_gdsc = {
2630 .gdscr = 0x9004,
2631 .en_rest_wait_val = 0x2,
2632 .en_few_wait_val = 0x2,
2633 .clk_dis_wait_val = 0xf,
2634 .pd = {
2635 .name = "ipe_1_gdsc",
2636 },
2637 .pwrsts = PWRSTS_OFF_ON,
2638 .parent = &titan_top_gdsc.pd,
2639 .flags = POLL_CFG_GDSCR,
2640 };
2641
2642 static struct clk_regmap *cam_cc_sc8180x_clocks[] = {
2643 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2644 [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
2645 [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
2646 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2647 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2648 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2649 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2650 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2651 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2652 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2653 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2654 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2655 [CAM_CC_CCI_2_CLK] = &cam_cc_cci_2_clk.clkr,
2656 [CAM_CC_CCI_2_CLK_SRC] = &cam_cc_cci_2_clk_src.clkr,
2657 [CAM_CC_CCI_3_CLK] = &cam_cc_cci_3_clk.clkr,
2658 [CAM_CC_CCI_3_CLK_SRC] = &cam_cc_cci_3_clk_src.clkr,
2659 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2660 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2661 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2662 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2663 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2664 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2665 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2666 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2667 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2668 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2669 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2670 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2671 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2672 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2673 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2674 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2675 [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
2676 [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
2677 [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
2678 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2679 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2680 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2681 [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
2682 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2683 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2684 [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
2685 [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
2686 [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
2687 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2688 [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
2689 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2690 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2691 [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
2692 [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
2693 [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
2694 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2695 [CAM_CC_IFE_2_AXI_CLK] = &cam_cc_ife_2_axi_clk.clkr,
2696 [CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
2697 [CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
2698 [CAM_CC_IFE_2_CPHY_RX_CLK] = &cam_cc_ife_2_cphy_rx_clk.clkr,
2699 [CAM_CC_IFE_2_CSID_CLK] = &cam_cc_ife_2_csid_clk.clkr,
2700 [CAM_CC_IFE_2_CSID_CLK_SRC] = &cam_cc_ife_2_csid_clk_src.clkr,
2701 [CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr,
2702 [CAM_CC_IFE_3_AXI_CLK] = &cam_cc_ife_3_axi_clk.clkr,
2703 [CAM_CC_IFE_3_CLK] = &cam_cc_ife_3_clk.clkr,
2704 [CAM_CC_IFE_3_CLK_SRC] = &cam_cc_ife_3_clk_src.clkr,
2705 [CAM_CC_IFE_3_CPHY_RX_CLK] = &cam_cc_ife_3_cphy_rx_clk.clkr,
2706 [CAM_CC_IFE_3_CSID_CLK] = &cam_cc_ife_3_csid_clk.clkr,
2707 [CAM_CC_IFE_3_CSID_CLK_SRC] = &cam_cc_ife_3_csid_clk_src.clkr,
2708 [CAM_CC_IFE_3_DSP_CLK] = &cam_cc_ife_3_dsp_clk.clkr,
2709 [CAM_CC_IFE_LITE_0_CLK] = &cam_cc_ife_lite_0_clk.clkr,
2710 [CAM_CC_IFE_LITE_0_CLK_SRC] = &cam_cc_ife_lite_0_clk_src.clkr,
2711 [CAM_CC_IFE_LITE_0_CPHY_RX_CLK] = &cam_cc_ife_lite_0_cphy_rx_clk.clkr,
2712 [CAM_CC_IFE_LITE_0_CSID_CLK] = &cam_cc_ife_lite_0_csid_clk.clkr,
2713 [CAM_CC_IFE_LITE_0_CSID_CLK_SRC] = &cam_cc_ife_lite_0_csid_clk_src.clkr,
2714 [CAM_CC_IFE_LITE_1_CLK] = &cam_cc_ife_lite_1_clk.clkr,
2715 [CAM_CC_IFE_LITE_1_CLK_SRC] = &cam_cc_ife_lite_1_clk_src.clkr,
2716 [CAM_CC_IFE_LITE_1_CPHY_RX_CLK] = &cam_cc_ife_lite_1_cphy_rx_clk.clkr,
2717 [CAM_CC_IFE_LITE_1_CSID_CLK] = &cam_cc_ife_lite_1_csid_clk.clkr,
2718 [CAM_CC_IFE_LITE_1_CSID_CLK_SRC] = &cam_cc_ife_lite_1_csid_clk_src.clkr,
2719 [CAM_CC_IFE_LITE_2_CLK] = &cam_cc_ife_lite_2_clk.clkr,
2720 [CAM_CC_IFE_LITE_2_CLK_SRC] = &cam_cc_ife_lite_2_clk_src.clkr,
2721 [CAM_CC_IFE_LITE_2_CPHY_RX_CLK] = &cam_cc_ife_lite_2_cphy_rx_clk.clkr,
2722 [CAM_CC_IFE_LITE_2_CSID_CLK] = &cam_cc_ife_lite_2_csid_clk.clkr,
2723 [CAM_CC_IFE_LITE_2_CSID_CLK_SRC] = &cam_cc_ife_lite_2_csid_clk_src.clkr,
2724 [CAM_CC_IFE_LITE_3_CLK] = &cam_cc_ife_lite_3_clk.clkr,
2725 [CAM_CC_IFE_LITE_3_CLK_SRC] = &cam_cc_ife_lite_3_clk_src.clkr,
2726 [CAM_CC_IFE_LITE_3_CPHY_RX_CLK] = &cam_cc_ife_lite_3_cphy_rx_clk.clkr,
2727 [CAM_CC_IFE_LITE_3_CSID_CLK] = &cam_cc_ife_lite_3_csid_clk.clkr,
2728 [CAM_CC_IFE_LITE_3_CSID_CLK_SRC] = &cam_cc_ife_lite_3_csid_clk_src.clkr,
2729 [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
2730 [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
2731 [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
2732 [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
2733 [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
2734 [CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
2735 [CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
2736 [CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
2737 [CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
2738 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2739 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2740 [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
2741 [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
2742 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2743 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2744 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2745 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2746 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2747 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2748 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2749 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2750 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2751 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2752 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2753 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2754 [CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
2755 [CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
2756 [CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
2757 [CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
2758 [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2759 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2760 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2761 [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2762 [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2763 [CAM_CC_PLL2_OUT_MAIN] = &cam_cc_pll2_out_main.clkr,
2764 [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2765 [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2766 [CAM_CC_PLL5] = &cam_cc_pll5.clkr,
2767 [CAM_CC_PLL6] = &cam_cc_pll6.clkr,
2768 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2769 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2770 };
2771
2772 static struct gdsc *cam_cc_sc8180x_gdscs[] = {
2773 [BPS_GDSC] = &bps_gdsc,
2774 [IFE_0_GDSC] = &ife_0_gdsc,
2775 [IFE_1_GDSC] = &ife_1_gdsc,
2776 [IFE_2_GDSC] = &ife_2_gdsc,
2777 [IFE_3_GDSC] = &ife_3_gdsc,
2778 [IPE_0_GDSC] = &ipe_0_gdsc,
2779 [IPE_1_GDSC] = &ipe_1_gdsc,
2780 [TITAN_TOP_GDSC] = &titan_top_gdsc,
2781 };
2782
2783 static const struct qcom_reset_map cam_cc_sc8180x_resets[] = {
2784 [CAM_CC_BPS_BCR] = { 0x7000 },
2785 [CAM_CC_CAMNOC_BCR] = { 0xc16c },
2786 [CAM_CC_CCI_BCR] = { 0xc104 },
2787 [CAM_CC_CPAS_BCR] = { 0xc164 },
2788 [CAM_CC_CSI0PHY_BCR] = { 0x6000 },
2789 [CAM_CC_CSI1PHY_BCR] = { 0x6024 },
2790 [CAM_CC_CSI2PHY_BCR] = { 0x6048 },
2791 [CAM_CC_CSI3PHY_BCR] = { 0x606c },
2792 [CAM_CC_FD_BCR] = { 0xc0dc },
2793 [CAM_CC_ICP_BCR] = { 0xc0b4 },
2794 [CAM_CC_IFE_0_BCR] = { 0xa000 },
2795 [CAM_CC_IFE_1_BCR] = { 0xb000 },
2796 [CAM_CC_IFE_2_BCR] = { 0xf000 },
2797 [CAM_CC_IFE_3_BCR] = { 0xf06c },
2798 [CAM_CC_IFE_LITE_0_BCR] = { 0xc000 },
2799 [CAM_CC_IFE_LITE_1_BCR] = { 0xc044 },
2800 [CAM_CC_IFE_LITE_2_BCR] = { 0xc23c },
2801 [CAM_CC_IFE_LITE_3_BCR] = { 0xc280 },
2802 [CAM_CC_IPE_0_BCR] = { 0x8000 },
2803 [CAM_CC_IPE_1_BCR] = { 0x9000 },
2804 [CAM_CC_JPEG_BCR] = { 0xc088 },
2805 [CAM_CC_LRME_BCR] = { 0xc140 },
2806 [CAM_CC_MCLK0_BCR] = { 0x5000 },
2807 [CAM_CC_MCLK1_BCR] = { 0x5020 },
2808 [CAM_CC_MCLK2_BCR] = { 0x5040 },
2809 [CAM_CC_MCLK3_BCR] = { 0x5060 },
2810 [CAM_CC_MCLK4_BCR] = { 0x5080 },
2811 [CAM_CC_MCLK5_BCR] = { 0x50a0 },
2812 [CAM_CC_MCLK6_BCR] = { 0x50c0 },
2813 [CAM_CC_MCLK7_BCR] = { 0x50e0 },
2814 };
2815
2816 static const struct regmap_config cam_cc_sc8180x_regmap_config = {
2817 .reg_bits = 32,
2818 .reg_stride = 4,
2819 .val_bits = 32,
2820 .max_register = 0xf0d4,
2821 .fast_io = true,
2822 };
2823
2824 static const struct qcom_cc_desc cam_cc_sc8180x_desc = {
2825 .config = &cam_cc_sc8180x_regmap_config,
2826 .clks = cam_cc_sc8180x_clocks,
2827 .num_clks = ARRAY_SIZE(cam_cc_sc8180x_clocks),
2828 .resets = cam_cc_sc8180x_resets,
2829 .num_resets = ARRAY_SIZE(cam_cc_sc8180x_resets),
2830 .gdscs = cam_cc_sc8180x_gdscs,
2831 .num_gdscs = ARRAY_SIZE(cam_cc_sc8180x_gdscs),
2832 };
2833
2834 static const struct of_device_id cam_cc_sc8180x_match_table[] = {
2835 { .compatible = "qcom,sc8180x-camcc" },
2836 { }
2837 };
2838 MODULE_DEVICE_TABLE(of, cam_cc_sc8180x_match_table);
2839
cam_cc_sc8180x_probe(struct platform_device * pdev)2840 static int cam_cc_sc8180x_probe(struct platform_device *pdev)
2841 {
2842 struct regmap *regmap;
2843 int ret;
2844
2845 ret = devm_pm_runtime_enable(&pdev->dev);
2846 if (ret)
2847 return ret;
2848
2849 ret = pm_runtime_resume_and_get(&pdev->dev);
2850 if (ret)
2851 return ret;
2852
2853 regmap = qcom_cc_map(pdev, &cam_cc_sc8180x_desc);
2854 if (IS_ERR(regmap)) {
2855 pm_runtime_put(&pdev->dev);
2856 return PTR_ERR(regmap);
2857 }
2858
2859 clk_trion_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
2860 clk_trion_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
2861 clk_regera_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
2862 clk_trion_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
2863 clk_trion_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
2864 clk_trion_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config);
2865 clk_trion_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config);
2866
2867 /* Keep some clocks always enabled */
2868 qcom_branch_set_clk_en(regmap, 0xc1e4); /* CAM_CC_GDSC_CLK */
2869 qcom_branch_set_clk_en(regmap, 0xc200); /* CAM_CC_SLEEP_CLK */
2870
2871 ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sc8180x_desc, regmap);
2872
2873 pm_runtime_put(&pdev->dev);
2874
2875 return ret;
2876 }
2877
2878 static struct platform_driver cam_cc_sc8180x_driver = {
2879 .probe = cam_cc_sc8180x_probe,
2880 .driver = {
2881 .name = "camcc-sc8180x",
2882 .of_match_table = cam_cc_sc8180x_match_table,
2883 },
2884 };
2885
2886 module_platform_driver(cam_cc_sc8180x_driver);
2887
2888 MODULE_DESCRIPTION("QTI CAMCC SC8180X Driver");
2889 MODULE_LICENSE("GPL");
2890