Merge tag 'libnvdimm-for-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdim...
[platform/kernel/linux-rpi.git] / drivers / clk / qcom / camcc-sdm845.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018, 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
11 #include <dt-bindings/clock/qcom,camcc-sdm845.h>
12
13 #include "common.h"
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "gdsc.h"
19
20 enum {
21         P_BI_TCXO,
22         P_CAM_CC_PLL0_OUT_EVEN,
23         P_CAM_CC_PLL1_OUT_EVEN,
24         P_CAM_CC_PLL2_OUT_EVEN,
25         P_CAM_CC_PLL3_OUT_EVEN,
26         P_CORE_BI_PLL_TEST_SE,
27 };
28
29 static const struct parent_map cam_cc_parent_map_0[] = {
30         { P_BI_TCXO, 0 },
31         { P_CAM_CC_PLL2_OUT_EVEN, 1 },
32         { P_CAM_CC_PLL1_OUT_EVEN, 2 },
33         { P_CAM_CC_PLL3_OUT_EVEN, 5 },
34         { P_CAM_CC_PLL0_OUT_EVEN, 6 },
35         { P_CORE_BI_PLL_TEST_SE, 7 },
36 };
37
38 static const char * const cam_cc_parent_names_0[] = {
39         "bi_tcxo",
40         "cam_cc_pll2_out_even",
41         "cam_cc_pll1_out_even",
42         "cam_cc_pll3_out_even",
43         "cam_cc_pll0_out_even",
44         "core_bi_pll_test_se",
45 };
46
47 static struct clk_alpha_pll cam_cc_pll0 = {
48         .offset = 0x0,
49         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
50         .clkr = {
51                 .hw.init = &(struct clk_init_data){
52                         .name = "cam_cc_pll0",
53                         .parent_names = (const char *[]){ "bi_tcxo" },
54                         .num_parents = 1,
55                         .ops = &clk_alpha_pll_fabia_ops,
56                 },
57         },
58 };
59
60 static const struct clk_div_table post_div_table_fabia_even[] = {
61         { 0x0, 1 },
62         { 0x1, 2 },
63         { }
64 };
65
66 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
67         .offset = 0x0,
68         .post_div_shift = 8,
69         .post_div_table = post_div_table_fabia_even,
70         .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
71         .width = 4,
72         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
73         .clkr.hw.init = &(struct clk_init_data){
74                 .name = "cam_cc_pll0_out_even",
75                 .parent_names = (const char *[]){ "cam_cc_pll0" },
76                 .num_parents = 1,
77                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
78         },
79 };
80
81 static struct clk_alpha_pll cam_cc_pll1 = {
82         .offset = 0x1000,
83         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
84         .clkr = {
85                 .hw.init = &(struct clk_init_data){
86                         .name = "cam_cc_pll1",
87                         .parent_names = (const char *[]){ "bi_tcxo" },
88                         .num_parents = 1,
89                         .ops = &clk_alpha_pll_fabia_ops,
90                 },
91         },
92 };
93
94 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
95         .offset = 0x1000,
96         .post_div_shift = 8,
97         .post_div_table = post_div_table_fabia_even,
98         .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
99         .width = 4,
100         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
101         .clkr.hw.init = &(struct clk_init_data){
102                 .name = "cam_cc_pll1_out_even",
103                 .parent_names = (const char *[]){ "cam_cc_pll1" },
104                 .num_parents = 1,
105                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
106         },
107 };
108
109 static struct clk_alpha_pll cam_cc_pll2 = {
110         .offset = 0x2000,
111         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
112         .clkr = {
113                 .hw.init = &(struct clk_init_data){
114                         .name = "cam_cc_pll2",
115                         .parent_names = (const char *[]){ "bi_tcxo" },
116                         .num_parents = 1,
117                         .ops = &clk_alpha_pll_fabia_ops,
118                 },
119         },
120 };
121
122 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
123         .offset = 0x2000,
124         .post_div_shift = 8,
125         .post_div_table = post_div_table_fabia_even,
126         .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
127         .width = 4,
128         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
129         .clkr.hw.init = &(struct clk_init_data){
130                 .name = "cam_cc_pll2_out_even",
131                 .parent_names = (const char *[]){ "cam_cc_pll2" },
132                 .num_parents = 1,
133                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
134         },
135 };
136
137 static struct clk_alpha_pll cam_cc_pll3 = {
138         .offset = 0x3000,
139         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
140         .clkr = {
141                 .hw.init = &(struct clk_init_data){
142                         .name = "cam_cc_pll3",
143                         .parent_names = (const char *[]){ "bi_tcxo" },
144                         .num_parents = 1,
145                         .ops = &clk_alpha_pll_fabia_ops,
146                 },
147         },
148 };
149
150 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
151         .offset = 0x3000,
152         .post_div_shift = 8,
153         .post_div_table = post_div_table_fabia_even,
154         .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
155         .width = 4,
156         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
157         .clkr.hw.init = &(struct clk_init_data){
158                 .name = "cam_cc_pll3_out_even",
159                 .parent_names = (const char *[]){ "cam_cc_pll3" },
160                 .num_parents = 1,
161                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
162         },
163 };
164
165 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
166         F(19200000, P_BI_TCXO, 1, 0, 0),
167         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
168         F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
169         F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
170         F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
171         F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
172         { }
173 };
174
175 /*
176  * As per HW design, some of the CAMCC RCGs needs to
177  * move to XO clock during their clock disable so using
178  * clk_rcg2_shared_ops for such RCGs. This is required
179  * to power down the camera memories gracefully.
180  * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
181  * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
182  * table and requires reconfiguration of the PLL frequency.
183  */
184 static struct clk_rcg2 cam_cc_bps_clk_src = {
185         .cmd_rcgr = 0x600c,
186         .mnd_width = 0,
187         .hid_width = 5,
188         .parent_map = cam_cc_parent_map_0,
189         .freq_tbl = ftbl_cam_cc_bps_clk_src,
190         .clkr.hw.init = &(struct clk_init_data){
191                 .name = "cam_cc_bps_clk_src",
192                 .parent_names = cam_cc_parent_names_0,
193                 .num_parents = 6,
194                 .flags = CLK_SET_RATE_PARENT,
195                 .ops = &clk_rcg2_shared_ops,
196         },
197 };
198
199 static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
200         F(19200000, P_BI_TCXO, 1, 0, 0),
201         F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
202         F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
203         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
204         { }
205 };
206
207 static struct clk_rcg2 cam_cc_cci_clk_src = {
208         .cmd_rcgr = 0xb0d8,
209         .mnd_width = 8,
210         .hid_width = 5,
211         .parent_map = cam_cc_parent_map_0,
212         .freq_tbl = ftbl_cam_cc_cci_clk_src,
213         .clkr.hw.init = &(struct clk_init_data){
214                 .name = "cam_cc_cci_clk_src",
215                 .parent_names = cam_cc_parent_names_0,
216                 .num_parents = 6,
217                 .ops = &clk_rcg2_ops,
218         },
219 };
220
221 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
222         F(19200000, P_BI_TCXO, 1, 0, 0),
223         F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
224         { }
225 };
226
227 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
228         .cmd_rcgr = 0x9060,
229         .mnd_width = 0,
230         .hid_width = 5,
231         .parent_map = cam_cc_parent_map_0,
232         .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
233         .clkr.hw.init = &(struct clk_init_data){
234                 .name = "cam_cc_cphy_rx_clk_src",
235                 .parent_names = cam_cc_parent_names_0,
236                 .num_parents = 6,
237                 .ops = &clk_rcg2_ops,
238         },
239 };
240
241 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
242         F(19200000, P_BI_TCXO, 1, 0, 0),
243         F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
244         F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
245         { }
246 };
247
248 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
249         .cmd_rcgr = 0x5004,
250         .mnd_width = 0,
251         .hid_width = 5,
252         .parent_map = cam_cc_parent_map_0,
253         .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
254         .clkr.hw.init = &(struct clk_init_data){
255                 .name = "cam_cc_csi0phytimer_clk_src",
256                 .parent_names = cam_cc_parent_names_0,
257                 .num_parents = 6,
258                 .flags = CLK_SET_RATE_PARENT,
259                 .ops = &clk_rcg2_ops,
260         },
261 };
262
263 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
264         .cmd_rcgr = 0x5028,
265         .mnd_width = 0,
266         .hid_width = 5,
267         .parent_map = cam_cc_parent_map_0,
268         .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
269         .clkr.hw.init = &(struct clk_init_data){
270                 .name = "cam_cc_csi1phytimer_clk_src",
271                 .parent_names = cam_cc_parent_names_0,
272                 .num_parents = 6,
273                 .flags = CLK_SET_RATE_PARENT,
274                 .ops = &clk_rcg2_ops,
275         },
276 };
277
278 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
279         .cmd_rcgr = 0x504c,
280         .mnd_width = 0,
281         .hid_width = 5,
282         .parent_map = cam_cc_parent_map_0,
283         .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
284         .clkr.hw.init = &(struct clk_init_data){
285                 .name = "cam_cc_csi2phytimer_clk_src",
286                 .parent_names = cam_cc_parent_names_0,
287                 .num_parents = 6,
288                 .flags = CLK_SET_RATE_PARENT,
289                 .ops = &clk_rcg2_ops,
290         },
291 };
292
293 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
294         .cmd_rcgr = 0x5070,
295         .mnd_width = 0,
296         .hid_width = 5,
297         .parent_map = cam_cc_parent_map_0,
298         .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
299         .clkr.hw.init = &(struct clk_init_data){
300                 .name = "cam_cc_csi3phytimer_clk_src",
301                 .parent_names = cam_cc_parent_names_0,
302                 .num_parents = 6,
303                 .flags = CLK_SET_RATE_PARENT,
304                 .ops = &clk_rcg2_ops,
305         },
306 };
307
308 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
309         F(19200000, P_BI_TCXO, 1, 0, 0),
310         F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
311         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
312         F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
313         F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
314         F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
315         { }
316 };
317
318 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
319         .cmd_rcgr = 0x6038,
320         .mnd_width = 0,
321         .hid_width = 5,
322         .parent_map = cam_cc_parent_map_0,
323         .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
324         .clkr.hw.init = &(struct clk_init_data){
325                 .name = "cam_cc_fast_ahb_clk_src",
326                 .parent_names = cam_cc_parent_names_0,
327                 .num_parents = 6,
328                 .ops = &clk_rcg2_ops,
329         },
330 };
331
332 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
333         F(19200000, P_BI_TCXO, 1, 0, 0),
334         F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
335         F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
336         F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
337         F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
338         { }
339 };
340
341 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
342         .cmd_rcgr = 0xb0b0,
343         .mnd_width = 0,
344         .hid_width = 5,
345         .parent_map = cam_cc_parent_map_0,
346         .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
347         .clkr.hw.init = &(struct clk_init_data){
348                 .name = "cam_cc_fd_core_clk_src",
349                 .parent_names = cam_cc_parent_names_0,
350                 .num_parents = 6,
351                 .ops = &clk_rcg2_shared_ops,
352         },
353 };
354
355 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
356         F(19200000, P_BI_TCXO, 1, 0, 0),
357         F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
358         F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
359         F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
360         F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
361         { }
362 };
363
364 static struct clk_rcg2 cam_cc_icp_clk_src = {
365         .cmd_rcgr = 0xb088,
366         .mnd_width = 0,
367         .hid_width = 5,
368         .parent_map = cam_cc_parent_map_0,
369         .freq_tbl = ftbl_cam_cc_icp_clk_src,
370         .clkr.hw.init = &(struct clk_init_data){
371                 .name = "cam_cc_icp_clk_src",
372                 .parent_names = cam_cc_parent_names_0,
373                 .num_parents = 6,
374                 .ops = &clk_rcg2_shared_ops,
375         },
376 };
377
378 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
379         F(19200000, P_BI_TCXO, 1, 0, 0),
380         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
381         F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
382         F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
383         F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
384         F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
385         { }
386 };
387
388 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
389         .cmd_rcgr = 0x900c,
390         .mnd_width = 0,
391         .hid_width = 5,
392         .parent_map = cam_cc_parent_map_0,
393         .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
394         .clkr.hw.init = &(struct clk_init_data){
395                 .name = "cam_cc_ife_0_clk_src",
396                 .parent_names = cam_cc_parent_names_0,
397                 .num_parents = 6,
398                 .flags = CLK_SET_RATE_PARENT,
399                 .ops = &clk_rcg2_shared_ops,
400         },
401 };
402
403 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
404         F(19200000, P_BI_TCXO, 1, 0, 0),
405         F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
406         F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
407         F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
408         { }
409 };
410
411 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
412         .cmd_rcgr = 0x9038,
413         .mnd_width = 0,
414         .hid_width = 5,
415         .parent_map = cam_cc_parent_map_0,
416         .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
417         .clkr.hw.init = &(struct clk_init_data){
418                 .name = "cam_cc_ife_0_csid_clk_src",
419                 .parent_names = cam_cc_parent_names_0,
420                 .num_parents = 6,
421                 .ops = &clk_rcg2_shared_ops,
422         },
423 };
424
425 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
426         .cmd_rcgr = 0xa00c,
427         .mnd_width = 0,
428         .hid_width = 5,
429         .parent_map = cam_cc_parent_map_0,
430         .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
431         .clkr.hw.init = &(struct clk_init_data){
432                 .name = "cam_cc_ife_1_clk_src",
433                 .parent_names = cam_cc_parent_names_0,
434                 .num_parents = 6,
435                 .flags = CLK_SET_RATE_PARENT,
436                 .ops = &clk_rcg2_shared_ops,
437         },
438 };
439
440 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
441         .cmd_rcgr = 0xa030,
442         .mnd_width = 0,
443         .hid_width = 5,
444         .parent_map = cam_cc_parent_map_0,
445         .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
446         .clkr.hw.init = &(struct clk_init_data){
447                 .name = "cam_cc_ife_1_csid_clk_src",
448                 .parent_names = cam_cc_parent_names_0,
449                 .num_parents = 6,
450                 .ops = &clk_rcg2_shared_ops,
451         },
452 };
453
454 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
455         .cmd_rcgr = 0xb004,
456         .mnd_width = 0,
457         .hid_width = 5,
458         .parent_map = cam_cc_parent_map_0,
459         .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
460         .clkr.hw.init = &(struct clk_init_data){
461                 .name = "cam_cc_ife_lite_clk_src",
462                 .parent_names = cam_cc_parent_names_0,
463                 .num_parents = 6,
464                 .flags = CLK_SET_RATE_PARENT,
465                 .ops = &clk_rcg2_shared_ops,
466         },
467 };
468
469 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
470         .cmd_rcgr = 0xb024,
471         .mnd_width = 0,
472         .hid_width = 5,
473         .parent_map = cam_cc_parent_map_0,
474         .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
475         .clkr.hw.init = &(struct clk_init_data){
476                 .name = "cam_cc_ife_lite_csid_clk_src",
477                 .parent_names = cam_cc_parent_names_0,
478                 .num_parents = 6,
479                 .ops = &clk_rcg2_shared_ops,
480         },
481 };
482
483 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
484         F(19200000, P_BI_TCXO, 1, 0, 0),
485         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
486         F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
487         F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
488         F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
489         F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
490         F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
491         { }
492 };
493
494 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
495         .cmd_rcgr = 0x700c,
496         .mnd_width = 0,
497         .hid_width = 5,
498         .parent_map = cam_cc_parent_map_0,
499         .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
500         .clkr.hw.init = &(struct clk_init_data){
501                 .name = "cam_cc_ipe_0_clk_src",
502                 .parent_names = cam_cc_parent_names_0,
503                 .num_parents = 6,
504                 .flags = CLK_SET_RATE_PARENT,
505                 .ops = &clk_rcg2_shared_ops,
506         },
507 };
508
509 static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
510         .cmd_rcgr = 0x800c,
511         .mnd_width = 0,
512         .hid_width = 5,
513         .parent_map = cam_cc_parent_map_0,
514         .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
515         .clkr.hw.init = &(struct clk_init_data){
516                 .name = "cam_cc_ipe_1_clk_src",
517                 .parent_names = cam_cc_parent_names_0,
518                 .num_parents = 6,
519                 .flags = CLK_SET_RATE_PARENT,
520                 .ops = &clk_rcg2_shared_ops,
521         },
522 };
523
524 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
525         .cmd_rcgr = 0xb04c,
526         .mnd_width = 0,
527         .hid_width = 5,
528         .parent_map = cam_cc_parent_map_0,
529         .freq_tbl = ftbl_cam_cc_bps_clk_src,
530         .clkr.hw.init = &(struct clk_init_data){
531                 .name = "cam_cc_jpeg_clk_src",
532                 .parent_names = cam_cc_parent_names_0,
533                 .num_parents = 6,
534                 .flags = CLK_SET_RATE_PARENT,
535                 .ops = &clk_rcg2_shared_ops,
536         },
537 };
538
539 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
540         F(19200000, P_BI_TCXO, 1, 0, 0),
541         F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
542         F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
543         F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
544         F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
545         F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
546         { }
547 };
548
549 static struct clk_rcg2 cam_cc_lrme_clk_src = {
550         .cmd_rcgr = 0xb0f8,
551         .mnd_width = 0,
552         .hid_width = 5,
553         .parent_map = cam_cc_parent_map_0,
554         .freq_tbl = ftbl_cam_cc_lrme_clk_src,
555         .clkr.hw.init = &(struct clk_init_data){
556                 .name = "cam_cc_lrme_clk_src",
557                 .parent_names = cam_cc_parent_names_0,
558                 .num_parents = 6,
559                 .flags = CLK_SET_RATE_PARENT,
560                 .ops = &clk_rcg2_shared_ops,
561         },
562 };
563
564 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
565         F(19200000, P_BI_TCXO, 1, 0, 0),
566         F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
567         F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
568         F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
569         { }
570 };
571
572 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
573         .cmd_rcgr = 0x4004,
574         .mnd_width = 8,
575         .hid_width = 5,
576         .parent_map = cam_cc_parent_map_0,
577         .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
578         .clkr.hw.init = &(struct clk_init_data){
579                 .name = "cam_cc_mclk0_clk_src",
580                 .parent_names = cam_cc_parent_names_0,
581                 .num_parents = 6,
582                 .flags = CLK_SET_RATE_PARENT,
583                 .ops = &clk_rcg2_ops,
584         },
585 };
586
587 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
588         .cmd_rcgr = 0x4024,
589         .mnd_width = 8,
590         .hid_width = 5,
591         .parent_map = cam_cc_parent_map_0,
592         .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
593         .clkr.hw.init = &(struct clk_init_data){
594                 .name = "cam_cc_mclk1_clk_src",
595                 .parent_names = cam_cc_parent_names_0,
596                 .num_parents = 6,
597                 .flags = CLK_SET_RATE_PARENT,
598                 .ops = &clk_rcg2_ops,
599         },
600 };
601
602 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
603         .cmd_rcgr = 0x4044,
604         .mnd_width = 8,
605         .hid_width = 5,
606         .parent_map = cam_cc_parent_map_0,
607         .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
608         .clkr.hw.init = &(struct clk_init_data){
609                 .name = "cam_cc_mclk2_clk_src",
610                 .parent_names = cam_cc_parent_names_0,
611                 .num_parents = 6,
612                 .flags = CLK_SET_RATE_PARENT,
613                 .ops = &clk_rcg2_ops,
614         },
615 };
616
617 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
618         .cmd_rcgr = 0x4064,
619         .mnd_width = 8,
620         .hid_width = 5,
621         .parent_map = cam_cc_parent_map_0,
622         .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
623         .clkr.hw.init = &(struct clk_init_data){
624                 .name = "cam_cc_mclk3_clk_src",
625                 .parent_names = cam_cc_parent_names_0,
626                 .num_parents = 6,
627                 .flags = CLK_SET_RATE_PARENT,
628                 .ops = &clk_rcg2_ops,
629         },
630 };
631
632 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
633         F(19200000, P_BI_TCXO, 1, 0, 0),
634         F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
635         F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
636         F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
637         F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
638         { }
639 };
640
641 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
642         .cmd_rcgr = 0x6054,
643         .mnd_width = 0,
644         .hid_width = 5,
645         .parent_map = cam_cc_parent_map_0,
646         .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
647         .clkr.hw.init = &(struct clk_init_data){
648                 .name = "cam_cc_slow_ahb_clk_src",
649                 .parent_names = cam_cc_parent_names_0,
650                 .num_parents = 6,
651                 .flags = CLK_SET_RATE_PARENT,
652                 .ops = &clk_rcg2_ops,
653         },
654 };
655
656 static struct clk_branch cam_cc_bps_ahb_clk = {
657         .halt_reg = 0x606c,
658         .halt_check = BRANCH_HALT,
659         .clkr = {
660                 .enable_reg = 0x606c,
661                 .enable_mask = BIT(0),
662                 .hw.init = &(struct clk_init_data){
663                         .name = "cam_cc_bps_ahb_clk",
664                         .parent_names = (const char *[]){
665                                 "cam_cc_slow_ahb_clk_src",
666                         },
667                         .num_parents = 1,
668                         .flags = CLK_SET_RATE_PARENT,
669                         .ops = &clk_branch2_ops,
670                 },
671         },
672 };
673
674 static struct clk_branch cam_cc_bps_areg_clk = {
675         .halt_reg = 0x6050,
676         .halt_check = BRANCH_HALT,
677         .clkr = {
678                 .enable_reg = 0x6050,
679                 .enable_mask = BIT(0),
680                 .hw.init = &(struct clk_init_data){
681                         .name = "cam_cc_bps_areg_clk",
682                         .parent_names = (const char *[]){
683                                 "cam_cc_fast_ahb_clk_src",
684                         },
685                         .num_parents = 1,
686                         .flags = CLK_SET_RATE_PARENT,
687                         .ops = &clk_branch2_ops,
688                 },
689         },
690 };
691
692 static struct clk_branch cam_cc_bps_axi_clk = {
693         .halt_reg = 0x6034,
694         .halt_check = BRANCH_HALT,
695         .clkr = {
696                 .enable_reg = 0x6034,
697                 .enable_mask = BIT(0),
698                 .hw.init = &(struct clk_init_data){
699                         .name = "cam_cc_bps_axi_clk",
700                         .ops = &clk_branch2_ops,
701                 },
702         },
703 };
704
705 static struct clk_branch cam_cc_bps_clk = {
706         .halt_reg = 0x6024,
707         .halt_check = BRANCH_HALT,
708         .clkr = {
709                 .enable_reg = 0x6024,
710                 .enable_mask = BIT(0),
711                 .hw.init = &(struct clk_init_data){
712                         .name = "cam_cc_bps_clk",
713                         .parent_names = (const char *[]){
714                                 "cam_cc_bps_clk_src",
715                         },
716                         .num_parents = 1,
717                         .flags = CLK_SET_RATE_PARENT,
718                         .ops = &clk_branch2_ops,
719                 },
720         },
721 };
722
723 static struct clk_branch cam_cc_camnoc_atb_clk = {
724         .halt_reg = 0xb12c,
725         .halt_check = BRANCH_HALT,
726         .clkr = {
727                 .enable_reg = 0xb12c,
728                 .enable_mask = BIT(0),
729                 .hw.init = &(struct clk_init_data){
730                         .name = "cam_cc_camnoc_atb_clk",
731                         .ops = &clk_branch2_ops,
732                 },
733         },
734 };
735
736 static struct clk_branch cam_cc_camnoc_axi_clk = {
737         .halt_reg = 0xb124,
738         .halt_check = BRANCH_HALT,
739         .clkr = {
740                 .enable_reg = 0xb124,
741                 .enable_mask = BIT(0),
742                 .hw.init = &(struct clk_init_data){
743                         .name = "cam_cc_camnoc_axi_clk",
744                         .ops = &clk_branch2_ops,
745                 },
746         },
747 };
748
749 static struct clk_branch cam_cc_cci_clk = {
750         .halt_reg = 0xb0f0,
751         .halt_check = BRANCH_HALT,
752         .clkr = {
753                 .enable_reg = 0xb0f0,
754                 .enable_mask = BIT(0),
755                 .hw.init = &(struct clk_init_data){
756                         .name = "cam_cc_cci_clk",
757                         .parent_names = (const char *[]){
758                                 "cam_cc_cci_clk_src",
759                         },
760                         .num_parents = 1,
761                         .flags = CLK_SET_RATE_PARENT,
762                         .ops = &clk_branch2_ops,
763                 },
764         },
765 };
766
767 static struct clk_branch cam_cc_cpas_ahb_clk = {
768         .halt_reg = 0xb11c,
769         .halt_check = BRANCH_HALT,
770         .clkr = {
771                 .enable_reg = 0xb11c,
772                 .enable_mask = BIT(0),
773                 .hw.init = &(struct clk_init_data){
774                         .name = "cam_cc_cpas_ahb_clk",
775                         .parent_names = (const char *[]){
776                                 "cam_cc_slow_ahb_clk_src",
777                         },
778                         .num_parents = 1,
779                         .flags = CLK_SET_RATE_PARENT,
780                         .ops = &clk_branch2_ops,
781                 },
782         },
783 };
784
785 static struct clk_branch cam_cc_csi0phytimer_clk = {
786         .halt_reg = 0x501c,
787         .halt_check = BRANCH_HALT,
788         .clkr = {
789                 .enable_reg = 0x501c,
790                 .enable_mask = BIT(0),
791                 .hw.init = &(struct clk_init_data){
792                         .name = "cam_cc_csi0phytimer_clk",
793                         .parent_names = (const char *[]){
794                                 "cam_cc_csi0phytimer_clk_src",
795                         },
796                         .num_parents = 1,
797                         .flags = CLK_SET_RATE_PARENT,
798                         .ops = &clk_branch2_ops,
799                 },
800         },
801 };
802
803 static struct clk_branch cam_cc_csi1phytimer_clk = {
804         .halt_reg = 0x5040,
805         .halt_check = BRANCH_HALT,
806         .clkr = {
807                 .enable_reg = 0x5040,
808                 .enable_mask = BIT(0),
809                 .hw.init = &(struct clk_init_data){
810                         .name = "cam_cc_csi1phytimer_clk",
811                         .parent_names = (const char *[]){
812                                 "cam_cc_csi1phytimer_clk_src",
813                         },
814                         .num_parents = 1,
815                         .flags = CLK_SET_RATE_PARENT,
816                         .ops = &clk_branch2_ops,
817                 },
818         },
819 };
820
821 static struct clk_branch cam_cc_csi2phytimer_clk = {
822         .halt_reg = 0x5064,
823         .halt_check = BRANCH_HALT,
824         .clkr = {
825                 .enable_reg = 0x5064,
826                 .enable_mask = BIT(0),
827                 .hw.init = &(struct clk_init_data){
828                         .name = "cam_cc_csi2phytimer_clk",
829                         .parent_names = (const char *[]){
830                                 "cam_cc_csi2phytimer_clk_src",
831                         },
832                         .num_parents = 1,
833                         .flags = CLK_SET_RATE_PARENT,
834                         .ops = &clk_branch2_ops,
835                 },
836         },
837 };
838
839 static struct clk_branch cam_cc_csi3phytimer_clk = {
840         .halt_reg = 0x5088,
841         .halt_check = BRANCH_HALT,
842         .clkr = {
843                 .enable_reg = 0x5088,
844                 .enable_mask = BIT(0),
845                 .hw.init = &(struct clk_init_data){
846                         .name = "cam_cc_csi3phytimer_clk",
847                         .parent_names = (const char *[]){
848                                 "cam_cc_csi3phytimer_clk_src",
849                         },
850                         .num_parents = 1,
851                         .flags = CLK_SET_RATE_PARENT,
852                         .ops = &clk_branch2_ops,
853                 },
854         },
855 };
856
857 static struct clk_branch cam_cc_csiphy0_clk = {
858         .halt_reg = 0x5020,
859         .halt_check = BRANCH_HALT,
860         .clkr = {
861                 .enable_reg = 0x5020,
862                 .enable_mask = BIT(0),
863                 .hw.init = &(struct clk_init_data){
864                         .name = "cam_cc_csiphy0_clk",
865                         .parent_names = (const char *[]){
866                                 "cam_cc_cphy_rx_clk_src",
867                         },
868                         .num_parents = 1,
869                         .flags = CLK_SET_RATE_PARENT,
870                         .ops = &clk_branch2_ops,
871                 },
872         },
873 };
874
875 static struct clk_branch cam_cc_csiphy1_clk = {
876         .halt_reg = 0x5044,
877         .halt_check = BRANCH_HALT,
878         .clkr = {
879                 .enable_reg = 0x5044,
880                 .enable_mask = BIT(0),
881                 .hw.init = &(struct clk_init_data){
882                         .name = "cam_cc_csiphy1_clk",
883                         .parent_names = (const char *[]){
884                                 "cam_cc_cphy_rx_clk_src",
885                         },
886                         .num_parents = 1,
887                         .flags = CLK_SET_RATE_PARENT,
888                         .ops = &clk_branch2_ops,
889                 },
890         },
891 };
892
893 static struct clk_branch cam_cc_csiphy2_clk = {
894         .halt_reg = 0x5068,
895         .halt_check = BRANCH_HALT,
896         .clkr = {
897                 .enable_reg = 0x5068,
898                 .enable_mask = BIT(0),
899                 .hw.init = &(struct clk_init_data){
900                         .name = "cam_cc_csiphy2_clk",
901                         .parent_names = (const char *[]){
902                                 "cam_cc_cphy_rx_clk_src",
903                         },
904                         .num_parents = 1,
905                         .flags = CLK_SET_RATE_PARENT,
906                         .ops = &clk_branch2_ops,
907                 },
908         },
909 };
910
911 static struct clk_branch cam_cc_csiphy3_clk = {
912         .halt_reg = 0x508c,
913         .halt_check = BRANCH_HALT,
914         .clkr = {
915                 .enable_reg = 0x508c,
916                 .enable_mask = BIT(0),
917                 .hw.init = &(struct clk_init_data){
918                         .name = "cam_cc_csiphy3_clk",
919                         .parent_names = (const char *[]){
920                                 "cam_cc_cphy_rx_clk_src",
921                         },
922                         .num_parents = 1,
923                         .flags = CLK_SET_RATE_PARENT,
924                         .ops = &clk_branch2_ops,
925                 },
926         },
927 };
928
929 static struct clk_branch cam_cc_fd_core_clk = {
930         .halt_reg = 0xb0c8,
931         .halt_check = BRANCH_HALT,
932         .clkr = {
933                 .enable_reg = 0xb0c8,
934                 .enable_mask = BIT(0),
935                 .hw.init = &(struct clk_init_data){
936                         .name = "cam_cc_fd_core_clk",
937                         .parent_names = (const char *[]){
938                                 "cam_cc_fd_core_clk_src",
939                         },
940                         .num_parents = 1,
941                         .flags = CLK_SET_RATE_PARENT,
942                         .ops = &clk_branch2_ops,
943                 },
944         },
945 };
946
947 static struct clk_branch cam_cc_fd_core_uar_clk = {
948         .halt_reg = 0xb0d0,
949         .halt_check = BRANCH_HALT,
950         .clkr = {
951                 .enable_reg = 0xb0d0,
952                 .enable_mask = BIT(0),
953                 .hw.init = &(struct clk_init_data){
954                         .name = "cam_cc_fd_core_uar_clk",
955                         .parent_names = (const char *[]){
956                                 "cam_cc_fd_core_clk_src",
957                         },
958                         .num_parents = 1,
959                         .ops = &clk_branch2_ops,
960                 },
961         },
962 };
963
964 static struct clk_branch cam_cc_icp_apb_clk = {
965         .halt_reg = 0xb084,
966         .halt_check = BRANCH_HALT,
967         .clkr = {
968                 .enable_reg = 0xb084,
969                 .enable_mask = BIT(0),
970                 .hw.init = &(struct clk_init_data){
971                         .name = "cam_cc_icp_apb_clk",
972                         .ops = &clk_branch2_ops,
973                 },
974         },
975 };
976
977 static struct clk_branch cam_cc_icp_atb_clk = {
978         .halt_reg = 0xb078,
979         .halt_check = BRANCH_HALT,
980         .clkr = {
981                 .enable_reg = 0xb078,
982                 .enable_mask = BIT(0),
983                 .hw.init = &(struct clk_init_data){
984                         .name = "cam_cc_icp_atb_clk",
985                         .ops = &clk_branch2_ops,
986                 },
987         },
988 };
989
990 static struct clk_branch cam_cc_icp_clk = {
991         .halt_reg = 0xb0a0,
992         .halt_check = BRANCH_HALT,
993         .clkr = {
994                 .enable_reg = 0xb0a0,
995                 .enable_mask = BIT(0),
996                 .hw.init = &(struct clk_init_data){
997                         .name = "cam_cc_icp_clk",
998                         .parent_names = (const char *[]){
999                                 "cam_cc_icp_clk_src",
1000                         },
1001                         .num_parents = 1,
1002                         .flags = CLK_SET_RATE_PARENT,
1003                         .ops = &clk_branch2_ops,
1004                 },
1005         },
1006 };
1007
1008 static struct clk_branch cam_cc_icp_cti_clk = {
1009         .halt_reg = 0xb07c,
1010         .halt_check = BRANCH_HALT,
1011         .clkr = {
1012                 .enable_reg = 0xb07c,
1013                 .enable_mask = BIT(0),
1014                 .hw.init = &(struct clk_init_data){
1015                         .name = "cam_cc_icp_cti_clk",
1016                         .ops = &clk_branch2_ops,
1017                 },
1018         },
1019 };
1020
1021 static struct clk_branch cam_cc_icp_ts_clk = {
1022         .halt_reg = 0xb080,
1023         .halt_check = BRANCH_HALT,
1024         .clkr = {
1025                 .enable_reg = 0xb080,
1026                 .enable_mask = BIT(0),
1027                 .hw.init = &(struct clk_init_data){
1028                         .name = "cam_cc_icp_ts_clk",
1029                         .ops = &clk_branch2_ops,
1030                 },
1031         },
1032 };
1033
1034 static struct clk_branch cam_cc_ife_0_axi_clk = {
1035         .halt_reg = 0x907c,
1036         .halt_check = BRANCH_HALT,
1037         .clkr = {
1038                 .enable_reg = 0x907c,
1039                 .enable_mask = BIT(0),
1040                 .hw.init = &(struct clk_init_data){
1041                         .name = "cam_cc_ife_0_axi_clk",
1042                         .ops = &clk_branch2_ops,
1043                 },
1044         },
1045 };
1046
1047 static struct clk_branch cam_cc_ife_0_clk = {
1048         .halt_reg = 0x9024,
1049         .halt_check = BRANCH_HALT,
1050         .clkr = {
1051                 .enable_reg = 0x9024,
1052                 .enable_mask = BIT(0),
1053                 .hw.init = &(struct clk_init_data){
1054                         .name = "cam_cc_ife_0_clk",
1055                         .parent_names = (const char *[]){
1056                                 "cam_cc_ife_0_clk_src",
1057                         },
1058                         .num_parents = 1,
1059                         .flags = CLK_SET_RATE_PARENT,
1060                         .ops = &clk_branch2_ops,
1061                 },
1062         },
1063 };
1064
1065 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1066         .halt_reg = 0x9078,
1067         .halt_check = BRANCH_HALT,
1068         .clkr = {
1069                 .enable_reg = 0x9078,
1070                 .enable_mask = BIT(0),
1071                 .hw.init = &(struct clk_init_data){
1072                         .name = "cam_cc_ife_0_cphy_rx_clk",
1073                         .parent_names = (const char *[]){
1074                                 "cam_cc_cphy_rx_clk_src",
1075                         },
1076                         .num_parents = 1,
1077                         .flags = CLK_SET_RATE_PARENT,
1078                         .ops = &clk_branch2_ops,
1079                 },
1080         },
1081 };
1082
1083 static struct clk_branch cam_cc_ife_0_csid_clk = {
1084         .halt_reg = 0x9050,
1085         .halt_check = BRANCH_HALT,
1086         .clkr = {
1087                 .enable_reg = 0x9050,
1088                 .enable_mask = BIT(0),
1089                 .hw.init = &(struct clk_init_data){
1090                         .name = "cam_cc_ife_0_csid_clk",
1091                         .parent_names = (const char *[]){
1092                                 "cam_cc_ife_0_csid_clk_src",
1093                         },
1094                         .num_parents = 1,
1095                         .flags = CLK_SET_RATE_PARENT,
1096                         .ops = &clk_branch2_ops,
1097                 },
1098         },
1099 };
1100
1101 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1102         .halt_reg = 0x9034,
1103         .halt_check = BRANCH_HALT,
1104         .clkr = {
1105                 .enable_reg = 0x9034,
1106                 .enable_mask = BIT(0),
1107                 .hw.init = &(struct clk_init_data){
1108                         .name = "cam_cc_ife_0_dsp_clk",
1109                         .parent_names = (const char *[]){
1110                                 "cam_cc_ife_0_clk_src",
1111                         },
1112                         .num_parents = 1,
1113                         .ops = &clk_branch2_ops,
1114                 },
1115         },
1116 };
1117
1118 static struct clk_branch cam_cc_ife_1_axi_clk = {
1119         .halt_reg = 0xa054,
1120         .halt_check = BRANCH_HALT,
1121         .clkr = {
1122                 .enable_reg = 0xa054,
1123                 .enable_mask = BIT(0),
1124                 .hw.init = &(struct clk_init_data){
1125                         .name = "cam_cc_ife_1_axi_clk",
1126                         .ops = &clk_branch2_ops,
1127                 },
1128         },
1129 };
1130
1131 static struct clk_branch cam_cc_ife_1_clk = {
1132         .halt_reg = 0xa024,
1133         .halt_check = BRANCH_HALT,
1134         .clkr = {
1135                 .enable_reg = 0xa024,
1136                 .enable_mask = BIT(0),
1137                 .hw.init = &(struct clk_init_data){
1138                         .name = "cam_cc_ife_1_clk",
1139                         .parent_names = (const char *[]){
1140                                 "cam_cc_ife_1_clk_src",
1141                         },
1142                         .num_parents = 1,
1143                         .flags = CLK_SET_RATE_PARENT,
1144                         .ops = &clk_branch2_ops,
1145                 },
1146         },
1147 };
1148
1149 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1150         .halt_reg = 0xa050,
1151         .halt_check = BRANCH_HALT,
1152         .clkr = {
1153                 .enable_reg = 0xa050,
1154                 .enable_mask = BIT(0),
1155                 .hw.init = &(struct clk_init_data){
1156                         .name = "cam_cc_ife_1_cphy_rx_clk",
1157                         .parent_names = (const char *[]){
1158                                 "cam_cc_cphy_rx_clk_src",
1159                         },
1160                         .num_parents = 1,
1161                         .flags = CLK_SET_RATE_PARENT,
1162                         .ops = &clk_branch2_ops,
1163                 },
1164         },
1165 };
1166
1167 static struct clk_branch cam_cc_ife_1_csid_clk = {
1168         .halt_reg = 0xa048,
1169         .halt_check = BRANCH_HALT,
1170         .clkr = {
1171                 .enable_reg = 0xa048,
1172                 .enable_mask = BIT(0),
1173                 .hw.init = &(struct clk_init_data){
1174                         .name = "cam_cc_ife_1_csid_clk",
1175                         .parent_names = (const char *[]){
1176                                 "cam_cc_ife_1_csid_clk_src",
1177                         },
1178                         .num_parents = 1,
1179                         .flags = CLK_SET_RATE_PARENT,
1180                         .ops = &clk_branch2_ops,
1181                 },
1182         },
1183 };
1184
1185 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1186         .halt_reg = 0xa02c,
1187         .halt_check = BRANCH_HALT,
1188         .clkr = {
1189                 .enable_reg = 0xa02c,
1190                 .enable_mask = BIT(0),
1191                 .hw.init = &(struct clk_init_data){
1192                         .name = "cam_cc_ife_1_dsp_clk",
1193                         .parent_names = (const char *[]){
1194                                 "cam_cc_ife_1_clk_src",
1195                         },
1196                         .num_parents = 1,
1197                         .ops = &clk_branch2_ops,
1198                 },
1199         },
1200 };
1201
1202 static struct clk_branch cam_cc_ife_lite_clk = {
1203         .halt_reg = 0xb01c,
1204         .halt_check = BRANCH_HALT,
1205         .clkr = {
1206                 .enable_reg = 0xb01c,
1207                 .enable_mask = BIT(0),
1208                 .hw.init = &(struct clk_init_data){
1209                         .name = "cam_cc_ife_lite_clk",
1210                         .parent_names = (const char *[]){
1211                                 "cam_cc_ife_lite_clk_src",
1212                         },
1213                         .num_parents = 1,
1214                         .flags = CLK_SET_RATE_PARENT,
1215                         .ops = &clk_branch2_ops,
1216                 },
1217         },
1218 };
1219
1220 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
1221         .halt_reg = 0xb044,
1222         .halt_check = BRANCH_HALT,
1223         .clkr = {
1224                 .enable_reg = 0xb044,
1225                 .enable_mask = BIT(0),
1226                 .hw.init = &(struct clk_init_data){
1227                         .name = "cam_cc_ife_lite_cphy_rx_clk",
1228                         .parent_names = (const char *[]){
1229                                 "cam_cc_cphy_rx_clk_src",
1230                         },
1231                         .num_parents = 1,
1232                         .flags = CLK_SET_RATE_PARENT,
1233                         .ops = &clk_branch2_ops,
1234                 },
1235         },
1236 };
1237
1238 static struct clk_branch cam_cc_ife_lite_csid_clk = {
1239         .halt_reg = 0xb03c,
1240         .halt_check = BRANCH_HALT,
1241         .clkr = {
1242                 .enable_reg = 0xb03c,
1243                 .enable_mask = BIT(0),
1244                 .hw.init = &(struct clk_init_data){
1245                         .name = "cam_cc_ife_lite_csid_clk",
1246                         .parent_names = (const char *[]){
1247                                 "cam_cc_ife_lite_csid_clk_src",
1248                         },
1249                         .num_parents = 1,
1250                         .flags = CLK_SET_RATE_PARENT,
1251                         .ops = &clk_branch2_ops,
1252                 },
1253         },
1254 };
1255
1256 static struct clk_branch cam_cc_ipe_0_ahb_clk = {
1257         .halt_reg = 0x703c,
1258         .halt_check = BRANCH_HALT,
1259         .clkr = {
1260                 .enable_reg = 0x703c,
1261                 .enable_mask = BIT(0),
1262                 .hw.init = &(struct clk_init_data){
1263                         .name = "cam_cc_ipe_0_ahb_clk",
1264                         .parent_names = (const char *[]){
1265                                 "cam_cc_slow_ahb_clk_src",
1266                         },
1267                         .num_parents = 1,
1268                         .flags = CLK_SET_RATE_PARENT,
1269                         .ops = &clk_branch2_ops,
1270                 },
1271         },
1272 };
1273
1274 static struct clk_branch cam_cc_ipe_0_areg_clk = {
1275         .halt_reg = 0x7038,
1276         .halt_check = BRANCH_HALT,
1277         .clkr = {
1278                 .enable_reg = 0x7038,
1279                 .enable_mask = BIT(0),
1280                 .hw.init = &(struct clk_init_data){
1281                         .name = "cam_cc_ipe_0_areg_clk",
1282                         .parent_names = (const char *[]){
1283                                 "cam_cc_fast_ahb_clk_src",
1284                         },
1285                         .num_parents = 1,
1286                         .flags = CLK_SET_RATE_PARENT,
1287                         .ops = &clk_branch2_ops,
1288                 },
1289         },
1290 };
1291
1292 static struct clk_branch cam_cc_ipe_0_axi_clk = {
1293         .halt_reg = 0x7034,
1294         .halt_check = BRANCH_HALT,
1295         .clkr = {
1296                 .enable_reg = 0x7034,
1297                 .enable_mask = BIT(0),
1298                 .hw.init = &(struct clk_init_data){
1299                         .name = "cam_cc_ipe_0_axi_clk",
1300                         .ops = &clk_branch2_ops,
1301                 },
1302         },
1303 };
1304
1305 static struct clk_branch cam_cc_ipe_0_clk = {
1306         .halt_reg = 0x7024,
1307         .halt_check = BRANCH_HALT,
1308         .clkr = {
1309                 .enable_reg = 0x7024,
1310                 .enable_mask = BIT(0),
1311                 .hw.init = &(struct clk_init_data){
1312                         .name = "cam_cc_ipe_0_clk",
1313                         .parent_names = (const char *[]){
1314                                 "cam_cc_ipe_0_clk_src",
1315                         },
1316                         .num_parents = 1,
1317                         .flags = CLK_SET_RATE_PARENT,
1318                         .ops = &clk_branch2_ops,
1319                 },
1320         },
1321 };
1322
1323 static struct clk_branch cam_cc_ipe_1_ahb_clk = {
1324         .halt_reg = 0x803c,
1325         .halt_check = BRANCH_HALT,
1326         .clkr = {
1327                 .enable_reg = 0x803c,
1328                 .enable_mask = BIT(0),
1329                 .hw.init = &(struct clk_init_data){
1330                         .name = "cam_cc_ipe_1_ahb_clk",
1331                         .parent_names = (const char *[]){
1332                                 "cam_cc_slow_ahb_clk_src",
1333                         },
1334                         .num_parents = 1,
1335                         .flags = CLK_SET_RATE_PARENT,
1336                         .ops = &clk_branch2_ops,
1337                 },
1338         },
1339 };
1340
1341 static struct clk_branch cam_cc_ipe_1_areg_clk = {
1342         .halt_reg = 0x8038,
1343         .halt_check = BRANCH_HALT,
1344         .clkr = {
1345                 .enable_reg = 0x8038,
1346                 .enable_mask = BIT(0),
1347                 .hw.init = &(struct clk_init_data){
1348                         .name = "cam_cc_ipe_1_areg_clk",
1349                         .parent_names = (const char *[]){
1350                                 "cam_cc_fast_ahb_clk_src",
1351                         },
1352                         .num_parents = 1,
1353                         .flags = CLK_SET_RATE_PARENT,
1354                         .ops = &clk_branch2_ops,
1355                 },
1356         },
1357 };
1358
1359 static struct clk_branch cam_cc_ipe_1_axi_clk = {
1360         .halt_reg = 0x8034,
1361         .halt_check = BRANCH_HALT,
1362         .clkr = {
1363                 .enable_reg = 0x8034,
1364                 .enable_mask = BIT(0),
1365                 .hw.init = &(struct clk_init_data){
1366                         .name = "cam_cc_ipe_1_axi_clk",
1367                         .ops = &clk_branch2_ops,
1368                 },
1369         },
1370 };
1371
1372 static struct clk_branch cam_cc_ipe_1_clk = {
1373         .halt_reg = 0x8024,
1374         .halt_check = BRANCH_HALT,
1375         .clkr = {
1376                 .enable_reg = 0x8024,
1377                 .enable_mask = BIT(0),
1378                 .hw.init = &(struct clk_init_data){
1379                         .name = "cam_cc_ipe_1_clk",
1380                         .parent_names = (const char *[]){
1381                                 "cam_cc_ipe_1_clk_src",
1382                         },
1383                         .num_parents = 1,
1384                         .flags = CLK_SET_RATE_PARENT,
1385                         .ops = &clk_branch2_ops,
1386                 },
1387         },
1388 };
1389
1390 static struct clk_branch cam_cc_jpeg_clk = {
1391         .halt_reg = 0xb064,
1392         .halt_check = BRANCH_HALT,
1393         .clkr = {
1394                 .enable_reg = 0xb064,
1395                 .enable_mask = BIT(0),
1396                 .hw.init = &(struct clk_init_data){
1397                         .name = "cam_cc_jpeg_clk",
1398                         .parent_names = (const char *[]){
1399                                 "cam_cc_jpeg_clk_src",
1400                         },
1401                         .num_parents = 1,
1402                         .flags = CLK_SET_RATE_PARENT,
1403                         .ops = &clk_branch2_ops,
1404                 },
1405         },
1406 };
1407
1408 static struct clk_branch cam_cc_lrme_clk = {
1409         .halt_reg = 0xb110,
1410         .halt_check = BRANCH_HALT,
1411         .clkr = {
1412                 .enable_reg = 0xb110,
1413                 .enable_mask = BIT(0),
1414                 .hw.init = &(struct clk_init_data){
1415                         .name = "cam_cc_lrme_clk",
1416                         .parent_names = (const char *[]){
1417                                 "cam_cc_lrme_clk_src",
1418                         },
1419                         .num_parents = 1,
1420                         .flags = CLK_SET_RATE_PARENT,
1421                         .ops = &clk_branch2_ops,
1422                 },
1423         },
1424 };
1425
1426 static struct clk_branch cam_cc_mclk0_clk = {
1427         .halt_reg = 0x401c,
1428         .halt_check = BRANCH_HALT,
1429         .clkr = {
1430                 .enable_reg = 0x401c,
1431                 .enable_mask = BIT(0),
1432                 .hw.init = &(struct clk_init_data){
1433                         .name = "cam_cc_mclk0_clk",
1434                         .parent_names = (const char *[]){
1435                                 "cam_cc_mclk0_clk_src",
1436                         },
1437                         .num_parents = 1,
1438                         .flags = CLK_SET_RATE_PARENT,
1439                         .ops = &clk_branch2_ops,
1440                 },
1441         },
1442 };
1443
1444 static struct clk_branch cam_cc_mclk1_clk = {
1445         .halt_reg = 0x403c,
1446         .halt_check = BRANCH_HALT,
1447         .clkr = {
1448                 .enable_reg = 0x403c,
1449                 .enable_mask = BIT(0),
1450                 .hw.init = &(struct clk_init_data){
1451                         .name = "cam_cc_mclk1_clk",
1452                         .parent_names = (const char *[]){
1453                                 "cam_cc_mclk1_clk_src",
1454                         },
1455                         .num_parents = 1,
1456                         .flags = CLK_SET_RATE_PARENT,
1457                         .ops = &clk_branch2_ops,
1458                 },
1459         },
1460 };
1461
1462 static struct clk_branch cam_cc_mclk2_clk = {
1463         .halt_reg = 0x405c,
1464         .halt_check = BRANCH_HALT,
1465         .clkr = {
1466                 .enable_reg = 0x405c,
1467                 .enable_mask = BIT(0),
1468                 .hw.init = &(struct clk_init_data){
1469                         .name = "cam_cc_mclk2_clk",
1470                         .parent_names = (const char *[]){
1471                                 "cam_cc_mclk2_clk_src",
1472                         },
1473                         .num_parents = 1,
1474                         .flags = CLK_SET_RATE_PARENT,
1475                         .ops = &clk_branch2_ops,
1476                 },
1477         },
1478 };
1479
1480 static struct clk_branch cam_cc_mclk3_clk = {
1481         .halt_reg = 0x407c,
1482         .halt_check = BRANCH_HALT,
1483         .clkr = {
1484                 .enable_reg = 0x407c,
1485                 .enable_mask = BIT(0),
1486                 .hw.init = &(struct clk_init_data){
1487                         .name = "cam_cc_mclk3_clk",
1488                         .parent_names = (const char *[]){
1489                                 "cam_cc_mclk3_clk_src",
1490                         },
1491                         .num_parents = 1,
1492                         .flags = CLK_SET_RATE_PARENT,
1493                         .ops = &clk_branch2_ops,
1494                 },
1495         },
1496 };
1497
1498 static struct clk_branch cam_cc_soc_ahb_clk = {
1499         .halt_reg = 0xb13c,
1500         .halt_check = BRANCH_HALT,
1501         .clkr = {
1502                 .enable_reg = 0xb13c,
1503                 .enable_mask = BIT(0),
1504                 .hw.init = &(struct clk_init_data){
1505                         .name = "cam_cc_soc_ahb_clk",
1506                         .ops = &clk_branch2_ops,
1507                 },
1508         },
1509 };
1510
1511 static struct clk_branch cam_cc_sys_tmr_clk = {
1512         .halt_reg = 0xb0a8,
1513         .halt_check = BRANCH_HALT,
1514         .clkr = {
1515                 .enable_reg = 0xb0a8,
1516                 .enable_mask = BIT(0),
1517                 .hw.init = &(struct clk_init_data){
1518                         .name = "cam_cc_sys_tmr_clk",
1519                         .ops = &clk_branch2_ops,
1520                 },
1521         },
1522 };
1523
1524 static struct gdsc bps_gdsc = {
1525         .gdscr = 0x6004,
1526         .pd = {
1527                 .name = "bps_gdsc",
1528         },
1529         .flags = HW_CTRL | POLL_CFG_GDSCR,
1530         .pwrsts = PWRSTS_OFF_ON,
1531 };
1532
1533 static struct gdsc ipe_0_gdsc = {
1534         .gdscr = 0x7004,
1535         .pd = {
1536                 .name = "ipe_0_gdsc",
1537         },
1538         .flags = HW_CTRL | POLL_CFG_GDSCR,
1539         .pwrsts = PWRSTS_OFF_ON,
1540 };
1541
1542 static struct gdsc ipe_1_gdsc = {
1543         .gdscr = 0x8004,
1544         .pd = {
1545                 .name = "ipe_1_gdsc",
1546         },
1547         .flags = HW_CTRL | POLL_CFG_GDSCR,
1548         .pwrsts = PWRSTS_OFF_ON,
1549 };
1550
1551 static struct gdsc ife_0_gdsc = {
1552         .gdscr = 0x9004,
1553         .pd = {
1554                 .name = "ife_0_gdsc",
1555         },
1556         .flags = POLL_CFG_GDSCR,
1557         .pwrsts = PWRSTS_OFF_ON,
1558 };
1559
1560 static struct gdsc ife_1_gdsc = {
1561         .gdscr = 0xa004,
1562         .pd = {
1563                 .name = "ife_1_gdsc",
1564         },
1565         .flags = POLL_CFG_GDSCR,
1566         .pwrsts = PWRSTS_OFF_ON,
1567 };
1568
1569 static struct gdsc titan_top_gdsc = {
1570         .gdscr = 0xb134,
1571         .pd = {
1572                 .name = "titan_top_gdsc",
1573         },
1574         .flags = POLL_CFG_GDSCR,
1575         .pwrsts = PWRSTS_OFF_ON,
1576 };
1577
1578 static struct clk_regmap *cam_cc_sdm845_clocks[] = {
1579         [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
1580         [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
1581         [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
1582         [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
1583         [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
1584         [CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
1585         [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
1586         [CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
1587         [CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
1588         [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
1589         [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
1590         [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
1591         [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
1592         [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
1593         [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
1594         [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
1595         [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
1596         [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
1597         [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
1598         [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
1599         [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
1600         [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
1601         [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
1602         [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
1603         [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
1604         [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
1605         [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
1606         [CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
1607         [CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
1608         [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
1609         [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
1610         [CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
1611         [CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
1612         [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
1613         [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
1614         [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
1615         [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
1616         [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
1617         [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
1618         [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
1619         [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
1620         [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
1621         [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
1622         [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
1623         [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
1624         [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
1625         [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
1626         [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
1627         [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
1628         [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
1629         [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
1630         [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
1631         [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
1632         [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
1633         [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
1634         [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
1635         [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
1636         [CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
1637         [CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
1638         [CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
1639         [CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
1640         [CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
1641         [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
1642         [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
1643         [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
1644         [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
1645         [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
1646         [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
1647         [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
1648         [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
1649         [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
1650         [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
1651         [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
1652         [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
1653         [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
1654         [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
1655         [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
1656         [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
1657         [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
1658         [CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
1659         [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
1660         [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
1661         [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
1662         [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
1663         [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
1664 };
1665
1666 static struct gdsc *cam_cc_sdm845_gdscs[] = {
1667         [BPS_GDSC] = &bps_gdsc,
1668         [IPE_0_GDSC] = &ipe_0_gdsc,
1669         [IPE_1_GDSC] = &ipe_1_gdsc,
1670         [IFE_0_GDSC] = &ife_0_gdsc,
1671         [IFE_1_GDSC] = &ife_1_gdsc,
1672         [TITAN_TOP_GDSC] = &titan_top_gdsc,
1673 };
1674
1675 static const struct regmap_config cam_cc_sdm845_regmap_config = {
1676         .reg_bits       = 32,
1677         .reg_stride     = 4,
1678         .val_bits       = 32,
1679         .max_register   = 0xd004,
1680         .fast_io        = true,
1681 };
1682
1683 static const struct qcom_cc_desc cam_cc_sdm845_desc = {
1684         .config = &cam_cc_sdm845_regmap_config,
1685         .clks = cam_cc_sdm845_clocks,
1686         .num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
1687         .gdscs = cam_cc_sdm845_gdscs,
1688         .num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
1689 };
1690
1691 static const struct of_device_id cam_cc_sdm845_match_table[] = {
1692         { .compatible = "qcom,sdm845-camcc" },
1693         { }
1694 };
1695 MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
1696
1697 static int cam_cc_sdm845_probe(struct platform_device *pdev)
1698 {
1699         struct regmap *regmap;
1700         struct alpha_pll_config cam_cc_pll_config = { };
1701
1702         regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
1703         if (IS_ERR(regmap))
1704                 return PTR_ERR(regmap);
1705
1706         cam_cc_pll_config.l = 0x1f;
1707         cam_cc_pll_config.alpha = 0x4000;
1708         clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
1709
1710         cam_cc_pll_config.l = 0x2a;
1711         cam_cc_pll_config.alpha = 0x1556;
1712         clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
1713
1714         cam_cc_pll_config.l = 0x32;
1715         cam_cc_pll_config.alpha = 0x0;
1716         clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
1717
1718         cam_cc_pll_config.l = 0x14;
1719         clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
1720
1721         return qcom_cc_really_probe(pdev, &cam_cc_sdm845_desc, regmap);
1722 }
1723
1724 static struct platform_driver cam_cc_sdm845_driver = {
1725         .probe  = cam_cc_sdm845_probe,
1726         .driver = {
1727                 .name = "sdm845-camcc",
1728                 .of_match_table = cam_cc_sdm845_match_table,
1729         },
1730 };
1731
1732 static int __init cam_cc_sdm845_init(void)
1733 {
1734         return platform_driver_register(&cam_cc_sdm845_driver);
1735 }
1736 subsys_initcall(cam_cc_sdm845_init);
1737
1738 static void __exit cam_cc_sdm845_exit(void)
1739 {
1740         platform_driver_unregister(&cam_cc_sdm845_driver);
1741 }
1742 module_exit(cam_cc_sdm845_exit);
1743
1744 MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
1745 MODULE_LICENSE("GPL v2");