1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/regmap.h>
10 #include <linux/reset-controller.h>
11
12 #include <dt-bindings/clock/qcom,camcc-sm8250.h>
13
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap-divider.h"
18 #include "common.h"
19 #include "gdsc.h"
20 #include "reset.h"
21
22 enum {
23 P_BI_TCXO,
24 P_CAM_CC_PLL0_OUT_EVEN,
25 P_CAM_CC_PLL0_OUT_MAIN,
26 P_CAM_CC_PLL0_OUT_ODD,
27 P_CAM_CC_PLL1_OUT_EVEN,
28 P_CAM_CC_PLL2_OUT_EARLY,
29 P_CAM_CC_PLL2_OUT_MAIN,
30 P_CAM_CC_PLL3_OUT_EVEN,
31 P_CAM_CC_PLL4_OUT_EVEN,
32 P_SLEEP_CLK,
33 };
34
35 static const struct pll_vco lucid_vco[] = {
36 { 249600000, 2000000000, 0 },
37 };
38
39 static const struct pll_vco zonda_vco[] = {
40 { 595200000UL, 3600000000UL, 0 },
41 };
42
43 static const struct alpha_pll_config cam_cc_pll0_config = {
44 .l = 0x3e,
45 .alpha = 0x8000,
46 .config_ctl_val = 0x20485699,
47 .config_ctl_hi_val = 0x00002261,
48 .config_ctl_hi1_val = 0x329A699c,
49 .user_ctl_val = 0x00003100,
50 .user_ctl_hi_val = 0x00000805,
51 .user_ctl_hi1_val = 0x00000000,
52 };
53
54 static struct clk_alpha_pll cam_cc_pll0 = {
55 .offset = 0x0,
56 .vco_table = lucid_vco,
57 .num_vco = ARRAY_SIZE(lucid_vco),
58 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
59 .clkr = {
60 .hw.init = &(struct clk_init_data){
61 .name = "cam_cc_pll0",
62 .parent_data = &(const struct clk_parent_data){
63 .fw_name = "bi_tcxo",
64 },
65 .num_parents = 1,
66 .ops = &clk_alpha_pll_lucid_ops,
67 },
68 },
69 };
70
71 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
72 { 0x1, 2 },
73 { }
74 };
75
76 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
77 .offset = 0x0,
78 .post_div_shift = 8,
79 .post_div_table = post_div_table_cam_cc_pll0_out_even,
80 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
81 .width = 4,
82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
83 .clkr.hw.init = &(struct clk_init_data){
84 .name = "cam_cc_pll0_out_even",
85 .parent_hws = (const struct clk_hw*[]){
86 &cam_cc_pll0.clkr.hw,
87 },
88 .num_parents = 1,
89 .flags = CLK_SET_RATE_PARENT,
90 .ops = &clk_alpha_pll_postdiv_lucid_ops,
91 },
92 };
93
94 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
95 { 0x3, 3 },
96 { }
97 };
98
99 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
100 .offset = 0x0,
101 .post_div_shift = 12,
102 .post_div_table = post_div_table_cam_cc_pll0_out_odd,
103 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
104 .width = 4,
105 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
106 .clkr.hw.init = &(struct clk_init_data){
107 .name = "cam_cc_pll0_out_odd",
108 .parent_hws = (const struct clk_hw*[]){
109 &cam_cc_pll0.clkr.hw,
110 },
111 .num_parents = 1,
112 .flags = CLK_SET_RATE_PARENT,
113 .ops = &clk_alpha_pll_postdiv_lucid_ops,
114 },
115 };
116
117 static const struct alpha_pll_config cam_cc_pll1_config = {
118 .l = 0x1f,
119 .alpha = 0x4000,
120 .config_ctl_val = 0x20485699,
121 .config_ctl_hi_val = 0x00002261,
122 .config_ctl_hi1_val = 0x329A699c,
123 .user_ctl_val = 0x00000100,
124 .user_ctl_hi_val = 0x00000805,
125 .user_ctl_hi1_val = 0x00000000,
126 };
127
128 static struct clk_alpha_pll cam_cc_pll1 = {
129 .offset = 0x1000,
130 .vco_table = lucid_vco,
131 .num_vco = ARRAY_SIZE(lucid_vco),
132 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
133 .clkr = {
134 .hw.init = &(struct clk_init_data){
135 .name = "cam_cc_pll1",
136 .parent_data = &(const struct clk_parent_data){
137 .fw_name = "bi_tcxo",
138 },
139 .num_parents = 1,
140 .ops = &clk_alpha_pll_lucid_ops,
141 },
142 },
143 };
144
145 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
146 { 0x1, 2 },
147 { }
148 };
149
150 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
151 .offset = 0x1000,
152 .post_div_shift = 8,
153 .post_div_table = post_div_table_cam_cc_pll1_out_even,
154 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
155 .width = 4,
156 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
157 .clkr.hw.init = &(struct clk_init_data){
158 .name = "cam_cc_pll1_out_even",
159 .parent_hws = (const struct clk_hw*[]){
160 &cam_cc_pll1.clkr.hw,
161 },
162 .num_parents = 1,
163 .flags = CLK_SET_RATE_PARENT,
164 .ops = &clk_alpha_pll_postdiv_lucid_ops,
165 },
166 };
167
168 static const struct alpha_pll_config cam_cc_pll2_config = {
169 .l = 0x4b,
170 .alpha = 0x0,
171 .config_ctl_val = 0x08200920,
172 .config_ctl_hi_val = 0x05002015,
173 .config_ctl_hi1_val = 0x00000000,
174 .user_ctl_val = 0x00000100,
175 .user_ctl_hi_val = 0x00000000,
176 .user_ctl_hi1_val = 0x00000000,
177 };
178
179 static struct clk_alpha_pll cam_cc_pll2 = {
180 .offset = 0x2000,
181 .vco_table = zonda_vco,
182 .num_vco = ARRAY_SIZE(zonda_vco),
183 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
184 .clkr = {
185 .hw.init = &(struct clk_init_data){
186 .name = "cam_cc_pll2",
187 .parent_data = &(const struct clk_parent_data){
188 .fw_name = "bi_tcxo",
189 },
190 .num_parents = 1,
191 .ops = &clk_alpha_pll_zonda_ops,
192 },
193 },
194 };
195
196 static const struct clk_div_table post_div_table_cam_cc_pll2_out_main[] = {
197 { 0x1, 2 },
198 { }
199 };
200
201 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main = {
202 .offset = 0x2000,
203 .post_div_shift = 8,
204 .post_div_table = post_div_table_cam_cc_pll2_out_main,
205 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main),
206 .width = 2,
207 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
208 .clkr.hw.init = &(struct clk_init_data){
209 .name = "cam_cc_pll2_out_main",
210 .parent_hws = (const struct clk_hw*[]){
211 &cam_cc_pll2.clkr.hw,
212 },
213 .num_parents = 1,
214 .flags = CLK_SET_RATE_PARENT,
215 .ops = &clk_alpha_pll_postdiv_zonda_ops,
216 },
217 };
218
219 static const struct alpha_pll_config cam_cc_pll3_config = {
220 .l = 0x24,
221 .alpha = 0x7555,
222 .config_ctl_val = 0x20485699,
223 .config_ctl_hi_val = 0x00002261,
224 .config_ctl_hi1_val = 0x329A699c,
225 .user_ctl_val = 0x00000100,
226 .user_ctl_hi_val = 0x00000805,
227 .user_ctl_hi1_val = 0x00000000,
228 };
229
230 static struct clk_alpha_pll cam_cc_pll3 = {
231 .offset = 0x3000,
232 .vco_table = lucid_vco,
233 .num_vco = ARRAY_SIZE(lucid_vco),
234 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
235 .clkr = {
236 .hw.init = &(struct clk_init_data){
237 .name = "cam_cc_pll3",
238 .parent_data = &(const struct clk_parent_data){
239 .fw_name = "bi_tcxo",
240 },
241 .num_parents = 1,
242 .ops = &clk_alpha_pll_lucid_ops,
243 },
244 },
245 };
246
247 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
248 { 0x1, 2 },
249 { }
250 };
251
252 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
253 .offset = 0x3000,
254 .post_div_shift = 8,
255 .post_div_table = post_div_table_cam_cc_pll3_out_even,
256 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
257 .width = 4,
258 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
259 .clkr.hw.init = &(struct clk_init_data){
260 .name = "cam_cc_pll3_out_even",
261 .parent_hws = (const struct clk_hw*[]){
262 &cam_cc_pll3.clkr.hw,
263 },
264 .num_parents = 1,
265 .flags = CLK_SET_RATE_PARENT,
266 .ops = &clk_alpha_pll_postdiv_lucid_ops,
267 },
268 };
269
270 static const struct alpha_pll_config cam_cc_pll4_config = {
271 .l = 0x24,
272 .alpha = 0x7555,
273 .config_ctl_val = 0x20485699,
274 .config_ctl_hi_val = 0x00002261,
275 .config_ctl_hi1_val = 0x329A699c,
276 .user_ctl_val = 0x00000100,
277 .user_ctl_hi_val = 0x00000805,
278 .user_ctl_hi1_val = 0x00000000,
279 };
280
281 static struct clk_alpha_pll cam_cc_pll4 = {
282 .offset = 0x4000,
283 .vco_table = lucid_vco,
284 .num_vco = ARRAY_SIZE(lucid_vco),
285 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
286 .clkr = {
287 .hw.init = &(struct clk_init_data){
288 .name = "cam_cc_pll4",
289 .parent_data = &(const struct clk_parent_data){
290 .fw_name = "bi_tcxo",
291 },
292 .num_parents = 1,
293 .ops = &clk_alpha_pll_lucid_ops,
294 },
295 },
296 };
297
298 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
299 { 0x1, 2 },
300 { }
301 };
302
303 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
304 .offset = 0x4000,
305 .post_div_shift = 8,
306 .post_div_table = post_div_table_cam_cc_pll4_out_even,
307 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
308 .width = 4,
309 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
310 .clkr.hw.init = &(struct clk_init_data){
311 .name = "cam_cc_pll4_out_even",
312 .parent_hws = (const struct clk_hw*[]){
313 &cam_cc_pll4.clkr.hw,
314 },
315 .num_parents = 1,
316 .flags = CLK_SET_RATE_PARENT,
317 .ops = &clk_alpha_pll_postdiv_lucid_ops,
318 },
319 };
320
321 static const struct parent_map cam_cc_parent_map_0[] = {
322 { P_BI_TCXO, 0 },
323 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
324 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
325 { P_CAM_CC_PLL0_OUT_ODD, 3 },
326 { P_CAM_CC_PLL2_OUT_MAIN, 5 },
327 };
328
329 static const struct clk_parent_data cam_cc_parent_data_0[] = {
330 { .fw_name = "bi_tcxo" },
331 { .hw = &cam_cc_pll0.clkr.hw },
332 { .hw = &cam_cc_pll0_out_even.clkr.hw },
333 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
334 { .hw = &cam_cc_pll2_out_main.clkr.hw },
335 };
336
337 static const struct parent_map cam_cc_parent_map_1[] = {
338 { P_BI_TCXO, 0 },
339 { P_CAM_CC_PLL2_OUT_EARLY, 5 },
340 };
341
342 static const struct clk_parent_data cam_cc_parent_data_1[] = {
343 { .fw_name = "bi_tcxo" },
344 { .hw = &cam_cc_pll2.clkr.hw },
345 };
346
347 static const struct parent_map cam_cc_parent_map_2[] = {
348 { P_BI_TCXO, 0 },
349 { P_CAM_CC_PLL3_OUT_EVEN, 6 },
350 };
351
352 static const struct clk_parent_data cam_cc_parent_data_2[] = {
353 { .fw_name = "bi_tcxo" },
354 { .hw = &cam_cc_pll3_out_even.clkr.hw },
355 };
356
357 static const struct parent_map cam_cc_parent_map_3[] = {
358 { P_BI_TCXO, 0 },
359 { P_CAM_CC_PLL4_OUT_EVEN, 6 },
360 };
361
362 static const struct clk_parent_data cam_cc_parent_data_3[] = {
363 { .fw_name = "bi_tcxo" },
364 { .hw = &cam_cc_pll4_out_even.clkr.hw },
365 };
366
367 static const struct parent_map cam_cc_parent_map_4[] = {
368 { P_BI_TCXO, 0 },
369 { P_CAM_CC_PLL1_OUT_EVEN, 4 },
370 };
371
372 static const struct clk_parent_data cam_cc_parent_data_4[] = {
373 { .fw_name = "bi_tcxo" },
374 { .hw = &cam_cc_pll1_out_even.clkr.hw },
375 };
376
377 static const struct parent_map cam_cc_parent_map_5[] = {
378 { P_SLEEP_CLK, 0 },
379 };
380
381 static const struct clk_parent_data cam_cc_parent_data_5[] = {
382 { .fw_name = "sleep_clk" },
383 };
384
385 static const struct parent_map cam_cc_parent_map_6[] = {
386 { P_BI_TCXO, 0 },
387 };
388
389 static const struct clk_parent_data cam_cc_parent_data_6[] = {
390 { .fw_name = "bi_tcxo" },
391 };
392
393 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
394 F(19200000, P_BI_TCXO, 1, 0, 0),
395 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
396 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
397 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
398 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
399 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
400 { }
401 };
402
403 static struct clk_rcg2 cam_cc_bps_clk_src = {
404 .cmd_rcgr = 0x7010,
405 .mnd_width = 0,
406 .hid_width = 5,
407 .parent_map = cam_cc_parent_map_0,
408 .freq_tbl = ftbl_cam_cc_bps_clk_src,
409 .clkr.hw.init = &(struct clk_init_data){
410 .name = "cam_cc_bps_clk_src",
411 .parent_data = cam_cc_parent_data_0,
412 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
413 .flags = CLK_SET_RATE_PARENT,
414 .ops = &clk_rcg2_ops,
415 },
416 };
417
418 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
419 F(19200000, P_BI_TCXO, 1, 0, 0),
420 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
421 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
422 { }
423 };
424
425 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
426 .cmd_rcgr = 0xc0f8,
427 .mnd_width = 0,
428 .hid_width = 5,
429 .parent_map = cam_cc_parent_map_0,
430 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
431 .clkr.hw.init = &(struct clk_init_data){
432 .name = "cam_cc_camnoc_axi_clk_src",
433 .parent_data = cam_cc_parent_data_0,
434 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
435 .flags = CLK_SET_RATE_PARENT,
436 .ops = &clk_rcg2_ops,
437 },
438 };
439
440 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
441 F(19200000, P_BI_TCXO, 1, 0, 0),
442 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
443 { }
444 };
445
446 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
447 .cmd_rcgr = 0xc0bc,
448 .mnd_width = 8,
449 .hid_width = 5,
450 .parent_map = cam_cc_parent_map_0,
451 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
452 .clkr.hw.init = &(struct clk_init_data){
453 .name = "cam_cc_cci_0_clk_src",
454 .parent_data = cam_cc_parent_data_0,
455 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
456 .flags = CLK_SET_RATE_PARENT,
457 .ops = &clk_rcg2_ops,
458 },
459 };
460
461 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
462 .cmd_rcgr = 0xc0d8,
463 .mnd_width = 8,
464 .hid_width = 5,
465 .parent_map = cam_cc_parent_map_0,
466 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
467 .clkr.hw.init = &(struct clk_init_data){
468 .name = "cam_cc_cci_1_clk_src",
469 .parent_data = cam_cc_parent_data_0,
470 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
471 .flags = CLK_SET_RATE_PARENT,
472 .ops = &clk_rcg2_ops,
473 },
474 };
475
476 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
477 F(19200000, P_BI_TCXO, 1, 0, 0),
478 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
479 { }
480 };
481
482 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
483 .cmd_rcgr = 0xa068,
484 .mnd_width = 0,
485 .hid_width = 5,
486 .parent_map = cam_cc_parent_map_0,
487 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
488 .clkr.hw.init = &(struct clk_init_data){
489 .name = "cam_cc_cphy_rx_clk_src",
490 .parent_data = cam_cc_parent_data_0,
491 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
492 .flags = CLK_SET_RATE_PARENT,
493 .ops = &clk_rcg2_ops,
494 },
495 };
496
497 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
498 F(19200000, P_BI_TCXO, 1, 0, 0),
499 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
500 { }
501 };
502
503 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
504 .cmd_rcgr = 0x6000,
505 .mnd_width = 0,
506 .hid_width = 5,
507 .parent_map = cam_cc_parent_map_0,
508 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
509 .clkr.hw.init = &(struct clk_init_data){
510 .name = "cam_cc_csi0phytimer_clk_src",
511 .parent_data = cam_cc_parent_data_0,
512 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
513 .flags = CLK_SET_RATE_PARENT,
514 .ops = &clk_rcg2_ops,
515 },
516 };
517
518 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
519 .cmd_rcgr = 0x6020,
520 .mnd_width = 0,
521 .hid_width = 5,
522 .parent_map = cam_cc_parent_map_0,
523 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
524 .clkr.hw.init = &(struct clk_init_data){
525 .name = "cam_cc_csi1phytimer_clk_src",
526 .parent_data = cam_cc_parent_data_0,
527 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
528 .flags = CLK_SET_RATE_PARENT,
529 .ops = &clk_rcg2_ops,
530 },
531 };
532
533 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
534 .cmd_rcgr = 0x6040,
535 .mnd_width = 0,
536 .hid_width = 5,
537 .parent_map = cam_cc_parent_map_0,
538 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
539 .clkr.hw.init = &(struct clk_init_data){
540 .name = "cam_cc_csi2phytimer_clk_src",
541 .parent_data = cam_cc_parent_data_0,
542 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
543 .flags = CLK_SET_RATE_PARENT,
544 .ops = &clk_rcg2_ops,
545 },
546 };
547
548 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
549 .cmd_rcgr = 0x6060,
550 .mnd_width = 0,
551 .hid_width = 5,
552 .parent_map = cam_cc_parent_map_0,
553 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
554 .clkr.hw.init = &(struct clk_init_data){
555 .name = "cam_cc_csi3phytimer_clk_src",
556 .parent_data = cam_cc_parent_data_0,
557 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
558 .flags = CLK_SET_RATE_PARENT,
559 .ops = &clk_rcg2_ops,
560 },
561 };
562
563 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
564 .cmd_rcgr = 0x6080,
565 .mnd_width = 0,
566 .hid_width = 5,
567 .parent_map = cam_cc_parent_map_0,
568 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
569 .clkr.hw.init = &(struct clk_init_data){
570 .name = "cam_cc_csi4phytimer_clk_src",
571 .parent_data = cam_cc_parent_data_0,
572 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
573 .flags = CLK_SET_RATE_PARENT,
574 .ops = &clk_rcg2_ops,
575 },
576 };
577
578 static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
579 .cmd_rcgr = 0x60a0,
580 .mnd_width = 0,
581 .hid_width = 5,
582 .parent_map = cam_cc_parent_map_0,
583 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
584 .clkr.hw.init = &(struct clk_init_data){
585 .name = "cam_cc_csi5phytimer_clk_src",
586 .parent_data = cam_cc_parent_data_0,
587 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
588 .flags = CLK_SET_RATE_PARENT,
589 .ops = &clk_rcg2_ops,
590 },
591 };
592
593 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
594 F(19200000, P_BI_TCXO, 1, 0, 0),
595 F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
596 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
597 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
598 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
599 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
600 { }
601 };
602
603 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
604 .cmd_rcgr = 0x703c,
605 .mnd_width = 0,
606 .hid_width = 5,
607 .parent_map = cam_cc_parent_map_0,
608 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
609 .clkr.hw.init = &(struct clk_init_data){
610 .name = "cam_cc_fast_ahb_clk_src",
611 .parent_data = cam_cc_parent_data_0,
612 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
613 .flags = CLK_SET_RATE_PARENT,
614 .ops = &clk_rcg2_ops,
615 },
616 };
617
618 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
619 F(19200000, P_BI_TCXO, 1, 0, 0),
620 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
621 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
622 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
623 { }
624 };
625
626 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
627 .cmd_rcgr = 0xc098,
628 .mnd_width = 0,
629 .hid_width = 5,
630 .parent_map = cam_cc_parent_map_0,
631 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
632 .clkr.hw.init = &(struct clk_init_data){
633 .name = "cam_cc_fd_core_clk_src",
634 .parent_data = cam_cc_parent_data_0,
635 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
636 .flags = CLK_SET_RATE_PARENT,
637 .ops = &clk_rcg2_ops,
638 },
639 };
640
641 static struct clk_rcg2 cam_cc_icp_clk_src = {
642 .cmd_rcgr = 0xc074,
643 .mnd_width = 0,
644 .hid_width = 5,
645 .parent_map = cam_cc_parent_map_0,
646 .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
647 .clkr.hw.init = &(struct clk_init_data){
648 .name = "cam_cc_icp_clk_src",
649 .parent_data = cam_cc_parent_data_0,
650 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
651 .flags = CLK_SET_RATE_PARENT,
652 .ops = &clk_rcg2_ops,
653 },
654 };
655
656 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
657 F(19200000, P_BI_TCXO, 1, 0, 0),
658 F(350000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
659 F(475000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
660 F(576000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
661 F(680000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
662 { }
663 };
664
665 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
666 .cmd_rcgr = 0xa010,
667 .mnd_width = 0,
668 .hid_width = 5,
669 .parent_map = cam_cc_parent_map_2,
670 .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
671 .clkr.hw.init = &(struct clk_init_data){
672 .name = "cam_cc_ife_0_clk_src",
673 .parent_data = cam_cc_parent_data_2,
674 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
675 .flags = CLK_SET_RATE_PARENT,
676 .ops = &clk_rcg2_ops,
677 },
678 };
679
680 static struct clk_regmap_div cam_cc_sbi_div_clk_src = {
681 .reg = 0x9010,
682 .shift = 0,
683 .width = 3,
684 .clkr.hw.init = &(struct clk_init_data) {
685 .name = "cam_cc_sbi_div_clk_src",
686 .parent_hws = (const struct clk_hw*[]){
687 &cam_cc_ife_0_clk_src.clkr.hw,
688 },
689 .num_parents = 1,
690 .flags = CLK_SET_RATE_PARENT,
691 .ops = &clk_regmap_div_ro_ops,
692 },
693 };
694
695 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
696 F(19200000, P_BI_TCXO, 1, 0, 0),
697 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
698 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
699 { }
700 };
701
702 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
703 .cmd_rcgr = 0xa040,
704 .mnd_width = 0,
705 .hid_width = 5,
706 .parent_map = cam_cc_parent_map_0,
707 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
708 .clkr.hw.init = &(struct clk_init_data){
709 .name = "cam_cc_ife_0_csid_clk_src",
710 .parent_data = cam_cc_parent_data_0,
711 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
712 .flags = CLK_SET_RATE_PARENT,
713 .ops = &clk_rcg2_ops,
714 },
715 };
716
717 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
718 F(19200000, P_BI_TCXO, 1, 0, 0),
719 F(350000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
720 F(475000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
721 F(576000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
722 F(680000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
723 { }
724 };
725
726 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
727 .cmd_rcgr = 0xb010,
728 .mnd_width = 0,
729 .hid_width = 5,
730 .parent_map = cam_cc_parent_map_3,
731 .freq_tbl = ftbl_cam_cc_ife_1_clk_src,
732 .clkr.hw.init = &(struct clk_init_data){
733 .name = "cam_cc_ife_1_clk_src",
734 .parent_data = cam_cc_parent_data_3,
735 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
736 .flags = CLK_SET_RATE_PARENT,
737 .ops = &clk_rcg2_ops,
738 },
739 };
740
741 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
742 .cmd_rcgr = 0xb040,
743 .mnd_width = 0,
744 .hid_width = 5,
745 .parent_map = cam_cc_parent_map_0,
746 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
747 .clkr.hw.init = &(struct clk_init_data){
748 .name = "cam_cc_ife_1_csid_clk_src",
749 .parent_data = cam_cc_parent_data_0,
750 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
751 .flags = CLK_SET_RATE_PARENT,
752 .ops = &clk_rcg2_ops,
753 },
754 };
755
756 static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = {
757 F(19200000, P_BI_TCXO, 1, 0, 0),
758 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
759 F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
760 { }
761 };
762
763 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
764 .cmd_rcgr = 0xc000,
765 .mnd_width = 0,
766 .hid_width = 5,
767 .parent_map = cam_cc_parent_map_0,
768 .freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
769 .clkr.hw.init = &(struct clk_init_data){
770 .name = "cam_cc_ife_lite_clk_src",
771 .parent_data = cam_cc_parent_data_0,
772 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
773 .flags = CLK_SET_RATE_PARENT,
774 .ops = &clk_rcg2_ops,
775 },
776 };
777
778 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
779 .cmd_rcgr = 0xc01c,
780 .mnd_width = 0,
781 .hid_width = 5,
782 .parent_map = cam_cc_parent_map_0,
783 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
784 .clkr.hw.init = &(struct clk_init_data){
785 .name = "cam_cc_ife_lite_csid_clk_src",
786 .parent_data = cam_cc_parent_data_0,
787 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
788 .flags = CLK_SET_RATE_PARENT,
789 .ops = &clk_rcg2_ops,
790 },
791 };
792
793 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
794 F(19200000, P_BI_TCXO, 1, 0, 0),
795 F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
796 F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
797 F(525000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
798 F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
799 { }
800 };
801
802 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
803 .cmd_rcgr = 0x8010,
804 .mnd_width = 0,
805 .hid_width = 5,
806 .parent_map = cam_cc_parent_map_4,
807 .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
808 .clkr.hw.init = &(struct clk_init_data){
809 .name = "cam_cc_ipe_0_clk_src",
810 .parent_data = cam_cc_parent_data_4,
811 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
812 .flags = CLK_SET_RATE_PARENT,
813 .ops = &clk_rcg2_ops,
814 },
815 };
816
817 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
818 .cmd_rcgr = 0xc048,
819 .mnd_width = 0,
820 .hid_width = 5,
821 .parent_map = cam_cc_parent_map_0,
822 .freq_tbl = ftbl_cam_cc_bps_clk_src,
823 .clkr.hw.init = &(struct clk_init_data){
824 .name = "cam_cc_jpeg_clk_src",
825 .parent_data = cam_cc_parent_data_0,
826 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
827 .flags = CLK_SET_RATE_PARENT,
828 .ops = &clk_rcg2_ops,
829 },
830 };
831
832 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
833 F(19200000, P_BI_TCXO, 1, 0, 0),
834 F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 6),
835 F(68571429, P_CAM_CC_PLL2_OUT_EARLY, 1, 1, 21),
836 { }
837 };
838
839 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
840 .cmd_rcgr = 0x5000,
841 .mnd_width = 8,
842 .hid_width = 5,
843 .parent_map = cam_cc_parent_map_1,
844 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
845 .clkr.hw.init = &(struct clk_init_data){
846 .name = "cam_cc_mclk0_clk_src",
847 .parent_data = cam_cc_parent_data_1,
848 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
849 .flags = CLK_SET_RATE_PARENT,
850 .ops = &clk_rcg2_ops,
851 },
852 };
853
854 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
855 .cmd_rcgr = 0x501c,
856 .mnd_width = 8,
857 .hid_width = 5,
858 .parent_map = cam_cc_parent_map_1,
859 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
860 .clkr.hw.init = &(struct clk_init_data){
861 .name = "cam_cc_mclk1_clk_src",
862 .parent_data = cam_cc_parent_data_1,
863 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
864 .flags = CLK_SET_RATE_PARENT,
865 .ops = &clk_rcg2_ops,
866 },
867 };
868
869 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
870 .cmd_rcgr = 0x5038,
871 .mnd_width = 8,
872 .hid_width = 5,
873 .parent_map = cam_cc_parent_map_1,
874 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
875 .clkr.hw.init = &(struct clk_init_data){
876 .name = "cam_cc_mclk2_clk_src",
877 .parent_data = cam_cc_parent_data_1,
878 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
879 .flags = CLK_SET_RATE_PARENT,
880 .ops = &clk_rcg2_ops,
881 },
882 };
883
884 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
885 .cmd_rcgr = 0x5054,
886 .mnd_width = 8,
887 .hid_width = 5,
888 .parent_map = cam_cc_parent_map_1,
889 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
890 .clkr.hw.init = &(struct clk_init_data){
891 .name = "cam_cc_mclk3_clk_src",
892 .parent_data = cam_cc_parent_data_1,
893 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
894 .flags = CLK_SET_RATE_PARENT,
895 .ops = &clk_rcg2_ops,
896 },
897 };
898
899 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
900 .cmd_rcgr = 0x5070,
901 .mnd_width = 8,
902 .hid_width = 5,
903 .parent_map = cam_cc_parent_map_1,
904 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
905 .clkr.hw.init = &(struct clk_init_data){
906 .name = "cam_cc_mclk4_clk_src",
907 .parent_data = cam_cc_parent_data_1,
908 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
909 .flags = CLK_SET_RATE_PARENT,
910 .ops = &clk_rcg2_ops,
911 },
912 };
913
914 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
915 .cmd_rcgr = 0x508c,
916 .mnd_width = 8,
917 .hid_width = 5,
918 .parent_map = cam_cc_parent_map_1,
919 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
920 .clkr.hw.init = &(struct clk_init_data){
921 .name = "cam_cc_mclk5_clk_src",
922 .parent_data = cam_cc_parent_data_1,
923 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
924 .flags = CLK_SET_RATE_PARENT,
925 .ops = &clk_rcg2_ops,
926 },
927 };
928
929 static struct clk_rcg2 cam_cc_mclk6_clk_src = {
930 .cmd_rcgr = 0x50a8,
931 .mnd_width = 8,
932 .hid_width = 5,
933 .parent_map = cam_cc_parent_map_1,
934 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
935 .clkr.hw.init = &(struct clk_init_data){
936 .name = "cam_cc_mclk6_clk_src",
937 .parent_data = cam_cc_parent_data_1,
938 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
939 .flags = CLK_SET_RATE_PARENT,
940 .ops = &clk_rcg2_ops,
941 },
942 };
943
944 static struct clk_rcg2 cam_cc_sbi_csid_clk_src = {
945 .cmd_rcgr = 0x901c,
946 .mnd_width = 0,
947 .hid_width = 5,
948 .parent_map = cam_cc_parent_map_0,
949 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
950 .clkr.hw.init = &(struct clk_init_data){
951 .name = "cam_cc_sbi_csid_clk_src",
952 .parent_data = cam_cc_parent_data_0,
953 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
954 .flags = CLK_SET_RATE_PARENT,
955 .ops = &clk_rcg2_ops,
956 },
957 };
958
959 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
960 F(32768, P_SLEEP_CLK, 1, 0, 0),
961 { }
962 };
963
964 static struct clk_rcg2 cam_cc_sleep_clk_src = {
965 .cmd_rcgr = 0xc170,
966 .mnd_width = 0,
967 .hid_width = 5,
968 .parent_map = cam_cc_parent_map_5,
969 .freq_tbl = ftbl_cam_cc_sleep_clk_src,
970 .clkr.hw.init = &(struct clk_init_data){
971 .name = "cam_cc_sleep_clk_src",
972 .parent_data = cam_cc_parent_data_5,
973 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
974 .flags = CLK_SET_RATE_PARENT,
975 .ops = &clk_rcg2_ops,
976 },
977 };
978
979 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
980 F(19200000, P_BI_TCXO, 1, 0, 0),
981 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
982 { }
983 };
984
985 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
986 .cmd_rcgr = 0x7058,
987 .mnd_width = 8,
988 .hid_width = 5,
989 .parent_map = cam_cc_parent_map_0,
990 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
991 .clkr.hw.init = &(struct clk_init_data){
992 .name = "cam_cc_slow_ahb_clk_src",
993 .parent_data = cam_cc_parent_data_0,
994 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
995 .flags = CLK_SET_RATE_PARENT,
996 .ops = &clk_rcg2_ops,
997 },
998 };
999
1000 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1001 F(19200000, P_BI_TCXO, 1, 0, 0),
1002 { }
1003 };
1004
1005 static struct clk_rcg2 cam_cc_xo_clk_src = {
1006 .cmd_rcgr = 0xc154,
1007 .mnd_width = 0,
1008 .hid_width = 5,
1009 .parent_map = cam_cc_parent_map_6,
1010 .freq_tbl = ftbl_cam_cc_xo_clk_src,
1011 .clkr.hw.init = &(struct clk_init_data){
1012 .name = "cam_cc_xo_clk_src",
1013 .parent_data = cam_cc_parent_data_6,
1014 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1015 .flags = CLK_SET_RATE_PARENT,
1016 .ops = &clk_rcg2_ops,
1017 },
1018 };
1019
1020 static struct clk_branch cam_cc_bps_ahb_clk = {
1021 .halt_reg = 0x7070,
1022 .halt_check = BRANCH_HALT,
1023 .clkr = {
1024 .enable_reg = 0x7070,
1025 .enable_mask = BIT(0),
1026 .hw.init = &(struct clk_init_data){
1027 .name = "cam_cc_bps_ahb_clk",
1028 .parent_hws = (const struct clk_hw*[]){
1029 &cam_cc_slow_ahb_clk_src.clkr.hw
1030 },
1031 .num_parents = 1,
1032 .flags = CLK_SET_RATE_PARENT,
1033 .ops = &clk_branch2_ops,
1034 },
1035 },
1036 };
1037
1038 static struct clk_branch cam_cc_bps_areg_clk = {
1039 .halt_reg = 0x7054,
1040 .halt_check = BRANCH_HALT,
1041 .clkr = {
1042 .enable_reg = 0x7054,
1043 .enable_mask = BIT(0),
1044 .hw.init = &(struct clk_init_data){
1045 .name = "cam_cc_bps_areg_clk",
1046 .parent_hws = (const struct clk_hw*[]){
1047 &cam_cc_fast_ahb_clk_src.clkr.hw
1048 },
1049 .num_parents = 1,
1050 .flags = CLK_SET_RATE_PARENT,
1051 .ops = &clk_branch2_ops,
1052 },
1053 },
1054 };
1055
1056 static struct clk_branch cam_cc_bps_axi_clk = {
1057 .halt_reg = 0x7038,
1058 .halt_check = BRANCH_HALT,
1059 .clkr = {
1060 .enable_reg = 0x7038,
1061 .enable_mask = BIT(0),
1062 .hw.init = &(struct clk_init_data){
1063 .name = "cam_cc_bps_axi_clk",
1064 .parent_hws = (const struct clk_hw*[]){
1065 &cam_cc_camnoc_axi_clk_src.clkr.hw
1066 },
1067 .num_parents = 1,
1068 .flags = CLK_SET_RATE_PARENT,
1069 .ops = &clk_branch2_ops,
1070 },
1071 },
1072 };
1073
1074 static struct clk_branch cam_cc_bps_clk = {
1075 .halt_reg = 0x7028,
1076 .halt_check = BRANCH_HALT,
1077 .clkr = {
1078 .enable_reg = 0x7028,
1079 .enable_mask = BIT(0),
1080 .hw.init = &(struct clk_init_data){
1081 .name = "cam_cc_bps_clk",
1082 .parent_hws = (const struct clk_hw*[]){
1083 &cam_cc_bps_clk_src.clkr.hw
1084 },
1085 .num_parents = 1,
1086 .flags = CLK_SET_RATE_PARENT,
1087 .ops = &clk_branch2_ops,
1088 },
1089 },
1090 };
1091
1092 static struct clk_branch cam_cc_camnoc_axi_clk = {
1093 .halt_reg = 0xc114,
1094 .halt_check = BRANCH_HALT,
1095 .clkr = {
1096 .enable_reg = 0xc114,
1097 .enable_mask = BIT(0),
1098 .hw.init = &(struct clk_init_data){
1099 .name = "cam_cc_camnoc_axi_clk",
1100 .parent_hws = (const struct clk_hw*[]){
1101 &cam_cc_camnoc_axi_clk_src.clkr.hw
1102 },
1103 .num_parents = 1,
1104 .flags = CLK_SET_RATE_PARENT,
1105 .ops = &clk_branch2_ops,
1106 },
1107 },
1108 };
1109
1110 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1111 .halt_reg = 0xc11c,
1112 .halt_check = BRANCH_HALT,
1113 .clkr = {
1114 .enable_reg = 0xc11c,
1115 .enable_mask = BIT(0),
1116 .hw.init = &(struct clk_init_data){
1117 .name = "cam_cc_camnoc_dcd_xo_clk",
1118 .parent_hws = (const struct clk_hw*[]){
1119 &cam_cc_xo_clk_src.clkr.hw
1120 },
1121 .num_parents = 1,
1122 .flags = CLK_SET_RATE_PARENT,
1123 .ops = &clk_branch2_ops,
1124 },
1125 },
1126 };
1127
1128 static struct clk_branch cam_cc_cci_0_clk = {
1129 .halt_reg = 0xc0d4,
1130 .halt_check = BRANCH_HALT,
1131 .clkr = {
1132 .enable_reg = 0xc0d4,
1133 .enable_mask = BIT(0),
1134 .hw.init = &(struct clk_init_data){
1135 .name = "cam_cc_cci_0_clk",
1136 .parent_hws = (const struct clk_hw*[]){
1137 &cam_cc_cci_0_clk_src.clkr.hw
1138 },
1139 .num_parents = 1,
1140 .flags = CLK_SET_RATE_PARENT,
1141 .ops = &clk_branch2_ops,
1142 },
1143 },
1144 };
1145
1146 static struct clk_branch cam_cc_cci_1_clk = {
1147 .halt_reg = 0xc0f0,
1148 .halt_check = BRANCH_HALT,
1149 .clkr = {
1150 .enable_reg = 0xc0f0,
1151 .enable_mask = BIT(0),
1152 .hw.init = &(struct clk_init_data){
1153 .name = "cam_cc_cci_1_clk",
1154 .parent_hws = (const struct clk_hw*[]){
1155 &cam_cc_cci_1_clk_src.clkr.hw
1156 },
1157 .num_parents = 1,
1158 .flags = CLK_SET_RATE_PARENT,
1159 .ops = &clk_branch2_ops,
1160 },
1161 },
1162 };
1163
1164 static struct clk_branch cam_cc_core_ahb_clk = {
1165 .halt_reg = 0xc150,
1166 .halt_check = BRANCH_HALT_DELAY,
1167 .clkr = {
1168 .enable_reg = 0xc150,
1169 .enable_mask = BIT(0),
1170 .hw.init = &(struct clk_init_data){
1171 .name = "cam_cc_core_ahb_clk",
1172 .parent_hws = (const struct clk_hw*[]){
1173 &cam_cc_slow_ahb_clk_src.clkr.hw
1174 },
1175 .num_parents = 1,
1176 .flags = CLK_SET_RATE_PARENT,
1177 .ops = &clk_branch2_ops,
1178 },
1179 },
1180 };
1181
1182 static struct clk_branch cam_cc_cpas_ahb_clk = {
1183 .halt_reg = 0xc0f4,
1184 .halt_check = BRANCH_HALT,
1185 .clkr = {
1186 .enable_reg = 0xc0f4,
1187 .enable_mask = BIT(0),
1188 .hw.init = &(struct clk_init_data){
1189 .name = "cam_cc_cpas_ahb_clk",
1190 .parent_hws = (const struct clk_hw*[]){
1191 &cam_cc_slow_ahb_clk_src.clkr.hw
1192 },
1193 .num_parents = 1,
1194 .flags = CLK_SET_RATE_PARENT,
1195 .ops = &clk_branch2_ops,
1196 },
1197 },
1198 };
1199
1200 static struct clk_branch cam_cc_csi0phytimer_clk = {
1201 .halt_reg = 0x6018,
1202 .halt_check = BRANCH_HALT,
1203 .clkr = {
1204 .enable_reg = 0x6018,
1205 .enable_mask = BIT(0),
1206 .hw.init = &(struct clk_init_data){
1207 .name = "cam_cc_csi0phytimer_clk",
1208 .parent_hws = (const struct clk_hw*[]){
1209 &cam_cc_csi0phytimer_clk_src.clkr.hw
1210 },
1211 .num_parents = 1,
1212 .flags = CLK_SET_RATE_PARENT,
1213 .ops = &clk_branch2_ops,
1214 },
1215 },
1216 };
1217
1218 static struct clk_branch cam_cc_csi1phytimer_clk = {
1219 .halt_reg = 0x6038,
1220 .halt_check = BRANCH_HALT,
1221 .clkr = {
1222 .enable_reg = 0x6038,
1223 .enable_mask = BIT(0),
1224 .hw.init = &(struct clk_init_data){
1225 .name = "cam_cc_csi1phytimer_clk",
1226 .parent_hws = (const struct clk_hw*[]){
1227 &cam_cc_csi1phytimer_clk_src.clkr.hw
1228 },
1229 .num_parents = 1,
1230 .flags = CLK_SET_RATE_PARENT,
1231 .ops = &clk_branch2_ops,
1232 },
1233 },
1234 };
1235
1236 static struct clk_branch cam_cc_csi2phytimer_clk = {
1237 .halt_reg = 0x6058,
1238 .halt_check = BRANCH_HALT,
1239 .clkr = {
1240 .enable_reg = 0x6058,
1241 .enable_mask = BIT(0),
1242 .hw.init = &(struct clk_init_data){
1243 .name = "cam_cc_csi2phytimer_clk",
1244 .parent_hws = (const struct clk_hw*[]){
1245 &cam_cc_csi2phytimer_clk_src.clkr.hw
1246 },
1247 .num_parents = 1,
1248 .flags = CLK_SET_RATE_PARENT,
1249 .ops = &clk_branch2_ops,
1250 },
1251 },
1252 };
1253
1254 static struct clk_branch cam_cc_csi3phytimer_clk = {
1255 .halt_reg = 0x6078,
1256 .halt_check = BRANCH_HALT,
1257 .clkr = {
1258 .enable_reg = 0x6078,
1259 .enable_mask = BIT(0),
1260 .hw.init = &(struct clk_init_data){
1261 .name = "cam_cc_csi3phytimer_clk",
1262 .parent_hws = (const struct clk_hw*[]){
1263 &cam_cc_csi3phytimer_clk_src.clkr.hw
1264 },
1265 .num_parents = 1,
1266 .flags = CLK_SET_RATE_PARENT,
1267 .ops = &clk_branch2_ops,
1268 },
1269 },
1270 };
1271
1272 static struct clk_branch cam_cc_csi4phytimer_clk = {
1273 .halt_reg = 0x6098,
1274 .halt_check = BRANCH_HALT,
1275 .clkr = {
1276 .enable_reg = 0x6098,
1277 .enable_mask = BIT(0),
1278 .hw.init = &(struct clk_init_data){
1279 .name = "cam_cc_csi4phytimer_clk",
1280 .parent_hws = (const struct clk_hw*[]){
1281 &cam_cc_csi4phytimer_clk_src.clkr.hw
1282 },
1283 .num_parents = 1,
1284 .flags = CLK_SET_RATE_PARENT,
1285 .ops = &clk_branch2_ops,
1286 },
1287 },
1288 };
1289
1290 static struct clk_branch cam_cc_csi5phytimer_clk = {
1291 .halt_reg = 0x60b8,
1292 .halt_check = BRANCH_HALT,
1293 .clkr = {
1294 .enable_reg = 0x60b8,
1295 .enable_mask = BIT(0),
1296 .hw.init = &(struct clk_init_data){
1297 .name = "cam_cc_csi5phytimer_clk",
1298 .parent_hws = (const struct clk_hw*[]){
1299 &cam_cc_csi5phytimer_clk_src.clkr.hw
1300 },
1301 .num_parents = 1,
1302 .flags = CLK_SET_RATE_PARENT,
1303 .ops = &clk_branch2_ops,
1304 },
1305 },
1306 };
1307
1308 static struct clk_branch cam_cc_csiphy0_clk = {
1309 .halt_reg = 0x601c,
1310 .halt_check = BRANCH_HALT,
1311 .clkr = {
1312 .enable_reg = 0x601c,
1313 .enable_mask = BIT(0),
1314 .hw.init = &(struct clk_init_data){
1315 .name = "cam_cc_csiphy0_clk",
1316 .parent_hws = (const struct clk_hw*[]){
1317 &cam_cc_cphy_rx_clk_src.clkr.hw
1318 },
1319 .num_parents = 1,
1320 .flags = CLK_SET_RATE_PARENT,
1321 .ops = &clk_branch2_ops,
1322 },
1323 },
1324 };
1325
1326 static struct clk_branch cam_cc_csiphy1_clk = {
1327 .halt_reg = 0x603c,
1328 .halt_check = BRANCH_HALT,
1329 .clkr = {
1330 .enable_reg = 0x603c,
1331 .enable_mask = BIT(0),
1332 .hw.init = &(struct clk_init_data){
1333 .name = "cam_cc_csiphy1_clk",
1334 .parent_hws = (const struct clk_hw*[]){
1335 &cam_cc_cphy_rx_clk_src.clkr.hw
1336 },
1337 .num_parents = 1,
1338 .flags = CLK_SET_RATE_PARENT,
1339 .ops = &clk_branch2_ops,
1340 },
1341 },
1342 };
1343
1344 static struct clk_branch cam_cc_csiphy2_clk = {
1345 .halt_reg = 0x605c,
1346 .halt_check = BRANCH_HALT,
1347 .clkr = {
1348 .enable_reg = 0x605c,
1349 .enable_mask = BIT(0),
1350 .hw.init = &(struct clk_init_data){
1351 .name = "cam_cc_csiphy2_clk",
1352 .parent_hws = (const struct clk_hw*[]){
1353 &cam_cc_cphy_rx_clk_src.clkr.hw
1354 },
1355 .num_parents = 1,
1356 .flags = CLK_SET_RATE_PARENT,
1357 .ops = &clk_branch2_ops,
1358 },
1359 },
1360 };
1361
1362 static struct clk_branch cam_cc_csiphy3_clk = {
1363 .halt_reg = 0x607c,
1364 .halt_check = BRANCH_HALT,
1365 .clkr = {
1366 .enable_reg = 0x607c,
1367 .enable_mask = BIT(0),
1368 .hw.init = &(struct clk_init_data){
1369 .name = "cam_cc_csiphy3_clk",
1370 .parent_hws = (const struct clk_hw*[]){
1371 &cam_cc_cphy_rx_clk_src.clkr.hw
1372 },
1373 .num_parents = 1,
1374 .flags = CLK_SET_RATE_PARENT,
1375 .ops = &clk_branch2_ops,
1376 },
1377 },
1378 };
1379
1380 static struct clk_branch cam_cc_csiphy4_clk = {
1381 .halt_reg = 0x609c,
1382 .halt_check = BRANCH_HALT,
1383 .clkr = {
1384 .enable_reg = 0x609c,
1385 .enable_mask = BIT(0),
1386 .hw.init = &(struct clk_init_data){
1387 .name = "cam_cc_csiphy4_clk",
1388 .parent_hws = (const struct clk_hw*[]){
1389 &cam_cc_cphy_rx_clk_src.clkr.hw
1390 },
1391 .num_parents = 1,
1392 .flags = CLK_SET_RATE_PARENT,
1393 .ops = &clk_branch2_ops,
1394 },
1395 },
1396 };
1397
1398 static struct clk_branch cam_cc_csiphy5_clk = {
1399 .halt_reg = 0x60bc,
1400 .halt_check = BRANCH_HALT,
1401 .clkr = {
1402 .enable_reg = 0x60bc,
1403 .enable_mask = BIT(0),
1404 .hw.init = &(struct clk_init_data){
1405 .name = "cam_cc_csiphy5_clk",
1406 .parent_hws = (const struct clk_hw*[]){
1407 &cam_cc_cphy_rx_clk_src.clkr.hw
1408 },
1409 .num_parents = 1,
1410 .flags = CLK_SET_RATE_PARENT,
1411 .ops = &clk_branch2_ops,
1412 },
1413 },
1414 };
1415
1416 static struct clk_branch cam_cc_fd_core_clk = {
1417 .halt_reg = 0xc0b0,
1418 .halt_check = BRANCH_HALT,
1419 .clkr = {
1420 .enable_reg = 0xc0b0,
1421 .enable_mask = BIT(0),
1422 .hw.init = &(struct clk_init_data){
1423 .name = "cam_cc_fd_core_clk",
1424 .parent_hws = (const struct clk_hw*[]){
1425 &cam_cc_fd_core_clk_src.clkr.hw
1426 },
1427 .num_parents = 1,
1428 .flags = CLK_SET_RATE_PARENT,
1429 .ops = &clk_branch2_ops,
1430 },
1431 },
1432 };
1433
1434 static struct clk_branch cam_cc_fd_core_uar_clk = {
1435 .halt_reg = 0xc0b8,
1436 .halt_check = BRANCH_HALT,
1437 .clkr = {
1438 .enable_reg = 0xc0b8,
1439 .enable_mask = BIT(0),
1440 .hw.init = &(struct clk_init_data){
1441 .name = "cam_cc_fd_core_uar_clk",
1442 .parent_hws = (const struct clk_hw*[]){
1443 &cam_cc_fd_core_clk_src.clkr.hw
1444 },
1445 .num_parents = 1,
1446 .flags = CLK_SET_RATE_PARENT,
1447 .ops = &clk_branch2_ops,
1448 },
1449 },
1450 };
1451
1452 static struct clk_branch cam_cc_gdsc_clk = {
1453 .halt_reg = 0xc16c,
1454 .halt_check = BRANCH_HALT,
1455 .clkr = {
1456 .enable_reg = 0xc16c,
1457 .enable_mask = BIT(0),
1458 .hw.init = &(struct clk_init_data){
1459 .name = "cam_cc_gdsc_clk",
1460 .parent_hws = (const struct clk_hw*[]){
1461 &cam_cc_xo_clk_src.clkr.hw
1462 },
1463 .num_parents = 1,
1464 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468 };
1469
1470 static struct clk_branch cam_cc_icp_ahb_clk = {
1471 .halt_reg = 0xc094,
1472 .halt_check = BRANCH_HALT,
1473 .clkr = {
1474 .enable_reg = 0xc094,
1475 .enable_mask = BIT(0),
1476 .hw.init = &(struct clk_init_data){
1477 .name = "cam_cc_icp_ahb_clk",
1478 .parent_hws = (const struct clk_hw*[]){
1479 &cam_cc_slow_ahb_clk_src.clkr.hw
1480 },
1481 .num_parents = 1,
1482 .flags = CLK_SET_RATE_PARENT,
1483 .ops = &clk_branch2_ops,
1484 },
1485 },
1486 };
1487
1488 static struct clk_branch cam_cc_icp_clk = {
1489 .halt_reg = 0xc08c,
1490 .halt_check = BRANCH_HALT,
1491 .clkr = {
1492 .enable_reg = 0xc08c,
1493 .enable_mask = BIT(0),
1494 .hw.init = &(struct clk_init_data){
1495 .name = "cam_cc_icp_clk",
1496 .parent_hws = (const struct clk_hw*[]){
1497 &cam_cc_icp_clk_src.clkr.hw
1498 },
1499 .num_parents = 1,
1500 .flags = CLK_SET_RATE_PARENT,
1501 .ops = &clk_branch2_ops,
1502 },
1503 },
1504 };
1505
1506 static struct clk_branch cam_cc_ife_0_ahb_clk = {
1507 .halt_reg = 0xa088,
1508 .halt_check = BRANCH_HALT,
1509 .clkr = {
1510 .enable_reg = 0xa088,
1511 .enable_mask = BIT(0),
1512 .hw.init = &(struct clk_init_data){
1513 .name = "cam_cc_ife_0_ahb_clk",
1514 .parent_hws = (const struct clk_hw*[]){
1515 &cam_cc_slow_ahb_clk_src.clkr.hw
1516 },
1517 .num_parents = 1,
1518 .flags = CLK_SET_RATE_PARENT,
1519 .ops = &clk_branch2_ops,
1520 },
1521 },
1522 };
1523
1524 static struct clk_branch cam_cc_ife_0_areg_clk = {
1525 .halt_reg = 0xa030,
1526 .halt_check = BRANCH_HALT,
1527 .clkr = {
1528 .enable_reg = 0xa030,
1529 .enable_mask = BIT(0),
1530 .hw.init = &(struct clk_init_data){
1531 .name = "cam_cc_ife_0_areg_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_ife_0_axi_clk = {
1543 .halt_reg = 0xa084,
1544 .halt_check = BRANCH_HALT,
1545 .clkr = {
1546 .enable_reg = 0xa084,
1547 .enable_mask = BIT(0),
1548 .hw.init = &(struct clk_init_data){
1549 .name = "cam_cc_ife_0_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_ife_0_clk = {
1561 .halt_reg = 0xa028,
1562 .halt_check = BRANCH_HALT,
1563 .clkr = {
1564 .enable_reg = 0xa028,
1565 .enable_mask = BIT(0),
1566 .hw.init = &(struct clk_init_data){
1567 .name = "cam_cc_ife_0_clk",
1568 .parent_hws = (const struct clk_hw*[]){
1569 &cam_cc_ife_0_clk_src.clkr.hw
1570 },
1571 .num_parents = 1,
1572 .flags = CLK_SET_RATE_PARENT,
1573 .ops = &clk_branch2_ops,
1574 },
1575 },
1576 };
1577
1578 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1579 .halt_reg = 0xa080,
1580 .halt_check = BRANCH_HALT,
1581 .clkr = {
1582 .enable_reg = 0xa080,
1583 .enable_mask = BIT(0),
1584 .hw.init = &(struct clk_init_data){
1585 .name = "cam_cc_ife_0_cphy_rx_clk",
1586 .parent_hws = (const struct clk_hw*[]){
1587 &cam_cc_cphy_rx_clk_src.clkr.hw
1588 },
1589 .num_parents = 1,
1590 .flags = CLK_SET_RATE_PARENT,
1591 .ops = &clk_branch2_ops,
1592 },
1593 },
1594 };
1595
1596 static struct clk_branch cam_cc_ife_0_csid_clk = {
1597 .halt_reg = 0xa058,
1598 .halt_check = BRANCH_HALT,
1599 .clkr = {
1600 .enable_reg = 0xa058,
1601 .enable_mask = BIT(0),
1602 .hw.init = &(struct clk_init_data){
1603 .name = "cam_cc_ife_0_csid_clk",
1604 .parent_hws = (const struct clk_hw*[]){
1605 &cam_cc_ife_0_csid_clk_src.clkr.hw
1606 },
1607 .num_parents = 1,
1608 .flags = CLK_SET_RATE_PARENT,
1609 .ops = &clk_branch2_ops,
1610 },
1611 },
1612 };
1613
1614 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1615 .halt_reg = 0xa03c,
1616 .halt_check = BRANCH_HALT,
1617 .clkr = {
1618 .enable_reg = 0xa03c,
1619 .enable_mask = BIT(0),
1620 .hw.init = &(struct clk_init_data){
1621 .name = "cam_cc_ife_0_dsp_clk",
1622 .parent_hws = (const struct clk_hw*[]){
1623 &cam_cc_ife_0_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_ife_1_ahb_clk = {
1633 .halt_reg = 0xb068,
1634 .halt_check = BRANCH_HALT,
1635 .clkr = {
1636 .enable_reg = 0xb068,
1637 .enable_mask = BIT(0),
1638 .hw.init = &(struct clk_init_data){
1639 .name = "cam_cc_ife_1_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_ife_1_areg_clk = {
1651 .halt_reg = 0xb030,
1652 .halt_check = BRANCH_HALT,
1653 .clkr = {
1654 .enable_reg = 0xb030,
1655 .enable_mask = BIT(0),
1656 .hw.init = &(struct clk_init_data){
1657 .name = "cam_cc_ife_1_areg_clk",
1658 .parent_hws = (const struct clk_hw*[]){
1659 &cam_cc_fast_ahb_clk_src.clkr.hw
1660 },
1661 .num_parents = 1,
1662 .flags = CLK_SET_RATE_PARENT,
1663 .ops = &clk_branch2_ops,
1664 },
1665 },
1666 };
1667
1668 static struct clk_branch cam_cc_ife_1_axi_clk = {
1669 .halt_reg = 0xb064,
1670 .halt_check = BRANCH_HALT,
1671 .clkr = {
1672 .enable_reg = 0xb064,
1673 .enable_mask = BIT(0),
1674 .hw.init = &(struct clk_init_data){
1675 .name = "cam_cc_ife_1_axi_clk",
1676 .parent_hws = (const struct clk_hw*[]){
1677 &cam_cc_camnoc_axi_clk_src.clkr.hw
1678 },
1679 .num_parents = 1,
1680 .flags = CLK_SET_RATE_PARENT,
1681 .ops = &clk_branch2_ops,
1682 },
1683 },
1684 };
1685
1686 static struct clk_branch cam_cc_ife_1_clk = {
1687 .halt_reg = 0xb028,
1688 .halt_check = BRANCH_HALT,
1689 .clkr = {
1690 .enable_reg = 0xb028,
1691 .enable_mask = BIT(0),
1692 .hw.init = &(struct clk_init_data){
1693 .name = "cam_cc_ife_1_clk",
1694 .parent_hws = (const struct clk_hw*[]){
1695 &cam_cc_ife_1_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_ife_1_cphy_rx_clk = {
1705 .halt_reg = 0xb060,
1706 .halt_check = BRANCH_HALT,
1707 .clkr = {
1708 .enable_reg = 0xb060,
1709 .enable_mask = BIT(0),
1710 .hw.init = &(struct clk_init_data){
1711 .name = "cam_cc_ife_1_cphy_rx_clk",
1712 .parent_hws = (const struct clk_hw*[]){
1713 &cam_cc_cphy_rx_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_ife_1_csid_clk = {
1723 .halt_reg = 0xb058,
1724 .halt_check = BRANCH_HALT,
1725 .clkr = {
1726 .enable_reg = 0xb058,
1727 .enable_mask = BIT(0),
1728 .hw.init = &(struct clk_init_data){
1729 .name = "cam_cc_ife_1_csid_clk",
1730 .parent_hws = (const struct clk_hw*[]){
1731 &cam_cc_ife_1_csid_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_ife_1_dsp_clk = {
1741 .halt_reg = 0xb03c,
1742 .halt_check = BRANCH_HALT,
1743 .clkr = {
1744 .enable_reg = 0xb03c,
1745 .enable_mask = BIT(0),
1746 .hw.init = &(struct clk_init_data){
1747 .name = "cam_cc_ife_1_dsp_clk",
1748 .parent_hws = (const struct clk_hw*[]){
1749 &cam_cc_ife_1_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_ife_lite_ahb_clk = {
1759 .halt_reg = 0xc040,
1760 .halt_check = BRANCH_HALT,
1761 .clkr = {
1762 .enable_reg = 0xc040,
1763 .enable_mask = BIT(0),
1764 .hw.init = &(struct clk_init_data){
1765 .name = "cam_cc_ife_lite_ahb_clk",
1766 .parent_hws = (const struct clk_hw*[]){
1767 &cam_cc_slow_ahb_clk_src.clkr.hw
1768 },
1769 .num_parents = 1,
1770 .flags = CLK_SET_RATE_PARENT,
1771 .ops = &clk_branch2_ops,
1772 },
1773 },
1774 };
1775
1776 static struct clk_branch cam_cc_ife_lite_axi_clk = {
1777 .halt_reg = 0xc044,
1778 .halt_check = BRANCH_HALT,
1779 .clkr = {
1780 .enable_reg = 0xc044,
1781 .enable_mask = BIT(0),
1782 .hw.init = &(struct clk_init_data){
1783 .name = "cam_cc_ife_lite_axi_clk",
1784 .parent_hws = (const struct clk_hw*[]){
1785 &cam_cc_camnoc_axi_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_ife_lite_clk = {
1795 .halt_reg = 0xc018,
1796 .halt_check = BRANCH_HALT,
1797 .clkr = {
1798 .enable_reg = 0xc018,
1799 .enable_mask = BIT(0),
1800 .hw.init = &(struct clk_init_data){
1801 .name = "cam_cc_ife_lite_clk",
1802 .parent_hws = (const struct clk_hw*[]){
1803 &cam_cc_ife_lite_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_ife_lite_cphy_rx_clk = {
1813 .halt_reg = 0xc03c,
1814 .halt_check = BRANCH_HALT,
1815 .clkr = {
1816 .enable_reg = 0xc03c,
1817 .enable_mask = BIT(0),
1818 .hw.init = &(struct clk_init_data){
1819 .name = "cam_cc_ife_lite_cphy_rx_clk",
1820 .parent_hws = (const struct clk_hw*[]){
1821 &cam_cc_cphy_rx_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_ife_lite_csid_clk = {
1831 .halt_reg = 0xc034,
1832 .halt_check = BRANCH_HALT,
1833 .clkr = {
1834 .enable_reg = 0xc034,
1835 .enable_mask = BIT(0),
1836 .hw.init = &(struct clk_init_data){
1837 .name = "cam_cc_ife_lite_csid_clk",
1838 .parent_hws = (const struct clk_hw*[]){
1839 &cam_cc_ife_lite_csid_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_ipe_0_ahb_clk = {
1849 .halt_reg = 0x8040,
1850 .halt_check = BRANCH_HALT,
1851 .clkr = {
1852 .enable_reg = 0x8040,
1853 .enable_mask = BIT(0),
1854 .hw.init = &(struct clk_init_data){
1855 .name = "cam_cc_ipe_0_ahb_clk",
1856 .parent_hws = (const struct clk_hw*[]){
1857 &cam_cc_slow_ahb_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_ipe_0_areg_clk = {
1867 .halt_reg = 0x803c,
1868 .halt_check = BRANCH_HALT,
1869 .clkr = {
1870 .enable_reg = 0x803c,
1871 .enable_mask = BIT(0),
1872 .hw.init = &(struct clk_init_data){
1873 .name = "cam_cc_ipe_0_areg_clk",
1874 .parent_hws = (const struct clk_hw*[]){
1875 &cam_cc_fast_ahb_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_ipe_0_axi_clk = {
1885 .halt_reg = 0x8038,
1886 .halt_check = BRANCH_HALT,
1887 .clkr = {
1888 .enable_reg = 0x8038,
1889 .enable_mask = BIT(0),
1890 .hw.init = &(struct clk_init_data){
1891 .name = "cam_cc_ipe_0_axi_clk",
1892 .parent_hws = (const struct clk_hw*[]){
1893 &cam_cc_camnoc_axi_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_ipe_0_clk = {
1903 .halt_reg = 0x8028,
1904 .halt_check = BRANCH_HALT,
1905 .clkr = {
1906 .enable_reg = 0x8028,
1907 .enable_mask = BIT(0),
1908 .hw.init = &(struct clk_init_data){
1909 .name = "cam_cc_ipe_0_clk",
1910 .parent_hws = (const struct clk_hw*[]){
1911 &cam_cc_ipe_0_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_jpeg_clk = {
1921 .halt_reg = 0xc060,
1922 .halt_check = BRANCH_HALT,
1923 .clkr = {
1924 .enable_reg = 0xc060,
1925 .enable_mask = BIT(0),
1926 .hw.init = &(struct clk_init_data){
1927 .name = "cam_cc_jpeg_clk",
1928 .parent_hws = (const struct clk_hw*[]){
1929 &cam_cc_jpeg_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_mclk0_clk = {
1939 .halt_reg = 0x5018,
1940 .halt_check = BRANCH_HALT,
1941 .clkr = {
1942 .enable_reg = 0x5018,
1943 .enable_mask = BIT(0),
1944 .hw.init = &(struct clk_init_data){
1945 .name = "cam_cc_mclk0_clk",
1946 .parent_hws = (const struct clk_hw*[]){
1947 &cam_cc_mclk0_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_mclk1_clk = {
1957 .halt_reg = 0x5034,
1958 .halt_check = BRANCH_HALT,
1959 .clkr = {
1960 .enable_reg = 0x5034,
1961 .enable_mask = BIT(0),
1962 .hw.init = &(struct clk_init_data){
1963 .name = "cam_cc_mclk1_clk",
1964 .parent_hws = (const struct clk_hw*[]){
1965 &cam_cc_mclk1_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_mclk2_clk = {
1975 .halt_reg = 0x5050,
1976 .halt_check = BRANCH_HALT,
1977 .clkr = {
1978 .enable_reg = 0x5050,
1979 .enable_mask = BIT(0),
1980 .hw.init = &(struct clk_init_data){
1981 .name = "cam_cc_mclk2_clk",
1982 .parent_hws = (const struct clk_hw*[]){
1983 &cam_cc_mclk2_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_mclk3_clk = {
1993 .halt_reg = 0x506c,
1994 .halt_check = BRANCH_HALT,
1995 .clkr = {
1996 .enable_reg = 0x506c,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(struct clk_init_data){
1999 .name = "cam_cc_mclk3_clk",
2000 .parent_hws = (const struct clk_hw*[]){
2001 &cam_cc_mclk3_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_mclk4_clk = {
2011 .halt_reg = 0x5088,
2012 .halt_check = BRANCH_HALT,
2013 .clkr = {
2014 .enable_reg = 0x5088,
2015 .enable_mask = BIT(0),
2016 .hw.init = &(struct clk_init_data){
2017 .name = "cam_cc_mclk4_clk",
2018 .parent_hws = (const struct clk_hw*[]){
2019 &cam_cc_mclk4_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_mclk5_clk = {
2029 .halt_reg = 0x50a4,
2030 .halt_check = BRANCH_HALT,
2031 .clkr = {
2032 .enable_reg = 0x50a4,
2033 .enable_mask = BIT(0),
2034 .hw.init = &(struct clk_init_data){
2035 .name = "cam_cc_mclk5_clk",
2036 .parent_hws = (const struct clk_hw*[]){
2037 &cam_cc_mclk5_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_mclk6_clk = {
2047 .halt_reg = 0x50c0,
2048 .halt_check = BRANCH_HALT,
2049 .clkr = {
2050 .enable_reg = 0x50c0,
2051 .enable_mask = BIT(0),
2052 .hw.init = &(struct clk_init_data){
2053 .name = "cam_cc_mclk6_clk",
2054 .parent_hws = (const struct clk_hw*[]){
2055 &cam_cc_mclk6_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_sbi_ahb_clk = {
2065 .halt_reg = 0x9040,
2066 .halt_check = BRANCH_HALT,
2067 .clkr = {
2068 .enable_reg = 0x9040,
2069 .enable_mask = BIT(0),
2070 .hw.init = &(struct clk_init_data){
2071 .name = "cam_cc_sbi_ahb_clk",
2072 .parent_hws = (const struct clk_hw*[]){
2073 &cam_cc_slow_ahb_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_sbi_axi_clk = {
2083 .halt_reg = 0x903c,
2084 .halt_check = BRANCH_HALT,
2085 .clkr = {
2086 .enable_reg = 0x903c,
2087 .enable_mask = BIT(0),
2088 .hw.init = &(struct clk_init_data){
2089 .name = "cam_cc_sbi_axi_clk",
2090 .parent_hws = (const struct clk_hw*[]){
2091 &cam_cc_camnoc_axi_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_sbi_clk = {
2101 .halt_reg = 0x9014,
2102 .halt_check = BRANCH_HALT,
2103 .clkr = {
2104 .enable_reg = 0x9014,
2105 .enable_mask = BIT(0),
2106 .hw.init = &(struct clk_init_data){
2107 .name = "cam_cc_sbi_clk",
2108 .parent_hws = (const struct clk_hw*[]){
2109 &cam_cc_sbi_div_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_sbi_cphy_rx_clk = {
2119 .halt_reg = 0x9038,
2120 .halt_check = BRANCH_HALT,
2121 .clkr = {
2122 .enable_reg = 0x9038,
2123 .enable_mask = BIT(0),
2124 .hw.init = &(struct clk_init_data){
2125 .name = "cam_cc_sbi_cphy_rx_clk",
2126 .parent_hws = (const struct clk_hw*[]){
2127 &cam_cc_cphy_rx_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_sbi_csid_clk = {
2137 .halt_reg = 0x9034,
2138 .halt_check = BRANCH_HALT,
2139 .clkr = {
2140 .enable_reg = 0x9034,
2141 .enable_mask = BIT(0),
2142 .hw.init = &(struct clk_init_data){
2143 .name = "cam_cc_sbi_csid_clk",
2144 .parent_hws = (const struct clk_hw*[]){
2145 &cam_cc_sbi_csid_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_sbi_ife_0_clk = {
2155 .halt_reg = 0x9044,
2156 .halt_check = BRANCH_HALT,
2157 .clkr = {
2158 .enable_reg = 0x9044,
2159 .enable_mask = BIT(0),
2160 .hw.init = &(struct clk_init_data){
2161 .name = "cam_cc_sbi_ife_0_clk",
2162 .parent_hws = (const struct clk_hw*[]){
2163 &cam_cc_ife_0_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_sbi_ife_1_clk = {
2173 .halt_reg = 0x9048,
2174 .halt_check = BRANCH_HALT,
2175 .clkr = {
2176 .enable_reg = 0x9048,
2177 .enable_mask = BIT(0),
2178 .hw.init = &(struct clk_init_data){
2179 .name = "cam_cc_sbi_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_sleep_clk = {
2191 .halt_reg = 0xc188,
2192 .halt_check = BRANCH_HALT,
2193 .clkr = {
2194 .enable_reg = 0xc188,
2195 .enable_mask = BIT(0),
2196 .hw.init = &(struct clk_init_data){
2197 .name = "cam_cc_sleep_clk",
2198 .parent_hws = (const struct clk_hw*[]){
2199 &cam_cc_sleep_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 gdsc titan_top_gdsc;
2209
2210 static struct gdsc bps_gdsc = {
2211 .gdscr = 0x7004,
2212 .pd = {
2213 .name = "bps_gdsc",
2214 },
2215 .flags = HW_CTRL | POLL_CFG_GDSCR,
2216 .pwrsts = PWRSTS_OFF_ON,
2217 };
2218
2219 static struct gdsc ipe_0_gdsc = {
2220 .gdscr = 0x8004,
2221 .pd = {
2222 .name = "ipe_0_gdsc",
2223 },
2224 .flags = HW_CTRL | POLL_CFG_GDSCR,
2225 .pwrsts = PWRSTS_OFF_ON,
2226 };
2227
2228 static struct gdsc sbi_gdsc = {
2229 .gdscr = 0x9004,
2230 .pd = {
2231 .name = "sbi_gdsc",
2232 },
2233 .flags = HW_CTRL | POLL_CFG_GDSCR,
2234 .pwrsts = PWRSTS_OFF_ON,
2235 };
2236
2237 static struct gdsc ife_0_gdsc = {
2238 .gdscr = 0xa004,
2239 .pd = {
2240 .name = "ife_0_gdsc",
2241 },
2242 .flags = POLL_CFG_GDSCR,
2243 .parent = &titan_top_gdsc.pd,
2244 .pwrsts = PWRSTS_OFF_ON,
2245 };
2246
2247 static struct gdsc ife_1_gdsc = {
2248 .gdscr = 0xb004,
2249 .pd = {
2250 .name = "ife_1_gdsc",
2251 },
2252 .flags = POLL_CFG_GDSCR,
2253 .parent = &titan_top_gdsc.pd,
2254 .pwrsts = PWRSTS_OFF_ON,
2255 };
2256
2257 static struct gdsc titan_top_gdsc = {
2258 .gdscr = 0xc144,
2259 .pd = {
2260 .name = "titan_top_gdsc",
2261 },
2262 .flags = POLL_CFG_GDSCR,
2263 .pwrsts = PWRSTS_OFF_ON,
2264 };
2265
2266 static struct clk_regmap *cam_cc_sm8250_clocks[] = {
2267 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2268 [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
2269 [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
2270 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2271 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2272 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2273 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2274 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2275 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2276 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2277 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2278 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2279 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2280 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2281 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2282 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2283 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2284 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2285 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2286 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2287 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2288 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2289 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2290 [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
2291 [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
2292 [CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
2293 [CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
2294 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2295 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2296 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2297 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2298 [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
2299 [CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
2300 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2301 [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
2302 [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
2303 [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
2304 [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr,
2305 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2306 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2307 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2308 [CAM_CC_IFE_0_AHB_CLK] = &cam_cc_ife_0_ahb_clk.clkr,
2309 [CAM_CC_IFE_0_AREG_CLK] = &cam_cc_ife_0_areg_clk.clkr,
2310 [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
2311 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2312 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2313 [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
2314 [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
2315 [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
2316 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2317 [CAM_CC_IFE_1_AHB_CLK] = &cam_cc_ife_1_ahb_clk.clkr,
2318 [CAM_CC_IFE_1_AREG_CLK] = &cam_cc_ife_1_areg_clk.clkr,
2319 [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
2320 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2321 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2322 [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
2323 [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
2324 [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
2325 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2326 [CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
2327 [CAM_CC_IFE_LITE_AXI_CLK] = &cam_cc_ife_lite_axi_clk.clkr,
2328 [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
2329 [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
2330 [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
2331 [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
2332 [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
2333 [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
2334 [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
2335 [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
2336 [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
2337 [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
2338 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2339 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2340 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2341 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2342 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2343 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2344 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2345 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2346 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2347 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2348 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2349 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2350 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2351 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2352 [CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
2353 [CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
2354 [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2355 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2356 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2357 [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2358 [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
2359 [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2360 [CAM_CC_PLL2_OUT_MAIN] = &cam_cc_pll2_out_main.clkr,
2361 [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2362 [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
2363 [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2364 [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
2365 [CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr,
2366 [CAM_CC_SBI_AXI_CLK] = &cam_cc_sbi_axi_clk.clkr,
2367 [CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
2368 [CAM_CC_SBI_CPHY_RX_CLK] = &cam_cc_sbi_cphy_rx_clk.clkr,
2369 [CAM_CC_SBI_CSID_CLK] = &cam_cc_sbi_csid_clk.clkr,
2370 [CAM_CC_SBI_CSID_CLK_SRC] = &cam_cc_sbi_csid_clk_src.clkr,
2371 [CAM_CC_SBI_DIV_CLK_SRC] = &cam_cc_sbi_div_clk_src.clkr,
2372 [CAM_CC_SBI_IFE_0_CLK] = &cam_cc_sbi_ife_0_clk.clkr,
2373 [CAM_CC_SBI_IFE_1_CLK] = &cam_cc_sbi_ife_1_clk.clkr,
2374 [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
2375 [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
2376 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2377 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2378 };
2379
2380 static struct gdsc *cam_cc_sm8250_gdscs[] = {
2381 [BPS_GDSC] = &bps_gdsc,
2382 [IPE_0_GDSC] = &ipe_0_gdsc,
2383 [SBI_GDSC] = &sbi_gdsc,
2384 [IFE_0_GDSC] = &ife_0_gdsc,
2385 [IFE_1_GDSC] = &ife_1_gdsc,
2386 [TITAN_TOP_GDSC] = &titan_top_gdsc,
2387 };
2388
2389 static const struct qcom_reset_map cam_cc_sm8250_resets[] = {
2390 [CAM_CC_BPS_BCR] = { 0x7000 },
2391 [CAM_CC_ICP_BCR] = { 0xc070 },
2392 [CAM_CC_IFE_0_BCR] = { 0xa000 },
2393 [CAM_CC_IFE_1_BCR] = { 0xb000 },
2394 [CAM_CC_IPE_0_BCR] = { 0x8000 },
2395 [CAM_CC_SBI_BCR] = { 0x9000 },
2396 };
2397
2398 static const struct regmap_config cam_cc_sm8250_regmap_config = {
2399 .reg_bits = 32,
2400 .reg_stride = 4,
2401 .val_bits = 32,
2402 .max_register = 0xe004,
2403 .fast_io = true,
2404 };
2405
2406 static const struct qcom_cc_desc cam_cc_sm8250_desc = {
2407 .config = &cam_cc_sm8250_regmap_config,
2408 .clks = cam_cc_sm8250_clocks,
2409 .num_clks = ARRAY_SIZE(cam_cc_sm8250_clocks),
2410 .resets = cam_cc_sm8250_resets,
2411 .num_resets = ARRAY_SIZE(cam_cc_sm8250_resets),
2412 .gdscs = cam_cc_sm8250_gdscs,
2413 .num_gdscs = ARRAY_SIZE(cam_cc_sm8250_gdscs),
2414 };
2415
2416 static const struct of_device_id cam_cc_sm8250_match_table[] = {
2417 { .compatible = "qcom,sm8250-camcc" },
2418 { }
2419 };
2420 MODULE_DEVICE_TABLE(of, cam_cc_sm8250_match_table);
2421
cam_cc_sm8250_probe(struct platform_device * pdev)2422 static int cam_cc_sm8250_probe(struct platform_device *pdev)
2423 {
2424 struct regmap *regmap;
2425
2426 regmap = qcom_cc_map(pdev, &cam_cc_sm8250_desc);
2427 if (IS_ERR(regmap))
2428 return PTR_ERR(regmap);
2429
2430 clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
2431 clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
2432 clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
2433 clk_lucid_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
2434 clk_lucid_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
2435
2436 return qcom_cc_really_probe(&pdev->dev, &cam_cc_sm8250_desc, regmap);
2437 }
2438
2439 static struct platform_driver cam_cc_sm8250_driver = {
2440 .probe = cam_cc_sm8250_probe,
2441 .driver = {
2442 .name = "cam_cc-sm8250",
2443 .of_match_table = cam_cc_sm8250_match_table,
2444 },
2445 };
2446
2447 module_platform_driver(cam_cc_sm8250_driver);
2448
2449 MODULE_DESCRIPTION("QTI CAMCC SM8250 Driver");
2450 MODULE_LICENSE("GPL v2");
2451