1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
6 #include <linux/clk-provider.h>
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/platform_device.h>
12 #include <linux/regmap.h>
13 #include <linux/pm_runtime.h>
15 #include <dt-bindings/clock/qcom,sm8150-camcc.h>
17 #include "clk-alpha-pll.h"
18 #include "clk-branch.h"
20 #include "clk-regmap.h"
32 P_CAM_CC_PLL0_OUT_EVEN
,
33 P_CAM_CC_PLL0_OUT_MAIN
,
34 P_CAM_CC_PLL0_OUT_ODD
,
35 P_CAM_CC_PLL1_OUT_EVEN
,
36 P_CAM_CC_PLL2_OUT_EARLY
,
37 P_CAM_CC_PLL2_OUT_MAIN
,
38 P_CAM_CC_PLL3_OUT_EVEN
,
39 P_CAM_CC_PLL4_OUT_EVEN
,
42 static const struct pll_vco regera_vco
[] = {
43 { 600000000, 3300000000, 0 },
46 static const struct pll_vco trion_vco
[] = {
47 { 249600000, 2000000000, 0 },
50 static const struct alpha_pll_config cam_cc_pll0_config
= {
53 .config_ctl_val
= 0x20485699,
54 .config_ctl_hi_val
= 0x00002267,
55 .config_ctl_hi1_val
= 0x00000024,
56 .test_ctl_val
= 0x00000000,
57 .test_ctl_hi_val
= 0x00000000,
58 .test_ctl_hi1_val
= 0x00000020,
59 .user_ctl_val
= 0x00003100,
60 .user_ctl_hi_val
= 0x00000805,
61 .user_ctl_hi1_val
= 0x000000D0,
64 static struct clk_alpha_pll cam_cc_pll0
= {
66 .vco_table
= trion_vco
,
67 .num_vco
= ARRAY_SIZE(trion_vco
),
68 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
70 .hw
.init
= &(const struct clk_init_data
) {
71 .name
= "cam_cc_pll0",
72 .parent_data
= &(const struct clk_parent_data
) {
76 .ops
= &clk_alpha_pll_trion_ops
,
81 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even
[] = {
86 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even
= {
89 .post_div_table
= post_div_table_cam_cc_pll0_out_even
,
90 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even
),
92 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
93 .clkr
.hw
.init
= &(const struct clk_init_data
) {
94 .name
= "cam_cc_pll0_out_even",
95 .parent_hws
= (const struct clk_hw
*[]) {
99 .flags
= CLK_SET_RATE_PARENT
,
100 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
104 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd
[] = {
109 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd
= {
111 .post_div_shift
= 12,
112 .post_div_table
= post_div_table_cam_cc_pll0_out_odd
,
113 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd
),
115 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
116 .clkr
.hw
.init
= &(const struct clk_init_data
) {
117 .name
= "cam_cc_pll0_out_odd",
118 .parent_hws
= (const struct clk_hw
*[]) {
119 &cam_cc_pll0
.clkr
.hw
,
122 .flags
= CLK_SET_RATE_PARENT
,
123 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
127 static const struct alpha_pll_config cam_cc_pll1_config
= {
130 .config_ctl_val
= 0x20485699,
131 .config_ctl_hi_val
= 0x00002267,
132 .config_ctl_hi1_val
= 0x00000024,
133 .test_ctl_val
= 0x00000000,
134 .test_ctl_hi_val
= 0x00000000,
135 .test_ctl_hi1_val
= 0x00000020,
136 .user_ctl_val
= 0x00000100,
137 .user_ctl_hi_val
= 0x00000805,
138 .user_ctl_hi1_val
= 0x000000D0,
141 static struct clk_alpha_pll cam_cc_pll1
= {
143 .vco_table
= trion_vco
,
144 .num_vco
= ARRAY_SIZE(trion_vco
),
145 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
147 .hw
.init
= &(const struct clk_init_data
) {
148 .name
= "cam_cc_pll1",
149 .parent_data
= &(const struct clk_parent_data
) {
153 .ops
= &clk_alpha_pll_trion_ops
,
158 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even
[] = {
163 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even
= {
166 .post_div_table
= post_div_table_cam_cc_pll1_out_even
,
167 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even
),
169 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
170 .clkr
.hw
.init
= &(const struct clk_init_data
) {
171 .name
= "cam_cc_pll1_out_even",
172 .parent_hws
= (const struct clk_hw
*[]) {
173 &cam_cc_pll1
.clkr
.hw
,
176 .flags
= CLK_SET_RATE_PARENT
,
177 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
181 static const struct alpha_pll_config cam_cc_pll2_config
= {
184 .config_ctl_val
= 0x10000807,
185 .config_ctl_hi_val
= 0x00000011,
186 .config_ctl_hi1_val
= 0x04300142,
187 .test_ctl_val
= 0x04000400,
188 .test_ctl_hi_val
= 0x00004000,
189 .test_ctl_hi1_val
= 0x00000000,
190 .user_ctl_val
= 0x00000100,
191 .user_ctl_hi_val
= 0x00000000,
192 .user_ctl_hi1_val
= 0x00000000,
195 static struct clk_alpha_pll cam_cc_pll2
= {
197 .vco_table
= regera_vco
,
198 .num_vco
= ARRAY_SIZE(regera_vco
),
199 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_REGERA
],
201 .hw
.init
= &(const struct clk_init_data
) {
202 .name
= "cam_cc_pll2",
203 .parent_data
= &(const struct clk_parent_data
) {
207 .ops
= &clk_alpha_pll_regera_ops
,
212 static const struct clk_div_table post_div_table_cam_cc_pll2_out_main
[] = {
217 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main
= {
220 .post_div_table
= post_div_table_cam_cc_pll2_out_main
,
221 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main
),
223 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_REGERA
],
224 .clkr
.hw
.init
= &(const struct clk_init_data
) {
225 .name
= "cam_cc_pll2_out_main",
226 .parent_hws
= (const struct clk_hw
*[]) {
227 &cam_cc_pll2
.clkr
.hw
,
230 .flags
= CLK_SET_RATE_PARENT
,
231 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
235 static const struct alpha_pll_config cam_cc_pll3_config
= {
238 .config_ctl_val
= 0x20485699,
239 .config_ctl_hi_val
= 0x00002267,
240 .config_ctl_hi1_val
= 0x00000024,
241 .test_ctl_val
= 0x00000000,
242 .test_ctl_hi_val
= 0x00000000,
243 .test_ctl_hi1_val
= 0x00000020,
244 .user_ctl_val
= 0x00000100,
245 .user_ctl_hi_val
= 0x00000805,
246 .user_ctl_hi1_val
= 0x000000D0,
249 static struct clk_alpha_pll cam_cc_pll3
= {
251 .vco_table
= trion_vco
,
252 .num_vco
= ARRAY_SIZE(trion_vco
),
253 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
255 .hw
.init
= &(const struct clk_init_data
) {
256 .name
= "cam_cc_pll3",
257 .parent_data
= &(const struct clk_parent_data
) {
261 .ops
= &clk_alpha_pll_trion_ops
,
266 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even
[] = {
271 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even
= {
274 .post_div_table
= post_div_table_cam_cc_pll3_out_even
,
275 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even
),
277 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
278 .clkr
.hw
.init
= &(const struct clk_init_data
) {
279 .name
= "cam_cc_pll3_out_even",
280 .parent_hws
= (const struct clk_hw
*[]) {
281 &cam_cc_pll3
.clkr
.hw
,
284 .flags
= CLK_SET_RATE_PARENT
,
285 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
289 static const struct alpha_pll_config cam_cc_pll4_config
= {
292 .config_ctl_val
= 0x20485699,
293 .config_ctl_hi_val
= 0x00002267,
294 .config_ctl_hi1_val
= 0x00000024,
295 .test_ctl_val
= 0x00000000,
296 .test_ctl_hi_val
= 0x00000000,
297 .test_ctl_hi1_val
= 0x00000020,
298 .user_ctl_val
= 0x00000100,
299 .user_ctl_hi_val
= 0x00000805,
300 .user_ctl_hi1_val
= 0x000000D0,
303 static struct clk_alpha_pll cam_cc_pll4
= {
305 .vco_table
= trion_vco
,
306 .num_vco
= ARRAY_SIZE(trion_vco
),
307 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
309 .hw
.init
= &(const struct clk_init_data
) {
310 .name
= "cam_cc_pll4",
311 .parent_data
= &(const struct clk_parent_data
) {
315 .ops
= &clk_alpha_pll_trion_ops
,
320 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even
[] = {
325 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even
= {
328 .post_div_table
= post_div_table_cam_cc_pll4_out_even
,
329 .num_post_div
= ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even
),
331 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
332 .clkr
.hw
.init
= &(const struct clk_init_data
) {
333 .name
= "cam_cc_pll4_out_even",
334 .parent_hws
= (const struct clk_hw
*[]) {
335 &cam_cc_pll4
.clkr
.hw
,
338 .flags
= CLK_SET_RATE_PARENT
,
339 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
343 static const struct parent_map cam_cc_parent_map_0
[] = {
345 { P_CAM_CC_PLL0_OUT_MAIN
, 1 },
346 { P_CAM_CC_PLL0_OUT_EVEN
, 2 },
347 { P_CAM_CC_PLL0_OUT_ODD
, 3 },
348 { P_CAM_CC_PLL2_OUT_MAIN
, 5 },
351 static const struct clk_parent_data cam_cc_parent_data_0
[] = {
352 { .index
= DT_BI_TCXO
},
353 { .hw
= &cam_cc_pll0
.clkr
.hw
},
354 { .hw
= &cam_cc_pll0_out_even
.clkr
.hw
},
355 { .hw
= &cam_cc_pll0_out_odd
.clkr
.hw
},
356 { .hw
= &cam_cc_pll2_out_main
.clkr
.hw
},
359 static const struct parent_map cam_cc_parent_map_1
[] = {
361 { P_CAM_CC_PLL2_OUT_EARLY
, 5 },
364 static const struct clk_parent_data cam_cc_parent_data_1
[] = {
365 { .index
= DT_BI_TCXO
},
366 { .hw
= &cam_cc_pll2
.clkr
.hw
},
369 static const struct parent_map cam_cc_parent_map_2
[] = {
371 { P_CAM_CC_PLL3_OUT_EVEN
, 6 },
374 static const struct clk_parent_data cam_cc_parent_data_2
[] = {
375 { .index
= DT_BI_TCXO
},
376 { .hw
= &cam_cc_pll3_out_even
.clkr
.hw
},
379 static const struct parent_map cam_cc_parent_map_3
[] = {
381 { P_CAM_CC_PLL4_OUT_EVEN
, 6 },
384 static const struct clk_parent_data cam_cc_parent_data_3
[] = {
385 { .index
= DT_BI_TCXO
},
386 { .hw
= &cam_cc_pll4_out_even
.clkr
.hw
},
389 static const struct parent_map cam_cc_parent_map_4
[] = {
391 { P_CAM_CC_PLL1_OUT_EVEN
, 4 },
394 static const struct clk_parent_data cam_cc_parent_data_4
[] = {
395 { .index
= DT_BI_TCXO
},
396 { .hw
= &cam_cc_pll1_out_even
.clkr
.hw
},
399 static const struct freq_tbl ftbl_cam_cc_bps_clk_src
[] = {
400 F(19200000, P_BI_TCXO
, 1, 0, 0),
401 F(100000000, P_CAM_CC_PLL0_OUT_EVEN
, 6, 0, 0),
402 F(200000000, P_CAM_CC_PLL0_OUT_ODD
, 2, 0, 0),
403 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
404 F(480000000, P_CAM_CC_PLL2_OUT_MAIN
, 1, 0, 0),
405 F(600000000, P_CAM_CC_PLL0_OUT_MAIN
, 2, 0, 0),
409 static struct clk_rcg2 cam_cc_bps_clk_src
= {
413 .parent_map
= cam_cc_parent_map_0
,
414 .freq_tbl
= ftbl_cam_cc_bps_clk_src
,
415 .clkr
.hw
.init
= &(const struct clk_init_data
) {
416 .name
= "cam_cc_bps_clk_src",
417 .parent_data
= cam_cc_parent_data_0
,
418 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
419 .flags
= CLK_SET_RATE_PARENT
,
420 .ops
= &clk_rcg2_shared_ops
,
424 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src
[] = {
425 F(19200000, P_BI_TCXO
, 1, 0, 0),
426 F(150000000, P_CAM_CC_PLL0_OUT_EVEN
, 4, 0, 0),
427 F(266666667, P_CAM_CC_PLL0_OUT_ODD
, 1.5, 0, 0),
428 F(320000000, P_CAM_CC_PLL2_OUT_MAIN
, 1.5, 0, 0),
429 F(400000000, P_CAM_CC_PLL0_OUT_MAIN
, 3, 0, 0),
430 F(480000000, P_CAM_CC_PLL2_OUT_MAIN
, 1, 0, 0),
434 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src
= {
438 .parent_map
= cam_cc_parent_map_0
,
439 .freq_tbl
= ftbl_cam_cc_camnoc_axi_clk_src
,
440 .clkr
.hw
.init
= &(const struct clk_init_data
) {
441 .name
= "cam_cc_camnoc_axi_clk_src",
442 .parent_data
= cam_cc_parent_data_0
,
443 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
444 .flags
= CLK_SET_RATE_PARENT
,
445 .ops
= &clk_rcg2_shared_ops
,
449 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src
[] = {
450 F(19200000, P_BI_TCXO
, 1, 0, 0),
451 F(37500000, P_CAM_CC_PLL0_OUT_EVEN
, 16, 0, 0),
455 static struct clk_rcg2 cam_cc_cci_0_clk_src
= {
459 .parent_map
= cam_cc_parent_map_0
,
460 .freq_tbl
= ftbl_cam_cc_cci_0_clk_src
,
461 .clkr
.hw
.init
= &(const struct clk_init_data
) {
462 .name
= "cam_cc_cci_0_clk_src",
463 .parent_data
= cam_cc_parent_data_0
,
464 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
465 .flags
= CLK_SET_RATE_PARENT
,
466 .ops
= &clk_rcg2_shared_ops
,
470 static struct clk_rcg2 cam_cc_cci_1_clk_src
= {
474 .parent_map
= cam_cc_parent_map_0
,
475 .freq_tbl
= ftbl_cam_cc_cci_0_clk_src
,
476 .clkr
.hw
.init
= &(const struct clk_init_data
) {
477 .name
= "cam_cc_cci_1_clk_src",
478 .parent_data
= cam_cc_parent_data_0
,
479 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
480 .flags
= CLK_SET_RATE_PARENT
,
481 .ops
= &clk_rcg2_shared_ops
,
485 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src
[] = {
486 F(19200000, P_BI_TCXO
, 1, 0, 0),
487 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
491 static struct clk_rcg2 cam_cc_cphy_rx_clk_src
= {
495 .parent_map
= cam_cc_parent_map_0
,
496 .freq_tbl
= ftbl_cam_cc_cphy_rx_clk_src
,
497 .clkr
.hw
.init
= &(const struct clk_init_data
) {
498 .name
= "cam_cc_cphy_rx_clk_src",
499 .parent_data
= cam_cc_parent_data_0
,
500 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
501 .flags
= CLK_SET_RATE_PARENT
,
502 .ops
= &clk_rcg2_shared_ops
,
506 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src
[] = {
507 F(19200000, P_BI_TCXO
, 1, 0, 0),
508 F(300000000, P_CAM_CC_PLL0_OUT_EVEN
, 2, 0, 0),
512 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src
= {
516 .parent_map
= cam_cc_parent_map_0
,
517 .freq_tbl
= ftbl_cam_cc_csi0phytimer_clk_src
,
518 .clkr
.hw
.init
= &(const struct clk_init_data
) {
519 .name
= "cam_cc_csi0phytimer_clk_src",
520 .parent_data
= cam_cc_parent_data_0
,
521 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
522 .flags
= CLK_SET_RATE_PARENT
,
523 .ops
= &clk_rcg2_shared_ops
,
527 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src
= {
531 .parent_map
= cam_cc_parent_map_0
,
532 .freq_tbl
= ftbl_cam_cc_csi0phytimer_clk_src
,
533 .clkr
.hw
.init
= &(const struct clk_init_data
) {
534 .name
= "cam_cc_csi1phytimer_clk_src",
535 .parent_data
= cam_cc_parent_data_0
,
536 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
537 .flags
= CLK_SET_RATE_PARENT
,
538 .ops
= &clk_rcg2_shared_ops
,
542 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src
= {
546 .parent_map
= cam_cc_parent_map_0
,
547 .freq_tbl
= ftbl_cam_cc_csi0phytimer_clk_src
,
548 .clkr
.hw
.init
= &(const struct clk_init_data
) {
549 .name
= "cam_cc_csi2phytimer_clk_src",
550 .parent_data
= cam_cc_parent_data_0
,
551 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
552 .flags
= CLK_SET_RATE_PARENT
,
553 .ops
= &clk_rcg2_shared_ops
,
557 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src
= {
561 .parent_map
= cam_cc_parent_map_0
,
562 .freq_tbl
= ftbl_cam_cc_csi0phytimer_clk_src
,
563 .clkr
.hw
.init
= &(const struct clk_init_data
) {
564 .name
= "cam_cc_csi3phytimer_clk_src",
565 .parent_data
= cam_cc_parent_data_0
,
566 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
567 .flags
= CLK_SET_RATE_PARENT
,
568 .ops
= &clk_rcg2_shared_ops
,
572 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src
[] = {
573 F(19200000, P_BI_TCXO
, 1, 0, 0),
574 F(50000000, P_CAM_CC_PLL0_OUT_EVEN
, 12, 0, 0),
575 F(100000000, P_CAM_CC_PLL0_OUT_EVEN
, 6, 0, 0),
576 F(200000000, P_CAM_CC_PLL0_OUT_EVEN
, 3, 0, 0),
577 F(300000000, P_CAM_CC_PLL0_OUT_MAIN
, 4, 0, 0),
578 F(400000000, P_CAM_CC_PLL0_OUT_MAIN
, 3, 0, 0),
582 static struct clk_rcg2 cam_cc_fast_ahb_clk_src
= {
586 .parent_map
= cam_cc_parent_map_0
,
587 .freq_tbl
= ftbl_cam_cc_fast_ahb_clk_src
,
588 .clkr
.hw
.init
= &(const struct clk_init_data
) {
589 .name
= "cam_cc_fast_ahb_clk_src",
590 .parent_data
= cam_cc_parent_data_0
,
591 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
592 .flags
= CLK_SET_RATE_PARENT
,
593 .ops
= &clk_rcg2_shared_ops
,
597 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src
[] = {
598 F(19200000, P_BI_TCXO
, 1, 0, 0),
599 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
600 F(480000000, P_CAM_CC_PLL2_OUT_MAIN
, 1, 0, 0),
601 F(600000000, P_CAM_CC_PLL0_OUT_MAIN
, 2, 0, 0),
605 static struct clk_rcg2 cam_cc_fd_core_clk_src
= {
609 .parent_map
= cam_cc_parent_map_0
,
610 .freq_tbl
= ftbl_cam_cc_fd_core_clk_src
,
611 .clkr
.hw
.init
= &(const struct clk_init_data
) {
612 .name
= "cam_cc_fd_core_clk_src",
613 .parent_data
= cam_cc_parent_data_0
,
614 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
615 .flags
= CLK_SET_RATE_PARENT
,
616 .ops
= &clk_rcg2_shared_ops
,
620 static const struct freq_tbl ftbl_cam_cc_icp_clk_src
[] = {
621 F(19200000, P_BI_TCXO
, 1, 0, 0),
622 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
623 F(600000000, P_CAM_CC_PLL0_OUT_MAIN
, 2, 0, 0),
627 static struct clk_rcg2 cam_cc_icp_clk_src
= {
631 .parent_map
= cam_cc_parent_map_0
,
632 .freq_tbl
= ftbl_cam_cc_icp_clk_src
,
633 .clkr
.hw
.init
= &(const struct clk_init_data
) {
634 .name
= "cam_cc_icp_clk_src",
635 .parent_data
= cam_cc_parent_data_0
,
636 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
637 .flags
= CLK_SET_RATE_PARENT
,
638 .ops
= &clk_rcg2_shared_ops
,
642 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src
[] = {
643 F(19200000, P_BI_TCXO
, 1, 0, 0),
644 F(400000000, P_CAM_CC_PLL3_OUT_EVEN
, 1, 0, 0),
645 F(558000000, P_CAM_CC_PLL3_OUT_EVEN
, 1, 0, 0),
646 F(637000000, P_CAM_CC_PLL3_OUT_EVEN
, 1, 0, 0),
647 F(847000000, P_CAM_CC_PLL3_OUT_EVEN
, 1, 0, 0),
648 F(950000000, P_CAM_CC_PLL3_OUT_EVEN
, 1, 0, 0),
652 static struct clk_rcg2 cam_cc_ife_0_clk_src
= {
656 .parent_map
= cam_cc_parent_map_2
,
657 .freq_tbl
= ftbl_cam_cc_ife_0_clk_src
,
658 .clkr
.hw
.init
= &(const struct clk_init_data
) {
659 .name
= "cam_cc_ife_0_clk_src",
660 .parent_data
= cam_cc_parent_data_2
,
661 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_2
),
662 .flags
= CLK_SET_RATE_PARENT
,
663 .ops
= &clk_rcg2_shared_ops
,
667 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src
[] = {
668 F(19200000, P_BI_TCXO
, 1, 0, 0),
669 F(75000000, P_CAM_CC_PLL0_OUT_EVEN
, 8, 0, 0),
670 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
671 F(480000000, P_CAM_CC_PLL2_OUT_MAIN
, 1, 0, 0),
672 F(600000000, P_CAM_CC_PLL0_OUT_MAIN
, 2, 0, 0),
676 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src
= {
680 .parent_map
= cam_cc_parent_map_0
,
681 .freq_tbl
= ftbl_cam_cc_ife_0_csid_clk_src
,
682 .clkr
.hw
.init
= &(const struct clk_init_data
) {
683 .name
= "cam_cc_ife_0_csid_clk_src",
684 .parent_data
= cam_cc_parent_data_0
,
685 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
686 .flags
= CLK_SET_RATE_PARENT
,
687 .ops
= &clk_rcg2_shared_ops
,
691 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src
[] = {
692 F(19200000, P_BI_TCXO
, 1, 0, 0),
693 F(400000000, P_CAM_CC_PLL4_OUT_EVEN
, 1, 0, 0),
694 F(558000000, P_CAM_CC_PLL4_OUT_EVEN
, 1, 0, 0),
695 F(637000000, P_CAM_CC_PLL4_OUT_EVEN
, 1, 0, 0),
696 F(847000000, P_CAM_CC_PLL4_OUT_EVEN
, 1, 0, 0),
697 F(950000000, P_CAM_CC_PLL4_OUT_EVEN
, 1, 0, 0),
701 static struct clk_rcg2 cam_cc_ife_1_clk_src
= {
705 .parent_map
= cam_cc_parent_map_3
,
706 .freq_tbl
= ftbl_cam_cc_ife_1_clk_src
,
707 .clkr
.hw
.init
= &(const struct clk_init_data
) {
708 .name
= "cam_cc_ife_1_clk_src",
709 .parent_data
= cam_cc_parent_data_3
,
710 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_3
),
711 .flags
= CLK_SET_RATE_PARENT
,
712 .ops
= &clk_rcg2_shared_ops
,
716 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src
= {
720 .parent_map
= cam_cc_parent_map_0
,
721 .freq_tbl
= ftbl_cam_cc_ife_0_csid_clk_src
,
722 .clkr
.hw
.init
= &(const struct clk_init_data
) {
723 .name
= "cam_cc_ife_1_csid_clk_src",
724 .parent_data
= cam_cc_parent_data_0
,
725 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
726 .flags
= CLK_SET_RATE_PARENT
,
727 .ops
= &clk_rcg2_shared_ops
,
731 static const struct freq_tbl ftbl_cam_cc_ife_lite_0_clk_src
[] = {
732 F(19200000, P_BI_TCXO
, 1, 0, 0),
733 F(320000000, P_CAM_CC_PLL2_OUT_MAIN
, 1.5, 0, 0),
734 F(400000000, P_CAM_CC_PLL0_OUT_ODD
, 1, 0, 0),
735 F(480000000, P_CAM_CC_PLL2_OUT_MAIN
, 1, 0, 0),
736 F(600000000, P_CAM_CC_PLL0_OUT_MAIN
, 2, 0, 0),
740 static struct clk_rcg2 cam_cc_ife_lite_0_clk_src
= {
744 .parent_map
= cam_cc_parent_map_0
,
745 .freq_tbl
= ftbl_cam_cc_ife_lite_0_clk_src
,
746 .clkr
.hw
.init
= &(const struct clk_init_data
) {
747 .name
= "cam_cc_ife_lite_0_clk_src",
748 .parent_data
= cam_cc_parent_data_0
,
749 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
750 .flags
= CLK_SET_RATE_PARENT
,
751 .ops
= &clk_rcg2_shared_ops
,
755 static struct clk_rcg2 cam_cc_ife_lite_0_csid_clk_src
= {
759 .parent_map
= cam_cc_parent_map_0
,
760 .freq_tbl
= ftbl_cam_cc_fd_core_clk_src
,
761 .clkr
.hw
.init
= &(const struct clk_init_data
) {
762 .name
= "cam_cc_ife_lite_0_csid_clk_src",
763 .parent_data
= cam_cc_parent_data_0
,
764 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
765 .flags
= CLK_SET_RATE_PARENT
,
766 .ops
= &clk_rcg2_shared_ops
,
770 static struct clk_rcg2 cam_cc_ife_lite_1_clk_src
= {
774 .parent_map
= cam_cc_parent_map_0
,
775 .freq_tbl
= ftbl_cam_cc_ife_lite_0_clk_src
,
776 .clkr
.hw
.init
= &(const struct clk_init_data
) {
777 .name
= "cam_cc_ife_lite_1_clk_src",
778 .parent_data
= cam_cc_parent_data_0
,
779 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
780 .flags
= CLK_SET_RATE_PARENT
,
781 .ops
= &clk_rcg2_shared_ops
,
785 static struct clk_rcg2 cam_cc_ife_lite_1_csid_clk_src
= {
789 .parent_map
= cam_cc_parent_map_0
,
790 .freq_tbl
= ftbl_cam_cc_fd_core_clk_src
,
791 .clkr
.hw
.init
= &(const struct clk_init_data
) {
792 .name
= "cam_cc_ife_lite_1_csid_clk_src",
793 .parent_data
= cam_cc_parent_data_0
,
794 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
795 .flags
= CLK_SET_RATE_PARENT
,
796 .ops
= &clk_rcg2_shared_ops
,
800 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src
[] = {
801 F(19200000, P_BI_TCXO
, 1, 0, 0),
802 F(300000000, P_CAM_CC_PLL1_OUT_EVEN
, 1, 0, 0),
803 F(475000000, P_CAM_CC_PLL1_OUT_EVEN
, 1, 0, 0),
804 F(520000000, P_CAM_CC_PLL1_OUT_EVEN
, 1, 0, 0),
805 F(600000000, P_CAM_CC_PLL1_OUT_EVEN
, 1, 0, 0),
809 static struct clk_rcg2 cam_cc_ipe_0_clk_src
= {
813 .parent_map
= cam_cc_parent_map_4
,
814 .freq_tbl
= ftbl_cam_cc_ipe_0_clk_src
,
815 .clkr
.hw
.init
= &(const struct clk_init_data
) {
816 .name
= "cam_cc_ipe_0_clk_src",
817 .parent_data
= cam_cc_parent_data_4
,
818 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_4
),
819 .flags
= CLK_SET_RATE_PARENT
,
820 .ops
= &clk_rcg2_shared_ops
,
824 static struct clk_rcg2 cam_cc_jpeg_clk_src
= {
828 .parent_map
= cam_cc_parent_map_0
,
829 .freq_tbl
= ftbl_cam_cc_bps_clk_src
,
830 .clkr
.hw
.init
= &(const struct clk_init_data
) {
831 .name
= "cam_cc_jpeg_clk_src",
832 .parent_data
= cam_cc_parent_data_0
,
833 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
834 .flags
= CLK_SET_RATE_PARENT
,
835 .ops
= &clk_rcg2_shared_ops
,
839 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src
[] = {
840 F(19200000, P_BI_TCXO
, 1, 0, 0),
841 F(100000000, P_CAM_CC_PLL0_OUT_EVEN
, 6, 0, 0),
842 F(240000000, P_CAM_CC_PLL2_OUT_MAIN
, 2, 0, 0),
843 F(300000000, P_CAM_CC_PLL0_OUT_EVEN
, 2, 0, 0),
844 F(320000000, P_CAM_CC_PLL2_OUT_MAIN
, 1.5, 0, 0),
845 F(400000000, P_CAM_CC_PLL0_OUT_MAIN
, 3, 0, 0),
849 static struct clk_rcg2 cam_cc_lrme_clk_src
= {
853 .parent_map
= cam_cc_parent_map_0
,
854 .freq_tbl
= ftbl_cam_cc_lrme_clk_src
,
855 .clkr
.hw
.init
= &(const struct clk_init_data
) {
856 .name
= "cam_cc_lrme_clk_src",
857 .parent_data
= cam_cc_parent_data_0
,
858 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
859 .flags
= CLK_SET_RATE_PARENT
,
860 .ops
= &clk_rcg2_shared_ops
,
864 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src
[] = {
865 F(12000000, P_CAM_CC_PLL2_OUT_EARLY
, 10, 1, 8),
866 F(19200000, P_BI_TCXO
, 1, 0, 0),
867 F(24000000, P_CAM_CC_PLL2_OUT_EARLY
, 10, 1, 4),
868 F(68571429, P_CAM_CC_PLL2_OUT_EARLY
, 14, 0, 0),
872 static struct clk_rcg2 cam_cc_mclk0_clk_src
= {
876 .parent_map
= cam_cc_parent_map_1
,
877 .freq_tbl
= ftbl_cam_cc_mclk0_clk_src
,
878 .clkr
.hw
.init
= &(const struct clk_init_data
) {
879 .name
= "cam_cc_mclk0_clk_src",
880 .parent_data
= cam_cc_parent_data_1
,
881 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_1
),
882 .flags
= CLK_SET_RATE_PARENT
,
883 .ops
= &clk_rcg2_shared_ops
,
887 static struct clk_rcg2 cam_cc_mclk1_clk_src
= {
891 .parent_map
= cam_cc_parent_map_1
,
892 .freq_tbl
= ftbl_cam_cc_mclk0_clk_src
,
893 .clkr
.hw
.init
= &(const struct clk_init_data
) {
894 .name
= "cam_cc_mclk1_clk_src",
895 .parent_data
= cam_cc_parent_data_1
,
896 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_1
),
897 .flags
= CLK_SET_RATE_PARENT
,
898 .ops
= &clk_rcg2_shared_ops
,
902 static struct clk_rcg2 cam_cc_mclk2_clk_src
= {
906 .parent_map
= cam_cc_parent_map_1
,
907 .freq_tbl
= ftbl_cam_cc_mclk0_clk_src
,
908 .clkr
.hw
.init
= &(const struct clk_init_data
) {
909 .name
= "cam_cc_mclk2_clk_src",
910 .parent_data
= cam_cc_parent_data_1
,
911 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_1
),
912 .flags
= CLK_SET_RATE_PARENT
,
913 .ops
= &clk_rcg2_shared_ops
,
917 static struct clk_rcg2 cam_cc_mclk3_clk_src
= {
921 .parent_map
= cam_cc_parent_map_1
,
922 .freq_tbl
= ftbl_cam_cc_mclk0_clk_src
,
923 .clkr
.hw
.init
= &(const struct clk_init_data
) {
924 .name
= "cam_cc_mclk3_clk_src",
925 .parent_data
= cam_cc_parent_data_1
,
926 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_1
),
927 .flags
= CLK_SET_RATE_PARENT
,
928 .ops
= &clk_rcg2_shared_ops
,
932 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src
[] = {
933 F(19200000, P_BI_TCXO
, 1, 0, 0),
934 F(80000000, P_CAM_CC_PLL0_OUT_EVEN
, 7.5, 0, 0),
938 static struct clk_rcg2 cam_cc_slow_ahb_clk_src
= {
942 .parent_map
= cam_cc_parent_map_0
,
943 .freq_tbl
= ftbl_cam_cc_slow_ahb_clk_src
,
944 .clkr
.hw
.init
= &(const struct clk_init_data
) {
945 .name
= "cam_cc_slow_ahb_clk_src",
946 .parent_data
= cam_cc_parent_data_0
,
947 .num_parents
= ARRAY_SIZE(cam_cc_parent_data_0
),
948 .flags
= CLK_SET_RATE_PARENT
,
949 .ops
= &clk_rcg2_shared_ops
,
953 static struct clk_branch cam_cc_bps_ahb_clk
= {
955 .halt_check
= BRANCH_HALT
,
957 .enable_reg
= 0x7070,
958 .enable_mask
= BIT(0),
959 .hw
.init
= &(const struct clk_init_data
) {
960 .name
= "cam_cc_bps_ahb_clk",
961 .parent_hws
= (const struct clk_hw
*[]) {
962 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
965 .flags
= CLK_SET_RATE_PARENT
,
966 .ops
= &clk_branch2_ops
,
971 static struct clk_branch cam_cc_bps_areg_clk
= {
973 .halt_check
= BRANCH_HALT
,
975 .enable_reg
= 0x7054,
976 .enable_mask
= BIT(0),
977 .hw
.init
= &(const struct clk_init_data
) {
978 .name
= "cam_cc_bps_areg_clk",
979 .parent_hws
= (const struct clk_hw
*[]) {
980 &cam_cc_fast_ahb_clk_src
.clkr
.hw
,
983 .flags
= CLK_SET_RATE_PARENT
,
984 .ops
= &clk_branch2_ops
,
989 static struct clk_branch cam_cc_bps_axi_clk
= {
991 .halt_check
= BRANCH_HALT
,
993 .enable_reg
= 0x7038,
994 .enable_mask
= BIT(0),
995 .hw
.init
= &(const struct clk_init_data
) {
996 .name
= "cam_cc_bps_axi_clk",
997 .parent_hws
= (const struct clk_hw
*[]) {
998 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1001 .flags
= CLK_SET_RATE_PARENT
,
1002 .ops
= &clk_branch2_ops
,
1007 static struct clk_branch cam_cc_bps_clk
= {
1009 .halt_check
= BRANCH_HALT
,
1011 .enable_reg
= 0x7028,
1012 .enable_mask
= BIT(0),
1013 .hw
.init
= &(const struct clk_init_data
) {
1014 .name
= "cam_cc_bps_clk",
1015 .parent_hws
= (const struct clk_hw
*[]) {
1016 &cam_cc_bps_clk_src
.clkr
.hw
,
1019 .flags
= CLK_SET_RATE_PARENT
,
1020 .ops
= &clk_branch2_ops
,
1025 static struct clk_branch cam_cc_camnoc_axi_clk
= {
1027 .halt_check
= BRANCH_HALT
,
1029 .enable_reg
= 0xc18c,
1030 .enable_mask
= BIT(0),
1031 .hw
.init
= &(const struct clk_init_data
) {
1032 .name
= "cam_cc_camnoc_axi_clk",
1033 .parent_hws
= (const struct clk_hw
*[]) {
1034 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1037 .flags
= CLK_SET_RATE_PARENT
,
1038 .ops
= &clk_branch2_ops
,
1043 static struct clk_branch cam_cc_camnoc_dcd_xo_clk
= {
1045 .halt_check
= BRANCH_HALT
,
1047 .enable_reg
= 0xc194,
1048 .enable_mask
= BIT(0),
1049 .hw
.init
= &(const struct clk_init_data
) {
1050 .name
= "cam_cc_camnoc_dcd_xo_clk",
1051 .ops
= &clk_branch2_ops
,
1056 static struct clk_branch cam_cc_cci_0_clk
= {
1058 .halt_check
= BRANCH_HALT
,
1060 .enable_reg
= 0xc120,
1061 .enable_mask
= BIT(0),
1062 .hw
.init
= &(const struct clk_init_data
) {
1063 .name
= "cam_cc_cci_0_clk",
1064 .parent_hws
= (const struct clk_hw
*[]) {
1065 &cam_cc_cci_0_clk_src
.clkr
.hw
,
1068 .flags
= CLK_SET_RATE_PARENT
,
1069 .ops
= &clk_branch2_ops
,
1074 static struct clk_branch cam_cc_cci_1_clk
= {
1076 .halt_check
= BRANCH_HALT
,
1078 .enable_reg
= 0xc13c,
1079 .enable_mask
= BIT(0),
1080 .hw
.init
= &(const struct clk_init_data
) {
1081 .name
= "cam_cc_cci_1_clk",
1082 .parent_hws
= (const struct clk_hw
*[]) {
1083 &cam_cc_cci_1_clk_src
.clkr
.hw
,
1086 .flags
= CLK_SET_RATE_PARENT
,
1087 .ops
= &clk_branch2_ops
,
1092 static struct clk_branch cam_cc_core_ahb_clk
= {
1094 .halt_check
= BRANCH_HALT_DELAY
,
1096 .enable_reg
= 0xc1c8,
1097 .enable_mask
= BIT(0),
1098 .hw
.init
= &(const struct clk_init_data
) {
1099 .name
= "cam_cc_core_ahb_clk",
1100 .parent_hws
= (const struct clk_hw
*[]) {
1101 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
1104 .flags
= CLK_SET_RATE_PARENT
,
1105 .ops
= &clk_branch2_ops
,
1110 static struct clk_branch cam_cc_cpas_ahb_clk
= {
1112 .halt_check
= BRANCH_HALT
,
1114 .enable_reg
= 0xc168,
1115 .enable_mask
= BIT(0),
1116 .hw
.init
= &(const struct clk_init_data
) {
1117 .name
= "cam_cc_cpas_ahb_clk",
1118 .parent_hws
= (const struct clk_hw
*[]) {
1119 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
1122 .flags
= CLK_SET_RATE_PARENT
,
1123 .ops
= &clk_branch2_ops
,
1128 static struct clk_branch cam_cc_csi0phytimer_clk
= {
1130 .halt_check
= BRANCH_HALT
,
1132 .enable_reg
= 0x601c,
1133 .enable_mask
= BIT(0),
1134 .hw
.init
= &(const struct clk_init_data
) {
1135 .name
= "cam_cc_csi0phytimer_clk",
1136 .parent_hws
= (const struct clk_hw
*[]) {
1137 &cam_cc_csi0phytimer_clk_src
.clkr
.hw
,
1140 .flags
= CLK_SET_RATE_PARENT
,
1141 .ops
= &clk_branch2_ops
,
1146 static struct clk_branch cam_cc_csi1phytimer_clk
= {
1148 .halt_check
= BRANCH_HALT
,
1150 .enable_reg
= 0x6040,
1151 .enable_mask
= BIT(0),
1152 .hw
.init
= &(const struct clk_init_data
) {
1153 .name
= "cam_cc_csi1phytimer_clk",
1154 .parent_hws
= (const struct clk_hw
*[]) {
1155 &cam_cc_csi1phytimer_clk_src
.clkr
.hw
,
1158 .flags
= CLK_SET_RATE_PARENT
,
1159 .ops
= &clk_branch2_ops
,
1164 static struct clk_branch cam_cc_csi2phytimer_clk
= {
1166 .halt_check
= BRANCH_HALT
,
1168 .enable_reg
= 0x6064,
1169 .enable_mask
= BIT(0),
1170 .hw
.init
= &(const struct clk_init_data
) {
1171 .name
= "cam_cc_csi2phytimer_clk",
1172 .parent_hws
= (const struct clk_hw
*[]) {
1173 &cam_cc_csi2phytimer_clk_src
.clkr
.hw
,
1176 .flags
= CLK_SET_RATE_PARENT
,
1177 .ops
= &clk_branch2_ops
,
1182 static struct clk_branch cam_cc_csi3phytimer_clk
= {
1184 .halt_check
= BRANCH_HALT
,
1186 .enable_reg
= 0x6088,
1187 .enable_mask
= BIT(0),
1188 .hw
.init
= &(const struct clk_init_data
) {
1189 .name
= "cam_cc_csi3phytimer_clk",
1190 .parent_hws
= (const struct clk_hw
*[]) {
1191 &cam_cc_csi3phytimer_clk_src
.clkr
.hw
,
1194 .flags
= CLK_SET_RATE_PARENT
,
1195 .ops
= &clk_branch2_ops
,
1200 static struct clk_branch cam_cc_csiphy0_clk
= {
1202 .halt_check
= BRANCH_HALT
,
1204 .enable_reg
= 0x6020,
1205 .enable_mask
= BIT(0),
1206 .hw
.init
= &(const struct clk_init_data
) {
1207 .name
= "cam_cc_csiphy0_clk",
1208 .parent_hws
= (const struct clk_hw
*[]) {
1209 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1212 .flags
= CLK_SET_RATE_PARENT
,
1213 .ops
= &clk_branch2_ops
,
1218 static struct clk_branch cam_cc_csiphy1_clk
= {
1220 .halt_check
= BRANCH_HALT
,
1222 .enable_reg
= 0x6044,
1223 .enable_mask
= BIT(0),
1224 .hw
.init
= &(const struct clk_init_data
) {
1225 .name
= "cam_cc_csiphy1_clk",
1226 .parent_hws
= (const struct clk_hw
*[]) {
1227 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1230 .flags
= CLK_SET_RATE_PARENT
,
1231 .ops
= &clk_branch2_ops
,
1236 static struct clk_branch cam_cc_csiphy2_clk
= {
1238 .halt_check
= BRANCH_HALT
,
1240 .enable_reg
= 0x6068,
1241 .enable_mask
= BIT(0),
1242 .hw
.init
= &(const struct clk_init_data
) {
1243 .name
= "cam_cc_csiphy2_clk",
1244 .parent_hws
= (const struct clk_hw
*[]) {
1245 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1248 .flags
= CLK_SET_RATE_PARENT
,
1249 .ops
= &clk_branch2_ops
,
1254 static struct clk_branch cam_cc_csiphy3_clk
= {
1256 .halt_check
= BRANCH_HALT
,
1258 .enable_reg
= 0x608c,
1259 .enable_mask
= BIT(0),
1260 .hw
.init
= &(const struct clk_init_data
) {
1261 .name
= "cam_cc_csiphy3_clk",
1262 .parent_hws
= (const struct clk_hw
*[]) {
1263 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1266 .flags
= CLK_SET_RATE_PARENT
,
1267 .ops
= &clk_branch2_ops
,
1272 static struct clk_branch cam_cc_fd_core_clk
= {
1274 .halt_check
= BRANCH_HALT
,
1276 .enable_reg
= 0xc0f8,
1277 .enable_mask
= BIT(0),
1278 .hw
.init
= &(const struct clk_init_data
) {
1279 .name
= "cam_cc_fd_core_clk",
1280 .parent_hws
= (const struct clk_hw
*[]) {
1281 &cam_cc_fd_core_clk_src
.clkr
.hw
,
1284 .flags
= CLK_SET_RATE_PARENT
,
1285 .ops
= &clk_branch2_ops
,
1290 static struct clk_branch cam_cc_fd_core_uar_clk
= {
1292 .halt_check
= BRANCH_HALT
,
1294 .enable_reg
= 0xc100,
1295 .enable_mask
= BIT(0),
1296 .hw
.init
= &(const struct clk_init_data
) {
1297 .name
= "cam_cc_fd_core_uar_clk",
1298 .parent_hws
= (const struct clk_hw
*[]) {
1299 &cam_cc_fd_core_clk_src
.clkr
.hw
,
1302 .flags
= CLK_SET_RATE_PARENT
,
1303 .ops
= &clk_branch2_ops
,
1308 static struct clk_branch cam_cc_icp_ahb_clk
= {
1310 .halt_check
= BRANCH_HALT
,
1312 .enable_reg
= 0xc0d8,
1313 .enable_mask
= BIT(0),
1314 .hw
.init
= &(const struct clk_init_data
) {
1315 .name
= "cam_cc_icp_ahb_clk",
1316 .parent_hws
= (const struct clk_hw
*[]) {
1317 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
1320 .flags
= CLK_SET_RATE_PARENT
,
1321 .ops
= &clk_branch2_ops
,
1326 static struct clk_branch cam_cc_icp_clk
= {
1328 .halt_check
= BRANCH_HALT
,
1330 .enable_reg
= 0xc0d0,
1331 .enable_mask
= BIT(0),
1332 .hw
.init
= &(const struct clk_init_data
) {
1333 .name
= "cam_cc_icp_clk",
1334 .parent_hws
= (const struct clk_hw
*[]) {
1335 &cam_cc_icp_clk_src
.clkr
.hw
,
1338 .flags
= CLK_SET_RATE_PARENT
,
1339 .ops
= &clk_branch2_ops
,
1344 static struct clk_branch cam_cc_ife_0_axi_clk
= {
1346 .halt_check
= BRANCH_HALT
,
1348 .enable_reg
= 0xa080,
1349 .enable_mask
= BIT(0),
1350 .hw
.init
= &(const struct clk_init_data
) {
1351 .name
= "cam_cc_ife_0_axi_clk",
1352 .parent_hws
= (const struct clk_hw
*[]) {
1353 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1356 .flags
= CLK_SET_RATE_PARENT
,
1357 .ops
= &clk_branch2_ops
,
1362 static struct clk_branch cam_cc_ife_0_clk
= {
1364 .halt_check
= BRANCH_HALT
,
1366 .enable_reg
= 0xa028,
1367 .enable_mask
= BIT(0),
1368 .hw
.init
= &(const struct clk_init_data
) {
1369 .name
= "cam_cc_ife_0_clk",
1370 .parent_hws
= (const struct clk_hw
*[]) {
1371 &cam_cc_ife_0_clk_src
.clkr
.hw
,
1374 .flags
= CLK_SET_RATE_PARENT
,
1375 .ops
= &clk_branch2_ops
,
1380 static struct clk_branch cam_cc_ife_0_cphy_rx_clk
= {
1382 .halt_check
= BRANCH_HALT
,
1384 .enable_reg
= 0xa07c,
1385 .enable_mask
= BIT(0),
1386 .hw
.init
= &(const struct clk_init_data
) {
1387 .name
= "cam_cc_ife_0_cphy_rx_clk",
1388 .parent_hws
= (const struct clk_hw
*[]) {
1389 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1392 .flags
= CLK_SET_RATE_PARENT
,
1393 .ops
= &clk_branch2_ops
,
1398 static struct clk_branch cam_cc_ife_0_csid_clk
= {
1400 .halt_check
= BRANCH_HALT
,
1402 .enable_reg
= 0xa054,
1403 .enable_mask
= BIT(0),
1404 .hw
.init
= &(const struct clk_init_data
) {
1405 .name
= "cam_cc_ife_0_csid_clk",
1406 .parent_hws
= (const struct clk_hw
*[]) {
1407 &cam_cc_ife_0_csid_clk_src
.clkr
.hw
,
1410 .flags
= CLK_SET_RATE_PARENT
,
1411 .ops
= &clk_branch2_ops
,
1416 static struct clk_branch cam_cc_ife_0_dsp_clk
= {
1418 .halt_check
= BRANCH_HALT
,
1420 .enable_reg
= 0xa038,
1421 .enable_mask
= BIT(0),
1422 .hw
.init
= &(const struct clk_init_data
) {
1423 .name
= "cam_cc_ife_0_dsp_clk",
1424 .parent_hws
= (const struct clk_hw
*[]) {
1425 &cam_cc_ife_0_clk_src
.clkr
.hw
,
1428 .flags
= CLK_SET_RATE_PARENT
,
1429 .ops
= &clk_branch2_ops
,
1434 static struct clk_branch cam_cc_ife_1_axi_clk
= {
1436 .halt_check
= BRANCH_HALT
,
1438 .enable_reg
= 0xb058,
1439 .enable_mask
= BIT(0),
1440 .hw
.init
= &(const struct clk_init_data
) {
1441 .name
= "cam_cc_ife_1_axi_clk",
1442 .parent_hws
= (const struct clk_hw
*[]) {
1443 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1446 .flags
= CLK_SET_RATE_PARENT
,
1447 .ops
= &clk_branch2_ops
,
1452 static struct clk_branch cam_cc_ife_1_clk
= {
1454 .halt_check
= BRANCH_HALT
,
1456 .enable_reg
= 0xb028,
1457 .enable_mask
= BIT(0),
1458 .hw
.init
= &(const struct clk_init_data
) {
1459 .name
= "cam_cc_ife_1_clk",
1460 .parent_hws
= (const struct clk_hw
*[]) {
1461 &cam_cc_ife_1_clk_src
.clkr
.hw
,
1464 .flags
= CLK_SET_RATE_PARENT
,
1465 .ops
= &clk_branch2_ops
,
1470 static struct clk_branch cam_cc_ife_1_cphy_rx_clk
= {
1472 .halt_check
= BRANCH_HALT
,
1474 .enable_reg
= 0xb054,
1475 .enable_mask
= BIT(0),
1476 .hw
.init
= &(const struct clk_init_data
) {
1477 .name
= "cam_cc_ife_1_cphy_rx_clk",
1478 .parent_hws
= (const struct clk_hw
*[]) {
1479 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1482 .flags
= CLK_SET_RATE_PARENT
,
1483 .ops
= &clk_branch2_ops
,
1488 static struct clk_branch cam_cc_ife_1_csid_clk
= {
1490 .halt_check
= BRANCH_HALT
,
1492 .enable_reg
= 0xb04c,
1493 .enable_mask
= BIT(0),
1494 .hw
.init
= &(const struct clk_init_data
) {
1495 .name
= "cam_cc_ife_1_csid_clk",
1496 .parent_hws
= (const struct clk_hw
*[]) {
1497 &cam_cc_ife_1_csid_clk_src
.clkr
.hw
,
1500 .flags
= CLK_SET_RATE_PARENT
,
1501 .ops
= &clk_branch2_ops
,
1506 static struct clk_branch cam_cc_ife_1_dsp_clk
= {
1508 .halt_check
= BRANCH_HALT
,
1510 .enable_reg
= 0xb030,
1511 .enable_mask
= BIT(0),
1512 .hw
.init
= &(const struct clk_init_data
) {
1513 .name
= "cam_cc_ife_1_dsp_clk",
1514 .parent_hws
= (const struct clk_hw
*[]) {
1515 &cam_cc_ife_1_clk_src
.clkr
.hw
,
1518 .flags
= CLK_SET_RATE_PARENT
,
1519 .ops
= &clk_branch2_ops
,
1524 static struct clk_branch cam_cc_ife_lite_0_clk
= {
1526 .halt_check
= BRANCH_HALT
,
1528 .enable_reg
= 0xc01c,
1529 .enable_mask
= BIT(0),
1530 .hw
.init
= &(const struct clk_init_data
) {
1531 .name
= "cam_cc_ife_lite_0_clk",
1532 .parent_hws
= (const struct clk_hw
*[]) {
1533 &cam_cc_ife_lite_0_clk_src
.clkr
.hw
,
1536 .flags
= CLK_SET_RATE_PARENT
,
1537 .ops
= &clk_branch2_ops
,
1542 static struct clk_branch cam_cc_ife_lite_0_cphy_rx_clk
= {
1544 .halt_check
= BRANCH_HALT
,
1546 .enable_reg
= 0xc040,
1547 .enable_mask
= BIT(0),
1548 .hw
.init
= &(const struct clk_init_data
) {
1549 .name
= "cam_cc_ife_lite_0_cphy_rx_clk",
1550 .parent_hws
= (const struct clk_hw
*[]) {
1551 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1554 .flags
= CLK_SET_RATE_PARENT
,
1555 .ops
= &clk_branch2_ops
,
1560 static struct clk_branch cam_cc_ife_lite_0_csid_clk
= {
1562 .halt_check
= BRANCH_HALT
,
1564 .enable_reg
= 0xc038,
1565 .enable_mask
= BIT(0),
1566 .hw
.init
= &(const struct clk_init_data
) {
1567 .name
= "cam_cc_ife_lite_0_csid_clk",
1568 .parent_hws
= (const struct clk_hw
*[]) {
1569 &cam_cc_ife_lite_0_csid_clk_src
.clkr
.hw
,
1572 .flags
= CLK_SET_RATE_PARENT
,
1573 .ops
= &clk_branch2_ops
,
1578 static struct clk_branch cam_cc_ife_lite_1_clk
= {
1580 .halt_check
= BRANCH_HALT
,
1582 .enable_reg
= 0xc060,
1583 .enable_mask
= BIT(0),
1584 .hw
.init
= &(const struct clk_init_data
) {
1585 .name
= "cam_cc_ife_lite_1_clk",
1586 .parent_hws
= (const struct clk_hw
*[]) {
1587 &cam_cc_ife_lite_1_clk_src
.clkr
.hw
,
1590 .flags
= CLK_SET_RATE_PARENT
,
1591 .ops
= &clk_branch2_ops
,
1596 static struct clk_branch cam_cc_ife_lite_1_cphy_rx_clk
= {
1598 .halt_check
= BRANCH_HALT
,
1600 .enable_reg
= 0xc084,
1601 .enable_mask
= BIT(0),
1602 .hw
.init
= &(const struct clk_init_data
) {
1603 .name
= "cam_cc_ife_lite_1_cphy_rx_clk",
1604 .parent_hws
= (const struct clk_hw
*[]) {
1605 &cam_cc_cphy_rx_clk_src
.clkr
.hw
,
1608 .flags
= CLK_SET_RATE_PARENT
,
1609 .ops
= &clk_branch2_ops
,
1614 static struct clk_branch cam_cc_ife_lite_1_csid_clk
= {
1616 .halt_check
= BRANCH_HALT
,
1618 .enable_reg
= 0xc07c,
1619 .enable_mask
= BIT(0),
1620 .hw
.init
= &(const struct clk_init_data
) {
1621 .name
= "cam_cc_ife_lite_1_csid_clk",
1622 .parent_hws
= (const struct clk_hw
*[]) {
1623 &cam_cc_ife_lite_1_csid_clk_src
.clkr
.hw
,
1626 .flags
= CLK_SET_RATE_PARENT
,
1627 .ops
= &clk_branch2_ops
,
1632 static struct clk_branch cam_cc_ipe_0_ahb_clk
= {
1634 .halt_check
= BRANCH_HALT
,
1636 .enable_reg
= 0x8040,
1637 .enable_mask
= BIT(0),
1638 .hw
.init
= &(const struct clk_init_data
) {
1639 .name
= "cam_cc_ipe_0_ahb_clk",
1640 .parent_hws
= (const struct clk_hw
*[]) {
1641 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
1644 .flags
= CLK_SET_RATE_PARENT
,
1645 .ops
= &clk_branch2_ops
,
1650 static struct clk_branch cam_cc_ipe_0_areg_clk
= {
1652 .halt_check
= BRANCH_HALT
,
1654 .enable_reg
= 0x803c,
1655 .enable_mask
= BIT(0),
1656 .hw
.init
= &(const struct clk_init_data
) {
1657 .name
= "cam_cc_ipe_0_areg_clk",
1658 .parent_hws
= (const struct clk_hw
*[]) {
1659 &cam_cc_fast_ahb_clk_src
.clkr
.hw
,
1662 .flags
= CLK_SET_RATE_PARENT
,
1663 .ops
= &clk_branch2_ops
,
1668 static struct clk_branch cam_cc_ipe_0_axi_clk
= {
1670 .halt_check
= BRANCH_HALT
,
1672 .enable_reg
= 0x8038,
1673 .enable_mask
= BIT(0),
1674 .hw
.init
= &(const struct clk_init_data
) {
1675 .name
= "cam_cc_ipe_0_axi_clk",
1676 .parent_hws
= (const struct clk_hw
*[]) {
1677 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1680 .flags
= CLK_SET_RATE_PARENT
,
1681 .ops
= &clk_branch2_ops
,
1686 static struct clk_branch cam_cc_ipe_0_clk
= {
1688 .halt_check
= BRANCH_HALT
,
1690 .enable_reg
= 0x8028,
1691 .enable_mask
= BIT(0),
1692 .hw
.init
= &(const struct clk_init_data
) {
1693 .name
= "cam_cc_ipe_0_clk",
1694 .parent_hws
= (const struct clk_hw
*[]) {
1695 &cam_cc_ipe_0_clk_src
.clkr
.hw
,
1698 .flags
= CLK_SET_RATE_PARENT
,
1699 .ops
= &clk_branch2_ops
,
1704 static struct clk_branch cam_cc_ipe_1_ahb_clk
= {
1706 .halt_check
= BRANCH_HALT
,
1708 .enable_reg
= 0x9028,
1709 .enable_mask
= BIT(0),
1710 .hw
.init
= &(const struct clk_init_data
) {
1711 .name
= "cam_cc_ipe_1_ahb_clk",
1712 .parent_hws
= (const struct clk_hw
*[]) {
1713 &cam_cc_slow_ahb_clk_src
.clkr
.hw
,
1716 .flags
= CLK_SET_RATE_PARENT
,
1717 .ops
= &clk_branch2_ops
,
1722 static struct clk_branch cam_cc_ipe_1_areg_clk
= {
1724 .halt_check
= BRANCH_HALT
,
1726 .enable_reg
= 0x9024,
1727 .enable_mask
= BIT(0),
1728 .hw
.init
= &(const struct clk_init_data
) {
1729 .name
= "cam_cc_ipe_1_areg_clk",
1730 .parent_hws
= (const struct clk_hw
*[]) {
1731 &cam_cc_fast_ahb_clk_src
.clkr
.hw
,
1734 .flags
= CLK_SET_RATE_PARENT
,
1735 .ops
= &clk_branch2_ops
,
1740 static struct clk_branch cam_cc_ipe_1_axi_clk
= {
1742 .halt_check
= BRANCH_HALT
,
1744 .enable_reg
= 0x9020,
1745 .enable_mask
= BIT(0),
1746 .hw
.init
= &(const struct clk_init_data
) {
1747 .name
= "cam_cc_ipe_1_axi_clk",
1748 .parent_hws
= (const struct clk_hw
*[]) {
1749 &cam_cc_camnoc_axi_clk_src
.clkr
.hw
,
1752 .flags
= CLK_SET_RATE_PARENT
,
1753 .ops
= &clk_branch2_ops
,
1758 static struct clk_branch cam_cc_ipe_1_clk
= {
1760 .halt_check
= BRANCH_HALT
,
1762 .enable_reg
= 0x9010,
1763 .enable_mask
= BIT(0),
1764 .hw
.init
= &(const struct clk_init_data
) {
1765 .name
= "cam_cc_ipe_1_clk",
1766 .parent_hws
= (const struct clk_hw
*[]) {
1767 &cam_cc_ipe_0_clk_src
.clkr
.hw
,
1770 .flags
= CLK_SET_RATE_PARENT
,
1771 .ops
= &clk_branch2_ops
,
1776 static struct clk_branch cam_cc_jpeg_clk
= {
1778 .halt_check
= BRANCH_HALT
,
1780 .enable_reg
= 0xc0a4,
1781 .enable_mask
= BIT(0),
1782 .hw
.init
= &(const struct clk_init_data
) {
1783 .name
= "cam_cc_jpeg_clk",
1784 .parent_hws
= (const struct clk_hw
*[]) {
1785 &cam_cc_jpeg_clk_src
.clkr
.hw
,
1788 .flags
= CLK_SET_RATE_PARENT
,
1789 .ops
= &clk_branch2_ops
,
1794 static struct clk_branch cam_cc_lrme_clk
= {
1796 .halt_check
= BRANCH_HALT
,
1798 .enable_reg
= 0xc15c,
1799 .enable_mask
= BIT(0),
1800 .hw
.init
= &(const struct clk_init_data
) {
1801 .name
= "cam_cc_lrme_clk",
1802 .parent_hws
= (const struct clk_hw
*[]) {
1803 &cam_cc_lrme_clk_src
.clkr
.hw
,
1806 .flags
= CLK_SET_RATE_PARENT
,
1807 .ops
= &clk_branch2_ops
,
1812 static struct clk_branch cam_cc_mclk0_clk
= {
1814 .halt_check
= BRANCH_HALT
,
1816 .enable_reg
= 0x501c,
1817 .enable_mask
= BIT(0),
1818 .hw
.init
= &(const struct clk_init_data
) {
1819 .name
= "cam_cc_mclk0_clk",
1820 .parent_hws
= (const struct clk_hw
*[]) {
1821 &cam_cc_mclk0_clk_src
.clkr
.hw
,
1824 .flags
= CLK_SET_RATE_PARENT
,
1825 .ops
= &clk_branch2_ops
,
1830 static struct clk_branch cam_cc_mclk1_clk
= {
1832 .halt_check
= BRANCH_HALT
,
1834 .enable_reg
= 0x503c,
1835 .enable_mask
= BIT(0),
1836 .hw
.init
= &(const struct clk_init_data
) {
1837 .name
= "cam_cc_mclk1_clk",
1838 .parent_hws
= (const struct clk_hw
*[]) {
1839 &cam_cc_mclk1_clk_src
.clkr
.hw
,
1842 .flags
= CLK_SET_RATE_PARENT
,
1843 .ops
= &clk_branch2_ops
,
1848 static struct clk_branch cam_cc_mclk2_clk
= {
1850 .halt_check
= BRANCH_HALT
,
1852 .enable_reg
= 0x505c,
1853 .enable_mask
= BIT(0),
1854 .hw
.init
= &(const struct clk_init_data
) {
1855 .name
= "cam_cc_mclk2_clk",
1856 .parent_hws
= (const struct clk_hw
*[]) {
1857 &cam_cc_mclk2_clk_src
.clkr
.hw
,
1860 .flags
= CLK_SET_RATE_PARENT
,
1861 .ops
= &clk_branch2_ops
,
1866 static struct clk_branch cam_cc_mclk3_clk
= {
1868 .halt_check
= BRANCH_HALT
,
1870 .enable_reg
= 0x507c,
1871 .enable_mask
= BIT(0),
1872 .hw
.init
= &(const struct clk_init_data
) {
1873 .name
= "cam_cc_mclk3_clk",
1874 .parent_hws
= (const struct clk_hw
*[]) {
1875 &cam_cc_mclk3_clk_src
.clkr
.hw
,
1878 .flags
= CLK_SET_RATE_PARENT
,
1879 .ops
= &clk_branch2_ops
,
1884 static struct gdsc titan_top_gdsc
= {
1886 .en_rest_wait_val
= 0x2,
1887 .en_few_wait_val
= 0x2,
1888 .clk_dis_wait_val
= 0xf,
1890 .name
= "titan_top_gdsc",
1892 .pwrsts
= PWRSTS_OFF_ON
,
1893 .flags
= POLL_CFG_GDSCR
,
1896 static struct gdsc bps_gdsc
= {
1898 .en_rest_wait_val
= 0x2,
1899 .en_few_wait_val
= 0x2,
1900 .clk_dis_wait_val
= 0xf,
1904 .pwrsts
= PWRSTS_OFF_ON
,
1905 .parent
= &titan_top_gdsc
.pd
,
1906 .flags
= POLL_CFG_GDSCR
,
1909 static struct gdsc ife_0_gdsc
= {
1911 .en_rest_wait_val
= 0x2,
1912 .en_few_wait_val
= 0x2,
1913 .clk_dis_wait_val
= 0xf,
1915 .name
= "ife_0_gdsc",
1917 .pwrsts
= PWRSTS_OFF_ON
,
1918 .parent
= &titan_top_gdsc
.pd
,
1919 .flags
= POLL_CFG_GDSCR
,
1922 static struct gdsc ife_1_gdsc
= {
1924 .en_rest_wait_val
= 0x2,
1925 .en_few_wait_val
= 0x2,
1926 .clk_dis_wait_val
= 0xf,
1928 .name
= "ife_1_gdsc",
1930 .pwrsts
= PWRSTS_OFF_ON
,
1931 .parent
= &titan_top_gdsc
.pd
,
1932 .flags
= POLL_CFG_GDSCR
,
1935 static struct gdsc ipe_0_gdsc
= {
1937 .en_rest_wait_val
= 0x2,
1938 .en_few_wait_val
= 0x2,
1939 .clk_dis_wait_val
= 0xf,
1941 .name
= "ipe_0_gdsc",
1943 .pwrsts
= PWRSTS_OFF_ON
,
1944 .parent
= &titan_top_gdsc
.pd
,
1945 .flags
= POLL_CFG_GDSCR
,
1948 static struct gdsc ipe_1_gdsc
= {
1950 .en_rest_wait_val
= 0x2,
1951 .en_few_wait_val
= 0x2,
1952 .clk_dis_wait_val
= 0xf,
1954 .name
= "ipe_1_gdsc",
1956 .pwrsts
= PWRSTS_OFF_ON
,
1957 .parent
= &titan_top_gdsc
.pd
,
1958 .flags
= POLL_CFG_GDSCR
,
1961 static struct clk_regmap
*cam_cc_sm8150_clocks
[] = {
1962 [CAM_CC_PLL0
] = &cam_cc_pll0
.clkr
,
1963 [CAM_CC_PLL0_OUT_EVEN
] = &cam_cc_pll0_out_even
.clkr
,
1964 [CAM_CC_PLL0_OUT_ODD
] = &cam_cc_pll0_out_odd
.clkr
,
1965 [CAM_CC_PLL1
] = &cam_cc_pll1
.clkr
,
1966 [CAM_CC_PLL1_OUT_EVEN
] = &cam_cc_pll1_out_even
.clkr
,
1967 [CAM_CC_PLL2
] = &cam_cc_pll2
.clkr
,
1968 [CAM_CC_PLL2_OUT_MAIN
] = &cam_cc_pll2_out_main
.clkr
,
1969 [CAM_CC_PLL3
] = &cam_cc_pll3
.clkr
,
1970 [CAM_CC_PLL3_OUT_EVEN
] = &cam_cc_pll3_out_even
.clkr
,
1971 [CAM_CC_PLL4
] = &cam_cc_pll4
.clkr
,
1972 [CAM_CC_PLL4_OUT_EVEN
] = &cam_cc_pll4_out_even
.clkr
,
1973 [CAM_CC_BPS_AHB_CLK
] = &cam_cc_bps_ahb_clk
.clkr
,
1974 [CAM_CC_BPS_AREG_CLK
] = &cam_cc_bps_areg_clk
.clkr
,
1975 [CAM_CC_BPS_AXI_CLK
] = &cam_cc_bps_axi_clk
.clkr
,
1976 [CAM_CC_BPS_CLK
] = &cam_cc_bps_clk
.clkr
,
1977 [CAM_CC_BPS_CLK_SRC
] = &cam_cc_bps_clk_src
.clkr
,
1978 [CAM_CC_CAMNOC_AXI_CLK
] = &cam_cc_camnoc_axi_clk
.clkr
,
1979 [CAM_CC_CAMNOC_AXI_CLK_SRC
] = &cam_cc_camnoc_axi_clk_src
.clkr
,
1980 [CAM_CC_CAMNOC_DCD_XO_CLK
] = &cam_cc_camnoc_dcd_xo_clk
.clkr
,
1981 [CAM_CC_CCI_0_CLK
] = &cam_cc_cci_0_clk
.clkr
,
1982 [CAM_CC_CCI_0_CLK_SRC
] = &cam_cc_cci_0_clk_src
.clkr
,
1983 [CAM_CC_CCI_1_CLK
] = &cam_cc_cci_1_clk
.clkr
,
1984 [CAM_CC_CCI_1_CLK_SRC
] = &cam_cc_cci_1_clk_src
.clkr
,
1985 [CAM_CC_CORE_AHB_CLK
] = &cam_cc_core_ahb_clk
.clkr
,
1986 [CAM_CC_CPAS_AHB_CLK
] = &cam_cc_cpas_ahb_clk
.clkr
,
1987 [CAM_CC_CPHY_RX_CLK_SRC
] = &cam_cc_cphy_rx_clk_src
.clkr
,
1988 [CAM_CC_CSI0PHYTIMER_CLK
] = &cam_cc_csi0phytimer_clk
.clkr
,
1989 [CAM_CC_CSI0PHYTIMER_CLK_SRC
] = &cam_cc_csi0phytimer_clk_src
.clkr
,
1990 [CAM_CC_CSI1PHYTIMER_CLK
] = &cam_cc_csi1phytimer_clk
.clkr
,
1991 [CAM_CC_CSI1PHYTIMER_CLK_SRC
] = &cam_cc_csi1phytimer_clk_src
.clkr
,
1992 [CAM_CC_CSI2PHYTIMER_CLK
] = &cam_cc_csi2phytimer_clk
.clkr
,
1993 [CAM_CC_CSI2PHYTIMER_CLK_SRC
] = &cam_cc_csi2phytimer_clk_src
.clkr
,
1994 [CAM_CC_CSI3PHYTIMER_CLK
] = &cam_cc_csi3phytimer_clk
.clkr
,
1995 [CAM_CC_CSI3PHYTIMER_CLK_SRC
] = &cam_cc_csi3phytimer_clk_src
.clkr
,
1996 [CAM_CC_CSIPHY0_CLK
] = &cam_cc_csiphy0_clk
.clkr
,
1997 [CAM_CC_CSIPHY1_CLK
] = &cam_cc_csiphy1_clk
.clkr
,
1998 [CAM_CC_CSIPHY2_CLK
] = &cam_cc_csiphy2_clk
.clkr
,
1999 [CAM_CC_CSIPHY3_CLK
] = &cam_cc_csiphy3_clk
.clkr
,
2000 [CAM_CC_FAST_AHB_CLK_SRC
] = &cam_cc_fast_ahb_clk_src
.clkr
,
2001 [CAM_CC_FD_CORE_CLK
] = &cam_cc_fd_core_clk
.clkr
,
2002 [CAM_CC_FD_CORE_CLK_SRC
] = &cam_cc_fd_core_clk_src
.clkr
,
2003 [CAM_CC_FD_CORE_UAR_CLK
] = &cam_cc_fd_core_uar_clk
.clkr
,
2004 [CAM_CC_ICP_AHB_CLK
] = &cam_cc_icp_ahb_clk
.clkr
,
2005 [CAM_CC_ICP_CLK
] = &cam_cc_icp_clk
.clkr
,
2006 [CAM_CC_ICP_CLK_SRC
] = &cam_cc_icp_clk_src
.clkr
,
2007 [CAM_CC_IFE_0_AXI_CLK
] = &cam_cc_ife_0_axi_clk
.clkr
,
2008 [CAM_CC_IFE_0_CLK
] = &cam_cc_ife_0_clk
.clkr
,
2009 [CAM_CC_IFE_0_CLK_SRC
] = &cam_cc_ife_0_clk_src
.clkr
,
2010 [CAM_CC_IFE_0_CPHY_RX_CLK
] = &cam_cc_ife_0_cphy_rx_clk
.clkr
,
2011 [CAM_CC_IFE_0_CSID_CLK
] = &cam_cc_ife_0_csid_clk
.clkr
,
2012 [CAM_CC_IFE_0_CSID_CLK_SRC
] = &cam_cc_ife_0_csid_clk_src
.clkr
,
2013 [CAM_CC_IFE_0_DSP_CLK
] = &cam_cc_ife_0_dsp_clk
.clkr
,
2014 [CAM_CC_IFE_1_AXI_CLK
] = &cam_cc_ife_1_axi_clk
.clkr
,
2015 [CAM_CC_IFE_1_CLK
] = &cam_cc_ife_1_clk
.clkr
,
2016 [CAM_CC_IFE_1_CLK_SRC
] = &cam_cc_ife_1_clk_src
.clkr
,
2017 [CAM_CC_IFE_1_CPHY_RX_CLK
] = &cam_cc_ife_1_cphy_rx_clk
.clkr
,
2018 [CAM_CC_IFE_1_CSID_CLK
] = &cam_cc_ife_1_csid_clk
.clkr
,
2019 [CAM_CC_IFE_1_CSID_CLK_SRC
] = &cam_cc_ife_1_csid_clk_src
.clkr
,
2020 [CAM_CC_IFE_1_DSP_CLK
] = &cam_cc_ife_1_dsp_clk
.clkr
,
2021 [CAM_CC_IFE_LITE_0_CLK
] = &cam_cc_ife_lite_0_clk
.clkr
,
2022 [CAM_CC_IFE_LITE_0_CLK_SRC
] = &cam_cc_ife_lite_0_clk_src
.clkr
,
2023 [CAM_CC_IFE_LITE_0_CPHY_RX_CLK
] = &cam_cc_ife_lite_0_cphy_rx_clk
.clkr
,
2024 [CAM_CC_IFE_LITE_0_CSID_CLK
] = &cam_cc_ife_lite_0_csid_clk
.clkr
,
2025 [CAM_CC_IFE_LITE_0_CSID_CLK_SRC
] = &cam_cc_ife_lite_0_csid_clk_src
.clkr
,
2026 [CAM_CC_IFE_LITE_1_CLK
] = &cam_cc_ife_lite_1_clk
.clkr
,
2027 [CAM_CC_IFE_LITE_1_CLK_SRC
] = &cam_cc_ife_lite_1_clk_src
.clkr
,
2028 [CAM_CC_IFE_LITE_1_CPHY_RX_CLK
] = &cam_cc_ife_lite_1_cphy_rx_clk
.clkr
,
2029 [CAM_CC_IFE_LITE_1_CSID_CLK
] = &cam_cc_ife_lite_1_csid_clk
.clkr
,
2030 [CAM_CC_IFE_LITE_1_CSID_CLK_SRC
] = &cam_cc_ife_lite_1_csid_clk_src
.clkr
,
2031 [CAM_CC_IPE_0_AHB_CLK
] = &cam_cc_ipe_0_ahb_clk
.clkr
,
2032 [CAM_CC_IPE_0_AREG_CLK
] = &cam_cc_ipe_0_areg_clk
.clkr
,
2033 [CAM_CC_IPE_0_AXI_CLK
] = &cam_cc_ipe_0_axi_clk
.clkr
,
2034 [CAM_CC_IPE_0_CLK
] = &cam_cc_ipe_0_clk
.clkr
,
2035 [CAM_CC_IPE_0_CLK_SRC
] = &cam_cc_ipe_0_clk_src
.clkr
,
2036 [CAM_CC_IPE_1_AHB_CLK
] = &cam_cc_ipe_1_ahb_clk
.clkr
,
2037 [CAM_CC_IPE_1_AREG_CLK
] = &cam_cc_ipe_1_areg_clk
.clkr
,
2038 [CAM_CC_IPE_1_AXI_CLK
] = &cam_cc_ipe_1_axi_clk
.clkr
,
2039 [CAM_CC_IPE_1_CLK
] = &cam_cc_ipe_1_clk
.clkr
,
2040 [CAM_CC_JPEG_CLK
] = &cam_cc_jpeg_clk
.clkr
,
2041 [CAM_CC_JPEG_CLK_SRC
] = &cam_cc_jpeg_clk_src
.clkr
,
2042 [CAM_CC_LRME_CLK
] = &cam_cc_lrme_clk
.clkr
,
2043 [CAM_CC_LRME_CLK_SRC
] = &cam_cc_lrme_clk_src
.clkr
,
2044 [CAM_CC_MCLK0_CLK
] = &cam_cc_mclk0_clk
.clkr
,
2045 [CAM_CC_MCLK0_CLK_SRC
] = &cam_cc_mclk0_clk_src
.clkr
,
2046 [CAM_CC_MCLK1_CLK
] = &cam_cc_mclk1_clk
.clkr
,
2047 [CAM_CC_MCLK1_CLK_SRC
] = &cam_cc_mclk1_clk_src
.clkr
,
2048 [CAM_CC_MCLK2_CLK
] = &cam_cc_mclk2_clk
.clkr
,
2049 [CAM_CC_MCLK2_CLK_SRC
] = &cam_cc_mclk2_clk_src
.clkr
,
2050 [CAM_CC_MCLK3_CLK
] = &cam_cc_mclk3_clk
.clkr
,
2051 [CAM_CC_MCLK3_CLK_SRC
] = &cam_cc_mclk3_clk_src
.clkr
,
2052 [CAM_CC_SLOW_AHB_CLK_SRC
] = &cam_cc_slow_ahb_clk_src
.clkr
,
2055 static struct gdsc
*cam_cc_sm8150_gdscs
[] = {
2056 [TITAN_TOP_GDSC
] = &titan_top_gdsc
,
2057 [BPS_GDSC
] = &bps_gdsc
,
2058 [IFE_0_GDSC
] = &ife_0_gdsc
,
2059 [IFE_1_GDSC
] = &ife_1_gdsc
,
2060 [IPE_0_GDSC
] = &ipe_0_gdsc
,
2061 [IPE_1_GDSC
] = &ipe_1_gdsc
,
2064 static const struct qcom_reset_map cam_cc_sm8150_resets
[] = {
2065 [CAM_CC_BPS_BCR
] = { 0x7000 },
2066 [CAM_CC_CAMNOC_BCR
] = { 0xc16c },
2067 [CAM_CC_CCI_BCR
] = { 0xc104 },
2068 [CAM_CC_CPAS_BCR
] = { 0xc164 },
2069 [CAM_CC_CSI0PHY_BCR
] = { 0x6000 },
2070 [CAM_CC_CSI1PHY_BCR
] = { 0x6024 },
2071 [CAM_CC_CSI2PHY_BCR
] = { 0x6048 },
2072 [CAM_CC_CSI3PHY_BCR
] = { 0x606c },
2073 [CAM_CC_FD_BCR
] = { 0xc0dc },
2074 [CAM_CC_ICP_BCR
] = { 0xc0b4 },
2075 [CAM_CC_IFE_0_BCR
] = { 0xa000 },
2076 [CAM_CC_IFE_1_BCR
] = { 0xb000 },
2077 [CAM_CC_IFE_LITE_0_BCR
] = { 0xc000 },
2078 [CAM_CC_IFE_LITE_1_BCR
] = { 0xc044 },
2079 [CAM_CC_IPE_0_BCR
] = { 0x8000 },
2080 [CAM_CC_IPE_1_BCR
] = { 0x9000 },
2081 [CAM_CC_JPEG_BCR
] = { 0xc088 },
2082 [CAM_CC_LRME_BCR
] = { 0xc140 },
2083 [CAM_CC_MCLK0_BCR
] = { 0x5000 },
2084 [CAM_CC_MCLK1_BCR
] = { 0x5020 },
2085 [CAM_CC_MCLK2_BCR
] = { 0x5040 },
2086 [CAM_CC_MCLK3_BCR
] = { 0x5060 },
2089 static const struct regmap_config cam_cc_sm8150_regmap_config
= {
2093 .max_register
= 0xe004,
2097 static struct qcom_cc_desc cam_cc_sm8150_desc
= {
2098 .config
= &cam_cc_sm8150_regmap_config
,
2099 .clks
= cam_cc_sm8150_clocks
,
2100 .num_clks
= ARRAY_SIZE(cam_cc_sm8150_clocks
),
2101 .resets
= cam_cc_sm8150_resets
,
2102 .num_resets
= ARRAY_SIZE(cam_cc_sm8150_resets
),
2103 .gdscs
= cam_cc_sm8150_gdscs
,
2104 .num_gdscs
= ARRAY_SIZE(cam_cc_sm8150_gdscs
),
2107 static const struct of_device_id cam_cc_sm8150_match_table
[] = {
2108 { .compatible
= "qcom,sm8150-camcc" },
2111 MODULE_DEVICE_TABLE(of
, cam_cc_sm8150_match_table
);
2113 static int cam_cc_sm8150_probe(struct platform_device
*pdev
)
2115 struct regmap
*regmap
;
2118 ret
= devm_pm_runtime_enable(&pdev
->dev
);
2122 ret
= pm_runtime_resume_and_get(&pdev
->dev
);
2126 regmap
= qcom_cc_map(pdev
, &cam_cc_sm8150_desc
);
2127 if (IS_ERR(regmap
)) {
2128 pm_runtime_put(&pdev
->dev
);
2129 return PTR_ERR(regmap
);
2132 clk_trion_pll_configure(&cam_cc_pll0
, regmap
, &cam_cc_pll0_config
);
2133 clk_trion_pll_configure(&cam_cc_pll1
, regmap
, &cam_cc_pll1_config
);
2134 clk_regera_pll_configure(&cam_cc_pll2
, regmap
, &cam_cc_pll2_config
);
2135 clk_trion_pll_configure(&cam_cc_pll3
, regmap
, &cam_cc_pll3_config
);
2136 clk_trion_pll_configure(&cam_cc_pll4
, regmap
, &cam_cc_pll4_config
);
2138 /* Keep the critical clock always-on */
2139 qcom_branch_set_clk_en(regmap
, 0xc1e4); /* cam_cc_gdsc_clk */
2141 ret
= qcom_cc_really_probe(&pdev
->dev
, &cam_cc_sm8150_desc
, regmap
);
2143 pm_runtime_put(&pdev
->dev
);
2148 static struct platform_driver cam_cc_sm8150_driver
= {
2149 .probe
= cam_cc_sm8150_probe
,
2151 .name
= "camcc-sm8150",
2152 .of_match_table
= cam_cc_sm8150_match_table
,
2156 module_platform_driver(cam_cc_sm8150_driver
);
2158 MODULE_DESCRIPTION("QTI CAM_CC SM8150 Driver");
2159 MODULE_LICENSE("GPL");