xref: /openbmc/linux/drivers/clk/qcom/camcc-sm6350.c (revision 80f5451d9a7c20d8c09f44f4eb1083fd861d7a46)
1*80f5451dSKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
2*80f5451dSKonrad Dybcio /*
3*80f5451dSKonrad Dybcio  * Copyright (c) 2022, The Linux Foundation. All rights reserved.
4*80f5451dSKonrad Dybcio  * Copyright (c) 2022, Linaro Limited
5*80f5451dSKonrad Dybcio  */
6*80f5451dSKonrad Dybcio 
7*80f5451dSKonrad Dybcio #include <linux/clk-provider.h>
8*80f5451dSKonrad Dybcio #include <linux/module.h>
9*80f5451dSKonrad Dybcio #include <linux/platform_device.h>
10*80f5451dSKonrad Dybcio #include <linux/regmap.h>
11*80f5451dSKonrad Dybcio 
12*80f5451dSKonrad Dybcio #include <dt-bindings/clock/qcom,sm6350-camcc.h>
13*80f5451dSKonrad Dybcio 
14*80f5451dSKonrad Dybcio #include "clk-alpha-pll.h"
15*80f5451dSKonrad Dybcio #include "clk-branch.h"
16*80f5451dSKonrad Dybcio #include "clk-rcg.h"
17*80f5451dSKonrad Dybcio #include "common.h"
18*80f5451dSKonrad Dybcio #include "gdsc.h"
19*80f5451dSKonrad Dybcio 
20*80f5451dSKonrad Dybcio enum {
21*80f5451dSKonrad Dybcio 	DT_BI_TCXO,
22*80f5451dSKonrad Dybcio };
23*80f5451dSKonrad Dybcio 
24*80f5451dSKonrad Dybcio enum {
25*80f5451dSKonrad Dybcio 	P_BI_TCXO,
26*80f5451dSKonrad Dybcio 	P_CAMCC_PLL0_OUT_EVEN,
27*80f5451dSKonrad Dybcio 	P_CAMCC_PLL0_OUT_MAIN,
28*80f5451dSKonrad Dybcio 	P_CAMCC_PLL1_OUT_EVEN,
29*80f5451dSKonrad Dybcio 	P_CAMCC_PLL1_OUT_MAIN,
30*80f5451dSKonrad Dybcio 	P_CAMCC_PLL2_OUT_EARLY,
31*80f5451dSKonrad Dybcio 	P_CAMCC_PLL2_OUT_MAIN,
32*80f5451dSKonrad Dybcio 	P_CAMCC_PLL3_OUT_MAIN,
33*80f5451dSKonrad Dybcio };
34*80f5451dSKonrad Dybcio 
35*80f5451dSKonrad Dybcio static struct pll_vco fabia_vco[] = {
36*80f5451dSKonrad Dybcio 	{ 249600000, 2000000000, 0 },
37*80f5451dSKonrad Dybcio };
38*80f5451dSKonrad Dybcio 
39*80f5451dSKonrad Dybcio /* 600MHz configuration */
40*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll0_config = {
41*80f5451dSKonrad Dybcio 	.l = 0x1f,
42*80f5451dSKonrad Dybcio 	.alpha = 0x4000,
43*80f5451dSKonrad Dybcio 	.config_ctl_val = 0x20485699,
44*80f5451dSKonrad Dybcio 	.config_ctl_hi_val = 0x00002067,
45*80f5451dSKonrad Dybcio 	.test_ctl_val = 0x40000000,
46*80f5451dSKonrad Dybcio 	.test_ctl_hi_val = 0x00000002,
47*80f5451dSKonrad Dybcio 	.user_ctl_val = 0x00000101,
48*80f5451dSKonrad Dybcio 	.user_ctl_hi_val = 0x00004805,
49*80f5451dSKonrad Dybcio };
50*80f5451dSKonrad Dybcio 
51*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll0 = {
52*80f5451dSKonrad Dybcio 	.offset = 0x0,
53*80f5451dSKonrad Dybcio 	.vco_table = fabia_vco,
54*80f5451dSKonrad Dybcio 	.num_vco = ARRAY_SIZE(fabia_vco),
55*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
56*80f5451dSKonrad Dybcio 	.clkr = {
57*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
58*80f5451dSKonrad Dybcio 			.name = "camcc_pll0",
59*80f5451dSKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
60*80f5451dSKonrad Dybcio 				.index = DT_BI_TCXO,
61*80f5451dSKonrad Dybcio 			},
62*80f5451dSKonrad Dybcio 			.num_parents = 1,
63*80f5451dSKonrad Dybcio 			.ops = &clk_alpha_pll_fabia_ops,
64*80f5451dSKonrad Dybcio 		},
65*80f5451dSKonrad Dybcio 	},
66*80f5451dSKonrad Dybcio };
67*80f5451dSKonrad Dybcio 
68*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll0_out_even[] = {
69*80f5451dSKonrad Dybcio 	{ 0x1, 2 },
70*80f5451dSKonrad Dybcio 	{ }
71*80f5451dSKonrad Dybcio };
72*80f5451dSKonrad Dybcio 
73*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll0_out_even = {
74*80f5451dSKonrad Dybcio 	.offset = 0x0,
75*80f5451dSKonrad Dybcio 	.post_div_shift = 8,
76*80f5451dSKonrad Dybcio 	.post_div_table = post_div_table_camcc_pll0_out_even,
77*80f5451dSKonrad Dybcio 	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll0_out_even),
78*80f5451dSKonrad Dybcio 	.width = 4,
79*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
80*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
81*80f5451dSKonrad Dybcio 		.name = "camcc_pll0_out_even",
82*80f5451dSKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
83*80f5451dSKonrad Dybcio 			&camcc_pll0.clkr.hw,
84*80f5451dSKonrad Dybcio 		},
85*80f5451dSKonrad Dybcio 		.num_parents = 1,
86*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
87*80f5451dSKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
88*80f5451dSKonrad Dybcio 	},
89*80f5451dSKonrad Dybcio };
90*80f5451dSKonrad Dybcio 
91*80f5451dSKonrad Dybcio /* 808MHz configuration */
92*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll1_config = {
93*80f5451dSKonrad Dybcio 	.l = 0x2a,
94*80f5451dSKonrad Dybcio 	.alpha = 0x1555,
95*80f5451dSKonrad Dybcio 	.config_ctl_val = 0x20485699,
96*80f5451dSKonrad Dybcio 	.config_ctl_hi_val = 0x00002067,
97*80f5451dSKonrad Dybcio 	.test_ctl_val = 0x40000000,
98*80f5451dSKonrad Dybcio 	.test_ctl_hi_val = 0x00000000,
99*80f5451dSKonrad Dybcio 	.user_ctl_val = 0x00000101,
100*80f5451dSKonrad Dybcio 	.user_ctl_hi_val = 0x00004805,
101*80f5451dSKonrad Dybcio };
102*80f5451dSKonrad Dybcio 
103*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll1 = {
104*80f5451dSKonrad Dybcio 	.offset = 0x1000,
105*80f5451dSKonrad Dybcio 	.vco_table = fabia_vco,
106*80f5451dSKonrad Dybcio 	.num_vco = ARRAY_SIZE(fabia_vco),
107*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
108*80f5451dSKonrad Dybcio 	.clkr = {
109*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
110*80f5451dSKonrad Dybcio 			.name = "camcc_pll1",
111*80f5451dSKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
112*80f5451dSKonrad Dybcio 				.index = DT_BI_TCXO,
113*80f5451dSKonrad Dybcio 			},
114*80f5451dSKonrad Dybcio 			.num_parents = 1,
115*80f5451dSKonrad Dybcio 			.ops = &clk_alpha_pll_fabia_ops,
116*80f5451dSKonrad Dybcio 		},
117*80f5451dSKonrad Dybcio 	},
118*80f5451dSKonrad Dybcio };
119*80f5451dSKonrad Dybcio 
120*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll1_out_even[] = {
121*80f5451dSKonrad Dybcio 	{ 0x1, 2 },
122*80f5451dSKonrad Dybcio 	{ }
123*80f5451dSKonrad Dybcio };
124*80f5451dSKonrad Dybcio 
125*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll1_out_even = {
126*80f5451dSKonrad Dybcio 	.offset = 0x1000,
127*80f5451dSKonrad Dybcio 	.post_div_shift = 8,
128*80f5451dSKonrad Dybcio 	.post_div_table = post_div_table_camcc_pll1_out_even,
129*80f5451dSKonrad Dybcio 	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll1_out_even),
130*80f5451dSKonrad Dybcio 	.width = 4,
131*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
132*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
133*80f5451dSKonrad Dybcio 		.name = "camcc_pll1_out_even",
134*80f5451dSKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
135*80f5451dSKonrad Dybcio 			&camcc_pll1.clkr.hw,
136*80f5451dSKonrad Dybcio 		},
137*80f5451dSKonrad Dybcio 		.num_parents = 1,
138*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
139*80f5451dSKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
140*80f5451dSKonrad Dybcio 	},
141*80f5451dSKonrad Dybcio };
142*80f5451dSKonrad Dybcio 
143*80f5451dSKonrad Dybcio /* 1920MHz configuration */
144*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll2_config = {
145*80f5451dSKonrad Dybcio 	.l = 0x64,
146*80f5451dSKonrad Dybcio 	.alpha = 0x0,
147*80f5451dSKonrad Dybcio 	.post_div_val = 0x3 << 8,
148*80f5451dSKonrad Dybcio 	.post_div_mask = 0x3 << 8,
149*80f5451dSKonrad Dybcio 	.aux_output_mask = BIT(1),
150*80f5451dSKonrad Dybcio 	.main_output_mask = BIT(0),
151*80f5451dSKonrad Dybcio 	.early_output_mask = BIT(3),
152*80f5451dSKonrad Dybcio 	.config_ctl_val = 0x20000800,
153*80f5451dSKonrad Dybcio 	.config_ctl_hi_val = 0x400003d2,
154*80f5451dSKonrad Dybcio 	.test_ctl_val = 0x04000400,
155*80f5451dSKonrad Dybcio 	.test_ctl_hi_val = 0x00004000,
156*80f5451dSKonrad Dybcio };
157*80f5451dSKonrad Dybcio 
158*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll2 = {
159*80f5451dSKonrad Dybcio 	.offset = 0x2000,
160*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_AGERA],
161*80f5451dSKonrad Dybcio 	.clkr = {
162*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
163*80f5451dSKonrad Dybcio 			.name = "camcc_pll2",
164*80f5451dSKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
165*80f5451dSKonrad Dybcio 				.index = DT_BI_TCXO,
166*80f5451dSKonrad Dybcio 			},
167*80f5451dSKonrad Dybcio 			.num_parents = 1,
168*80f5451dSKonrad Dybcio 			.ops = &clk_alpha_pll_agera_ops,
169*80f5451dSKonrad Dybcio 		},
170*80f5451dSKonrad Dybcio 	},
171*80f5451dSKonrad Dybcio };
172*80f5451dSKonrad Dybcio 
173*80f5451dSKonrad Dybcio static struct clk_fixed_factor camcc_pll2_out_early = {
174*80f5451dSKonrad Dybcio 	.mult = 1,
175*80f5451dSKonrad Dybcio 	.div = 2,
176*80f5451dSKonrad Dybcio 	.hw.init = &(struct clk_init_data){
177*80f5451dSKonrad Dybcio 		.name = "camcc_pll2_out_early",
178*80f5451dSKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
179*80f5451dSKonrad Dybcio 			&camcc_pll2.clkr.hw,
180*80f5451dSKonrad Dybcio 		},
181*80f5451dSKonrad Dybcio 		.num_parents = 1,
182*80f5451dSKonrad Dybcio 		.ops = &clk_fixed_factor_ops,
183*80f5451dSKonrad Dybcio 	},
184*80f5451dSKonrad Dybcio };
185*80f5451dSKonrad Dybcio 
186*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll2_out_main[] = {
187*80f5451dSKonrad Dybcio 	{ 0x1, 2 },
188*80f5451dSKonrad Dybcio 	{ }
189*80f5451dSKonrad Dybcio };
190*80f5451dSKonrad Dybcio 
191*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll2_out_main = {
192*80f5451dSKonrad Dybcio 	.offset = 0x2000,
193*80f5451dSKonrad Dybcio 	.post_div_shift = 8,
194*80f5451dSKonrad Dybcio 	.post_div_table = post_div_table_camcc_pll2_out_main,
195*80f5451dSKonrad Dybcio 	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll2_out_main),
196*80f5451dSKonrad Dybcio 	.width = 2,
197*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_AGERA],
198*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
199*80f5451dSKonrad Dybcio 		.name = "camcc_pll2_out_main",
200*80f5451dSKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
201*80f5451dSKonrad Dybcio 			&camcc_pll2.clkr.hw,
202*80f5451dSKonrad Dybcio 		},
203*80f5451dSKonrad Dybcio 		.num_parents = 1,
204*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
205*80f5451dSKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
206*80f5451dSKonrad Dybcio 	},
207*80f5451dSKonrad Dybcio };
208*80f5451dSKonrad Dybcio 
209*80f5451dSKonrad Dybcio /* 384MHz configuration */
210*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll3_config = {
211*80f5451dSKonrad Dybcio 	.l = 0x14,
212*80f5451dSKonrad Dybcio 	.alpha = 0x0,
213*80f5451dSKonrad Dybcio 	.config_ctl_val = 0x20485699,
214*80f5451dSKonrad Dybcio 	.config_ctl_hi_val = 0x00002067,
215*80f5451dSKonrad Dybcio 	.test_ctl_val = 0x40000000,
216*80f5451dSKonrad Dybcio 	.test_ctl_hi_val = 0x00000002,
217*80f5451dSKonrad Dybcio 	.user_ctl_val = 0x00000001,
218*80f5451dSKonrad Dybcio 	.user_ctl_hi_val = 0x00014805,
219*80f5451dSKonrad Dybcio };
220*80f5451dSKonrad Dybcio 
221*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll3 = {
222*80f5451dSKonrad Dybcio 	.offset = 0x3000,
223*80f5451dSKonrad Dybcio 	.vco_table = fabia_vco,
224*80f5451dSKonrad Dybcio 	.num_vco = ARRAY_SIZE(fabia_vco),
225*80f5451dSKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
226*80f5451dSKonrad Dybcio 	.clkr = {
227*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
228*80f5451dSKonrad Dybcio 			.name = "camcc_pll3",
229*80f5451dSKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
230*80f5451dSKonrad Dybcio 				.index = DT_BI_TCXO,
231*80f5451dSKonrad Dybcio 			},
232*80f5451dSKonrad Dybcio 			.num_parents = 1,
233*80f5451dSKonrad Dybcio 			.ops = &clk_alpha_pll_fabia_ops,
234*80f5451dSKonrad Dybcio 		},
235*80f5451dSKonrad Dybcio 	},
236*80f5451dSKonrad Dybcio };
237*80f5451dSKonrad Dybcio 
238*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_0[] = {
239*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
240*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_EVEN, 6 },
241*80f5451dSKonrad Dybcio };
242*80f5451dSKonrad Dybcio 
243*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_0[] = {
244*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
245*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0_out_even.clkr.hw },
246*80f5451dSKonrad Dybcio };
247*80f5451dSKonrad Dybcio 
248*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_1[] = {
249*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
250*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
251*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL1_OUT_EVEN, 3 },
252*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL2_OUT_MAIN, 4 },
253*80f5451dSKonrad Dybcio };
254*80f5451dSKonrad Dybcio 
255*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_1[] = {
256*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
257*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
258*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll1_out_even.clkr.hw },
259*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll2_out_main.clkr.hw },
260*80f5451dSKonrad Dybcio };
261*80f5451dSKonrad Dybcio 
262*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_2[] = {
263*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
264*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
265*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL3_OUT_MAIN, 5 },
266*80f5451dSKonrad Dybcio };
267*80f5451dSKonrad Dybcio 
268*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_2[] = {
269*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
270*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
271*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll3.clkr.hw },
272*80f5451dSKonrad Dybcio };
273*80f5451dSKonrad Dybcio 
274*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_3[] = {
275*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
276*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL2_OUT_EARLY, 3 },
277*80f5451dSKonrad Dybcio };
278*80f5451dSKonrad Dybcio 
279*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_3[] = {
280*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
281*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll2_out_early.hw },
282*80f5451dSKonrad Dybcio };
283*80f5451dSKonrad Dybcio 
284*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_4[] = {
285*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
286*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
287*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL1_OUT_EVEN, 3 },
288*80f5451dSKonrad Dybcio };
289*80f5451dSKonrad Dybcio 
290*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_4[] = {
291*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
292*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
293*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll1_out_even.clkr.hw },
294*80f5451dSKonrad Dybcio };
295*80f5451dSKonrad Dybcio 
296*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_5[] = {
297*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
298*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
299*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL1_OUT_EVEN, 3 },
300*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL3_OUT_MAIN, 5 },
301*80f5451dSKonrad Dybcio };
302*80f5451dSKonrad Dybcio 
303*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_5[] = {
304*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
305*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
306*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll1_out_even.clkr.hw },
307*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll3.clkr.hw },
308*80f5451dSKonrad Dybcio };
309*80f5451dSKonrad Dybcio 
310*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_6[] = {
311*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
312*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
313*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL2_OUT_MAIN, 4 },
314*80f5451dSKonrad Dybcio };
315*80f5451dSKonrad Dybcio 
316*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_6[] = {
317*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
318*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
319*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll2_out_main.clkr.hw },
320*80f5451dSKonrad Dybcio };
321*80f5451dSKonrad Dybcio 
322*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_7[] = {
323*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
324*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
325*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL1_OUT_MAIN, 2 },
326*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL2_OUT_MAIN, 4 },
327*80f5451dSKonrad Dybcio };
328*80f5451dSKonrad Dybcio 
329*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_7[] = {
330*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
331*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
332*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll1.clkr.hw },
333*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll2_out_main.clkr.hw },
334*80f5451dSKonrad Dybcio };
335*80f5451dSKonrad Dybcio 
336*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_8[] = {
337*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
338*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
339*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL1_OUT_MAIN, 2 },
340*80f5451dSKonrad Dybcio };
341*80f5451dSKonrad Dybcio 
342*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_8[] = {
343*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
344*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll0.clkr.hw },
345*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll1.clkr.hw },
346*80f5451dSKonrad Dybcio };
347*80f5451dSKonrad Dybcio 
348*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_9[] = {
349*80f5451dSKonrad Dybcio 	{ P_BI_TCXO, 0 },
350*80f5451dSKonrad Dybcio 	{ P_CAMCC_PLL2_OUT_MAIN, 4 },
351*80f5451dSKonrad Dybcio };
352*80f5451dSKonrad Dybcio 
353*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_9[] = {
354*80f5451dSKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
355*80f5451dSKonrad Dybcio 	{ .hw = &camcc_pll2_out_main.clkr.hw },
356*80f5451dSKonrad Dybcio };
357*80f5451dSKonrad Dybcio 
358*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_bps_clk_src[] = {
359*80f5451dSKonrad Dybcio 	F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
360*80f5451dSKonrad Dybcio 	F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
361*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
362*80f5451dSKonrad Dybcio 	F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
363*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
364*80f5451dSKonrad Dybcio 	{ }
365*80f5451dSKonrad Dybcio };
366*80f5451dSKonrad Dybcio 
367*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_bps_clk_src = {
368*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x6010,
369*80f5451dSKonrad Dybcio 	.mnd_width = 0,
370*80f5451dSKonrad Dybcio 	.hid_width = 5,
371*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_1,
372*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_bps_clk_src,
373*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
374*80f5451dSKonrad Dybcio 		.name = "camcc_bps_clk_src",
375*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_1,
376*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
377*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
378*80f5451dSKonrad Dybcio 	},
379*80f5451dSKonrad Dybcio };
380*80f5451dSKonrad Dybcio 
381*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_cci_0_clk_src[] = {
382*80f5451dSKonrad Dybcio 	F(37500000, P_CAMCC_PLL0_OUT_EVEN, 8, 0, 0),
383*80f5451dSKonrad Dybcio 	F(50000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0),
384*80f5451dSKonrad Dybcio 	F(100000000, P_CAMCC_PLL0_OUT_EVEN, 3, 0, 0),
385*80f5451dSKonrad Dybcio 	{ }
386*80f5451dSKonrad Dybcio };
387*80f5451dSKonrad Dybcio 
388*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cci_0_clk_src = {
389*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xf004,
390*80f5451dSKonrad Dybcio 	.mnd_width = 8,
391*80f5451dSKonrad Dybcio 	.hid_width = 5,
392*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
393*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cci_0_clk_src,
394*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
395*80f5451dSKonrad Dybcio 		.name = "camcc_cci_0_clk_src",
396*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
397*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
398*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
399*80f5451dSKonrad Dybcio 	},
400*80f5451dSKonrad Dybcio };
401*80f5451dSKonrad Dybcio 
402*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cci_1_clk_src = {
403*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x10004,
404*80f5451dSKonrad Dybcio 	.mnd_width = 8,
405*80f5451dSKonrad Dybcio 	.hid_width = 5,
406*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
407*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cci_0_clk_src,
408*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
409*80f5451dSKonrad Dybcio 		.name = "camcc_cci_1_clk_src",
410*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
411*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
412*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
413*80f5451dSKonrad Dybcio 	},
414*80f5451dSKonrad Dybcio };
415*80f5451dSKonrad Dybcio 
416*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_cphy_rx_clk_src[] = {
417*80f5451dSKonrad Dybcio 	F(150000000, P_CAMCC_PLL0_OUT_MAIN, 4, 0, 0),
418*80f5451dSKonrad Dybcio 	F(300000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
419*80f5451dSKonrad Dybcio 	F(384000000, P_CAMCC_PLL3_OUT_MAIN, 1, 0, 0),
420*80f5451dSKonrad Dybcio 	F(400000000, P_CAMCC_PLL0_OUT_MAIN, 1.5, 0, 0),
421*80f5451dSKonrad Dybcio 	{ }
422*80f5451dSKonrad Dybcio };
423*80f5451dSKonrad Dybcio 
424*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cphy_rx_clk_src = {
425*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x9064,
426*80f5451dSKonrad Dybcio 	.mnd_width = 0,
427*80f5451dSKonrad Dybcio 	.hid_width = 5,
428*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_2,
429*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
430*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
431*80f5451dSKonrad Dybcio 		.name = "camcc_cphy_rx_clk_src",
432*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_2,
433*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
434*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
435*80f5451dSKonrad Dybcio 	},
436*80f5451dSKonrad Dybcio };
437*80f5451dSKonrad Dybcio 
438*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_csi0phytimer_clk_src[] = {
439*80f5451dSKonrad Dybcio 	F(300000000, P_CAMCC_PLL0_OUT_EVEN, 1, 0, 0),
440*80f5451dSKonrad Dybcio 	{ }
441*80f5451dSKonrad Dybcio };
442*80f5451dSKonrad Dybcio 
443*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi0phytimer_clk_src = {
444*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x5004,
445*80f5451dSKonrad Dybcio 	.mnd_width = 0,
446*80f5451dSKonrad Dybcio 	.hid_width = 5,
447*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
448*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
449*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
450*80f5451dSKonrad Dybcio 		.name = "camcc_csi0phytimer_clk_src",
451*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
452*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
453*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
454*80f5451dSKonrad Dybcio 	},
455*80f5451dSKonrad Dybcio };
456*80f5451dSKonrad Dybcio 
457*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi1phytimer_clk_src = {
458*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x5028,
459*80f5451dSKonrad Dybcio 	.mnd_width = 0,
460*80f5451dSKonrad Dybcio 	.hid_width = 5,
461*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
462*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
463*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
464*80f5451dSKonrad Dybcio 		.name = "camcc_csi1phytimer_clk_src",
465*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
466*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
467*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
468*80f5451dSKonrad Dybcio 	},
469*80f5451dSKonrad Dybcio };
470*80f5451dSKonrad Dybcio 
471*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi2phytimer_clk_src = {
472*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x504c,
473*80f5451dSKonrad Dybcio 	.mnd_width = 0,
474*80f5451dSKonrad Dybcio 	.hid_width = 5,
475*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
476*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
477*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
478*80f5451dSKonrad Dybcio 		.name = "camcc_csi2phytimer_clk_src",
479*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
480*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
481*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
482*80f5451dSKonrad Dybcio 	},
483*80f5451dSKonrad Dybcio };
484*80f5451dSKonrad Dybcio 
485*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi3phytimer_clk_src = {
486*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x5070,
487*80f5451dSKonrad Dybcio 	.mnd_width = 0,
488*80f5451dSKonrad Dybcio 	.hid_width = 5,
489*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_0,
490*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
491*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
492*80f5451dSKonrad Dybcio 		.name = "camcc_csi3phytimer_clk_src",
493*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_0,
494*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
495*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
496*80f5451dSKonrad Dybcio 	},
497*80f5451dSKonrad Dybcio };
498*80f5451dSKonrad Dybcio 
499*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_fast_ahb_clk_src[] = {
500*80f5451dSKonrad Dybcio 	F(100000000, P_CAMCC_PLL0_OUT_MAIN, 6, 0, 0),
501*80f5451dSKonrad Dybcio 	F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
502*80f5451dSKonrad Dybcio 	F(300000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
503*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
504*80f5451dSKonrad Dybcio 	{ }
505*80f5451dSKonrad Dybcio };
506*80f5451dSKonrad Dybcio 
507*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_fast_ahb_clk_src = {
508*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x603c,
509*80f5451dSKonrad Dybcio 	.mnd_width = 0,
510*80f5451dSKonrad Dybcio 	.hid_width = 5,
511*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_4,
512*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_fast_ahb_clk_src,
513*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
514*80f5451dSKonrad Dybcio 		.name = "camcc_fast_ahb_clk_src",
515*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_4,
516*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_4),
517*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
518*80f5451dSKonrad Dybcio 	},
519*80f5451dSKonrad Dybcio };
520*80f5451dSKonrad Dybcio 
521*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_icp_clk_src[] = {
522*80f5451dSKonrad Dybcio 	F(240000000, P_CAMCC_PLL0_OUT_MAIN, 2.5, 0, 0),
523*80f5451dSKonrad Dybcio 	F(384000000, P_CAMCC_PLL3_OUT_MAIN, 1, 0, 0),
524*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
525*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
526*80f5451dSKonrad Dybcio 	{ }
527*80f5451dSKonrad Dybcio };
528*80f5451dSKonrad Dybcio 
529*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_icp_clk_src = {
530*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xe014,
531*80f5451dSKonrad Dybcio 	.mnd_width = 0,
532*80f5451dSKonrad Dybcio 	.hid_width = 5,
533*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_5,
534*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_icp_clk_src,
535*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
536*80f5451dSKonrad Dybcio 		.name = "camcc_icp_clk_src",
537*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_5,
538*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_5),
539*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
540*80f5451dSKonrad Dybcio 	},
541*80f5451dSKonrad Dybcio };
542*80f5451dSKonrad Dybcio 
543*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ife_0_clk_src[] = {
544*80f5451dSKonrad Dybcio 	F(240000000, P_CAMCC_PLL0_OUT_MAIN, 2.5, 0, 0),
545*80f5451dSKonrad Dybcio 	F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
546*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
547*80f5451dSKonrad Dybcio 	F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
548*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
549*80f5451dSKonrad Dybcio 	{ }
550*80f5451dSKonrad Dybcio };
551*80f5451dSKonrad Dybcio 
552*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_0_clk_src = {
553*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x9010,
554*80f5451dSKonrad Dybcio 	.mnd_width = 0,
555*80f5451dSKonrad Dybcio 	.hid_width = 5,
556*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_1,
557*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_ife_0_clk_src,
558*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
559*80f5451dSKonrad Dybcio 		.name = "camcc_ife_0_clk_src",
560*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_1,
561*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
562*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
563*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
564*80f5451dSKonrad Dybcio 	},
565*80f5451dSKonrad Dybcio };
566*80f5451dSKonrad Dybcio 
567*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_0_csid_clk_src = {
568*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x903c,
569*80f5451dSKonrad Dybcio 	.mnd_width = 0,
570*80f5451dSKonrad Dybcio 	.hid_width = 5,
571*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_2,
572*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
573*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
574*80f5451dSKonrad Dybcio 		.name = "camcc_ife_0_csid_clk_src",
575*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_2,
576*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
577*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
578*80f5451dSKonrad Dybcio 	},
579*80f5451dSKonrad Dybcio };
580*80f5451dSKonrad Dybcio 
581*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_1_clk_src = {
582*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xa010,
583*80f5451dSKonrad Dybcio 	.mnd_width = 0,
584*80f5451dSKonrad Dybcio 	.hid_width = 5,
585*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_1,
586*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_ife_0_clk_src,
587*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
588*80f5451dSKonrad Dybcio 		.name = "camcc_ife_1_clk_src",
589*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_1,
590*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
591*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
592*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
593*80f5451dSKonrad Dybcio 	},
594*80f5451dSKonrad Dybcio };
595*80f5451dSKonrad Dybcio 
596*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_1_csid_clk_src = {
597*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xa034,
598*80f5451dSKonrad Dybcio 	.mnd_width = 0,
599*80f5451dSKonrad Dybcio 	.hid_width = 5,
600*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_2,
601*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
602*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
603*80f5451dSKonrad Dybcio 		.name = "camcc_ife_1_csid_clk_src",
604*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_2,
605*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
606*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
607*80f5451dSKonrad Dybcio 	},
608*80f5451dSKonrad Dybcio };
609*80f5451dSKonrad Dybcio 
610*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_2_clk_src = {
611*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xb00c,
612*80f5451dSKonrad Dybcio 	.mnd_width = 0,
613*80f5451dSKonrad Dybcio 	.hid_width = 5,
614*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_1,
615*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_ife_0_clk_src,
616*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
617*80f5451dSKonrad Dybcio 		.name = "camcc_ife_2_clk_src",
618*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_1,
619*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
620*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
621*80f5451dSKonrad Dybcio 	},
622*80f5451dSKonrad Dybcio };
623*80f5451dSKonrad Dybcio 
624*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_2_csid_clk_src = {
625*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xb030,
626*80f5451dSKonrad Dybcio 	.mnd_width = 0,
627*80f5451dSKonrad Dybcio 	.hid_width = 5,
628*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_2,
629*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
630*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
631*80f5451dSKonrad Dybcio 		.name = "camcc_ife_2_csid_clk_src",
632*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_2,
633*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
634*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
635*80f5451dSKonrad Dybcio 	},
636*80f5451dSKonrad Dybcio };
637*80f5451dSKonrad Dybcio 
638*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ife_lite_clk_src[] = {
639*80f5451dSKonrad Dybcio 	F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
640*80f5451dSKonrad Dybcio 	F(400000000, P_CAMCC_PLL0_OUT_MAIN, 1.5, 0, 0),
641*80f5451dSKonrad Dybcio 	F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
642*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
643*80f5451dSKonrad Dybcio 	{ }
644*80f5451dSKonrad Dybcio };
645*80f5451dSKonrad Dybcio 
646*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_lite_clk_src = {
647*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xc004,
648*80f5451dSKonrad Dybcio 	.mnd_width = 0,
649*80f5451dSKonrad Dybcio 	.hid_width = 5,
650*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_6,
651*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_ife_lite_clk_src,
652*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
653*80f5451dSKonrad Dybcio 		.name = "camcc_ife_lite_clk_src",
654*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_6,
655*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_6),
656*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
657*80f5451dSKonrad Dybcio 	},
658*80f5451dSKonrad Dybcio };
659*80f5451dSKonrad Dybcio 
660*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_lite_csid_clk_src = {
661*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xc024,
662*80f5451dSKonrad Dybcio 	.mnd_width = 0,
663*80f5451dSKonrad Dybcio 	.hid_width = 5,
664*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_2,
665*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
666*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
667*80f5451dSKonrad Dybcio 		.name = "camcc_ife_lite_csid_clk_src",
668*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_2,
669*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
670*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
671*80f5451dSKonrad Dybcio 	},
672*80f5451dSKonrad Dybcio };
673*80f5451dSKonrad Dybcio 
674*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ipe_0_clk_src[] = {
675*80f5451dSKonrad Dybcio 	F(240000000, P_CAMCC_PLL2_OUT_MAIN, 2, 0, 0),
676*80f5451dSKonrad Dybcio 	F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
677*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_MAIN, 2, 0, 0),
678*80f5451dSKonrad Dybcio 	F(538666667, P_CAMCC_PLL1_OUT_MAIN, 1.5, 0, 0),
679*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
680*80f5451dSKonrad Dybcio 	{ }
681*80f5451dSKonrad Dybcio };
682*80f5451dSKonrad Dybcio 
683*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ipe_0_clk_src = {
684*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x7010,
685*80f5451dSKonrad Dybcio 	.mnd_width = 0,
686*80f5451dSKonrad Dybcio 	.hid_width = 5,
687*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_7,
688*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_ipe_0_clk_src,
689*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
690*80f5451dSKonrad Dybcio 		.name = "camcc_ipe_0_clk_src",
691*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_7,
692*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_7),
693*80f5451dSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
694*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
695*80f5451dSKonrad Dybcio 	},
696*80f5451dSKonrad Dybcio };
697*80f5451dSKonrad Dybcio 
698*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_jpeg_clk_src[] = {
699*80f5451dSKonrad Dybcio 	F(66666667, P_CAMCC_PLL0_OUT_MAIN, 9, 0, 0),
700*80f5451dSKonrad Dybcio 	F(133333333, P_CAMCC_PLL0_OUT_MAIN, 4.5, 0, 0),
701*80f5451dSKonrad Dybcio 	F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
702*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
703*80f5451dSKonrad Dybcio 	F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
704*80f5451dSKonrad Dybcio 	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0),
705*80f5451dSKonrad Dybcio 	{ }
706*80f5451dSKonrad Dybcio };
707*80f5451dSKonrad Dybcio 
708*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_jpeg_clk_src = {
709*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0xd004,
710*80f5451dSKonrad Dybcio 	.mnd_width = 0,
711*80f5451dSKonrad Dybcio 	.hid_width = 5,
712*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_1,
713*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_jpeg_clk_src,
714*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
715*80f5451dSKonrad Dybcio 		.name = "camcc_jpeg_clk_src",
716*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_1,
717*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
718*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
719*80f5451dSKonrad Dybcio 	},
720*80f5451dSKonrad Dybcio };
721*80f5451dSKonrad Dybcio 
722*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_lrme_clk_src[] = {
723*80f5451dSKonrad Dybcio 	F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
724*80f5451dSKonrad Dybcio 	F(269333333, P_CAMCC_PLL1_OUT_MAIN, 3, 0, 0),
725*80f5451dSKonrad Dybcio 	F(323200000, P_CAMCC_PLL1_OUT_MAIN, 2.5, 0, 0),
726*80f5451dSKonrad Dybcio 	F(404000000, P_CAMCC_PLL1_OUT_MAIN, 2, 0, 0),
727*80f5451dSKonrad Dybcio 	{ }
728*80f5451dSKonrad Dybcio };
729*80f5451dSKonrad Dybcio 
730*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_lrme_clk_src = {
731*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x11004,
732*80f5451dSKonrad Dybcio 	.mnd_width = 0,
733*80f5451dSKonrad Dybcio 	.hid_width = 5,
734*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_8,
735*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_lrme_clk_src,
736*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
737*80f5451dSKonrad Dybcio 		.name = "camcc_lrme_clk_src",
738*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_8,
739*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_8),
740*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
741*80f5451dSKonrad Dybcio 	},
742*80f5451dSKonrad Dybcio };
743*80f5451dSKonrad Dybcio 
744*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_mclk0_clk_src[] = {
745*80f5451dSKonrad Dybcio 	F(19200000, P_CAMCC_PLL2_OUT_EARLY, 1, 1, 50),
746*80f5451dSKonrad Dybcio 	F(24000000, P_CAMCC_PLL2_OUT_EARLY, 10, 1, 4),
747*80f5451dSKonrad Dybcio 	F(64000000, P_CAMCC_PLL2_OUT_EARLY, 15, 0, 0),
748*80f5451dSKonrad Dybcio 	{ }
749*80f5451dSKonrad Dybcio };
750*80f5451dSKonrad Dybcio 
751*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk0_clk_src = {
752*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x4004,
753*80f5451dSKonrad Dybcio 	.mnd_width = 8,
754*80f5451dSKonrad Dybcio 	.hid_width = 5,
755*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_3,
756*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_mclk0_clk_src,
757*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
758*80f5451dSKonrad Dybcio 		.name = "camcc_mclk0_clk_src",
759*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_3,
760*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
761*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
762*80f5451dSKonrad Dybcio 	},
763*80f5451dSKonrad Dybcio };
764*80f5451dSKonrad Dybcio 
765*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk1_clk_src = {
766*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x4024,
767*80f5451dSKonrad Dybcio 	.mnd_width = 8,
768*80f5451dSKonrad Dybcio 	.hid_width = 5,
769*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_3,
770*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_mclk0_clk_src,
771*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
772*80f5451dSKonrad Dybcio 		.name = "camcc_mclk1_clk_src",
773*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_3,
774*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
775*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
776*80f5451dSKonrad Dybcio 	},
777*80f5451dSKonrad Dybcio };
778*80f5451dSKonrad Dybcio 
779*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk2_clk_src = {
780*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x4044,
781*80f5451dSKonrad Dybcio 	.mnd_width = 8,
782*80f5451dSKonrad Dybcio 	.hid_width = 5,
783*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_3,
784*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_mclk0_clk_src,
785*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
786*80f5451dSKonrad Dybcio 		.name = "camcc_mclk2_clk_src",
787*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_3,
788*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
789*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
790*80f5451dSKonrad Dybcio 	},
791*80f5451dSKonrad Dybcio };
792*80f5451dSKonrad Dybcio 
793*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk3_clk_src = {
794*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x4064,
795*80f5451dSKonrad Dybcio 	.mnd_width = 8,
796*80f5451dSKonrad Dybcio 	.hid_width = 5,
797*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_3,
798*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_mclk0_clk_src,
799*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
800*80f5451dSKonrad Dybcio 		.name = "camcc_mclk3_clk_src",
801*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_3,
802*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
803*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
804*80f5451dSKonrad Dybcio 	},
805*80f5451dSKonrad Dybcio };
806*80f5451dSKonrad Dybcio 
807*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk4_clk_src = {
808*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x4084,
809*80f5451dSKonrad Dybcio 	.mnd_width = 8,
810*80f5451dSKonrad Dybcio 	.hid_width = 5,
811*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_3,
812*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_mclk0_clk_src,
813*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
814*80f5451dSKonrad Dybcio 		.name = "camcc_mclk4_clk_src",
815*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_3,
816*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
817*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
818*80f5451dSKonrad Dybcio 	},
819*80f5451dSKonrad Dybcio };
820*80f5451dSKonrad Dybcio 
821*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_slow_ahb_clk_src[] = {
822*80f5451dSKonrad Dybcio 	F(80000000, P_CAMCC_PLL2_OUT_MAIN, 6, 0, 0),
823*80f5451dSKonrad Dybcio 	{ }
824*80f5451dSKonrad Dybcio };
825*80f5451dSKonrad Dybcio 
826*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_slow_ahb_clk_src = {
827*80f5451dSKonrad Dybcio 	.cmd_rcgr = 0x6058,
828*80f5451dSKonrad Dybcio 	.mnd_width = 0,
829*80f5451dSKonrad Dybcio 	.hid_width = 5,
830*80f5451dSKonrad Dybcio 	.parent_map = camcc_parent_map_9,
831*80f5451dSKonrad Dybcio 	.freq_tbl = ftbl_camcc_slow_ahb_clk_src,
832*80f5451dSKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
833*80f5451dSKonrad Dybcio 		.name = "camcc_slow_ahb_clk_src",
834*80f5451dSKonrad Dybcio 		.parent_data = camcc_parent_data_9,
835*80f5451dSKonrad Dybcio 		.num_parents = ARRAY_SIZE(camcc_parent_data_9),
836*80f5451dSKonrad Dybcio 		.ops = &clk_rcg2_ops,
837*80f5451dSKonrad Dybcio 	},
838*80f5451dSKonrad Dybcio };
839*80f5451dSKonrad Dybcio 
840*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_ahb_clk = {
841*80f5451dSKonrad Dybcio 	.halt_reg = 0x6070,
842*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
843*80f5451dSKonrad Dybcio 	.clkr = {
844*80f5451dSKonrad Dybcio 		.enable_reg = 0x6070,
845*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
846*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
847*80f5451dSKonrad Dybcio 			.name = "camcc_bps_ahb_clk",
848*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
849*80f5451dSKonrad Dybcio 				&camcc_slow_ahb_clk_src.clkr.hw
850*80f5451dSKonrad Dybcio 			},
851*80f5451dSKonrad Dybcio 			.num_parents = 1,
852*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
853*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
854*80f5451dSKonrad Dybcio 		},
855*80f5451dSKonrad Dybcio 	},
856*80f5451dSKonrad Dybcio };
857*80f5451dSKonrad Dybcio 
858*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_areg_clk = {
859*80f5451dSKonrad Dybcio 	.halt_reg = 0x6054,
860*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
861*80f5451dSKonrad Dybcio 	.clkr = {
862*80f5451dSKonrad Dybcio 		.enable_reg = 0x6054,
863*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
864*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
865*80f5451dSKonrad Dybcio 			.name = "camcc_bps_areg_clk",
866*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
867*80f5451dSKonrad Dybcio 				&camcc_fast_ahb_clk_src.clkr.hw
868*80f5451dSKonrad Dybcio 			},
869*80f5451dSKonrad Dybcio 			.num_parents = 1,
870*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
871*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
872*80f5451dSKonrad Dybcio 		},
873*80f5451dSKonrad Dybcio 	},
874*80f5451dSKonrad Dybcio };
875*80f5451dSKonrad Dybcio 
876*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_axi_clk = {
877*80f5451dSKonrad Dybcio 	.halt_reg = 0x6038,
878*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
879*80f5451dSKonrad Dybcio 	.clkr = {
880*80f5451dSKonrad Dybcio 		.enable_reg = 0x6038,
881*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
882*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
883*80f5451dSKonrad Dybcio 			.name = "camcc_bps_axi_clk",
884*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
885*80f5451dSKonrad Dybcio 		},
886*80f5451dSKonrad Dybcio 	},
887*80f5451dSKonrad Dybcio };
888*80f5451dSKonrad Dybcio 
889*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_clk = {
890*80f5451dSKonrad Dybcio 	.halt_reg = 0x6028,
891*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
892*80f5451dSKonrad Dybcio 	.clkr = {
893*80f5451dSKonrad Dybcio 		.enable_reg = 0x6028,
894*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
895*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
896*80f5451dSKonrad Dybcio 			.name = "camcc_bps_clk",
897*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
898*80f5451dSKonrad Dybcio 				&camcc_bps_clk_src.clkr.hw
899*80f5451dSKonrad Dybcio 			},
900*80f5451dSKonrad Dybcio 			.num_parents = 1,
901*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
902*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
903*80f5451dSKonrad Dybcio 		},
904*80f5451dSKonrad Dybcio 	},
905*80f5451dSKonrad Dybcio };
906*80f5451dSKonrad Dybcio 
907*80f5451dSKonrad Dybcio static struct clk_branch camcc_camnoc_axi_clk = {
908*80f5451dSKonrad Dybcio 	.halt_reg = 0x13004,
909*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
910*80f5451dSKonrad Dybcio 	.clkr = {
911*80f5451dSKonrad Dybcio 		.enable_reg = 0x13004,
912*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
913*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
914*80f5451dSKonrad Dybcio 			.name = "camcc_camnoc_axi_clk",
915*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
916*80f5451dSKonrad Dybcio 		},
917*80f5451dSKonrad Dybcio 	},
918*80f5451dSKonrad Dybcio };
919*80f5451dSKonrad Dybcio 
920*80f5451dSKonrad Dybcio static struct clk_branch camcc_cci_0_clk = {
921*80f5451dSKonrad Dybcio 	.halt_reg = 0xf01c,
922*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
923*80f5451dSKonrad Dybcio 	.clkr = {
924*80f5451dSKonrad Dybcio 		.enable_reg = 0xf01c,
925*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
926*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
927*80f5451dSKonrad Dybcio 			.name = "camcc_cci_0_clk",
928*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
929*80f5451dSKonrad Dybcio 				&camcc_cci_0_clk_src.clkr.hw
930*80f5451dSKonrad Dybcio 			},
931*80f5451dSKonrad Dybcio 			.num_parents = 1,
932*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
933*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
934*80f5451dSKonrad Dybcio 		},
935*80f5451dSKonrad Dybcio 	},
936*80f5451dSKonrad Dybcio };
937*80f5451dSKonrad Dybcio 
938*80f5451dSKonrad Dybcio static struct clk_branch camcc_cci_1_clk = {
939*80f5451dSKonrad Dybcio 	.halt_reg = 0x1001c,
940*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
941*80f5451dSKonrad Dybcio 	.clkr = {
942*80f5451dSKonrad Dybcio 		.enable_reg = 0x1001c,
943*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
944*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
945*80f5451dSKonrad Dybcio 			.name = "camcc_cci_1_clk",
946*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
947*80f5451dSKonrad Dybcio 				&camcc_cci_1_clk_src.clkr.hw
948*80f5451dSKonrad Dybcio 			},
949*80f5451dSKonrad Dybcio 			.num_parents = 1,
950*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
951*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
952*80f5451dSKonrad Dybcio 		},
953*80f5451dSKonrad Dybcio 	},
954*80f5451dSKonrad Dybcio };
955*80f5451dSKonrad Dybcio 
956*80f5451dSKonrad Dybcio static struct clk_branch camcc_core_ahb_clk = {
957*80f5451dSKonrad Dybcio 	.halt_reg = 0x14010,
958*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
959*80f5451dSKonrad Dybcio 	.clkr = {
960*80f5451dSKonrad Dybcio 		.enable_reg = 0x14010,
961*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
962*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
963*80f5451dSKonrad Dybcio 			.name = "camcc_core_ahb_clk",
964*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
965*80f5451dSKonrad Dybcio 				&camcc_slow_ahb_clk_src.clkr.hw
966*80f5451dSKonrad Dybcio 			},
967*80f5451dSKonrad Dybcio 			.num_parents = 1,
968*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
969*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
970*80f5451dSKonrad Dybcio 		},
971*80f5451dSKonrad Dybcio 	},
972*80f5451dSKonrad Dybcio };
973*80f5451dSKonrad Dybcio 
974*80f5451dSKonrad Dybcio static struct clk_branch camcc_cpas_ahb_clk = {
975*80f5451dSKonrad Dybcio 	.halt_reg = 0x12004,
976*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
977*80f5451dSKonrad Dybcio 	.clkr = {
978*80f5451dSKonrad Dybcio 		.enable_reg = 0x12004,
979*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
980*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
981*80f5451dSKonrad Dybcio 			.name = "camcc_cpas_ahb_clk",
982*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
983*80f5451dSKonrad Dybcio 				&camcc_slow_ahb_clk_src.clkr.hw
984*80f5451dSKonrad Dybcio 			},
985*80f5451dSKonrad Dybcio 			.num_parents = 1,
986*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
987*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
988*80f5451dSKonrad Dybcio 		},
989*80f5451dSKonrad Dybcio 	},
990*80f5451dSKonrad Dybcio };
991*80f5451dSKonrad Dybcio 
992*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi0phytimer_clk = {
993*80f5451dSKonrad Dybcio 	.halt_reg = 0x501c,
994*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
995*80f5451dSKonrad Dybcio 	.clkr = {
996*80f5451dSKonrad Dybcio 		.enable_reg = 0x501c,
997*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
998*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
999*80f5451dSKonrad Dybcio 			.name = "camcc_csi0phytimer_clk",
1000*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1001*80f5451dSKonrad Dybcio 				&camcc_csi0phytimer_clk_src.clkr.hw
1002*80f5451dSKonrad Dybcio 			},
1003*80f5451dSKonrad Dybcio 			.num_parents = 1,
1004*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1005*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1006*80f5451dSKonrad Dybcio 		},
1007*80f5451dSKonrad Dybcio 	},
1008*80f5451dSKonrad Dybcio };
1009*80f5451dSKonrad Dybcio 
1010*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi1phytimer_clk = {
1011*80f5451dSKonrad Dybcio 	.halt_reg = 0x5040,
1012*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1013*80f5451dSKonrad Dybcio 	.clkr = {
1014*80f5451dSKonrad Dybcio 		.enable_reg = 0x5040,
1015*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1016*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1017*80f5451dSKonrad Dybcio 			.name = "camcc_csi1phytimer_clk",
1018*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1019*80f5451dSKonrad Dybcio 				&camcc_csi1phytimer_clk_src.clkr.hw
1020*80f5451dSKonrad Dybcio 			},
1021*80f5451dSKonrad Dybcio 			.num_parents = 1,
1022*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1023*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1024*80f5451dSKonrad Dybcio 		},
1025*80f5451dSKonrad Dybcio 	},
1026*80f5451dSKonrad Dybcio };
1027*80f5451dSKonrad Dybcio 
1028*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi2phytimer_clk = {
1029*80f5451dSKonrad Dybcio 	.halt_reg = 0x5064,
1030*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1031*80f5451dSKonrad Dybcio 	.clkr = {
1032*80f5451dSKonrad Dybcio 		.enable_reg = 0x5064,
1033*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1034*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1035*80f5451dSKonrad Dybcio 			.name = "camcc_csi2phytimer_clk",
1036*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1037*80f5451dSKonrad Dybcio 				&camcc_csi2phytimer_clk_src.clkr.hw
1038*80f5451dSKonrad Dybcio 			},
1039*80f5451dSKonrad Dybcio 			.num_parents = 1,
1040*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1041*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1042*80f5451dSKonrad Dybcio 		},
1043*80f5451dSKonrad Dybcio 	},
1044*80f5451dSKonrad Dybcio };
1045*80f5451dSKonrad Dybcio 
1046*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi3phytimer_clk = {
1047*80f5451dSKonrad Dybcio 	.halt_reg = 0x5088,
1048*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1049*80f5451dSKonrad Dybcio 	.clkr = {
1050*80f5451dSKonrad Dybcio 		.enable_reg = 0x5088,
1051*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1052*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1053*80f5451dSKonrad Dybcio 			.name = "camcc_csi3phytimer_clk",
1054*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1055*80f5451dSKonrad Dybcio 				&camcc_csi3phytimer_clk_src.clkr.hw
1056*80f5451dSKonrad Dybcio 			},
1057*80f5451dSKonrad Dybcio 			.num_parents = 1,
1058*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1059*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1060*80f5451dSKonrad Dybcio 		},
1061*80f5451dSKonrad Dybcio 	},
1062*80f5451dSKonrad Dybcio };
1063*80f5451dSKonrad Dybcio 
1064*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy0_clk = {
1065*80f5451dSKonrad Dybcio 	.halt_reg = 0x5020,
1066*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1067*80f5451dSKonrad Dybcio 	.clkr = {
1068*80f5451dSKonrad Dybcio 		.enable_reg = 0x5020,
1069*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1070*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1071*80f5451dSKonrad Dybcio 			.name = "camcc_csiphy0_clk",
1072*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1073*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1074*80f5451dSKonrad Dybcio 			},
1075*80f5451dSKonrad Dybcio 			.num_parents = 1,
1076*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1077*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1078*80f5451dSKonrad Dybcio 		},
1079*80f5451dSKonrad Dybcio 	},
1080*80f5451dSKonrad Dybcio };
1081*80f5451dSKonrad Dybcio 
1082*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy1_clk = {
1083*80f5451dSKonrad Dybcio 	.halt_reg = 0x5044,
1084*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1085*80f5451dSKonrad Dybcio 	.clkr = {
1086*80f5451dSKonrad Dybcio 		.enable_reg = 0x5044,
1087*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1088*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1089*80f5451dSKonrad Dybcio 			.name = "camcc_csiphy1_clk",
1090*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1091*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1092*80f5451dSKonrad Dybcio 			},
1093*80f5451dSKonrad Dybcio 			.num_parents = 1,
1094*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1095*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1096*80f5451dSKonrad Dybcio 		},
1097*80f5451dSKonrad Dybcio 	},
1098*80f5451dSKonrad Dybcio };
1099*80f5451dSKonrad Dybcio 
1100*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy2_clk = {
1101*80f5451dSKonrad Dybcio 	.halt_reg = 0x5068,
1102*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1103*80f5451dSKonrad Dybcio 	.clkr = {
1104*80f5451dSKonrad Dybcio 		.enable_reg = 0x5068,
1105*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1106*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1107*80f5451dSKonrad Dybcio 			.name = "camcc_csiphy2_clk",
1108*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1109*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1110*80f5451dSKonrad Dybcio 			},
1111*80f5451dSKonrad Dybcio 			.num_parents = 1,
1112*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1113*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1114*80f5451dSKonrad Dybcio 		},
1115*80f5451dSKonrad Dybcio 	},
1116*80f5451dSKonrad Dybcio };
1117*80f5451dSKonrad Dybcio 
1118*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy3_clk = {
1119*80f5451dSKonrad Dybcio 	.halt_reg = 0x508c,
1120*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1121*80f5451dSKonrad Dybcio 	.clkr = {
1122*80f5451dSKonrad Dybcio 		.enable_reg = 0x508c,
1123*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1124*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1125*80f5451dSKonrad Dybcio 			.name = "camcc_csiphy3_clk",
1126*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1127*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1128*80f5451dSKonrad Dybcio 			},
1129*80f5451dSKonrad Dybcio 			.num_parents = 1,
1130*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1131*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1132*80f5451dSKonrad Dybcio 		},
1133*80f5451dSKonrad Dybcio 	},
1134*80f5451dSKonrad Dybcio };
1135*80f5451dSKonrad Dybcio 
1136*80f5451dSKonrad Dybcio static struct clk_branch camcc_icp_clk = {
1137*80f5451dSKonrad Dybcio 	.halt_reg = 0xe02c,
1138*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1139*80f5451dSKonrad Dybcio 	.clkr = {
1140*80f5451dSKonrad Dybcio 		.enable_reg = 0xe02c,
1141*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1142*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1143*80f5451dSKonrad Dybcio 			.name = "camcc_icp_clk",
1144*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1145*80f5451dSKonrad Dybcio 				&camcc_icp_clk_src.clkr.hw
1146*80f5451dSKonrad Dybcio 			},
1147*80f5451dSKonrad Dybcio 			.num_parents = 1,
1148*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1149*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1150*80f5451dSKonrad Dybcio 		},
1151*80f5451dSKonrad Dybcio 	},
1152*80f5451dSKonrad Dybcio };
1153*80f5451dSKonrad Dybcio 
1154*80f5451dSKonrad Dybcio static struct clk_branch camcc_icp_ts_clk = {
1155*80f5451dSKonrad Dybcio 	.halt_reg = 0xe00c,
1156*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1157*80f5451dSKonrad Dybcio 	.clkr = {
1158*80f5451dSKonrad Dybcio 		.enable_reg = 0xe00c,
1159*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1160*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1161*80f5451dSKonrad Dybcio 			.name = "camcc_icp_ts_clk",
1162*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1163*80f5451dSKonrad Dybcio 		},
1164*80f5451dSKonrad Dybcio 	},
1165*80f5451dSKonrad Dybcio };
1166*80f5451dSKonrad Dybcio 
1167*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_axi_clk = {
1168*80f5451dSKonrad Dybcio 	.halt_reg = 0x9080,
1169*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1170*80f5451dSKonrad Dybcio 	.clkr = {
1171*80f5451dSKonrad Dybcio 		.enable_reg = 0x9080,
1172*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1173*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1174*80f5451dSKonrad Dybcio 			.name = "camcc_ife_0_axi_clk",
1175*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1176*80f5451dSKonrad Dybcio 		},
1177*80f5451dSKonrad Dybcio 	},
1178*80f5451dSKonrad Dybcio };
1179*80f5451dSKonrad Dybcio 
1180*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_clk = {
1181*80f5451dSKonrad Dybcio 	.halt_reg = 0x9028,
1182*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1183*80f5451dSKonrad Dybcio 	.clkr = {
1184*80f5451dSKonrad Dybcio 		.enable_reg = 0x9028,
1185*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1186*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1187*80f5451dSKonrad Dybcio 			.name = "camcc_ife_0_clk",
1188*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1189*80f5451dSKonrad Dybcio 				&camcc_ife_0_clk_src.clkr.hw
1190*80f5451dSKonrad Dybcio 			},
1191*80f5451dSKonrad Dybcio 			.num_parents = 1,
1192*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1193*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1194*80f5451dSKonrad Dybcio 		},
1195*80f5451dSKonrad Dybcio 	},
1196*80f5451dSKonrad Dybcio };
1197*80f5451dSKonrad Dybcio 
1198*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_cphy_rx_clk = {
1199*80f5451dSKonrad Dybcio 	.halt_reg = 0x907c,
1200*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1201*80f5451dSKonrad Dybcio 	.clkr = {
1202*80f5451dSKonrad Dybcio 		.enable_reg = 0x907c,
1203*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1204*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1205*80f5451dSKonrad Dybcio 			.name = "camcc_ife_0_cphy_rx_clk",
1206*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1207*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1208*80f5451dSKonrad Dybcio 			},
1209*80f5451dSKonrad Dybcio 			.num_parents = 1,
1210*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1211*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1212*80f5451dSKonrad Dybcio 		},
1213*80f5451dSKonrad Dybcio 	},
1214*80f5451dSKonrad Dybcio };
1215*80f5451dSKonrad Dybcio 
1216*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_csid_clk = {
1217*80f5451dSKonrad Dybcio 	.halt_reg = 0x9054,
1218*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1219*80f5451dSKonrad Dybcio 	.clkr = {
1220*80f5451dSKonrad Dybcio 		.enable_reg = 0x9054,
1221*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1222*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1223*80f5451dSKonrad Dybcio 			.name = "camcc_ife_0_csid_clk",
1224*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1225*80f5451dSKonrad Dybcio 				&camcc_ife_0_csid_clk_src.clkr.hw
1226*80f5451dSKonrad Dybcio 			},
1227*80f5451dSKonrad Dybcio 			.num_parents = 1,
1228*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1229*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1230*80f5451dSKonrad Dybcio 		},
1231*80f5451dSKonrad Dybcio 	},
1232*80f5451dSKonrad Dybcio };
1233*80f5451dSKonrad Dybcio 
1234*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_dsp_clk = {
1235*80f5451dSKonrad Dybcio 	.halt_reg = 0x9038,
1236*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1237*80f5451dSKonrad Dybcio 	.clkr = {
1238*80f5451dSKonrad Dybcio 		.enable_reg = 0x9038,
1239*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1240*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1241*80f5451dSKonrad Dybcio 			.name = "camcc_ife_0_dsp_clk",
1242*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1243*80f5451dSKonrad Dybcio 				&camcc_ife_0_clk_src.clkr.hw
1244*80f5451dSKonrad Dybcio 			},
1245*80f5451dSKonrad Dybcio 			.num_parents = 1,
1246*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1247*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1248*80f5451dSKonrad Dybcio 		},
1249*80f5451dSKonrad Dybcio 	},
1250*80f5451dSKonrad Dybcio };
1251*80f5451dSKonrad Dybcio 
1252*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_axi_clk = {
1253*80f5451dSKonrad Dybcio 	.halt_reg = 0xa058,
1254*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1255*80f5451dSKonrad Dybcio 	.clkr = {
1256*80f5451dSKonrad Dybcio 		.enable_reg = 0xa058,
1257*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1258*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1259*80f5451dSKonrad Dybcio 			.name = "camcc_ife_1_axi_clk",
1260*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1261*80f5451dSKonrad Dybcio 		},
1262*80f5451dSKonrad Dybcio 	},
1263*80f5451dSKonrad Dybcio };
1264*80f5451dSKonrad Dybcio 
1265*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_clk = {
1266*80f5451dSKonrad Dybcio 	.halt_reg = 0xa028,
1267*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1268*80f5451dSKonrad Dybcio 	.clkr = {
1269*80f5451dSKonrad Dybcio 		.enable_reg = 0xa028,
1270*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1271*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1272*80f5451dSKonrad Dybcio 			.name = "camcc_ife_1_clk",
1273*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1274*80f5451dSKonrad Dybcio 				&camcc_ife_1_clk_src.clkr.hw
1275*80f5451dSKonrad Dybcio 			},
1276*80f5451dSKonrad Dybcio 			.num_parents = 1,
1277*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1278*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1279*80f5451dSKonrad Dybcio 		},
1280*80f5451dSKonrad Dybcio 	},
1281*80f5451dSKonrad Dybcio };
1282*80f5451dSKonrad Dybcio 
1283*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_cphy_rx_clk = {
1284*80f5451dSKonrad Dybcio 	.halt_reg = 0xa054,
1285*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1286*80f5451dSKonrad Dybcio 	.clkr = {
1287*80f5451dSKonrad Dybcio 		.enable_reg = 0xa054,
1288*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1289*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1290*80f5451dSKonrad Dybcio 			.name = "camcc_ife_1_cphy_rx_clk",
1291*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1292*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1293*80f5451dSKonrad Dybcio 			},
1294*80f5451dSKonrad Dybcio 			.num_parents = 1,
1295*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1296*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1297*80f5451dSKonrad Dybcio 		},
1298*80f5451dSKonrad Dybcio 	},
1299*80f5451dSKonrad Dybcio };
1300*80f5451dSKonrad Dybcio 
1301*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_csid_clk = {
1302*80f5451dSKonrad Dybcio 	.halt_reg = 0xa04c,
1303*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1304*80f5451dSKonrad Dybcio 	.clkr = {
1305*80f5451dSKonrad Dybcio 		.enable_reg = 0xa04c,
1306*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1307*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1308*80f5451dSKonrad Dybcio 			.name = "camcc_ife_1_csid_clk",
1309*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1310*80f5451dSKonrad Dybcio 				&camcc_ife_1_csid_clk_src.clkr.hw
1311*80f5451dSKonrad Dybcio 			},
1312*80f5451dSKonrad Dybcio 			.num_parents = 1,
1313*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1314*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1315*80f5451dSKonrad Dybcio 		},
1316*80f5451dSKonrad Dybcio 	},
1317*80f5451dSKonrad Dybcio };
1318*80f5451dSKonrad Dybcio 
1319*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_dsp_clk = {
1320*80f5451dSKonrad Dybcio 	.halt_reg = 0xa030,
1321*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1322*80f5451dSKonrad Dybcio 	.clkr = {
1323*80f5451dSKonrad Dybcio 		.enable_reg = 0xa030,
1324*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1325*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1326*80f5451dSKonrad Dybcio 			.name = "camcc_ife_1_dsp_clk",
1327*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1328*80f5451dSKonrad Dybcio 				&camcc_ife_1_clk_src.clkr.hw
1329*80f5451dSKonrad Dybcio 			},
1330*80f5451dSKonrad Dybcio 			.num_parents = 1,
1331*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1332*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1333*80f5451dSKonrad Dybcio 		},
1334*80f5451dSKonrad Dybcio 	},
1335*80f5451dSKonrad Dybcio };
1336*80f5451dSKonrad Dybcio 
1337*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_axi_clk = {
1338*80f5451dSKonrad Dybcio 	.halt_reg = 0xb054,
1339*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1340*80f5451dSKonrad Dybcio 	.clkr = {
1341*80f5451dSKonrad Dybcio 		.enable_reg = 0xb054,
1342*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1343*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1344*80f5451dSKonrad Dybcio 			.name = "camcc_ife_2_axi_clk",
1345*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1346*80f5451dSKonrad Dybcio 		},
1347*80f5451dSKonrad Dybcio 	},
1348*80f5451dSKonrad Dybcio };
1349*80f5451dSKonrad Dybcio 
1350*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_clk = {
1351*80f5451dSKonrad Dybcio 	.halt_reg = 0xb024,
1352*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1353*80f5451dSKonrad Dybcio 	.clkr = {
1354*80f5451dSKonrad Dybcio 		.enable_reg = 0xb024,
1355*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1356*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1357*80f5451dSKonrad Dybcio 			.name = "camcc_ife_2_clk",
1358*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1359*80f5451dSKonrad Dybcio 				&camcc_ife_2_clk_src.clkr.hw
1360*80f5451dSKonrad Dybcio 			},
1361*80f5451dSKonrad Dybcio 			.num_parents = 1,
1362*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1363*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1364*80f5451dSKonrad Dybcio 		},
1365*80f5451dSKonrad Dybcio 	},
1366*80f5451dSKonrad Dybcio };
1367*80f5451dSKonrad Dybcio 
1368*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_cphy_rx_clk = {
1369*80f5451dSKonrad Dybcio 	.halt_reg = 0xb050,
1370*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1371*80f5451dSKonrad Dybcio 	.clkr = {
1372*80f5451dSKonrad Dybcio 		.enable_reg = 0xb050,
1373*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1374*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1375*80f5451dSKonrad Dybcio 			.name = "camcc_ife_2_cphy_rx_clk",
1376*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1377*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1378*80f5451dSKonrad Dybcio 			},
1379*80f5451dSKonrad Dybcio 			.num_parents = 1,
1380*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1381*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1382*80f5451dSKonrad Dybcio 		},
1383*80f5451dSKonrad Dybcio 	},
1384*80f5451dSKonrad Dybcio };
1385*80f5451dSKonrad Dybcio 
1386*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_csid_clk = {
1387*80f5451dSKonrad Dybcio 	.halt_reg = 0xb048,
1388*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1389*80f5451dSKonrad Dybcio 	.clkr = {
1390*80f5451dSKonrad Dybcio 		.enable_reg = 0xb048,
1391*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1392*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1393*80f5451dSKonrad Dybcio 			.name = "camcc_ife_2_csid_clk",
1394*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1395*80f5451dSKonrad Dybcio 				&camcc_ife_2_csid_clk_src.clkr.hw
1396*80f5451dSKonrad Dybcio 			},
1397*80f5451dSKonrad Dybcio 			.num_parents = 1,
1398*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1399*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1400*80f5451dSKonrad Dybcio 		},
1401*80f5451dSKonrad Dybcio 	},
1402*80f5451dSKonrad Dybcio };
1403*80f5451dSKonrad Dybcio 
1404*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_dsp_clk = {
1405*80f5451dSKonrad Dybcio 	.halt_reg = 0xb02c,
1406*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1407*80f5451dSKonrad Dybcio 	.clkr = {
1408*80f5451dSKonrad Dybcio 		.enable_reg = 0xb02c,
1409*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1410*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1411*80f5451dSKonrad Dybcio 			.name = "camcc_ife_2_dsp_clk",
1412*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1413*80f5451dSKonrad Dybcio 				&camcc_ife_2_clk_src.clkr.hw
1414*80f5451dSKonrad Dybcio 			},
1415*80f5451dSKonrad Dybcio 			.num_parents = 1,
1416*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1417*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1418*80f5451dSKonrad Dybcio 		},
1419*80f5451dSKonrad Dybcio 	},
1420*80f5451dSKonrad Dybcio };
1421*80f5451dSKonrad Dybcio 
1422*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_clk = {
1423*80f5451dSKonrad Dybcio 	.halt_reg = 0xc01c,
1424*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1425*80f5451dSKonrad Dybcio 	.clkr = {
1426*80f5451dSKonrad Dybcio 		.enable_reg = 0xc01c,
1427*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1428*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1429*80f5451dSKonrad Dybcio 			.name = "camcc_ife_lite_clk",
1430*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1431*80f5451dSKonrad Dybcio 				&camcc_ife_lite_clk_src.clkr.hw
1432*80f5451dSKonrad Dybcio 			},
1433*80f5451dSKonrad Dybcio 			.num_parents = 1,
1434*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1435*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1436*80f5451dSKonrad Dybcio 		},
1437*80f5451dSKonrad Dybcio 	},
1438*80f5451dSKonrad Dybcio };
1439*80f5451dSKonrad Dybcio 
1440*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_cphy_rx_clk = {
1441*80f5451dSKonrad Dybcio 	.halt_reg = 0xc044,
1442*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1443*80f5451dSKonrad Dybcio 	.clkr = {
1444*80f5451dSKonrad Dybcio 		.enable_reg = 0xc044,
1445*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1446*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1447*80f5451dSKonrad Dybcio 			.name = "camcc_ife_lite_cphy_rx_clk",
1448*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1449*80f5451dSKonrad Dybcio 				&camcc_cphy_rx_clk_src.clkr.hw
1450*80f5451dSKonrad Dybcio 			},
1451*80f5451dSKonrad Dybcio 			.num_parents = 1,
1452*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1453*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1454*80f5451dSKonrad Dybcio 		},
1455*80f5451dSKonrad Dybcio 	},
1456*80f5451dSKonrad Dybcio };
1457*80f5451dSKonrad Dybcio 
1458*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_csid_clk = {
1459*80f5451dSKonrad Dybcio 	.halt_reg = 0xc03c,
1460*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1461*80f5451dSKonrad Dybcio 	.clkr = {
1462*80f5451dSKonrad Dybcio 		.enable_reg = 0xc03c,
1463*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1464*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1465*80f5451dSKonrad Dybcio 			.name = "camcc_ife_lite_csid_clk",
1466*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1467*80f5451dSKonrad Dybcio 				&camcc_ife_lite_csid_clk_src.clkr.hw
1468*80f5451dSKonrad Dybcio 			},
1469*80f5451dSKonrad Dybcio 			.num_parents = 1,
1470*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1471*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1472*80f5451dSKonrad Dybcio 		},
1473*80f5451dSKonrad Dybcio 	},
1474*80f5451dSKonrad Dybcio };
1475*80f5451dSKonrad Dybcio 
1476*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_ahb_clk = {
1477*80f5451dSKonrad Dybcio 	.halt_reg = 0x7040,
1478*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1479*80f5451dSKonrad Dybcio 	.clkr = {
1480*80f5451dSKonrad Dybcio 		.enable_reg = 0x7040,
1481*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1482*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1483*80f5451dSKonrad Dybcio 			.name = "camcc_ipe_0_ahb_clk",
1484*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1485*80f5451dSKonrad Dybcio 				&camcc_slow_ahb_clk_src.clkr.hw
1486*80f5451dSKonrad Dybcio 			},
1487*80f5451dSKonrad Dybcio 			.num_parents = 1,
1488*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1489*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1490*80f5451dSKonrad Dybcio 		},
1491*80f5451dSKonrad Dybcio 	},
1492*80f5451dSKonrad Dybcio };
1493*80f5451dSKonrad Dybcio 
1494*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_areg_clk = {
1495*80f5451dSKonrad Dybcio 	.halt_reg = 0x703c,
1496*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1497*80f5451dSKonrad Dybcio 	.clkr = {
1498*80f5451dSKonrad Dybcio 		.enable_reg = 0x703c,
1499*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1500*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1501*80f5451dSKonrad Dybcio 			.name = "camcc_ipe_0_areg_clk",
1502*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1503*80f5451dSKonrad Dybcio 				&camcc_fast_ahb_clk_src.clkr.hw
1504*80f5451dSKonrad Dybcio 			},
1505*80f5451dSKonrad Dybcio 			.num_parents = 1,
1506*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1507*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1508*80f5451dSKonrad Dybcio 		},
1509*80f5451dSKonrad Dybcio 	},
1510*80f5451dSKonrad Dybcio };
1511*80f5451dSKonrad Dybcio 
1512*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_axi_clk = {
1513*80f5451dSKonrad Dybcio 	.halt_reg = 0x7038,
1514*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1515*80f5451dSKonrad Dybcio 	.clkr = {
1516*80f5451dSKonrad Dybcio 		.enable_reg = 0x7038,
1517*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1518*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1519*80f5451dSKonrad Dybcio 			.name = "camcc_ipe_0_axi_clk",
1520*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1521*80f5451dSKonrad Dybcio 		},
1522*80f5451dSKonrad Dybcio 	},
1523*80f5451dSKonrad Dybcio };
1524*80f5451dSKonrad Dybcio 
1525*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_clk = {
1526*80f5451dSKonrad Dybcio 	.halt_reg = 0x7028,
1527*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1528*80f5451dSKonrad Dybcio 	.clkr = {
1529*80f5451dSKonrad Dybcio 		.enable_reg = 0x7028,
1530*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1531*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1532*80f5451dSKonrad Dybcio 			.name = "camcc_ipe_0_clk",
1533*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1534*80f5451dSKonrad Dybcio 				&camcc_ipe_0_clk_src.clkr.hw
1535*80f5451dSKonrad Dybcio 			},
1536*80f5451dSKonrad Dybcio 			.num_parents = 1,
1537*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1538*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1539*80f5451dSKonrad Dybcio 		},
1540*80f5451dSKonrad Dybcio 	},
1541*80f5451dSKonrad Dybcio };
1542*80f5451dSKonrad Dybcio 
1543*80f5451dSKonrad Dybcio static struct clk_branch camcc_jpeg_clk = {
1544*80f5451dSKonrad Dybcio 	.halt_reg = 0xd01c,
1545*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1546*80f5451dSKonrad Dybcio 	.clkr = {
1547*80f5451dSKonrad Dybcio 		.enable_reg = 0xd01c,
1548*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1549*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1550*80f5451dSKonrad Dybcio 			.name = "camcc_jpeg_clk",
1551*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1552*80f5451dSKonrad Dybcio 				&camcc_jpeg_clk_src.clkr.hw
1553*80f5451dSKonrad Dybcio 			},
1554*80f5451dSKonrad Dybcio 			.num_parents = 1,
1555*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1556*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1557*80f5451dSKonrad Dybcio 		},
1558*80f5451dSKonrad Dybcio 	},
1559*80f5451dSKonrad Dybcio };
1560*80f5451dSKonrad Dybcio 
1561*80f5451dSKonrad Dybcio static struct clk_branch camcc_lrme_clk = {
1562*80f5451dSKonrad Dybcio 	.halt_reg = 0x1101c,
1563*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1564*80f5451dSKonrad Dybcio 	.clkr = {
1565*80f5451dSKonrad Dybcio 		.enable_reg = 0x1101c,
1566*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1567*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1568*80f5451dSKonrad Dybcio 			.name = "camcc_lrme_clk",
1569*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1570*80f5451dSKonrad Dybcio 				&camcc_lrme_clk_src.clkr.hw
1571*80f5451dSKonrad Dybcio 			},
1572*80f5451dSKonrad Dybcio 			.num_parents = 1,
1573*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1574*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1575*80f5451dSKonrad Dybcio 		},
1576*80f5451dSKonrad Dybcio 	},
1577*80f5451dSKonrad Dybcio };
1578*80f5451dSKonrad Dybcio 
1579*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk0_clk = {
1580*80f5451dSKonrad Dybcio 	.halt_reg = 0x401c,
1581*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1582*80f5451dSKonrad Dybcio 	.clkr = {
1583*80f5451dSKonrad Dybcio 		.enable_reg = 0x401c,
1584*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1585*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1586*80f5451dSKonrad Dybcio 			.name = "camcc_mclk0_clk",
1587*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1588*80f5451dSKonrad Dybcio 				&camcc_mclk0_clk_src.clkr.hw
1589*80f5451dSKonrad Dybcio 			},
1590*80f5451dSKonrad Dybcio 			.num_parents = 1,
1591*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1592*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1593*80f5451dSKonrad Dybcio 		},
1594*80f5451dSKonrad Dybcio 	},
1595*80f5451dSKonrad Dybcio };
1596*80f5451dSKonrad Dybcio 
1597*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk1_clk = {
1598*80f5451dSKonrad Dybcio 	.halt_reg = 0x403c,
1599*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1600*80f5451dSKonrad Dybcio 	.clkr = {
1601*80f5451dSKonrad Dybcio 		.enable_reg = 0x403c,
1602*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1603*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1604*80f5451dSKonrad Dybcio 			.name = "camcc_mclk1_clk",
1605*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1606*80f5451dSKonrad Dybcio 				&camcc_mclk1_clk_src.clkr.hw
1607*80f5451dSKonrad Dybcio 			},
1608*80f5451dSKonrad Dybcio 			.num_parents = 1,
1609*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1610*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1611*80f5451dSKonrad Dybcio 		},
1612*80f5451dSKonrad Dybcio 	},
1613*80f5451dSKonrad Dybcio };
1614*80f5451dSKonrad Dybcio 
1615*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk2_clk = {
1616*80f5451dSKonrad Dybcio 	.halt_reg = 0x405c,
1617*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1618*80f5451dSKonrad Dybcio 	.clkr = {
1619*80f5451dSKonrad Dybcio 		.enable_reg = 0x405c,
1620*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1621*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1622*80f5451dSKonrad Dybcio 			.name = "camcc_mclk2_clk",
1623*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1624*80f5451dSKonrad Dybcio 				&camcc_mclk2_clk_src.clkr.hw
1625*80f5451dSKonrad Dybcio 			},
1626*80f5451dSKonrad Dybcio 			.num_parents = 1,
1627*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1628*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1629*80f5451dSKonrad Dybcio 		},
1630*80f5451dSKonrad Dybcio 	},
1631*80f5451dSKonrad Dybcio };
1632*80f5451dSKonrad Dybcio 
1633*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk3_clk = {
1634*80f5451dSKonrad Dybcio 	.halt_reg = 0x407c,
1635*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1636*80f5451dSKonrad Dybcio 	.clkr = {
1637*80f5451dSKonrad Dybcio 		.enable_reg = 0x407c,
1638*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1639*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1640*80f5451dSKonrad Dybcio 			.name = "camcc_mclk3_clk",
1641*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1642*80f5451dSKonrad Dybcio 				&camcc_mclk3_clk_src.clkr.hw
1643*80f5451dSKonrad Dybcio 			},
1644*80f5451dSKonrad Dybcio 			.num_parents = 1,
1645*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1646*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1647*80f5451dSKonrad Dybcio 		},
1648*80f5451dSKonrad Dybcio 	},
1649*80f5451dSKonrad Dybcio };
1650*80f5451dSKonrad Dybcio 
1651*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk4_clk = {
1652*80f5451dSKonrad Dybcio 	.halt_reg = 0x409c,
1653*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1654*80f5451dSKonrad Dybcio 	.clkr = {
1655*80f5451dSKonrad Dybcio 		.enable_reg = 0x409c,
1656*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1657*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1658*80f5451dSKonrad Dybcio 			.name = "camcc_mclk4_clk",
1659*80f5451dSKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
1660*80f5451dSKonrad Dybcio 				&camcc_mclk4_clk_src.clkr.hw
1661*80f5451dSKonrad Dybcio 			},
1662*80f5451dSKonrad Dybcio 			.num_parents = 1,
1663*80f5451dSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1664*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1665*80f5451dSKonrad Dybcio 		},
1666*80f5451dSKonrad Dybcio 	},
1667*80f5451dSKonrad Dybcio };
1668*80f5451dSKonrad Dybcio 
1669*80f5451dSKonrad Dybcio static struct clk_branch camcc_soc_ahb_clk = {
1670*80f5451dSKonrad Dybcio 	.halt_reg = 0x1400c,
1671*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1672*80f5451dSKonrad Dybcio 	.clkr = {
1673*80f5451dSKonrad Dybcio 		.enable_reg = 0x1400c,
1674*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1675*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1676*80f5451dSKonrad Dybcio 			.name = "camcc_soc_ahb_clk",
1677*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1678*80f5451dSKonrad Dybcio 		},
1679*80f5451dSKonrad Dybcio 	},
1680*80f5451dSKonrad Dybcio };
1681*80f5451dSKonrad Dybcio 
1682*80f5451dSKonrad Dybcio static struct clk_branch camcc_sys_tmr_clk = {
1683*80f5451dSKonrad Dybcio 	.halt_reg = 0xe034,
1684*80f5451dSKonrad Dybcio 	.halt_check = BRANCH_HALT,
1685*80f5451dSKonrad Dybcio 	.clkr = {
1686*80f5451dSKonrad Dybcio 		.enable_reg = 0xe034,
1687*80f5451dSKonrad Dybcio 		.enable_mask = BIT(0),
1688*80f5451dSKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1689*80f5451dSKonrad Dybcio 			.name = "camcc_sys_tmr_clk",
1690*80f5451dSKonrad Dybcio 			.ops = &clk_branch2_ops,
1691*80f5451dSKonrad Dybcio 		},
1692*80f5451dSKonrad Dybcio 	},
1693*80f5451dSKonrad Dybcio };
1694*80f5451dSKonrad Dybcio 
1695*80f5451dSKonrad Dybcio static struct gdsc bps_gdsc = {
1696*80f5451dSKonrad Dybcio 	.gdscr = 0x6004,
1697*80f5451dSKonrad Dybcio 	.pd = {
1698*80f5451dSKonrad Dybcio 		.name = "bps_gdsc",
1699*80f5451dSKonrad Dybcio 	},
1700*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1701*80f5451dSKonrad Dybcio 	.flags = VOTABLE,
1702*80f5451dSKonrad Dybcio };
1703*80f5451dSKonrad Dybcio 
1704*80f5451dSKonrad Dybcio static struct gdsc ipe_0_gdsc = {
1705*80f5451dSKonrad Dybcio 	.gdscr = 0x7004,
1706*80f5451dSKonrad Dybcio 	.pd = {
1707*80f5451dSKonrad Dybcio 		.name = "ipe_0_gdsc",
1708*80f5451dSKonrad Dybcio 	},
1709*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1710*80f5451dSKonrad Dybcio 	.flags = VOTABLE,
1711*80f5451dSKonrad Dybcio };
1712*80f5451dSKonrad Dybcio 
1713*80f5451dSKonrad Dybcio static struct gdsc ife_0_gdsc = {
1714*80f5451dSKonrad Dybcio 	.gdscr = 0x9004,
1715*80f5451dSKonrad Dybcio 	.pd = {
1716*80f5451dSKonrad Dybcio 		.name = "ife_0_gdsc",
1717*80f5451dSKonrad Dybcio 	},
1718*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1719*80f5451dSKonrad Dybcio };
1720*80f5451dSKonrad Dybcio 
1721*80f5451dSKonrad Dybcio static struct gdsc ife_1_gdsc = {
1722*80f5451dSKonrad Dybcio 	.gdscr = 0xa004,
1723*80f5451dSKonrad Dybcio 	.pd = {
1724*80f5451dSKonrad Dybcio 		.name = "ife_1_gdsc",
1725*80f5451dSKonrad Dybcio 	},
1726*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1727*80f5451dSKonrad Dybcio };
1728*80f5451dSKonrad Dybcio 
1729*80f5451dSKonrad Dybcio static struct gdsc ife_2_gdsc = {
1730*80f5451dSKonrad Dybcio 	.gdscr = 0xb004,
1731*80f5451dSKonrad Dybcio 	.pd = {
1732*80f5451dSKonrad Dybcio 		.name = "ife_2_gdsc",
1733*80f5451dSKonrad Dybcio 	},
1734*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1735*80f5451dSKonrad Dybcio };
1736*80f5451dSKonrad Dybcio 
1737*80f5451dSKonrad Dybcio static struct gdsc titan_top_gdsc = {
1738*80f5451dSKonrad Dybcio 	.gdscr = 0x14004,
1739*80f5451dSKonrad Dybcio 	.pd = {
1740*80f5451dSKonrad Dybcio 		.name = "titan_top_gdsc",
1741*80f5451dSKonrad Dybcio 	},
1742*80f5451dSKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
1743*80f5451dSKonrad Dybcio };
1744*80f5451dSKonrad Dybcio 
1745*80f5451dSKonrad Dybcio struct clk_hw *camcc_sm6350_hws[] = {
1746*80f5451dSKonrad Dybcio 	[CAMCC_PLL2_OUT_EARLY] = &camcc_pll2_out_early.hw,
1747*80f5451dSKonrad Dybcio };
1748*80f5451dSKonrad Dybcio 
1749*80f5451dSKonrad Dybcio static struct clk_regmap *camcc_sm6350_clocks[] = {
1750*80f5451dSKonrad Dybcio 	[CAMCC_BPS_AHB_CLK] = &camcc_bps_ahb_clk.clkr,
1751*80f5451dSKonrad Dybcio 	[CAMCC_BPS_AREG_CLK] = &camcc_bps_areg_clk.clkr,
1752*80f5451dSKonrad Dybcio 	[CAMCC_BPS_AXI_CLK] = &camcc_bps_axi_clk.clkr,
1753*80f5451dSKonrad Dybcio 	[CAMCC_BPS_CLK] = &camcc_bps_clk.clkr,
1754*80f5451dSKonrad Dybcio 	[CAMCC_BPS_CLK_SRC] = &camcc_bps_clk_src.clkr,
1755*80f5451dSKonrad Dybcio 	[CAMCC_CAMNOC_AXI_CLK] = &camcc_camnoc_axi_clk.clkr,
1756*80f5451dSKonrad Dybcio 	[CAMCC_CCI_0_CLK] = &camcc_cci_0_clk.clkr,
1757*80f5451dSKonrad Dybcio 	[CAMCC_CCI_0_CLK_SRC] = &camcc_cci_0_clk_src.clkr,
1758*80f5451dSKonrad Dybcio 	[CAMCC_CCI_1_CLK] = &camcc_cci_1_clk.clkr,
1759*80f5451dSKonrad Dybcio 	[CAMCC_CCI_1_CLK_SRC] = &camcc_cci_1_clk_src.clkr,
1760*80f5451dSKonrad Dybcio 	[CAMCC_CORE_AHB_CLK] = &camcc_core_ahb_clk.clkr,
1761*80f5451dSKonrad Dybcio 	[CAMCC_CPAS_AHB_CLK] = &camcc_cpas_ahb_clk.clkr,
1762*80f5451dSKonrad Dybcio 	[CAMCC_CPHY_RX_CLK_SRC] = &camcc_cphy_rx_clk_src.clkr,
1763*80f5451dSKonrad Dybcio 	[CAMCC_CSI0PHYTIMER_CLK] = &camcc_csi0phytimer_clk.clkr,
1764*80f5451dSKonrad Dybcio 	[CAMCC_CSI0PHYTIMER_CLK_SRC] = &camcc_csi0phytimer_clk_src.clkr,
1765*80f5451dSKonrad Dybcio 	[CAMCC_CSI1PHYTIMER_CLK] = &camcc_csi1phytimer_clk.clkr,
1766*80f5451dSKonrad Dybcio 	[CAMCC_CSI1PHYTIMER_CLK_SRC] = &camcc_csi1phytimer_clk_src.clkr,
1767*80f5451dSKonrad Dybcio 	[CAMCC_CSI2PHYTIMER_CLK] = &camcc_csi2phytimer_clk.clkr,
1768*80f5451dSKonrad Dybcio 	[CAMCC_CSI2PHYTIMER_CLK_SRC] = &camcc_csi2phytimer_clk_src.clkr,
1769*80f5451dSKonrad Dybcio 	[CAMCC_CSI3PHYTIMER_CLK] = &camcc_csi3phytimer_clk.clkr,
1770*80f5451dSKonrad Dybcio 	[CAMCC_CSI3PHYTIMER_CLK_SRC] = &camcc_csi3phytimer_clk_src.clkr,
1771*80f5451dSKonrad Dybcio 	[CAMCC_CSIPHY0_CLK] = &camcc_csiphy0_clk.clkr,
1772*80f5451dSKonrad Dybcio 	[CAMCC_CSIPHY1_CLK] = &camcc_csiphy1_clk.clkr,
1773*80f5451dSKonrad Dybcio 	[CAMCC_CSIPHY2_CLK] = &camcc_csiphy2_clk.clkr,
1774*80f5451dSKonrad Dybcio 	[CAMCC_CSIPHY3_CLK] = &camcc_csiphy3_clk.clkr,
1775*80f5451dSKonrad Dybcio 	[CAMCC_FAST_AHB_CLK_SRC] = &camcc_fast_ahb_clk_src.clkr,
1776*80f5451dSKonrad Dybcio 	[CAMCC_ICP_CLK] = &camcc_icp_clk.clkr,
1777*80f5451dSKonrad Dybcio 	[CAMCC_ICP_CLK_SRC] = &camcc_icp_clk_src.clkr,
1778*80f5451dSKonrad Dybcio 	[CAMCC_ICP_TS_CLK] = &camcc_icp_ts_clk.clkr,
1779*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_AXI_CLK] = &camcc_ife_0_axi_clk.clkr,
1780*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_CLK] = &camcc_ife_0_clk.clkr,
1781*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_CLK_SRC] = &camcc_ife_0_clk_src.clkr,
1782*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_CPHY_RX_CLK] = &camcc_ife_0_cphy_rx_clk.clkr,
1783*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_CSID_CLK] = &camcc_ife_0_csid_clk.clkr,
1784*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_CSID_CLK_SRC] = &camcc_ife_0_csid_clk_src.clkr,
1785*80f5451dSKonrad Dybcio 	[CAMCC_IFE_0_DSP_CLK] = &camcc_ife_0_dsp_clk.clkr,
1786*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_AXI_CLK] = &camcc_ife_1_axi_clk.clkr,
1787*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_CLK] = &camcc_ife_1_clk.clkr,
1788*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_CLK_SRC] = &camcc_ife_1_clk_src.clkr,
1789*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_CPHY_RX_CLK] = &camcc_ife_1_cphy_rx_clk.clkr,
1790*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_CSID_CLK] = &camcc_ife_1_csid_clk.clkr,
1791*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_CSID_CLK_SRC] = &camcc_ife_1_csid_clk_src.clkr,
1792*80f5451dSKonrad Dybcio 	[CAMCC_IFE_1_DSP_CLK] = &camcc_ife_1_dsp_clk.clkr,
1793*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_AXI_CLK] = &camcc_ife_2_axi_clk.clkr,
1794*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_CLK] = &camcc_ife_2_clk.clkr,
1795*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_CLK_SRC] = &camcc_ife_2_clk_src.clkr,
1796*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_CPHY_RX_CLK] = &camcc_ife_2_cphy_rx_clk.clkr,
1797*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_CSID_CLK] = &camcc_ife_2_csid_clk.clkr,
1798*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_CSID_CLK_SRC] = &camcc_ife_2_csid_clk_src.clkr,
1799*80f5451dSKonrad Dybcio 	[CAMCC_IFE_2_DSP_CLK] = &camcc_ife_2_dsp_clk.clkr,
1800*80f5451dSKonrad Dybcio 	[CAMCC_IFE_LITE_CLK] = &camcc_ife_lite_clk.clkr,
1801*80f5451dSKonrad Dybcio 	[CAMCC_IFE_LITE_CLK_SRC] = &camcc_ife_lite_clk_src.clkr,
1802*80f5451dSKonrad Dybcio 	[CAMCC_IFE_LITE_CPHY_RX_CLK] = &camcc_ife_lite_cphy_rx_clk.clkr,
1803*80f5451dSKonrad Dybcio 	[CAMCC_IFE_LITE_CSID_CLK] = &camcc_ife_lite_csid_clk.clkr,
1804*80f5451dSKonrad Dybcio 	[CAMCC_IFE_LITE_CSID_CLK_SRC] = &camcc_ife_lite_csid_clk_src.clkr,
1805*80f5451dSKonrad Dybcio 	[CAMCC_IPE_0_AHB_CLK] = &camcc_ipe_0_ahb_clk.clkr,
1806*80f5451dSKonrad Dybcio 	[CAMCC_IPE_0_AREG_CLK] = &camcc_ipe_0_areg_clk.clkr,
1807*80f5451dSKonrad Dybcio 	[CAMCC_IPE_0_AXI_CLK] = &camcc_ipe_0_axi_clk.clkr,
1808*80f5451dSKonrad Dybcio 	[CAMCC_IPE_0_CLK] = &camcc_ipe_0_clk.clkr,
1809*80f5451dSKonrad Dybcio 	[CAMCC_IPE_0_CLK_SRC] = &camcc_ipe_0_clk_src.clkr,
1810*80f5451dSKonrad Dybcio 	[CAMCC_JPEG_CLK] = &camcc_jpeg_clk.clkr,
1811*80f5451dSKonrad Dybcio 	[CAMCC_JPEG_CLK_SRC] = &camcc_jpeg_clk_src.clkr,
1812*80f5451dSKonrad Dybcio 	[CAMCC_LRME_CLK] = &camcc_lrme_clk.clkr,
1813*80f5451dSKonrad Dybcio 	[CAMCC_LRME_CLK_SRC] = &camcc_lrme_clk_src.clkr,
1814*80f5451dSKonrad Dybcio 	[CAMCC_MCLK0_CLK] = &camcc_mclk0_clk.clkr,
1815*80f5451dSKonrad Dybcio 	[CAMCC_MCLK0_CLK_SRC] = &camcc_mclk0_clk_src.clkr,
1816*80f5451dSKonrad Dybcio 	[CAMCC_MCLK1_CLK] = &camcc_mclk1_clk.clkr,
1817*80f5451dSKonrad Dybcio 	[CAMCC_MCLK1_CLK_SRC] = &camcc_mclk1_clk_src.clkr,
1818*80f5451dSKonrad Dybcio 	[CAMCC_MCLK2_CLK] = &camcc_mclk2_clk.clkr,
1819*80f5451dSKonrad Dybcio 	[CAMCC_MCLK2_CLK_SRC] = &camcc_mclk2_clk_src.clkr,
1820*80f5451dSKonrad Dybcio 	[CAMCC_MCLK3_CLK] = &camcc_mclk3_clk.clkr,
1821*80f5451dSKonrad Dybcio 	[CAMCC_MCLK3_CLK_SRC] = &camcc_mclk3_clk_src.clkr,
1822*80f5451dSKonrad Dybcio 	[CAMCC_MCLK4_CLK] = &camcc_mclk4_clk.clkr,
1823*80f5451dSKonrad Dybcio 	[CAMCC_MCLK4_CLK_SRC] = &camcc_mclk4_clk_src.clkr,
1824*80f5451dSKonrad Dybcio 	[CAMCC_PLL0] = &camcc_pll0.clkr,
1825*80f5451dSKonrad Dybcio 	[CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.clkr,
1826*80f5451dSKonrad Dybcio 	[CAMCC_PLL1] = &camcc_pll1.clkr,
1827*80f5451dSKonrad Dybcio 	[CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.clkr,
1828*80f5451dSKonrad Dybcio 	[CAMCC_PLL2] = &camcc_pll2.clkr,
1829*80f5451dSKonrad Dybcio 	[CAMCC_PLL2_OUT_MAIN] = &camcc_pll2_out_main.clkr,
1830*80f5451dSKonrad Dybcio 	[CAMCC_PLL3] = &camcc_pll3.clkr,
1831*80f5451dSKonrad Dybcio 	[CAMCC_SLOW_AHB_CLK_SRC] = &camcc_slow_ahb_clk_src.clkr,
1832*80f5451dSKonrad Dybcio 	[CAMCC_SOC_AHB_CLK] = &camcc_soc_ahb_clk.clkr,
1833*80f5451dSKonrad Dybcio 	[CAMCC_SYS_TMR_CLK] = &camcc_sys_tmr_clk.clkr,
1834*80f5451dSKonrad Dybcio };
1835*80f5451dSKonrad Dybcio 
1836*80f5451dSKonrad Dybcio static struct gdsc *camcc_sm6350_gdscs[] = {
1837*80f5451dSKonrad Dybcio 	[BPS_GDSC] = &bps_gdsc,
1838*80f5451dSKonrad Dybcio 	[IPE_0_GDSC] = &ipe_0_gdsc,
1839*80f5451dSKonrad Dybcio 	[IFE_0_GDSC] = &ife_0_gdsc,
1840*80f5451dSKonrad Dybcio 	[IFE_1_GDSC] = &ife_1_gdsc,
1841*80f5451dSKonrad Dybcio 	[IFE_2_GDSC] = &ife_2_gdsc,
1842*80f5451dSKonrad Dybcio 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
1843*80f5451dSKonrad Dybcio };
1844*80f5451dSKonrad Dybcio 
1845*80f5451dSKonrad Dybcio static const struct regmap_config camcc_sm6350_regmap_config = {
1846*80f5451dSKonrad Dybcio 	.reg_bits = 32,
1847*80f5451dSKonrad Dybcio 	.reg_stride = 4,
1848*80f5451dSKonrad Dybcio 	.val_bits = 32,
1849*80f5451dSKonrad Dybcio 	.max_register = 0x16000,
1850*80f5451dSKonrad Dybcio 	.fast_io = true,
1851*80f5451dSKonrad Dybcio };
1852*80f5451dSKonrad Dybcio 
1853*80f5451dSKonrad Dybcio static const struct qcom_cc_desc camcc_sm6350_desc = {
1854*80f5451dSKonrad Dybcio 	.config = &camcc_sm6350_regmap_config,
1855*80f5451dSKonrad Dybcio 	.clk_hws = camcc_sm6350_hws,
1856*80f5451dSKonrad Dybcio 	.num_clk_hws = ARRAY_SIZE(camcc_sm6350_hws),
1857*80f5451dSKonrad Dybcio 	.clks = camcc_sm6350_clocks,
1858*80f5451dSKonrad Dybcio 	.num_clks = ARRAY_SIZE(camcc_sm6350_clocks),
1859*80f5451dSKonrad Dybcio 	.gdscs = camcc_sm6350_gdscs,
1860*80f5451dSKonrad Dybcio 	.num_gdscs = ARRAY_SIZE(camcc_sm6350_gdscs),
1861*80f5451dSKonrad Dybcio };
1862*80f5451dSKonrad Dybcio 
1863*80f5451dSKonrad Dybcio static const struct of_device_id camcc_sm6350_match_table[] = {
1864*80f5451dSKonrad Dybcio 	{ .compatible = "qcom,sm6350-camcc" },
1865*80f5451dSKonrad Dybcio 	{ }
1866*80f5451dSKonrad Dybcio };
1867*80f5451dSKonrad Dybcio MODULE_DEVICE_TABLE(of, camcc_sm6350_match_table);
1868*80f5451dSKonrad Dybcio 
1869*80f5451dSKonrad Dybcio static int camcc_sm6350_probe(struct platform_device *pdev)
1870*80f5451dSKonrad Dybcio {
1871*80f5451dSKonrad Dybcio 	struct regmap *regmap;
1872*80f5451dSKonrad Dybcio 
1873*80f5451dSKonrad Dybcio 	regmap = qcom_cc_map(pdev, &camcc_sm6350_desc);
1874*80f5451dSKonrad Dybcio 	if (IS_ERR(regmap))
1875*80f5451dSKonrad Dybcio 		return PTR_ERR(regmap);
1876*80f5451dSKonrad Dybcio 
1877*80f5451dSKonrad Dybcio 	clk_fabia_pll_configure(&camcc_pll0, regmap, &camcc_pll0_config);
1878*80f5451dSKonrad Dybcio 	clk_fabia_pll_configure(&camcc_pll1, regmap, &camcc_pll1_config);
1879*80f5451dSKonrad Dybcio 	clk_agera_pll_configure(&camcc_pll2, regmap, &camcc_pll2_config);
1880*80f5451dSKonrad Dybcio 	clk_fabia_pll_configure(&camcc_pll3, regmap, &camcc_pll3_config);
1881*80f5451dSKonrad Dybcio 
1882*80f5451dSKonrad Dybcio 	return qcom_cc_really_probe(pdev, &camcc_sm6350_desc, regmap);
1883*80f5451dSKonrad Dybcio }
1884*80f5451dSKonrad Dybcio 
1885*80f5451dSKonrad Dybcio static struct platform_driver camcc_sm6350_driver = {
1886*80f5451dSKonrad Dybcio 	.probe = camcc_sm6350_probe,
1887*80f5451dSKonrad Dybcio 	.driver = {
1888*80f5451dSKonrad Dybcio 		.name = "sm6350-camcc",
1889*80f5451dSKonrad Dybcio 		.of_match_table = camcc_sm6350_match_table,
1890*80f5451dSKonrad Dybcio 	},
1891*80f5451dSKonrad Dybcio };
1892*80f5451dSKonrad Dybcio 
1893*80f5451dSKonrad Dybcio static int __init camcc_sm6350_init(void)
1894*80f5451dSKonrad Dybcio {
1895*80f5451dSKonrad Dybcio 	return platform_driver_register(&camcc_sm6350_driver);
1896*80f5451dSKonrad Dybcio }
1897*80f5451dSKonrad Dybcio subsys_initcall(camcc_sm6350_init);
1898*80f5451dSKonrad Dybcio 
1899*80f5451dSKonrad Dybcio static void __exit camcc_sm6350_exit(void)
1900*80f5451dSKonrad Dybcio {
1901*80f5451dSKonrad Dybcio 	platform_driver_unregister(&camcc_sm6350_driver);
1902*80f5451dSKonrad Dybcio }
1903*80f5451dSKonrad Dybcio module_exit(camcc_sm6350_exit);
1904*80f5451dSKonrad Dybcio 
1905*80f5451dSKonrad Dybcio MODULE_DESCRIPTION("QTI CAMCC SM6350 Driver");
1906*80f5451dSKonrad Dybcio MODULE_LICENSE("GPL");
1907