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