1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/clk-provider.h>
7#include <linux/mod_devicetable.h>
8#include <linux/module.h>
9#include <linux/platform_device.h>
10#include <linux/regmap.h>
11
12#include <dt-bindings/clock/qcom,sm8450-camcc.h>
13
14#include "clk-alpha-pll.h"
15#include "clk-branch.h"
16#include "clk-pll.h"
17#include "clk-rcg.h"
18#include "clk-regmap-divider.h"
19#include "clk-regmap-mux.h"
20#include "clk-regmap.h"
21#include "common.h"
22#include "gdsc.h"
23#include "reset.h"
24
25enum {
26 DT_IFACE,
27 DT_BI_TCXO,
28 DT_BI_TCXO_AO,
29 DT_SLEEP_CLK
30};
31
32enum {
33 P_BI_TCXO,
34 P_CAM_CC_PLL0_OUT_EVEN,
35 P_CAM_CC_PLL0_OUT_MAIN,
36 P_CAM_CC_PLL0_OUT_ODD,
37 P_CAM_CC_PLL1_OUT_EVEN,
38 P_CAM_CC_PLL2_OUT_EVEN,
39 P_CAM_CC_PLL2_OUT_MAIN,
40 P_CAM_CC_PLL3_OUT_EVEN,
41 P_CAM_CC_PLL4_OUT_EVEN,
42 P_CAM_CC_PLL5_OUT_EVEN,
43 P_CAM_CC_PLL6_OUT_EVEN,
44 P_CAM_CC_PLL7_OUT_EVEN,
45 P_CAM_CC_PLL8_OUT_EVEN,
46 P_SLEEP_CLK,
47};
48
49static const struct pll_vco lucid_evo_vco[] = {
50 { 249600000, 2000000000, 0 },
51};
52
53static const struct pll_vco rivian_evo_vco[] = {
54 { 864000000, 1056000000, 0 },
55};
56
57static const struct clk_parent_data pll_parent_data_tcxo = { .index = DT_BI_TCXO };
58
59static const struct alpha_pll_config cam_cc_pll0_config = {
60 .l = 0x3e,
61 .alpha = 0x8000,
62 .config_ctl_val = 0x20485699,
63 .config_ctl_hi_val = 0x00182261,
64 .config_ctl_hi1_val = 0x32aa299c,
65 .user_ctl_val = 0x00008400,
66 .user_ctl_hi_val = 0x00000805,
67};
68
69static struct clk_alpha_pll cam_cc_pll0 = {
70 .offset = 0x0,
71 .vco_table = lucid_evo_vco,
72 .num_vco = ARRAY_SIZE(lucid_evo_vco),
73 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
74 .clkr = {
75 .hw.init = &(const struct clk_init_data) {
76 .name = "cam_cc_pll0",
77 .parent_data = &pll_parent_data_tcxo,
78 .num_parents = 1,
79 .ops = &clk_alpha_pll_lucid_evo_ops,
80 },
81 },
82};
83
84static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
85 { 0x1, 2 },
86 { }
87};
88
89static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
90 .offset = 0x0,
91 .post_div_shift = 10,
92 .post_div_table = post_div_table_cam_cc_pll0_out_even,
93 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
94 .width = 4,
95 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
96 .clkr.hw.init = &(const struct clk_init_data) {
97 .name = "cam_cc_pll0_out_even",
98 .parent_hws = (const struct clk_hw*[]) {
99 &cam_cc_pll0.clkr.hw,
100 },
101 .num_parents = 1,
102 .flags = CLK_SET_RATE_PARENT,
103 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
104 },
105};
106
107static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
108 { 0x2, 3 },
109 { }
110};
111
112static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
113 .offset = 0x0,
114 .post_div_shift = 14,
115 .post_div_table = post_div_table_cam_cc_pll0_out_odd,
116 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
117 .width = 4,
118 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
119 .clkr.hw.init = &(const struct clk_init_data) {
120 .name = "cam_cc_pll0_out_odd",
121 .parent_hws = (const struct clk_hw*[]) {
122 &cam_cc_pll0.clkr.hw,
123 },
124 .num_parents = 1,
125 .flags = CLK_SET_RATE_PARENT,
126 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
127 },
128};
129
130static const struct alpha_pll_config cam_cc_pll1_config = {
131 .l = 0x25,
132 .alpha = 0xeaaa,
133 .config_ctl_val = 0x20485699,
134 .config_ctl_hi_val = 0x00182261,
135 .config_ctl_hi1_val = 0x32aa299c,
136 .user_ctl_val = 0x00000400,
137 .user_ctl_hi_val = 0x00000805,
138};
139
140static struct clk_alpha_pll cam_cc_pll1 = {
141 .offset = 0x1000,
142 .vco_table = lucid_evo_vco,
143 .num_vco = ARRAY_SIZE(lucid_evo_vco),
144 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
145 .clkr = {
146 .hw.init = &(const struct clk_init_data) {
147 .name = "cam_cc_pll1",
148 .parent_data = &pll_parent_data_tcxo,
149 .num_parents = 1,
150 .ops = &clk_alpha_pll_lucid_evo_ops,
151 },
152 },
153};
154
155static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
156 { 0x1, 2 },
157 { }
158};
159
160static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
161 .offset = 0x1000,
162 .post_div_shift = 10,
163 .post_div_table = post_div_table_cam_cc_pll1_out_even,
164 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
165 .width = 4,
166 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
167 .clkr.hw.init = &(const struct clk_init_data) {
168 .name = "cam_cc_pll1_out_even",
169 .parent_hws = (const struct clk_hw*[]) {
170 &cam_cc_pll1.clkr.hw,
171 },
172 .num_parents = 1,
173 .flags = CLK_SET_RATE_PARENT,
174 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
175 },
176};
177
178static const struct alpha_pll_config cam_cc_pll2_config = {
179 .l = 0x32,
180 .alpha = 0x0,
181 .config_ctl_val = 0x90008820,
182 .config_ctl_hi_val = 0x00890263,
183 .config_ctl_hi1_val = 0x00000217,
184};
185
186static struct clk_alpha_pll cam_cc_pll2 = {
187 .offset = 0x2000,
188 .vco_table = rivian_evo_vco,
189 .num_vco = ARRAY_SIZE(rivian_evo_vco),
190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
191 .clkr = {
192 .hw.init = &(const struct clk_init_data) {
193 .name = "cam_cc_pll2",
194 .parent_data = &pll_parent_data_tcxo,
195 .num_parents = 1,
196 .ops = &clk_alpha_pll_rivian_evo_ops,
197 },
198 },
199};
200
201static const struct alpha_pll_config cam_cc_pll3_config = {
202 .l = 0x2d,
203 .alpha = 0x0,
204 .config_ctl_val = 0x20485699,
205 .config_ctl_hi_val = 0x00182261,
206 .config_ctl_hi1_val = 0x32aa299c,
207 .user_ctl_val = 0x00000400,
208 .user_ctl_hi_val = 0x00000805,
209};
210
211static struct clk_alpha_pll cam_cc_pll3 = {
212 .offset = 0x3000,
213 .vco_table = lucid_evo_vco,
214 .num_vco = ARRAY_SIZE(lucid_evo_vco),
215 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
216 .clkr = {
217 .hw.init = &(const struct clk_init_data) {
218 .name = "cam_cc_pll3",
219 .parent_data = &pll_parent_data_tcxo,
220 .num_parents = 1,
221 .ops = &clk_alpha_pll_lucid_evo_ops,
222 },
223 },
224};
225
226static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
227 { 0x1, 2 },
228 { }
229};
230
231static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
232 .offset = 0x3000,
233 .post_div_shift = 10,
234 .post_div_table = post_div_table_cam_cc_pll3_out_even,
235 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
236 .width = 4,
237 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
238 .clkr.hw.init = &(const struct clk_init_data) {
239 .name = "cam_cc_pll3_out_even",
240 .parent_hws = (const struct clk_hw*[]) {
241 &cam_cc_pll3.clkr.hw,
242 },
243 .num_parents = 1,
244 .flags = CLK_SET_RATE_PARENT,
245 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
246 },
247};
248
249static const struct alpha_pll_config cam_cc_pll4_config = {
250 .l = 0x2d,
251 .alpha = 0x0,
252 .config_ctl_val = 0x20485699,
253 .config_ctl_hi_val = 0x00182261,
254 .config_ctl_hi1_val = 0x32aa299c,
255 .user_ctl_val = 0x00000400,
256 .user_ctl_hi_val = 0x00000805,
257};
258
259static struct clk_alpha_pll cam_cc_pll4 = {
260 .offset = 0x4000,
261 .vco_table = lucid_evo_vco,
262 .num_vco = ARRAY_SIZE(lucid_evo_vco),
263 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
264 .clkr = {
265 .hw.init = &(const struct clk_init_data) {
266 .name = "cam_cc_pll4",
267 .parent_data = &pll_parent_data_tcxo,
268 .num_parents = 1,
269 .ops = &clk_alpha_pll_lucid_evo_ops,
270 },
271 },
272};
273
274static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
275 { 0x1, 2 },
276 { }
277};
278
279static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
280 .offset = 0x4000,
281 .post_div_shift = 10,
282 .post_div_table = post_div_table_cam_cc_pll4_out_even,
283 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
284 .width = 4,
285 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
286 .clkr.hw.init = &(const struct clk_init_data) {
287 .name = "cam_cc_pll4_out_even",
288 .parent_hws = (const struct clk_hw*[]) {
289 &cam_cc_pll4.clkr.hw,
290 },
291 .num_parents = 1,
292 .flags = CLK_SET_RATE_PARENT,
293 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
294 },
295};
296
297static const struct alpha_pll_config cam_cc_pll5_config = {
298 .l = 0x2d,
299 .alpha = 0x0,
300 .config_ctl_val = 0x20485699,
301 .config_ctl_hi_val = 0x00182261,
302 .config_ctl_hi1_val = 0x32aa299c,
303 .user_ctl_val = 0x00000400,
304 .user_ctl_hi_val = 0x00000805,
305};
306
307static struct clk_alpha_pll cam_cc_pll5 = {
308 .offset = 0x5000,
309 .vco_table = lucid_evo_vco,
310 .num_vco = ARRAY_SIZE(lucid_evo_vco),
311 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
312 .clkr = {
313 .hw.init = &(const struct clk_init_data) {
314 .name = "cam_cc_pll5",
315 .parent_data = &pll_parent_data_tcxo,
316 .num_parents = 1,
317 .ops = &clk_alpha_pll_lucid_evo_ops,
318 },
319 },
320};
321
322static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
323 { 0x1, 2 },
324 { }
325};
326
327static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
328 .offset = 0x5000,
329 .post_div_shift = 10,
330 .post_div_table = post_div_table_cam_cc_pll5_out_even,
331 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
332 .width = 4,
333 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
334 .clkr.hw.init = &(const struct clk_init_data) {
335 .name = "cam_cc_pll5_out_even",
336 .parent_hws = (const struct clk_hw*[]) {
337 &cam_cc_pll5.clkr.hw,
338 },
339 .num_parents = 1,
340 .flags = CLK_SET_RATE_PARENT,
341 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
342 },
343};
344
345static const struct alpha_pll_config cam_cc_pll6_config = {
346 .l = 0x2d,
347 .alpha = 0x0,
348 .config_ctl_val = 0x20485699,
349 .config_ctl_hi_val = 0x00182261,
350 .config_ctl_hi1_val = 0x32aa299c,
351 .user_ctl_val = 0x00000400,
352 .user_ctl_hi_val = 0x00000805,
353};
354
355static struct clk_alpha_pll cam_cc_pll6 = {
356 .offset = 0x6000,
357 .vco_table = lucid_evo_vco,
358 .num_vco = ARRAY_SIZE(lucid_evo_vco),
359 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
360 .clkr = {
361 .hw.init = &(const struct clk_init_data) {
362 .name = "cam_cc_pll6",
363 .parent_data = &pll_parent_data_tcxo,
364 .num_parents = 1,
365 .ops = &clk_alpha_pll_lucid_evo_ops,
366 },
367 },
368};
369
370static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
371 { 0x1, 2 },
372 { }
373};
374
375static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
376 .offset = 0x6000,
377 .post_div_shift = 10,
378 .post_div_table = post_div_table_cam_cc_pll6_out_even,
379 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
380 .width = 4,
381 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
382 .clkr.hw.init = &(const struct clk_init_data) {
383 .name = "cam_cc_pll6_out_even",
384 .parent_hws = (const struct clk_hw*[]) {
385 &cam_cc_pll6.clkr.hw,
386 },
387 .num_parents = 1,
388 .flags = CLK_SET_RATE_PARENT,
389 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
390 },
391};
392
393static const struct alpha_pll_config cam_cc_pll7_config = {
394 .l = 0x2d,
395 .alpha = 0x0,
396 .config_ctl_val = 0x20485699,
397 .config_ctl_hi_val = 0x00182261,
398 .config_ctl_hi1_val = 0x32aa299c,
399 .user_ctl_val = 0x00000400,
400 .user_ctl_hi_val = 0x00000805,
401};
402
403static struct clk_alpha_pll cam_cc_pll7 = {
404 .offset = 0x7000,
405 .vco_table = lucid_evo_vco,
406 .num_vco = ARRAY_SIZE(lucid_evo_vco),
407 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
408 .clkr = {
409 .hw.init = &(const struct clk_init_data) {
410 .name = "cam_cc_pll7",
411 .parent_data = &pll_parent_data_tcxo,
412 .num_parents = 1,
413 .ops = &clk_alpha_pll_lucid_evo_ops,
414 },
415 },
416};
417
418static const struct clk_div_table post_div_table_cam_cc_pll7_out_even[] = {
419 { 0x1, 2 },
420 { }
421};
422
423static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = {
424 .offset = 0x7000,
425 .post_div_shift = 10,
426 .post_div_table = post_div_table_cam_cc_pll7_out_even,
427 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even),
428 .width = 4,
429 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
430 .clkr.hw.init = &(const struct clk_init_data) {
431 .name = "cam_cc_pll7_out_even",
432 .parent_hws = (const struct clk_hw*[]) {
433 &cam_cc_pll7.clkr.hw,
434 },
435 .num_parents = 1,
436 .flags = CLK_SET_RATE_PARENT,
437 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
438 },
439};
440
441static const struct alpha_pll_config cam_cc_pll8_config = {
442 .l = 0x32,
443 .alpha = 0x0,
444 .config_ctl_val = 0x20485699,
445 .config_ctl_hi_val = 0x00182261,
446 .config_ctl_hi1_val = 0x32aa299c,
447 .user_ctl_val = 0x00000400,
448 .user_ctl_hi_val = 0x00000805,
449};
450
451static struct clk_alpha_pll cam_cc_pll8 = {
452 .offset = 0x8000,
453 .vco_table = lucid_evo_vco,
454 .num_vco = ARRAY_SIZE(lucid_evo_vco),
455 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
456 .clkr = {
457 .hw.init = &(const struct clk_init_data) {
458 .name = "cam_cc_pll8",
459 .parent_data = &pll_parent_data_tcxo,
460 .num_parents = 1,
461 .ops = &clk_alpha_pll_lucid_evo_ops,
462 },
463 },
464};
465
466static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = {
467 { 0x1, 2 },
468 { }
469};
470
471static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = {
472 .offset = 0x8000,
473 .post_div_shift = 10,
474 .post_div_table = post_div_table_cam_cc_pll8_out_even,
475 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even),
476 .width = 4,
477 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
478 .clkr.hw.init = &(const struct clk_init_data) {
479 .name = "cam_cc_pll8_out_even",
480 .parent_hws = (const struct clk_hw*[]) {
481 &cam_cc_pll8.clkr.hw,
482 },
483 .num_parents = 1,
484 .flags = CLK_SET_RATE_PARENT,
485 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
486 },
487};
488
489static const struct parent_map cam_cc_parent_map_0[] = {
490 { P_BI_TCXO, 0 },
491 { P_CAM_CC_PLL0_OUT_MAIN, 1 },
492 { P_CAM_CC_PLL0_OUT_EVEN, 2 },
493 { P_CAM_CC_PLL0_OUT_ODD, 3 },
494 { P_CAM_CC_PLL8_OUT_EVEN, 5 },
495};
496
497static const struct clk_parent_data cam_cc_parent_data_0[] = {
498 { .index = DT_BI_TCXO },
499 { .hw = &cam_cc_pll0.clkr.hw },
500 { .hw = &cam_cc_pll0_out_even.clkr.hw },
501 { .hw = &cam_cc_pll0_out_odd.clkr.hw },
502 { .hw = &cam_cc_pll8_out_even.clkr.hw },
503};
504
505static const struct parent_map cam_cc_parent_map_1[] = {
506 { P_BI_TCXO, 0 },
507 { P_CAM_CC_PLL2_OUT_EVEN, 3 },
508 { P_CAM_CC_PLL2_OUT_MAIN, 5 },
509};
510
511static const struct clk_parent_data cam_cc_parent_data_1[] = {
512 { .index = DT_BI_TCXO },
513 { .hw = &cam_cc_pll2.clkr.hw },
514 { .hw = &cam_cc_pll2.clkr.hw },
515};
516
517static const struct parent_map cam_cc_parent_map_2[] = {
518 { P_BI_TCXO, 0 },
519 { P_CAM_CC_PLL3_OUT_EVEN, 6 },
520};
521
522static const struct clk_parent_data cam_cc_parent_data_2[] = {
523 { .index = DT_BI_TCXO },
524 { .hw = &cam_cc_pll3_out_even.clkr.hw },
525};
526
527static const struct parent_map cam_cc_parent_map_3[] = {
528 { P_BI_TCXO, 0 },
529 { P_CAM_CC_PLL4_OUT_EVEN, 6 },
530};
531
532static const struct clk_parent_data cam_cc_parent_data_3[] = {
533 { .index = DT_BI_TCXO },
534 { .hw = &cam_cc_pll4_out_even.clkr.hw },
535};
536
537static const struct parent_map cam_cc_parent_map_4[] = {
538 { P_BI_TCXO, 0 },
539 { P_CAM_CC_PLL5_OUT_EVEN, 6 },
540};
541
542static const struct clk_parent_data cam_cc_parent_data_4[] = {
543 { .index = DT_BI_TCXO },
544 { .hw = &cam_cc_pll5_out_even.clkr.hw },
545};
546
547static const struct parent_map cam_cc_parent_map_5[] = {
548 { P_BI_TCXO, 0 },
549 { P_CAM_CC_PLL1_OUT_EVEN, 4 },
550};
551
552static const struct clk_parent_data cam_cc_parent_data_5[] = {
553 { .index = DT_BI_TCXO },
554 { .hw = &cam_cc_pll1_out_even.clkr.hw },
555};
556
557static const struct parent_map cam_cc_parent_map_6[] = {
558 { P_BI_TCXO, 0 },
559 { P_CAM_CC_PLL6_OUT_EVEN, 6 },
560};
561
562static const struct clk_parent_data cam_cc_parent_data_6[] = {
563 { .index = DT_BI_TCXO },
564 { .hw = &cam_cc_pll6_out_even.clkr.hw },
565};
566
567static const struct parent_map cam_cc_parent_map_7[] = {
568 { P_BI_TCXO, 0 },
569 { P_CAM_CC_PLL7_OUT_EVEN, 6 },
570};
571
572static const struct clk_parent_data cam_cc_parent_data_7[] = {
573 { .index = DT_BI_TCXO },
574 { .hw = &cam_cc_pll7_out_even.clkr.hw },
575};
576
577static const struct parent_map cam_cc_parent_map_8[] = {
578 { P_SLEEP_CLK, 0 },
579};
580
581static const struct clk_parent_data cam_cc_parent_data_8[] = {
582 { .index = DT_SLEEP_CLK },
583};
584
585static const struct parent_map cam_cc_parent_map_9[] = {
586 { P_BI_TCXO, 0 },
587};
588
589static const struct clk_parent_data cam_cc_parent_data_9_ao[] = {
590 { .index = DT_BI_TCXO_AO, .name = "bi_tcxo_ao" },
591};
592
593static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
594 F(19200000, P_BI_TCXO, 1, 0, 0),
595 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
596 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
597 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
598 F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
599 { }
600};
601
602static struct clk_rcg2 cam_cc_bps_clk_src = {
603 .cmd_rcgr = 0x10050,
604 .mnd_width = 0,
605 .hid_width = 5,
606 .parent_map = cam_cc_parent_map_0,
607 .freq_tbl = ftbl_cam_cc_bps_clk_src,
608 .clkr.hw.init = &(const struct clk_init_data) {
609 .name = "cam_cc_bps_clk_src",
610 .parent_data = cam_cc_parent_data_0,
611 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
612 .flags = CLK_SET_RATE_PARENT,
613 .ops = &clk_rcg2_ops,
614 },
615};
616
617static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
618 F(19200000, P_BI_TCXO, 1, 0, 0),
619 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
620 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
621 { }
622};
623
624static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
625 .cmd_rcgr = 0x13194,
626 .mnd_width = 0,
627 .hid_width = 5,
628 .parent_map = cam_cc_parent_map_0,
629 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
630 .clkr.hw.init = &(const struct clk_init_data) {
631 .name = "cam_cc_camnoc_axi_clk_src",
632 .parent_data = cam_cc_parent_data_0,
633 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
634 .flags = CLK_SET_RATE_PARENT,
635 .ops = &clk_rcg2_ops,
636 },
637};
638
639static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
640 F(19200000, P_BI_TCXO, 1, 0, 0),
641 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
642 { }
643};
644
645static struct clk_rcg2 cam_cc_cci_0_clk_src = {
646 .cmd_rcgr = 0x1312c,
647 .mnd_width = 8,
648 .hid_width = 5,
649 .parent_map = cam_cc_parent_map_0,
650 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
651 .clkr.hw.init = &(const struct clk_init_data) {
652 .name = "cam_cc_cci_0_clk_src",
653 .parent_data = cam_cc_parent_data_0,
654 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
655 .flags = CLK_SET_RATE_PARENT,
656 .ops = &clk_rcg2_ops,
657 },
658};
659
660static struct clk_rcg2 cam_cc_cci_1_clk_src = {
661 .cmd_rcgr = 0x13148,
662 .mnd_width = 8,
663 .hid_width = 5,
664 .parent_map = cam_cc_parent_map_0,
665 .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
666 .clkr.hw.init = &(const struct clk_init_data) {
667 .name = "cam_cc_cci_1_clk_src",
668 .parent_data = cam_cc_parent_data_0,
669 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
670 .flags = CLK_SET_RATE_PARENT,
671 .ops = &clk_rcg2_ops,
672 },
673};
674
675static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
676 F(19200000, P_BI_TCXO, 1, 0, 0),
677 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
678 F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
679 { }
680};
681
682static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
683 .cmd_rcgr = 0x1104c,
684 .mnd_width = 0,
685 .hid_width = 5,
686 .parent_map = cam_cc_parent_map_0,
687 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
688 .clkr.hw.init = &(const struct clk_init_data) {
689 .name = "cam_cc_cphy_rx_clk_src",
690 .parent_data = cam_cc_parent_data_0,
691 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
692 .flags = CLK_SET_RATE_PARENT,
693 .ops = &clk_rcg2_ops,
694 },
695};
696
697static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
698 F(19200000, P_BI_TCXO, 1, 0, 0),
699 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
700 { }
701};
702
703static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
704 .cmd_rcgr = 0x150e0,
705 .mnd_width = 0,
706 .hid_width = 5,
707 .parent_map = cam_cc_parent_map_0,
708 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
709 .clkr.hw.init = &(const struct clk_init_data) {
710 .name = "cam_cc_csi0phytimer_clk_src",
711 .parent_data = cam_cc_parent_data_0,
712 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
713 .flags = CLK_SET_RATE_PARENT,
714 .ops = &clk_rcg2_ops,
715 },
716};
717
718static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
719 .cmd_rcgr = 0x15104,
720 .mnd_width = 0,
721 .hid_width = 5,
722 .parent_map = cam_cc_parent_map_0,
723 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
724 .clkr.hw.init = &(const struct clk_init_data) {
725 .name = "cam_cc_csi1phytimer_clk_src",
726 .parent_data = cam_cc_parent_data_0,
727 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
728 .flags = CLK_SET_RATE_PARENT,
729 .ops = &clk_rcg2_ops,
730 },
731};
732
733static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
734 .cmd_rcgr = 0x15124,
735 .mnd_width = 0,
736 .hid_width = 5,
737 .parent_map = cam_cc_parent_map_0,
738 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
739 .clkr.hw.init = &(const struct clk_init_data) {
740 .name = "cam_cc_csi2phytimer_clk_src",
741 .parent_data = cam_cc_parent_data_0,
742 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
743 .flags = CLK_SET_RATE_PARENT,
744 .ops = &clk_rcg2_ops,
745 },
746};
747
748static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
749 .cmd_rcgr = 0x1514c,
750 .mnd_width = 0,
751 .hid_width = 5,
752 .parent_map = cam_cc_parent_map_0,
753 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
754 .clkr.hw.init = &(const struct clk_init_data) {
755 .name = "cam_cc_csi3phytimer_clk_src",
756 .parent_data = cam_cc_parent_data_0,
757 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
758 .flags = CLK_SET_RATE_PARENT,
759 .ops = &clk_rcg2_ops,
760 },
761};
762
763static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
764 .cmd_rcgr = 0x1516c,
765 .mnd_width = 0,
766 .hid_width = 5,
767 .parent_map = cam_cc_parent_map_0,
768 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
769 .clkr.hw.init = &(const struct clk_init_data) {
770 .name = "cam_cc_csi4phytimer_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
778static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
779 .cmd_rcgr = 0x1518c,
780 .mnd_width = 0,
781 .hid_width = 5,
782 .parent_map = cam_cc_parent_map_0,
783 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
784 .clkr.hw.init = &(const struct clk_init_data) {
785 .name = "cam_cc_csi5phytimer_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
793static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = {
794 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
795 F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
796 { }
797};
798
799static struct clk_rcg2 cam_cc_csid_clk_src = {
800 .cmd_rcgr = 0x13174,
801 .mnd_width = 0,
802 .hid_width = 5,
803 .parent_map = cam_cc_parent_map_0,
804 .freq_tbl = ftbl_cam_cc_csid_clk_src,
805 .clkr.hw.init = &(const struct clk_init_data) {
806 .name = "cam_cc_csid_clk_src",
807 .parent_data = cam_cc_parent_data_0,
808 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
809 .flags = CLK_SET_RATE_PARENT,
810 .ops = &clk_rcg2_ops,
811 },
812};
813
814static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
815 F(19200000, P_BI_TCXO, 1, 0, 0),
816 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
817 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
818 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
819 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
820 { }
821};
822
823static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
824 .cmd_rcgr = 0x10018,
825 .mnd_width = 0,
826 .hid_width = 5,
827 .parent_map = cam_cc_parent_map_0,
828 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
829 .clkr.hw.init = &(const struct clk_init_data) {
830 .name = "cam_cc_fast_ahb_clk_src",
831 .parent_data = cam_cc_parent_data_0,
832 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
833 .flags = CLK_SET_RATE_PARENT,
834 .ops = &clk_rcg2_ops,
835 },
836};
837
838static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
839 F(19200000, P_BI_TCXO, 1, 0, 0),
840 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
841 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
842 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
843 { }
844};
845
846static struct clk_rcg2 cam_cc_icp_clk_src = {
847 .cmd_rcgr = 0x13108,
848 .mnd_width = 0,
849 .hid_width = 5,
850 .parent_map = cam_cc_parent_map_0,
851 .freq_tbl = ftbl_cam_cc_icp_clk_src,
852 .clkr.hw.init = &(const struct clk_init_data) {
853 .name = "cam_cc_icp_clk_src",
854 .parent_data = cam_cc_parent_data_0,
855 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
856 .flags = CLK_SET_RATE_PARENT,
857 .ops = &clk_rcg2_ops,
858 },
859};
860
861static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
862 F(19200000, P_BI_TCXO, 1, 0, 0),
863 F(432000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
864 F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
865 F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
866 F(727000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
867 { }
868};
869
870static struct clk_rcg2 cam_cc_ife_0_clk_src = {
871 .cmd_rcgr = 0x11018,
872 .mnd_width = 0,
873 .hid_width = 5,
874 .parent_map = cam_cc_parent_map_2,
875 .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
876 .clkr.hw.init = &(const struct clk_init_data) {
877 .name = "cam_cc_ife_0_clk_src",
878 .parent_data = cam_cc_parent_data_2,
879 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
880 .flags = CLK_SET_RATE_PARENT,
881 .ops = &clk_rcg2_ops,
882 },
883};
884
885static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
886 F(19200000, P_BI_TCXO, 1, 0, 0),
887 F(432000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
888 F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
889 F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
890 F(727000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
891 { }
892};
893
894static struct clk_rcg2 cam_cc_ife_1_clk_src = {
895 .cmd_rcgr = 0x12018,
896 .mnd_width = 0,
897 .hid_width = 5,
898 .parent_map = cam_cc_parent_map_3,
899 .freq_tbl = ftbl_cam_cc_ife_1_clk_src,
900 .clkr.hw.init = &(const struct clk_init_data) {
901 .name = "cam_cc_ife_1_clk_src",
902 .parent_data = cam_cc_parent_data_3,
903 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
904 .flags = CLK_SET_RATE_PARENT,
905 .ops = &clk_rcg2_ops,
906 },
907};
908
909static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
910 F(432000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
911 F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
912 F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
913 F(727000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
914 { }
915};
916
917static struct clk_rcg2 cam_cc_ife_2_clk_src = {
918 .cmd_rcgr = 0x12064,
919 .mnd_width = 0,
920 .hid_width = 5,
921 .parent_map = cam_cc_parent_map_4,
922 .freq_tbl = ftbl_cam_cc_ife_2_clk_src,
923 .clkr.hw.init = &(const struct clk_init_data) {
924 .name = "cam_cc_ife_2_clk_src",
925 .parent_data = cam_cc_parent_data_4,
926 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
927 .flags = CLK_SET_RATE_PARENT,
928 .ops = &clk_rcg2_ops,
929 },
930};
931
932static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = {
933 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
934 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
935 { }
936};
937
938static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
939 .cmd_rcgr = 0x13000,
940 .mnd_width = 0,
941 .hid_width = 5,
942 .parent_map = cam_cc_parent_map_0,
943 .freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
944 .clkr.hw.init = &(const struct clk_init_data) {
945 .name = "cam_cc_ife_lite_clk_src",
946 .parent_data = cam_cc_parent_data_0,
947 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
948 .flags = CLK_SET_RATE_PARENT,
949 .ops = &clk_rcg2_ops,
950 },
951};
952
953static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
954 .cmd_rcgr = 0x13024,
955 .mnd_width = 0,
956 .hid_width = 5,
957 .parent_map = cam_cc_parent_map_0,
958 .freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
959 .clkr.hw.init = &(const struct clk_init_data) {
960 .name = "cam_cc_ife_lite_csid_clk_src",
961 .parent_data = cam_cc_parent_data_0,
962 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
963 .flags = CLK_SET_RATE_PARENT,
964 .ops = &clk_rcg2_ops,
965 },
966};
967
968static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = {
969 F(364000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
970 F(500000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
971 F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
972 F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
973 { }
974};
975
976static struct clk_rcg2 cam_cc_ipe_nps_clk_src = {
977 .cmd_rcgr = 0x1008c,
978 .mnd_width = 0,
979 .hid_width = 5,
980 .parent_map = cam_cc_parent_map_5,
981 .freq_tbl = ftbl_cam_cc_ipe_nps_clk_src,
982 .clkr.hw.init = &(const struct clk_init_data) {
983 .name = "cam_cc_ipe_nps_clk_src",
984 .parent_data = cam_cc_parent_data_5,
985 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
986 .flags = CLK_SET_RATE_PARENT,
987 .ops = &clk_rcg2_ops,
988 },
989};
990
991static struct clk_rcg2 cam_cc_jpeg_clk_src = {
992 .cmd_rcgr = 0x130dc,
993 .mnd_width = 0,
994 .hid_width = 5,
995 .parent_map = cam_cc_parent_map_0,
996 .freq_tbl = ftbl_cam_cc_bps_clk_src,
997 .clkr.hw.init = &(const struct clk_init_data) {
998 .name = "cam_cc_jpeg_clk_src",
999 .parent_data = cam_cc_parent_data_0,
1000 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1001 .flags = CLK_SET_RATE_PARENT,
1002 .ops = &clk_rcg2_ops,
1003 },
1004};
1005
1006static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1007 F(19200000, P_BI_TCXO, 1, 0, 0),
1008 F(24000000, P_CAM_CC_PLL2_OUT_MAIN, 10, 1, 4),
1009 F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0),
1010 { }
1011};
1012
1013static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1014 .cmd_rcgr = 0x15000,
1015 .mnd_width = 8,
1016 .hid_width = 5,
1017 .parent_map = cam_cc_parent_map_1,
1018 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1019 .clkr.hw.init = &(const struct clk_init_data) {
1020 .name = "cam_cc_mclk0_clk_src",
1021 .parent_data = cam_cc_parent_data_1,
1022 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1023 .flags = CLK_SET_RATE_PARENT,
1024 .ops = &clk_rcg2_ops,
1025 },
1026};
1027
1028static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1029 .cmd_rcgr = 0x1501c,
1030 .mnd_width = 8,
1031 .hid_width = 5,
1032 .parent_map = cam_cc_parent_map_1,
1033 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1034 .clkr.hw.init = &(const struct clk_init_data) {
1035 .name = "cam_cc_mclk1_clk_src",
1036 .parent_data = cam_cc_parent_data_1,
1037 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1038 .flags = CLK_SET_RATE_PARENT,
1039 .ops = &clk_rcg2_ops,
1040 },
1041};
1042
1043static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1044 .cmd_rcgr = 0x15038,
1045 .mnd_width = 8,
1046 .hid_width = 5,
1047 .parent_map = cam_cc_parent_map_1,
1048 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1049 .clkr.hw.init = &(const struct clk_init_data) {
1050 .name = "cam_cc_mclk2_clk_src",
1051 .parent_data = cam_cc_parent_data_1,
1052 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1053 .flags = CLK_SET_RATE_PARENT,
1054 .ops = &clk_rcg2_ops,
1055 },
1056};
1057
1058static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1059 .cmd_rcgr = 0x15054,
1060 .mnd_width = 8,
1061 .hid_width = 5,
1062 .parent_map = cam_cc_parent_map_1,
1063 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1064 .clkr.hw.init = &(const struct clk_init_data) {
1065 .name = "cam_cc_mclk3_clk_src",
1066 .parent_data = cam_cc_parent_data_1,
1067 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1068 .flags = CLK_SET_RATE_PARENT,
1069 .ops = &clk_rcg2_ops,
1070 },
1071};
1072
1073static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1074 .cmd_rcgr = 0x15070,
1075 .mnd_width = 8,
1076 .hid_width = 5,
1077 .parent_map = cam_cc_parent_map_1,
1078 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1079 .clkr.hw.init = &(const struct clk_init_data) {
1080 .name = "cam_cc_mclk4_clk_src",
1081 .parent_data = cam_cc_parent_data_1,
1082 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1083 .flags = CLK_SET_RATE_PARENT,
1084 .ops = &clk_rcg2_ops,
1085 },
1086};
1087
1088static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1089 .cmd_rcgr = 0x1508c,
1090 .mnd_width = 8,
1091 .hid_width = 5,
1092 .parent_map = cam_cc_parent_map_1,
1093 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1094 .clkr.hw.init = &(const struct clk_init_data) {
1095 .name = "cam_cc_mclk5_clk_src",
1096 .parent_data = cam_cc_parent_data_1,
1097 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1098 .flags = CLK_SET_RATE_PARENT,
1099 .ops = &clk_rcg2_ops,
1100 },
1101};
1102
1103static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1104 .cmd_rcgr = 0x150a8,
1105 .mnd_width = 8,
1106 .hid_width = 5,
1107 .parent_map = cam_cc_parent_map_1,
1108 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1109 .clkr.hw.init = &(const struct clk_init_data) {
1110 .name = "cam_cc_mclk6_clk_src",
1111 .parent_data = cam_cc_parent_data_1,
1112 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1113 .flags = CLK_SET_RATE_PARENT,
1114 .ops = &clk_rcg2_ops,
1115 },
1116};
1117
1118static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1119 .cmd_rcgr = 0x150c4,
1120 .mnd_width = 8,
1121 .hid_width = 5,
1122 .parent_map = cam_cc_parent_map_1,
1123 .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1124 .clkr.hw.init = &(const struct clk_init_data) {
1125 .name = "cam_cc_mclk7_clk_src",
1126 .parent_data = cam_cc_parent_data_1,
1127 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1128 .flags = CLK_SET_RATE_PARENT,
1129 .ops = &clk_rcg2_ops,
1130 },
1131};
1132
1133static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1134 F(19200000, P_BI_TCXO, 1, 0, 0),
1135 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1136 F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1137 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1138 { }
1139};
1140
1141static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1142 .cmd_rcgr = 0x131bc,
1143 .mnd_width = 0,
1144 .hid_width = 5,
1145 .parent_map = cam_cc_parent_map_0,
1146 .freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1147 .clkr.hw.init = &(const struct clk_init_data) {
1148 .name = "cam_cc_qdss_debug_clk_src",
1149 .parent_data = cam_cc_parent_data_0,
1150 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1151 .flags = CLK_SET_RATE_PARENT,
1152 .ops = &clk_rcg2_ops,
1153 },
1154};
1155
1156static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
1157 F(432000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1158 F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1159 F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1160 F(727000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1161 { }
1162};
1163
1164static struct clk_rcg2 cam_cc_sfe_0_clk_src = {
1165 .cmd_rcgr = 0x13064,
1166 .mnd_width = 0,
1167 .hid_width = 5,
1168 .parent_map = cam_cc_parent_map_6,
1169 .freq_tbl = ftbl_cam_cc_sfe_0_clk_src,
1170 .clkr.hw.init = &(const struct clk_init_data) {
1171 .name = "cam_cc_sfe_0_clk_src",
1172 .parent_data = cam_cc_parent_data_6,
1173 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1174 .flags = CLK_SET_RATE_PARENT,
1175 .ops = &clk_rcg2_ops,
1176 },
1177};
1178
1179static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = {
1180 F(432000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1181 F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1182 F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1183 F(727000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1184 { }
1185};
1186
1187static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
1188 .cmd_rcgr = 0x130ac,
1189 .mnd_width = 0,
1190 .hid_width = 5,
1191 .parent_map = cam_cc_parent_map_7,
1192 .freq_tbl = ftbl_cam_cc_sfe_1_clk_src,
1193 .clkr.hw.init = &(const struct clk_init_data) {
1194 .name = "cam_cc_sfe_1_clk_src",
1195 .parent_data = cam_cc_parent_data_7,
1196 .num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1197 .flags = CLK_SET_RATE_PARENT,
1198 .ops = &clk_rcg2_ops,
1199 },
1200};
1201
1202static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1203 F(32000, P_SLEEP_CLK, 1, 0, 0),
1204 { }
1205};
1206
1207static struct clk_rcg2 cam_cc_sleep_clk_src = {
1208 .cmd_rcgr = 0x13210,
1209 .mnd_width = 0,
1210 .hid_width = 5,
1211 .parent_map = cam_cc_parent_map_8,
1212 .freq_tbl = ftbl_cam_cc_sleep_clk_src,
1213 .clkr.hw.init = &(const struct clk_init_data) {
1214 .name = "cam_cc_sleep_clk_src",
1215 .parent_data = cam_cc_parent_data_8,
1216 .num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1217 .flags = CLK_SET_RATE_PARENT,
1218 .ops = &clk_rcg2_ops,
1219 },
1220};
1221
1222static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1223 F(19200000, P_BI_TCXO, 1, 0, 0),
1224 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1225 { }
1226};
1227
1228static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1229 .cmd_rcgr = 0x10034,
1230 .mnd_width = 8,
1231 .hid_width = 5,
1232 .parent_map = cam_cc_parent_map_0,
1233 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1234 .clkr.hw.init = &(const struct clk_init_data) {
1235 .name = "cam_cc_slow_ahb_clk_src",
1236 .parent_data = cam_cc_parent_data_0,
1237 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1238 .flags = CLK_SET_RATE_PARENT,
1239 .ops = &clk_rcg2_ops,
1240 },
1241};
1242
1243static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1244 F(19200000, P_BI_TCXO, 1, 0, 0),
1245 { }
1246};
1247
1248static struct clk_rcg2 cam_cc_xo_clk_src = {
1249 .cmd_rcgr = 0x131f4,
1250 .mnd_width = 0,
1251 .hid_width = 5,
1252 .parent_map = cam_cc_parent_map_9,
1253 .freq_tbl = ftbl_cam_cc_xo_clk_src,
1254 .clkr.hw.init = &(const struct clk_init_data) {
1255 .name = "cam_cc_xo_clk_src",
1256 .parent_data = cam_cc_parent_data_9_ao,
1257 .num_parents = ARRAY_SIZE(cam_cc_parent_data_9_ao),
1258 .flags = CLK_SET_RATE_PARENT,
1259 .ops = &clk_rcg2_ops,
1260 },
1261};
1262
1263static struct clk_branch cam_cc_gdsc_clk = {
1264 .halt_reg = 0x1320c,
1265 .halt_check = BRANCH_HALT,
1266 .clkr = {
1267 .enable_reg = 0x1320c,
1268 .enable_mask = BIT(0),
1269 .hw.init = &(const struct clk_init_data) {
1270 .name = "cam_cc_gdsc_clk",
1271 .parent_hws = (const struct clk_hw*[]) {
1272 &cam_cc_xo_clk_src.clkr.hw,
1273 },
1274 .num_parents = 1,
1275 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1276 .ops = &clk_branch2_ops,
1277 },
1278 },
1279};
1280
1281static struct clk_branch cam_cc_bps_ahb_clk = {
1282 .halt_reg = 0x1004c,
1283 .halt_check = BRANCH_HALT,
1284 .clkr = {
1285 .enable_reg = 0x1004c,
1286 .enable_mask = BIT(0),
1287 .hw.init = &(const struct clk_init_data) {
1288 .name = "cam_cc_bps_ahb_clk",
1289 .parent_hws = (const struct clk_hw*[]) {
1290 &cam_cc_slow_ahb_clk_src.clkr.hw,
1291 },
1292 .num_parents = 1,
1293 .flags = CLK_SET_RATE_PARENT,
1294 .ops = &clk_branch2_ops,
1295 },
1296 },
1297};
1298
1299static struct clk_branch cam_cc_bps_clk = {
1300 .halt_reg = 0x10068,
1301 .halt_check = BRANCH_HALT,
1302 .clkr = {
1303 .enable_reg = 0x10068,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(const struct clk_init_data) {
1306 .name = "cam_cc_bps_clk",
1307 .parent_hws = (const struct clk_hw*[]) {
1308 &cam_cc_bps_clk_src.clkr.hw,
1309 },
1310 .num_parents = 1,
1311 .flags = CLK_SET_RATE_PARENT,
1312 .ops = &clk_branch2_ops,
1313 },
1314 },
1315};
1316
1317static struct clk_branch cam_cc_bps_fast_ahb_clk = {
1318 .halt_reg = 0x10030,
1319 .halt_check = BRANCH_HALT,
1320 .clkr = {
1321 .enable_reg = 0x10030,
1322 .enable_mask = BIT(0),
1323 .hw.init = &(const struct clk_init_data) {
1324 .name = "cam_cc_bps_fast_ahb_clk",
1325 .parent_hws = (const struct clk_hw*[]) {
1326 &cam_cc_fast_ahb_clk_src.clkr.hw,
1327 },
1328 .num_parents = 1,
1329 .flags = CLK_SET_RATE_PARENT,
1330 .ops = &clk_branch2_ops,
1331 },
1332 },
1333};
1334
1335static struct clk_branch cam_cc_camnoc_axi_clk = {
1336 .halt_reg = 0x131ac,
1337 .halt_check = BRANCH_HALT,
1338 .clkr = {
1339 .enable_reg = 0x131ac,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(const struct clk_init_data) {
1342 .name = "cam_cc_camnoc_axi_clk",
1343 .parent_hws = (const struct clk_hw*[]) {
1344 &cam_cc_camnoc_axi_clk_src.clkr.hw,
1345 },
1346 .num_parents = 1,
1347 .flags = CLK_SET_RATE_PARENT,
1348 .ops = &clk_branch2_ops,
1349 },
1350 },
1351};
1352
1353static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1354 .halt_reg = 0x131b4,
1355 .halt_check = BRANCH_HALT,
1356 .clkr = {
1357 .enable_reg = 0x131b4,
1358 .enable_mask = BIT(0),
1359 .hw.init = &(const struct clk_init_data) {
1360 .name = "cam_cc_camnoc_dcd_xo_clk",
1361 .parent_hws = (const struct clk_hw*[]) {
1362 &cam_cc_xo_clk_src.clkr.hw,
1363 },
1364 .num_parents = 1,
1365 .flags = CLK_SET_RATE_PARENT,
1366 .ops = &clk_branch2_ops,
1367 },
1368 },
1369};
1370
1371static struct clk_branch cam_cc_cci_0_clk = {
1372 .halt_reg = 0x13144,
1373 .halt_check = BRANCH_HALT,
1374 .clkr = {
1375 .enable_reg = 0x13144,
1376 .enable_mask = BIT(0),
1377 .hw.init = &(const struct clk_init_data) {
1378 .name = "cam_cc_cci_0_clk",
1379 .parent_hws = (const struct clk_hw*[]) {
1380 &cam_cc_cci_0_clk_src.clkr.hw,
1381 },
1382 .num_parents = 1,
1383 .flags = CLK_SET_RATE_PARENT,
1384 .ops = &clk_branch2_ops,
1385 },
1386 },
1387};
1388
1389static struct clk_branch cam_cc_cci_1_clk = {
1390 .halt_reg = 0x13160,
1391 .halt_check = BRANCH_HALT,
1392 .clkr = {
1393 .enable_reg = 0x13160,
1394 .enable_mask = BIT(0),
1395 .hw.init = &(const struct clk_init_data) {
1396 .name = "cam_cc_cci_1_clk",
1397 .parent_hws = (const struct clk_hw*[]) {
1398 &cam_cc_cci_1_clk_src.clkr.hw,
1399 },
1400 .num_parents = 1,
1401 .flags = CLK_SET_RATE_PARENT,
1402 .ops = &clk_branch2_ops,
1403 },
1404 },
1405};
1406
1407static struct clk_branch cam_cc_core_ahb_clk = {
1408 .halt_reg = 0x131f0,
1409 .halt_check = BRANCH_HALT_DELAY,
1410 .clkr = {
1411 .enable_reg = 0x131f0,
1412 .enable_mask = BIT(0),
1413 .hw.init = &(const struct clk_init_data) {
1414 .name = "cam_cc_core_ahb_clk",
1415 .parent_hws = (const struct clk_hw*[]) {
1416 &cam_cc_slow_ahb_clk_src.clkr.hw,
1417 },
1418 .num_parents = 1,
1419 .flags = CLK_SET_RATE_PARENT,
1420 .ops = &clk_branch2_ops,
1421 },
1422 },
1423};
1424
1425static struct clk_branch cam_cc_cpas_ahb_clk = {
1426 .halt_reg = 0x13164,
1427 .halt_check = BRANCH_HALT,
1428 .clkr = {
1429 .enable_reg = 0x13164,
1430 .enable_mask = BIT(0),
1431 .hw.init = &(const struct clk_init_data) {
1432 .name = "cam_cc_cpas_ahb_clk",
1433 .parent_hws = (const struct clk_hw*[]) {
1434 &cam_cc_slow_ahb_clk_src.clkr.hw,
1435 },
1436 .num_parents = 1,
1437 .flags = CLK_SET_RATE_PARENT,
1438 .ops = &clk_branch2_ops,
1439 },
1440 },
1441};
1442
1443static struct clk_branch cam_cc_cpas_bps_clk = {
1444 .halt_reg = 0x10070,
1445 .halt_check = BRANCH_HALT,
1446 .clkr = {
1447 .enable_reg = 0x10070,
1448 .enable_mask = BIT(0),
1449 .hw.init = &(const struct clk_init_data) {
1450 .name = "cam_cc_cpas_bps_clk",
1451 .parent_hws = (const struct clk_hw*[]) {
1452 &cam_cc_bps_clk_src.clkr.hw,
1453 },
1454 .num_parents = 1,
1455 .flags = CLK_SET_RATE_PARENT,
1456 .ops = &clk_branch2_ops,
1457 },
1458 },
1459};
1460
1461static struct clk_branch cam_cc_cpas_fast_ahb_clk = {
1462 .halt_reg = 0x1316c,
1463 .halt_check = BRANCH_HALT,
1464 .clkr = {
1465 .enable_reg = 0x1316c,
1466 .enable_mask = BIT(0),
1467 .hw.init = &(const struct clk_init_data) {
1468 .name = "cam_cc_cpas_fast_ahb_clk",
1469 .parent_hws = (const struct clk_hw*[]) {
1470 &cam_cc_fast_ahb_clk_src.clkr.hw,
1471 },
1472 .num_parents = 1,
1473 .flags = CLK_SET_RATE_PARENT,
1474 .ops = &clk_branch2_ops,
1475 },
1476 },
1477};
1478
1479static struct clk_branch cam_cc_cpas_ife_0_clk = {
1480 .halt_reg = 0x11038,
1481 .halt_check = BRANCH_HALT,
1482 .clkr = {
1483 .enable_reg = 0x11038,
1484 .enable_mask = BIT(0),
1485 .hw.init = &(const struct clk_init_data) {
1486 .name = "cam_cc_cpas_ife_0_clk",
1487 .parent_hws = (const struct clk_hw*[]) {
1488 &cam_cc_ife_0_clk_src.clkr.hw,
1489 },
1490 .num_parents = 1,
1491 .flags = CLK_SET_RATE_PARENT,
1492 .ops = &clk_branch2_ops,
1493 },
1494 },
1495};
1496
1497static struct clk_branch cam_cc_cpas_ife_1_clk = {
1498 .halt_reg = 0x12038,
1499 .halt_check = BRANCH_HALT,
1500 .clkr = {
1501 .enable_reg = 0x12038,
1502 .enable_mask = BIT(0),
1503 .hw.init = &(const struct clk_init_data) {
1504 .name = "cam_cc_cpas_ife_1_clk",
1505 .parent_hws = (const struct clk_hw*[]) {
1506 &cam_cc_ife_1_clk_src.clkr.hw,
1507 },
1508 .num_parents = 1,
1509 .flags = CLK_SET_RATE_PARENT,
1510 .ops = &clk_branch2_ops,
1511 },
1512 },
1513};
1514
1515static struct clk_branch cam_cc_cpas_ife_2_clk = {
1516 .halt_reg = 0x12084,
1517 .halt_check = BRANCH_HALT,
1518 .clkr = {
1519 .enable_reg = 0x12084,
1520 .enable_mask = BIT(0),
1521 .hw.init = &(const struct clk_init_data) {
1522 .name = "cam_cc_cpas_ife_2_clk",
1523 .parent_hws = (const struct clk_hw*[]) {
1524 &cam_cc_ife_2_clk_src.clkr.hw,
1525 },
1526 .num_parents = 1,
1527 .flags = CLK_SET_RATE_PARENT,
1528 .ops = &clk_branch2_ops,
1529 },
1530 },
1531};
1532
1533static struct clk_branch cam_cc_cpas_ife_lite_clk = {
1534 .halt_reg = 0x13020,
1535 .halt_check = BRANCH_HALT,
1536 .clkr = {
1537 .enable_reg = 0x13020,
1538 .enable_mask = BIT(0),
1539 .hw.init = &(const struct clk_init_data) {
1540 .name = "cam_cc_cpas_ife_lite_clk",
1541 .parent_hws = (const struct clk_hw*[]) {
1542 &cam_cc_ife_lite_clk_src.clkr.hw,
1543 },
1544 .num_parents = 1,
1545 .flags = CLK_SET_RATE_PARENT,
1546 .ops = &clk_branch2_ops,
1547 },
1548 },
1549};
1550
1551static struct clk_branch cam_cc_cpas_ipe_nps_clk = {
1552 .halt_reg = 0x100ac,
1553 .halt_check = BRANCH_HALT,
1554 .clkr = {
1555 .enable_reg = 0x100ac,
1556 .enable_mask = BIT(0),
1557 .hw.init = &(const struct clk_init_data) {
1558 .name = "cam_cc_cpas_ipe_nps_clk",
1559 .parent_hws = (const struct clk_hw*[]) {
1560 &cam_cc_ipe_nps_clk_src.clkr.hw,
1561 },
1562 .num_parents = 1,
1563 .flags = CLK_SET_RATE_PARENT,
1564 .ops = &clk_branch2_ops,
1565 },
1566 },
1567};
1568
1569static struct clk_branch cam_cc_cpas_sbi_clk = {
1570 .halt_reg = 0x100ec,
1571 .halt_check = BRANCH_HALT,
1572 .clkr = {
1573 .enable_reg = 0x100ec,
1574 .enable_mask = BIT(0),
1575 .hw.init = &(const struct clk_init_data) {
1576 .name = "cam_cc_cpas_sbi_clk",
1577 .parent_hws = (const struct clk_hw*[]) {
1578 &cam_cc_ife_0_clk_src.clkr.hw,
1579 },
1580 .num_parents = 1,
1581 .flags = CLK_SET_RATE_PARENT,
1582 .ops = &clk_branch2_ops,
1583 },
1584 },
1585};
1586
1587static struct clk_branch cam_cc_cpas_sfe_0_clk = {
1588 .halt_reg = 0x13084,
1589 .halt_check = BRANCH_HALT,
1590 .clkr = {
1591 .enable_reg = 0x13084,
1592 .enable_mask = BIT(0),
1593 .hw.init = &(const struct clk_init_data) {
1594 .name = "cam_cc_cpas_sfe_0_clk",
1595 .parent_hws = (const struct clk_hw*[]) {
1596 &cam_cc_sfe_0_clk_src.clkr.hw,
1597 },
1598 .num_parents = 1,
1599 .flags = CLK_SET_RATE_PARENT,
1600 .ops = &clk_branch2_ops,
1601 },
1602 },
1603};
1604
1605static struct clk_branch cam_cc_cpas_sfe_1_clk = {
1606 .halt_reg = 0x130cc,
1607 .halt_check = BRANCH_HALT,
1608 .clkr = {
1609 .enable_reg = 0x130cc,
1610 .enable_mask = BIT(0),
1611 .hw.init = &(const struct clk_init_data) {
1612 .name = "cam_cc_cpas_sfe_1_clk",
1613 .parent_hws = (const struct clk_hw*[]) {
1614 &cam_cc_sfe_1_clk_src.clkr.hw,
1615 },
1616 .num_parents = 1,
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_branch2_ops,
1619 },
1620 },
1621};
1622
1623static struct clk_branch cam_cc_csi0phytimer_clk = {
1624 .halt_reg = 0x150f8,
1625 .halt_check = BRANCH_HALT,
1626 .clkr = {
1627 .enable_reg = 0x150f8,
1628 .enable_mask = BIT(0),
1629 .hw.init = &(const struct clk_init_data) {
1630 .name = "cam_cc_csi0phytimer_clk",
1631 .parent_hws = (const struct clk_hw*[]) {
1632 &cam_cc_csi0phytimer_clk_src.clkr.hw,
1633 },
1634 .num_parents = 1,
1635 .flags = CLK_SET_RATE_PARENT,
1636 .ops = &clk_branch2_ops,
1637 },
1638 },
1639};
1640
1641static struct clk_branch cam_cc_csi1phytimer_clk = {
1642 .halt_reg = 0x1511c,
1643 .halt_check = BRANCH_HALT,
1644 .clkr = {
1645 .enable_reg = 0x1511c,
1646 .enable_mask = BIT(0),
1647 .hw.init = &(const struct clk_init_data) {
1648 .name = "cam_cc_csi1phytimer_clk",
1649 .parent_hws = (const struct clk_hw*[]) {
1650 &cam_cc_csi1phytimer_clk_src.clkr.hw,
1651 },
1652 .num_parents = 1,
1653 .flags = CLK_SET_RATE_PARENT,
1654 .ops = &clk_branch2_ops,
1655 },
1656 },
1657};
1658
1659static struct clk_branch cam_cc_csi2phytimer_clk = {
1660 .halt_reg = 0x1513c,
1661 .halt_check = BRANCH_HALT,
1662 .clkr = {
1663 .enable_reg = 0x1513c,
1664 .enable_mask = BIT(0),
1665 .hw.init = &(const struct clk_init_data) {
1666 .name = "cam_cc_csi2phytimer_clk",
1667 .parent_hws = (const struct clk_hw*[]) {
1668 &cam_cc_csi2phytimer_clk_src.clkr.hw,
1669 },
1670 .num_parents = 1,
1671 .flags = CLK_SET_RATE_PARENT,
1672 .ops = &clk_branch2_ops,
1673 },
1674 },
1675};
1676
1677static struct clk_branch cam_cc_csi3phytimer_clk = {
1678 .halt_reg = 0x15164,
1679 .halt_check = BRANCH_HALT,
1680 .clkr = {
1681 .enable_reg = 0x15164,
1682 .enable_mask = BIT(0),
1683 .hw.init = &(const struct clk_init_data) {
1684 .name = "cam_cc_csi3phytimer_clk",
1685 .parent_hws = (const struct clk_hw*[]) {
1686 &cam_cc_csi3phytimer_clk_src.clkr.hw,
1687 },
1688 .num_parents = 1,
1689 .flags = CLK_SET_RATE_PARENT,
1690 .ops = &clk_branch2_ops,
1691 },
1692 },
1693};
1694
1695static struct clk_branch cam_cc_csi4phytimer_clk = {
1696 .halt_reg = 0x15184,
1697 .halt_check = BRANCH_HALT,
1698 .clkr = {
1699 .enable_reg = 0x15184,
1700 .enable_mask = BIT(0),
1701 .hw.init = &(const struct clk_init_data) {
1702 .name = "cam_cc_csi4phytimer_clk",
1703 .parent_hws = (const struct clk_hw*[]) {
1704 &cam_cc_csi4phytimer_clk_src.clkr.hw,
1705 },
1706 .num_parents = 1,
1707 .flags = CLK_SET_RATE_PARENT,
1708 .ops = &clk_branch2_ops,
1709 },
1710 },
1711};
1712
1713static struct clk_branch cam_cc_csi5phytimer_clk = {
1714 .halt_reg = 0x151a4,
1715 .halt_check = BRANCH_HALT,
1716 .clkr = {
1717 .enable_reg = 0x151a4,
1718 .enable_mask = BIT(0),
1719 .hw.init = &(const struct clk_init_data) {
1720 .name = "cam_cc_csi5phytimer_clk",
1721 .parent_hws = (const struct clk_hw*[]) {
1722 &cam_cc_csi5phytimer_clk_src.clkr.hw,
1723 },
1724 .num_parents = 1,
1725 .flags = CLK_SET_RATE_PARENT,
1726 .ops = &clk_branch2_ops,
1727 },
1728 },
1729};
1730
1731static struct clk_branch cam_cc_csid_clk = {
1732 .halt_reg = 0x1318c,
1733 .halt_check = BRANCH_HALT,
1734 .clkr = {
1735 .enable_reg = 0x1318c,
1736 .enable_mask = BIT(0),
1737 .hw.init = &(const struct clk_init_data) {
1738 .name = "cam_cc_csid_clk",
1739 .parent_hws = (const struct clk_hw*[]) {
1740 &cam_cc_csid_clk_src.clkr.hw,
1741 },
1742 .num_parents = 1,
1743 .flags = CLK_SET_RATE_PARENT,
1744 .ops = &clk_branch2_ops,
1745 },
1746 },
1747};
1748
1749static struct clk_branch cam_cc_csid_csiphy_rx_clk = {
1750 .halt_reg = 0x15100,
1751 .halt_check = BRANCH_HALT,
1752 .clkr = {
1753 .enable_reg = 0x15100,
1754 .enable_mask = BIT(0),
1755 .hw.init = &(const struct clk_init_data) {
1756 .name = "cam_cc_csid_csiphy_rx_clk",
1757 .parent_hws = (const struct clk_hw*[]) {
1758 &cam_cc_cphy_rx_clk_src.clkr.hw,
1759 },
1760 .num_parents = 1,
1761 .flags = CLK_SET_RATE_PARENT,
1762 .ops = &clk_branch2_ops,
1763 },
1764 },
1765};
1766
1767static struct clk_branch cam_cc_csiphy0_clk = {
1768 .halt_reg = 0x150fc,
1769 .halt_check = BRANCH_HALT,
1770 .clkr = {
1771 .enable_reg = 0x150fc,
1772 .enable_mask = BIT(0),
1773 .hw.init = &(const struct clk_init_data) {
1774 .name = "cam_cc_csiphy0_clk",
1775 .parent_hws = (const struct clk_hw*[]) {
1776 &cam_cc_cphy_rx_clk_src.clkr.hw,
1777 },
1778 .num_parents = 1,
1779 .flags = CLK_SET_RATE_PARENT,
1780 .ops = &clk_branch2_ops,
1781 },
1782 },
1783};
1784
1785static struct clk_branch cam_cc_csiphy1_clk = {
1786 .halt_reg = 0x15120,
1787 .halt_check = BRANCH_HALT,
1788 .clkr = {
1789 .enable_reg = 0x15120,
1790 .enable_mask = BIT(0),
1791 .hw.init = &(const struct clk_init_data) {
1792 .name = "cam_cc_csiphy1_clk",
1793 .parent_hws = (const struct clk_hw*[]) {
1794 &cam_cc_cphy_rx_clk_src.clkr.hw,
1795 },
1796 .num_parents = 1,
1797 .flags = CLK_SET_RATE_PARENT,
1798 .ops = &clk_branch2_ops,
1799 },
1800 },
1801};
1802
1803static struct clk_branch cam_cc_csiphy2_clk = {
1804 .halt_reg = 0x15140,
1805 .halt_check = BRANCH_HALT,
1806 .clkr = {
1807 .enable_reg = 0x15140,
1808 .enable_mask = BIT(0),
1809 .hw.init = &(const struct clk_init_data) {
1810 .name = "cam_cc_csiphy2_clk",
1811 .parent_hws = (const struct clk_hw*[]) {
1812 &cam_cc_cphy_rx_clk_src.clkr.hw,
1813 },
1814 .num_parents = 1,
1815 .flags = CLK_SET_RATE_PARENT,
1816 .ops = &clk_branch2_ops,
1817 },
1818 },
1819};
1820
1821static struct clk_branch cam_cc_csiphy3_clk = {
1822 .halt_reg = 0x15168,
1823 .halt_check = BRANCH_HALT,
1824 .clkr = {
1825 .enable_reg = 0x15168,
1826 .enable_mask = BIT(0),
1827 .hw.init = &(const struct clk_init_data) {
1828 .name = "cam_cc_csiphy3_clk",
1829 .parent_hws = (const struct clk_hw*[]) {
1830 &cam_cc_cphy_rx_clk_src.clkr.hw,
1831 },
1832 .num_parents = 1,
1833 .flags = CLK_SET_RATE_PARENT,
1834 .ops = &clk_branch2_ops,
1835 },
1836 },
1837};
1838
1839static struct clk_branch cam_cc_csiphy4_clk = {
1840 .halt_reg = 0x15188,
1841 .halt_check = BRANCH_HALT,
1842 .clkr = {
1843 .enable_reg = 0x15188,
1844 .enable_mask = BIT(0),
1845 .hw.init = &(const struct clk_init_data) {
1846 .name = "cam_cc_csiphy4_clk",
1847 .parent_hws = (const struct clk_hw*[]) {
1848 &cam_cc_cphy_rx_clk_src.clkr.hw,
1849 },
1850 .num_parents = 1,
1851 .flags = CLK_SET_RATE_PARENT,
1852 .ops = &clk_branch2_ops,
1853 },
1854 },
1855};
1856
1857static struct clk_branch cam_cc_csiphy5_clk = {
1858 .halt_reg = 0x151a8,
1859 .halt_check = BRANCH_HALT,
1860 .clkr = {
1861 .enable_reg = 0x151a8,
1862 .enable_mask = BIT(0),
1863 .hw.init = &(const struct clk_init_data) {
1864 .name = "cam_cc_csiphy5_clk",
1865 .parent_hws = (const struct clk_hw*[]) {
1866 &cam_cc_cphy_rx_clk_src.clkr.hw,
1867 },
1868 .num_parents = 1,
1869 .flags = CLK_SET_RATE_PARENT,
1870 .ops = &clk_branch2_ops,
1871 },
1872 },
1873};
1874
1875static struct clk_branch cam_cc_icp_ahb_clk = {
1876 .halt_reg = 0x13128,
1877 .halt_check = BRANCH_HALT,
1878 .clkr = {
1879 .enable_reg = 0x13128,
1880 .enable_mask = BIT(0),
1881 .hw.init = &(const struct clk_init_data) {
1882 .name = "cam_cc_icp_ahb_clk",
1883 .parent_hws = (const struct clk_hw*[]) {
1884 &cam_cc_slow_ahb_clk_src.clkr.hw,
1885 },
1886 .num_parents = 1,
1887 .flags = CLK_SET_RATE_PARENT,
1888 .ops = &clk_branch2_ops,
1889 },
1890 },
1891};
1892
1893static struct clk_branch cam_cc_icp_clk = {
1894 .halt_reg = 0x13120,
1895 .halt_check = BRANCH_HALT,
1896 .clkr = {
1897 .enable_reg = 0x13120,
1898 .enable_mask = BIT(0),
1899 .hw.init = &(const struct clk_init_data) {
1900 .name = "cam_cc_icp_clk",
1901 .parent_hws = (const struct clk_hw*[]) {
1902 &cam_cc_icp_clk_src.clkr.hw,
1903 },
1904 .num_parents = 1,
1905 .flags = CLK_SET_RATE_PARENT,
1906 .ops = &clk_branch2_ops,
1907 },
1908 },
1909};
1910
1911static struct clk_branch cam_cc_ife_0_clk = {
1912 .halt_reg = 0x11030,
1913 .halt_check = BRANCH_HALT,
1914 .clkr = {
1915 .enable_reg = 0x11030,
1916 .enable_mask = BIT(0),
1917 .hw.init = &(const struct clk_init_data) {
1918 .name = "cam_cc_ife_0_clk",
1919 .parent_hws = (const struct clk_hw*[]) {
1920 &cam_cc_ife_0_clk_src.clkr.hw,
1921 },
1922 .num_parents = 1,
1923 .flags = CLK_SET_RATE_PARENT,
1924 .ops = &clk_branch2_ops,
1925 },
1926 },
1927};
1928
1929static struct clk_branch cam_cc_ife_0_dsp_clk = {
1930 .halt_reg = 0x1103c,
1931 .halt_check = BRANCH_HALT,
1932 .clkr = {
1933 .enable_reg = 0x1103c,
1934 .enable_mask = BIT(0),
1935 .hw.init = &(const struct clk_init_data) {
1936 .name = "cam_cc_ife_0_dsp_clk",
1937 .parent_hws = (const struct clk_hw*[]) {
1938 &cam_cc_ife_0_clk_src.clkr.hw,
1939 },
1940 .num_parents = 1,
1941 .flags = CLK_SET_RATE_PARENT,
1942 .ops = &clk_branch2_ops,
1943 },
1944 },
1945};
1946
1947static struct clk_branch cam_cc_ife_0_fast_ahb_clk = {
1948 .halt_reg = 0x11048,
1949 .halt_check = BRANCH_HALT,
1950 .clkr = {
1951 .enable_reg = 0x11048,
1952 .enable_mask = BIT(0),
1953 .hw.init = &(const struct clk_init_data) {
1954 .name = "cam_cc_ife_0_fast_ahb_clk",
1955 .parent_hws = (const struct clk_hw*[]) {
1956 &cam_cc_fast_ahb_clk_src.clkr.hw,
1957 },
1958 .num_parents = 1,
1959 .flags = CLK_SET_RATE_PARENT,
1960 .ops = &clk_branch2_ops,
1961 },
1962 },
1963};
1964
1965static struct clk_branch cam_cc_ife_1_clk = {
1966 .halt_reg = 0x12030,
1967 .halt_check = BRANCH_HALT,
1968 .clkr = {
1969 .enable_reg = 0x12030,
1970 .enable_mask = BIT(0),
1971 .hw.init = &(const struct clk_init_data) {
1972 .name = "cam_cc_ife_1_clk",
1973 .parent_hws = (const struct clk_hw*[]) {
1974 &cam_cc_ife_1_clk_src.clkr.hw,
1975 },
1976 .num_parents = 1,
1977 .flags = CLK_SET_RATE_PARENT,
1978 .ops = &clk_branch2_ops,
1979 },
1980 },
1981};
1982
1983static struct clk_branch cam_cc_ife_1_dsp_clk = {
1984 .halt_reg = 0x1203c,
1985 .halt_check = BRANCH_HALT,
1986 .clkr = {
1987 .enable_reg = 0x1203c,
1988 .enable_mask = BIT(0),
1989 .hw.init = &(const struct clk_init_data) {
1990 .name = "cam_cc_ife_1_dsp_clk",
1991 .parent_hws = (const struct clk_hw*[]) {
1992 &cam_cc_ife_1_clk_src.clkr.hw,
1993 },
1994 .num_parents = 1,
1995 .flags = CLK_SET_RATE_PARENT,
1996 .ops = &clk_branch2_ops,
1997 },
1998 },
1999};
2000
2001static struct clk_branch cam_cc_ife_1_fast_ahb_clk = {
2002 .halt_reg = 0x12048,
2003 .halt_check = BRANCH_HALT,
2004 .clkr = {
2005 .enable_reg = 0x12048,
2006 .enable_mask = BIT(0),
2007 .hw.init = &(const struct clk_init_data) {
2008 .name = "cam_cc_ife_1_fast_ahb_clk",
2009 .parent_hws = (const struct clk_hw*[]) {
2010 &cam_cc_fast_ahb_clk_src.clkr.hw,
2011 },
2012 .num_parents = 1,
2013 .flags = CLK_SET_RATE_PARENT,
2014 .ops = &clk_branch2_ops,
2015 },
2016 },
2017};
2018
2019static struct clk_branch cam_cc_ife_2_clk = {
2020 .halt_reg = 0x1207c,
2021 .halt_check = BRANCH_HALT,
2022 .clkr = {
2023 .enable_reg = 0x1207c,
2024 .enable_mask = BIT(0),
2025 .hw.init = &(const struct clk_init_data) {
2026 .name = "cam_cc_ife_2_clk",
2027 .parent_hws = (const struct clk_hw*[]) {
2028 &cam_cc_ife_2_clk_src.clkr.hw,
2029 },
2030 .num_parents = 1,
2031 .flags = CLK_SET_RATE_PARENT,
2032 .ops = &clk_branch2_ops,
2033 },
2034 },
2035};
2036
2037static struct clk_branch cam_cc_ife_2_dsp_clk = {
2038 .halt_reg = 0x12088,
2039 .halt_check = BRANCH_HALT,
2040 .clkr = {
2041 .enable_reg = 0x12088,
2042 .enable_mask = BIT(0),
2043 .hw.init = &(const struct clk_init_data) {
2044 .name = "cam_cc_ife_2_dsp_clk",
2045 .parent_hws = (const struct clk_hw*[]) {
2046 &cam_cc_ife_2_clk_src.clkr.hw,
2047 },
2048 .num_parents = 1,
2049 .flags = CLK_SET_RATE_PARENT,
2050 .ops = &clk_branch2_ops,
2051 },
2052 },
2053};
2054
2055static struct clk_branch cam_cc_ife_2_fast_ahb_clk = {
2056 .halt_reg = 0x12094,
2057 .halt_check = BRANCH_HALT,
2058 .clkr = {
2059 .enable_reg = 0x12094,
2060 .enable_mask = BIT(0),
2061 .hw.init = &(const struct clk_init_data) {
2062 .name = "cam_cc_ife_2_fast_ahb_clk",
2063 .parent_hws = (const struct clk_hw*[]) {
2064 &cam_cc_fast_ahb_clk_src.clkr.hw,
2065 },
2066 .num_parents = 1,
2067 .flags = CLK_SET_RATE_PARENT,
2068 .ops = &clk_branch2_ops,
2069 },
2070 },
2071};
2072
2073static struct clk_branch cam_cc_ife_lite_ahb_clk = {
2074 .halt_reg = 0x13048,
2075 .halt_check = BRANCH_HALT,
2076 .clkr = {
2077 .enable_reg = 0x13048,
2078 .enable_mask = BIT(0),
2079 .hw.init = &(const struct clk_init_data) {
2080 .name = "cam_cc_ife_lite_ahb_clk",
2081 .parent_hws = (const struct clk_hw*[]) {
2082 &cam_cc_slow_ahb_clk_src.clkr.hw,
2083 },
2084 .num_parents = 1,
2085 .flags = CLK_SET_RATE_PARENT,
2086 .ops = &clk_branch2_ops,
2087 },
2088 },
2089};
2090
2091static struct clk_branch cam_cc_ife_lite_clk = {
2092 .halt_reg = 0x13018,
2093 .halt_check = BRANCH_HALT,
2094 .clkr = {
2095 .enable_reg = 0x13018,
2096 .enable_mask = BIT(0),
2097 .hw.init = &(const struct clk_init_data) {
2098 .name = "cam_cc_ife_lite_clk",
2099 .parent_hws = (const struct clk_hw*[]) {
2100 &cam_cc_ife_lite_clk_src.clkr.hw,
2101 },
2102 .num_parents = 1,
2103 .flags = CLK_SET_RATE_PARENT,
2104 .ops = &clk_branch2_ops,
2105 },
2106 },
2107};
2108
2109static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
2110 .halt_reg = 0x13044,
2111 .halt_check = BRANCH_HALT,
2112 .clkr = {
2113 .enable_reg = 0x13044,
2114 .enable_mask = BIT(0),
2115 .hw.init = &(const struct clk_init_data) {
2116 .name = "cam_cc_ife_lite_cphy_rx_clk",
2117 .parent_hws = (const struct clk_hw*[]) {
2118 &cam_cc_cphy_rx_clk_src.clkr.hw,
2119 },
2120 .num_parents = 1,
2121 .flags = CLK_SET_RATE_PARENT,
2122 .ops = &clk_branch2_ops,
2123 },
2124 },
2125};
2126
2127static struct clk_branch cam_cc_ife_lite_csid_clk = {
2128 .halt_reg = 0x1303c,
2129 .halt_check = BRANCH_HALT,
2130 .clkr = {
2131 .enable_reg = 0x1303c,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(const struct clk_init_data) {
2134 .name = "cam_cc_ife_lite_csid_clk",
2135 .parent_hws = (const struct clk_hw*[]) {
2136 &cam_cc_ife_lite_csid_clk_src.clkr.hw,
2137 },
2138 .num_parents = 1,
2139 .flags = CLK_SET_RATE_PARENT,
2140 .ops = &clk_branch2_ops,
2141 },
2142 },
2143};
2144
2145static struct clk_branch cam_cc_ipe_nps_ahb_clk = {
2146 .halt_reg = 0x100c0,
2147 .halt_check = BRANCH_HALT,
2148 .clkr = {
2149 .enable_reg = 0x100c0,
2150 .enable_mask = BIT(0),
2151 .hw.init = &(const struct clk_init_data) {
2152 .name = "cam_cc_ipe_nps_ahb_clk",
2153 .parent_hws = (const struct clk_hw*[]) {
2154 &cam_cc_slow_ahb_clk_src.clkr.hw,
2155 },
2156 .num_parents = 1,
2157 .flags = CLK_SET_RATE_PARENT,
2158 .ops = &clk_branch2_ops,
2159 },
2160 },
2161};
2162
2163static struct clk_branch cam_cc_ipe_nps_clk = {
2164 .halt_reg = 0x100a4,
2165 .halt_check = BRANCH_HALT,
2166 .clkr = {
2167 .enable_reg = 0x100a4,
2168 .enable_mask = BIT(0),
2169 .hw.init = &(const struct clk_init_data) {
2170 .name = "cam_cc_ipe_nps_clk",
2171 .parent_hws = (const struct clk_hw*[]) {
2172 &cam_cc_ipe_nps_clk_src.clkr.hw,
2173 },
2174 .num_parents = 1,
2175 .flags = CLK_SET_RATE_PARENT,
2176 .ops = &clk_branch2_ops,
2177 },
2178 },
2179};
2180
2181static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = {
2182 .halt_reg = 0x100c4,
2183 .halt_check = BRANCH_HALT,
2184 .clkr = {
2185 .enable_reg = 0x100c4,
2186 .enable_mask = BIT(0),
2187 .hw.init = &(const struct clk_init_data) {
2188 .name = "cam_cc_ipe_nps_fast_ahb_clk",
2189 .parent_hws = (const struct clk_hw*[]) {
2190 &cam_cc_fast_ahb_clk_src.clkr.hw,
2191 },
2192 .num_parents = 1,
2193 .flags = CLK_SET_RATE_PARENT,
2194 .ops = &clk_branch2_ops,
2195 },
2196 },
2197};
2198
2199static struct clk_branch cam_cc_ipe_pps_clk = {
2200 .halt_reg = 0x100b0,
2201 .halt_check = BRANCH_HALT,
2202 .clkr = {
2203 .enable_reg = 0x100b0,
2204 .enable_mask = BIT(0),
2205 .hw.init = &(const struct clk_init_data) {
2206 .name = "cam_cc_ipe_pps_clk",
2207 .parent_hws = (const struct clk_hw*[]) {
2208 &cam_cc_ipe_nps_clk_src.clkr.hw,
2209 },
2210 .num_parents = 1,
2211 .flags = CLK_SET_RATE_PARENT,
2212 .ops = &clk_branch2_ops,
2213 },
2214 },
2215};
2216
2217static struct clk_branch cam_cc_ipe_pps_fast_ahb_clk = {
2218 .halt_reg = 0x100c8,
2219 .halt_check = BRANCH_HALT,
2220 .clkr = {
2221 .enable_reg = 0x100c8,
2222 .enable_mask = BIT(0),
2223 .hw.init = &(const struct clk_init_data) {
2224 .name = "cam_cc_ipe_pps_fast_ahb_clk",
2225 .parent_hws = (const struct clk_hw*[]) {
2226 &cam_cc_fast_ahb_clk_src.clkr.hw,
2227 },
2228 .num_parents = 1,
2229 .flags = CLK_SET_RATE_PARENT,
2230 .ops = &clk_branch2_ops,
2231 },
2232 },
2233};
2234
2235static struct clk_branch cam_cc_jpeg_clk = {
2236 .halt_reg = 0x130f4,
2237 .halt_check = BRANCH_HALT,
2238 .clkr = {
2239 .enable_reg = 0x130f4,
2240 .enable_mask = BIT(0),
2241 .hw.init = &(const struct clk_init_data) {
2242 .name = "cam_cc_jpeg_clk",
2243 .parent_hws = (const struct clk_hw*[]) {
2244 &cam_cc_jpeg_clk_src.clkr.hw,
2245 },
2246 .num_parents = 1,
2247 .flags = CLK_SET_RATE_PARENT,
2248 .ops = &clk_branch2_ops,
2249 },
2250 },
2251};
2252
2253static struct clk_branch cam_cc_mclk0_clk = {
2254 .halt_reg = 0x15018,
2255 .halt_check = BRANCH_HALT,
2256 .clkr = {
2257 .enable_reg = 0x15018,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(const struct clk_init_data) {
2260 .name = "cam_cc_mclk0_clk",
2261 .parent_hws = (const struct clk_hw*[]) {
2262 &cam_cc_mclk0_clk_src.clkr.hw,
2263 },
2264 .num_parents = 1,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2267 },
2268 },
2269};
2270
2271static struct clk_branch cam_cc_mclk1_clk = {
2272 .halt_reg = 0x15034,
2273 .halt_check = BRANCH_HALT,
2274 .clkr = {
2275 .enable_reg = 0x15034,
2276 .enable_mask = BIT(0),
2277 .hw.init = &(const struct clk_init_data) {
2278 .name = "cam_cc_mclk1_clk",
2279 .parent_hws = (const struct clk_hw*[]) {
2280 &cam_cc_mclk1_clk_src.clkr.hw,
2281 },
2282 .num_parents = 1,
2283 .flags = CLK_SET_RATE_PARENT,
2284 .ops = &clk_branch2_ops,
2285 },
2286 },
2287};
2288
2289static struct clk_branch cam_cc_mclk2_clk = {
2290 .halt_reg = 0x15050,
2291 .halt_check = BRANCH_HALT,
2292 .clkr = {
2293 .enable_reg = 0x15050,
2294 .enable_mask = BIT(0),
2295 .hw.init = &(const struct clk_init_data) {
2296 .name = "cam_cc_mclk2_clk",
2297 .parent_hws = (const struct clk_hw*[]) {
2298 &cam_cc_mclk2_clk_src.clkr.hw,
2299 },
2300 .num_parents = 1,
2301 .flags = CLK_SET_RATE_PARENT,
2302 .ops = &clk_branch2_ops,
2303 },
2304 },
2305};
2306
2307static struct clk_branch cam_cc_mclk3_clk = {
2308 .halt_reg = 0x1506c,
2309 .halt_check = BRANCH_HALT,
2310 .clkr = {
2311 .enable_reg = 0x1506c,
2312 .enable_mask = BIT(0),
2313 .hw.init = &(const struct clk_init_data) {
2314 .name = "cam_cc_mclk3_clk",
2315 .parent_hws = (const struct clk_hw*[]) {
2316 &cam_cc_mclk3_clk_src.clkr.hw,
2317 },
2318 .num_parents = 1,
2319 .flags = CLK_SET_RATE_PARENT,
2320 .ops = &clk_branch2_ops,
2321 },
2322 },
2323};
2324
2325static struct clk_branch cam_cc_mclk4_clk = {
2326 .halt_reg = 0x15088,
2327 .halt_check = BRANCH_HALT,
2328 .clkr = {
2329 .enable_reg = 0x15088,
2330 .enable_mask = BIT(0),
2331 .hw.init = &(const struct clk_init_data) {
2332 .name = "cam_cc_mclk4_clk",
2333 .parent_hws = (const struct clk_hw*[]) {
2334 &cam_cc_mclk4_clk_src.clkr.hw,
2335 },
2336 .num_parents = 1,
2337 .flags = CLK_SET_RATE_PARENT,
2338 .ops = &clk_branch2_ops,
2339 },
2340 },
2341};
2342
2343static struct clk_branch cam_cc_mclk5_clk = {
2344 .halt_reg = 0x150a4,
2345 .halt_check = BRANCH_HALT,
2346 .clkr = {
2347 .enable_reg = 0x150a4,
2348 .enable_mask = BIT(0),
2349 .hw.init = &(const struct clk_init_data) {
2350 .name = "cam_cc_mclk5_clk",
2351 .parent_hws = (const struct clk_hw*[]) {
2352 &cam_cc_mclk5_clk_src.clkr.hw,
2353 },
2354 .num_parents = 1,
2355 .flags = CLK_SET_RATE_PARENT,
2356 .ops = &clk_branch2_ops,
2357 },
2358 },
2359};
2360
2361static struct clk_branch cam_cc_mclk6_clk = {
2362 .halt_reg = 0x150c0,
2363 .halt_check = BRANCH_HALT,
2364 .clkr = {
2365 .enable_reg = 0x150c0,
2366 .enable_mask = BIT(0),
2367 .hw.init = &(const struct clk_init_data) {
2368 .name = "cam_cc_mclk6_clk",
2369 .parent_hws = (const struct clk_hw*[]) {
2370 &cam_cc_mclk6_clk_src.clkr.hw,
2371 },
2372 .num_parents = 1,
2373 .flags = CLK_SET_RATE_PARENT,
2374 .ops = &clk_branch2_ops,
2375 },
2376 },
2377};
2378
2379static struct clk_branch cam_cc_mclk7_clk = {
2380 .halt_reg = 0x150dc,
2381 .halt_check = BRANCH_HALT,
2382 .clkr = {
2383 .enable_reg = 0x150dc,
2384 .enable_mask = BIT(0),
2385 .hw.init = &(const struct clk_init_data) {
2386 .name = "cam_cc_mclk7_clk",
2387 .parent_hws = (const struct clk_hw*[]) {
2388 &cam_cc_mclk7_clk_src.clkr.hw,
2389 },
2390 .num_parents = 1,
2391 .flags = CLK_SET_RATE_PARENT,
2392 .ops = &clk_branch2_ops,
2393 },
2394 },
2395};
2396
2397static struct clk_branch cam_cc_qdss_debug_clk = {
2398 .halt_reg = 0x131d4,
2399 .halt_check = BRANCH_HALT,
2400 .clkr = {
2401 .enable_reg = 0x131d4,
2402 .enable_mask = BIT(0),
2403 .hw.init = &(const struct clk_init_data) {
2404 .name = "cam_cc_qdss_debug_clk",
2405 .parent_hws = (const struct clk_hw*[]) {
2406 &cam_cc_qdss_debug_clk_src.clkr.hw,
2407 },
2408 .num_parents = 1,
2409 .flags = CLK_SET_RATE_PARENT,
2410 .ops = &clk_branch2_ops,
2411 },
2412 },
2413};
2414
2415static struct clk_branch cam_cc_qdss_debug_xo_clk = {
2416 .halt_reg = 0x131d8,
2417 .halt_check = BRANCH_HALT,
2418 .clkr = {
2419 .enable_reg = 0x131d8,
2420 .enable_mask = BIT(0),
2421 .hw.init = &(const struct clk_init_data) {
2422 .name = "cam_cc_qdss_debug_xo_clk",
2423 .parent_hws = (const struct clk_hw*[]) {
2424 &cam_cc_xo_clk_src.clkr.hw,
2425 },
2426 .num_parents = 1,
2427 .flags = CLK_SET_RATE_PARENT,
2428 .ops = &clk_branch2_ops,
2429 },
2430 },
2431};
2432
2433static struct clk_branch cam_cc_sbi_ahb_clk = {
2434 .halt_reg = 0x100f0,
2435 .halt_check = BRANCH_HALT,
2436 .clkr = {
2437 .enable_reg = 0x100f0,
2438 .enable_mask = BIT(0),
2439 .hw.init = &(const struct clk_init_data) {
2440 .name = "cam_cc_sbi_ahb_clk",
2441 .parent_hws = (const struct clk_hw*[]) {
2442 &cam_cc_slow_ahb_clk_src.clkr.hw,
2443 },
2444 .num_parents = 1,
2445 .flags = CLK_SET_RATE_PARENT,
2446 .ops = &clk_branch2_ops,
2447 },
2448 },
2449};
2450
2451static struct clk_branch cam_cc_sbi_clk = {
2452 .halt_reg = 0x100e4,
2453 .halt_check = BRANCH_HALT,
2454 .clkr = {
2455 .enable_reg = 0x100e4,
2456 .enable_mask = BIT(0),
2457 .hw.init = &(const struct clk_init_data) {
2458 .name = "cam_cc_sbi_clk",
2459 .parent_hws = (const struct clk_hw*[]) {
2460 &cam_cc_ife_0_clk_src.clkr.hw,
2461 },
2462 .num_parents = 1,
2463 .flags = CLK_SET_RATE_PARENT,
2464 .ops = &clk_branch2_ops,
2465 },
2466 },
2467};
2468
2469static struct clk_branch cam_cc_sfe_0_clk = {
2470 .halt_reg = 0x1307c,
2471 .halt_check = BRANCH_HALT,
2472 .clkr = {
2473 .enable_reg = 0x1307c,
2474 .enable_mask = BIT(0),
2475 .hw.init = &(const struct clk_init_data) {
2476 .name = "cam_cc_sfe_0_clk",
2477 .parent_hws = (const struct clk_hw*[]) {
2478 &cam_cc_sfe_0_clk_src.clkr.hw,
2479 },
2480 .num_parents = 1,
2481 .flags = CLK_SET_RATE_PARENT,
2482 .ops = &clk_branch2_ops,
2483 },
2484 },
2485};
2486
2487static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = {
2488 .halt_reg = 0x13090,
2489 .halt_check = BRANCH_HALT,
2490 .clkr = {
2491 .enable_reg = 0x13090,
2492 .enable_mask = BIT(0),
2493 .hw.init = &(const struct clk_init_data) {
2494 .name = "cam_cc_sfe_0_fast_ahb_clk",
2495 .parent_hws = (const struct clk_hw*[]) {
2496 &cam_cc_fast_ahb_clk_src.clkr.hw,
2497 },
2498 .num_parents = 1,
2499 .flags = CLK_SET_RATE_PARENT,
2500 .ops = &clk_branch2_ops,
2501 },
2502 },
2503};
2504
2505static struct clk_branch cam_cc_sfe_1_clk = {
2506 .halt_reg = 0x130c4,
2507 .halt_check = BRANCH_HALT,
2508 .clkr = {
2509 .enable_reg = 0x130c4,
2510 .enable_mask = BIT(0),
2511 .hw.init = &(const struct clk_init_data) {
2512 .name = "cam_cc_sfe_1_clk",
2513 .parent_hws = (const struct clk_hw*[]) {
2514 &cam_cc_sfe_1_clk_src.clkr.hw,
2515 },
2516 .num_parents = 1,
2517 .flags = CLK_SET_RATE_PARENT,
2518 .ops = &clk_branch2_ops,
2519 },
2520 },
2521};
2522
2523static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = {
2524 .halt_reg = 0x130d8,
2525 .halt_check = BRANCH_HALT,
2526 .clkr = {
2527 .enable_reg = 0x130d8,
2528 .enable_mask = BIT(0),
2529 .hw.init = &(const struct clk_init_data) {
2530 .name = "cam_cc_sfe_1_fast_ahb_clk",
2531 .parent_hws = (const struct clk_hw*[]) {
2532 &cam_cc_fast_ahb_clk_src.clkr.hw,
2533 },
2534 .num_parents = 1,
2535 .flags = CLK_SET_RATE_PARENT,
2536 .ops = &clk_branch2_ops,
2537 },
2538 },
2539};
2540
2541static struct clk_branch cam_cc_sleep_clk = {
2542 .halt_reg = 0x13228,
2543 .halt_check = BRANCH_HALT,
2544 .clkr = {
2545 .enable_reg = 0x13228,
2546 .enable_mask = BIT(0),
2547 .hw.init = &(const struct clk_init_data) {
2548 .name = "cam_cc_sleep_clk",
2549 .parent_hws = (const struct clk_hw*[]) {
2550 &cam_cc_sleep_clk_src.clkr.hw,
2551 },
2552 .num_parents = 1,
2553 .flags = CLK_SET_RATE_PARENT,
2554 .ops = &clk_branch2_ops,
2555 },
2556 },
2557};
2558
2559static struct clk_regmap *cam_cc_sm8450_clocks[] = {
2560 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2561 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2562 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2563 [CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
2564 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2565 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2566 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2567 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2568 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2569 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2570 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2571 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2572 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2573 [CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr,
2574 [CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr,
2575 [CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr,
2576 [CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr,
2577 [CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr,
2578 [CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr,
2579 [CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr,
2580 [CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr,
2581 [CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr,
2582 [CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr,
2583 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2584 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2585 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2586 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2587 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2588 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2589 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2590 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2591 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2592 [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
2593 [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
2594 [CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
2595 [CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
2596 [CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr,
2597 [CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr,
2598 [CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr,
2599 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2600 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2601 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2602 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2603 [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
2604 [CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
2605 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2606 [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr,
2607 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2608 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2609 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2610 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2611 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2612 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2613 [CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr,
2614 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2615 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2616 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2617 [CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr,
2618 [CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
2619 [CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
2620 [CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr,
2621 [CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr,
2622 [CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
2623 [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
2624 [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
2625 [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
2626 [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
2627 [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
2628 [CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr,
2629 [CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr,
2630 [CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr,
2631 [CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr,
2632 [CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr,
2633 [CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr,
2634 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2635 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2636 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2637 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2638 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2639 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2640 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2641 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2642 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2643 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2644 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2645 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2646 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2647 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2648 [CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
2649 [CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
2650 [CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
2651 [CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
2652 [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2653 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2654 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2655 [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2656 [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
2657 [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2658 [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2659 [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
2660 [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2661 [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
2662 [CAM_CC_PLL5] = &cam_cc_pll5.clkr,
2663 [CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
2664 [CAM_CC_PLL6] = &cam_cc_pll6.clkr,
2665 [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
2666 [CAM_CC_PLL7] = &cam_cc_pll7.clkr,
2667 [CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr,
2668 [CAM_CC_PLL8] = &cam_cc_pll8.clkr,
2669 [CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
2670 [CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
2671 [CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
2672 [CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
2673 [CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr,
2674 [CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
2675 [CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
2676 [CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
2677 [CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,
2678 [CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
2679 [CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
2680 [CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
2681 [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
2682 [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
2683 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2684 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2685};
2686
2687static const struct qcom_reset_map cam_cc_sm8450_resets[] = {
2688 [CAM_CC_BPS_BCR] = { 0x10000 },
2689 [CAM_CC_ICP_BCR] = { 0x13104 },
2690 [CAM_CC_IFE_0_BCR] = { 0x11000 },
2691 [CAM_CC_IFE_1_BCR] = { 0x12000 },
2692 [CAM_CC_IFE_2_BCR] = { 0x1204c },
2693 [CAM_CC_IPE_0_BCR] = { 0x10074 },
2694 [CAM_CC_QDSS_DEBUG_BCR] = { 0x131b8 },
2695 [CAM_CC_SBI_BCR] = { 0x100cc },
2696 [CAM_CC_SFE_0_BCR] = { 0x1304c },
2697 [CAM_CC_SFE_1_BCR] = { 0x13094 },
2698};
2699
2700static const struct regmap_config cam_cc_sm8450_regmap_config = {
2701 .reg_bits = 32,
2702 .reg_stride = 4,
2703 .val_bits = 32,
2704 .max_register = 0x1601c,
2705 .fast_io = true,
2706};
2707
2708static struct gdsc titan_top_gdsc;
2709
2710static struct gdsc bps_gdsc = {
2711 .gdscr = 0x10004,
2712 .pd = {
2713 .name = "bps_gdsc",
2714 },
2715 .flags = HW_CTRL | POLL_CFG_GDSCR,
2716 .pwrsts = PWRSTS_OFF_ON,
2717};
2718
2719static struct gdsc ipe_0_gdsc = {
2720 .gdscr = 0x10078,
2721 .pd = {
2722 .name = "ipe_0_gdsc",
2723 },
2724 .flags = HW_CTRL | POLL_CFG_GDSCR,
2725 .pwrsts = PWRSTS_OFF_ON,
2726};
2727
2728static struct gdsc sbi_gdsc = {
2729 .gdscr = 0x100d0,
2730 .pd = {
2731 .name = "sbi_gdsc",
2732 },
2733 .flags = POLL_CFG_GDSCR,
2734 .pwrsts = PWRSTS_OFF_ON,
2735};
2736
2737static struct gdsc ife_0_gdsc = {
2738 .gdscr = 0x11004,
2739 .pd = {
2740 .name = "ife_0_gdsc",
2741 },
2742 .flags = POLL_CFG_GDSCR,
2743 .parent = &titan_top_gdsc.pd,
2744 .pwrsts = PWRSTS_OFF_ON,
2745};
2746
2747static struct gdsc ife_1_gdsc = {
2748 .gdscr = 0x12004,
2749 .pd = {
2750 .name = "ife_1_gdsc",
2751 },
2752 .flags = POLL_CFG_GDSCR,
2753 .parent = &titan_top_gdsc.pd,
2754 .pwrsts = PWRSTS_OFF_ON,
2755};
2756
2757static struct gdsc ife_2_gdsc = {
2758 .gdscr = 0x12050,
2759 .pd = {
2760 .name = "ife_2_gdsc",
2761 },
2762 .flags = POLL_CFG_GDSCR,
2763 .parent = &titan_top_gdsc.pd,
2764 .pwrsts = PWRSTS_OFF_ON,
2765};
2766
2767static struct gdsc sfe_0_gdsc = {
2768 .gdscr = 0x13050,
2769 .pd = {
2770 .name = "sfe_0_gdsc",
2771 },
2772 .flags = POLL_CFG_GDSCR,
2773 .parent = &titan_top_gdsc.pd,
2774 .pwrsts = PWRSTS_OFF_ON,
2775};
2776
2777static struct gdsc sfe_1_gdsc = {
2778 .gdscr = 0x13098,
2779 .pd = {
2780 .name = "sfe_1_gdsc",
2781 },
2782 .flags = POLL_CFG_GDSCR,
2783 .parent = &titan_top_gdsc.pd,
2784 .pwrsts = PWRSTS_OFF_ON,
2785};
2786
2787static struct gdsc titan_top_gdsc = {
2788 .gdscr = 0x131dc,
2789 .pd = {
2790 .name = "titan_top_gdsc",
2791 },
2792 .flags = POLL_CFG_GDSCR,
2793 .pwrsts = PWRSTS_OFF_ON,
2794};
2795
2796static struct gdsc *cam_cc_sm8450_gdscs[] = {
2797 [BPS_GDSC] = &bps_gdsc,
2798 [IPE_0_GDSC] = &ipe_0_gdsc,
2799 [SBI_GDSC] = &sbi_gdsc,
2800 [IFE_0_GDSC] = &ife_0_gdsc,
2801 [IFE_1_GDSC] = &ife_1_gdsc,
2802 [IFE_2_GDSC] = &ife_2_gdsc,
2803 [SFE_0_GDSC] = &sfe_0_gdsc,
2804 [SFE_1_GDSC] = &sfe_1_gdsc,
2805 [TITAN_TOP_GDSC] = &titan_top_gdsc,
2806};
2807
2808static const struct qcom_cc_desc cam_cc_sm8450_desc = {
2809 .config = &cam_cc_sm8450_regmap_config,
2810 .clks = cam_cc_sm8450_clocks,
2811 .num_clks = ARRAY_SIZE(cam_cc_sm8450_clocks),
2812 .resets = cam_cc_sm8450_resets,
2813 .num_resets = ARRAY_SIZE(cam_cc_sm8450_resets),
2814 .gdscs = cam_cc_sm8450_gdscs,
2815 .num_gdscs = ARRAY_SIZE(cam_cc_sm8450_gdscs),
2816};
2817
2818static const struct of_device_id cam_cc_sm8450_match_table[] = {
2819 { .compatible = "qcom,sm8450-camcc" },
2820 { }
2821};
2822MODULE_DEVICE_TABLE(of, cam_cc_sm8450_match_table);
2823
2824static int cam_cc_sm8450_probe(struct platform_device *pdev)
2825{
2826 struct regmap *regmap;
2827
2828 regmap = qcom_cc_map(pdev, desc: &cam_cc_sm8450_desc);
2829 if (IS_ERR(ptr: regmap))
2830 return PTR_ERR(ptr: regmap);
2831
2832 clk_lucid_evo_pll_configure(pll: &cam_cc_pll0, regmap, config: &cam_cc_pll0_config);
2833 clk_lucid_evo_pll_configure(pll: &cam_cc_pll1, regmap, config: &cam_cc_pll1_config);
2834 clk_rivian_evo_pll_configure(pll: &cam_cc_pll2, regmap, config: &cam_cc_pll2_config);
2835 clk_lucid_evo_pll_configure(pll: &cam_cc_pll3, regmap, config: &cam_cc_pll3_config);
2836 clk_lucid_evo_pll_configure(pll: &cam_cc_pll4, regmap, config: &cam_cc_pll4_config);
2837 clk_lucid_evo_pll_configure(pll: &cam_cc_pll5, regmap, config: &cam_cc_pll5_config);
2838 clk_lucid_evo_pll_configure(pll: &cam_cc_pll6, regmap, config: &cam_cc_pll6_config);
2839 clk_lucid_evo_pll_configure(pll: &cam_cc_pll7, regmap, config: &cam_cc_pll7_config);
2840 clk_lucid_evo_pll_configure(pll: &cam_cc_pll8, regmap, config: &cam_cc_pll8_config);
2841
2842 return qcom_cc_really_probe(pdev, desc: &cam_cc_sm8450_desc, regmap);
2843}
2844
2845static struct platform_driver cam_cc_sm8450_driver = {
2846 .probe = cam_cc_sm8450_probe,
2847 .driver = {
2848 .name = "camcc-sm8450",
2849 .of_match_table = cam_cc_sm8450_match_table,
2850 },
2851};
2852
2853module_platform_driver(cam_cc_sm8450_driver);
2854
2855MODULE_DESCRIPTION("QCOM CAMCC SM8450 Driver");
2856MODULE_LICENSE("GPL");
2857

source code of linux/drivers/clk/qcom/camcc-sm8450.c