1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2023, Qualcomm Innovation Center, Inc. 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/pm_runtime.h>
11#include <linux/regmap.h>
12
13#include <dt-bindings/clock/qcom,sm8550-camcc.h>
14
15#include "clk-alpha-pll.h"
16#include "clk-branch.h"
17#include "clk-rcg.h"
18#include "clk-regmap.h"
19#include "common.h"
20#include "gdsc.h"
21#include "reset.h"
22
23enum {
24	DT_IFACE,
25	DT_BI_TCXO,
26	DT_BI_TCXO_AO,
27	DT_SLEEP_CLK,
28};
29
30enum {
31	P_BI_TCXO,
32	P_BI_TCXO_AO,
33	P_CAM_CC_PLL0_OUT_EVEN,
34	P_CAM_CC_PLL0_OUT_MAIN,
35	P_CAM_CC_PLL0_OUT_ODD,
36	P_CAM_CC_PLL1_OUT_EVEN,
37	P_CAM_CC_PLL2_OUT_EVEN,
38	P_CAM_CC_PLL2_OUT_MAIN,
39	P_CAM_CC_PLL3_OUT_EVEN,
40	P_CAM_CC_PLL4_OUT_EVEN,
41	P_CAM_CC_PLL5_OUT_EVEN,
42	P_CAM_CC_PLL6_OUT_EVEN,
43	P_CAM_CC_PLL7_OUT_EVEN,
44	P_CAM_CC_PLL8_OUT_EVEN,
45	P_CAM_CC_PLL9_OUT_EVEN,
46	P_CAM_CC_PLL9_OUT_ODD,
47	P_CAM_CC_PLL10_OUT_EVEN,
48	P_CAM_CC_PLL11_OUT_EVEN,
49	P_CAM_CC_PLL12_OUT_EVEN,
50	P_SLEEP_CLK,
51};
52
53static const struct pll_vco lucid_ole_vco[] = {
54	{ 249600000, 2300000000, 0 },
55};
56
57static const struct pll_vco rivian_ole_vco[] = {
58	{ 777000000, 1285000000, 0 },
59};
60
61static const struct alpha_pll_config cam_cc_pll0_config = {
62	.l = 0x3e,
63	.alpha = 0x8000,
64	.config_ctl_val = 0x20485699,
65	.config_ctl_hi_val = 0x00182261,
66	.config_ctl_hi1_val = 0x82aa299c,
67	.test_ctl_val = 0x00000000,
68	.test_ctl_hi_val = 0x00000003,
69	.test_ctl_hi1_val = 0x00009000,
70	.test_ctl_hi2_val = 0x00000034,
71	.user_ctl_val = 0x00008400,
72	.user_ctl_hi_val = 0x00000005,
73};
74
75static struct clk_alpha_pll cam_cc_pll0 = {
76	.offset = 0x0,
77	.vco_table = lucid_ole_vco,
78	.num_vco = ARRAY_SIZE(lucid_ole_vco),
79	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
80	.clkr = {
81		.hw.init = &(const struct clk_init_data) {
82			.name = "cam_cc_pll0",
83			.parent_data = &(const struct clk_parent_data) {
84				.index = DT_BI_TCXO,
85			},
86			.num_parents = 1,
87			.ops = &clk_alpha_pll_lucid_evo_ops,
88		},
89	},
90};
91
92static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
93	{ 0x1, 2 },
94	{ }
95};
96
97static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
98	.offset = 0x0,
99	.post_div_shift = 10,
100	.post_div_table = post_div_table_cam_cc_pll0_out_even,
101	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
102	.width = 4,
103	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
104	.clkr.hw.init = &(const struct clk_init_data) {
105		.name = "cam_cc_pll0_out_even",
106		.parent_hws = (const struct clk_hw*[]) {
107			&cam_cc_pll0.clkr.hw,
108		},
109		.num_parents = 1,
110		.flags = CLK_SET_RATE_PARENT,
111		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
112	},
113};
114
115static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
116	{ 0x2, 3 },
117	{ }
118};
119
120static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
121	.offset = 0x0,
122	.post_div_shift = 14,
123	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
124	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
125	.width = 4,
126	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
127	.clkr.hw.init = &(const struct clk_init_data) {
128		.name = "cam_cc_pll0_out_odd",
129		.parent_hws = (const struct clk_hw*[]) {
130			&cam_cc_pll0.clkr.hw,
131		},
132		.num_parents = 1,
133		.flags = CLK_SET_RATE_PARENT,
134		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
135	},
136};
137
138static const struct alpha_pll_config cam_cc_pll1_config = {
139	.l = 0x2f,
140	.alpha = 0x6555,
141	.config_ctl_val = 0x20485699,
142	.config_ctl_hi_val = 0x00182261,
143	.config_ctl_hi1_val = 0x82aa299c,
144	.test_ctl_val = 0x00000000,
145	.test_ctl_hi_val = 0x00000003,
146	.test_ctl_hi1_val = 0x00009000,
147	.test_ctl_hi2_val = 0x00000034,
148	.user_ctl_val = 0x00000400,
149	.user_ctl_hi_val = 0x00000005,
150};
151
152static struct clk_alpha_pll cam_cc_pll1 = {
153	.offset = 0x1000,
154	.vco_table = lucid_ole_vco,
155	.num_vco = ARRAY_SIZE(lucid_ole_vco),
156	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
157	.clkr = {
158		.hw.init = &(const struct clk_init_data) {
159			.name = "cam_cc_pll1",
160			.parent_data = &(const struct clk_parent_data) {
161				.index = DT_BI_TCXO,
162			},
163			.num_parents = 1,
164			.ops = &clk_alpha_pll_lucid_evo_ops,
165		},
166	},
167};
168
169static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
170	{ 0x1, 2 },
171	{ }
172};
173
174static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
175	.offset = 0x1000,
176	.post_div_shift = 10,
177	.post_div_table = post_div_table_cam_cc_pll1_out_even,
178	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
179	.width = 4,
180	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
181	.clkr.hw.init = &(const struct clk_init_data) {
182		.name = "cam_cc_pll1_out_even",
183		.parent_hws = (const struct clk_hw*[]) {
184			&cam_cc_pll1.clkr.hw,
185		},
186		.num_parents = 1,
187		.flags = CLK_SET_RATE_PARENT,
188		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
189	},
190};
191
192static const struct alpha_pll_config cam_cc_pll2_config = {
193	.l = 0x32,
194	.alpha = 0x0,
195	.config_ctl_val = 0x10000030,
196	.config_ctl_hi_val = 0x80890263,
197	.config_ctl_hi1_val = 0x00000217,
198	.user_ctl_val = 0x00000000,
199	.user_ctl_hi_val = 0x00100000,
200};
201
202static struct clk_alpha_pll cam_cc_pll2 = {
203	.offset = 0x2000,
204	.vco_table = rivian_ole_vco,
205	.num_vco = ARRAY_SIZE(rivian_ole_vco),
206	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
207	.clkr = {
208		.hw.init = &(const struct clk_init_data) {
209			.name = "cam_cc_pll2",
210			.parent_data = &(const struct clk_parent_data) {
211				.index = DT_BI_TCXO,
212			},
213			.num_parents = 1,
214			.ops = &clk_alpha_pll_rivian_evo_ops,
215		},
216	},
217};
218
219static const struct alpha_pll_config cam_cc_pll3_config = {
220	.l = 0x30,
221	.alpha = 0x8aaa,
222	.config_ctl_val = 0x20485699,
223	.config_ctl_hi_val = 0x00182261,
224	.config_ctl_hi1_val = 0x82aa299c,
225	.test_ctl_val = 0x00000000,
226	.test_ctl_hi_val = 0x00000003,
227	.test_ctl_hi1_val = 0x00009000,
228	.test_ctl_hi2_val = 0x00000034,
229	.user_ctl_val = 0x00000400,
230	.user_ctl_hi_val = 0x00000005,
231};
232
233static struct clk_alpha_pll cam_cc_pll3 = {
234	.offset = 0x3000,
235	.vco_table = lucid_ole_vco,
236	.num_vco = ARRAY_SIZE(lucid_ole_vco),
237	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
238	.clkr = {
239		.hw.init = &(const struct clk_init_data) {
240			.name = "cam_cc_pll3",
241			.parent_data = &(const struct clk_parent_data) {
242				.index = DT_BI_TCXO,
243			},
244			.num_parents = 1,
245			.ops = &clk_alpha_pll_lucid_evo_ops,
246		},
247	},
248};
249
250static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
251	{ 0x1, 2 },
252	{ }
253};
254
255static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
256	.offset = 0x3000,
257	.post_div_shift = 10,
258	.post_div_table = post_div_table_cam_cc_pll3_out_even,
259	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
260	.width = 4,
261	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
262	.clkr.hw.init = &(const struct clk_init_data) {
263		.name = "cam_cc_pll3_out_even",
264		.parent_hws = (const struct clk_hw*[]) {
265			&cam_cc_pll3.clkr.hw,
266		},
267		.num_parents = 1,
268		.flags = CLK_SET_RATE_PARENT,
269		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
270	},
271};
272
273static const struct alpha_pll_config cam_cc_pll4_config = {
274	.l = 0x30,
275	.alpha = 0x8aaa,
276	.config_ctl_val = 0x20485699,
277	.config_ctl_hi_val = 0x00182261,
278	.config_ctl_hi1_val = 0x82aa299c,
279	.test_ctl_val = 0x00000000,
280	.test_ctl_hi_val = 0x00000003,
281	.test_ctl_hi1_val = 0x00009000,
282	.test_ctl_hi2_val = 0x00000034,
283	.user_ctl_val = 0x00000400,
284	.user_ctl_hi_val = 0x00000005,
285};
286
287static struct clk_alpha_pll cam_cc_pll4 = {
288	.offset = 0x4000,
289	.vco_table = lucid_ole_vco,
290	.num_vco = ARRAY_SIZE(lucid_ole_vco),
291	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
292	.clkr = {
293		.hw.init = &(const struct clk_init_data) {
294			.name = "cam_cc_pll4",
295			.parent_data = &(const struct clk_parent_data) {
296				.index = DT_BI_TCXO,
297			},
298			.num_parents = 1,
299			.ops = &clk_alpha_pll_lucid_evo_ops,
300		},
301	},
302};
303
304static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
305	{ 0x1, 2 },
306	{ }
307};
308
309static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
310	.offset = 0x4000,
311	.post_div_shift = 10,
312	.post_div_table = post_div_table_cam_cc_pll4_out_even,
313	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
314	.width = 4,
315	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
316	.clkr.hw.init = &(const struct clk_init_data) {
317		.name = "cam_cc_pll4_out_even",
318		.parent_hws = (const struct clk_hw*[]) {
319			&cam_cc_pll4.clkr.hw,
320		},
321		.num_parents = 1,
322		.flags = CLK_SET_RATE_PARENT,
323		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
324	},
325};
326
327static const struct alpha_pll_config cam_cc_pll5_config = {
328	.l = 0x30,
329	.alpha = 0x8aaa,
330	.config_ctl_val = 0x20485699,
331	.config_ctl_hi_val = 0x00182261,
332	.config_ctl_hi1_val = 0x82aa299c,
333	.test_ctl_val = 0x00000000,
334	.test_ctl_hi_val = 0x00000003,
335	.test_ctl_hi1_val = 0x00009000,
336	.test_ctl_hi2_val = 0x00000034,
337	.user_ctl_val = 0x00000400,
338	.user_ctl_hi_val = 0x00000005,
339};
340
341static struct clk_alpha_pll cam_cc_pll5 = {
342	.offset = 0x5000,
343	.vco_table = lucid_ole_vco,
344	.num_vco = ARRAY_SIZE(lucid_ole_vco),
345	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
346	.clkr = {
347		.hw.init = &(const struct clk_init_data) {
348			.name = "cam_cc_pll5",
349			.parent_data = &(const struct clk_parent_data) {
350				.index = DT_BI_TCXO,
351			},
352			.num_parents = 1,
353			.ops = &clk_alpha_pll_lucid_evo_ops,
354		},
355	},
356};
357
358static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
359	{ 0x1, 2 },
360	{ }
361};
362
363static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
364	.offset = 0x5000,
365	.post_div_shift = 10,
366	.post_div_table = post_div_table_cam_cc_pll5_out_even,
367	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
368	.width = 4,
369	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
370	.clkr.hw.init = &(const struct clk_init_data) {
371		.name = "cam_cc_pll5_out_even",
372		.parent_hws = (const struct clk_hw*[]) {
373			&cam_cc_pll5.clkr.hw,
374		},
375		.num_parents = 1,
376		.flags = CLK_SET_RATE_PARENT,
377		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
378	},
379};
380
381static const struct alpha_pll_config cam_cc_pll6_config = {
382	.l = 0x30,
383	.alpha = 0x8aaa,
384	.config_ctl_val = 0x20485699,
385	.config_ctl_hi_val = 0x00182261,
386	.config_ctl_hi1_val = 0x82aa299c,
387	.test_ctl_val = 0x00000000,
388	.test_ctl_hi_val = 0x00000003,
389	.test_ctl_hi1_val = 0x00009000,
390	.test_ctl_hi2_val = 0x00000034,
391	.user_ctl_val = 0x00000400,
392	.user_ctl_hi_val = 0x00000005,
393};
394
395static struct clk_alpha_pll cam_cc_pll6 = {
396	.offset = 0x6000,
397	.vco_table = lucid_ole_vco,
398	.num_vco = ARRAY_SIZE(lucid_ole_vco),
399	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
400	.clkr = {
401		.hw.init = &(const struct clk_init_data) {
402			.name = "cam_cc_pll6",
403			.parent_data = &(const struct clk_parent_data) {
404				.index = DT_BI_TCXO,
405			},
406			.num_parents = 1,
407			.ops = &clk_alpha_pll_lucid_evo_ops,
408		},
409	},
410};
411
412static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
413	{ 0x1, 2 },
414	{ }
415};
416
417static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
418	.offset = 0x6000,
419	.post_div_shift = 10,
420	.post_div_table = post_div_table_cam_cc_pll6_out_even,
421	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
422	.width = 4,
423	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
424	.clkr.hw.init = &(const struct clk_init_data) {
425		.name = "cam_cc_pll6_out_even",
426		.parent_hws = (const struct clk_hw*[]) {
427			&cam_cc_pll6.clkr.hw,
428		},
429		.num_parents = 1,
430		.flags = CLK_SET_RATE_PARENT,
431		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
432	},
433};
434
435static const struct alpha_pll_config cam_cc_pll7_config = {
436	.l = 0x30,
437	.alpha = 0x8aaa,
438	.config_ctl_val = 0x20485699,
439	.config_ctl_hi_val = 0x00182261,
440	.config_ctl_hi1_val = 0x82aa299c,
441	.test_ctl_val = 0x00000000,
442	.test_ctl_hi_val = 0x00000003,
443	.test_ctl_hi1_val = 0x00009000,
444	.test_ctl_hi2_val = 0x00000034,
445	.user_ctl_val = 0x00000400,
446	.user_ctl_hi_val = 0x00000005,
447};
448
449static struct clk_alpha_pll cam_cc_pll7 = {
450	.offset = 0x7000,
451	.vco_table = lucid_ole_vco,
452	.num_vco = ARRAY_SIZE(lucid_ole_vco),
453	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
454	.clkr = {
455		.hw.init = &(const struct clk_init_data) {
456			.name = "cam_cc_pll7",
457			.parent_data = &(const struct clk_parent_data) {
458				.index = DT_BI_TCXO,
459			},
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_pll7_out_even[] = {
467	{ 0x1, 2 },
468	{ }
469};
470
471static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = {
472	.offset = 0x7000,
473	.post_div_shift = 10,
474	.post_div_table = post_div_table_cam_cc_pll7_out_even,
475	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even),
476	.width = 4,
477	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
478	.clkr.hw.init = &(const struct clk_init_data) {
479		.name = "cam_cc_pll7_out_even",
480		.parent_hws = (const struct clk_hw*[]) {
481			&cam_cc_pll7.clkr.hw,
482		},
483		.num_parents = 1,
484		.flags = CLK_SET_RATE_PARENT,
485		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
486	},
487};
488
489static const struct alpha_pll_config cam_cc_pll8_config = {
490	.l = 0x14,
491	.alpha = 0xd555,
492	.config_ctl_val = 0x20485699,
493	.config_ctl_hi_val = 0x00182261,
494	.config_ctl_hi1_val = 0x82aa299c,
495	.test_ctl_val = 0x00000000,
496	.test_ctl_hi_val = 0x00000003,
497	.test_ctl_hi1_val = 0x00009000,
498	.test_ctl_hi2_val = 0x00000034,
499	.user_ctl_val = 0x00000400,
500	.user_ctl_hi_val = 0x00000005,
501};
502
503static struct clk_alpha_pll cam_cc_pll8 = {
504	.offset = 0x8000,
505	.vco_table = lucid_ole_vco,
506	.num_vco = ARRAY_SIZE(lucid_ole_vco),
507	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
508	.clkr = {
509		.hw.init = &(const struct clk_init_data) {
510			.name = "cam_cc_pll8",
511			.parent_data = &(const struct clk_parent_data) {
512				.index = DT_BI_TCXO,
513			},
514			.num_parents = 1,
515			.ops = &clk_alpha_pll_lucid_evo_ops,
516		},
517	},
518};
519
520static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = {
521	{ 0x1, 2 },
522	{ }
523};
524
525static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = {
526	.offset = 0x8000,
527	.post_div_shift = 10,
528	.post_div_table = post_div_table_cam_cc_pll8_out_even,
529	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even),
530	.width = 4,
531	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
532	.clkr.hw.init = &(const struct clk_init_data) {
533		.name = "cam_cc_pll8_out_even",
534		.parent_hws = (const struct clk_hw*[]) {
535			&cam_cc_pll8.clkr.hw,
536		},
537		.num_parents = 1,
538		.flags = CLK_SET_RATE_PARENT,
539		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
540	},
541};
542
543static const struct alpha_pll_config cam_cc_pll9_config = {
544	.l = 0x32,
545	.alpha = 0x0,
546	.config_ctl_val = 0x20485699,
547	.config_ctl_hi_val = 0x00182261,
548	.config_ctl_hi1_val = 0x82aa299c,
549	.test_ctl_val = 0x00000000,
550	.test_ctl_hi_val = 0x00000003,
551	.test_ctl_hi1_val = 0x00009000,
552	.test_ctl_hi2_val = 0x00000034,
553	.user_ctl_val = 0x00000400,
554	.user_ctl_hi_val = 0x00000005,
555};
556
557static struct clk_alpha_pll cam_cc_pll9 = {
558	.offset = 0x9000,
559	.vco_table = lucid_ole_vco,
560	.num_vco = ARRAY_SIZE(lucid_ole_vco),
561	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
562	.clkr = {
563		.hw.init = &(const struct clk_init_data) {
564			.name = "cam_cc_pll9",
565			.parent_data = &(const struct clk_parent_data) {
566				.index = DT_BI_TCXO,
567			},
568			.num_parents = 1,
569			.ops = &clk_alpha_pll_lucid_evo_ops,
570		},
571	},
572};
573
574static const struct clk_div_table post_div_table_cam_cc_pll9_out_even[] = {
575	{ 0x1, 2 },
576	{ }
577};
578
579static struct clk_alpha_pll_postdiv cam_cc_pll9_out_even = {
580	.offset = 0x9000,
581	.post_div_shift = 10,
582	.post_div_table = post_div_table_cam_cc_pll9_out_even,
583	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll9_out_even),
584	.width = 4,
585	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
586	.clkr.hw.init = &(const struct clk_init_data) {
587		.name = "cam_cc_pll9_out_even",
588		.parent_hws = (const struct clk_hw*[]) {
589			&cam_cc_pll9.clkr.hw,
590		},
591		.num_parents = 1,
592		.flags = CLK_SET_RATE_PARENT,
593		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
594	},
595};
596
597static const struct alpha_pll_config cam_cc_pll10_config = {
598	.l = 0x30,
599	.alpha = 0x8aaa,
600	.config_ctl_val = 0x20485699,
601	.config_ctl_hi_val = 0x00182261,
602	.config_ctl_hi1_val = 0x82aa299c,
603	.test_ctl_val = 0x00000000,
604	.test_ctl_hi_val = 0x00000003,
605	.test_ctl_hi1_val = 0x00009000,
606	.test_ctl_hi2_val = 0x00000034,
607	.user_ctl_val = 0x00000400,
608	.user_ctl_hi_val = 0x00000005,
609};
610
611static struct clk_alpha_pll cam_cc_pll10 = {
612	.offset = 0xa000,
613	.vco_table = lucid_ole_vco,
614	.num_vco = ARRAY_SIZE(lucid_ole_vco),
615	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
616	.clkr = {
617		.hw.init = &(const struct clk_init_data) {
618			.name = "cam_cc_pll10",
619			.parent_data = &(const struct clk_parent_data) {
620				.index = DT_BI_TCXO,
621			},
622			.num_parents = 1,
623			.ops = &clk_alpha_pll_lucid_evo_ops,
624		},
625	},
626};
627
628static const struct clk_div_table post_div_table_cam_cc_pll10_out_even[] = {
629	{ 0x1, 2 },
630	{ }
631};
632
633static struct clk_alpha_pll_postdiv cam_cc_pll10_out_even = {
634	.offset = 0xa000,
635	.post_div_shift = 10,
636	.post_div_table = post_div_table_cam_cc_pll10_out_even,
637	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll10_out_even),
638	.width = 4,
639	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
640	.clkr.hw.init = &(const struct clk_init_data) {
641		.name = "cam_cc_pll10_out_even",
642		.parent_hws = (const struct clk_hw*[]) {
643			&cam_cc_pll10.clkr.hw,
644		},
645		.num_parents = 1,
646		.flags = CLK_SET_RATE_PARENT,
647		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
648	},
649};
650
651static const struct alpha_pll_config cam_cc_pll11_config = {
652	.l = 0x30,
653	.alpha = 0x8aaa,
654	.config_ctl_val = 0x20485699,
655	.config_ctl_hi_val = 0x00182261,
656	.config_ctl_hi1_val = 0x82aa299c,
657	.test_ctl_val = 0x00000000,
658	.test_ctl_hi_val = 0x00000003,
659	.test_ctl_hi1_val = 0x00009000,
660	.test_ctl_hi2_val = 0x00000034,
661	.user_ctl_val = 0x00000400,
662	.user_ctl_hi_val = 0x00000005,
663};
664
665static struct clk_alpha_pll cam_cc_pll11 = {
666	.offset = 0xb000,
667	.vco_table = lucid_ole_vco,
668	.num_vco = ARRAY_SIZE(lucid_ole_vco),
669	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
670	.clkr = {
671		.hw.init = &(const struct clk_init_data) {
672			.name = "cam_cc_pll11",
673			.parent_data = &(const struct clk_parent_data) {
674				.index = DT_BI_TCXO,
675			},
676			.num_parents = 1,
677			.ops = &clk_alpha_pll_lucid_evo_ops,
678		},
679	},
680};
681
682static const struct clk_div_table post_div_table_cam_cc_pll11_out_even[] = {
683	{ 0x1, 2 },
684	{ }
685};
686
687static struct clk_alpha_pll_postdiv cam_cc_pll11_out_even = {
688	.offset = 0xb000,
689	.post_div_shift = 10,
690	.post_div_table = post_div_table_cam_cc_pll11_out_even,
691	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll11_out_even),
692	.width = 4,
693	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
694	.clkr.hw.init = &(const struct clk_init_data) {
695		.name = "cam_cc_pll11_out_even",
696		.parent_hws = (const struct clk_hw*[]) {
697			&cam_cc_pll11.clkr.hw,
698		},
699		.num_parents = 1,
700		.flags = CLK_SET_RATE_PARENT,
701		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
702	},
703};
704
705static const struct alpha_pll_config cam_cc_pll12_config = {
706	.l = 0x30,
707	.alpha = 0x8aaa,
708	.config_ctl_val = 0x20485699,
709	.config_ctl_hi_val = 0x00182261,
710	.config_ctl_hi1_val = 0x82aa299c,
711	.test_ctl_val = 0x00000000,
712	.test_ctl_hi_val = 0x00000003,
713	.test_ctl_hi1_val = 0x00009000,
714	.test_ctl_hi2_val = 0x00000034,
715	.user_ctl_val = 0x00000400,
716	.user_ctl_hi_val = 0x00000005,
717};
718
719static struct clk_alpha_pll cam_cc_pll12 = {
720	.offset = 0xc000,
721	.vco_table = lucid_ole_vco,
722	.num_vco = ARRAY_SIZE(lucid_ole_vco),
723	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
724	.clkr = {
725		.hw.init = &(const struct clk_init_data) {
726			.name = "cam_cc_pll12",
727			.parent_data = &(const struct clk_parent_data) {
728				.index = DT_BI_TCXO,
729			},
730			.num_parents = 1,
731			.ops = &clk_alpha_pll_lucid_evo_ops,
732		},
733	},
734};
735
736static const struct clk_div_table post_div_table_cam_cc_pll12_out_even[] = {
737	{ 0x1, 2 },
738	{ }
739};
740
741static struct clk_alpha_pll_postdiv cam_cc_pll12_out_even = {
742	.offset = 0xc000,
743	.post_div_shift = 10,
744	.post_div_table = post_div_table_cam_cc_pll12_out_even,
745	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll12_out_even),
746	.width = 4,
747	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
748	.clkr.hw.init = &(const struct clk_init_data) {
749		.name = "cam_cc_pll12_out_even",
750		.parent_hws = (const struct clk_hw*[]) {
751			&cam_cc_pll12.clkr.hw,
752		},
753		.num_parents = 1,
754		.flags = CLK_SET_RATE_PARENT,
755		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
756	},
757};
758
759static const struct parent_map cam_cc_parent_map_0[] = {
760	{ P_BI_TCXO, 0 },
761	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
762	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
763	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
764	{ P_CAM_CC_PLL9_OUT_ODD, 4 },
765	{ P_CAM_CC_PLL9_OUT_EVEN, 5 },
766};
767
768static const struct clk_parent_data cam_cc_parent_data_0[] = {
769	{ .index = DT_BI_TCXO },
770	{ .hw = &cam_cc_pll0.clkr.hw },
771	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
772	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
773	{ .hw = &cam_cc_pll9.clkr.hw },
774	{ .hw = &cam_cc_pll9_out_even.clkr.hw },
775};
776
777static const struct parent_map cam_cc_parent_map_1[] = {
778	{ P_BI_TCXO, 0 },
779	{ P_CAM_CC_PLL2_OUT_EVEN, 3 },
780	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
781};
782
783static const struct clk_parent_data cam_cc_parent_data_1[] = {
784	{ .index = DT_BI_TCXO },
785	{ .hw = &cam_cc_pll2.clkr.hw },
786	{ .hw = &cam_cc_pll2.clkr.hw },
787};
788
789static const struct parent_map cam_cc_parent_map_2[] = {
790	{ P_BI_TCXO, 0 },
791	{ P_CAM_CC_PLL8_OUT_EVEN, 6 },
792};
793
794static const struct clk_parent_data cam_cc_parent_data_2[] = {
795	{ .index = DT_BI_TCXO },
796	{ .hw = &cam_cc_pll8_out_even.clkr.hw },
797};
798
799static const struct parent_map cam_cc_parent_map_3[] = {
800	{ P_BI_TCXO, 0 },
801	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
802};
803
804static const struct clk_parent_data cam_cc_parent_data_3[] = {
805	{ .index = DT_BI_TCXO },
806	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
807};
808
809static const struct parent_map cam_cc_parent_map_4[] = {
810	{ P_BI_TCXO, 0 },
811	{ P_CAM_CC_PLL10_OUT_EVEN, 6 },
812};
813
814static const struct clk_parent_data cam_cc_parent_data_4[] = {
815	{ .index = DT_BI_TCXO },
816	{ .hw = &cam_cc_pll10_out_even.clkr.hw },
817};
818
819static const struct parent_map cam_cc_parent_map_5[] = {
820	{ P_BI_TCXO, 0 },
821	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
822};
823
824static const struct clk_parent_data cam_cc_parent_data_5[] = {
825	{ .index = DT_BI_TCXO },
826	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
827};
828
829static const struct parent_map cam_cc_parent_map_6[] = {
830	{ P_BI_TCXO, 0 },
831	{ P_CAM_CC_PLL11_OUT_EVEN, 6 },
832};
833
834static const struct clk_parent_data cam_cc_parent_data_6[] = {
835	{ .index = DT_BI_TCXO },
836	{ .hw = &cam_cc_pll11_out_even.clkr.hw },
837};
838
839static const struct parent_map cam_cc_parent_map_7[] = {
840	{ P_BI_TCXO, 0 },
841	{ P_CAM_CC_PLL5_OUT_EVEN, 6 },
842};
843
844static const struct clk_parent_data cam_cc_parent_data_7[] = {
845	{ .index = DT_BI_TCXO },
846	{ .hw = &cam_cc_pll5_out_even.clkr.hw },
847};
848
849static const struct parent_map cam_cc_parent_map_8[] = {
850	{ P_BI_TCXO, 0 },
851	{ P_CAM_CC_PLL12_OUT_EVEN, 6 },
852};
853
854static const struct clk_parent_data cam_cc_parent_data_8[] = {
855	{ .index = DT_BI_TCXO },
856	{ .hw = &cam_cc_pll12_out_even.clkr.hw },
857};
858
859static const struct parent_map cam_cc_parent_map_9[] = {
860	{ P_BI_TCXO, 0 },
861	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
862};
863
864static const struct clk_parent_data cam_cc_parent_data_9[] = {
865	{ .index = DT_BI_TCXO },
866	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
867};
868
869static const struct parent_map cam_cc_parent_map_10[] = {
870	{ P_BI_TCXO, 0 },
871	{ P_CAM_CC_PLL6_OUT_EVEN, 6 },
872};
873
874static const struct clk_parent_data cam_cc_parent_data_10[] = {
875	{ .index = DT_BI_TCXO },
876	{ .hw = &cam_cc_pll6_out_even.clkr.hw },
877};
878
879static const struct parent_map cam_cc_parent_map_11[] = {
880	{ P_BI_TCXO, 0 },
881	{ P_CAM_CC_PLL7_OUT_EVEN, 6 },
882};
883
884static const struct clk_parent_data cam_cc_parent_data_11[] = {
885	{ .index = DT_BI_TCXO },
886	{ .hw = &cam_cc_pll7_out_even.clkr.hw },
887};
888
889static const struct parent_map cam_cc_parent_map_12[] = {
890	{ P_SLEEP_CLK, 0 },
891};
892
893static const struct clk_parent_data cam_cc_parent_data_12[] = {
894	{ .index = DT_SLEEP_CLK },
895};
896
897static const struct parent_map cam_cc_parent_map_13_ao[] = {
898	{ P_BI_TCXO_AO, 0 },
899};
900
901static const struct clk_parent_data cam_cc_parent_data_13_ao[] = {
902	{ .index = DT_BI_TCXO_AO },
903};
904
905static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
906	F(19200000, P_BI_TCXO, 1, 0, 0),
907	F(200000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
908	F(400000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
909	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
910	F(785000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
911	{ }
912};
913
914static struct clk_rcg2 cam_cc_bps_clk_src = {
915	.cmd_rcgr = 0x10278,
916	.mnd_width = 0,
917	.hid_width = 5,
918	.parent_map = cam_cc_parent_map_2,
919	.freq_tbl = ftbl_cam_cc_bps_clk_src,
920	.clkr.hw.init = &(const struct clk_init_data) {
921		.name = "cam_cc_bps_clk_src",
922		.parent_data = cam_cc_parent_data_2,
923		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
924		.flags = CLK_SET_RATE_PARENT,
925		.ops = &clk_rcg2_shared_ops,
926	},
927};
928
929static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
930	F(19200000, P_BI_TCXO, 1, 0, 0),
931	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
932	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
933	{ }
934};
935
936static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
937	.cmd_rcgr = 0x13de0,
938	.mnd_width = 0,
939	.hid_width = 5,
940	.parent_map = cam_cc_parent_map_0,
941	.freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
942	.clkr.hw.init = &(const struct clk_init_data) {
943		.name = "cam_cc_camnoc_axi_clk_src",
944		.parent_data = cam_cc_parent_data_0,
945		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
946		.flags = CLK_SET_RATE_PARENT,
947		.ops = &clk_rcg2_shared_ops,
948	},
949};
950
951static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
952	F(19200000, P_BI_TCXO, 1, 0, 0),
953	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
954	{ }
955};
956
957static struct clk_rcg2 cam_cc_cci_0_clk_src = {
958	.cmd_rcgr = 0x13900,
959	.mnd_width = 8,
960	.hid_width = 5,
961	.parent_map = cam_cc_parent_map_0,
962	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
963	.clkr.hw.init = &(const struct clk_init_data) {
964		.name = "cam_cc_cci_0_clk_src",
965		.parent_data = cam_cc_parent_data_0,
966		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
967		.flags = CLK_SET_RATE_PARENT,
968		.ops = &clk_rcg2_shared_ops,
969	},
970};
971
972static struct clk_rcg2 cam_cc_cci_1_clk_src = {
973	.cmd_rcgr = 0x13a30,
974	.mnd_width = 8,
975	.hid_width = 5,
976	.parent_map = cam_cc_parent_map_0,
977	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
978	.clkr.hw.init = &(const struct clk_init_data) {
979		.name = "cam_cc_cci_1_clk_src",
980		.parent_data = cam_cc_parent_data_0,
981		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
982		.flags = CLK_SET_RATE_PARENT,
983		.ops = &clk_rcg2_shared_ops,
984	},
985};
986
987static struct clk_rcg2 cam_cc_cci_2_clk_src = {
988	.cmd_rcgr = 0x13b60,
989	.mnd_width = 8,
990	.hid_width = 5,
991	.parent_map = cam_cc_parent_map_0,
992	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
993	.clkr.hw.init = &(const struct clk_init_data) {
994		.name = "cam_cc_cci_2_clk_src",
995		.parent_data = cam_cc_parent_data_0,
996		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
997		.flags = CLK_SET_RATE_PARENT,
998		.ops = &clk_rcg2_shared_ops,
999	},
1000};
1001
1002static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
1003	F(19200000, P_BI_TCXO, 1, 0, 0),
1004	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1005	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
1006	{ }
1007};
1008
1009static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
1010	.cmd_rcgr = 0x11290,
1011	.mnd_width = 0,
1012	.hid_width = 5,
1013	.parent_map = cam_cc_parent_map_0,
1014	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
1015	.clkr.hw.init = &(const struct clk_init_data) {
1016		.name = "cam_cc_cphy_rx_clk_src",
1017		.parent_data = cam_cc_parent_data_0,
1018		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1019		.flags = CLK_SET_RATE_PARENT,
1020		.ops = &clk_rcg2_shared_ops,
1021	},
1022};
1023
1024static const struct freq_tbl ftbl_cam_cc_cre_clk_src[] = {
1025	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
1026	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1027	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1028	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
1029	{ }
1030};
1031
1032static struct clk_rcg2 cam_cc_cre_clk_src = {
1033	.cmd_rcgr = 0x1353c,
1034	.mnd_width = 0,
1035	.hid_width = 5,
1036	.parent_map = cam_cc_parent_map_0,
1037	.freq_tbl = ftbl_cam_cc_cre_clk_src,
1038	.clkr.hw.init = &(const struct clk_init_data) {
1039		.name = "cam_cc_cre_clk_src",
1040		.parent_data = cam_cc_parent_data_0,
1041		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1042		.flags = CLK_SET_RATE_PARENT,
1043		.ops = &clk_rcg2_shared_ops,
1044	},
1045};
1046
1047static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
1048	F(19200000, P_BI_TCXO, 1, 0, 0),
1049	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
1050	{ }
1051};
1052
1053static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
1054	.cmd_rcgr = 0x15980,
1055	.mnd_width = 0,
1056	.hid_width = 5,
1057	.parent_map = cam_cc_parent_map_0,
1058	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1059	.clkr.hw.init = &(const struct clk_init_data) {
1060		.name = "cam_cc_csi0phytimer_clk_src",
1061		.parent_data = cam_cc_parent_data_0,
1062		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1063		.flags = CLK_SET_RATE_PARENT,
1064		.ops = &clk_rcg2_shared_ops,
1065	},
1066};
1067
1068static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
1069	.cmd_rcgr = 0x15ab8,
1070	.mnd_width = 0,
1071	.hid_width = 5,
1072	.parent_map = cam_cc_parent_map_0,
1073	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1074	.clkr.hw.init = &(const struct clk_init_data) {
1075		.name = "cam_cc_csi1phytimer_clk_src",
1076		.parent_data = cam_cc_parent_data_0,
1077		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1078		.flags = CLK_SET_RATE_PARENT,
1079		.ops = &clk_rcg2_shared_ops,
1080	},
1081};
1082
1083static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
1084	.cmd_rcgr = 0x15bec,
1085	.mnd_width = 0,
1086	.hid_width = 5,
1087	.parent_map = cam_cc_parent_map_0,
1088	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1089	.clkr.hw.init = &(const struct clk_init_data) {
1090		.name = "cam_cc_csi2phytimer_clk_src",
1091		.parent_data = cam_cc_parent_data_0,
1092		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1093		.flags = CLK_SET_RATE_PARENT,
1094		.ops = &clk_rcg2_shared_ops,
1095	},
1096};
1097
1098static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
1099	.cmd_rcgr = 0x15d20,
1100	.mnd_width = 0,
1101	.hid_width = 5,
1102	.parent_map = cam_cc_parent_map_0,
1103	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1104	.clkr.hw.init = &(const struct clk_init_data) {
1105		.name = "cam_cc_csi3phytimer_clk_src",
1106		.parent_data = cam_cc_parent_data_0,
1107		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1108		.flags = CLK_SET_RATE_PARENT,
1109		.ops = &clk_rcg2_shared_ops,
1110	},
1111};
1112
1113static const struct freq_tbl ftbl_cam_cc_csi4phytimer_clk_src[] = {
1114	F(19200000, P_BI_TCXO, 1, 0, 0),
1115	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1116	{ }
1117};
1118
1119static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
1120	.cmd_rcgr = 0x15e54,
1121	.mnd_width = 0,
1122	.hid_width = 5,
1123	.parent_map = cam_cc_parent_map_0,
1124	.freq_tbl = ftbl_cam_cc_csi4phytimer_clk_src,
1125	.clkr.hw.init = &(const struct clk_init_data) {
1126		.name = "cam_cc_csi4phytimer_clk_src",
1127		.parent_data = cam_cc_parent_data_0,
1128		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1129		.flags = CLK_SET_RATE_PARENT,
1130		.ops = &clk_rcg2_shared_ops,
1131	},
1132};
1133
1134static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
1135	.cmd_rcgr = 0x15f88,
1136	.mnd_width = 0,
1137	.hid_width = 5,
1138	.parent_map = cam_cc_parent_map_0,
1139	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1140	.clkr.hw.init = &(const struct clk_init_data) {
1141		.name = "cam_cc_csi5phytimer_clk_src",
1142		.parent_data = cam_cc_parent_data_0,
1143		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1144		.flags = CLK_SET_RATE_PARENT,
1145		.ops = &clk_rcg2_shared_ops,
1146	},
1147};
1148
1149static struct clk_rcg2 cam_cc_csi6phytimer_clk_src = {
1150	.cmd_rcgr = 0x160bc,
1151	.mnd_width = 0,
1152	.hid_width = 5,
1153	.parent_map = cam_cc_parent_map_0,
1154	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1155	.clkr.hw.init = &(const struct clk_init_data) {
1156		.name = "cam_cc_csi6phytimer_clk_src",
1157		.parent_data = cam_cc_parent_data_0,
1158		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1159		.flags = CLK_SET_RATE_PARENT,
1160		.ops = &clk_rcg2_shared_ops,
1161	},
1162};
1163
1164static struct clk_rcg2 cam_cc_csi7phytimer_clk_src = {
1165	.cmd_rcgr = 0x161f0,
1166	.mnd_width = 0,
1167	.hid_width = 5,
1168	.parent_map = cam_cc_parent_map_0,
1169	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1170	.clkr.hw.init = &(const struct clk_init_data) {
1171		.name = "cam_cc_csi7phytimer_clk_src",
1172		.parent_data = cam_cc_parent_data_0,
1173		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1174		.flags = CLK_SET_RATE_PARENT,
1175		.ops = &clk_rcg2_shared_ops,
1176	},
1177};
1178
1179static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = {
1180	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1181	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
1182	{ }
1183};
1184
1185static struct clk_rcg2 cam_cc_csid_clk_src = {
1186	.cmd_rcgr = 0x13ca8,
1187	.mnd_width = 0,
1188	.hid_width = 5,
1189	.parent_map = cam_cc_parent_map_0,
1190	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1191	.clkr.hw.init = &(const struct clk_init_data) {
1192		.name = "cam_cc_csid_clk_src",
1193		.parent_data = cam_cc_parent_data_0,
1194		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1195		.flags = CLK_SET_RATE_PARENT,
1196		.ops = &clk_rcg2_shared_ops,
1197	},
1198};
1199
1200static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
1201	F(19200000, P_BI_TCXO, 1, 0, 0),
1202	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
1203	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1204	{ }
1205};
1206
1207static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
1208	.cmd_rcgr = 0x10018,
1209	.mnd_width = 0,
1210	.hid_width = 5,
1211	.parent_map = cam_cc_parent_map_0,
1212	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
1213	.clkr.hw.init = &(const struct clk_init_data) {
1214		.name = "cam_cc_fast_ahb_clk_src",
1215		.parent_data = cam_cc_parent_data_0,
1216		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1217		.flags = CLK_SET_RATE_PARENT,
1218		.ops = &clk_rcg2_shared_ops,
1219	},
1220};
1221
1222static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
1223	F(19200000, P_BI_TCXO, 1, 0, 0),
1224	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1225	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1226	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
1227	{ }
1228};
1229
1230static struct clk_rcg2 cam_cc_icp_clk_src = {
1231	.cmd_rcgr = 0x137c4,
1232	.mnd_width = 0,
1233	.hid_width = 5,
1234	.parent_map = cam_cc_parent_map_0,
1235	.freq_tbl = ftbl_cam_cc_icp_clk_src,
1236	.clkr.hw.init = &(const struct clk_init_data) {
1237		.name = "cam_cc_icp_clk_src",
1238		.parent_data = cam_cc_parent_data_0,
1239		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1240		.flags = CLK_SET_RATE_PARENT,
1241		.ops = &clk_rcg2_shared_ops,
1242	},
1243};
1244
1245static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
1246	F(19200000, P_BI_TCXO, 1, 0, 0),
1247	F(466000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1248	F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1249	F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1250	F(785000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1251	{ }
1252};
1253
1254static struct clk_rcg2 cam_cc_ife_0_clk_src = {
1255	.cmd_rcgr = 0x11018,
1256	.mnd_width = 0,
1257	.hid_width = 5,
1258	.parent_map = cam_cc_parent_map_3,
1259	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
1260	.clkr.hw.init = &(const struct clk_init_data) {
1261		.name = "cam_cc_ife_0_clk_src",
1262		.parent_data = cam_cc_parent_data_3,
1263		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
1264		.flags = CLK_SET_RATE_PARENT,
1265		.ops = &clk_rcg2_shared_ops,
1266	},
1267};
1268
1269static const struct freq_tbl ftbl_cam_cc_ife_0_dsp_clk_src[] = {
1270	F(466000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1271	F(594000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1272	F(675000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1273	F(785000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1274	{ }
1275};
1276
1277static struct clk_rcg2 cam_cc_ife_0_dsp_clk_src = {
1278	.cmd_rcgr = 0x11154,
1279	.mnd_width = 0,
1280	.hid_width = 5,
1281	.parent_map = cam_cc_parent_map_4,
1282	.freq_tbl = ftbl_cam_cc_ife_0_dsp_clk_src,
1283	.clkr.hw.init = &(const struct clk_init_data) {
1284		.name = "cam_cc_ife_0_dsp_clk_src",
1285		.parent_data = cam_cc_parent_data_4,
1286		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
1287		.flags = CLK_SET_RATE_PARENT,
1288		.ops = &clk_rcg2_shared_ops,
1289	},
1290};
1291
1292static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
1293	F(19200000, P_BI_TCXO, 1, 0, 0),
1294	F(466000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1295	F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1296	F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1297	F(785000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1298	{ }
1299};
1300
1301static struct clk_rcg2 cam_cc_ife_1_clk_src = {
1302	.cmd_rcgr = 0x12018,
1303	.mnd_width = 0,
1304	.hid_width = 5,
1305	.parent_map = cam_cc_parent_map_5,
1306	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
1307	.clkr.hw.init = &(const struct clk_init_data) {
1308		.name = "cam_cc_ife_1_clk_src",
1309		.parent_data = cam_cc_parent_data_5,
1310		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
1311		.flags = CLK_SET_RATE_PARENT,
1312		.ops = &clk_rcg2_shared_ops,
1313	},
1314};
1315
1316static const struct freq_tbl ftbl_cam_cc_ife_1_dsp_clk_src[] = {
1317	F(466000000, P_CAM_CC_PLL11_OUT_EVEN, 1, 0, 0),
1318	F(594000000, P_CAM_CC_PLL11_OUT_EVEN, 1, 0, 0),
1319	F(675000000, P_CAM_CC_PLL11_OUT_EVEN, 1, 0, 0),
1320	F(785000000, P_CAM_CC_PLL11_OUT_EVEN, 1, 0, 0),
1321	{ }
1322};
1323
1324static struct clk_rcg2 cam_cc_ife_1_dsp_clk_src = {
1325	.cmd_rcgr = 0x12154,
1326	.mnd_width = 0,
1327	.hid_width = 5,
1328	.parent_map = cam_cc_parent_map_6,
1329	.freq_tbl = ftbl_cam_cc_ife_1_dsp_clk_src,
1330	.clkr.hw.init = &(const struct clk_init_data) {
1331		.name = "cam_cc_ife_1_dsp_clk_src",
1332		.parent_data = cam_cc_parent_data_6,
1333		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1334		.flags = CLK_SET_RATE_PARENT,
1335		.ops = &clk_rcg2_shared_ops,
1336	},
1337};
1338
1339static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
1340	F(466000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1341	F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1342	F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1343	F(785000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1344	{ }
1345};
1346
1347static struct clk_rcg2 cam_cc_ife_2_clk_src = {
1348	.cmd_rcgr = 0x122a8,
1349	.mnd_width = 0,
1350	.hid_width = 5,
1351	.parent_map = cam_cc_parent_map_7,
1352	.freq_tbl = ftbl_cam_cc_ife_2_clk_src,
1353	.clkr.hw.init = &(const struct clk_init_data) {
1354		.name = "cam_cc_ife_2_clk_src",
1355		.parent_data = cam_cc_parent_data_7,
1356		.num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1357		.flags = CLK_SET_RATE_PARENT,
1358		.ops = &clk_rcg2_shared_ops,
1359	},
1360};
1361
1362static const struct freq_tbl ftbl_cam_cc_ife_2_dsp_clk_src[] = {
1363	F(466000000, P_CAM_CC_PLL12_OUT_EVEN, 1, 0, 0),
1364	F(594000000, P_CAM_CC_PLL12_OUT_EVEN, 1, 0, 0),
1365	F(675000000, P_CAM_CC_PLL12_OUT_EVEN, 1, 0, 0),
1366	F(785000000, P_CAM_CC_PLL12_OUT_EVEN, 1, 0, 0),
1367	{ }
1368};
1369
1370static struct clk_rcg2 cam_cc_ife_2_dsp_clk_src = {
1371	.cmd_rcgr = 0x123e4,
1372	.mnd_width = 0,
1373	.hid_width = 5,
1374	.parent_map = cam_cc_parent_map_8,
1375	.freq_tbl = ftbl_cam_cc_ife_2_dsp_clk_src,
1376	.clkr.hw.init = &(const struct clk_init_data) {
1377		.name = "cam_cc_ife_2_dsp_clk_src",
1378		.parent_data = cam_cc_parent_data_8,
1379		.num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1380		.flags = CLK_SET_RATE_PARENT,
1381		.ops = &clk_rcg2_shared_ops,
1382	},
1383};
1384
1385static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
1386	.cmd_rcgr = 0x13000,
1387	.mnd_width = 0,
1388	.hid_width = 5,
1389	.parent_map = cam_cc_parent_map_0,
1390	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1391	.clkr.hw.init = &(const struct clk_init_data) {
1392		.name = "cam_cc_ife_lite_clk_src",
1393		.parent_data = cam_cc_parent_data_0,
1394		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1395		.flags = CLK_SET_RATE_PARENT,
1396		.ops = &clk_rcg2_shared_ops,
1397	},
1398};
1399
1400static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
1401	.cmd_rcgr = 0x1313c,
1402	.mnd_width = 0,
1403	.hid_width = 5,
1404	.parent_map = cam_cc_parent_map_0,
1405	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1406	.clkr.hw.init = &(const struct clk_init_data) {
1407		.name = "cam_cc_ife_lite_csid_clk_src",
1408		.parent_data = cam_cc_parent_data_0,
1409		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1410		.flags = CLK_SET_RATE_PARENT,
1411		.ops = &clk_rcg2_shared_ops,
1412	},
1413};
1414
1415static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = {
1416	F(455000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1417	F(575000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1418	F(675000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1419	F(825000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1420	{ }
1421};
1422
1423static struct clk_rcg2 cam_cc_ipe_nps_clk_src = {
1424	.cmd_rcgr = 0x103cc,
1425	.mnd_width = 0,
1426	.hid_width = 5,
1427	.parent_map = cam_cc_parent_map_9,
1428	.freq_tbl = ftbl_cam_cc_ipe_nps_clk_src,
1429	.clkr.hw.init = &(const struct clk_init_data) {
1430		.name = "cam_cc_ipe_nps_clk_src",
1431		.parent_data = cam_cc_parent_data_9,
1432		.num_parents = ARRAY_SIZE(cam_cc_parent_data_9),
1433		.flags = CLK_SET_RATE_PARENT,
1434		.ops = &clk_rcg2_shared_ops,
1435	},
1436};
1437
1438static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = {
1439	F(19200000, P_BI_TCXO, 1, 0, 0),
1440	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
1441	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1442	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1443	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
1444	{ }
1445};
1446
1447static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1448	.cmd_rcgr = 0x13674,
1449	.mnd_width = 0,
1450	.hid_width = 5,
1451	.parent_map = cam_cc_parent_map_0,
1452	.freq_tbl = ftbl_cam_cc_jpeg_clk_src,
1453	.clkr.hw.init = &(const struct clk_init_data) {
1454		.name = "cam_cc_jpeg_clk_src",
1455		.parent_data = cam_cc_parent_data_0,
1456		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1457		.flags = CLK_SET_RATE_PARENT,
1458		.ops = &clk_rcg2_shared_ops,
1459	},
1460};
1461
1462static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1463	F(19200000, P_BI_TCXO, 1, 0, 0),
1464	F(24000000, P_CAM_CC_PLL2_OUT_MAIN, 10, 1, 4),
1465	F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0),
1466	{ }
1467};
1468
1469static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1470	.cmd_rcgr = 0x15000,
1471	.mnd_width = 8,
1472	.hid_width = 5,
1473	.parent_map = cam_cc_parent_map_1,
1474	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1475	.clkr.hw.init = &(const struct clk_init_data) {
1476		.name = "cam_cc_mclk0_clk_src",
1477		.parent_data = cam_cc_parent_data_1,
1478		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1479		.flags = CLK_SET_RATE_PARENT,
1480		.ops = &clk_rcg2_shared_ops,
1481	},
1482};
1483
1484static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1485	.cmd_rcgr = 0x15130,
1486	.mnd_width = 8,
1487	.hid_width = 5,
1488	.parent_map = cam_cc_parent_map_1,
1489	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1490	.clkr.hw.init = &(const struct clk_init_data) {
1491		.name = "cam_cc_mclk1_clk_src",
1492		.parent_data = cam_cc_parent_data_1,
1493		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1494		.flags = CLK_SET_RATE_PARENT,
1495		.ops = &clk_rcg2_shared_ops,
1496	},
1497};
1498
1499static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1500	.cmd_rcgr = 0x15260,
1501	.mnd_width = 8,
1502	.hid_width = 5,
1503	.parent_map = cam_cc_parent_map_1,
1504	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1505	.clkr.hw.init = &(const struct clk_init_data) {
1506		.name = "cam_cc_mclk2_clk_src",
1507		.parent_data = cam_cc_parent_data_1,
1508		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1509		.flags = CLK_SET_RATE_PARENT,
1510		.ops = &clk_rcg2_shared_ops,
1511	},
1512};
1513
1514static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1515	.cmd_rcgr = 0x15390,
1516	.mnd_width = 8,
1517	.hid_width = 5,
1518	.parent_map = cam_cc_parent_map_1,
1519	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1520	.clkr.hw.init = &(const struct clk_init_data) {
1521		.name = "cam_cc_mclk3_clk_src",
1522		.parent_data = cam_cc_parent_data_1,
1523		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1524		.flags = CLK_SET_RATE_PARENT,
1525		.ops = &clk_rcg2_shared_ops,
1526	},
1527};
1528
1529static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1530	.cmd_rcgr = 0x154c0,
1531	.mnd_width = 8,
1532	.hid_width = 5,
1533	.parent_map = cam_cc_parent_map_1,
1534	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1535	.clkr.hw.init = &(const struct clk_init_data) {
1536		.name = "cam_cc_mclk4_clk_src",
1537		.parent_data = cam_cc_parent_data_1,
1538		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1539		.flags = CLK_SET_RATE_PARENT,
1540		.ops = &clk_rcg2_shared_ops,
1541	},
1542};
1543
1544static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1545	.cmd_rcgr = 0x155f0,
1546	.mnd_width = 8,
1547	.hid_width = 5,
1548	.parent_map = cam_cc_parent_map_1,
1549	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1550	.clkr.hw.init = &(const struct clk_init_data) {
1551		.name = "cam_cc_mclk5_clk_src",
1552		.parent_data = cam_cc_parent_data_1,
1553		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1554		.flags = CLK_SET_RATE_PARENT,
1555		.ops = &clk_rcg2_shared_ops,
1556	},
1557};
1558
1559static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1560	.cmd_rcgr = 0x15720,
1561	.mnd_width = 8,
1562	.hid_width = 5,
1563	.parent_map = cam_cc_parent_map_1,
1564	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1565	.clkr.hw.init = &(const struct clk_init_data) {
1566		.name = "cam_cc_mclk6_clk_src",
1567		.parent_data = cam_cc_parent_data_1,
1568		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1569		.flags = CLK_SET_RATE_PARENT,
1570		.ops = &clk_rcg2_shared_ops,
1571	},
1572};
1573
1574static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1575	.cmd_rcgr = 0x15850,
1576	.mnd_width = 8,
1577	.hid_width = 5,
1578	.parent_map = cam_cc_parent_map_1,
1579	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1580	.clkr.hw.init = &(const struct clk_init_data) {
1581		.name = "cam_cc_mclk7_clk_src",
1582		.parent_data = cam_cc_parent_data_1,
1583		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1584		.flags = CLK_SET_RATE_PARENT,
1585		.ops = &clk_rcg2_shared_ops,
1586	},
1587};
1588
1589static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1590	F(19200000, P_BI_TCXO, 1, 0, 0),
1591	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1592	F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1593	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1594	{ }
1595};
1596
1597static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1598	.cmd_rcgr = 0x13f24,
1599	.mnd_width = 0,
1600	.hid_width = 5,
1601	.parent_map = cam_cc_parent_map_0,
1602	.freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1603	.clkr.hw.init = &(const struct clk_init_data) {
1604		.name = "cam_cc_qdss_debug_clk_src",
1605		.parent_data = cam_cc_parent_data_0,
1606		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1607		.flags = CLK_SET_RATE_PARENT,
1608		.ops = &clk_rcg2_shared_ops,
1609	},
1610};
1611
1612static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
1613	F(466000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1614	F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1615	F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1616	F(785000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1617	{ }
1618};
1619
1620static struct clk_rcg2 cam_cc_sfe_0_clk_src = {
1621	.cmd_rcgr = 0x13294,
1622	.mnd_width = 0,
1623	.hid_width = 5,
1624	.parent_map = cam_cc_parent_map_10,
1625	.freq_tbl = ftbl_cam_cc_sfe_0_clk_src,
1626	.clkr.hw.init = &(const struct clk_init_data) {
1627		.name = "cam_cc_sfe_0_clk_src",
1628		.parent_data = cam_cc_parent_data_10,
1629		.num_parents = ARRAY_SIZE(cam_cc_parent_data_10),
1630		.flags = CLK_SET_RATE_PARENT,
1631		.ops = &clk_rcg2_shared_ops,
1632	},
1633};
1634
1635static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = {
1636	F(466000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1637	F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1638	F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1639	F(785000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1640	{ }
1641};
1642
1643static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
1644	.cmd_rcgr = 0x133f4,
1645	.mnd_width = 0,
1646	.hid_width = 5,
1647	.parent_map = cam_cc_parent_map_11,
1648	.freq_tbl = ftbl_cam_cc_sfe_1_clk_src,
1649	.clkr.hw.init = &(const struct clk_init_data) {
1650		.name = "cam_cc_sfe_1_clk_src",
1651		.parent_data = cam_cc_parent_data_11,
1652		.num_parents = ARRAY_SIZE(cam_cc_parent_data_11),
1653		.flags = CLK_SET_RATE_PARENT,
1654		.ops = &clk_rcg2_shared_ops,
1655	},
1656};
1657
1658static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1659	F(32000, P_SLEEP_CLK, 1, 0, 0),
1660	{ }
1661};
1662
1663static struct clk_rcg2 cam_cc_sleep_clk_src = {
1664	.cmd_rcgr = 0x141a0,
1665	.mnd_width = 0,
1666	.hid_width = 5,
1667	.parent_map = cam_cc_parent_map_12,
1668	.freq_tbl = ftbl_cam_cc_sleep_clk_src,
1669	.clkr.hw.init = &(const struct clk_init_data) {
1670		.name = "cam_cc_sleep_clk_src",
1671		.parent_data = cam_cc_parent_data_12,
1672		.num_parents = ARRAY_SIZE(cam_cc_parent_data_12),
1673		.flags = CLK_SET_RATE_PARENT,
1674		.ops = &clk_rcg2_shared_ops,
1675	},
1676};
1677
1678static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1679	F(19200000, P_BI_TCXO, 1, 0, 0),
1680	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1681	{ }
1682};
1683
1684static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1685	.cmd_rcgr = 0x10148,
1686	.mnd_width = 8,
1687	.hid_width = 5,
1688	.parent_map = cam_cc_parent_map_0,
1689	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1690	.clkr.hw.init = &(const struct clk_init_data) {
1691		.name = "cam_cc_slow_ahb_clk_src",
1692		.parent_data = cam_cc_parent_data_0,
1693		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1694		.flags = CLK_SET_RATE_PARENT,
1695		.ops = &clk_rcg2_shared_ops,
1696	},
1697};
1698
1699static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1700	F(19200000, P_BI_TCXO_AO, 1, 0, 0),
1701	{ }
1702};
1703
1704static struct clk_rcg2 cam_cc_xo_clk_src = {
1705	.cmd_rcgr = 0x14070,
1706	.mnd_width = 0,
1707	.hid_width = 5,
1708	.parent_map = cam_cc_parent_map_13_ao,
1709	.freq_tbl = ftbl_cam_cc_xo_clk_src,
1710	.clkr.hw.init = &(const struct clk_init_data) {
1711		.name = "cam_cc_xo_clk_src",
1712		.parent_data = cam_cc_parent_data_13_ao,
1713		.num_parents = ARRAY_SIZE(cam_cc_parent_data_13_ao),
1714		.flags = CLK_SET_RATE_PARENT,
1715		.ops = &clk_rcg2_shared_ops,
1716	},
1717};
1718
1719static struct clk_branch cam_cc_bps_ahb_clk = {
1720	.halt_reg = 0x10274,
1721	.halt_check = BRANCH_HALT,
1722	.clkr = {
1723		.enable_reg = 0x10274,
1724		.enable_mask = BIT(0),
1725		.hw.init = &(const struct clk_init_data) {
1726			.name = "cam_cc_bps_ahb_clk",
1727			.parent_hws = (const struct clk_hw*[]) {
1728				&cam_cc_slow_ahb_clk_src.clkr.hw,
1729			},
1730			.num_parents = 1,
1731			.flags = CLK_SET_RATE_PARENT,
1732			.ops = &clk_branch2_ops,
1733		},
1734	},
1735};
1736
1737static struct clk_branch cam_cc_bps_clk = {
1738	.halt_reg = 0x103a4,
1739	.halt_check = BRANCH_HALT,
1740	.clkr = {
1741		.enable_reg = 0x103a4,
1742		.enable_mask = BIT(0),
1743		.hw.init = &(const struct clk_init_data) {
1744			.name = "cam_cc_bps_clk",
1745			.parent_hws = (const struct clk_hw*[]) {
1746				&cam_cc_bps_clk_src.clkr.hw,
1747			},
1748			.num_parents = 1,
1749			.flags = CLK_SET_RATE_PARENT,
1750			.ops = &clk_branch2_ops,
1751		},
1752	},
1753};
1754
1755static struct clk_branch cam_cc_bps_fast_ahb_clk = {
1756	.halt_reg = 0x10144,
1757	.halt_check = BRANCH_HALT,
1758	.clkr = {
1759		.enable_reg = 0x10144,
1760		.enable_mask = BIT(0),
1761		.hw.init = &(const struct clk_init_data) {
1762			.name = "cam_cc_bps_fast_ahb_clk",
1763			.parent_hws = (const struct clk_hw*[]) {
1764				&cam_cc_fast_ahb_clk_src.clkr.hw,
1765			},
1766			.num_parents = 1,
1767			.flags = CLK_SET_RATE_PARENT,
1768			.ops = &clk_branch2_ops,
1769		},
1770	},
1771};
1772
1773static struct clk_branch cam_cc_camnoc_axi_clk = {
1774	.halt_reg = 0x13f0c,
1775	.halt_check = BRANCH_HALT,
1776	.clkr = {
1777		.enable_reg = 0x13f0c,
1778		.enable_mask = BIT(0),
1779		.hw.init = &(const struct clk_init_data) {
1780			.name = "cam_cc_camnoc_axi_clk",
1781			.parent_hws = (const struct clk_hw*[]) {
1782				&cam_cc_camnoc_axi_clk_src.clkr.hw,
1783			},
1784			.num_parents = 1,
1785			.flags = CLK_SET_RATE_PARENT,
1786			.ops = &clk_branch2_ops,
1787		},
1788	},
1789};
1790
1791static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1792	.halt_reg = 0x13f18,
1793	.halt_check = BRANCH_HALT,
1794	.clkr = {
1795		.enable_reg = 0x13f18,
1796		.enable_mask = BIT(0),
1797		.hw.init = &(const struct clk_init_data) {
1798			.name = "cam_cc_camnoc_dcd_xo_clk",
1799			.parent_hws = (const struct clk_hw*[]) {
1800				&cam_cc_xo_clk_src.clkr.hw,
1801			},
1802			.num_parents = 1,
1803			.flags = CLK_SET_RATE_PARENT,
1804			.ops = &clk_branch2_ops,
1805		},
1806	},
1807};
1808
1809static struct clk_branch cam_cc_camnoc_xo_clk = {
1810	.halt_reg = 0x13f1c,
1811	.halt_check = BRANCH_HALT,
1812	.clkr = {
1813		.enable_reg = 0x13f1c,
1814		.enable_mask = BIT(0),
1815		.hw.init = &(const struct clk_init_data) {
1816			.name = "cam_cc_camnoc_xo_clk",
1817			.parent_hws = (const struct clk_hw*[]) {
1818				&cam_cc_xo_clk_src.clkr.hw,
1819			},
1820			.num_parents = 1,
1821			.flags = CLK_SET_RATE_PARENT,
1822			.ops = &clk_branch2_ops,
1823		},
1824	},
1825};
1826
1827static struct clk_branch cam_cc_cci_0_clk = {
1828	.halt_reg = 0x13a2c,
1829	.halt_check = BRANCH_HALT,
1830	.clkr = {
1831		.enable_reg = 0x13a2c,
1832		.enable_mask = BIT(0),
1833		.hw.init = &(const struct clk_init_data) {
1834			.name = "cam_cc_cci_0_clk",
1835			.parent_hws = (const struct clk_hw*[]) {
1836				&cam_cc_cci_0_clk_src.clkr.hw,
1837			},
1838			.num_parents = 1,
1839			.flags = CLK_SET_RATE_PARENT,
1840			.ops = &clk_branch2_ops,
1841		},
1842	},
1843};
1844
1845static struct clk_branch cam_cc_cci_1_clk = {
1846	.halt_reg = 0x13b5c,
1847	.halt_check = BRANCH_HALT,
1848	.clkr = {
1849		.enable_reg = 0x13b5c,
1850		.enable_mask = BIT(0),
1851		.hw.init = &(const struct clk_init_data) {
1852			.name = "cam_cc_cci_1_clk",
1853			.parent_hws = (const struct clk_hw*[]) {
1854				&cam_cc_cci_1_clk_src.clkr.hw,
1855			},
1856			.num_parents = 1,
1857			.flags = CLK_SET_RATE_PARENT,
1858			.ops = &clk_branch2_ops,
1859		},
1860	},
1861};
1862
1863static struct clk_branch cam_cc_cci_2_clk = {
1864	.halt_reg = 0x13c8c,
1865	.halt_check = BRANCH_HALT,
1866	.clkr = {
1867		.enable_reg = 0x13c8c,
1868		.enable_mask = BIT(0),
1869		.hw.init = &(const struct clk_init_data) {
1870			.name = "cam_cc_cci_2_clk",
1871			.parent_hws = (const struct clk_hw*[]) {
1872				&cam_cc_cci_2_clk_src.clkr.hw,
1873			},
1874			.num_parents = 1,
1875			.flags = CLK_SET_RATE_PARENT,
1876			.ops = &clk_branch2_ops,
1877		},
1878	},
1879};
1880
1881static struct clk_branch cam_cc_core_ahb_clk = {
1882	.halt_reg = 0x1406c,
1883	.halt_check = BRANCH_HALT_DELAY,
1884	.clkr = {
1885		.enable_reg = 0x1406c,
1886		.enable_mask = BIT(0),
1887		.hw.init = &(const struct clk_init_data) {
1888			.name = "cam_cc_core_ahb_clk",
1889			.parent_hws = (const struct clk_hw*[]) {
1890				&cam_cc_slow_ahb_clk_src.clkr.hw,
1891			},
1892			.num_parents = 1,
1893			.flags = CLK_SET_RATE_PARENT,
1894			.ops = &clk_branch2_ops,
1895		},
1896	},
1897};
1898
1899static struct clk_branch cam_cc_cpas_ahb_clk = {
1900	.halt_reg = 0x13c90,
1901	.halt_check = BRANCH_HALT,
1902	.clkr = {
1903		.enable_reg = 0x13c90,
1904		.enable_mask = BIT(0),
1905		.hw.init = &(const struct clk_init_data) {
1906			.name = "cam_cc_cpas_ahb_clk",
1907			.parent_hws = (const struct clk_hw*[]) {
1908				&cam_cc_slow_ahb_clk_src.clkr.hw,
1909			},
1910			.num_parents = 1,
1911			.flags = CLK_SET_RATE_PARENT,
1912			.ops = &clk_branch2_ops,
1913		},
1914	},
1915};
1916
1917static struct clk_branch cam_cc_cpas_bps_clk = {
1918	.halt_reg = 0x103b0,
1919	.halt_check = BRANCH_HALT,
1920	.clkr = {
1921		.enable_reg = 0x103b0,
1922		.enable_mask = BIT(0),
1923		.hw.init = &(const struct clk_init_data) {
1924			.name = "cam_cc_cpas_bps_clk",
1925			.parent_hws = (const struct clk_hw*[]) {
1926				&cam_cc_bps_clk_src.clkr.hw,
1927			},
1928			.num_parents = 1,
1929			.flags = CLK_SET_RATE_PARENT,
1930			.ops = &clk_branch2_ops,
1931		},
1932	},
1933};
1934
1935static struct clk_branch cam_cc_cpas_cre_clk = {
1936	.halt_reg = 0x1366c,
1937	.halt_check = BRANCH_HALT,
1938	.clkr = {
1939		.enable_reg = 0x1366c,
1940		.enable_mask = BIT(0),
1941		.hw.init = &(const struct clk_init_data) {
1942			.name = "cam_cc_cpas_cre_clk",
1943			.parent_hws = (const struct clk_hw*[]) {
1944				&cam_cc_cre_clk_src.clkr.hw,
1945			},
1946			.num_parents = 1,
1947			.flags = CLK_SET_RATE_PARENT,
1948			.ops = &clk_branch2_ops,
1949		},
1950	},
1951};
1952
1953static struct clk_branch cam_cc_cpas_fast_ahb_clk = {
1954	.halt_reg = 0x13c9c,
1955	.halt_check = BRANCH_HALT,
1956	.clkr = {
1957		.enable_reg = 0x13c9c,
1958		.enable_mask = BIT(0),
1959		.hw.init = &(const struct clk_init_data) {
1960			.name = "cam_cc_cpas_fast_ahb_clk",
1961			.parent_hws = (const struct clk_hw*[]) {
1962				&cam_cc_fast_ahb_clk_src.clkr.hw,
1963			},
1964			.num_parents = 1,
1965			.flags = CLK_SET_RATE_PARENT,
1966			.ops = &clk_branch2_ops,
1967		},
1968	},
1969};
1970
1971static struct clk_branch cam_cc_cpas_ife_0_clk = {
1972	.halt_reg = 0x11150,
1973	.halt_check = BRANCH_HALT,
1974	.clkr = {
1975		.enable_reg = 0x11150,
1976		.enable_mask = BIT(0),
1977		.hw.init = &(const struct clk_init_data) {
1978			.name = "cam_cc_cpas_ife_0_clk",
1979			.parent_hws = (const struct clk_hw*[]) {
1980				&cam_cc_ife_0_clk_src.clkr.hw,
1981			},
1982			.num_parents = 1,
1983			.flags = CLK_SET_RATE_PARENT,
1984			.ops = &clk_branch2_ops,
1985		},
1986	},
1987};
1988
1989static struct clk_branch cam_cc_cpas_ife_1_clk = {
1990	.halt_reg = 0x12150,
1991	.halt_check = BRANCH_HALT,
1992	.clkr = {
1993		.enable_reg = 0x12150,
1994		.enable_mask = BIT(0),
1995		.hw.init = &(const struct clk_init_data) {
1996			.name = "cam_cc_cpas_ife_1_clk",
1997			.parent_hws = (const struct clk_hw*[]) {
1998				&cam_cc_ife_1_clk_src.clkr.hw,
1999			},
2000			.num_parents = 1,
2001			.flags = CLK_SET_RATE_PARENT,
2002			.ops = &clk_branch2_ops,
2003		},
2004	},
2005};
2006
2007static struct clk_branch cam_cc_cpas_ife_2_clk = {
2008	.halt_reg = 0x123e0,
2009	.halt_check = BRANCH_HALT,
2010	.clkr = {
2011		.enable_reg = 0x123e0,
2012		.enable_mask = BIT(0),
2013		.hw.init = &(const struct clk_init_data) {
2014			.name = "cam_cc_cpas_ife_2_clk",
2015			.parent_hws = (const struct clk_hw*[]) {
2016				&cam_cc_ife_2_clk_src.clkr.hw,
2017			},
2018			.num_parents = 1,
2019			.flags = CLK_SET_RATE_PARENT,
2020			.ops = &clk_branch2_ops,
2021		},
2022	},
2023};
2024
2025static struct clk_branch cam_cc_cpas_ife_lite_clk = {
2026	.halt_reg = 0x13138,
2027	.halt_check = BRANCH_HALT,
2028	.clkr = {
2029		.enable_reg = 0x13138,
2030		.enable_mask = BIT(0),
2031		.hw.init = &(const struct clk_init_data) {
2032			.name = "cam_cc_cpas_ife_lite_clk",
2033			.parent_hws = (const struct clk_hw*[]) {
2034				&cam_cc_ife_lite_clk_src.clkr.hw,
2035			},
2036			.num_parents = 1,
2037			.flags = CLK_SET_RATE_PARENT,
2038			.ops = &clk_branch2_ops,
2039		},
2040	},
2041};
2042
2043static struct clk_branch cam_cc_cpas_ipe_nps_clk = {
2044	.halt_reg = 0x10504,
2045	.halt_check = BRANCH_HALT,
2046	.clkr = {
2047		.enable_reg = 0x10504,
2048		.enable_mask = BIT(0),
2049		.hw.init = &(const struct clk_init_data) {
2050			.name = "cam_cc_cpas_ipe_nps_clk",
2051			.parent_hws = (const struct clk_hw*[]) {
2052				&cam_cc_ipe_nps_clk_src.clkr.hw,
2053			},
2054			.num_parents = 1,
2055			.flags = CLK_SET_RATE_PARENT,
2056			.ops = &clk_branch2_ops,
2057		},
2058	},
2059};
2060
2061static struct clk_branch cam_cc_cpas_sbi_clk = {
2062	.halt_reg = 0x1054c,
2063	.halt_check = BRANCH_HALT,
2064	.clkr = {
2065		.enable_reg = 0x1054c,
2066		.enable_mask = BIT(0),
2067		.hw.init = &(const struct clk_init_data) {
2068			.name = "cam_cc_cpas_sbi_clk",
2069			.parent_hws = (const struct clk_hw*[]) {
2070				&cam_cc_ife_0_clk_src.clkr.hw,
2071			},
2072			.num_parents = 1,
2073			.flags = CLK_SET_RATE_PARENT,
2074			.ops = &clk_branch2_ops,
2075		},
2076	},
2077};
2078
2079static struct clk_branch cam_cc_cpas_sfe_0_clk = {
2080	.halt_reg = 0x133cc,
2081	.halt_check = BRANCH_HALT,
2082	.clkr = {
2083		.enable_reg = 0x133cc,
2084		.enable_mask = BIT(0),
2085		.hw.init = &(const struct clk_init_data) {
2086			.name = "cam_cc_cpas_sfe_0_clk",
2087			.parent_hws = (const struct clk_hw*[]) {
2088				&cam_cc_sfe_0_clk_src.clkr.hw,
2089			},
2090			.num_parents = 1,
2091			.flags = CLK_SET_RATE_PARENT,
2092			.ops = &clk_branch2_ops,
2093		},
2094	},
2095};
2096
2097static struct clk_branch cam_cc_cpas_sfe_1_clk = {
2098	.halt_reg = 0x1352c,
2099	.halt_check = BRANCH_HALT,
2100	.clkr = {
2101		.enable_reg = 0x1352c,
2102		.enable_mask = BIT(0),
2103		.hw.init = &(const struct clk_init_data) {
2104			.name = "cam_cc_cpas_sfe_1_clk",
2105			.parent_hws = (const struct clk_hw*[]) {
2106				&cam_cc_sfe_1_clk_src.clkr.hw,
2107			},
2108			.num_parents = 1,
2109			.flags = CLK_SET_RATE_PARENT,
2110			.ops = &clk_branch2_ops,
2111		},
2112	},
2113};
2114
2115static struct clk_branch cam_cc_cre_ahb_clk = {
2116	.halt_reg = 0x13670,
2117	.halt_check = BRANCH_HALT,
2118	.clkr = {
2119		.enable_reg = 0x13670,
2120		.enable_mask = BIT(0),
2121		.hw.init = &(const struct clk_init_data) {
2122			.name = "cam_cc_cre_ahb_clk",
2123			.parent_hws = (const struct clk_hw*[]) {
2124				&cam_cc_slow_ahb_clk_src.clkr.hw,
2125			},
2126			.num_parents = 1,
2127			.flags = CLK_SET_RATE_PARENT,
2128			.ops = &clk_branch2_ops,
2129		},
2130	},
2131};
2132
2133static struct clk_branch cam_cc_cre_clk = {
2134	.halt_reg = 0x13668,
2135	.halt_check = BRANCH_HALT,
2136	.clkr = {
2137		.enable_reg = 0x13668,
2138		.enable_mask = BIT(0),
2139		.hw.init = &(const struct clk_init_data) {
2140			.name = "cam_cc_cre_clk",
2141			.parent_hws = (const struct clk_hw*[]) {
2142				&cam_cc_cre_clk_src.clkr.hw,
2143			},
2144			.num_parents = 1,
2145			.flags = CLK_SET_RATE_PARENT,
2146			.ops = &clk_branch2_ops,
2147		},
2148	},
2149};
2150
2151static struct clk_branch cam_cc_csi0phytimer_clk = {
2152	.halt_reg = 0x15aac,
2153	.halt_check = BRANCH_HALT,
2154	.clkr = {
2155		.enable_reg = 0x15aac,
2156		.enable_mask = BIT(0),
2157		.hw.init = &(const struct clk_init_data) {
2158			.name = "cam_cc_csi0phytimer_clk",
2159			.parent_hws = (const struct clk_hw*[]) {
2160				&cam_cc_csi0phytimer_clk_src.clkr.hw,
2161			},
2162			.num_parents = 1,
2163			.flags = CLK_SET_RATE_PARENT,
2164			.ops = &clk_branch2_ops,
2165		},
2166	},
2167};
2168
2169static struct clk_branch cam_cc_csi1phytimer_clk = {
2170	.halt_reg = 0x15be4,
2171	.halt_check = BRANCH_HALT,
2172	.clkr = {
2173		.enable_reg = 0x15be4,
2174		.enable_mask = BIT(0),
2175		.hw.init = &(const struct clk_init_data) {
2176			.name = "cam_cc_csi1phytimer_clk",
2177			.parent_hws = (const struct clk_hw*[]) {
2178				&cam_cc_csi1phytimer_clk_src.clkr.hw,
2179			},
2180			.num_parents = 1,
2181			.flags = CLK_SET_RATE_PARENT,
2182			.ops = &clk_branch2_ops,
2183		},
2184	},
2185};
2186
2187static struct clk_branch cam_cc_csi2phytimer_clk = {
2188	.halt_reg = 0x15d18,
2189	.halt_check = BRANCH_HALT,
2190	.clkr = {
2191		.enable_reg = 0x15d18,
2192		.enable_mask = BIT(0),
2193		.hw.init = &(const struct clk_init_data) {
2194			.name = "cam_cc_csi2phytimer_clk",
2195			.parent_hws = (const struct clk_hw*[]) {
2196				&cam_cc_csi2phytimer_clk_src.clkr.hw,
2197			},
2198			.num_parents = 1,
2199			.flags = CLK_SET_RATE_PARENT,
2200			.ops = &clk_branch2_ops,
2201		},
2202	},
2203};
2204
2205static struct clk_branch cam_cc_csi3phytimer_clk = {
2206	.halt_reg = 0x15e4c,
2207	.halt_check = BRANCH_HALT,
2208	.clkr = {
2209		.enable_reg = 0x15e4c,
2210		.enable_mask = BIT(0),
2211		.hw.init = &(const struct clk_init_data) {
2212			.name = "cam_cc_csi3phytimer_clk",
2213			.parent_hws = (const struct clk_hw*[]) {
2214				&cam_cc_csi3phytimer_clk_src.clkr.hw,
2215			},
2216			.num_parents = 1,
2217			.flags = CLK_SET_RATE_PARENT,
2218			.ops = &clk_branch2_ops,
2219		},
2220	},
2221};
2222
2223static struct clk_branch cam_cc_csi4phytimer_clk = {
2224	.halt_reg = 0x15f80,
2225	.halt_check = BRANCH_HALT,
2226	.clkr = {
2227		.enable_reg = 0x15f80,
2228		.enable_mask = BIT(0),
2229		.hw.init = &(const struct clk_init_data) {
2230			.name = "cam_cc_csi4phytimer_clk",
2231			.parent_hws = (const struct clk_hw*[]) {
2232				&cam_cc_csi4phytimer_clk_src.clkr.hw,
2233			},
2234			.num_parents = 1,
2235			.flags = CLK_SET_RATE_PARENT,
2236			.ops = &clk_branch2_ops,
2237		},
2238	},
2239};
2240
2241static struct clk_branch cam_cc_csi5phytimer_clk = {
2242	.halt_reg = 0x160b4,
2243	.halt_check = BRANCH_HALT,
2244	.clkr = {
2245		.enable_reg = 0x160b4,
2246		.enable_mask = BIT(0),
2247		.hw.init = &(const struct clk_init_data) {
2248			.name = "cam_cc_csi5phytimer_clk",
2249			.parent_hws = (const struct clk_hw*[]) {
2250				&cam_cc_csi5phytimer_clk_src.clkr.hw,
2251			},
2252			.num_parents = 1,
2253			.flags = CLK_SET_RATE_PARENT,
2254			.ops = &clk_branch2_ops,
2255		},
2256	},
2257};
2258
2259static struct clk_branch cam_cc_csi6phytimer_clk = {
2260	.halt_reg = 0x161e8,
2261	.halt_check = BRANCH_HALT,
2262	.clkr = {
2263		.enable_reg = 0x161e8,
2264		.enable_mask = BIT(0),
2265		.hw.init = &(const struct clk_init_data) {
2266			.name = "cam_cc_csi6phytimer_clk",
2267			.parent_hws = (const struct clk_hw*[]) {
2268				&cam_cc_csi6phytimer_clk_src.clkr.hw,
2269			},
2270			.num_parents = 1,
2271			.flags = CLK_SET_RATE_PARENT,
2272			.ops = &clk_branch2_ops,
2273		},
2274	},
2275};
2276
2277static struct clk_branch cam_cc_csi7phytimer_clk = {
2278	.halt_reg = 0x1631c,
2279	.halt_check = BRANCH_HALT,
2280	.clkr = {
2281		.enable_reg = 0x1631c,
2282		.enable_mask = BIT(0),
2283		.hw.init = &(const struct clk_init_data) {
2284			.name = "cam_cc_csi7phytimer_clk",
2285			.parent_hws = (const struct clk_hw*[]) {
2286				&cam_cc_csi7phytimer_clk_src.clkr.hw,
2287			},
2288			.num_parents = 1,
2289			.flags = CLK_SET_RATE_PARENT,
2290			.ops = &clk_branch2_ops,
2291		},
2292	},
2293};
2294
2295static struct clk_branch cam_cc_csid_clk = {
2296	.halt_reg = 0x13dd4,
2297	.halt_check = BRANCH_HALT,
2298	.clkr = {
2299		.enable_reg = 0x13dd4,
2300		.enable_mask = BIT(0),
2301		.hw.init = &(const struct clk_init_data) {
2302			.name = "cam_cc_csid_clk",
2303			.parent_hws = (const struct clk_hw*[]) {
2304				&cam_cc_csid_clk_src.clkr.hw,
2305			},
2306			.num_parents = 1,
2307			.flags = CLK_SET_RATE_PARENT,
2308			.ops = &clk_branch2_ops,
2309		},
2310	},
2311};
2312
2313static struct clk_branch cam_cc_csid_csiphy_rx_clk = {
2314	.halt_reg = 0x15ab4,
2315	.halt_check = BRANCH_HALT,
2316	.clkr = {
2317		.enable_reg = 0x15ab4,
2318		.enable_mask = BIT(0),
2319		.hw.init = &(const struct clk_init_data) {
2320			.name = "cam_cc_csid_csiphy_rx_clk",
2321			.parent_hws = (const struct clk_hw*[]) {
2322				&cam_cc_cphy_rx_clk_src.clkr.hw,
2323			},
2324			.num_parents = 1,
2325			.flags = CLK_SET_RATE_PARENT,
2326			.ops = &clk_branch2_ops,
2327		},
2328	},
2329};
2330
2331static struct clk_branch cam_cc_csiphy0_clk = {
2332	.halt_reg = 0x15ab0,
2333	.halt_check = BRANCH_HALT,
2334	.clkr = {
2335		.enable_reg = 0x15ab0,
2336		.enable_mask = BIT(0),
2337		.hw.init = &(const struct clk_init_data) {
2338			.name = "cam_cc_csiphy0_clk",
2339			.parent_hws = (const struct clk_hw*[]) {
2340				&cam_cc_cphy_rx_clk_src.clkr.hw,
2341			},
2342			.num_parents = 1,
2343			.flags = CLK_SET_RATE_PARENT,
2344			.ops = &clk_branch2_ops,
2345		},
2346	},
2347};
2348
2349static struct clk_branch cam_cc_csiphy1_clk = {
2350	.halt_reg = 0x15be8,
2351	.halt_check = BRANCH_HALT,
2352	.clkr = {
2353		.enable_reg = 0x15be8,
2354		.enable_mask = BIT(0),
2355		.hw.init = &(const struct clk_init_data) {
2356			.name = "cam_cc_csiphy1_clk",
2357			.parent_hws = (const struct clk_hw*[]) {
2358				&cam_cc_cphy_rx_clk_src.clkr.hw,
2359			},
2360			.num_parents = 1,
2361			.flags = CLK_SET_RATE_PARENT,
2362			.ops = &clk_branch2_ops,
2363		},
2364	},
2365};
2366
2367static struct clk_branch cam_cc_csiphy2_clk = {
2368	.halt_reg = 0x15d1c,
2369	.halt_check = BRANCH_HALT,
2370	.clkr = {
2371		.enable_reg = 0x15d1c,
2372		.enable_mask = BIT(0),
2373		.hw.init = &(const struct clk_init_data) {
2374			.name = "cam_cc_csiphy2_clk",
2375			.parent_hws = (const struct clk_hw*[]) {
2376				&cam_cc_cphy_rx_clk_src.clkr.hw,
2377			},
2378			.num_parents = 1,
2379			.flags = CLK_SET_RATE_PARENT,
2380			.ops = &clk_branch2_ops,
2381		},
2382	},
2383};
2384
2385static struct clk_branch cam_cc_csiphy3_clk = {
2386	.halt_reg = 0x15e50,
2387	.halt_check = BRANCH_HALT,
2388	.clkr = {
2389		.enable_reg = 0x15e50,
2390		.enable_mask = BIT(0),
2391		.hw.init = &(const struct clk_init_data) {
2392			.name = "cam_cc_csiphy3_clk",
2393			.parent_hws = (const struct clk_hw*[]) {
2394				&cam_cc_cphy_rx_clk_src.clkr.hw,
2395			},
2396			.num_parents = 1,
2397			.flags = CLK_SET_RATE_PARENT,
2398			.ops = &clk_branch2_ops,
2399		},
2400	},
2401};
2402
2403static struct clk_branch cam_cc_csiphy4_clk = {
2404	.halt_reg = 0x15f84,
2405	.halt_check = BRANCH_HALT,
2406	.clkr = {
2407		.enable_reg = 0x15f84,
2408		.enable_mask = BIT(0),
2409		.hw.init = &(const struct clk_init_data) {
2410			.name = "cam_cc_csiphy4_clk",
2411			.parent_hws = (const struct clk_hw*[]) {
2412				&cam_cc_cphy_rx_clk_src.clkr.hw,
2413			},
2414			.num_parents = 1,
2415			.flags = CLK_SET_RATE_PARENT,
2416			.ops = &clk_branch2_ops,
2417		},
2418	},
2419};
2420
2421static struct clk_branch cam_cc_csiphy5_clk = {
2422	.halt_reg = 0x160b8,
2423	.halt_check = BRANCH_HALT,
2424	.clkr = {
2425		.enable_reg = 0x160b8,
2426		.enable_mask = BIT(0),
2427		.hw.init = &(const struct clk_init_data) {
2428			.name = "cam_cc_csiphy5_clk",
2429			.parent_hws = (const struct clk_hw*[]) {
2430				&cam_cc_cphy_rx_clk_src.clkr.hw,
2431			},
2432			.num_parents = 1,
2433			.flags = CLK_SET_RATE_PARENT,
2434			.ops = &clk_branch2_ops,
2435		},
2436	},
2437};
2438
2439static struct clk_branch cam_cc_csiphy6_clk = {
2440	.halt_reg = 0x161ec,
2441	.halt_check = BRANCH_HALT,
2442	.clkr = {
2443		.enable_reg = 0x161ec,
2444		.enable_mask = BIT(0),
2445		.hw.init = &(const struct clk_init_data) {
2446			.name = "cam_cc_csiphy6_clk",
2447			.parent_hws = (const struct clk_hw*[]) {
2448				&cam_cc_cphy_rx_clk_src.clkr.hw,
2449			},
2450			.num_parents = 1,
2451			.flags = CLK_SET_RATE_PARENT,
2452			.ops = &clk_branch2_ops,
2453		},
2454	},
2455};
2456
2457static struct clk_branch cam_cc_csiphy7_clk = {
2458	.halt_reg = 0x16320,
2459	.halt_check = BRANCH_HALT,
2460	.clkr = {
2461		.enable_reg = 0x16320,
2462		.enable_mask = BIT(0),
2463		.hw.init = &(const struct clk_init_data) {
2464			.name = "cam_cc_csiphy7_clk",
2465			.parent_hws = (const struct clk_hw*[]) {
2466				&cam_cc_cphy_rx_clk_src.clkr.hw,
2467			},
2468			.num_parents = 1,
2469			.flags = CLK_SET_RATE_PARENT,
2470			.ops = &clk_branch2_ops,
2471		},
2472	},
2473};
2474
2475static struct clk_branch cam_cc_drv_ahb_clk = {
2476	.halt_reg = 0x142d8,
2477	.halt_check = BRANCH_HALT,
2478	.clkr = {
2479		.enable_reg = 0x142d8,
2480		.enable_mask = BIT(0),
2481		.hw.init = &(const struct clk_init_data) {
2482			.name = "cam_cc_drv_ahb_clk",
2483			.parent_hws = (const struct clk_hw*[]) {
2484				&cam_cc_slow_ahb_clk_src.clkr.hw,
2485			},
2486			.num_parents = 1,
2487			.flags = CLK_SET_RATE_PARENT,
2488			.ops = &clk_branch2_ops,
2489		},
2490	},
2491};
2492
2493static struct clk_branch cam_cc_drv_xo_clk = {
2494	.halt_reg = 0x142d4,
2495	.halt_check = BRANCH_HALT,
2496	.clkr = {
2497		.enable_reg = 0x142d4,
2498		.enable_mask = BIT(0),
2499		.hw.init = &(const struct clk_init_data) {
2500			.name = "cam_cc_drv_xo_clk",
2501			.parent_hws = (const struct clk_hw*[]) {
2502				&cam_cc_xo_clk_src.clkr.hw,
2503			},
2504			.num_parents = 1,
2505			.flags = CLK_SET_RATE_PARENT,
2506			.ops = &clk_branch2_ops,
2507		},
2508	},
2509};
2510
2511static struct clk_branch cam_cc_icp_ahb_clk = {
2512	.halt_reg = 0x138fc,
2513	.halt_check = BRANCH_HALT,
2514	.clkr = {
2515		.enable_reg = 0x138fc,
2516		.enable_mask = BIT(0),
2517		.hw.init = &(const struct clk_init_data) {
2518			.name = "cam_cc_icp_ahb_clk",
2519			.parent_hws = (const struct clk_hw*[]) {
2520				&cam_cc_slow_ahb_clk_src.clkr.hw,
2521			},
2522			.num_parents = 1,
2523			.flags = CLK_SET_RATE_PARENT,
2524			.ops = &clk_branch2_ops,
2525		},
2526	},
2527};
2528
2529static struct clk_branch cam_cc_icp_clk = {
2530	.halt_reg = 0x138f0,
2531	.halt_check = BRANCH_HALT,
2532	.clkr = {
2533		.enable_reg = 0x138f0,
2534		.enable_mask = BIT(0),
2535		.hw.init = &(const struct clk_init_data) {
2536			.name = "cam_cc_icp_clk",
2537			.parent_hws = (const struct clk_hw*[]) {
2538				&cam_cc_icp_clk_src.clkr.hw,
2539			},
2540			.num_parents = 1,
2541			.flags = CLK_SET_RATE_PARENT,
2542			.ops = &clk_branch2_ops,
2543		},
2544	},
2545};
2546
2547static struct clk_branch cam_cc_ife_0_clk = {
2548	.halt_reg = 0x11144,
2549	.halt_check = BRANCH_HALT,
2550	.clkr = {
2551		.enable_reg = 0x11144,
2552		.enable_mask = BIT(0),
2553		.hw.init = &(const struct clk_init_data) {
2554			.name = "cam_cc_ife_0_clk",
2555			.parent_hws = (const struct clk_hw*[]) {
2556				&cam_cc_ife_0_clk_src.clkr.hw,
2557			},
2558			.num_parents = 1,
2559			.flags = CLK_SET_RATE_PARENT,
2560			.ops = &clk_branch2_ops,
2561		},
2562	},
2563};
2564
2565static struct clk_branch cam_cc_ife_0_dsp_clk = {
2566	.halt_reg = 0x11280,
2567	.halt_check = BRANCH_HALT,
2568	.clkr = {
2569		.enable_reg = 0x11280,
2570		.enable_mask = BIT(0),
2571		.hw.init = &(const struct clk_init_data) {
2572			.name = "cam_cc_ife_0_dsp_clk",
2573			.parent_hws = (const struct clk_hw*[]) {
2574				&cam_cc_ife_0_dsp_clk_src.clkr.hw,
2575			},
2576			.num_parents = 1,
2577			.flags = CLK_SET_RATE_PARENT,
2578			.ops = &clk_branch2_ops,
2579		},
2580	},
2581};
2582
2583static struct clk_branch cam_cc_ife_0_fast_ahb_clk = {
2584	.halt_reg = 0x1128c,
2585	.halt_check = BRANCH_HALT,
2586	.clkr = {
2587		.enable_reg = 0x1128c,
2588		.enable_mask = BIT(0),
2589		.hw.init = &(const struct clk_init_data) {
2590			.name = "cam_cc_ife_0_fast_ahb_clk",
2591			.parent_hws = (const struct clk_hw*[]) {
2592				&cam_cc_fast_ahb_clk_src.clkr.hw,
2593			},
2594			.num_parents = 1,
2595			.flags = CLK_SET_RATE_PARENT,
2596			.ops = &clk_branch2_ops,
2597		},
2598	},
2599};
2600
2601static struct clk_branch cam_cc_ife_1_clk = {
2602	.halt_reg = 0x12144,
2603	.halt_check = BRANCH_HALT,
2604	.clkr = {
2605		.enable_reg = 0x12144,
2606		.enable_mask = BIT(0),
2607		.hw.init = &(const struct clk_init_data) {
2608			.name = "cam_cc_ife_1_clk",
2609			.parent_hws = (const struct clk_hw*[]) {
2610				&cam_cc_ife_1_clk_src.clkr.hw,
2611			},
2612			.num_parents = 1,
2613			.flags = CLK_SET_RATE_PARENT,
2614			.ops = &clk_branch2_ops,
2615		},
2616	},
2617};
2618
2619static struct clk_branch cam_cc_ife_1_dsp_clk = {
2620	.halt_reg = 0x12280,
2621	.halt_check = BRANCH_HALT,
2622	.clkr = {
2623		.enable_reg = 0x12280,
2624		.enable_mask = BIT(0),
2625		.hw.init = &(const struct clk_init_data) {
2626			.name = "cam_cc_ife_1_dsp_clk",
2627			.parent_hws = (const struct clk_hw*[]) {
2628				&cam_cc_ife_1_dsp_clk_src.clkr.hw,
2629			},
2630			.num_parents = 1,
2631			.flags = CLK_SET_RATE_PARENT,
2632			.ops = &clk_branch2_ops,
2633		},
2634	},
2635};
2636
2637static struct clk_branch cam_cc_ife_1_fast_ahb_clk = {
2638	.halt_reg = 0x1228c,
2639	.halt_check = BRANCH_HALT,
2640	.clkr = {
2641		.enable_reg = 0x1228c,
2642		.enable_mask = BIT(0),
2643		.hw.init = &(const struct clk_init_data) {
2644			.name = "cam_cc_ife_1_fast_ahb_clk",
2645			.parent_hws = (const struct clk_hw*[]) {
2646				&cam_cc_fast_ahb_clk_src.clkr.hw,
2647			},
2648			.num_parents = 1,
2649			.flags = CLK_SET_RATE_PARENT,
2650			.ops = &clk_branch2_ops,
2651		},
2652	},
2653};
2654
2655static struct clk_branch cam_cc_ife_2_clk = {
2656	.halt_reg = 0x123d4,
2657	.halt_check = BRANCH_HALT,
2658	.clkr = {
2659		.enable_reg = 0x123d4,
2660		.enable_mask = BIT(0),
2661		.hw.init = &(const struct clk_init_data) {
2662			.name = "cam_cc_ife_2_clk",
2663			.parent_hws = (const struct clk_hw*[]) {
2664				&cam_cc_ife_2_clk_src.clkr.hw,
2665			},
2666			.num_parents = 1,
2667			.flags = CLK_SET_RATE_PARENT,
2668			.ops = &clk_branch2_ops,
2669		},
2670	},
2671};
2672
2673static struct clk_branch cam_cc_ife_2_dsp_clk = {
2674	.halt_reg = 0x12510,
2675	.halt_check = BRANCH_HALT,
2676	.clkr = {
2677		.enable_reg = 0x12510,
2678		.enable_mask = BIT(0),
2679		.hw.init = &(const struct clk_init_data) {
2680			.name = "cam_cc_ife_2_dsp_clk",
2681			.parent_hws = (const struct clk_hw*[]) {
2682				&cam_cc_ife_2_dsp_clk_src.clkr.hw,
2683			},
2684			.num_parents = 1,
2685			.flags = CLK_SET_RATE_PARENT,
2686			.ops = &clk_branch2_ops,
2687		},
2688	},
2689};
2690
2691static struct clk_branch cam_cc_ife_2_fast_ahb_clk = {
2692	.halt_reg = 0x1251c,
2693	.halt_check = BRANCH_HALT,
2694	.clkr = {
2695		.enable_reg = 0x1251c,
2696		.enable_mask = BIT(0),
2697		.hw.init = &(const struct clk_init_data) {
2698			.name = "cam_cc_ife_2_fast_ahb_clk",
2699			.parent_hws = (const struct clk_hw*[]) {
2700				&cam_cc_fast_ahb_clk_src.clkr.hw,
2701			},
2702			.num_parents = 1,
2703			.flags = CLK_SET_RATE_PARENT,
2704			.ops = &clk_branch2_ops,
2705		},
2706	},
2707};
2708
2709static struct clk_branch cam_cc_ife_lite_ahb_clk = {
2710	.halt_reg = 0x13278,
2711	.halt_check = BRANCH_HALT,
2712	.clkr = {
2713		.enable_reg = 0x13278,
2714		.enable_mask = BIT(0),
2715		.hw.init = &(const struct clk_init_data) {
2716			.name = "cam_cc_ife_lite_ahb_clk",
2717			.parent_hws = (const struct clk_hw*[]) {
2718				&cam_cc_slow_ahb_clk_src.clkr.hw,
2719			},
2720			.num_parents = 1,
2721			.flags = CLK_SET_RATE_PARENT,
2722			.ops = &clk_branch2_ops,
2723		},
2724	},
2725};
2726
2727static struct clk_branch cam_cc_ife_lite_clk = {
2728	.halt_reg = 0x1312c,
2729	.halt_check = BRANCH_HALT,
2730	.clkr = {
2731		.enable_reg = 0x1312c,
2732		.enable_mask = BIT(0),
2733		.hw.init = &(const struct clk_init_data) {
2734			.name = "cam_cc_ife_lite_clk",
2735			.parent_hws = (const struct clk_hw*[]) {
2736				&cam_cc_ife_lite_clk_src.clkr.hw,
2737			},
2738			.num_parents = 1,
2739			.flags = CLK_SET_RATE_PARENT,
2740			.ops = &clk_branch2_ops,
2741		},
2742	},
2743};
2744
2745static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
2746	.halt_reg = 0x13274,
2747	.halt_check = BRANCH_HALT,
2748	.clkr = {
2749		.enable_reg = 0x13274,
2750		.enable_mask = BIT(0),
2751		.hw.init = &(const struct clk_init_data) {
2752			.name = "cam_cc_ife_lite_cphy_rx_clk",
2753			.parent_hws = (const struct clk_hw*[]) {
2754				&cam_cc_cphy_rx_clk_src.clkr.hw,
2755			},
2756			.num_parents = 1,
2757			.flags = CLK_SET_RATE_PARENT,
2758			.ops = &clk_branch2_ops,
2759		},
2760	},
2761};
2762
2763static struct clk_branch cam_cc_ife_lite_csid_clk = {
2764	.halt_reg = 0x13268,
2765	.halt_check = BRANCH_HALT,
2766	.clkr = {
2767		.enable_reg = 0x13268,
2768		.enable_mask = BIT(0),
2769		.hw.init = &(const struct clk_init_data) {
2770			.name = "cam_cc_ife_lite_csid_clk",
2771			.parent_hws = (const struct clk_hw*[]) {
2772				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
2773			},
2774			.num_parents = 1,
2775			.flags = CLK_SET_RATE_PARENT,
2776			.ops = &clk_branch2_ops,
2777		},
2778	},
2779};
2780
2781static struct clk_branch cam_cc_ipe_nps_ahb_clk = {
2782	.halt_reg = 0x1051c,
2783	.halt_check = BRANCH_HALT,
2784	.clkr = {
2785		.enable_reg = 0x1051c,
2786		.enable_mask = BIT(0),
2787		.hw.init = &(const struct clk_init_data) {
2788			.name = "cam_cc_ipe_nps_ahb_clk",
2789			.parent_hws = (const struct clk_hw*[]) {
2790				&cam_cc_slow_ahb_clk_src.clkr.hw,
2791			},
2792			.num_parents = 1,
2793			.flags = CLK_SET_RATE_PARENT,
2794			.ops = &clk_branch2_ops,
2795		},
2796	},
2797};
2798
2799static struct clk_branch cam_cc_ipe_nps_clk = {
2800	.halt_reg = 0x104f8,
2801	.halt_check = BRANCH_HALT,
2802	.clkr = {
2803		.enable_reg = 0x104f8,
2804		.enable_mask = BIT(0),
2805		.hw.init = &(const struct clk_init_data) {
2806			.name = "cam_cc_ipe_nps_clk",
2807			.parent_hws = (const struct clk_hw*[]) {
2808				&cam_cc_ipe_nps_clk_src.clkr.hw,
2809			},
2810			.num_parents = 1,
2811			.flags = CLK_SET_RATE_PARENT,
2812			.ops = &clk_branch2_ops,
2813		},
2814	},
2815};
2816
2817static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = {
2818	.halt_reg = 0x10520,
2819	.halt_check = BRANCH_HALT,
2820	.clkr = {
2821		.enable_reg = 0x10520,
2822		.enable_mask = BIT(0),
2823		.hw.init = &(const struct clk_init_data) {
2824			.name = "cam_cc_ipe_nps_fast_ahb_clk",
2825			.parent_hws = (const struct clk_hw*[]) {
2826				&cam_cc_fast_ahb_clk_src.clkr.hw,
2827			},
2828			.num_parents = 1,
2829			.flags = CLK_SET_RATE_PARENT,
2830			.ops = &clk_branch2_ops,
2831		},
2832	},
2833};
2834
2835static struct clk_branch cam_cc_ipe_pps_clk = {
2836	.halt_reg = 0x10508,
2837	.halt_check = BRANCH_HALT,
2838	.clkr = {
2839		.enable_reg = 0x10508,
2840		.enable_mask = BIT(0),
2841		.hw.init = &(const struct clk_init_data) {
2842			.name = "cam_cc_ipe_pps_clk",
2843			.parent_hws = (const struct clk_hw*[]) {
2844				&cam_cc_ipe_nps_clk_src.clkr.hw,
2845			},
2846			.num_parents = 1,
2847			.flags = CLK_SET_RATE_PARENT,
2848			.ops = &clk_branch2_ops,
2849		},
2850	},
2851};
2852
2853static struct clk_branch cam_cc_ipe_pps_fast_ahb_clk = {
2854	.halt_reg = 0x10524,
2855	.halt_check = BRANCH_HALT,
2856	.clkr = {
2857		.enable_reg = 0x10524,
2858		.enable_mask = BIT(0),
2859		.hw.init = &(const struct clk_init_data) {
2860			.name = "cam_cc_ipe_pps_fast_ahb_clk",
2861			.parent_hws = (const struct clk_hw*[]) {
2862				&cam_cc_fast_ahb_clk_src.clkr.hw,
2863			},
2864			.num_parents = 1,
2865			.flags = CLK_SET_RATE_PARENT,
2866			.ops = &clk_branch2_ops,
2867		},
2868	},
2869};
2870
2871static struct clk_branch cam_cc_jpeg_1_clk = {
2872	.halt_reg = 0x137ac,
2873	.halt_check = BRANCH_HALT,
2874	.clkr = {
2875		.enable_reg = 0x137ac,
2876		.enable_mask = BIT(0),
2877		.hw.init = &(const struct clk_init_data) {
2878			.name = "cam_cc_jpeg_1_clk",
2879			.parent_hws = (const struct clk_hw*[]) {
2880				&cam_cc_jpeg_clk_src.clkr.hw,
2881			},
2882			.num_parents = 1,
2883			.flags = CLK_SET_RATE_PARENT,
2884			.ops = &clk_branch2_ops,
2885		},
2886	},
2887};
2888
2889static struct clk_branch cam_cc_jpeg_clk = {
2890	.halt_reg = 0x137a0,
2891	.halt_check = BRANCH_HALT,
2892	.clkr = {
2893		.enable_reg = 0x137a0,
2894		.enable_mask = BIT(0),
2895		.hw.init = &(const struct clk_init_data) {
2896			.name = "cam_cc_jpeg_clk",
2897			.parent_hws = (const struct clk_hw*[]) {
2898				&cam_cc_jpeg_clk_src.clkr.hw,
2899			},
2900			.num_parents = 1,
2901			.flags = CLK_SET_RATE_PARENT,
2902			.ops = &clk_branch2_ops,
2903		},
2904	},
2905};
2906
2907static struct clk_branch cam_cc_mclk0_clk = {
2908	.halt_reg = 0x1512c,
2909	.halt_check = BRANCH_HALT,
2910	.clkr = {
2911		.enable_reg = 0x1512c,
2912		.enable_mask = BIT(0),
2913		.hw.init = &(const struct clk_init_data) {
2914			.name = "cam_cc_mclk0_clk",
2915			.parent_hws = (const struct clk_hw*[]) {
2916				&cam_cc_mclk0_clk_src.clkr.hw,
2917			},
2918			.num_parents = 1,
2919			.flags = CLK_SET_RATE_PARENT,
2920			.ops = &clk_branch2_ops,
2921		},
2922	},
2923};
2924
2925static struct clk_branch cam_cc_mclk1_clk = {
2926	.halt_reg = 0x1525c,
2927	.halt_check = BRANCH_HALT,
2928	.clkr = {
2929		.enable_reg = 0x1525c,
2930		.enable_mask = BIT(0),
2931		.hw.init = &(const struct clk_init_data) {
2932			.name = "cam_cc_mclk1_clk",
2933			.parent_hws = (const struct clk_hw*[]) {
2934				&cam_cc_mclk1_clk_src.clkr.hw,
2935			},
2936			.num_parents = 1,
2937			.flags = CLK_SET_RATE_PARENT,
2938			.ops = &clk_branch2_ops,
2939		},
2940	},
2941};
2942
2943static struct clk_branch cam_cc_mclk2_clk = {
2944	.halt_reg = 0x1538c,
2945	.halt_check = BRANCH_HALT,
2946	.clkr = {
2947		.enable_reg = 0x1538c,
2948		.enable_mask = BIT(0),
2949		.hw.init = &(const struct clk_init_data) {
2950			.name = "cam_cc_mclk2_clk",
2951			.parent_hws = (const struct clk_hw*[]) {
2952				&cam_cc_mclk2_clk_src.clkr.hw,
2953			},
2954			.num_parents = 1,
2955			.flags = CLK_SET_RATE_PARENT,
2956			.ops = &clk_branch2_ops,
2957		},
2958	},
2959};
2960
2961static struct clk_branch cam_cc_mclk3_clk = {
2962	.halt_reg = 0x154bc,
2963	.halt_check = BRANCH_HALT,
2964	.clkr = {
2965		.enable_reg = 0x154bc,
2966		.enable_mask = BIT(0),
2967		.hw.init = &(const struct clk_init_data) {
2968			.name = "cam_cc_mclk3_clk",
2969			.parent_hws = (const struct clk_hw*[]) {
2970				&cam_cc_mclk3_clk_src.clkr.hw,
2971			},
2972			.num_parents = 1,
2973			.flags = CLK_SET_RATE_PARENT,
2974			.ops = &clk_branch2_ops,
2975		},
2976	},
2977};
2978
2979static struct clk_branch cam_cc_mclk4_clk = {
2980	.halt_reg = 0x155ec,
2981	.halt_check = BRANCH_HALT,
2982	.clkr = {
2983		.enable_reg = 0x155ec,
2984		.enable_mask = BIT(0),
2985		.hw.init = &(const struct clk_init_data) {
2986			.name = "cam_cc_mclk4_clk",
2987			.parent_hws = (const struct clk_hw*[]) {
2988				&cam_cc_mclk4_clk_src.clkr.hw,
2989			},
2990			.num_parents = 1,
2991			.flags = CLK_SET_RATE_PARENT,
2992			.ops = &clk_branch2_ops,
2993		},
2994	},
2995};
2996
2997static struct clk_branch cam_cc_mclk5_clk = {
2998	.halt_reg = 0x1571c,
2999	.halt_check = BRANCH_HALT,
3000	.clkr = {
3001		.enable_reg = 0x1571c,
3002		.enable_mask = BIT(0),
3003		.hw.init = &(const struct clk_init_data) {
3004			.name = "cam_cc_mclk5_clk",
3005			.parent_hws = (const struct clk_hw*[]) {
3006				&cam_cc_mclk5_clk_src.clkr.hw,
3007			},
3008			.num_parents = 1,
3009			.flags = CLK_SET_RATE_PARENT,
3010			.ops = &clk_branch2_ops,
3011		},
3012	},
3013};
3014
3015static struct clk_branch cam_cc_mclk6_clk = {
3016	.halt_reg = 0x1584c,
3017	.halt_check = BRANCH_HALT,
3018	.clkr = {
3019		.enable_reg = 0x1584c,
3020		.enable_mask = BIT(0),
3021		.hw.init = &(const struct clk_init_data) {
3022			.name = "cam_cc_mclk6_clk",
3023			.parent_hws = (const struct clk_hw*[]) {
3024				&cam_cc_mclk6_clk_src.clkr.hw,
3025			},
3026			.num_parents = 1,
3027			.flags = CLK_SET_RATE_PARENT,
3028			.ops = &clk_branch2_ops,
3029		},
3030	},
3031};
3032
3033static struct clk_branch cam_cc_mclk7_clk = {
3034	.halt_reg = 0x1597c,
3035	.halt_check = BRANCH_HALT,
3036	.clkr = {
3037		.enable_reg = 0x1597c,
3038		.enable_mask = BIT(0),
3039		.hw.init = &(const struct clk_init_data) {
3040			.name = "cam_cc_mclk7_clk",
3041			.parent_hws = (const struct clk_hw*[]) {
3042				&cam_cc_mclk7_clk_src.clkr.hw,
3043			},
3044			.num_parents = 1,
3045			.flags = CLK_SET_RATE_PARENT,
3046			.ops = &clk_branch2_ops,
3047		},
3048	},
3049};
3050
3051static struct clk_branch cam_cc_qdss_debug_clk = {
3052	.halt_reg = 0x14050,
3053	.halt_check = BRANCH_HALT,
3054	.clkr = {
3055		.enable_reg = 0x14050,
3056		.enable_mask = BIT(0),
3057		.hw.init = &(const struct clk_init_data) {
3058			.name = "cam_cc_qdss_debug_clk",
3059			.parent_hws = (const struct clk_hw*[]) {
3060				&cam_cc_qdss_debug_clk_src.clkr.hw,
3061			},
3062			.num_parents = 1,
3063			.flags = CLK_SET_RATE_PARENT,
3064			.ops = &clk_branch2_ops,
3065		},
3066	},
3067};
3068
3069static struct clk_branch cam_cc_qdss_debug_xo_clk = {
3070	.halt_reg = 0x14054,
3071	.halt_check = BRANCH_HALT,
3072	.clkr = {
3073		.enable_reg = 0x14054,
3074		.enable_mask = BIT(0),
3075		.hw.init = &(const struct clk_init_data) {
3076			.name = "cam_cc_qdss_debug_xo_clk",
3077			.parent_hws = (const struct clk_hw*[]) {
3078				&cam_cc_xo_clk_src.clkr.hw,
3079			},
3080			.num_parents = 1,
3081			.flags = CLK_SET_RATE_PARENT,
3082			.ops = &clk_branch2_ops,
3083		},
3084	},
3085};
3086
3087static struct clk_branch cam_cc_sbi_clk = {
3088	.halt_reg = 0x10540,
3089	.halt_check = BRANCH_HALT,
3090	.clkr = {
3091		.enable_reg = 0x10540,
3092		.enable_mask = BIT(0),
3093		.hw.init = &(const struct clk_init_data) {
3094			.name = "cam_cc_sbi_clk",
3095			.parent_hws = (const struct clk_hw*[]) {
3096				&cam_cc_ife_0_clk_src.clkr.hw,
3097			},
3098			.num_parents = 1,
3099			.flags = CLK_SET_RATE_PARENT,
3100			.ops = &clk_branch2_ops,
3101		},
3102	},
3103};
3104
3105static struct clk_branch cam_cc_sbi_fast_ahb_clk = {
3106	.halt_reg = 0x10550,
3107	.halt_check = BRANCH_HALT,
3108	.clkr = {
3109		.enable_reg = 0x10550,
3110		.enable_mask = BIT(0),
3111		.hw.init = &(const struct clk_init_data) {
3112			.name = "cam_cc_sbi_fast_ahb_clk",
3113			.parent_hws = (const struct clk_hw*[]) {
3114				&cam_cc_fast_ahb_clk_src.clkr.hw,
3115			},
3116			.num_parents = 1,
3117			.flags = CLK_SET_RATE_PARENT,
3118			.ops = &clk_branch2_ops,
3119		},
3120	},
3121};
3122
3123static struct clk_branch cam_cc_sfe_0_clk = {
3124	.halt_reg = 0x133c0,
3125	.halt_check = BRANCH_HALT,
3126	.clkr = {
3127		.enable_reg = 0x133c0,
3128		.enable_mask = BIT(0),
3129		.hw.init = &(const struct clk_init_data) {
3130			.name = "cam_cc_sfe_0_clk",
3131			.parent_hws = (const struct clk_hw*[]) {
3132				&cam_cc_sfe_0_clk_src.clkr.hw,
3133			},
3134			.num_parents = 1,
3135			.flags = CLK_SET_RATE_PARENT,
3136			.ops = &clk_branch2_ops,
3137		},
3138	},
3139};
3140
3141static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = {
3142	.halt_reg = 0x133d8,
3143	.halt_check = BRANCH_HALT,
3144	.clkr = {
3145		.enable_reg = 0x133d8,
3146		.enable_mask = BIT(0),
3147		.hw.init = &(const struct clk_init_data) {
3148			.name = "cam_cc_sfe_0_fast_ahb_clk",
3149			.parent_hws = (const struct clk_hw*[]) {
3150				&cam_cc_fast_ahb_clk_src.clkr.hw,
3151			},
3152			.num_parents = 1,
3153			.flags = CLK_SET_RATE_PARENT,
3154			.ops = &clk_branch2_ops,
3155		},
3156	},
3157};
3158
3159static struct clk_branch cam_cc_sfe_1_clk = {
3160	.halt_reg = 0x13520,
3161	.halt_check = BRANCH_HALT,
3162	.clkr = {
3163		.enable_reg = 0x13520,
3164		.enable_mask = BIT(0),
3165		.hw.init = &(const struct clk_init_data) {
3166			.name = "cam_cc_sfe_1_clk",
3167			.parent_hws = (const struct clk_hw*[]) {
3168				&cam_cc_sfe_1_clk_src.clkr.hw,
3169			},
3170			.num_parents = 1,
3171			.flags = CLK_SET_RATE_PARENT,
3172			.ops = &clk_branch2_ops,
3173		},
3174	},
3175};
3176
3177static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = {
3178	.halt_reg = 0x13538,
3179	.halt_check = BRANCH_HALT,
3180	.clkr = {
3181		.enable_reg = 0x13538,
3182		.enable_mask = BIT(0),
3183		.hw.init = &(const struct clk_init_data) {
3184			.name = "cam_cc_sfe_1_fast_ahb_clk",
3185			.parent_hws = (const struct clk_hw*[]) {
3186				&cam_cc_fast_ahb_clk_src.clkr.hw,
3187			},
3188			.num_parents = 1,
3189			.flags = CLK_SET_RATE_PARENT,
3190			.ops = &clk_branch2_ops,
3191		},
3192	},
3193};
3194
3195static struct gdsc cam_cc_bps_gdsc = {
3196	.gdscr = 0x10004,
3197	.en_rest_wait_val = 0x2,
3198	.en_few_wait_val = 0x2,
3199	.clk_dis_wait_val = 0xf,
3200	.pd = {
3201		.name = "cam_cc_bps_gdsc",
3202	},
3203	.pwrsts = PWRSTS_OFF_ON,
3204	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3205};
3206
3207static struct gdsc cam_cc_ife_0_gdsc = {
3208	.gdscr = 0x11004,
3209	.en_rest_wait_val = 0x2,
3210	.en_few_wait_val = 0x2,
3211	.clk_dis_wait_val = 0xf,
3212	.pd = {
3213		.name = "cam_cc_ife_0_gdsc",
3214	},
3215	.pwrsts = PWRSTS_OFF_ON,
3216	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3217};
3218
3219static struct gdsc cam_cc_ife_1_gdsc = {
3220	.gdscr = 0x12004,
3221	.en_rest_wait_val = 0x2,
3222	.en_few_wait_val = 0x2,
3223	.clk_dis_wait_val = 0xf,
3224	.pd = {
3225		.name = "cam_cc_ife_1_gdsc",
3226	},
3227	.pwrsts = PWRSTS_OFF_ON,
3228	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3229};
3230
3231static struct gdsc cam_cc_ife_2_gdsc = {
3232	.gdscr = 0x12294,
3233	.en_rest_wait_val = 0x2,
3234	.en_few_wait_val = 0x2,
3235	.clk_dis_wait_val = 0xf,
3236	.pd = {
3237		.name = "cam_cc_ife_2_gdsc",
3238	},
3239	.pwrsts = PWRSTS_OFF_ON,
3240	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3241};
3242
3243static struct gdsc cam_cc_ipe_0_gdsc = {
3244	.gdscr = 0x103b8,
3245	.en_rest_wait_val = 0x2,
3246	.en_few_wait_val = 0x2,
3247	.clk_dis_wait_val = 0xf,
3248	.pd = {
3249		.name = "cam_cc_ipe_0_gdsc",
3250	},
3251	.pwrsts = PWRSTS_OFF_ON,
3252	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3253};
3254
3255static struct gdsc cam_cc_sbi_gdsc = {
3256	.gdscr = 0x1052c,
3257	.en_rest_wait_val = 0x2,
3258	.en_few_wait_val = 0x2,
3259	.clk_dis_wait_val = 0xf,
3260	.pd = {
3261		.name = "cam_cc_sbi_gdsc",
3262	},
3263	.pwrsts = PWRSTS_OFF_ON,
3264	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3265};
3266
3267static struct gdsc cam_cc_sfe_0_gdsc = {
3268	.gdscr = 0x13280,
3269	.en_rest_wait_val = 0x2,
3270	.en_few_wait_val = 0x2,
3271	.clk_dis_wait_val = 0xf,
3272	.pd = {
3273		.name = "cam_cc_sfe_0_gdsc",
3274	},
3275	.pwrsts = PWRSTS_OFF_ON,
3276	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3277};
3278
3279static struct gdsc cam_cc_sfe_1_gdsc = {
3280	.gdscr = 0x133e0,
3281	.en_rest_wait_val = 0x2,
3282	.en_few_wait_val = 0x2,
3283	.clk_dis_wait_val = 0xf,
3284	.pd = {
3285		.name = "cam_cc_sfe_1_gdsc",
3286	},
3287	.pwrsts = PWRSTS_OFF_ON,
3288	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3289};
3290
3291static struct gdsc cam_cc_titan_top_gdsc = {
3292	.gdscr = 0x14058,
3293	.en_rest_wait_val = 0x2,
3294	.en_few_wait_val = 0x2,
3295	.clk_dis_wait_val = 0xf,
3296	.pd = {
3297		.name = "cam_cc_titan_top_gdsc",
3298	},
3299	.pwrsts = PWRSTS_OFF_ON,
3300	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3301};
3302
3303static struct clk_regmap *cam_cc_sm8550_clocks[] = {
3304	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
3305	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
3306	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
3307	[CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
3308	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
3309	[CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
3310	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
3311	[CAM_CC_CAMNOC_XO_CLK] = &cam_cc_camnoc_xo_clk.clkr,
3312	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
3313	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
3314	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
3315	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
3316	[CAM_CC_CCI_2_CLK] = &cam_cc_cci_2_clk.clkr,
3317	[CAM_CC_CCI_2_CLK_SRC] = &cam_cc_cci_2_clk_src.clkr,
3318	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
3319	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
3320	[CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr,
3321	[CAM_CC_CPAS_CRE_CLK] = &cam_cc_cpas_cre_clk.clkr,
3322	[CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr,
3323	[CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr,
3324	[CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr,
3325	[CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr,
3326	[CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr,
3327	[CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr,
3328	[CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr,
3329	[CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr,
3330	[CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr,
3331	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
3332	[CAM_CC_CRE_AHB_CLK] = &cam_cc_cre_ahb_clk.clkr,
3333	[CAM_CC_CRE_CLK] = &cam_cc_cre_clk.clkr,
3334	[CAM_CC_CRE_CLK_SRC] = &cam_cc_cre_clk_src.clkr,
3335	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
3336	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
3337	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
3338	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
3339	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
3340	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
3341	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
3342	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
3343	[CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
3344	[CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
3345	[CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
3346	[CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
3347	[CAM_CC_CSI6PHYTIMER_CLK] = &cam_cc_csi6phytimer_clk.clkr,
3348	[CAM_CC_CSI6PHYTIMER_CLK_SRC] = &cam_cc_csi6phytimer_clk_src.clkr,
3349	[CAM_CC_CSI7PHYTIMER_CLK] = &cam_cc_csi7phytimer_clk.clkr,
3350	[CAM_CC_CSI7PHYTIMER_CLK_SRC] = &cam_cc_csi7phytimer_clk_src.clkr,
3351	[CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr,
3352	[CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr,
3353	[CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr,
3354	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
3355	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
3356	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
3357	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
3358	[CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
3359	[CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
3360	[CAM_CC_CSIPHY6_CLK] = &cam_cc_csiphy6_clk.clkr,
3361	[CAM_CC_CSIPHY7_CLK] = &cam_cc_csiphy7_clk.clkr,
3362	[CAM_CC_DRV_AHB_CLK] = &cam_cc_drv_ahb_clk.clkr,
3363	[CAM_CC_DRV_XO_CLK] = &cam_cc_drv_xo_clk.clkr,
3364	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
3365	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
3366	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
3367	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
3368	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
3369	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
3370	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
3371	[CAM_CC_IFE_0_DSP_CLK_SRC] = &cam_cc_ife_0_dsp_clk_src.clkr,
3372	[CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr,
3373	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
3374	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
3375	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
3376	[CAM_CC_IFE_1_DSP_CLK_SRC] = &cam_cc_ife_1_dsp_clk_src.clkr,
3377	[CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr,
3378	[CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
3379	[CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
3380	[CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr,
3381	[CAM_CC_IFE_2_DSP_CLK_SRC] = &cam_cc_ife_2_dsp_clk_src.clkr,
3382	[CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr,
3383	[CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
3384	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
3385	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
3386	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
3387	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
3388	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
3389	[CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr,
3390	[CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr,
3391	[CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr,
3392	[CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr,
3393	[CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr,
3394	[CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr,
3395	[CAM_CC_JPEG_1_CLK] = &cam_cc_jpeg_1_clk.clkr,
3396	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
3397	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
3398	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
3399	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
3400	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
3401	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
3402	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
3403	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
3404	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
3405	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
3406	[CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
3407	[CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
3408	[CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
3409	[CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
3410	[CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
3411	[CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
3412	[CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
3413	[CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
3414	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
3415	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
3416	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
3417	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
3418	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
3419	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
3420	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
3421	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
3422	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
3423	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
3424	[CAM_CC_PLL5] = &cam_cc_pll5.clkr,
3425	[CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
3426	[CAM_CC_PLL6] = &cam_cc_pll6.clkr,
3427	[CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
3428	[CAM_CC_PLL7] = &cam_cc_pll7.clkr,
3429	[CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr,
3430	[CAM_CC_PLL8] = &cam_cc_pll8.clkr,
3431	[CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
3432	[CAM_CC_PLL9] = &cam_cc_pll9.clkr,
3433	[CAM_CC_PLL9_OUT_EVEN] = &cam_cc_pll9_out_even.clkr,
3434	[CAM_CC_PLL10] = &cam_cc_pll10.clkr,
3435	[CAM_CC_PLL10_OUT_EVEN] = &cam_cc_pll10_out_even.clkr,
3436	[CAM_CC_PLL11] = &cam_cc_pll11.clkr,
3437	[CAM_CC_PLL11_OUT_EVEN] = &cam_cc_pll11_out_even.clkr,
3438	[CAM_CC_PLL12] = &cam_cc_pll12.clkr,
3439	[CAM_CC_PLL12_OUT_EVEN] = &cam_cc_pll12_out_even.clkr,
3440	[CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
3441	[CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
3442	[CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
3443	[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
3444	[CAM_CC_SBI_FAST_AHB_CLK] = &cam_cc_sbi_fast_ahb_clk.clkr,
3445	[CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
3446	[CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
3447	[CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,
3448	[CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
3449	[CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
3450	[CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
3451	[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
3452	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
3453	[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
3454};
3455
3456static struct gdsc *cam_cc_sm8550_gdscs[] = {
3457	[CAM_CC_BPS_GDSC] = &cam_cc_bps_gdsc,
3458	[CAM_CC_IFE_0_GDSC] = &cam_cc_ife_0_gdsc,
3459	[CAM_CC_IFE_1_GDSC] = &cam_cc_ife_1_gdsc,
3460	[CAM_CC_IFE_2_GDSC] = &cam_cc_ife_2_gdsc,
3461	[CAM_CC_IPE_0_GDSC] = &cam_cc_ipe_0_gdsc,
3462	[CAM_CC_SBI_GDSC] = &cam_cc_sbi_gdsc,
3463	[CAM_CC_SFE_0_GDSC] = &cam_cc_sfe_0_gdsc,
3464	[CAM_CC_SFE_1_GDSC] = &cam_cc_sfe_1_gdsc,
3465	[CAM_CC_TITAN_TOP_GDSC] = &cam_cc_titan_top_gdsc,
3466};
3467
3468static const struct qcom_reset_map cam_cc_sm8550_resets[] = {
3469	[CAM_CC_BPS_BCR] = { 0x10000 },
3470	[CAM_CC_DRV_BCR] = { 0x142d0 },
3471	[CAM_CC_ICP_BCR] = { 0x137c0 },
3472	[CAM_CC_IFE_0_BCR] = { 0x11000 },
3473	[CAM_CC_IFE_1_BCR] = { 0x12000 },
3474	[CAM_CC_IFE_2_BCR] = { 0x12290 },
3475	[CAM_CC_IPE_0_BCR] = { 0x103b4 },
3476	[CAM_CC_QDSS_DEBUG_BCR] = { 0x13f20 },
3477	[CAM_CC_SBI_BCR] = { 0x10528 },
3478	[CAM_CC_SFE_0_BCR] = { 0x1327c },
3479	[CAM_CC_SFE_1_BCR] = { 0x133dc },
3480};
3481
3482static const struct regmap_config cam_cc_sm8550_regmap_config = {
3483	.reg_bits = 32,
3484	.reg_stride = 4,
3485	.val_bits = 32,
3486	.max_register = 0x16320,
3487	.fast_io = true,
3488};
3489
3490static struct qcom_cc_desc cam_cc_sm8550_desc = {
3491	.config = &cam_cc_sm8550_regmap_config,
3492	.clks = cam_cc_sm8550_clocks,
3493	.num_clks = ARRAY_SIZE(cam_cc_sm8550_clocks),
3494	.resets = cam_cc_sm8550_resets,
3495	.num_resets = ARRAY_SIZE(cam_cc_sm8550_resets),
3496	.gdscs = cam_cc_sm8550_gdscs,
3497	.num_gdscs = ARRAY_SIZE(cam_cc_sm8550_gdscs),
3498};
3499
3500static const struct of_device_id cam_cc_sm8550_match_table[] = {
3501	{ .compatible = "qcom,sm8550-camcc" },
3502	{ }
3503};
3504MODULE_DEVICE_TABLE(of, cam_cc_sm8550_match_table);
3505
3506static int cam_cc_sm8550_probe(struct platform_device *pdev)
3507{
3508	struct regmap *regmap;
3509	int ret;
3510
3511	ret = devm_pm_runtime_enable(&pdev->dev);
3512	if (ret)
3513		return ret;
3514
3515	ret = pm_runtime_resume_and_get(&pdev->dev);
3516	if (ret)
3517		return ret;
3518
3519	regmap = qcom_cc_map(pdev, &cam_cc_sm8550_desc);
3520	if (IS_ERR(regmap)) {
3521		pm_runtime_put(&pdev->dev);
3522		return PTR_ERR(regmap);
3523	}
3524
3525	clk_lucid_ole_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
3526	clk_lucid_ole_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
3527	clk_rivian_evo_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
3528	clk_lucid_ole_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
3529	clk_lucid_ole_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
3530	clk_lucid_ole_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config);
3531	clk_lucid_ole_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config);
3532	clk_lucid_ole_pll_configure(&cam_cc_pll7, regmap, &cam_cc_pll7_config);
3533	clk_lucid_ole_pll_configure(&cam_cc_pll8, regmap, &cam_cc_pll8_config);
3534	clk_lucid_ole_pll_configure(&cam_cc_pll9, regmap, &cam_cc_pll9_config);
3535	clk_lucid_ole_pll_configure(&cam_cc_pll10, regmap, &cam_cc_pll10_config);
3536	clk_lucid_ole_pll_configure(&cam_cc_pll11, regmap, &cam_cc_pll11_config);
3537	clk_lucid_ole_pll_configure(&cam_cc_pll12, regmap, &cam_cc_pll12_config);
3538
3539	/* Keep some clocks always-on */
3540	qcom_branch_set_clk_en(regmap, 0x1419c); /* CAM_CC_GDSC_CLK */
3541	qcom_branch_set_clk_en(regmap, 0x142cc); /* CAM_CC_SLEEP_CLK */
3542
3543	ret = qcom_cc_really_probe(pdev, &cam_cc_sm8550_desc, regmap);
3544
3545	pm_runtime_put(&pdev->dev);
3546
3547	return ret;
3548}
3549
3550static struct platform_driver cam_cc_sm8550_driver = {
3551	.probe = cam_cc_sm8550_probe,
3552	.driver = {
3553		.name = "cam_cc-sm8550",
3554		.of_match_table = cam_cc_sm8550_match_table,
3555	},
3556};
3557
3558module_platform_driver(cam_cc_sm8550_driver);
3559
3560MODULE_DESCRIPTION("QTI CAMCC SM8550 Driver");
3561MODULE_LICENSE("GPL");
3562