Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / drivers / clk / qcom / camcc-sc7280.c
blobaccd257632df37fba1c7bafee15ac9c681519607
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
5 */
7 #include <linux/clk-provider.h>
8 #include <linux/err.h>
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/platform_device.h>
13 #include <linux/regmap.h>
15 #include <dt-bindings/clock/qcom,camcc-sc7280.h>
17 #include "clk-alpha-pll.h"
18 #include "clk-branch.h"
19 #include "clk-rcg.h"
20 #include "common.h"
21 #include "gdsc.h"
22 #include "reset.h"
24 enum {
25 P_BI_TCXO,
26 P_CAM_CC_PLL0_OUT_EVEN,
27 P_CAM_CC_PLL0_OUT_MAIN,
28 P_CAM_CC_PLL0_OUT_ODD,
29 P_CAM_CC_PLL1_OUT_EVEN,
30 P_CAM_CC_PLL2_OUT_AUX2,
31 P_CAM_CC_PLL2_OUT_EARLY,
32 P_CAM_CC_PLL3_OUT_EVEN,
33 P_CAM_CC_PLL4_OUT_EVEN,
34 P_CAM_CC_PLL5_OUT_EVEN,
35 P_CAM_CC_PLL6_OUT_EVEN,
36 P_CAM_CC_PLL6_OUT_MAIN,
37 P_CAM_CC_PLL6_OUT_ODD,
38 P_SLEEP_CLK,
41 static struct pll_vco lucid_vco[] = {
42 { 249600000, 2000000000, 0 },
45 static struct pll_vco zonda_vco[] = {
46 { 595200000UL, 3600000000UL, 0 },
49 /* 1200MHz Configuration */
50 static const struct alpha_pll_config cam_cc_pll0_config = {
51 .l = 0x3E,
52 .alpha = 0x8000,
53 .config_ctl_val = 0x20485699,
54 .config_ctl_hi_val = 0x00002261,
55 .config_ctl_hi1_val = 0x329A299C,
56 .user_ctl_val = 0x00003101,
57 .user_ctl_hi_val = 0x00000805,
58 .user_ctl_hi1_val = 0x00000000,
61 static struct clk_alpha_pll cam_cc_pll0 = {
62 .offset = 0x0,
63 .vco_table = lucid_vco,
64 .num_vco = ARRAY_SIZE(lucid_vco),
65 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
66 .clkr = {
67 .hw.init = &(struct clk_init_data){
68 .name = "cam_cc_pll0",
69 .parent_data = &(const struct clk_parent_data){
70 .fw_name = "bi_tcxo",
72 .num_parents = 1,
73 .ops = &clk_alpha_pll_lucid_ops,
78 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
79 { 0x1, 2 },
80 { }
83 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
84 .offset = 0x0,
85 .post_div_shift = 8,
86 .post_div_table = post_div_table_cam_cc_pll0_out_even,
87 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
88 .width = 4,
89 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
90 .clkr.hw.init = &(struct clk_init_data){
91 .name = "cam_cc_pll0_out_even",
92 .parent_hws = (const struct clk_hw*[]) {
93 &cam_cc_pll0.clkr.hw,
95 .num_parents = 1,
96 .flags = CLK_SET_RATE_PARENT,
97 .ops = &clk_alpha_pll_postdiv_lucid_ops,
101 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
102 { 0x3, 3 },
106 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
107 .offset = 0x0,
108 .post_div_shift = 12,
109 .post_div_table = post_div_table_cam_cc_pll0_out_odd,
110 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
111 .width = 4,
112 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
113 .clkr.hw.init = &(struct clk_init_data){
114 .name = "cam_cc_pll0_out_odd",
115 .parent_hws = (const struct clk_hw*[]) {
116 &cam_cc_pll0.clkr.hw,
118 .num_parents = 1,
119 .flags = CLK_SET_RATE_PARENT,
120 .ops = &clk_alpha_pll_postdiv_lucid_ops,
124 /* 600MHz Configuration */
125 static const struct alpha_pll_config cam_cc_pll1_config = {
126 .l = 0x1F,
127 .alpha = 0x4000,
128 .config_ctl_val = 0x20485699,
129 .config_ctl_hi_val = 0x00002261,
130 .config_ctl_hi1_val = 0x329A299C,
131 .user_ctl_val = 0x00000101,
132 .user_ctl_hi_val = 0x00000805,
133 .user_ctl_hi1_val = 0x00000000,
136 static struct clk_alpha_pll cam_cc_pll1 = {
137 .offset = 0x1000,
138 .vco_table = lucid_vco,
139 .num_vco = ARRAY_SIZE(lucid_vco),
140 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
141 .clkr = {
142 .hw.init = &(struct clk_init_data){
143 .name = "cam_cc_pll1",
144 .parent_data = &(const struct clk_parent_data){
145 .fw_name = "bi_tcxo",
147 .num_parents = 1,
148 .ops = &clk_alpha_pll_lucid_ops,
153 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
154 { 0x1, 2 },
158 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
159 .offset = 0x1000,
160 .post_div_shift = 8,
161 .post_div_table = post_div_table_cam_cc_pll1_out_even,
162 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
163 .width = 4,
164 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
165 .clkr.hw.init = &(struct clk_init_data){
166 .name = "cam_cc_pll1_out_even",
167 .parent_hws = (const struct clk_hw*[]) {
168 &cam_cc_pll1.clkr.hw,
170 .num_parents = 1,
171 .flags = CLK_SET_RATE_PARENT,
172 .ops = &clk_alpha_pll_postdiv_lucid_ops,
176 /* 1440MHz Configuration */
177 static const struct alpha_pll_config cam_cc_pll2_config = {
178 .l = 0x4B,
179 .alpha = 0x0,
180 .config_ctl_val = 0x08200800,
181 .config_ctl_hi_val = 0x05022011,
182 .config_ctl_hi1_val = 0x08000000,
183 .user_ctl_val = 0x00000301,
186 static struct clk_alpha_pll cam_cc_pll2 = {
187 .offset = 0x2000,
188 .vco_table = zonda_vco,
189 .num_vco = ARRAY_SIZE(zonda_vco),
190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
191 .clkr = {
192 .hw.init = &(struct clk_init_data){
193 .name = "cam_cc_pll2",
194 .parent_data = &(const struct clk_parent_data){
195 .fw_name = "bi_tcxo",
197 .num_parents = 1,
198 .ops = &clk_alpha_pll_zonda_ops,
203 static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux[] = {
204 { 0x3, 4 },
208 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux = {
209 .offset = 0x2000,
210 .post_div_shift = 8,
211 .post_div_table = post_div_table_cam_cc_pll2_out_aux,
212 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux),
213 .width = 2,
214 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
215 .clkr.hw.init = &(struct clk_init_data){
216 .name = "cam_cc_pll2_out_aux",
217 .parent_hws = (const struct clk_hw*[]) {
218 &cam_cc_pll2.clkr.hw,
220 .num_parents = 1,
221 .flags = CLK_SET_RATE_PARENT,
222 .ops = &clk_alpha_pll_postdiv_zonda_ops,
226 static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux2[] = {
227 { 0x3, 4 },
231 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux2 = {
232 .offset = 0x2000,
233 .post_div_shift = 8,
234 .post_div_table = post_div_table_cam_cc_pll2_out_aux2,
235 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux2),
236 .width = 2,
237 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
238 .clkr.hw.init = &(struct clk_init_data){
239 .name = "cam_cc_pll2_out_aux2",
240 .parent_hws = (const struct clk_hw*[]) {
241 &cam_cc_pll2.clkr.hw,
243 .num_parents = 1,
244 .flags = CLK_SET_RATE_PARENT,
245 .ops = &clk_alpha_pll_postdiv_zonda_ops,
249 /* 760MHz Configuration */
250 static const struct alpha_pll_config cam_cc_pll3_config = {
251 .l = 0x27,
252 .alpha = 0x9555,
253 .config_ctl_val = 0x20485699,
254 .config_ctl_hi_val = 0x00002261,
255 .config_ctl_hi1_val = 0x329A299C,
256 .user_ctl_val = 0x00000101,
257 .user_ctl_hi_val = 0x00000805,
258 .user_ctl_hi1_val = 0x00000000,
261 static struct clk_alpha_pll cam_cc_pll3 = {
262 .offset = 0x3000,
263 .vco_table = lucid_vco,
264 .num_vco = ARRAY_SIZE(lucid_vco),
265 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
266 .clkr = {
267 .hw.init = &(struct clk_init_data){
268 .name = "cam_cc_pll3",
269 .parent_data = &(const struct clk_parent_data){
270 .fw_name = "bi_tcxo",
272 .num_parents = 1,
273 .ops = &clk_alpha_pll_lucid_ops,
278 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
279 { 0x1, 2 },
283 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
284 .offset = 0x3000,
285 .post_div_shift = 8,
286 .post_div_table = post_div_table_cam_cc_pll3_out_even,
287 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
288 .width = 4,
289 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
290 .clkr.hw.init = &(struct clk_init_data){
291 .name = "cam_cc_pll3_out_even",
292 .parent_hws = (const struct clk_hw*[]) {
293 &cam_cc_pll3.clkr.hw,
295 .num_parents = 1,
296 .flags = CLK_SET_RATE_PARENT,
297 .ops = &clk_alpha_pll_postdiv_lucid_ops,
301 /* 760MHz Configuration */
302 static const struct alpha_pll_config cam_cc_pll4_config = {
303 .l = 0x27,
304 .alpha = 0x9555,
305 .config_ctl_val = 0x20485699,
306 .config_ctl_hi_val = 0x00002261,
307 .config_ctl_hi1_val = 0x329A299C,
308 .user_ctl_val = 0x00000101,
309 .user_ctl_hi_val = 0x00000805,
310 .user_ctl_hi1_val = 0x00000000,
313 static struct clk_alpha_pll cam_cc_pll4 = {
314 .offset = 0x4000,
315 .vco_table = lucid_vco,
316 .num_vco = ARRAY_SIZE(lucid_vco),
317 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
318 .clkr = {
319 .hw.init = &(struct clk_init_data){
320 .name = "cam_cc_pll4",
321 .parent_data = &(const struct clk_parent_data){
322 .fw_name = "bi_tcxo",
324 .num_parents = 1,
325 .ops = &clk_alpha_pll_lucid_ops,
330 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
331 { 0x1, 2 },
335 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
336 .offset = 0x4000,
337 .post_div_shift = 8,
338 .post_div_table = post_div_table_cam_cc_pll4_out_even,
339 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
340 .width = 4,
341 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
342 .clkr.hw.init = &(struct clk_init_data){
343 .name = "cam_cc_pll4_out_even",
344 .parent_hws = (const struct clk_hw*[]) {
345 &cam_cc_pll4.clkr.hw,
347 .num_parents = 1,
348 .flags = CLK_SET_RATE_PARENT,
349 .ops = &clk_alpha_pll_postdiv_lucid_ops,
353 /* 760MHz Configuration */
354 static const struct alpha_pll_config cam_cc_pll5_config = {
355 .l = 0x27,
356 .alpha = 0x9555,
357 .config_ctl_val = 0x20485699,
358 .config_ctl_hi_val = 0x00002261,
359 .config_ctl_hi1_val = 0x329A299C,
360 .user_ctl_val = 0x00000101,
361 .user_ctl_hi_val = 0x00000805,
362 .user_ctl_hi1_val = 0x00000000,
365 static struct clk_alpha_pll cam_cc_pll5 = {
366 .offset = 0x5000,
367 .vco_table = lucid_vco,
368 .num_vco = ARRAY_SIZE(lucid_vco),
369 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
370 .clkr = {
371 .hw.init = &(struct clk_init_data){
372 .name = "cam_cc_pll5",
373 .parent_data = &(const struct clk_parent_data){
374 .fw_name = "bi_tcxo",
376 .num_parents = 1,
377 .ops = &clk_alpha_pll_lucid_ops,
382 static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
383 { 0x1, 2 },
387 static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
388 .offset = 0x5000,
389 .post_div_shift = 8,
390 .post_div_table = post_div_table_cam_cc_pll5_out_even,
391 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
392 .width = 4,
393 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
394 .clkr.hw.init = &(struct clk_init_data){
395 .name = "cam_cc_pll5_out_even",
396 .parent_hws = (const struct clk_hw*[]) {
397 &cam_cc_pll5.clkr.hw,
399 .num_parents = 1,
400 .flags = CLK_SET_RATE_PARENT,
401 .ops = &clk_alpha_pll_postdiv_lucid_ops,
405 /* 960MHz Configuration */
406 static const struct alpha_pll_config cam_cc_pll6_config = {
407 .l = 0x32,
408 .alpha = 0x0,
409 .config_ctl_val = 0x20485699,
410 .config_ctl_hi_val = 0x00002261,
411 .config_ctl_hi1_val = 0x329A299C,
412 .user_ctl_val = 0x00003101,
413 .user_ctl_hi_val = 0x00000805,
414 .user_ctl_hi1_val = 0x00000000,
417 static struct clk_alpha_pll cam_cc_pll6 = {
418 .offset = 0x6000,
419 .vco_table = lucid_vco,
420 .num_vco = ARRAY_SIZE(lucid_vco),
421 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
422 .clkr = {
423 .hw.init = &(struct clk_init_data){
424 .name = "cam_cc_pll6",
425 .parent_data = &(const struct clk_parent_data){
426 .fw_name = "bi_tcxo",
428 .num_parents = 1,
429 .ops = &clk_alpha_pll_lucid_ops,
434 static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
435 { 0x1, 2 },
439 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
440 .offset = 0x6000,
441 .post_div_shift = 8,
442 .post_div_table = post_div_table_cam_cc_pll6_out_even,
443 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
444 .width = 4,
445 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
446 .clkr.hw.init = &(struct clk_init_data){
447 .name = "cam_cc_pll6_out_even",
448 .parent_hws = (const struct clk_hw*[]) {
449 &cam_cc_pll6.clkr.hw,
451 .num_parents = 1,
452 .flags = CLK_SET_RATE_PARENT,
453 .ops = &clk_alpha_pll_postdiv_lucid_ops,
457 static const struct clk_div_table post_div_table_cam_cc_pll6_out_odd[] = {
458 { 0x3, 3 },
462 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_odd = {
463 .offset = 0x6000,
464 .post_div_shift = 12,
465 .post_div_table = post_div_table_cam_cc_pll6_out_odd,
466 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_odd),
467 .width = 4,
468 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
469 .clkr.hw.init = &(struct clk_init_data){
470 .name = "cam_cc_pll6_out_odd",
471 .parent_hws = (const struct clk_hw*[]) {
472 &cam_cc_pll6.clkr.hw,
474 .num_parents = 1,
475 .flags = CLK_SET_RATE_PARENT,
476 .ops = &clk_alpha_pll_postdiv_lucid_ops,
480 static const struct parent_map cam_cc_parent_map_0[] = {
481 { P_BI_TCXO, 0 },
482 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
483 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
484 { P_CAM_CC_PLL0_OUT_ODD, 3 },
485 { P_CAM_CC_PLL6_OUT_EVEN, 5 },
488 static const struct clk_parent_data cam_cc_parent_data_0[] = {
489 { .fw_name = "bi_tcxo" },
490 { .hw = &cam_cc_pll0.clkr.hw },
491 { .hw = &cam_cc_pll0_out_even.clkr.hw },
492 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
493 { .hw = &cam_cc_pll6_out_even.clkr.hw },
496 static const struct parent_map cam_cc_parent_map_1[] = {
497 { P_BI_TCXO, 0 },
498 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
499 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
500 { P_CAM_CC_PLL0_OUT_ODD, 3 },
501 { P_CAM_CC_PLL6_OUT_MAIN, 4 },
502 { P_CAM_CC_PLL6_OUT_EVEN, 5 },
505 static const struct clk_parent_data cam_cc_parent_data_1[] = {
506 { .fw_name = "bi_tcxo" },
507 { .hw = &cam_cc_pll0.clkr.hw },
508 { .hw = &cam_cc_pll0_out_even.clkr.hw },
509 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
510 { .hw = &cam_cc_pll6.clkr.hw },
511 { .hw = &cam_cc_pll6_out_even.clkr.hw },
514 static const struct parent_map cam_cc_parent_map_2[] = {
515 { P_BI_TCXO, 0 },
516 { P_CAM_CC_PLL2_OUT_AUX2, 3 },
517 { P_CAM_CC_PLL2_OUT_EARLY, 5 },
520 static const struct clk_parent_data cam_cc_parent_data_2[] = {
521 { .fw_name = "bi_tcxo" },
522 { .hw = &cam_cc_pll2_out_aux2.clkr.hw },
523 { .hw = &cam_cc_pll2.clkr.hw },
526 static const struct parent_map cam_cc_parent_map_3[] = {
527 { P_BI_TCXO, 0 },
528 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
529 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
530 { P_CAM_CC_PLL0_OUT_ODD, 3 },
531 { P_CAM_CC_PLL6_OUT_EVEN, 5 },
532 { P_CAM_CC_PLL6_OUT_ODD, 6 },
535 static const struct clk_parent_data cam_cc_parent_data_3[] = {
536 { .fw_name = "bi_tcxo" },
537 { .hw = &cam_cc_pll0.clkr.hw },
538 { .hw = &cam_cc_pll0_out_even.clkr.hw },
539 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
540 { .hw = &cam_cc_pll6_out_even.clkr.hw },
541 { .hw = &cam_cc_pll6_out_odd.clkr.hw },
544 static const struct parent_map cam_cc_parent_map_4[] = {
545 { P_BI_TCXO, 0 },
546 { P_CAM_CC_PLL3_OUT_EVEN, 6 },
549 static const struct clk_parent_data cam_cc_parent_data_4[] = {
550 { .fw_name = "bi_tcxo" },
551 { .hw = &cam_cc_pll3_out_even.clkr.hw },
554 static const struct parent_map cam_cc_parent_map_5[] = {
555 { P_BI_TCXO, 0 },
556 { P_CAM_CC_PLL4_OUT_EVEN, 6 },
559 static const struct clk_parent_data cam_cc_parent_data_5[] = {
560 { .fw_name = "bi_tcxo" },
561 { .hw = &cam_cc_pll4_out_even.clkr.hw },
564 static const struct parent_map cam_cc_parent_map_6[] = {
565 { P_BI_TCXO, 0 },
566 { P_CAM_CC_PLL5_OUT_EVEN, 6 },
569 static const struct clk_parent_data cam_cc_parent_data_6[] = {
570 { .fw_name = "bi_tcxo" },
571 { .hw = &cam_cc_pll5_out_even.clkr.hw },
574 static const struct parent_map cam_cc_parent_map_7[] = {
575 { P_BI_TCXO, 0 },
576 { P_CAM_CC_PLL1_OUT_EVEN, 4 },
579 static const struct clk_parent_data cam_cc_parent_data_7[] = {
580 { .fw_name = "bi_tcxo" },
581 { .hw = &cam_cc_pll1_out_even.clkr.hw },
584 static const struct parent_map cam_cc_parent_map_8[] = {
585 { P_SLEEP_CLK, 0 },
588 static const struct clk_parent_data cam_cc_parent_data_8[] = {
589 { .fw_name = "sleep_clk" },
592 static const struct parent_map cam_cc_parent_map_9[] = {
593 { P_BI_TCXO, 0 },
596 static const struct clk_parent_data cam_cc_parent_data_9_ao[] = {
597 { .fw_name = "bi_tcxo_ao" },
600 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
601 F(19200000, P_BI_TCXO, 1, 0, 0),
602 F(100000000, P_CAM_CC_PLL0_OUT_ODD, 4, 0, 0),
603 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
604 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
605 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
606 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
610 static struct clk_rcg2 cam_cc_bps_clk_src = {
611 .cmd_rcgr = 0x7010,
612 .mnd_width = 0,
613 .hid_width = 5,
614 .parent_map = cam_cc_parent_map_0,
615 .freq_tbl = ftbl_cam_cc_bps_clk_src,
616 .clkr.hw.init = &(struct clk_init_data){
617 .name = "cam_cc_bps_clk_src",
618 .parent_data = cam_cc_parent_data_0,
619 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
620 .ops = &clk_rcg2_shared_ops,
624 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
625 F(19200000, P_BI_TCXO, 1, 0, 0),
626 F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
627 F(240000000, P_CAM_CC_PLL6_OUT_EVEN, 2, 0, 0),
628 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0),
629 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
630 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
634 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
635 .cmd_rcgr = 0xc124,
636 .mnd_width = 0,
637 .hid_width = 5,
638 .parent_map = cam_cc_parent_map_3,
639 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
640 .clkr.hw.init = &(struct clk_init_data){
641 .name = "cam_cc_camnoc_axi_clk_src",
642 .parent_data = cam_cc_parent_data_3,
643 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
644 .ops = &clk_rcg2_shared_ops,
648 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
649 F(19200000, P_BI_TCXO, 1, 0, 0),
650 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
654 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
655 .cmd_rcgr = 0xc0e0,
656 .mnd_width = 8,
657 .hid_width = 5,
658 .parent_map = cam_cc_parent_map_0,
659 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
660 .clkr.hw.init = &(struct clk_init_data){
661 .name = "cam_cc_cci_0_clk_src",
662 .parent_data = cam_cc_parent_data_0,
663 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
664 .ops = &clk_rcg2_shared_ops,
668 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
669 .cmd_rcgr = 0xc0fc,
670 .mnd_width = 8,
671 .hid_width = 5,
672 .parent_map = cam_cc_parent_map_0,
673 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
674 .clkr.hw.init = &(struct clk_init_data){
675 .name = "cam_cc_cci_1_clk_src",
676 .parent_data = cam_cc_parent_data_0,
677 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
678 .ops = &clk_rcg2_shared_ops,
682 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
683 F(19200000, P_BI_TCXO, 1, 0, 0),
684 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
685 F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
689 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
690 .cmd_rcgr = 0xa064,
691 .mnd_width = 0,
692 .hid_width = 5,
693 .parent_map = cam_cc_parent_map_1,
694 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
695 .clkr.hw.init = &(struct clk_init_data){
696 .name = "cam_cc_cphy_rx_clk_src",
697 .parent_data = cam_cc_parent_data_1,
698 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
699 .ops = &clk_rcg2_shared_ops,
703 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
704 F(19200000, P_BI_TCXO, 1, 0, 0),
705 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
709 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
710 .cmd_rcgr = 0xe0ac,
711 .mnd_width = 0,
712 .hid_width = 5,
713 .parent_map = cam_cc_parent_map_0,
714 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
715 .clkr.hw.init = &(struct clk_init_data){
716 .name = "cam_cc_csi0phytimer_clk_src",
717 .parent_data = cam_cc_parent_data_0,
718 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
719 .ops = &clk_rcg2_shared_ops,
723 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
724 .cmd_rcgr = 0xe0d0,
725 .mnd_width = 0,
726 .hid_width = 5,
727 .parent_map = cam_cc_parent_map_0,
728 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
729 .clkr.hw.init = &(struct clk_init_data){
730 .name = "cam_cc_csi1phytimer_clk_src",
731 .parent_data = cam_cc_parent_data_0,
732 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
733 .ops = &clk_rcg2_shared_ops,
737 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
738 .cmd_rcgr = 0xe0f4,
739 .mnd_width = 0,
740 .hid_width = 5,
741 .parent_map = cam_cc_parent_map_0,
742 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
743 .clkr.hw.init = &(struct clk_init_data){
744 .name = "cam_cc_csi2phytimer_clk_src",
745 .parent_data = cam_cc_parent_data_0,
746 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
747 .ops = &clk_rcg2_shared_ops,
751 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
752 .cmd_rcgr = 0xe11c,
753 .mnd_width = 0,
754 .hid_width = 5,
755 .parent_map = cam_cc_parent_map_0,
756 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
757 .clkr.hw.init = &(struct clk_init_data){
758 .name = "cam_cc_csi3phytimer_clk_src",
759 .parent_data = cam_cc_parent_data_0,
760 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
761 .ops = &clk_rcg2_shared_ops,
765 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
766 .cmd_rcgr = 0xe140,
767 .mnd_width = 0,
768 .hid_width = 5,
769 .parent_map = cam_cc_parent_map_0,
770 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
771 .clkr.hw.init = &(struct clk_init_data){
772 .name = "cam_cc_csi4phytimer_clk_src",
773 .parent_data = cam_cc_parent_data_0,
774 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
775 .ops = &clk_rcg2_shared_ops,
779 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
780 F(19200000, P_BI_TCXO, 1, 0, 0),
781 F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
782 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
783 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
784 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
785 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
789 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
790 .cmd_rcgr = 0x703c,
791 .mnd_width = 0,
792 .hid_width = 5,
793 .parent_map = cam_cc_parent_map_0,
794 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
795 .clkr.hw.init = &(struct clk_init_data){
796 .name = "cam_cc_fast_ahb_clk_src",
797 .parent_data = cam_cc_parent_data_0,
798 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
799 .ops = &clk_rcg2_shared_ops,
803 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
804 F(19200000, P_BI_TCXO, 1, 0, 0),
805 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
806 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
807 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
811 static struct clk_rcg2 cam_cc_icp_clk_src = {
812 .cmd_rcgr = 0xc0b8,
813 .mnd_width = 0,
814 .hid_width = 5,
815 .parent_map = cam_cc_parent_map_0,
816 .freq_tbl = ftbl_cam_cc_icp_clk_src,
817 .clkr.hw.init = &(struct clk_init_data){
818 .name = "cam_cc_icp_clk_src",
819 .parent_data = cam_cc_parent_data_0,
820 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
821 .ops = &clk_rcg2_shared_ops,
825 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
826 F(19200000, P_BI_TCXO, 1, 0, 0),
827 F(380000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
828 F(510000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
829 F(637000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
830 F(760000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
834 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
835 .cmd_rcgr = 0xa010,
836 .mnd_width = 0,
837 .hid_width = 5,
838 .parent_map = cam_cc_parent_map_4,
839 .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
840 .clkr.hw.init = &(struct clk_init_data){
841 .name = "cam_cc_ife_0_clk_src",
842 .parent_data = cam_cc_parent_data_4,
843 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
844 .flags = CLK_SET_RATE_PARENT,
845 .ops = &clk_rcg2_shared_ops,
849 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
850 F(19200000, P_BI_TCXO, 1, 0, 0),
851 F(380000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
852 F(510000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
853 F(637000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
854 F(760000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
858 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
859 .cmd_rcgr = 0xb010,
860 .mnd_width = 0,
861 .hid_width = 5,
862 .parent_map = cam_cc_parent_map_5,
863 .freq_tbl = ftbl_cam_cc_ife_1_clk_src,
864 .clkr.hw.init = &(struct clk_init_data){
865 .name = "cam_cc_ife_1_clk_src",
866 .parent_data = cam_cc_parent_data_5,
867 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
868 .flags = CLK_SET_RATE_PARENT,
869 .ops = &clk_rcg2_shared_ops,
873 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
874 F(19200000, P_BI_TCXO, 1, 0, 0),
875 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
876 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
877 F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
881 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
882 .cmd_rcgr = 0xa03c,
883 .mnd_width = 0,
884 .hid_width = 5,
885 .parent_map = cam_cc_parent_map_1,
886 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
887 .clkr.hw.init = &(struct clk_init_data){
888 .name = "cam_cc_ife_0_csid_clk_src",
889 .parent_data = cam_cc_parent_data_1,
890 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
891 .ops = &clk_rcg2_shared_ops,
895 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
896 .cmd_rcgr = 0xb03c,
897 .mnd_width = 0,
898 .hid_width = 5,
899 .parent_map = cam_cc_parent_map_1,
900 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
901 .clkr.hw.init = &(struct clk_init_data){
902 .name = "cam_cc_ife_1_csid_clk_src",
903 .parent_data = cam_cc_parent_data_1,
904 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
905 .ops = &clk_rcg2_shared_ops,
909 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
910 F(19200000, P_BI_TCXO, 1, 0, 0),
911 F(380000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
912 F(510000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
913 F(637000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
914 F(760000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
918 static struct clk_rcg2 cam_cc_ife_2_clk_src = {
919 .cmd_rcgr = 0xb07c,
920 .mnd_width = 0,
921 .hid_width = 5,
922 .parent_map = cam_cc_parent_map_6,
923 .freq_tbl = ftbl_cam_cc_ife_2_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "cam_cc_ife_2_clk_src",
926 .parent_data = cam_cc_parent_data_6,
927 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
928 .flags = CLK_SET_RATE_PARENT,
929 .ops = &clk_rcg2_shared_ops,
933 static struct clk_rcg2 cam_cc_ife_2_csid_clk_src = {
934 .cmd_rcgr = 0xb0a8,
935 .mnd_width = 0,
936 .hid_width = 5,
937 .parent_map = cam_cc_parent_map_1,
938 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
939 .clkr.hw.init = &(struct clk_init_data){
940 .name = "cam_cc_ife_2_csid_clk_src",
941 .parent_data = cam_cc_parent_data_1,
942 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
943 .ops = &clk_rcg2_shared_ops,
947 static const struct freq_tbl ftbl_cam_cc_ife_lite_0_clk_src[] = {
948 F(19200000, P_BI_TCXO, 1, 0, 0),
949 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0),
950 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
951 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
952 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
956 static struct clk_rcg2 cam_cc_ife_lite_0_clk_src = {
957 .cmd_rcgr = 0xc004,
958 .mnd_width = 0,
959 .hid_width = 5,
960 .parent_map = cam_cc_parent_map_3,
961 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
962 .clkr.hw.init = &(struct clk_init_data){
963 .name = "cam_cc_ife_lite_0_clk_src",
964 .parent_data = cam_cc_parent_data_3,
965 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
966 .ops = &clk_rcg2_shared_ops,
970 static struct clk_rcg2 cam_cc_ife_lite_0_csid_clk_src = {
971 .cmd_rcgr = 0xc020,
972 .mnd_width = 0,
973 .hid_width = 5,
974 .parent_map = cam_cc_parent_map_1,
975 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
976 .clkr.hw.init = &(struct clk_init_data){
977 .name = "cam_cc_ife_lite_0_csid_clk_src",
978 .parent_data = cam_cc_parent_data_1,
979 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
980 .ops = &clk_rcg2_shared_ops,
984 static struct clk_rcg2 cam_cc_ife_lite_1_clk_src = {
985 .cmd_rcgr = 0xc048,
986 .mnd_width = 0,
987 .hid_width = 5,
988 .parent_map = cam_cc_parent_map_3,
989 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src,
990 .clkr.hw.init = &(struct clk_init_data){
991 .name = "cam_cc_ife_lite_1_clk_src",
992 .parent_data = cam_cc_parent_data_3,
993 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
994 .ops = &clk_rcg2_shared_ops,
998 static struct clk_rcg2 cam_cc_ife_lite_1_csid_clk_src = {
999 .cmd_rcgr = 0xc064,
1000 .mnd_width = 0,
1001 .hid_width = 5,
1002 .parent_map = cam_cc_parent_map_1,
1003 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
1004 .clkr.hw.init = &(struct clk_init_data){
1005 .name = "cam_cc_ife_lite_1_csid_clk_src",
1006 .parent_data = cam_cc_parent_data_1,
1007 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1008 .ops = &clk_rcg2_shared_ops,
1012 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
1013 F(19200000, P_BI_TCXO, 1, 0, 0),
1014 F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1015 F(430000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1016 F(520000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1017 F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1021 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
1022 .cmd_rcgr = 0x8010,
1023 .mnd_width = 0,
1024 .hid_width = 5,
1025 .parent_map = cam_cc_parent_map_7,
1026 .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
1027 .clkr.hw.init = &(struct clk_init_data){
1028 .name = "cam_cc_ipe_0_clk_src",
1029 .parent_data = cam_cc_parent_data_7,
1030 .num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1031 .flags = CLK_SET_RATE_PARENT,
1032 .ops = &clk_rcg2_shared_ops,
1036 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1037 .cmd_rcgr = 0xc08c,
1038 .mnd_width = 0,
1039 .hid_width = 5,
1040 .parent_map = cam_cc_parent_map_0,
1041 .freq_tbl = ftbl_cam_cc_bps_clk_src,
1042 .clkr.hw.init = &(struct clk_init_data){
1043 .name = "cam_cc_jpeg_clk_src",
1044 .parent_data = cam_cc_parent_data_0,
1045 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1046 .ops = &clk_rcg2_shared_ops,
1050 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
1051 F(19200000, P_BI_TCXO, 1, 0, 0),
1052 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
1053 F(240000000, P_CAM_CC_PLL6_OUT_EVEN, 2, 0, 0),
1054 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
1055 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0),
1056 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1060 static struct clk_rcg2 cam_cc_lrme_clk_src = {
1061 .cmd_rcgr = 0xc150,
1062 .mnd_width = 0,
1063 .hid_width = 5,
1064 .parent_map = cam_cc_parent_map_3,
1065 .freq_tbl = ftbl_cam_cc_lrme_clk_src,
1066 .clkr.hw.init = &(struct clk_init_data){
1067 .name = "cam_cc_lrme_clk_src",
1068 .parent_data = cam_cc_parent_data_3,
1069 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
1070 .ops = &clk_rcg2_shared_ops,
1074 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1075 F(19200000, P_CAM_CC_PLL2_OUT_EARLY, 1, 1, 75),
1076 F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 6),
1077 F(34285714, P_CAM_CC_PLL2_OUT_EARLY, 2, 1, 21),
1081 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1082 .cmd_rcgr = 0xe000,
1083 .mnd_width = 8,
1084 .hid_width = 5,
1085 .parent_map = cam_cc_parent_map_2,
1086 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1087 .clkr.hw.init = &(struct clk_init_data){
1088 .name = "cam_cc_mclk0_clk_src",
1089 .parent_data = cam_cc_parent_data_2,
1090 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1091 .ops = &clk_rcg2_shared_ops,
1095 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1096 .cmd_rcgr = 0xe01c,
1097 .mnd_width = 8,
1098 .hid_width = 5,
1099 .parent_map = cam_cc_parent_map_2,
1100 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1101 .clkr.hw.init = &(struct clk_init_data){
1102 .name = "cam_cc_mclk1_clk_src",
1103 .parent_data = cam_cc_parent_data_2,
1104 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1105 .ops = &clk_rcg2_shared_ops,
1109 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1110 .cmd_rcgr = 0xe038,
1111 .mnd_width = 8,
1112 .hid_width = 5,
1113 .parent_map = cam_cc_parent_map_2,
1114 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1115 .clkr.hw.init = &(struct clk_init_data){
1116 .name = "cam_cc_mclk2_clk_src",
1117 .parent_data = cam_cc_parent_data_2,
1118 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1119 .ops = &clk_rcg2_shared_ops,
1123 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1124 .cmd_rcgr = 0xe054,
1125 .mnd_width = 8,
1126 .hid_width = 5,
1127 .parent_map = cam_cc_parent_map_2,
1128 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1129 .clkr.hw.init = &(struct clk_init_data){
1130 .name = "cam_cc_mclk3_clk_src",
1131 .parent_data = cam_cc_parent_data_2,
1132 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1133 .ops = &clk_rcg2_shared_ops,
1137 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1138 .cmd_rcgr = 0xe070,
1139 .mnd_width = 8,
1140 .hid_width = 5,
1141 .parent_map = cam_cc_parent_map_2,
1142 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1143 .clkr.hw.init = &(struct clk_init_data){
1144 .name = "cam_cc_mclk4_clk_src",
1145 .parent_data = cam_cc_parent_data_2,
1146 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1147 .ops = &clk_rcg2_shared_ops,
1151 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1152 .cmd_rcgr = 0xe08c,
1153 .mnd_width = 8,
1154 .hid_width = 5,
1155 .parent_map = cam_cc_parent_map_2,
1156 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1157 .clkr.hw.init = &(struct clk_init_data){
1158 .name = "cam_cc_mclk5_clk_src",
1159 .parent_data = cam_cc_parent_data_2,
1160 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
1161 .ops = &clk_rcg2_shared_ops,
1165 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1166 F(32000, P_SLEEP_CLK, 1, 0, 0),
1170 static struct clk_rcg2 cam_cc_sleep_clk_src = {
1171 .cmd_rcgr = 0xc1c0,
1172 .mnd_width = 0,
1173 .hid_width = 5,
1174 .parent_map = cam_cc_parent_map_8,
1175 .freq_tbl = ftbl_cam_cc_sleep_clk_src,
1176 .clkr.hw.init = &(struct clk_init_data){
1177 .name = "cam_cc_sleep_clk_src",
1178 .parent_data = cam_cc_parent_data_8,
1179 .num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1180 .ops = &clk_rcg2_ops,
1184 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1185 F(19200000, P_BI_TCXO, 1, 0, 0),
1186 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1190 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1191 .cmd_rcgr = 0x7058,
1192 .mnd_width = 8,
1193 .hid_width = 5,
1194 .parent_map = cam_cc_parent_map_0,
1195 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1196 .clkr.hw.init = &(struct clk_init_data){
1197 .name = "cam_cc_slow_ahb_clk_src",
1198 .parent_data = cam_cc_parent_data_0,
1199 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1200 .ops = &clk_rcg2_shared_ops,
1204 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1205 F(19200000, P_BI_TCXO, 1, 0, 0),
1209 static struct clk_rcg2 cam_cc_xo_clk_src = {
1210 .cmd_rcgr = 0xc1a4,
1211 .mnd_width = 0,
1212 .hid_width = 5,
1213 .parent_map = cam_cc_parent_map_9,
1214 .freq_tbl = ftbl_cam_cc_xo_clk_src,
1215 .clkr.hw.init = &(struct clk_init_data){
1216 .name = "cam_cc_xo_clk_src",
1217 .parent_data = cam_cc_parent_data_9_ao,
1218 .num_parents = ARRAY_SIZE(cam_cc_parent_data_9_ao),
1219 .ops = &clk_rcg2_ops,
1223 static struct clk_branch cam_cc_bps_ahb_clk = {
1224 .halt_reg = 0x7070,
1225 .halt_check = BRANCH_HALT,
1226 .clkr = {
1227 .enable_reg = 0x7070,
1228 .enable_mask = BIT(0),
1229 .hw.init = &(struct clk_init_data){
1230 .name = "cam_cc_bps_ahb_clk",
1231 .parent_hws = (const struct clk_hw*[]) {
1232 &cam_cc_slow_ahb_clk_src.clkr.hw,
1234 .num_parents = 1,
1235 .flags = CLK_SET_RATE_PARENT,
1236 .ops = &clk_branch2_ops,
1241 static struct clk_branch cam_cc_bps_areg_clk = {
1242 .halt_reg = 0x7054,
1243 .halt_check = BRANCH_HALT,
1244 .clkr = {
1245 .enable_reg = 0x7054,
1246 .enable_mask = BIT(0),
1247 .hw.init = &(struct clk_init_data){
1248 .name = "cam_cc_bps_areg_clk",
1249 .parent_hws = (const struct clk_hw*[]) {
1250 &cam_cc_fast_ahb_clk_src.clkr.hw,
1252 .num_parents = 1,
1253 .flags = CLK_SET_RATE_PARENT,
1254 .ops = &clk_branch2_ops,
1259 static struct clk_branch cam_cc_bps_axi_clk = {
1260 .halt_reg = 0x7038,
1261 .halt_check = BRANCH_HALT,
1262 .clkr = {
1263 .enable_reg = 0x7038,
1264 .enable_mask = BIT(0),
1265 .hw.init = &(struct clk_init_data){
1266 .name = "cam_cc_bps_axi_clk",
1267 .parent_hws = (const struct clk_hw*[]) {
1268 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1270 .num_parents = 1,
1271 .flags = CLK_SET_RATE_PARENT,
1272 .ops = &clk_branch2_ops,
1277 static struct clk_branch cam_cc_bps_clk = {
1278 .halt_reg = 0x7028,
1279 .halt_check = BRANCH_HALT,
1280 .clkr = {
1281 .enable_reg = 0x7028,
1282 .enable_mask = BIT(0),
1283 .hw.init = &(struct clk_init_data){
1284 .name = "cam_cc_bps_clk",
1285 .parent_hws = (const struct clk_hw*[]) {
1286 &cam_cc_bps_clk_src.clkr.hw,
1288 .num_parents = 1,
1289 .flags = CLK_SET_RATE_PARENT,
1290 .ops = &clk_branch2_ops,
1295 static struct clk_branch cam_cc_camnoc_axi_clk = {
1296 .halt_reg = 0xc140,
1297 .halt_check = BRANCH_HALT,
1298 .clkr = {
1299 .enable_reg = 0xc140,
1300 .enable_mask = BIT(0),
1301 .hw.init = &(struct clk_init_data){
1302 .name = "cam_cc_camnoc_axi_clk",
1303 .parent_hws = (const struct clk_hw*[]) {
1304 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1306 .num_parents = 1,
1307 .flags = CLK_SET_RATE_PARENT,
1308 .ops = &clk_branch2_ops,
1313 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1314 .halt_reg = 0xc148,
1315 .halt_check = BRANCH_HALT,
1316 .clkr = {
1317 .enable_reg = 0xc148,
1318 .enable_mask = BIT(0),
1319 .hw.init = &(struct clk_init_data){
1320 .name = "cam_cc_camnoc_dcd_xo_clk",
1321 .parent_hws = (const struct clk_hw*[]) {
1322 &cam_cc_xo_clk_src.clkr.hw,
1324 .num_parents = 1,
1325 .flags = CLK_SET_RATE_PARENT,
1326 .ops = &clk_branch2_ops,
1331 static struct clk_branch cam_cc_cci_0_clk = {
1332 .halt_reg = 0xc0f8,
1333 .halt_check = BRANCH_HALT,
1334 .clkr = {
1335 .enable_reg = 0xc0f8,
1336 .enable_mask = BIT(0),
1337 .hw.init = &(struct clk_init_data){
1338 .name = "cam_cc_cci_0_clk",
1339 .parent_hws = (const struct clk_hw*[]) {
1340 &cam_cc_cci_0_clk_src.clkr.hw,
1342 .num_parents = 1,
1343 .flags = CLK_SET_RATE_PARENT,
1344 .ops = &clk_branch2_ops,
1349 static struct clk_branch cam_cc_cci_1_clk = {
1350 .halt_reg = 0xc114,
1351 .halt_check = BRANCH_HALT,
1352 .clkr = {
1353 .enable_reg = 0xc114,
1354 .enable_mask = BIT(0),
1355 .hw.init = &(struct clk_init_data){
1356 .name = "cam_cc_cci_1_clk",
1357 .parent_hws = (const struct clk_hw*[]) {
1358 &cam_cc_cci_1_clk_src.clkr.hw,
1360 .num_parents = 1,
1361 .flags = CLK_SET_RATE_PARENT,
1362 .ops = &clk_branch2_ops,
1367 static struct clk_branch cam_cc_core_ahb_clk = {
1368 .halt_reg = 0xc1a0,
1369 .halt_check = BRANCH_HALT_DELAY,
1370 .clkr = {
1371 .enable_reg = 0xc1a0,
1372 .enable_mask = BIT(0),
1373 .hw.init = &(struct clk_init_data){
1374 .name = "cam_cc_core_ahb_clk",
1375 .parent_hws = (const struct clk_hw*[]) {
1376 &cam_cc_slow_ahb_clk_src.clkr.hw,
1378 .num_parents = 1,
1379 .flags = CLK_SET_RATE_PARENT,
1380 .ops = &clk_branch2_ops,
1385 static struct clk_branch cam_cc_cpas_ahb_clk = {
1386 .halt_reg = 0xc11c,
1387 .halt_check = BRANCH_HALT,
1388 .clkr = {
1389 .enable_reg = 0xc11c,
1390 .enable_mask = BIT(0),
1391 .hw.init = &(struct clk_init_data){
1392 .name = "cam_cc_cpas_ahb_clk",
1393 .parent_hws = (const struct clk_hw*[]) {
1394 &cam_cc_slow_ahb_clk_src.clkr.hw,
1396 .num_parents = 1,
1397 .flags = CLK_SET_RATE_PARENT,
1398 .ops = &clk_branch2_ops,
1403 static struct clk_branch cam_cc_csi0phytimer_clk = {
1404 .halt_reg = 0xe0c4,
1405 .halt_check = BRANCH_HALT,
1406 .clkr = {
1407 .enable_reg = 0xe0c4,
1408 .enable_mask = BIT(0),
1409 .hw.init = &(struct clk_init_data){
1410 .name = "cam_cc_csi0phytimer_clk",
1411 .parent_hws = (const struct clk_hw*[]) {
1412 &cam_cc_csi0phytimer_clk_src.clkr.hw,
1414 .num_parents = 1,
1415 .flags = CLK_SET_RATE_PARENT,
1416 .ops = &clk_branch2_ops,
1421 static struct clk_branch cam_cc_csi1phytimer_clk = {
1422 .halt_reg = 0xe0e8,
1423 .halt_check = BRANCH_HALT,
1424 .clkr = {
1425 .enable_reg = 0xe0e8,
1426 .enable_mask = BIT(0),
1427 .hw.init = &(struct clk_init_data){
1428 .name = "cam_cc_csi1phytimer_clk",
1429 .parent_hws = (const struct clk_hw*[]) {
1430 &cam_cc_csi1phytimer_clk_src.clkr.hw,
1432 .num_parents = 1,
1433 .flags = CLK_SET_RATE_PARENT,
1434 .ops = &clk_branch2_ops,
1439 static struct clk_branch cam_cc_csi2phytimer_clk = {
1440 .halt_reg = 0xe10c,
1441 .halt_check = BRANCH_HALT,
1442 .clkr = {
1443 .enable_reg = 0xe10c,
1444 .enable_mask = BIT(0),
1445 .hw.init = &(struct clk_init_data){
1446 .name = "cam_cc_csi2phytimer_clk",
1447 .parent_hws = (const struct clk_hw*[]) {
1448 &cam_cc_csi2phytimer_clk_src.clkr.hw,
1450 .num_parents = 1,
1451 .flags = CLK_SET_RATE_PARENT,
1452 .ops = &clk_branch2_ops,
1457 static struct clk_branch cam_cc_csi3phytimer_clk = {
1458 .halt_reg = 0xe134,
1459 .halt_check = BRANCH_HALT,
1460 .clkr = {
1461 .enable_reg = 0xe134,
1462 .enable_mask = BIT(0),
1463 .hw.init = &(struct clk_init_data){
1464 .name = "cam_cc_csi3phytimer_clk",
1465 .parent_hws = (const struct clk_hw*[]) {
1466 &cam_cc_csi3phytimer_clk_src.clkr.hw,
1468 .num_parents = 1,
1469 .flags = CLK_SET_RATE_PARENT,
1470 .ops = &clk_branch2_ops,
1475 static struct clk_branch cam_cc_csi4phytimer_clk = {
1476 .halt_reg = 0xe158,
1477 .halt_check = BRANCH_HALT,
1478 .clkr = {
1479 .enable_reg = 0xe158,
1480 .enable_mask = BIT(0),
1481 .hw.init = &(struct clk_init_data){
1482 .name = "cam_cc_csi4phytimer_clk",
1483 .parent_hws = (const struct clk_hw*[]) {
1484 &cam_cc_csi4phytimer_clk_src.clkr.hw,
1486 .num_parents = 1,
1487 .flags = CLK_SET_RATE_PARENT,
1488 .ops = &clk_branch2_ops,
1493 static struct clk_branch cam_cc_csiphy0_clk = {
1494 .halt_reg = 0xe0c8,
1495 .halt_check = BRANCH_HALT,
1496 .clkr = {
1497 .enable_reg = 0xe0c8,
1498 .enable_mask = BIT(0),
1499 .hw.init = &(struct clk_init_data){
1500 .name = "cam_cc_csiphy0_clk",
1501 .parent_hws = (const struct clk_hw*[]) {
1502 &cam_cc_cphy_rx_clk_src.clkr.hw,
1504 .num_parents = 1,
1505 .flags = CLK_SET_RATE_PARENT,
1506 .ops = &clk_branch2_ops,
1511 static struct clk_branch cam_cc_csiphy1_clk = {
1512 .halt_reg = 0xe0ec,
1513 .halt_check = BRANCH_HALT,
1514 .clkr = {
1515 .enable_reg = 0xe0ec,
1516 .enable_mask = BIT(0),
1517 .hw.init = &(struct clk_init_data){
1518 .name = "cam_cc_csiphy1_clk",
1519 .parent_hws = (const struct clk_hw*[]) {
1520 &cam_cc_cphy_rx_clk_src.clkr.hw,
1522 .num_parents = 1,
1523 .flags = CLK_SET_RATE_PARENT,
1524 .ops = &clk_branch2_ops,
1529 static struct clk_branch cam_cc_csiphy2_clk = {
1530 .halt_reg = 0xe110,
1531 .halt_check = BRANCH_HALT,
1532 .clkr = {
1533 .enable_reg = 0xe110,
1534 .enable_mask = BIT(0),
1535 .hw.init = &(struct clk_init_data){
1536 .name = "cam_cc_csiphy2_clk",
1537 .parent_hws = (const struct clk_hw*[]) {
1538 &cam_cc_cphy_rx_clk_src.clkr.hw,
1540 .num_parents = 1,
1541 .flags = CLK_SET_RATE_PARENT,
1542 .ops = &clk_branch2_ops,
1547 static struct clk_branch cam_cc_csiphy3_clk = {
1548 .halt_reg = 0xe138,
1549 .halt_check = BRANCH_HALT,
1550 .clkr = {
1551 .enable_reg = 0xe138,
1552 .enable_mask = BIT(0),
1553 .hw.init = &(struct clk_init_data){
1554 .name = "cam_cc_csiphy3_clk",
1555 .parent_hws = (const struct clk_hw*[]) {
1556 &cam_cc_cphy_rx_clk_src.clkr.hw,
1558 .num_parents = 1,
1559 .flags = CLK_SET_RATE_PARENT,
1560 .ops = &clk_branch2_ops,
1565 static struct clk_branch cam_cc_csiphy4_clk = {
1566 .halt_reg = 0xe15c,
1567 .halt_check = BRANCH_HALT,
1568 .clkr = {
1569 .enable_reg = 0xe15c,
1570 .enable_mask = BIT(0),
1571 .hw.init = &(struct clk_init_data){
1572 .name = "cam_cc_csiphy4_clk",
1573 .parent_hws = (const struct clk_hw*[]) {
1574 &cam_cc_cphy_rx_clk_src.clkr.hw,
1576 .num_parents = 1,
1577 .flags = CLK_SET_RATE_PARENT,
1578 .ops = &clk_branch2_ops,
1583 static struct clk_branch cam_cc_gdsc_clk = {
1584 .halt_reg = 0xc1bc,
1585 .halt_check = BRANCH_HALT,
1586 .clkr = {
1587 .enable_reg = 0xc1bc,
1588 .enable_mask = BIT(0),
1589 .hw.init = &(struct clk_init_data){
1590 .name = "cam_cc_gdsc_clk",
1591 .parent_hws = (const struct clk_hw*[]) {
1592 &cam_cc_xo_clk_src.clkr.hw,
1594 .num_parents = 1,
1595 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1596 .ops = &clk_branch2_ops,
1601 static struct clk_branch cam_cc_icp_ahb_clk = {
1602 .halt_reg = 0xc0d8,
1603 .halt_check = BRANCH_HALT,
1604 .clkr = {
1605 .enable_reg = 0xc0d8,
1606 .enable_mask = BIT(0),
1607 .hw.init = &(struct clk_init_data){
1608 .name = "cam_cc_icp_ahb_clk",
1609 .parent_hws = (const struct clk_hw*[]) {
1610 &cam_cc_slow_ahb_clk_src.clkr.hw,
1612 .num_parents = 1,
1613 .flags = CLK_SET_RATE_PARENT,
1614 .ops = &clk_branch2_ops,
1619 static struct clk_branch cam_cc_icp_clk = {
1620 .halt_reg = 0xc0d0,
1621 .halt_check = BRANCH_HALT,
1622 .clkr = {
1623 .enable_reg = 0xc0d0,
1624 .enable_mask = BIT(0),
1625 .hw.init = &(struct clk_init_data){
1626 .name = "cam_cc_icp_clk",
1627 .parent_hws = (const struct clk_hw*[]) {
1628 &cam_cc_icp_clk_src.clkr.hw,
1630 .num_parents = 1,
1631 .flags = CLK_SET_RATE_PARENT,
1632 .ops = &clk_branch2_ops,
1637 static struct clk_branch cam_cc_ife_0_axi_clk = {
1638 .halt_reg = 0xa080,
1639 .halt_check = BRANCH_HALT,
1640 .clkr = {
1641 .enable_reg = 0xa080,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(struct clk_init_data){
1644 .name = "cam_cc_ife_0_axi_clk",
1645 .parent_hws = (const struct clk_hw*[]) {
1646 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1648 .num_parents = 1,
1649 .flags = CLK_SET_RATE_PARENT,
1650 .ops = &clk_branch2_ops,
1655 static struct clk_branch cam_cc_ife_0_clk = {
1656 .halt_reg = 0xa028,
1657 .halt_check = BRANCH_HALT,
1658 .clkr = {
1659 .enable_reg = 0xa028,
1660 .enable_mask = BIT(0),
1661 .hw.init = &(struct clk_init_data){
1662 .name = "cam_cc_ife_0_clk",
1663 .parent_hws = (const struct clk_hw*[]) {
1664 &cam_cc_ife_0_clk_src.clkr.hw,
1666 .num_parents = 1,
1667 .flags = CLK_SET_RATE_PARENT,
1668 .ops = &clk_branch2_ops,
1673 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1674 .halt_reg = 0xa07c,
1675 .halt_check = BRANCH_HALT,
1676 .clkr = {
1677 .enable_reg = 0xa07c,
1678 .enable_mask = BIT(0),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "cam_cc_ife_0_cphy_rx_clk",
1681 .parent_hws = (const struct clk_hw*[]) {
1682 &cam_cc_cphy_rx_clk_src.clkr.hw,
1684 .num_parents = 1,
1685 .flags = CLK_SET_RATE_PARENT,
1686 .ops = &clk_branch2_ops,
1691 static struct clk_branch cam_cc_ife_0_csid_clk = {
1692 .halt_reg = 0xa054,
1693 .halt_check = BRANCH_HALT,
1694 .clkr = {
1695 .enable_reg = 0xa054,
1696 .enable_mask = BIT(0),
1697 .hw.init = &(struct clk_init_data){
1698 .name = "cam_cc_ife_0_csid_clk",
1699 .parent_hws = (const struct clk_hw*[]) {
1700 &cam_cc_ife_0_csid_clk_src.clkr.hw,
1702 .num_parents = 1,
1703 .flags = CLK_SET_RATE_PARENT,
1704 .ops = &clk_branch2_ops,
1709 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1710 .halt_reg = 0xa038,
1711 .halt_check = BRANCH_HALT,
1712 .clkr = {
1713 .enable_reg = 0xa038,
1714 .enable_mask = BIT(0),
1715 .hw.init = &(struct clk_init_data){
1716 .name = "cam_cc_ife_0_dsp_clk",
1717 .parent_hws = (const struct clk_hw*[]) {
1718 &cam_cc_ife_0_clk_src.clkr.hw,
1720 .num_parents = 1,
1721 .flags = CLK_SET_RATE_PARENT,
1722 .ops = &clk_branch2_ops,
1727 static struct clk_branch cam_cc_ife_1_axi_clk = {
1728 .halt_reg = 0xb068,
1729 .halt_check = BRANCH_HALT,
1730 .clkr = {
1731 .enable_reg = 0xb068,
1732 .enable_mask = BIT(0),
1733 .hw.init = &(struct clk_init_data){
1734 .name = "cam_cc_ife_1_axi_clk",
1735 .parent_hws = (const struct clk_hw*[]) {
1736 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1738 .num_parents = 1,
1739 .flags = CLK_SET_RATE_PARENT,
1740 .ops = &clk_branch2_ops,
1745 static struct clk_branch cam_cc_ife_1_clk = {
1746 .halt_reg = 0xb028,
1747 .halt_check = BRANCH_HALT,
1748 .clkr = {
1749 .enable_reg = 0xb028,
1750 .enable_mask = BIT(0),
1751 .hw.init = &(struct clk_init_data){
1752 .name = "cam_cc_ife_1_clk",
1753 .parent_hws = (const struct clk_hw*[]) {
1754 &cam_cc_ife_1_clk_src.clkr.hw,
1756 .num_parents = 1,
1757 .flags = CLK_SET_RATE_PARENT,
1758 .ops = &clk_branch2_ops,
1763 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1764 .halt_reg = 0xb064,
1765 .halt_check = BRANCH_HALT,
1766 .clkr = {
1767 .enable_reg = 0xb064,
1768 .enable_mask = BIT(0),
1769 .hw.init = &(struct clk_init_data){
1770 .name = "cam_cc_ife_1_cphy_rx_clk",
1771 .parent_hws = (const struct clk_hw*[]) {
1772 &cam_cc_cphy_rx_clk_src.clkr.hw,
1774 .num_parents = 1,
1775 .flags = CLK_SET_RATE_PARENT,
1776 .ops = &clk_branch2_ops,
1781 static struct clk_branch cam_cc_ife_1_csid_clk = {
1782 .halt_reg = 0xb054,
1783 .halt_check = BRANCH_HALT,
1784 .clkr = {
1785 .enable_reg = 0xb054,
1786 .enable_mask = BIT(0),
1787 .hw.init = &(struct clk_init_data){
1788 .name = "cam_cc_ife_1_csid_clk",
1789 .parent_hws = (const struct clk_hw*[]) {
1790 &cam_cc_ife_1_csid_clk_src.clkr.hw,
1792 .num_parents = 1,
1793 .flags = CLK_SET_RATE_PARENT,
1794 .ops = &clk_branch2_ops,
1799 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1800 .halt_reg = 0xb038,
1801 .halt_check = BRANCH_HALT,
1802 .clkr = {
1803 .enable_reg = 0xb038,
1804 .enable_mask = BIT(0),
1805 .hw.init = &(struct clk_init_data){
1806 .name = "cam_cc_ife_1_dsp_clk",
1807 .parent_hws = (const struct clk_hw*[]) {
1808 &cam_cc_ife_1_clk_src.clkr.hw,
1810 .num_parents = 1,
1811 .flags = CLK_SET_RATE_PARENT,
1812 .ops = &clk_branch2_ops,
1817 static struct clk_branch cam_cc_ife_2_axi_clk = {
1818 .halt_reg = 0xb0d4,
1819 .halt_check = BRANCH_HALT,
1820 .clkr = {
1821 .enable_reg = 0xb0d4,
1822 .enable_mask = BIT(0),
1823 .hw.init = &(struct clk_init_data){
1824 .name = "cam_cc_ife_2_axi_clk",
1825 .parent_hws = (const struct clk_hw*[]) {
1826 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1828 .num_parents = 1,
1829 .flags = CLK_SET_RATE_PARENT,
1830 .ops = &clk_branch2_ops,
1835 static struct clk_branch cam_cc_ife_2_clk = {
1836 .halt_reg = 0xb094,
1837 .halt_check = BRANCH_HALT,
1838 .clkr = {
1839 .enable_reg = 0xb094,
1840 .enable_mask = BIT(0),
1841 .hw.init = &(struct clk_init_data){
1842 .name = "cam_cc_ife_2_clk",
1843 .parent_hws = (const struct clk_hw*[]) {
1844 &cam_cc_ife_2_clk_src.clkr.hw,
1846 .num_parents = 1,
1847 .flags = CLK_SET_RATE_PARENT,
1848 .ops = &clk_branch2_ops,
1853 static struct clk_branch cam_cc_ife_2_cphy_rx_clk = {
1854 .halt_reg = 0xb0d0,
1855 .halt_check = BRANCH_HALT,
1856 .clkr = {
1857 .enable_reg = 0xb0d0,
1858 .enable_mask = BIT(0),
1859 .hw.init = &(struct clk_init_data){
1860 .name = "cam_cc_ife_2_cphy_rx_clk",
1861 .parent_hws = (const struct clk_hw*[]) {
1862 &cam_cc_cphy_rx_clk_src.clkr.hw,
1864 .num_parents = 1,
1865 .flags = CLK_SET_RATE_PARENT,
1866 .ops = &clk_branch2_ops,
1871 static struct clk_branch cam_cc_ife_2_csid_clk = {
1872 .halt_reg = 0xb0c0,
1873 .halt_check = BRANCH_HALT,
1874 .clkr = {
1875 .enable_reg = 0xb0c0,
1876 .enable_mask = BIT(0),
1877 .hw.init = &(struct clk_init_data){
1878 .name = "cam_cc_ife_2_csid_clk",
1879 .parent_hws = (const struct clk_hw*[]) {
1880 &cam_cc_ife_2_csid_clk_src.clkr.hw,
1882 .num_parents = 1,
1883 .flags = CLK_SET_RATE_PARENT,
1884 .ops = &clk_branch2_ops,
1889 static struct clk_branch cam_cc_ife_2_dsp_clk = {
1890 .halt_reg = 0xb0a4,
1891 .halt_check = BRANCH_HALT,
1892 .clkr = {
1893 .enable_reg = 0xb0a4,
1894 .enable_mask = BIT(0),
1895 .hw.init = &(struct clk_init_data){
1896 .name = "cam_cc_ife_2_dsp_clk",
1897 .parent_hws = (const struct clk_hw*[]) {
1898 &cam_cc_ife_2_clk_src.clkr.hw,
1900 .num_parents = 1,
1901 .flags = CLK_SET_RATE_PARENT,
1902 .ops = &clk_branch2_ops,
1907 static struct clk_branch cam_cc_ife_lite_0_clk = {
1908 .halt_reg = 0xc01c,
1909 .halt_check = BRANCH_HALT,
1910 .clkr = {
1911 .enable_reg = 0xc01c,
1912 .enable_mask = BIT(0),
1913 .hw.init = &(struct clk_init_data){
1914 .name = "cam_cc_ife_lite_0_clk",
1915 .parent_hws = (const struct clk_hw*[]) {
1916 &cam_cc_ife_lite_0_clk_src.clkr.hw,
1918 .num_parents = 1,
1919 .flags = CLK_SET_RATE_PARENT,
1920 .ops = &clk_branch2_ops,
1925 static struct clk_branch cam_cc_ife_lite_0_cphy_rx_clk = {
1926 .halt_reg = 0xc040,
1927 .halt_check = BRANCH_HALT,
1928 .clkr = {
1929 .enable_reg = 0xc040,
1930 .enable_mask = BIT(0),
1931 .hw.init = &(struct clk_init_data){
1932 .name = "cam_cc_ife_lite_0_cphy_rx_clk",
1933 .parent_hws = (const struct clk_hw*[]) {
1934 &cam_cc_cphy_rx_clk_src.clkr.hw,
1936 .num_parents = 1,
1937 .flags = CLK_SET_RATE_PARENT,
1938 .ops = &clk_branch2_ops,
1943 static struct clk_branch cam_cc_ife_lite_0_csid_clk = {
1944 .halt_reg = 0xc038,
1945 .halt_check = BRANCH_HALT,
1946 .clkr = {
1947 .enable_reg = 0xc038,
1948 .enable_mask = BIT(0),
1949 .hw.init = &(struct clk_init_data){
1950 .name = "cam_cc_ife_lite_0_csid_clk",
1951 .parent_hws = (const struct clk_hw*[]) {
1952 &cam_cc_ife_lite_0_csid_clk_src.clkr.hw,
1954 .num_parents = 1,
1955 .flags = CLK_SET_RATE_PARENT,
1956 .ops = &clk_branch2_ops,
1961 static struct clk_branch cam_cc_ife_lite_1_clk = {
1962 .halt_reg = 0xc060,
1963 .halt_check = BRANCH_HALT,
1964 .clkr = {
1965 .enable_reg = 0xc060,
1966 .enable_mask = BIT(0),
1967 .hw.init = &(struct clk_init_data){
1968 .name = "cam_cc_ife_lite_1_clk",
1969 .parent_hws = (const struct clk_hw*[]) {
1970 &cam_cc_ife_lite_1_clk_src.clkr.hw,
1972 .num_parents = 1,
1973 .flags = CLK_SET_RATE_PARENT,
1974 .ops = &clk_branch2_ops,
1979 static struct clk_branch cam_cc_ife_lite_1_cphy_rx_clk = {
1980 .halt_reg = 0xc084,
1981 .halt_check = BRANCH_HALT,
1982 .clkr = {
1983 .enable_reg = 0xc084,
1984 .enable_mask = BIT(0),
1985 .hw.init = &(struct clk_init_data){
1986 .name = "cam_cc_ife_lite_1_cphy_rx_clk",
1987 .parent_hws = (const struct clk_hw*[]) {
1988 &cam_cc_cphy_rx_clk_src.clkr.hw,
1990 .num_parents = 1,
1991 .flags = CLK_SET_RATE_PARENT,
1992 .ops = &clk_branch2_ops,
1997 static struct clk_branch cam_cc_ife_lite_1_csid_clk = {
1998 .halt_reg = 0xc07c,
1999 .halt_check = BRANCH_HALT,
2000 .clkr = {
2001 .enable_reg = 0xc07c,
2002 .enable_mask = BIT(0),
2003 .hw.init = &(struct clk_init_data){
2004 .name = "cam_cc_ife_lite_1_csid_clk",
2005 .parent_hws = (const struct clk_hw*[]) {
2006 &cam_cc_ife_lite_1_csid_clk_src.clkr.hw,
2008 .num_parents = 1,
2009 .flags = CLK_SET_RATE_PARENT,
2010 .ops = &clk_branch2_ops,
2015 static struct clk_branch cam_cc_ipe_0_ahb_clk = {
2016 .halt_reg = 0x8040,
2017 .halt_check = BRANCH_HALT,
2018 .clkr = {
2019 .enable_reg = 0x8040,
2020 .enable_mask = BIT(0),
2021 .hw.init = &(struct clk_init_data){
2022 .name = "cam_cc_ipe_0_ahb_clk",
2023 .parent_hws = (const struct clk_hw*[]) {
2024 &cam_cc_slow_ahb_clk_src.clkr.hw,
2026 .num_parents = 1,
2027 .flags = CLK_SET_RATE_PARENT,
2028 .ops = &clk_branch2_ops,
2033 static struct clk_branch cam_cc_ipe_0_areg_clk = {
2034 .halt_reg = 0x803c,
2035 .halt_check = BRANCH_HALT,
2036 .clkr = {
2037 .enable_reg = 0x803c,
2038 .enable_mask = BIT(0),
2039 .hw.init = &(struct clk_init_data){
2040 .name = "cam_cc_ipe_0_areg_clk",
2041 .parent_hws = (const struct clk_hw*[]) {
2042 &cam_cc_fast_ahb_clk_src.clkr.hw,
2044 .num_parents = 1,
2045 .flags = CLK_SET_RATE_PARENT,
2046 .ops = &clk_branch2_ops,
2051 static struct clk_branch cam_cc_ipe_0_axi_clk = {
2052 .halt_reg = 0x8038,
2053 .halt_check = BRANCH_HALT,
2054 .clkr = {
2055 .enable_reg = 0x8038,
2056 .enable_mask = BIT(0),
2057 .hw.init = &(struct clk_init_data){
2058 .name = "cam_cc_ipe_0_axi_clk",
2059 .parent_hws = (const struct clk_hw*[]) {
2060 &cam_cc_camnoc_axi_clk_src.clkr.hw,
2062 .num_parents = 1,
2063 .flags = CLK_SET_RATE_PARENT,
2064 .ops = &clk_branch2_ops,
2069 static struct clk_branch cam_cc_ipe_0_clk = {
2070 .halt_reg = 0x8028,
2071 .halt_check = BRANCH_HALT,
2072 .clkr = {
2073 .enable_reg = 0x8028,
2074 .enable_mask = BIT(0),
2075 .hw.init = &(struct clk_init_data){
2076 .name = "cam_cc_ipe_0_clk",
2077 .parent_hws = (const struct clk_hw*[]) {
2078 &cam_cc_ipe_0_clk_src.clkr.hw,
2080 .num_parents = 1,
2081 .flags = CLK_SET_RATE_PARENT,
2082 .ops = &clk_branch2_ops,
2087 static struct clk_branch cam_cc_jpeg_clk = {
2088 .halt_reg = 0xc0a4,
2089 .halt_check = BRANCH_HALT,
2090 .clkr = {
2091 .enable_reg = 0xc0a4,
2092 .enable_mask = BIT(0),
2093 .hw.init = &(struct clk_init_data){
2094 .name = "cam_cc_jpeg_clk",
2095 .parent_hws = (const struct clk_hw*[]) {
2096 &cam_cc_jpeg_clk_src.clkr.hw,
2098 .num_parents = 1,
2099 .flags = CLK_SET_RATE_PARENT,
2100 .ops = &clk_branch2_ops,
2105 static struct clk_branch cam_cc_lrme_clk = {
2106 .halt_reg = 0xc168,
2107 .halt_check = BRANCH_HALT,
2108 .clkr = {
2109 .enable_reg = 0xc168,
2110 .enable_mask = BIT(0),
2111 .hw.init = &(struct clk_init_data){
2112 .name = "cam_cc_lrme_clk",
2113 .parent_hws = (const struct clk_hw*[]) {
2114 &cam_cc_lrme_clk_src.clkr.hw,
2116 .num_parents = 1,
2117 .flags = CLK_SET_RATE_PARENT,
2118 .ops = &clk_branch2_ops,
2123 static struct clk_branch cam_cc_mclk0_clk = {
2124 .halt_reg = 0xe018,
2125 .halt_check = BRANCH_HALT,
2126 .clkr = {
2127 .enable_reg = 0xe018,
2128 .enable_mask = BIT(0),
2129 .hw.init = &(struct clk_init_data){
2130 .name = "cam_cc_mclk0_clk",
2131 .parent_hws = (const struct clk_hw*[]) {
2132 &cam_cc_mclk0_clk_src.clkr.hw,
2134 .num_parents = 1,
2135 .flags = CLK_SET_RATE_PARENT,
2136 .ops = &clk_branch2_ops,
2141 static struct clk_branch cam_cc_mclk1_clk = {
2142 .halt_reg = 0xe034,
2143 .halt_check = BRANCH_HALT,
2144 .clkr = {
2145 .enable_reg = 0xe034,
2146 .enable_mask = BIT(0),
2147 .hw.init = &(struct clk_init_data){
2148 .name = "cam_cc_mclk1_clk",
2149 .parent_hws = (const struct clk_hw*[]) {
2150 &cam_cc_mclk1_clk_src.clkr.hw,
2152 .num_parents = 1,
2153 .flags = CLK_SET_RATE_PARENT,
2154 .ops = &clk_branch2_ops,
2159 static struct clk_branch cam_cc_mclk2_clk = {
2160 .halt_reg = 0xe050,
2161 .halt_check = BRANCH_HALT,
2162 .clkr = {
2163 .enable_reg = 0xe050,
2164 .enable_mask = BIT(0),
2165 .hw.init = &(struct clk_init_data){
2166 .name = "cam_cc_mclk2_clk",
2167 .parent_hws = (const struct clk_hw*[]) {
2168 &cam_cc_mclk2_clk_src.clkr.hw,
2170 .num_parents = 1,
2171 .flags = CLK_SET_RATE_PARENT,
2172 .ops = &clk_branch2_ops,
2177 static struct clk_branch cam_cc_mclk3_clk = {
2178 .halt_reg = 0xe06c,
2179 .halt_check = BRANCH_HALT,
2180 .clkr = {
2181 .enable_reg = 0xe06c,
2182 .enable_mask = BIT(0),
2183 .hw.init = &(struct clk_init_data){
2184 .name = "cam_cc_mclk3_clk",
2185 .parent_hws = (const struct clk_hw*[]) {
2186 &cam_cc_mclk3_clk_src.clkr.hw,
2188 .num_parents = 1,
2189 .flags = CLK_SET_RATE_PARENT,
2190 .ops = &clk_branch2_ops,
2195 static struct clk_branch cam_cc_mclk4_clk = {
2196 .halt_reg = 0xe088,
2197 .halt_check = BRANCH_HALT,
2198 .clkr = {
2199 .enable_reg = 0xe088,
2200 .enable_mask = BIT(0),
2201 .hw.init = &(struct clk_init_data){
2202 .name = "cam_cc_mclk4_clk",
2203 .parent_hws = (const struct clk_hw*[]) {
2204 &cam_cc_mclk4_clk_src.clkr.hw,
2206 .num_parents = 1,
2207 .flags = CLK_SET_RATE_PARENT,
2208 .ops = &clk_branch2_ops,
2213 static struct clk_branch cam_cc_mclk5_clk = {
2214 .halt_reg = 0xe0a4,
2215 .halt_check = BRANCH_HALT,
2216 .clkr = {
2217 .enable_reg = 0xe0a4,
2218 .enable_mask = BIT(0),
2219 .hw.init = &(struct clk_init_data){
2220 .name = "cam_cc_mclk5_clk",
2221 .parent_hws = (const struct clk_hw*[]) {
2222 &cam_cc_mclk5_clk_src.clkr.hw,
2224 .num_parents = 1,
2225 .flags = CLK_SET_RATE_PARENT,
2226 .ops = &clk_branch2_ops,
2231 static struct clk_branch cam_cc_sleep_clk = {
2232 .halt_reg = 0xc1d8,
2233 .halt_check = BRANCH_HALT,
2234 .clkr = {
2235 .enable_reg = 0xc1d8,
2236 .enable_mask = BIT(0),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "cam_cc_sleep_clk",
2239 .parent_hws = (const struct clk_hw*[]) {
2240 &cam_cc_sleep_clk_src.clkr.hw,
2242 .num_parents = 1,
2243 .flags = CLK_SET_RATE_PARENT,
2244 .ops = &clk_branch2_ops,
2249 static struct gdsc cam_cc_titan_top_gdsc = {
2250 .gdscr = 0xc194,
2251 .en_rest_wait_val = 0x2,
2252 .en_few_wait_val = 0x2,
2253 .clk_dis_wait_val = 0xf,
2254 .pd = {
2255 .name = "cam_cc_titan_top_gdsc",
2257 .pwrsts = PWRSTS_OFF_ON,
2258 .flags = RETAIN_FF_ENABLE,
2261 static struct gdsc cam_cc_bps_gdsc = {
2262 .gdscr = 0x7004,
2263 .en_rest_wait_val = 0x2,
2264 .en_few_wait_val = 0x2,
2265 .clk_dis_wait_val = 0xf,
2266 .pd = {
2267 .name = "cam_cc_bps_gdsc",
2269 .pwrsts = PWRSTS_OFF_ON,
2270 .parent = &cam_cc_titan_top_gdsc.pd,
2271 .flags = HW_CTRL | RETAIN_FF_ENABLE,
2274 static struct gdsc cam_cc_ife_0_gdsc = {
2275 .gdscr = 0xa004,
2276 .en_rest_wait_val = 0x2,
2277 .en_few_wait_val = 0x2,
2278 .clk_dis_wait_val = 0xf,
2279 .pd = {
2280 .name = "cam_cc_ife_0_gdsc",
2282 .pwrsts = PWRSTS_OFF_ON,
2283 .parent = &cam_cc_titan_top_gdsc.pd,
2284 .flags = RETAIN_FF_ENABLE,
2287 static struct gdsc cam_cc_ife_1_gdsc = {
2288 .gdscr = 0xb004,
2289 .en_rest_wait_val = 0x2,
2290 .en_few_wait_val = 0x2,
2291 .clk_dis_wait_val = 0xf,
2292 .pd = {
2293 .name = "cam_cc_ife_1_gdsc",
2295 .pwrsts = PWRSTS_OFF_ON,
2296 .parent = &cam_cc_titan_top_gdsc.pd,
2297 .flags = RETAIN_FF_ENABLE,
2300 static struct gdsc cam_cc_ife_2_gdsc = {
2301 .gdscr = 0xb070,
2302 .en_rest_wait_val = 0x2,
2303 .en_few_wait_val = 0x2,
2304 .clk_dis_wait_val = 0xf,
2305 .pd = {
2306 .name = "cam_cc_ife_2_gdsc",
2308 .pwrsts = PWRSTS_OFF_ON,
2309 .parent = &cam_cc_titan_top_gdsc.pd,
2310 .flags = RETAIN_FF_ENABLE,
2313 static struct gdsc cam_cc_ipe_0_gdsc = {
2314 .gdscr = 0x8004,
2315 .en_rest_wait_val = 0x2,
2316 .en_few_wait_val = 0x2,
2317 .clk_dis_wait_val = 0xf,
2318 .pd = {
2319 .name = "cam_cc_ipe_0_gdsc",
2321 .pwrsts = PWRSTS_OFF_ON,
2322 .parent = &cam_cc_titan_top_gdsc.pd,
2323 .flags = HW_CTRL | RETAIN_FF_ENABLE,
2326 static struct clk_regmap *cam_cc_sc7280_clocks[] = {
2327 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2328 [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
2329 [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
2330 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2331 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2332 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2333 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2334 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2335 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2336 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2337 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2338 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2339 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2340 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2341 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2342 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2343 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2344 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2345 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2346 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2347 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2348 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2349 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2350 [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
2351 [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
2352 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2353 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2354 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2355 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2356 [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
2357 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2358 [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr,
2359 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2360 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2361 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2362 [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
2363 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2364 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2365 [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
2366 [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
2367 [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
2368 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2369 [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
2370 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2371 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2372 [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
2373 [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
2374 [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
2375 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2376 [CAM_CC_IFE_2_AXI_CLK] = &cam_cc_ife_2_axi_clk.clkr,
2377 [CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
2378 [CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
2379 [CAM_CC_IFE_2_CPHY_RX_CLK] = &cam_cc_ife_2_cphy_rx_clk.clkr,
2380 [CAM_CC_IFE_2_CSID_CLK] = &cam_cc_ife_2_csid_clk.clkr,
2381 [CAM_CC_IFE_2_CSID_CLK_SRC] = &cam_cc_ife_2_csid_clk_src.clkr,
2382 [CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr,
2383 [CAM_CC_IFE_LITE_0_CLK] = &cam_cc_ife_lite_0_clk.clkr,
2384 [CAM_CC_IFE_LITE_0_CLK_SRC] = &cam_cc_ife_lite_0_clk_src.clkr,
2385 [CAM_CC_IFE_LITE_0_CPHY_RX_CLK] = &cam_cc_ife_lite_0_cphy_rx_clk.clkr,
2386 [CAM_CC_IFE_LITE_0_CSID_CLK] = &cam_cc_ife_lite_0_csid_clk.clkr,
2387 [CAM_CC_IFE_LITE_0_CSID_CLK_SRC] = &cam_cc_ife_lite_0_csid_clk_src.clkr,
2388 [CAM_CC_IFE_LITE_1_CLK] = &cam_cc_ife_lite_1_clk.clkr,
2389 [CAM_CC_IFE_LITE_1_CLK_SRC] = &cam_cc_ife_lite_1_clk_src.clkr,
2390 [CAM_CC_IFE_LITE_1_CPHY_RX_CLK] = &cam_cc_ife_lite_1_cphy_rx_clk.clkr,
2391 [CAM_CC_IFE_LITE_1_CSID_CLK] = &cam_cc_ife_lite_1_csid_clk.clkr,
2392 [CAM_CC_IFE_LITE_1_CSID_CLK_SRC] = &cam_cc_ife_lite_1_csid_clk_src.clkr,
2393 [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
2394 [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
2395 [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
2396 [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
2397 [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
2398 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2399 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2400 [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
2401 [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
2402 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2403 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2404 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2405 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2406 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2407 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2408 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2409 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2410 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2411 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2412 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2413 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2414 [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2415 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2416 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2417 [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2418 [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
2419 [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2420 [CAM_CC_PLL2_OUT_AUX] = &cam_cc_pll2_out_aux.clkr,
2421 [CAM_CC_PLL2_OUT_AUX2] = &cam_cc_pll2_out_aux2.clkr,
2422 [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2423 [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
2424 [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2425 [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
2426 [CAM_CC_PLL5] = &cam_cc_pll5.clkr,
2427 [CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
2428 [CAM_CC_PLL6] = &cam_cc_pll6.clkr,
2429 [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
2430 [CAM_CC_PLL6_OUT_ODD] = &cam_cc_pll6_out_odd.clkr,
2431 [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
2432 [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
2433 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2434 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2437 static struct gdsc *cam_cc_sc7280_gdscs[] = {
2438 [CAM_CC_TITAN_TOP_GDSC] = &cam_cc_titan_top_gdsc,
2439 [CAM_CC_BPS_GDSC] = &cam_cc_bps_gdsc,
2440 [CAM_CC_IFE_0_GDSC] = &cam_cc_ife_0_gdsc,
2441 [CAM_CC_IFE_1_GDSC] = &cam_cc_ife_1_gdsc,
2442 [CAM_CC_IFE_2_GDSC] = &cam_cc_ife_2_gdsc,
2443 [CAM_CC_IPE_0_GDSC] = &cam_cc_ipe_0_gdsc,
2446 static const struct regmap_config cam_cc_sc7280_regmap_config = {
2447 .reg_bits = 32,
2448 .reg_stride = 4,
2449 .val_bits = 32,
2450 .max_register = 0xf00c,
2451 .fast_io = true,
2454 static const struct qcom_cc_desc cam_cc_sc7280_desc = {
2455 .config = &cam_cc_sc7280_regmap_config,
2456 .clks = cam_cc_sc7280_clocks,
2457 .num_clks = ARRAY_SIZE(cam_cc_sc7280_clocks),
2458 .gdscs = cam_cc_sc7280_gdscs,
2459 .num_gdscs = ARRAY_SIZE(cam_cc_sc7280_gdscs),
2462 static const struct of_device_id cam_cc_sc7280_match_table[] = {
2463 { .compatible = "qcom,sc7280-camcc" },
2466 MODULE_DEVICE_TABLE(of, cam_cc_sc7280_match_table);
2468 static int cam_cc_sc7280_probe(struct platform_device *pdev)
2470 struct regmap *regmap;
2472 regmap = qcom_cc_map(pdev, &cam_cc_sc7280_desc);
2473 if (IS_ERR(regmap))
2474 return PTR_ERR(regmap);
2476 clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
2477 clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
2478 clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
2479 clk_lucid_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
2480 clk_lucid_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
2481 clk_lucid_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config);
2482 clk_lucid_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config);
2484 return qcom_cc_really_probe(&pdev->dev, &cam_cc_sc7280_desc, regmap);
2487 static struct platform_driver cam_cc_sc7280_driver = {
2488 .probe = cam_cc_sc7280_probe,
2489 .driver = {
2490 .name = "cam_cc-sc7280",
2491 .of_match_table = cam_cc_sc7280_match_table,
2495 module_platform_driver(cam_cc_sc7280_driver);
2497 MODULE_DESCRIPTION("QTI CAM_CC SC7280 Driver");
2498 MODULE_LICENSE("GPL v2");