xref: /linux/drivers/clk/qcom/camcc-qcs615.c (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1*28bc4229STaniya Das // SPDX-License-Identifier: GPL-2.0-only
2*28bc4229STaniya Das /*
3*28bc4229STaniya Das  * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4*28bc4229STaniya Das  */
5*28bc4229STaniya Das 
6*28bc4229STaniya Das #include <linux/clk-provider.h>
7*28bc4229STaniya Das #include <linux/module.h>
8*28bc4229STaniya Das #include <linux/mod_devicetable.h>
9*28bc4229STaniya Das #include <linux/of.h>
10*28bc4229STaniya Das #include <linux/platform_device.h>
11*28bc4229STaniya Das #include <linux/regmap.h>
12*28bc4229STaniya Das 
13*28bc4229STaniya Das #include <dt-bindings/clock/qcom,qcs615-camcc.h>
14*28bc4229STaniya Das 
15*28bc4229STaniya Das #include "clk-alpha-pll.h"
16*28bc4229STaniya Das #include "clk-branch.h"
17*28bc4229STaniya Das #include "clk-pll.h"
18*28bc4229STaniya Das #include "clk-rcg.h"
19*28bc4229STaniya Das #include "clk-regmap.h"
20*28bc4229STaniya Das #include "clk-regmap-divider.h"
21*28bc4229STaniya Das #include "clk-regmap-mux.h"
22*28bc4229STaniya Das #include "common.h"
23*28bc4229STaniya Das #include "gdsc.h"
24*28bc4229STaniya Das #include "reset.h"
25*28bc4229STaniya Das 
26*28bc4229STaniya Das enum {
27*28bc4229STaniya Das 	DT_BI_TCXO,
28*28bc4229STaniya Das };
29*28bc4229STaniya Das 
30*28bc4229STaniya Das enum {
31*28bc4229STaniya Das 	P_BI_TCXO,
32*28bc4229STaniya Das 	P_CAM_CC_PLL0_OUT_AUX,
33*28bc4229STaniya Das 	P_CAM_CC_PLL1_OUT_AUX,
34*28bc4229STaniya Das 	P_CAM_CC_PLL2_OUT_AUX2,
35*28bc4229STaniya Das 	P_CAM_CC_PLL2_OUT_EARLY,
36*28bc4229STaniya Das 	P_CAM_CC_PLL3_OUT_MAIN,
37*28bc4229STaniya Das };
38*28bc4229STaniya Das 
39*28bc4229STaniya Das static const struct pll_vco brammo_vco[] = {
40*28bc4229STaniya Das 	{ 500000000, 1250000000, 0 },
41*28bc4229STaniya Das };
42*28bc4229STaniya Das 
43*28bc4229STaniya Das static const struct pll_vco spark_vco[] = {
44*28bc4229STaniya Das 	{ 1000000000, 2100000000, 0 },
45*28bc4229STaniya Das 	{ 750000000, 1500000000, 1 },
46*28bc4229STaniya Das 	{ 500000000, 1000000000, 2 },
47*28bc4229STaniya Das 	{ 300000000, 500000000, 3 },
48*28bc4229STaniya Das 	{ 550000000, 1100000000, 4 },
49*28bc4229STaniya Das };
50*28bc4229STaniya Das 
51*28bc4229STaniya Das /* 600MHz configuration VCO - 2 */
52*28bc4229STaniya Das static const struct alpha_pll_config cam_cc_pll0_config = {
53*28bc4229STaniya Das 	.l = 0x1f,
54*28bc4229STaniya Das 	.alpha_hi = 0x40,
55*28bc4229STaniya Das 	.alpha_en_mask = BIT(24),
56*28bc4229STaniya Das 	.vco_val = BIT(21),
57*28bc4229STaniya Das 	.vco_mask = GENMASK(21, 20),
58*28bc4229STaniya Das 	.aux_output_mask = BIT(1),
59*28bc4229STaniya Das 	.config_ctl_val = 0x4001055b,
60*28bc4229STaniya Das 	.test_ctl_hi_val = 0x1,
61*28bc4229STaniya Das 	.test_ctl_hi_mask = 0x1,
62*28bc4229STaniya Das };
63*28bc4229STaniya Das 
64*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll0 = {
65*28bc4229STaniya Das 	.offset = 0x0,
66*28bc4229STaniya Das 	.config = &cam_cc_pll0_config,
67*28bc4229STaniya Das 	.vco_table = spark_vco,
68*28bc4229STaniya Das 	.num_vco = ARRAY_SIZE(spark_vco),
69*28bc4229STaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
70*28bc4229STaniya Das 	.clkr = {
71*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
72*28bc4229STaniya Das 			.name = "cam_cc_pll0",
73*28bc4229STaniya Das 			.parent_data = &(const struct clk_parent_data) {
74*28bc4229STaniya Das 				.index = DT_BI_TCXO,
75*28bc4229STaniya Das 			},
76*28bc4229STaniya Das 			.num_parents = 1,
77*28bc4229STaniya Das 			.ops = &clk_alpha_pll_ops,
78*28bc4229STaniya Das 		},
79*28bc4229STaniya Das 	},
80*28bc4229STaniya Das };
81*28bc4229STaniya Das 
82*28bc4229STaniya Das /* 808MHz configuration VCO - 2 */
83*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll1_config = {
84*28bc4229STaniya Das 	.l = 0x2a,
85*28bc4229STaniya Das 	.alpha_hi = 0x15,
86*28bc4229STaniya Das 	.alpha = 0x55555555,
87*28bc4229STaniya Das 	.alpha_en_mask = BIT(24),
88*28bc4229STaniya Das 	.vco_val = BIT(21),
89*28bc4229STaniya Das 	.vco_mask = GENMASK(21, 20),
90*28bc4229STaniya Das 	.aux_output_mask = BIT(1),
91*28bc4229STaniya Das 	.config_ctl_val = 0x4001055b,
92*28bc4229STaniya Das 	.test_ctl_hi_val = 0x1,
93*28bc4229STaniya Das 	.test_ctl_hi_mask = 0x1,
94*28bc4229STaniya Das };
95*28bc4229STaniya Das 
96*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll1 = {
97*28bc4229STaniya Das 	.offset = 0x1000,
98*28bc4229STaniya Das 	.config = &cam_cc_pll1_config,
99*28bc4229STaniya Das 	.vco_table = spark_vco,
100*28bc4229STaniya Das 	.num_vco = ARRAY_SIZE(spark_vco),
101*28bc4229STaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
102*28bc4229STaniya Das 	.clkr = {
103*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
104*28bc4229STaniya Das 			.name = "cam_cc_pll1",
105*28bc4229STaniya Das 			.parent_data = &(const struct clk_parent_data) {
106*28bc4229STaniya Das 				.index = DT_BI_TCXO,
107*28bc4229STaniya Das 			},
108*28bc4229STaniya Das 			.num_parents = 1,
109*28bc4229STaniya Das 			.ops = &clk_alpha_pll_ops,
110*28bc4229STaniya Das 		},
111*28bc4229STaniya Das 	},
112*28bc4229STaniya Das };
113*28bc4229STaniya Das 
114*28bc4229STaniya Das /* 960MHz configuration VCO - 0 */
115*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll2_config = {
116*28bc4229STaniya Das 	.l = 0x32,
117*28bc4229STaniya Das 	.vco_val = 0x0,
118*28bc4229STaniya Das 	.vco_mask = GENMASK(21, 20),
119*28bc4229STaniya Das 	.early_output_mask = BIT(3),
120*28bc4229STaniya Das 	.aux2_output_mask = BIT(2),
121*28bc4229STaniya Das 	.post_div_val = 0x1 << 8,
122*28bc4229STaniya Das 	.post_div_mask = 0x3 << 8,
123*28bc4229STaniya Das 	.config_ctl_val = 0x04289,
124*28bc4229STaniya Das 	.test_ctl_val = 0x08000000,
125*28bc4229STaniya Das 	.test_ctl_mask = 0x08000000,
126*28bc4229STaniya Das };
127*28bc4229STaniya Das 
128*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll2 = {
129*28bc4229STaniya Das 	.offset = 0x2000,
130*28bc4229STaniya Das 	.config = &cam_cc_pll2_config,
131*28bc4229STaniya Das 	.vco_table = brammo_vco,
132*28bc4229STaniya Das 	.num_vco = ARRAY_SIZE(brammo_vco),
133*28bc4229STaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
134*28bc4229STaniya Das 	.clkr = {
135*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
136*28bc4229STaniya Das 			.name = "cam_cc_pll2",
137*28bc4229STaniya Das 			.parent_data = &(const struct clk_parent_data) {
138*28bc4229STaniya Das 				.index = DT_BI_TCXO,
139*28bc4229STaniya Das 			},
140*28bc4229STaniya Das 			.num_parents = 1,
141*28bc4229STaniya Das 			.ops = &clk_alpha_pll_ops,
142*28bc4229STaniya Das 		},
143*28bc4229STaniya Das 	},
144*28bc4229STaniya Das };
145*28bc4229STaniya Das 
146*28bc4229STaniya Das static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux2[] = {
147*28bc4229STaniya Das 	{ 0x1, 2 },
148*28bc4229STaniya Das 	{ }
149*28bc4229STaniya Das };
150*28bc4229STaniya Das 
151*28bc4229STaniya Das static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux2 = {
152*28bc4229STaniya Das 	.offset = 0x2000,
153*28bc4229STaniya Das 	.post_div_shift = 8,
154*28bc4229STaniya Das 	.post_div_table = post_div_table_cam_cc_pll2_out_aux2,
155*28bc4229STaniya Das 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux2),
156*28bc4229STaniya Das 	.width = 2,
157*28bc4229STaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
158*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
159*28bc4229STaniya Das 		.name = "cam_cc_pll2_out_aux2",
160*28bc4229STaniya Das 		.parent_hws = (const struct clk_hw*[]) {
161*28bc4229STaniya Das 			&cam_cc_pll2.clkr.hw,
162*28bc4229STaniya Das 		},
163*28bc4229STaniya Das 		.num_parents = 1,
164*28bc4229STaniya Das 		.ops = &clk_alpha_pll_postdiv_ops,
165*28bc4229STaniya Das 	},
166*28bc4229STaniya Das };
167*28bc4229STaniya Das 
168*28bc4229STaniya Das /* 1080MHz configuration - VCO - 0 */
169*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll3_config = {
170*28bc4229STaniya Das 	.l = 0x38,
171*28bc4229STaniya Das 	.alpha_hi = 0x40,
172*28bc4229STaniya Das 	.alpha_en_mask = BIT(24),
173*28bc4229STaniya Das 	.vco_val = 0x0,
174*28bc4229STaniya Das 	.vco_mask = GENMASK(21, 20),
175*28bc4229STaniya Das 	.main_output_mask = BIT(0),
176*28bc4229STaniya Das 	.config_ctl_val = 0x4001055b,
177*28bc4229STaniya Das 	.test_ctl_hi_val = 0x1,
178*28bc4229STaniya Das 	.test_ctl_hi_mask = 0x1,
179*28bc4229STaniya Das };
180*28bc4229STaniya Das 
181*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll3 = {
182*28bc4229STaniya Das 	.offset = 0x3000,
183*28bc4229STaniya Das 	.config = &cam_cc_pll3_config,
184*28bc4229STaniya Das 	.vco_table = spark_vco,
185*28bc4229STaniya Das 	.num_vco = ARRAY_SIZE(spark_vco),
186*28bc4229STaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
187*28bc4229STaniya Das 	.clkr = {
188*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
189*28bc4229STaniya Das 			.name = "cam_cc_pll3",
190*28bc4229STaniya Das 			.parent_data = &(const struct clk_parent_data) {
191*28bc4229STaniya Das 				.index = DT_BI_TCXO,
192*28bc4229STaniya Das 			},
193*28bc4229STaniya Das 			.num_parents = 1,
194*28bc4229STaniya Das 			.ops = &clk_alpha_pll_ops,
195*28bc4229STaniya Das 		},
196*28bc4229STaniya Das 	},
197*28bc4229STaniya Das };
198*28bc4229STaniya Das 
199*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_0[] = {
200*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
201*28bc4229STaniya Das 	{ P_CAM_CC_PLL1_OUT_AUX, 2 },
202*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
203*28bc4229STaniya Das };
204*28bc4229STaniya Das 
205*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_0[] = {
206*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
207*28bc4229STaniya Das 	{ .hw = &cam_cc_pll1.clkr.hw },
208*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
209*28bc4229STaniya Das };
210*28bc4229STaniya Das 
211*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_1[] = {
212*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
213*28bc4229STaniya Das 	{ P_CAM_CC_PLL2_OUT_EARLY, 4 },
214*28bc4229STaniya Das 	{ P_CAM_CC_PLL3_OUT_MAIN, 5 },
215*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
216*28bc4229STaniya Das };
217*28bc4229STaniya Das 
218*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_1[] = {
219*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
220*28bc4229STaniya Das 	{ .hw = &cam_cc_pll2.clkr.hw },
221*28bc4229STaniya Das 	{ .hw = &cam_cc_pll3.clkr.hw },
222*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
223*28bc4229STaniya Das };
224*28bc4229STaniya Das 
225*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_2[] = {
226*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
227*28bc4229STaniya Das 	{ P_CAM_CC_PLL1_OUT_AUX, 2 },
228*28bc4229STaniya Das 	{ P_CAM_CC_PLL2_OUT_EARLY, 4 },
229*28bc4229STaniya Das 	{ P_CAM_CC_PLL3_OUT_MAIN, 5 },
230*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
231*28bc4229STaniya Das };
232*28bc4229STaniya Das 
233*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_2[] = {
234*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
235*28bc4229STaniya Das 	{ .hw = &cam_cc_pll1.clkr.hw },
236*28bc4229STaniya Das 	{ .hw = &cam_cc_pll2.clkr.hw },
237*28bc4229STaniya Das 	{ .hw = &cam_cc_pll3.clkr.hw },
238*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
239*28bc4229STaniya Das };
240*28bc4229STaniya Das 
241*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_3[] = {
242*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
243*28bc4229STaniya Das 	{ P_CAM_CC_PLL2_OUT_AUX2, 1 },
244*28bc4229STaniya Das };
245*28bc4229STaniya Das 
246*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_3[] = {
247*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
248*28bc4229STaniya Das 	{ .hw = &cam_cc_pll2_out_aux2.clkr.hw },
249*28bc4229STaniya Das };
250*28bc4229STaniya Das 
251*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_4[] = {
252*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
253*28bc4229STaniya Das 	{ P_CAM_CC_PLL3_OUT_MAIN, 5 },
254*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
255*28bc4229STaniya Das };
256*28bc4229STaniya Das 
257*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_4[] = {
258*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
259*28bc4229STaniya Das 	{ .hw = &cam_cc_pll3.clkr.hw },
260*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
261*28bc4229STaniya Das };
262*28bc4229STaniya Das 
263*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_5[] = {
264*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
265*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
266*28bc4229STaniya Das };
267*28bc4229STaniya Das 
268*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_5[] = {
269*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
270*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
271*28bc4229STaniya Das };
272*28bc4229STaniya Das 
273*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_6[] = {
274*28bc4229STaniya Das 	{ P_BI_TCXO, 0 },
275*28bc4229STaniya Das 	{ P_CAM_CC_PLL1_OUT_AUX, 2 },
276*28bc4229STaniya Das 	{ P_CAM_CC_PLL3_OUT_MAIN, 5 },
277*28bc4229STaniya Das 	{ P_CAM_CC_PLL0_OUT_AUX, 6 },
278*28bc4229STaniya Das };
279*28bc4229STaniya Das 
280*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_6[] = {
281*28bc4229STaniya Das 	{ .index = DT_BI_TCXO },
282*28bc4229STaniya Das 	{ .hw = &cam_cc_pll1.clkr.hw },
283*28bc4229STaniya Das 	{ .hw = &cam_cc_pll3.clkr.hw },
284*28bc4229STaniya Das 	{ .hw = &cam_cc_pll0.clkr.hw },
285*28bc4229STaniya Das };
286*28bc4229STaniya Das 
287*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
288*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
289*28bc4229STaniya Das 	F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
290*28bc4229STaniya Das 	F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
291*28bc4229STaniya Das 	F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
292*28bc4229STaniya Das 	F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
293*28bc4229STaniya Das 	F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
294*28bc4229STaniya Das 	{ }
295*28bc4229STaniya Das };
296*28bc4229STaniya Das 
297*28bc4229STaniya Das static struct clk_rcg2 cam_cc_bps_clk_src = {
298*28bc4229STaniya Das 	.cmd_rcgr = 0x6010,
299*28bc4229STaniya Das 	.mnd_width = 0,
300*28bc4229STaniya Das 	.hid_width = 5,
301*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_1,
302*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
303*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
304*28bc4229STaniya Das 		.name = "cam_cc_bps_clk_src",
305*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_1,
306*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
307*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
308*28bc4229STaniya Das 	},
309*28bc4229STaniya Das };
310*28bc4229STaniya Das 
311*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
312*28bc4229STaniya Das 	F(37500000, P_CAM_CC_PLL0_OUT_AUX, 16, 0, 0),
313*28bc4229STaniya Das 	F(50000000, P_CAM_CC_PLL0_OUT_AUX, 12, 0, 0),
314*28bc4229STaniya Das 	F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
315*28bc4229STaniya Das 	{ }
316*28bc4229STaniya Das };
317*28bc4229STaniya Das 
318*28bc4229STaniya Das static struct clk_rcg2 cam_cc_cci_clk_src = {
319*28bc4229STaniya Das 	.cmd_rcgr = 0xb0d8,
320*28bc4229STaniya Das 	.mnd_width = 8,
321*28bc4229STaniya Das 	.hid_width = 5,
322*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_5,
323*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_cci_clk_src,
324*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
325*28bc4229STaniya Das 		.name = "cam_cc_cci_clk_src",
326*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_5,
327*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
328*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
329*28bc4229STaniya Das 	},
330*28bc4229STaniya Das };
331*28bc4229STaniya Das 
332*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
333*28bc4229STaniya Das 	F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
334*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
335*28bc4229STaniya Das 	F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0),
336*28bc4229STaniya Das 	F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
337*28bc4229STaniya Das 	F(384000000, P_CAM_CC_PLL2_OUT_EARLY, 2.5, 0, 0),
338*28bc4229STaniya Das 	{ }
339*28bc4229STaniya Das };
340*28bc4229STaniya Das 
341*28bc4229STaniya Das static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
342*28bc4229STaniya Das 	.cmd_rcgr = 0x9064,
343*28bc4229STaniya Das 	.mnd_width = 0,
344*28bc4229STaniya Das 	.hid_width = 5,
345*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_2,
346*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
347*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
348*28bc4229STaniya Das 		.name = "cam_cc_cphy_rx_clk_src",
349*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_2,
350*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
351*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
352*28bc4229STaniya Das 	},
353*28bc4229STaniya Das };
354*28bc4229STaniya Das 
355*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
356*28bc4229STaniya Das 	F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
357*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
358*28bc4229STaniya Das 	F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0),
359*28bc4229STaniya Das 	{ }
360*28bc4229STaniya Das };
361*28bc4229STaniya Das 
362*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
363*28bc4229STaniya Das 	.cmd_rcgr = 0x5004,
364*28bc4229STaniya Das 	.mnd_width = 0,
365*28bc4229STaniya Das 	.hid_width = 5,
366*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_0,
367*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
368*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
369*28bc4229STaniya Das 		.name = "cam_cc_csi0phytimer_clk_src",
370*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_0,
371*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
372*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
373*28bc4229STaniya Das 	},
374*28bc4229STaniya Das };
375*28bc4229STaniya Das 
376*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
377*28bc4229STaniya Das 	.cmd_rcgr = 0x5028,
378*28bc4229STaniya Das 	.mnd_width = 0,
379*28bc4229STaniya Das 	.hid_width = 5,
380*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_0,
381*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
382*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
383*28bc4229STaniya Das 		.name = "cam_cc_csi1phytimer_clk_src",
384*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_0,
385*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
386*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
387*28bc4229STaniya Das 	},
388*28bc4229STaniya Das };
389*28bc4229STaniya Das 
390*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
391*28bc4229STaniya Das 	.cmd_rcgr = 0x504c,
392*28bc4229STaniya Das 	.mnd_width = 0,
393*28bc4229STaniya Das 	.hid_width = 5,
394*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_0,
395*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
396*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
397*28bc4229STaniya Das 		.name = "cam_cc_csi2phytimer_clk_src",
398*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_0,
399*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
400*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
401*28bc4229STaniya Das 	},
402*28bc4229STaniya Das };
403*28bc4229STaniya Das 
404*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
405*28bc4229STaniya Das 	F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
406*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
407*28bc4229STaniya Das 	F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0),
408*28bc4229STaniya Das 	F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
409*28bc4229STaniya Das 	{ }
410*28bc4229STaniya Das };
411*28bc4229STaniya Das 
412*28bc4229STaniya Das static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
413*28bc4229STaniya Das 	.cmd_rcgr = 0x603c,
414*28bc4229STaniya Das 	.mnd_width = 0,
415*28bc4229STaniya Das 	.hid_width = 5,
416*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_0,
417*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
418*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
419*28bc4229STaniya Das 		.name = "cam_cc_fast_ahb_clk_src",
420*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_0,
421*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
422*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
423*28bc4229STaniya Das 	},
424*28bc4229STaniya Das };
425*28bc4229STaniya Das 
426*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
427*28bc4229STaniya Das 	F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0),
428*28bc4229STaniya Das 	F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
429*28bc4229STaniya Das 	F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
430*28bc4229STaniya Das 	F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
431*28bc4229STaniya Das 	F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
432*28bc4229STaniya Das 	F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
433*28bc4229STaniya Das 	{ }
434*28bc4229STaniya Das };
435*28bc4229STaniya Das 
436*28bc4229STaniya Das static struct clk_rcg2 cam_cc_icp_clk_src = {
437*28bc4229STaniya Das 	.cmd_rcgr = 0xb088,
438*28bc4229STaniya Das 	.mnd_width = 0,
439*28bc4229STaniya Das 	.hid_width = 5,
440*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_1,
441*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
442*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
443*28bc4229STaniya Das 		.name = "cam_cc_icp_clk_src",
444*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_1,
445*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
446*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
447*28bc4229STaniya Das 	},
448*28bc4229STaniya Das };
449*28bc4229STaniya Das 
450*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
451*28bc4229STaniya Das 	F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0),
452*28bc4229STaniya Das 	F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
453*28bc4229STaniya Das 	F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
454*28bc4229STaniya Das 	F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
455*28bc4229STaniya Das 	F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
456*28bc4229STaniya Das 	{ }
457*28bc4229STaniya Das };
458*28bc4229STaniya Das 
459*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_0_clk_src = {
460*28bc4229STaniya Das 	.cmd_rcgr = 0x9010,
461*28bc4229STaniya Das 	.mnd_width = 0,
462*28bc4229STaniya Das 	.hid_width = 5,
463*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_4,
464*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
465*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
466*28bc4229STaniya Das 		.name = "cam_cc_ife_0_clk_src",
467*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_4,
468*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
469*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
470*28bc4229STaniya Das 	},
471*28bc4229STaniya Das };
472*28bc4229STaniya Das 
473*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
474*28bc4229STaniya Das 	F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
475*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
476*28bc4229STaniya Das 	F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
477*28bc4229STaniya Das 	F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
478*28bc4229STaniya Das 	F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
479*28bc4229STaniya Das 	F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
480*28bc4229STaniya Das 	{ }
481*28bc4229STaniya Das };
482*28bc4229STaniya Das 
483*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
484*28bc4229STaniya Das 	.cmd_rcgr = 0x903c,
485*28bc4229STaniya Das 	.mnd_width = 0,
486*28bc4229STaniya Das 	.hid_width = 5,
487*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_2,
488*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
489*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
490*28bc4229STaniya Das 		.name = "cam_cc_ife_0_csid_clk_src",
491*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_2,
492*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
493*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
494*28bc4229STaniya Das 	},
495*28bc4229STaniya Das };
496*28bc4229STaniya Das 
497*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_1_clk_src = {
498*28bc4229STaniya Das 	.cmd_rcgr = 0xa010,
499*28bc4229STaniya Das 	.mnd_width = 0,
500*28bc4229STaniya Das 	.hid_width = 5,
501*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_4,
502*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
503*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
504*28bc4229STaniya Das 		.name = "cam_cc_ife_1_clk_src",
505*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_4,
506*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
507*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
508*28bc4229STaniya Das 	},
509*28bc4229STaniya Das };
510*28bc4229STaniya Das 
511*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
512*28bc4229STaniya Das 	.cmd_rcgr = 0xa034,
513*28bc4229STaniya Das 	.mnd_width = 0,
514*28bc4229STaniya Das 	.hid_width = 5,
515*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_2,
516*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
517*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
518*28bc4229STaniya Das 		.name = "cam_cc_ife_1_csid_clk_src",
519*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_2,
520*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
521*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
522*28bc4229STaniya Das 	},
523*28bc4229STaniya Das };
524*28bc4229STaniya Das 
525*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
526*28bc4229STaniya Das 	.cmd_rcgr = 0xb004,
527*28bc4229STaniya Das 	.mnd_width = 0,
528*28bc4229STaniya Das 	.hid_width = 5,
529*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_4,
530*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
531*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
532*28bc4229STaniya Das 		.name = "cam_cc_ife_lite_clk_src",
533*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_4,
534*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
535*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
536*28bc4229STaniya Das 	},
537*28bc4229STaniya Das };
538*28bc4229STaniya Das 
539*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
540*28bc4229STaniya Das 	.cmd_rcgr = 0xb024,
541*28bc4229STaniya Das 	.mnd_width = 0,
542*28bc4229STaniya Das 	.hid_width = 5,
543*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_2,
544*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
545*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
546*28bc4229STaniya Das 		.name = "cam_cc_ife_lite_csid_clk_src",
547*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_2,
548*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
549*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
550*28bc4229STaniya Das 	},
551*28bc4229STaniya Das };
552*28bc4229STaniya Das 
553*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
554*28bc4229STaniya Das 	.cmd_rcgr = 0x7010,
555*28bc4229STaniya Das 	.mnd_width = 0,
556*28bc4229STaniya Das 	.hid_width = 5,
557*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_1,
558*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
559*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
560*28bc4229STaniya Das 		.name = "cam_cc_ipe_0_clk_src",
561*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_1,
562*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
563*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
564*28bc4229STaniya Das 	},
565*28bc4229STaniya Das };
566*28bc4229STaniya Das 
567*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = {
568*28bc4229STaniya Das 	F(66666667, P_CAM_CC_PLL0_OUT_AUX, 9, 0, 0),
569*28bc4229STaniya Das 	F(133333333, P_CAM_CC_PLL0_OUT_AUX, 4.5, 0, 0),
570*28bc4229STaniya Das 	F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0),
571*28bc4229STaniya Das 	F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
572*28bc4229STaniya Das 	F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
573*28bc4229STaniya Das 	F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
574*28bc4229STaniya Das 	{ }
575*28bc4229STaniya Das };
576*28bc4229STaniya Das 
577*28bc4229STaniya Das static struct clk_rcg2 cam_cc_jpeg_clk_src = {
578*28bc4229STaniya Das 	.cmd_rcgr = 0xb04c,
579*28bc4229STaniya Das 	.mnd_width = 0,
580*28bc4229STaniya Das 	.hid_width = 5,
581*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_1,
582*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_jpeg_clk_src,
583*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
584*28bc4229STaniya Das 		.name = "cam_cc_jpeg_clk_src",
585*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_1,
586*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
587*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
588*28bc4229STaniya Das 	},
589*28bc4229STaniya Das };
590*28bc4229STaniya Das 
591*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
592*28bc4229STaniya Das 	F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
593*28bc4229STaniya Das 	F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0),
594*28bc4229STaniya Das 	F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0),
595*28bc4229STaniya Das 	F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
596*28bc4229STaniya Das 	{ }
597*28bc4229STaniya Das };
598*28bc4229STaniya Das 
599*28bc4229STaniya Das static struct clk_rcg2 cam_cc_lrme_clk_src = {
600*28bc4229STaniya Das 	.cmd_rcgr = 0xb0f8,
601*28bc4229STaniya Das 	.mnd_width = 0,
602*28bc4229STaniya Das 	.hid_width = 5,
603*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_6,
604*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_lrme_clk_src,
605*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
606*28bc4229STaniya Das 		.name = "cam_cc_lrme_clk_src",
607*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_6,
608*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
609*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
610*28bc4229STaniya Das 	},
611*28bc4229STaniya Das };
612*28bc4229STaniya Das 
613*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
614*28bc4229STaniya Das 	F(19200000, P_BI_TCXO, 1, 0, 0),
615*28bc4229STaniya Das 	F(24000000, P_CAM_CC_PLL2_OUT_AUX2, 10, 1, 2),
616*28bc4229STaniya Das 	F(34285714, P_CAM_CC_PLL2_OUT_AUX2, 14, 0, 0),
617*28bc4229STaniya Das 	{ }
618*28bc4229STaniya Das };
619*28bc4229STaniya Das 
620*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk0_clk_src = {
621*28bc4229STaniya Das 	.cmd_rcgr = 0x4004,
622*28bc4229STaniya Das 	.mnd_width = 8,
623*28bc4229STaniya Das 	.hid_width = 5,
624*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_3,
625*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
626*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
627*28bc4229STaniya Das 		.name = "cam_cc_mclk0_clk_src",
628*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_3,
629*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
630*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
631*28bc4229STaniya Das 	},
632*28bc4229STaniya Das };
633*28bc4229STaniya Das 
634*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk1_clk_src = {
635*28bc4229STaniya Das 	.cmd_rcgr = 0x4024,
636*28bc4229STaniya Das 	.mnd_width = 8,
637*28bc4229STaniya Das 	.hid_width = 5,
638*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_3,
639*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
640*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
641*28bc4229STaniya Das 		.name = "cam_cc_mclk1_clk_src",
642*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_3,
643*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
644*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
645*28bc4229STaniya Das 	},
646*28bc4229STaniya Das };
647*28bc4229STaniya Das 
648*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk2_clk_src = {
649*28bc4229STaniya Das 	.cmd_rcgr = 0x4044,
650*28bc4229STaniya Das 	.mnd_width = 8,
651*28bc4229STaniya Das 	.hid_width = 5,
652*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_3,
653*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
654*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
655*28bc4229STaniya Das 		.name = "cam_cc_mclk2_clk_src",
656*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_3,
657*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
658*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
659*28bc4229STaniya Das 	},
660*28bc4229STaniya Das };
661*28bc4229STaniya Das 
662*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk3_clk_src = {
663*28bc4229STaniya Das 	.cmd_rcgr = 0x4064,
664*28bc4229STaniya Das 	.mnd_width = 8,
665*28bc4229STaniya Das 	.hid_width = 5,
666*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_3,
667*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
668*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
669*28bc4229STaniya Das 		.name = "cam_cc_mclk3_clk_src",
670*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_3,
671*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
672*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
673*28bc4229STaniya Das 	},
674*28bc4229STaniya Das };
675*28bc4229STaniya Das 
676*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
677*28bc4229STaniya Das 	F(80000000, P_CAM_CC_PLL0_OUT_AUX, 7.5, 0, 0),
678*28bc4229STaniya Das 	{ }
679*28bc4229STaniya Das };
680*28bc4229STaniya Das 
681*28bc4229STaniya Das static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
682*28bc4229STaniya Das 	.cmd_rcgr = 0x6058,
683*28bc4229STaniya Das 	.mnd_width = 0,
684*28bc4229STaniya Das 	.hid_width = 5,
685*28bc4229STaniya Das 	.parent_map = cam_cc_parent_map_0,
686*28bc4229STaniya Das 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
687*28bc4229STaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
688*28bc4229STaniya Das 		.name = "cam_cc_slow_ahb_clk_src",
689*28bc4229STaniya Das 		.parent_data = cam_cc_parent_data_0,
690*28bc4229STaniya Das 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
691*28bc4229STaniya Das 		.ops = &clk_rcg2_shared_ops,
692*28bc4229STaniya Das 	},
693*28bc4229STaniya Das };
694*28bc4229STaniya Das 
695*28bc4229STaniya Das static struct clk_branch cam_cc_bps_ahb_clk = {
696*28bc4229STaniya Das 	.halt_reg = 0x6070,
697*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
698*28bc4229STaniya Das 	.clkr = {
699*28bc4229STaniya Das 		.enable_reg = 0x6070,
700*28bc4229STaniya Das 		.enable_mask = BIT(0),
701*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
702*28bc4229STaniya Das 			.name = "cam_cc_bps_ahb_clk",
703*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
704*28bc4229STaniya Das 				&cam_cc_slow_ahb_clk_src.clkr.hw,
705*28bc4229STaniya Das 			},
706*28bc4229STaniya Das 			.num_parents = 1,
707*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
708*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
709*28bc4229STaniya Das 		},
710*28bc4229STaniya Das 	},
711*28bc4229STaniya Das };
712*28bc4229STaniya Das 
713*28bc4229STaniya Das static struct clk_branch cam_cc_bps_areg_clk = {
714*28bc4229STaniya Das 	.halt_reg = 0x6054,
715*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
716*28bc4229STaniya Das 	.clkr = {
717*28bc4229STaniya Das 		.enable_reg = 0x6054,
718*28bc4229STaniya Das 		.enable_mask = BIT(0),
719*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
720*28bc4229STaniya Das 			.name = "cam_cc_bps_areg_clk",
721*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
722*28bc4229STaniya Das 				&cam_cc_fast_ahb_clk_src.clkr.hw,
723*28bc4229STaniya Das 			},
724*28bc4229STaniya Das 			.num_parents = 1,
725*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
726*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
727*28bc4229STaniya Das 		},
728*28bc4229STaniya Das 	},
729*28bc4229STaniya Das };
730*28bc4229STaniya Das 
731*28bc4229STaniya Das static struct clk_branch cam_cc_bps_axi_clk = {
732*28bc4229STaniya Das 	.halt_reg = 0x6038,
733*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
734*28bc4229STaniya Das 	.clkr = {
735*28bc4229STaniya Das 		.enable_reg = 0x6038,
736*28bc4229STaniya Das 		.enable_mask = BIT(0),
737*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
738*28bc4229STaniya Das 			.name = "cam_cc_bps_axi_clk",
739*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
740*28bc4229STaniya Das 		},
741*28bc4229STaniya Das 	},
742*28bc4229STaniya Das };
743*28bc4229STaniya Das 
744*28bc4229STaniya Das static struct clk_branch cam_cc_bps_clk = {
745*28bc4229STaniya Das 	.halt_reg = 0x6028,
746*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
747*28bc4229STaniya Das 	.clkr = {
748*28bc4229STaniya Das 		.enable_reg = 0x6028,
749*28bc4229STaniya Das 		.enable_mask = BIT(0),
750*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
751*28bc4229STaniya Das 			.name = "cam_cc_bps_clk",
752*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
753*28bc4229STaniya Das 				&cam_cc_bps_clk_src.clkr.hw,
754*28bc4229STaniya Das 			},
755*28bc4229STaniya Das 			.num_parents = 1,
756*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
757*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
758*28bc4229STaniya Das 		},
759*28bc4229STaniya Das 	},
760*28bc4229STaniya Das };
761*28bc4229STaniya Das 
762*28bc4229STaniya Das static struct clk_branch cam_cc_camnoc_axi_clk = {
763*28bc4229STaniya Das 	.halt_reg = 0xb124,
764*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
765*28bc4229STaniya Das 	.clkr = {
766*28bc4229STaniya Das 		.enable_reg = 0xb124,
767*28bc4229STaniya Das 		.enable_mask = BIT(0),
768*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
769*28bc4229STaniya Das 			.name = "cam_cc_camnoc_axi_clk",
770*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
771*28bc4229STaniya Das 		},
772*28bc4229STaniya Das 	},
773*28bc4229STaniya Das };
774*28bc4229STaniya Das 
775*28bc4229STaniya Das static struct clk_branch cam_cc_cci_clk = {
776*28bc4229STaniya Das 	.halt_reg = 0xb0f0,
777*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
778*28bc4229STaniya Das 	.clkr = {
779*28bc4229STaniya Das 		.enable_reg = 0xb0f0,
780*28bc4229STaniya Das 		.enable_mask = BIT(0),
781*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
782*28bc4229STaniya Das 			.name = "cam_cc_cci_clk",
783*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
784*28bc4229STaniya Das 				&cam_cc_cci_clk_src.clkr.hw,
785*28bc4229STaniya Das 			},
786*28bc4229STaniya Das 			.num_parents = 1,
787*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
788*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
789*28bc4229STaniya Das 		},
790*28bc4229STaniya Das 	},
791*28bc4229STaniya Das };
792*28bc4229STaniya Das 
793*28bc4229STaniya Das static struct clk_branch cam_cc_core_ahb_clk = {
794*28bc4229STaniya Das 	.halt_reg = 0xb144,
795*28bc4229STaniya Das 	.halt_check = BRANCH_HALT_VOTED,
796*28bc4229STaniya Das 	.clkr = {
797*28bc4229STaniya Das 		.enable_reg = 0xb144,
798*28bc4229STaniya Das 		.enable_mask = BIT(0),
799*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
800*28bc4229STaniya Das 			.name = "cam_cc_core_ahb_clk",
801*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
802*28bc4229STaniya Das 				&cam_cc_slow_ahb_clk_src.clkr.hw,
803*28bc4229STaniya Das 			},
804*28bc4229STaniya Das 			.num_parents = 1,
805*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
806*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
807*28bc4229STaniya Das 		},
808*28bc4229STaniya Das 	},
809*28bc4229STaniya Das };
810*28bc4229STaniya Das 
811*28bc4229STaniya Das static struct clk_branch cam_cc_cpas_ahb_clk = {
812*28bc4229STaniya Das 	.halt_reg = 0xb11c,
813*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
814*28bc4229STaniya Das 	.clkr = {
815*28bc4229STaniya Das 		.enable_reg = 0xb11c,
816*28bc4229STaniya Das 		.enable_mask = BIT(0),
817*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
818*28bc4229STaniya Das 			.name = "cam_cc_cpas_ahb_clk",
819*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
820*28bc4229STaniya Das 				&cam_cc_slow_ahb_clk_src.clkr.hw,
821*28bc4229STaniya Das 			},
822*28bc4229STaniya Das 			.num_parents = 1,
823*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
824*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
825*28bc4229STaniya Das 		},
826*28bc4229STaniya Das 	},
827*28bc4229STaniya Das };
828*28bc4229STaniya Das 
829*28bc4229STaniya Das static struct clk_branch cam_cc_csi0phytimer_clk = {
830*28bc4229STaniya Das 	.halt_reg = 0x501c,
831*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
832*28bc4229STaniya Das 	.clkr = {
833*28bc4229STaniya Das 		.enable_reg = 0x501c,
834*28bc4229STaniya Das 		.enable_mask = BIT(0),
835*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
836*28bc4229STaniya Das 			.name = "cam_cc_csi0phytimer_clk",
837*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
838*28bc4229STaniya Das 				&cam_cc_csi0phytimer_clk_src.clkr.hw,
839*28bc4229STaniya Das 			},
840*28bc4229STaniya Das 			.num_parents = 1,
841*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
842*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
843*28bc4229STaniya Das 		},
844*28bc4229STaniya Das 	},
845*28bc4229STaniya Das };
846*28bc4229STaniya Das 
847*28bc4229STaniya Das static struct clk_branch cam_cc_csi1phytimer_clk = {
848*28bc4229STaniya Das 	.halt_reg = 0x5040,
849*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
850*28bc4229STaniya Das 	.clkr = {
851*28bc4229STaniya Das 		.enable_reg = 0x5040,
852*28bc4229STaniya Das 		.enable_mask = BIT(0),
853*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
854*28bc4229STaniya Das 			.name = "cam_cc_csi1phytimer_clk",
855*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
856*28bc4229STaniya Das 				&cam_cc_csi1phytimer_clk_src.clkr.hw,
857*28bc4229STaniya Das 			},
858*28bc4229STaniya Das 			.num_parents = 1,
859*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
860*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
861*28bc4229STaniya Das 		},
862*28bc4229STaniya Das 	},
863*28bc4229STaniya Das };
864*28bc4229STaniya Das 
865*28bc4229STaniya Das static struct clk_branch cam_cc_csi2phytimer_clk = {
866*28bc4229STaniya Das 	.halt_reg = 0x5064,
867*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
868*28bc4229STaniya Das 	.clkr = {
869*28bc4229STaniya Das 		.enable_reg = 0x5064,
870*28bc4229STaniya Das 		.enable_mask = BIT(0),
871*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
872*28bc4229STaniya Das 			.name = "cam_cc_csi2phytimer_clk",
873*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
874*28bc4229STaniya Das 				&cam_cc_csi2phytimer_clk_src.clkr.hw,
875*28bc4229STaniya Das 			},
876*28bc4229STaniya Das 			.num_parents = 1,
877*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
878*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
879*28bc4229STaniya Das 		},
880*28bc4229STaniya Das 	},
881*28bc4229STaniya Das };
882*28bc4229STaniya Das 
883*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy0_clk = {
884*28bc4229STaniya Das 	.halt_reg = 0x5020,
885*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
886*28bc4229STaniya Das 	.clkr = {
887*28bc4229STaniya Das 		.enable_reg = 0x5020,
888*28bc4229STaniya Das 		.enable_mask = BIT(0),
889*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
890*28bc4229STaniya Das 			.name = "cam_cc_csiphy0_clk",
891*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
892*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
893*28bc4229STaniya Das 			},
894*28bc4229STaniya Das 			.num_parents = 1,
895*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
896*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
897*28bc4229STaniya Das 		},
898*28bc4229STaniya Das 	},
899*28bc4229STaniya Das };
900*28bc4229STaniya Das 
901*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy1_clk = {
902*28bc4229STaniya Das 	.halt_reg = 0x5044,
903*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
904*28bc4229STaniya Das 	.clkr = {
905*28bc4229STaniya Das 		.enable_reg = 0x5044,
906*28bc4229STaniya Das 		.enable_mask = BIT(0),
907*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
908*28bc4229STaniya Das 			.name = "cam_cc_csiphy1_clk",
909*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
910*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
911*28bc4229STaniya Das 			},
912*28bc4229STaniya Das 			.num_parents = 1,
913*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
914*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
915*28bc4229STaniya Das 		},
916*28bc4229STaniya Das 	},
917*28bc4229STaniya Das };
918*28bc4229STaniya Das 
919*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy2_clk = {
920*28bc4229STaniya Das 	.halt_reg = 0x5068,
921*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
922*28bc4229STaniya Das 	.clkr = {
923*28bc4229STaniya Das 		.enable_reg = 0x5068,
924*28bc4229STaniya Das 		.enable_mask = BIT(0),
925*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
926*28bc4229STaniya Das 			.name = "cam_cc_csiphy2_clk",
927*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
928*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
929*28bc4229STaniya Das 			},
930*28bc4229STaniya Das 			.num_parents = 1,
931*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
932*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
933*28bc4229STaniya Das 		},
934*28bc4229STaniya Das 	},
935*28bc4229STaniya Das };
936*28bc4229STaniya Das 
937*28bc4229STaniya Das static struct clk_branch cam_cc_icp_clk = {
938*28bc4229STaniya Das 	.halt_reg = 0xb0a0,
939*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
940*28bc4229STaniya Das 	.clkr = {
941*28bc4229STaniya Das 		.enable_reg = 0xb0a0,
942*28bc4229STaniya Das 		.enable_mask = BIT(0),
943*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
944*28bc4229STaniya Das 			.name = "cam_cc_icp_clk",
945*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
946*28bc4229STaniya Das 				&cam_cc_icp_clk_src.clkr.hw,
947*28bc4229STaniya Das 			},
948*28bc4229STaniya Das 			.num_parents = 1,
949*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
950*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
951*28bc4229STaniya Das 		},
952*28bc4229STaniya Das 	},
953*28bc4229STaniya Das };
954*28bc4229STaniya Das 
955*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_axi_clk = {
956*28bc4229STaniya Das 	.halt_reg = 0x9080,
957*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
958*28bc4229STaniya Das 	.clkr = {
959*28bc4229STaniya Das 		.enable_reg = 0x9080,
960*28bc4229STaniya Das 		.enable_mask = BIT(0),
961*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
962*28bc4229STaniya Das 			.name = "cam_cc_ife_0_axi_clk",
963*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
964*28bc4229STaniya Das 		},
965*28bc4229STaniya Das 	},
966*28bc4229STaniya Das };
967*28bc4229STaniya Das 
968*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_clk = {
969*28bc4229STaniya Das 	.halt_reg = 0x9028,
970*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
971*28bc4229STaniya Das 	.clkr = {
972*28bc4229STaniya Das 		.enable_reg = 0x9028,
973*28bc4229STaniya Das 		.enable_mask = BIT(0),
974*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
975*28bc4229STaniya Das 			.name = "cam_cc_ife_0_clk",
976*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
977*28bc4229STaniya Das 				&cam_cc_ife_0_clk_src.clkr.hw,
978*28bc4229STaniya Das 			},
979*28bc4229STaniya Das 			.num_parents = 1,
980*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
981*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
982*28bc4229STaniya Das 		},
983*28bc4229STaniya Das 	},
984*28bc4229STaniya Das };
985*28bc4229STaniya Das 
986*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
987*28bc4229STaniya Das 	.halt_reg = 0x907c,
988*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
989*28bc4229STaniya Das 	.clkr = {
990*28bc4229STaniya Das 		.enable_reg = 0x907c,
991*28bc4229STaniya Das 		.enable_mask = BIT(0),
992*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
993*28bc4229STaniya Das 			.name = "cam_cc_ife_0_cphy_rx_clk",
994*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
995*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
996*28bc4229STaniya Das 			},
997*28bc4229STaniya Das 			.num_parents = 1,
998*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
999*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1000*28bc4229STaniya Das 		},
1001*28bc4229STaniya Das 	},
1002*28bc4229STaniya Das };
1003*28bc4229STaniya Das 
1004*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_csid_clk = {
1005*28bc4229STaniya Das 	.halt_reg = 0x9054,
1006*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1007*28bc4229STaniya Das 	.clkr = {
1008*28bc4229STaniya Das 		.enable_reg = 0x9054,
1009*28bc4229STaniya Das 		.enable_mask = BIT(0),
1010*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1011*28bc4229STaniya Das 			.name = "cam_cc_ife_0_csid_clk",
1012*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1013*28bc4229STaniya Das 				&cam_cc_ife_0_csid_clk_src.clkr.hw,
1014*28bc4229STaniya Das 			},
1015*28bc4229STaniya Das 			.num_parents = 1,
1016*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1017*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1018*28bc4229STaniya Das 		},
1019*28bc4229STaniya Das 	},
1020*28bc4229STaniya Das };
1021*28bc4229STaniya Das 
1022*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_dsp_clk = {
1023*28bc4229STaniya Das 	.halt_reg = 0x9038,
1024*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1025*28bc4229STaniya Das 	.clkr = {
1026*28bc4229STaniya Das 		.enable_reg = 0x9038,
1027*28bc4229STaniya Das 		.enable_mask = BIT(0),
1028*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1029*28bc4229STaniya Das 			.name = "cam_cc_ife_0_dsp_clk",
1030*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1031*28bc4229STaniya Das 				&cam_cc_ife_0_clk_src.clkr.hw,
1032*28bc4229STaniya Das 			},
1033*28bc4229STaniya Das 			.num_parents = 1,
1034*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1035*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1036*28bc4229STaniya Das 		},
1037*28bc4229STaniya Das 	},
1038*28bc4229STaniya Das };
1039*28bc4229STaniya Das 
1040*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_axi_clk = {
1041*28bc4229STaniya Das 	.halt_reg = 0xa058,
1042*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1043*28bc4229STaniya Das 	.clkr = {
1044*28bc4229STaniya Das 		.enable_reg = 0xa058,
1045*28bc4229STaniya Das 		.enable_mask = BIT(0),
1046*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1047*28bc4229STaniya Das 			.name = "cam_cc_ife_1_axi_clk",
1048*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1049*28bc4229STaniya Das 		},
1050*28bc4229STaniya Das 	},
1051*28bc4229STaniya Das };
1052*28bc4229STaniya Das 
1053*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_clk = {
1054*28bc4229STaniya Das 	.halt_reg = 0xa028,
1055*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1056*28bc4229STaniya Das 	.clkr = {
1057*28bc4229STaniya Das 		.enable_reg = 0xa028,
1058*28bc4229STaniya Das 		.enable_mask = BIT(0),
1059*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1060*28bc4229STaniya Das 			.name = "cam_cc_ife_1_clk",
1061*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1062*28bc4229STaniya Das 				&cam_cc_ife_1_clk_src.clkr.hw,
1063*28bc4229STaniya Das 			},
1064*28bc4229STaniya Das 			.num_parents = 1,
1065*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1066*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1067*28bc4229STaniya Das 		},
1068*28bc4229STaniya Das 	},
1069*28bc4229STaniya Das };
1070*28bc4229STaniya Das 
1071*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1072*28bc4229STaniya Das 	.halt_reg = 0xa054,
1073*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1074*28bc4229STaniya Das 	.clkr = {
1075*28bc4229STaniya Das 		.enable_reg = 0xa054,
1076*28bc4229STaniya Das 		.enable_mask = BIT(0),
1077*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1078*28bc4229STaniya Das 			.name = "cam_cc_ife_1_cphy_rx_clk",
1079*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1080*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1081*28bc4229STaniya Das 			},
1082*28bc4229STaniya Das 			.num_parents = 1,
1083*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1084*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1085*28bc4229STaniya Das 		},
1086*28bc4229STaniya Das 	},
1087*28bc4229STaniya Das };
1088*28bc4229STaniya Das 
1089*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_csid_clk = {
1090*28bc4229STaniya Das 	.halt_reg = 0xa04c,
1091*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1092*28bc4229STaniya Das 	.clkr = {
1093*28bc4229STaniya Das 		.enable_reg = 0xa04c,
1094*28bc4229STaniya Das 		.enable_mask = BIT(0),
1095*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1096*28bc4229STaniya Das 			.name = "cam_cc_ife_1_csid_clk",
1097*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1098*28bc4229STaniya Das 				&cam_cc_ife_1_csid_clk_src.clkr.hw,
1099*28bc4229STaniya Das 			},
1100*28bc4229STaniya Das 			.num_parents = 1,
1101*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1102*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1103*28bc4229STaniya Das 		},
1104*28bc4229STaniya Das 	},
1105*28bc4229STaniya Das };
1106*28bc4229STaniya Das 
1107*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_dsp_clk = {
1108*28bc4229STaniya Das 	.halt_reg = 0xa030,
1109*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1110*28bc4229STaniya Das 	.clkr = {
1111*28bc4229STaniya Das 		.enable_reg = 0xa030,
1112*28bc4229STaniya Das 		.enable_mask = BIT(0),
1113*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1114*28bc4229STaniya Das 			.name = "cam_cc_ife_1_dsp_clk",
1115*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1116*28bc4229STaniya Das 				&cam_cc_ife_1_clk_src.clkr.hw,
1117*28bc4229STaniya Das 			},
1118*28bc4229STaniya Das 			.num_parents = 1,
1119*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1120*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1121*28bc4229STaniya Das 		},
1122*28bc4229STaniya Das 	},
1123*28bc4229STaniya Das };
1124*28bc4229STaniya Das 
1125*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_clk = {
1126*28bc4229STaniya Das 	.halt_reg = 0xb01c,
1127*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1128*28bc4229STaniya Das 	.clkr = {
1129*28bc4229STaniya Das 		.enable_reg = 0xb01c,
1130*28bc4229STaniya Das 		.enable_mask = BIT(0),
1131*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1132*28bc4229STaniya Das 			.name = "cam_cc_ife_lite_clk",
1133*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1134*28bc4229STaniya Das 				&cam_cc_ife_lite_clk_src.clkr.hw,
1135*28bc4229STaniya Das 			},
1136*28bc4229STaniya Das 			.num_parents = 1,
1137*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1138*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1139*28bc4229STaniya Das 		},
1140*28bc4229STaniya Das 	},
1141*28bc4229STaniya Das };
1142*28bc4229STaniya Das 
1143*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
1144*28bc4229STaniya Das 	.halt_reg = 0xb044,
1145*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1146*28bc4229STaniya Das 	.clkr = {
1147*28bc4229STaniya Das 		.enable_reg = 0xb044,
1148*28bc4229STaniya Das 		.enable_mask = BIT(0),
1149*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1150*28bc4229STaniya Das 			.name = "cam_cc_ife_lite_cphy_rx_clk",
1151*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1152*28bc4229STaniya Das 				&cam_cc_cphy_rx_clk_src.clkr.hw,
1153*28bc4229STaniya Das 			},
1154*28bc4229STaniya Das 			.num_parents = 1,
1155*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1156*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1157*28bc4229STaniya Das 		},
1158*28bc4229STaniya Das 	},
1159*28bc4229STaniya Das };
1160*28bc4229STaniya Das 
1161*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_csid_clk = {
1162*28bc4229STaniya Das 	.halt_reg = 0xb03c,
1163*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1164*28bc4229STaniya Das 	.clkr = {
1165*28bc4229STaniya Das 		.enable_reg = 0xb03c,
1166*28bc4229STaniya Das 		.enable_mask = BIT(0),
1167*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1168*28bc4229STaniya Das 			.name = "cam_cc_ife_lite_csid_clk",
1169*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1170*28bc4229STaniya Das 				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
1171*28bc4229STaniya Das 			},
1172*28bc4229STaniya Das 			.num_parents = 1,
1173*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1174*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1175*28bc4229STaniya Das 		},
1176*28bc4229STaniya Das 	},
1177*28bc4229STaniya Das };
1178*28bc4229STaniya Das 
1179*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_ahb_clk = {
1180*28bc4229STaniya Das 	.halt_reg = 0x7040,
1181*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1182*28bc4229STaniya Das 	.clkr = {
1183*28bc4229STaniya Das 		.enable_reg = 0x7040,
1184*28bc4229STaniya Das 		.enable_mask = BIT(0),
1185*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1186*28bc4229STaniya Das 			.name = "cam_cc_ipe_0_ahb_clk",
1187*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1188*28bc4229STaniya Das 				&cam_cc_slow_ahb_clk_src.clkr.hw,
1189*28bc4229STaniya Das 			},
1190*28bc4229STaniya Das 			.num_parents = 1,
1191*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1192*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1193*28bc4229STaniya Das 		},
1194*28bc4229STaniya Das 	},
1195*28bc4229STaniya Das };
1196*28bc4229STaniya Das 
1197*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_areg_clk = {
1198*28bc4229STaniya Das 	.halt_reg = 0x703c,
1199*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1200*28bc4229STaniya Das 	.clkr = {
1201*28bc4229STaniya Das 		.enable_reg = 0x703c,
1202*28bc4229STaniya Das 		.enable_mask = BIT(0),
1203*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1204*28bc4229STaniya Das 			.name = "cam_cc_ipe_0_areg_clk",
1205*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1206*28bc4229STaniya Das 				&cam_cc_fast_ahb_clk_src.clkr.hw,
1207*28bc4229STaniya Das 			},
1208*28bc4229STaniya Das 			.num_parents = 1,
1209*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1210*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1211*28bc4229STaniya Das 		},
1212*28bc4229STaniya Das 	},
1213*28bc4229STaniya Das };
1214*28bc4229STaniya Das 
1215*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_axi_clk = {
1216*28bc4229STaniya Das 	.halt_reg = 0x7038,
1217*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1218*28bc4229STaniya Das 	.clkr = {
1219*28bc4229STaniya Das 		.enable_reg = 0x7038,
1220*28bc4229STaniya Das 		.enable_mask = BIT(0),
1221*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1222*28bc4229STaniya Das 			.name = "cam_cc_ipe_0_axi_clk",
1223*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1224*28bc4229STaniya Das 		},
1225*28bc4229STaniya Das 	},
1226*28bc4229STaniya Das };
1227*28bc4229STaniya Das 
1228*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_clk = {
1229*28bc4229STaniya Das 	.halt_reg = 0x7028,
1230*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1231*28bc4229STaniya Das 	.clkr = {
1232*28bc4229STaniya Das 		.enable_reg = 0x7028,
1233*28bc4229STaniya Das 		.enable_mask = BIT(0),
1234*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1235*28bc4229STaniya Das 			.name = "cam_cc_ipe_0_clk",
1236*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1237*28bc4229STaniya Das 				&cam_cc_ipe_0_clk_src.clkr.hw,
1238*28bc4229STaniya Das 			},
1239*28bc4229STaniya Das 			.num_parents = 1,
1240*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1241*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1242*28bc4229STaniya Das 		},
1243*28bc4229STaniya Das 	},
1244*28bc4229STaniya Das };
1245*28bc4229STaniya Das 
1246*28bc4229STaniya Das static struct clk_branch cam_cc_jpeg_clk = {
1247*28bc4229STaniya Das 	.halt_reg = 0xb064,
1248*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1249*28bc4229STaniya Das 	.clkr = {
1250*28bc4229STaniya Das 		.enable_reg = 0xb064,
1251*28bc4229STaniya Das 		.enable_mask = BIT(0),
1252*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1253*28bc4229STaniya Das 			.name = "cam_cc_jpeg_clk",
1254*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1255*28bc4229STaniya Das 				&cam_cc_jpeg_clk_src.clkr.hw,
1256*28bc4229STaniya Das 			},
1257*28bc4229STaniya Das 			.num_parents = 1,
1258*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1259*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1260*28bc4229STaniya Das 		},
1261*28bc4229STaniya Das 	},
1262*28bc4229STaniya Das };
1263*28bc4229STaniya Das 
1264*28bc4229STaniya Das static struct clk_branch cam_cc_lrme_clk = {
1265*28bc4229STaniya Das 	.halt_reg = 0xb110,
1266*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1267*28bc4229STaniya Das 	.clkr = {
1268*28bc4229STaniya Das 		.enable_reg = 0xb110,
1269*28bc4229STaniya Das 		.enable_mask = BIT(0),
1270*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1271*28bc4229STaniya Das 			.name = "cam_cc_lrme_clk",
1272*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1273*28bc4229STaniya Das 				&cam_cc_lrme_clk_src.clkr.hw,
1274*28bc4229STaniya Das 			},
1275*28bc4229STaniya Das 			.num_parents = 1,
1276*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1277*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1278*28bc4229STaniya Das 		},
1279*28bc4229STaniya Das 	},
1280*28bc4229STaniya Das };
1281*28bc4229STaniya Das 
1282*28bc4229STaniya Das static struct clk_branch cam_cc_mclk0_clk = {
1283*28bc4229STaniya Das 	.halt_reg = 0x401c,
1284*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1285*28bc4229STaniya Das 	.clkr = {
1286*28bc4229STaniya Das 		.enable_reg = 0x401c,
1287*28bc4229STaniya Das 		.enable_mask = BIT(0),
1288*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1289*28bc4229STaniya Das 			.name = "cam_cc_mclk0_clk",
1290*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1291*28bc4229STaniya Das 				&cam_cc_mclk0_clk_src.clkr.hw,
1292*28bc4229STaniya Das 			},
1293*28bc4229STaniya Das 			.num_parents = 1,
1294*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1295*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1296*28bc4229STaniya Das 		},
1297*28bc4229STaniya Das 	},
1298*28bc4229STaniya Das };
1299*28bc4229STaniya Das 
1300*28bc4229STaniya Das static struct clk_branch cam_cc_mclk1_clk = {
1301*28bc4229STaniya Das 	.halt_reg = 0x403c,
1302*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1303*28bc4229STaniya Das 	.clkr = {
1304*28bc4229STaniya Das 		.enable_reg = 0x403c,
1305*28bc4229STaniya Das 		.enable_mask = BIT(0),
1306*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1307*28bc4229STaniya Das 			.name = "cam_cc_mclk1_clk",
1308*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1309*28bc4229STaniya Das 				&cam_cc_mclk1_clk_src.clkr.hw,
1310*28bc4229STaniya Das 			},
1311*28bc4229STaniya Das 			.num_parents = 1,
1312*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1313*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1314*28bc4229STaniya Das 		},
1315*28bc4229STaniya Das 	},
1316*28bc4229STaniya Das };
1317*28bc4229STaniya Das 
1318*28bc4229STaniya Das static struct clk_branch cam_cc_mclk2_clk = {
1319*28bc4229STaniya Das 	.halt_reg = 0x405c,
1320*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1321*28bc4229STaniya Das 	.clkr = {
1322*28bc4229STaniya Das 		.enable_reg = 0x405c,
1323*28bc4229STaniya Das 		.enable_mask = BIT(0),
1324*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1325*28bc4229STaniya Das 			.name = "cam_cc_mclk2_clk",
1326*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1327*28bc4229STaniya Das 				&cam_cc_mclk2_clk_src.clkr.hw,
1328*28bc4229STaniya Das 			},
1329*28bc4229STaniya Das 			.num_parents = 1,
1330*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1331*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1332*28bc4229STaniya Das 		},
1333*28bc4229STaniya Das 	},
1334*28bc4229STaniya Das };
1335*28bc4229STaniya Das 
1336*28bc4229STaniya Das static struct clk_branch cam_cc_mclk3_clk = {
1337*28bc4229STaniya Das 	.halt_reg = 0x407c,
1338*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1339*28bc4229STaniya Das 	.clkr = {
1340*28bc4229STaniya Das 		.enable_reg = 0x407c,
1341*28bc4229STaniya Das 		.enable_mask = BIT(0),
1342*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1343*28bc4229STaniya Das 			.name = "cam_cc_mclk3_clk",
1344*28bc4229STaniya Das 			.parent_hws = (const struct clk_hw*[]) {
1345*28bc4229STaniya Das 				&cam_cc_mclk3_clk_src.clkr.hw,
1346*28bc4229STaniya Das 			},
1347*28bc4229STaniya Das 			.num_parents = 1,
1348*28bc4229STaniya Das 			.flags = CLK_SET_RATE_PARENT,
1349*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1350*28bc4229STaniya Das 		},
1351*28bc4229STaniya Das 	},
1352*28bc4229STaniya Das };
1353*28bc4229STaniya Das 
1354*28bc4229STaniya Das static struct clk_branch cam_cc_soc_ahb_clk = {
1355*28bc4229STaniya Das 	.halt_reg = 0xb140,
1356*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1357*28bc4229STaniya Das 	.clkr = {
1358*28bc4229STaniya Das 		.enable_reg = 0xb140,
1359*28bc4229STaniya Das 		.enable_mask = BIT(0),
1360*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1361*28bc4229STaniya Das 			.name = "cam_cc_soc_ahb_clk",
1362*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1363*28bc4229STaniya Das 		},
1364*28bc4229STaniya Das 	},
1365*28bc4229STaniya Das };
1366*28bc4229STaniya Das 
1367*28bc4229STaniya Das static struct clk_branch cam_cc_sys_tmr_clk = {
1368*28bc4229STaniya Das 	.halt_reg = 0xb0a8,
1369*28bc4229STaniya Das 	.halt_check = BRANCH_HALT,
1370*28bc4229STaniya Das 	.clkr = {
1371*28bc4229STaniya Das 		.enable_reg = 0xb0a8,
1372*28bc4229STaniya Das 		.enable_mask = BIT(0),
1373*28bc4229STaniya Das 		.hw.init = &(const struct clk_init_data) {
1374*28bc4229STaniya Das 			.name = "cam_cc_sys_tmr_clk",
1375*28bc4229STaniya Das 			.ops = &clk_branch2_ops,
1376*28bc4229STaniya Das 		},
1377*28bc4229STaniya Das 	},
1378*28bc4229STaniya Das };
1379*28bc4229STaniya Das 
1380*28bc4229STaniya Das static struct gdsc titan_top_gdsc = {
1381*28bc4229STaniya Das 	.gdscr = 0xb134,
1382*28bc4229STaniya Das 	.en_rest_wait_val = 0x2,
1383*28bc4229STaniya Das 	.en_few_wait_val = 0x2,
1384*28bc4229STaniya Das 	.clk_dis_wait_val = 0xf,
1385*28bc4229STaniya Das 	.pd = {
1386*28bc4229STaniya Das 		.name = "titan_top_gdsc",
1387*28bc4229STaniya Das 	},
1388*28bc4229STaniya Das 	.pwrsts = PWRSTS_OFF_ON,
1389*28bc4229STaniya Das 	.flags = POLL_CFG_GDSCR,
1390*28bc4229STaniya Das };
1391*28bc4229STaniya Das 
1392*28bc4229STaniya Das static struct gdsc bps_gdsc = {
1393*28bc4229STaniya Das 	.gdscr = 0x6004,
1394*28bc4229STaniya Das 	.en_rest_wait_val = 0x2,
1395*28bc4229STaniya Das 	.en_few_wait_val = 0x2,
1396*28bc4229STaniya Das 	.clk_dis_wait_val = 0xf,
1397*28bc4229STaniya Das 	.pd = {
1398*28bc4229STaniya Das 		.name = "bps_gdsc",
1399*28bc4229STaniya Das 	},
1400*28bc4229STaniya Das 	.pwrsts = PWRSTS_OFF_ON,
1401*28bc4229STaniya Das 	.parent = &titan_top_gdsc.pd,
1402*28bc4229STaniya Das 	.flags = POLL_CFG_GDSCR,
1403*28bc4229STaniya Das };
1404*28bc4229STaniya Das 
1405*28bc4229STaniya Das static struct gdsc ife_0_gdsc = {
1406*28bc4229STaniya Das 	.gdscr = 0x9004,
1407*28bc4229STaniya Das 	.en_rest_wait_val = 0x2,
1408*28bc4229STaniya Das 	.en_few_wait_val = 0x2,
1409*28bc4229STaniya Das 	.clk_dis_wait_val = 0xf,
1410*28bc4229STaniya Das 	.pd = {
1411*28bc4229STaniya Das 		.name = "ife_0_gdsc",
1412*28bc4229STaniya Das 	},
1413*28bc4229STaniya Das 	.pwrsts = PWRSTS_OFF_ON,
1414*28bc4229STaniya Das 	.parent = &titan_top_gdsc.pd,
1415*28bc4229STaniya Das 	.flags = POLL_CFG_GDSCR,
1416*28bc4229STaniya Das };
1417*28bc4229STaniya Das 
1418*28bc4229STaniya Das static struct gdsc ife_1_gdsc = {
1419*28bc4229STaniya Das 	.gdscr = 0xa004,
1420*28bc4229STaniya Das 	.en_rest_wait_val = 0x2,
1421*28bc4229STaniya Das 	.en_few_wait_val = 0x2,
1422*28bc4229STaniya Das 	.clk_dis_wait_val = 0xf,
1423*28bc4229STaniya Das 	.pd = {
1424*28bc4229STaniya Das 		.name = "ife_1_gdsc",
1425*28bc4229STaniya Das 	},
1426*28bc4229STaniya Das 	.pwrsts = PWRSTS_OFF_ON,
1427*28bc4229STaniya Das 	.parent = &titan_top_gdsc.pd,
1428*28bc4229STaniya Das 	.flags = POLL_CFG_GDSCR,
1429*28bc4229STaniya Das };
1430*28bc4229STaniya Das 
1431*28bc4229STaniya Das static struct gdsc ipe_0_gdsc = {
1432*28bc4229STaniya Das 	.gdscr = 0x7004,
1433*28bc4229STaniya Das 	.en_rest_wait_val = 0x2,
1434*28bc4229STaniya Das 	.en_few_wait_val = 0x2,
1435*28bc4229STaniya Das 	.clk_dis_wait_val = 0xf,
1436*28bc4229STaniya Das 	.pd = {
1437*28bc4229STaniya Das 		.name = "ipe_0_gdsc",
1438*28bc4229STaniya Das 	},
1439*28bc4229STaniya Das 	.pwrsts = PWRSTS_OFF_ON,
1440*28bc4229STaniya Das 	.parent = &titan_top_gdsc.pd,
1441*28bc4229STaniya Das 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
1442*28bc4229STaniya Das };
1443*28bc4229STaniya Das 
1444*28bc4229STaniya Das static struct clk_regmap *cam_cc_qcs615_clocks[] = {
1445*28bc4229STaniya Das 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
1446*28bc4229STaniya Das 	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
1447*28bc4229STaniya Das 	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
1448*28bc4229STaniya Das 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
1449*28bc4229STaniya Das 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
1450*28bc4229STaniya Das 	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
1451*28bc4229STaniya Das 	[CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
1452*28bc4229STaniya Das 	[CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
1453*28bc4229STaniya Das 	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
1454*28bc4229STaniya Das 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
1455*28bc4229STaniya Das 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
1456*28bc4229STaniya Das 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
1457*28bc4229STaniya Das 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
1458*28bc4229STaniya Das 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
1459*28bc4229STaniya Das 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
1460*28bc4229STaniya Das 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
1461*28bc4229STaniya Das 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
1462*28bc4229STaniya Das 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
1463*28bc4229STaniya Das 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
1464*28bc4229STaniya Das 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
1465*28bc4229STaniya Das 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
1466*28bc4229STaniya Das 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
1467*28bc4229STaniya Das 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
1468*28bc4229STaniya Das 	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
1469*28bc4229STaniya Das 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
1470*28bc4229STaniya Das 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
1471*28bc4229STaniya Das 	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
1472*28bc4229STaniya Das 	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
1473*28bc4229STaniya Das 	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
1474*28bc4229STaniya Das 	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
1475*28bc4229STaniya Das 	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
1476*28bc4229STaniya Das 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
1477*28bc4229STaniya Das 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
1478*28bc4229STaniya Das 	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
1479*28bc4229STaniya Das 	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
1480*28bc4229STaniya Das 	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
1481*28bc4229STaniya Das 	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
1482*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
1483*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
1484*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
1485*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
1486*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
1487*28bc4229STaniya Das 	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
1488*28bc4229STaniya Das 	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
1489*28bc4229STaniya Das 	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
1490*28bc4229STaniya Das 	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
1491*28bc4229STaniya Das 	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
1492*28bc4229STaniya Das 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
1493*28bc4229STaniya Das 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
1494*28bc4229STaniya Das 	[CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
1495*28bc4229STaniya Das 	[CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
1496*28bc4229STaniya Das 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
1497*28bc4229STaniya Das 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
1498*28bc4229STaniya Das 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
1499*28bc4229STaniya Das 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
1500*28bc4229STaniya Das 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
1501*28bc4229STaniya Das 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
1502*28bc4229STaniya Das 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
1503*28bc4229STaniya Das 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
1504*28bc4229STaniya Das 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
1505*28bc4229STaniya Das 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
1506*28bc4229STaniya Das 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
1507*28bc4229STaniya Das 	[CAM_CC_PLL2_OUT_AUX2] = &cam_cc_pll2_out_aux2.clkr,
1508*28bc4229STaniya Das 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
1509*28bc4229STaniya Das 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
1510*28bc4229STaniya Das 	[CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
1511*28bc4229STaniya Das 	[CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
1512*28bc4229STaniya Das };
1513*28bc4229STaniya Das 
1514*28bc4229STaniya Das static struct gdsc *cam_cc_qcs615_gdscs[] = {
1515*28bc4229STaniya Das 	[BPS_GDSC] = &bps_gdsc,
1516*28bc4229STaniya Das 	[IFE_0_GDSC] = &ife_0_gdsc,
1517*28bc4229STaniya Das 	[IFE_1_GDSC] = &ife_1_gdsc,
1518*28bc4229STaniya Das 	[IPE_0_GDSC] = &ipe_0_gdsc,
1519*28bc4229STaniya Das 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
1520*28bc4229STaniya Das };
1521*28bc4229STaniya Das 
1522*28bc4229STaniya Das static const struct qcom_reset_map cam_cc_qcs615_resets[] = {
1523*28bc4229STaniya Das 	[CAM_CC_BPS_BCR] = { 0x6000 },
1524*28bc4229STaniya Das 	[CAM_CC_CAMNOC_BCR] = { 0xb120 },
1525*28bc4229STaniya Das 	[CAM_CC_CCI_BCR] = { 0xb0d4 },
1526*28bc4229STaniya Das 	[CAM_CC_CPAS_BCR] = { 0xb118 },
1527*28bc4229STaniya Das 	[CAM_CC_CSI0PHY_BCR] = { 0x5000 },
1528*28bc4229STaniya Das 	[CAM_CC_CSI1PHY_BCR] = { 0x5024 },
1529*28bc4229STaniya Das 	[CAM_CC_CSI2PHY_BCR] = { 0x5048 },
1530*28bc4229STaniya Das 	[CAM_CC_ICP_BCR] = { 0xb074 },
1531*28bc4229STaniya Das 	[CAM_CC_IFE_0_BCR] = { 0x9000 },
1532*28bc4229STaniya Das 	[CAM_CC_IFE_1_BCR] = { 0xa000 },
1533*28bc4229STaniya Das 	[CAM_CC_IFE_LITE_BCR] = { 0xb000 },
1534*28bc4229STaniya Das 	[CAM_CC_IPE_0_BCR] = { 0x7000 },
1535*28bc4229STaniya Das 	[CAM_CC_JPEG_BCR] = { 0xb048 },
1536*28bc4229STaniya Das 	[CAM_CC_LRME_BCR] = { 0xb0f4 },
1537*28bc4229STaniya Das 	[CAM_CC_MCLK0_BCR] = { 0x4000 },
1538*28bc4229STaniya Das 	[CAM_CC_MCLK1_BCR] = { 0x4020 },
1539*28bc4229STaniya Das 	[CAM_CC_MCLK2_BCR] = { 0x4040 },
1540*28bc4229STaniya Das 	[CAM_CC_MCLK3_BCR] = { 0x4060 },
1541*28bc4229STaniya Das 	[CAM_CC_TITAN_TOP_BCR] = { 0xb130 },
1542*28bc4229STaniya Das };
1543*28bc4229STaniya Das 
1544*28bc4229STaniya Das static struct clk_alpha_pll *cam_cc_qcs615_plls[] = {
1545*28bc4229STaniya Das 	&cam_cc_pll0,
1546*28bc4229STaniya Das 	&cam_cc_pll1,
1547*28bc4229STaniya Das 	&cam_cc_pll2,
1548*28bc4229STaniya Das 	&cam_cc_pll3,
1549*28bc4229STaniya Das };
1550*28bc4229STaniya Das 
1551*28bc4229STaniya Das static const struct regmap_config cam_cc_qcs615_regmap_config = {
1552*28bc4229STaniya Das 	.reg_bits = 32,
1553*28bc4229STaniya Das 	.reg_stride = 4,
1554*28bc4229STaniya Das 	.val_bits = 32,
1555*28bc4229STaniya Das 	.max_register = 0xd004,
1556*28bc4229STaniya Das 	.fast_io = true,
1557*28bc4229STaniya Das };
1558*28bc4229STaniya Das 
1559*28bc4229STaniya Das static struct qcom_cc_driver_data cam_cc_qcs615_driver_data = {
1560*28bc4229STaniya Das 	.alpha_plls = cam_cc_qcs615_plls,
1561*28bc4229STaniya Das 	.num_alpha_plls = ARRAY_SIZE(cam_cc_qcs615_plls),
1562*28bc4229STaniya Das };
1563*28bc4229STaniya Das 
1564*28bc4229STaniya Das static const struct qcom_cc_desc cam_cc_qcs615_desc = {
1565*28bc4229STaniya Das 	.config = &cam_cc_qcs615_regmap_config,
1566*28bc4229STaniya Das 	.clks = cam_cc_qcs615_clocks,
1567*28bc4229STaniya Das 	.num_clks = ARRAY_SIZE(cam_cc_qcs615_clocks),
1568*28bc4229STaniya Das 	.resets = cam_cc_qcs615_resets,
1569*28bc4229STaniya Das 	.num_resets = ARRAY_SIZE(cam_cc_qcs615_resets),
1570*28bc4229STaniya Das 	.gdscs = cam_cc_qcs615_gdscs,
1571*28bc4229STaniya Das 	.num_gdscs = ARRAY_SIZE(cam_cc_qcs615_gdscs),
1572*28bc4229STaniya Das 	.driver_data = &cam_cc_qcs615_driver_data,
1573*28bc4229STaniya Das };
1574*28bc4229STaniya Das 
1575*28bc4229STaniya Das static const struct of_device_id cam_cc_qcs615_match_table[] = {
1576*28bc4229STaniya Das 	{ .compatible = "qcom,qcs615-camcc" },
1577*28bc4229STaniya Das 	{ }
1578*28bc4229STaniya Das };
1579*28bc4229STaniya Das MODULE_DEVICE_TABLE(of, cam_cc_qcs615_match_table);
1580*28bc4229STaniya Das 
1581*28bc4229STaniya Das static int cam_cc_qcs615_probe(struct platform_device *pdev)
1582*28bc4229STaniya Das {
1583*28bc4229STaniya Das 	return qcom_cc_probe(pdev, &cam_cc_qcs615_desc);
1584*28bc4229STaniya Das }
1585*28bc4229STaniya Das 
1586*28bc4229STaniya Das static struct platform_driver cam_cc_qcs615_driver = {
1587*28bc4229STaniya Das 	.probe = cam_cc_qcs615_probe,
1588*28bc4229STaniya Das 	.driver = {
1589*28bc4229STaniya Das 		.name = "camcc-qcs615",
1590*28bc4229STaniya Das 		.of_match_table = cam_cc_qcs615_match_table,
1591*28bc4229STaniya Das 	},
1592*28bc4229STaniya Das };
1593*28bc4229STaniya Das 
1594*28bc4229STaniya Das module_platform_driver(cam_cc_qcs615_driver);
1595*28bc4229STaniya Das 
1596*28bc4229STaniya Das MODULE_DESCRIPTION("QTI CAMCC QCS615 Driver");
1597*28bc4229STaniya Das MODULE_LICENSE("GPL");
1598