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