xref: /openbmc/linux/drivers/clk/qcom/mmcc-msm8974.c (revision 979ac5ef)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16 
17 #include <dt-bindings/clock/qcom,mmcc-msm8974.h>
18 #include <dt-bindings/reset/qcom,mmcc-msm8974.h>
19 
20 #include "common.h"
21 #include "clk-regmap.h"
22 #include "clk-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-branch.h"
25 #include "reset.h"
26 #include "gdsc.h"
27 
28 enum {
29 	P_XO,
30 	P_MMPLL0,
31 	P_EDPLINK,
32 	P_MMPLL1,
33 	P_HDMIPLL,
34 	P_GPLL0,
35 	P_EDPVCO,
36 	P_GPLL1,
37 	P_DSI0PLL,
38 	P_DSI0PLL_BYTE,
39 	P_MMPLL2,
40 	P_MMPLL3,
41 	P_DSI1PLL,
42 	P_DSI1PLL_BYTE,
43 };
44 
45 static struct clk_pll mmpll0 = {
46 	.l_reg = 0x0004,
47 	.m_reg = 0x0008,
48 	.n_reg = 0x000c,
49 	.config_reg = 0x0014,
50 	.mode_reg = 0x0000,
51 	.status_reg = 0x001c,
52 	.status_bit = 17,
53         .clkr.hw.init = &(struct clk_init_data){
54                 .name = "mmpll0",
55                 .parent_data = (const struct clk_parent_data[]){
56 			{ .fw_name = "xo", .name = "xo_board" },
57 		},
58                 .num_parents = 1,
59                 .ops = &clk_pll_ops,
60         },
61 };
62 
63 static struct clk_regmap mmpll0_vote = {
64 	.enable_reg = 0x0100,
65 	.enable_mask = BIT(0),
66 	.hw.init = &(struct clk_init_data){
67 		.name = "mmpll0_vote",
68 		.parent_hws = (const struct clk_hw*[]){
69 			&mmpll0.clkr.hw
70 		},
71 		.num_parents = 1,
72 		.ops = &clk_pll_vote_ops,
73 	},
74 };
75 
76 static struct clk_pll mmpll1 = {
77 	.l_reg = 0x0044,
78 	.m_reg = 0x0048,
79 	.n_reg = 0x004c,
80 	.config_reg = 0x0050,
81 	.mode_reg = 0x0040,
82 	.status_reg = 0x005c,
83 	.status_bit = 17,
84         .clkr.hw.init = &(struct clk_init_data){
85                 .name = "mmpll1",
86                 .parent_data = (const struct clk_parent_data[]){
87 			{ .fw_name = "xo", .name = "xo_board" },
88 		},
89                 .num_parents = 1,
90                 .ops = &clk_pll_ops,
91         },
92 };
93 
94 static struct clk_regmap mmpll1_vote = {
95 	.enable_reg = 0x0100,
96 	.enable_mask = BIT(1),
97 	.hw.init = &(struct clk_init_data){
98 		.name = "mmpll1_vote",
99 		.parent_hws = (const struct clk_hw*[]){
100 			&mmpll1.clkr.hw
101 		},
102 		.num_parents = 1,
103 		.ops = &clk_pll_vote_ops,
104 	},
105 };
106 
107 static struct clk_pll mmpll2 = {
108 	.l_reg = 0x4104,
109 	.m_reg = 0x4108,
110 	.n_reg = 0x410c,
111 	.config_reg = 0x4110,
112 	.mode_reg = 0x4100,
113 	.status_reg = 0x411c,
114         .clkr.hw.init = &(struct clk_init_data){
115                 .name = "mmpll2",
116                 .parent_data = (const struct clk_parent_data[]){
117 			{ .fw_name = "xo", .name = "xo_board" },
118 		},
119                 .num_parents = 1,
120                 .ops = &clk_pll_ops,
121         },
122 };
123 
124 static struct clk_pll mmpll3 = {
125 	.l_reg = 0x0084,
126 	.m_reg = 0x0088,
127 	.n_reg = 0x008c,
128 	.config_reg = 0x0090,
129 	.mode_reg = 0x0080,
130 	.status_reg = 0x009c,
131 	.status_bit = 17,
132         .clkr.hw.init = &(struct clk_init_data){
133                 .name = "mmpll3",
134                 .parent_data = (const struct clk_parent_data[]){
135 			{ .fw_name = "xo", .name = "xo_board" },
136 		},
137                 .num_parents = 1,
138                 .ops = &clk_pll_ops,
139         },
140 };
141 
142 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
143 	{ P_XO, 0 },
144 	{ P_MMPLL0, 1 },
145 	{ P_MMPLL1, 2 },
146 	{ P_GPLL0, 5 }
147 };
148 
149 static const struct clk_parent_data mmcc_xo_mmpll0_mmpll1_gpll0[] = {
150 	{ .fw_name = "xo", .name = "xo_board" },
151 	{ .hw = &mmpll0_vote.hw },
152 	{ .hw = &mmpll1_vote.hw },
153 	{ .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
154 };
155 
156 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
157 	{ P_XO, 0 },
158 	{ P_MMPLL0, 1 },
159 	{ P_HDMIPLL, 4 },
160 	{ P_GPLL0, 5 },
161 	{ P_DSI0PLL, 2 },
162 	{ P_DSI1PLL, 3 }
163 };
164 
165 static const struct clk_parent_data mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
166 	{ .fw_name = "xo", .name = "xo_board" },
167 	{ .hw = &mmpll0_vote.hw },
168 	{ .fw_name = "hdmipll", .name = "hdmipll" },
169 	{ .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
170 	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
171 	{ .fw_name = "dsi1pll", .name = "dsi1pll" },
172 };
173 
174 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
175 	{ P_XO, 0 },
176 	{ P_MMPLL0, 1 },
177 	{ P_MMPLL1, 2 },
178 	{ P_GPLL0, 5 },
179 	{ P_MMPLL3, 3 }
180 };
181 
182 static const struct clk_parent_data mmcc_xo_mmpll0_1_3_gpll0[] = {
183 	{ .fw_name = "xo", .name = "xo_board" },
184 	{ .hw = &mmpll0_vote.hw },
185 	{ .hw = &mmpll1_vote.hw },
186 	{ .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
187 	{ .hw = &mmpll3.clkr.hw },
188 };
189 
190 static const struct parent_map mmcc_xo_mmpll0_1_gpll1_0_map[] = {
191 	{ P_XO, 0 },
192 	{ P_MMPLL0, 1 },
193 	{ P_MMPLL1, 2 },
194 	{ P_GPLL0, 5 },
195 	{ P_GPLL1, 4 }
196 };
197 
198 static const struct clk_parent_data mmcc_xo_mmpll0_1_gpll1_0[] = {
199 	{ .fw_name = "xo", .name = "xo_board" },
200 	{ .hw = &mmpll0_vote.hw },
201 	{ .hw = &mmpll1_vote.hw },
202 	{ .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
203 	{ .fw_name = "gpll1_vote", .name = "gpll1_vote" },
204 };
205 
206 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
207 	{ P_XO, 0 },
208 	{ P_EDPLINK, 4 },
209 	{ P_HDMIPLL, 3 },
210 	{ P_EDPVCO, 5 },
211 	{ P_DSI0PLL, 1 },
212 	{ P_DSI1PLL, 2 }
213 };
214 
215 static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp[] = {
216 	{ .fw_name = "xo", .name = "xo_board" },
217 	{ .fw_name = "edp_link_clk", .name = "edp_link_clk" },
218 	{ .fw_name = "hdmipll", .name = "hdmipll" },
219 	{ .fw_name = "edp_vco_div", .name = "edp_vco_div" },
220 	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
221 	{ .fw_name = "dsi1pll", .name = "dsi1pll" },
222 };
223 
224 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
225 	{ P_XO, 0 },
226 	{ P_EDPLINK, 4 },
227 	{ P_HDMIPLL, 3 },
228 	{ P_GPLL0, 5 },
229 	{ P_DSI0PLL, 1 },
230 	{ P_DSI1PLL, 2 }
231 };
232 
233 static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp_gpll0[] = {
234 	{ .fw_name = "xo", .name = "xo_board" },
235 	{ .fw_name = "edp_link_clk", .name = "edp_link_clk" },
236 	{ .fw_name = "hdmipll", .name = "hdmipll" },
237 	{ .fw_name = "gpll0_vote", .name = "gpll0_vote" },
238 	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
239 	{ .fw_name = "dsi1pll", .name = "dsi1pll" },
240 };
241 
242 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
243 	{ P_XO, 0 },
244 	{ P_EDPLINK, 4 },
245 	{ P_HDMIPLL, 3 },
246 	{ P_GPLL0, 5 },
247 	{ P_DSI0PLL_BYTE, 1 },
248 	{ P_DSI1PLL_BYTE, 2 }
249 };
250 
251 static const struct clk_parent_data mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
252 	{ .fw_name = "xo", .name = "xo_board" },
253 	{ .fw_name = "edp_link_clk", .name = "edp_link_clk" },
254 	{ .fw_name = "hdmipll", .name = "hdmipll" },
255 	{ .fw_name = "gpll0_vote", .name = "gpll0_vote" },
256 	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
257 	{ .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
258 };
259 
260 static struct clk_rcg2 mmss_ahb_clk_src = {
261 	.cmd_rcgr = 0x5000,
262 	.hid_width = 5,
263 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
264 	.clkr.hw.init = &(struct clk_init_data){
265 		.name = "mmss_ahb_clk_src",
266 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
267 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
268 		.ops = &clk_rcg2_ops,
269 	},
270 };
271 
272 static struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = {
273 	F(19200000, P_XO, 1, 0, 0),
274 	F(37500000, P_GPLL0, 16, 0, 0),
275 	F(50000000, P_GPLL0, 12, 0, 0),
276 	F(75000000, P_GPLL0, 8, 0, 0),
277 	F(100000000, P_GPLL0, 6, 0, 0),
278 	F(150000000, P_GPLL0, 4, 0, 0),
279 	F(200000000, P_MMPLL0, 4, 0, 0),
280 	F(266666666, P_MMPLL0, 3, 0, 0),
281 	{ }
282 };
283 
284 static struct freq_tbl ftbl_mmss_axi_clk[] = {
285 	F( 19200000, P_XO, 1, 0, 0),
286 	F( 37500000, P_GPLL0, 16, 0, 0),
287 	F( 50000000, P_GPLL0, 12, 0, 0),
288 	F( 75000000, P_GPLL0, 8, 0, 0),
289 	F(100000000, P_GPLL0, 6, 0, 0),
290 	F(150000000, P_GPLL0, 4, 0, 0),
291 	F(291750000, P_MMPLL1, 4, 0, 0),
292 	F(400000000, P_MMPLL0, 2, 0, 0),
293 	F(466800000, P_MMPLL1, 2.5, 0, 0),
294 };
295 
296 static struct clk_rcg2 mmss_axi_clk_src = {
297 	.cmd_rcgr = 0x5040,
298 	.hid_width = 5,
299 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
300 	.freq_tbl = ftbl_mmss_axi_clk,
301 	.clkr.hw.init = &(struct clk_init_data){
302 		.name = "mmss_axi_clk_src",
303 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
304 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
305 		.ops = &clk_rcg2_ops,
306 	},
307 };
308 
309 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
310 	F( 19200000, P_XO, 1, 0, 0),
311 	F( 37500000, P_GPLL0, 16, 0, 0),
312 	F( 50000000, P_GPLL0, 12, 0, 0),
313 	F( 75000000, P_GPLL0, 8, 0, 0),
314 	F(100000000, P_GPLL0, 6, 0, 0),
315 	F(150000000, P_GPLL0, 4, 0, 0),
316 	F(291750000, P_MMPLL1, 4, 0, 0),
317 	F(400000000, P_MMPLL0, 2, 0, 0),
318 };
319 
320 static struct clk_rcg2 ocmemnoc_clk_src = {
321 	.cmd_rcgr = 0x5090,
322 	.hid_width = 5,
323 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
324 	.freq_tbl = ftbl_ocmemnoc_clk,
325 	.clkr.hw.init = &(struct clk_init_data){
326 		.name = "ocmemnoc_clk_src",
327 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
328 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
329 		.ops = &clk_rcg2_ops,
330 	},
331 };
332 
333 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
334 	F(100000000, P_GPLL0, 6, 0, 0),
335 	F(200000000, P_MMPLL0, 4, 0, 0),
336 	{ }
337 };
338 
339 static struct clk_rcg2 csi0_clk_src = {
340 	.cmd_rcgr = 0x3090,
341 	.hid_width = 5,
342 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
343 	.freq_tbl = ftbl_camss_csi0_3_clk,
344 	.clkr.hw.init = &(struct clk_init_data){
345 		.name = "csi0_clk_src",
346 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
347 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
348 		.ops = &clk_rcg2_ops,
349 	},
350 };
351 
352 static struct clk_rcg2 csi1_clk_src = {
353 	.cmd_rcgr = 0x3100,
354 	.hid_width = 5,
355 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
356 	.freq_tbl = ftbl_camss_csi0_3_clk,
357 	.clkr.hw.init = &(struct clk_init_data){
358 		.name = "csi1_clk_src",
359 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
360 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
361 		.ops = &clk_rcg2_ops,
362 	},
363 };
364 
365 static struct clk_rcg2 csi2_clk_src = {
366 	.cmd_rcgr = 0x3160,
367 	.hid_width = 5,
368 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
369 	.freq_tbl = ftbl_camss_csi0_3_clk,
370 	.clkr.hw.init = &(struct clk_init_data){
371 		.name = "csi2_clk_src",
372 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
373 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
374 		.ops = &clk_rcg2_ops,
375 	},
376 };
377 
378 static struct clk_rcg2 csi3_clk_src = {
379 	.cmd_rcgr = 0x31c0,
380 	.hid_width = 5,
381 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
382 	.freq_tbl = ftbl_camss_csi0_3_clk,
383 	.clkr.hw.init = &(struct clk_init_data){
384 		.name = "csi3_clk_src",
385 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
386 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
387 		.ops = &clk_rcg2_ops,
388 	},
389 };
390 
391 static struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = {
392 	F(37500000, P_GPLL0, 16, 0, 0),
393 	F(50000000, P_GPLL0, 12, 0, 0),
394 	F(60000000, P_GPLL0, 10, 0, 0),
395 	F(80000000, P_GPLL0, 7.5, 0, 0),
396 	F(100000000, P_GPLL0, 6, 0, 0),
397 	F(109090000, P_GPLL0, 5.5, 0, 0),
398 	F(133330000, P_GPLL0, 4.5, 0, 0),
399 	F(150000000, P_GPLL0, 4, 0, 0),
400 	F(200000000, P_GPLL0, 3, 0, 0),
401 	F(228570000, P_MMPLL0, 3.5, 0, 0),
402 	F(266670000, P_MMPLL0, 3, 0, 0),
403 	F(320000000, P_MMPLL0, 2.5, 0, 0),
404 	F(400000000, P_MMPLL0, 2, 0, 0),
405 	{ }
406 };
407 
408 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
409 	F(37500000, P_GPLL0, 16, 0, 0),
410 	F(50000000, P_GPLL0, 12, 0, 0),
411 	F(60000000, P_GPLL0, 10, 0, 0),
412 	F(80000000, P_GPLL0, 7.5, 0, 0),
413 	F(100000000, P_GPLL0, 6, 0, 0),
414 	F(109090000, P_GPLL0, 5.5, 0, 0),
415 	F(133330000, P_GPLL0, 4.5, 0, 0),
416 	F(200000000, P_GPLL0, 3, 0, 0),
417 	F(228570000, P_MMPLL0, 3.5, 0, 0),
418 	F(266670000, P_MMPLL0, 3, 0, 0),
419 	F(320000000, P_MMPLL0, 2.5, 0, 0),
420 	F(400000000, P_MMPLL0, 2, 0, 0),
421 	F(465000000, P_MMPLL3, 2, 0, 0),
422 	{ }
423 };
424 
425 static struct clk_rcg2 vfe0_clk_src = {
426 	.cmd_rcgr = 0x3600,
427 	.hid_width = 5,
428 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
429 	.freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
430 	.clkr.hw.init = &(struct clk_init_data){
431 		.name = "vfe0_clk_src",
432 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
433 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
434 		.ops = &clk_rcg2_ops,
435 	},
436 };
437 
438 static struct clk_rcg2 vfe1_clk_src = {
439 	.cmd_rcgr = 0x3620,
440 	.hid_width = 5,
441 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
442 	.freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
443 	.clkr.hw.init = &(struct clk_init_data){
444 		.name = "vfe1_clk_src",
445 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
446 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
447 		.ops = &clk_rcg2_ops,
448 	},
449 };
450 
451 static struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = {
452 	F(37500000, P_GPLL0, 16, 0, 0),
453 	F(60000000, P_GPLL0, 10, 0, 0),
454 	F(75000000, P_GPLL0, 8, 0, 0),
455 	F(92310000, P_GPLL0, 6.5, 0, 0),
456 	F(100000000, P_GPLL0, 6, 0, 0),
457 	F(133330000, P_MMPLL0, 6, 0, 0),
458 	F(177780000, P_MMPLL0, 4.5, 0, 0),
459 	F(200000000, P_MMPLL0, 4, 0, 0),
460 	{ }
461 };
462 
463 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
464 	F(37500000, P_GPLL0, 16, 0, 0),
465 	F(60000000, P_GPLL0, 10, 0, 0),
466 	F(75000000, P_GPLL0, 8, 0, 0),
467 	F(85710000, P_GPLL0, 7, 0, 0),
468 	F(100000000, P_GPLL0, 6, 0, 0),
469 	F(133330000, P_MMPLL0, 6, 0, 0),
470 	F(160000000, P_MMPLL0, 5, 0, 0),
471 	F(200000000, P_MMPLL0, 4, 0, 0),
472 	F(228570000, P_MMPLL0, 3.5, 0, 0),
473 	F(240000000, P_GPLL0, 2.5, 0, 0),
474 	F(266670000, P_MMPLL0, 3, 0, 0),
475 	F(320000000, P_MMPLL0, 2.5, 0, 0),
476 	{ }
477 };
478 
479 static struct clk_rcg2 mdp_clk_src = {
480 	.cmd_rcgr = 0x2040,
481 	.hid_width = 5,
482 	.parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
483 	.freq_tbl = ftbl_mdss_mdp_clk,
484 	.clkr.hw.init = &(struct clk_init_data){
485 		.name = "mdp_clk_src",
486 		.parent_data = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
487 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_dsi_hdmi_gpll0),
488 		.ops = &clk_rcg2_ops,
489 	},
490 };
491 
492 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
493 	F(75000000, P_GPLL0, 8, 0, 0),
494 	F(133330000, P_GPLL0, 4.5, 0, 0),
495 	F(200000000, P_GPLL0, 3, 0, 0),
496 	F(228570000, P_MMPLL0, 3.5, 0, 0),
497 	F(266670000, P_MMPLL0, 3, 0, 0),
498 	F(320000000, P_MMPLL0, 2.5, 0, 0),
499 	{ }
500 };
501 
502 static struct clk_rcg2 jpeg0_clk_src = {
503 	.cmd_rcgr = 0x3500,
504 	.hid_width = 5,
505 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
506 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
507 	.clkr.hw.init = &(struct clk_init_data){
508 		.name = "jpeg0_clk_src",
509 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
510 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
511 		.ops = &clk_rcg2_ops,
512 	},
513 };
514 
515 static struct clk_rcg2 jpeg1_clk_src = {
516 	.cmd_rcgr = 0x3520,
517 	.hid_width = 5,
518 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
519 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
520 	.clkr.hw.init = &(struct clk_init_data){
521 		.name = "jpeg1_clk_src",
522 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
523 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
524 		.ops = &clk_rcg2_ops,
525 	},
526 };
527 
528 static struct clk_rcg2 jpeg2_clk_src = {
529 	.cmd_rcgr = 0x3540,
530 	.hid_width = 5,
531 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
532 	.freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
533 	.clkr.hw.init = &(struct clk_init_data){
534 		.name = "jpeg2_clk_src",
535 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
536 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
537 		.ops = &clk_rcg2_ops,
538 	},
539 };
540 
541 static struct clk_rcg2 pclk0_clk_src = {
542 	.cmd_rcgr = 0x2000,
543 	.mnd_width = 8,
544 	.hid_width = 5,
545 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
546 	.clkr.hw.init = &(struct clk_init_data){
547 		.name = "pclk0_clk_src",
548 		.parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
549 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
550 		.ops = &clk_pixel_ops,
551 		.flags = CLK_SET_RATE_PARENT,
552 	},
553 };
554 
555 static struct clk_rcg2 pclk1_clk_src = {
556 	.cmd_rcgr = 0x2020,
557 	.mnd_width = 8,
558 	.hid_width = 5,
559 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
560 	.clkr.hw.init = &(struct clk_init_data){
561 		.name = "pclk1_clk_src",
562 		.parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
563 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
564 		.ops = &clk_pixel_ops,
565 		.flags = CLK_SET_RATE_PARENT,
566 	},
567 };
568 
569 static struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = {
570 	F(66700000, P_GPLL0, 9, 0, 0),
571 	F(100000000, P_GPLL0, 6, 0, 0),
572 	F(133330000, P_MMPLL0, 6, 0, 0),
573 	F(160000000, P_MMPLL0, 5, 0, 0),
574 	{ }
575 };
576 
577 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
578 	F(50000000, P_GPLL0, 12, 0, 0),
579 	F(100000000, P_GPLL0, 6, 0, 0),
580 	F(133330000, P_MMPLL0, 6, 0, 0),
581 	F(200000000, P_MMPLL0, 4, 0, 0),
582 	F(266670000, P_MMPLL0, 3, 0, 0),
583 	F(465000000, P_MMPLL3, 2, 0, 0),
584 	{ }
585 };
586 
587 static struct clk_rcg2 vcodec0_clk_src = {
588 	.cmd_rcgr = 0x1000,
589 	.mnd_width = 8,
590 	.hid_width = 5,
591 	.parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
592 	.freq_tbl = ftbl_venus0_vcodec0_clk,
593 	.clkr.hw.init = &(struct clk_init_data){
594 		.name = "vcodec0_clk_src",
595 		.parent_data = mmcc_xo_mmpll0_1_3_gpll0,
596 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_3_gpll0),
597 		.ops = &clk_rcg2_ops,
598 	},
599 };
600 
601 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
602 	F(19200000, P_XO, 1, 0, 0),
603 	{ }
604 };
605 
606 static struct clk_rcg2 cci_clk_src = {
607 	.cmd_rcgr = 0x3300,
608 	.hid_width = 5,
609 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
610 	.freq_tbl = ftbl_camss_cci_cci_clk,
611 	.clkr.hw.init = &(struct clk_init_data){
612 		.name = "cci_clk_src",
613 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
614 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
615 		.ops = &clk_rcg2_ops,
616 	},
617 };
618 
619 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
620 	F(10000, P_XO, 16, 1, 120),
621 	F(24000, P_XO, 16, 1, 50),
622 	F(6000000, P_GPLL0, 10, 1, 10),
623 	F(12000000, P_GPLL0, 10, 1, 5),
624 	F(13000000, P_GPLL0, 4, 13, 150),
625 	F(24000000, P_GPLL0, 5, 1, 5),
626 	{ }
627 };
628 
629 static struct clk_rcg2 camss_gp0_clk_src = {
630 	.cmd_rcgr = 0x3420,
631 	.mnd_width = 8,
632 	.hid_width = 5,
633 	.parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
634 	.freq_tbl = ftbl_camss_gp0_1_clk,
635 	.clkr.hw.init = &(struct clk_init_data){
636 		.name = "camss_gp0_clk_src",
637 		.parent_data = mmcc_xo_mmpll0_1_gpll1_0,
638 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_gpll1_0),
639 		.ops = &clk_rcg2_ops,
640 	},
641 };
642 
643 static struct clk_rcg2 camss_gp1_clk_src = {
644 	.cmd_rcgr = 0x3450,
645 	.mnd_width = 8,
646 	.hid_width = 5,
647 	.parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
648 	.freq_tbl = ftbl_camss_gp0_1_clk,
649 	.clkr.hw.init = &(struct clk_init_data){
650 		.name = "camss_gp1_clk_src",
651 		.parent_data = mmcc_xo_mmpll0_1_gpll1_0,
652 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_gpll1_0),
653 		.ops = &clk_rcg2_ops,
654 	},
655 };
656 
657 static struct freq_tbl ftbl_camss_mclk0_3_clk_msm8226[] = {
658 	F(19200000, P_XO, 1, 0, 0),
659 	F(24000000, P_GPLL0, 5, 1, 5),
660 	F(66670000, P_GPLL0, 9, 0, 0),
661 	{ }
662 };
663 
664 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
665 	F(4800000, P_XO, 4, 0, 0),
666 	F(6000000, P_GPLL0, 10, 1, 10),
667 	F(8000000, P_GPLL0, 15, 1, 5),
668 	F(9600000, P_XO, 2, 0, 0),
669 	F(16000000, P_GPLL0, 12.5, 1, 3),
670 	F(19200000, P_XO, 1, 0, 0),
671 	F(24000000, P_GPLL0, 5, 1, 5),
672 	F(32000000, P_MMPLL0, 5, 1, 5),
673 	F(48000000, P_GPLL0, 12.5, 0, 0),
674 	F(64000000, P_MMPLL0, 12.5, 0, 0),
675 	F(66670000, P_GPLL0, 9, 0, 0),
676 	{ }
677 };
678 
679 static struct clk_rcg2 mclk0_clk_src = {
680 	.cmd_rcgr = 0x3360,
681 	.hid_width = 5,
682 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
683 	.freq_tbl = ftbl_camss_mclk0_3_clk,
684 	.clkr.hw.init = &(struct clk_init_data){
685 		.name = "mclk0_clk_src",
686 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
687 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
688 		.ops = &clk_rcg2_ops,
689 	},
690 };
691 
692 static struct clk_rcg2 mclk1_clk_src = {
693 	.cmd_rcgr = 0x3390,
694 	.hid_width = 5,
695 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
696 	.freq_tbl = ftbl_camss_mclk0_3_clk,
697 	.clkr.hw.init = &(struct clk_init_data){
698 		.name = "mclk1_clk_src",
699 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
700 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
701 		.ops = &clk_rcg2_ops,
702 	},
703 };
704 
705 static struct clk_rcg2 mclk2_clk_src = {
706 	.cmd_rcgr = 0x33c0,
707 	.hid_width = 5,
708 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
709 	.freq_tbl = ftbl_camss_mclk0_3_clk,
710 	.clkr.hw.init = &(struct clk_init_data){
711 		.name = "mclk2_clk_src",
712 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
713 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
714 		.ops = &clk_rcg2_ops,
715 	},
716 };
717 
718 static struct clk_rcg2 mclk3_clk_src = {
719 	.cmd_rcgr = 0x33f0,
720 	.hid_width = 5,
721 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
722 	.freq_tbl = ftbl_camss_mclk0_3_clk,
723 	.clkr.hw.init = &(struct clk_init_data){
724 		.name = "mclk3_clk_src",
725 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
726 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
727 		.ops = &clk_rcg2_ops,
728 	},
729 };
730 
731 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
732 	F(100000000, P_GPLL0, 6, 0, 0),
733 	F(200000000, P_MMPLL0, 4, 0, 0),
734 	{ }
735 };
736 
737 static struct clk_rcg2 csi0phytimer_clk_src = {
738 	.cmd_rcgr = 0x3000,
739 	.hid_width = 5,
740 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
741 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
742 	.clkr.hw.init = &(struct clk_init_data){
743 		.name = "csi0phytimer_clk_src",
744 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
745 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
746 		.ops = &clk_rcg2_ops,
747 	},
748 };
749 
750 static struct clk_rcg2 csi1phytimer_clk_src = {
751 	.cmd_rcgr = 0x3030,
752 	.hid_width = 5,
753 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
754 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
755 	.clkr.hw.init = &(struct clk_init_data){
756 		.name = "csi1phytimer_clk_src",
757 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
758 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
759 		.ops = &clk_rcg2_ops,
760 	},
761 };
762 
763 static struct clk_rcg2 csi2phytimer_clk_src = {
764 	.cmd_rcgr = 0x3060,
765 	.hid_width = 5,
766 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
767 	.freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
768 	.clkr.hw.init = &(struct clk_init_data){
769 		.name = "csi2phytimer_clk_src",
770 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
771 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
772 		.ops = &clk_rcg2_ops,
773 	},
774 };
775 
776 static struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = {
777 	F(133330000, P_GPLL0, 4.5, 0, 0),
778 	F(150000000, P_GPLL0, 4, 0, 0),
779 	F(266670000, P_MMPLL0, 3, 0, 0),
780 	F(320000000, P_MMPLL0, 2.5, 0, 0),
781 	F(400000000, P_MMPLL0, 2, 0, 0),
782 	{ }
783 };
784 
785 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
786 	F(133330000, P_GPLL0, 4.5, 0, 0),
787 	F(266670000, P_MMPLL0, 3, 0, 0),
788 	F(320000000, P_MMPLL0, 2.5, 0, 0),
789 	F(400000000, P_MMPLL0, 2, 0, 0),
790 	F(465000000, P_MMPLL3, 2, 0, 0),
791 	{ }
792 };
793 
794 static struct clk_rcg2 cpp_clk_src = {
795 	.cmd_rcgr = 0x3640,
796 	.hid_width = 5,
797 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
798 	.freq_tbl = ftbl_camss_vfe_cpp_clk,
799 	.clkr.hw.init = &(struct clk_init_data){
800 		.name = "cpp_clk_src",
801 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
802 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
803 		.ops = &clk_rcg2_ops,
804 	},
805 };
806 
807 static struct freq_tbl byte_freq_tbl[] = {
808 	{ .src = P_DSI0PLL_BYTE },
809 	{ }
810 };
811 
812 static struct clk_rcg2 byte0_clk_src = {
813 	.cmd_rcgr = 0x2120,
814 	.hid_width = 5,
815 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
816 	.freq_tbl = byte_freq_tbl,
817 	.clkr.hw.init = &(struct clk_init_data){
818 		.name = "byte0_clk_src",
819 		.parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
820 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
821 		.ops = &clk_byte2_ops,
822 		.flags = CLK_SET_RATE_PARENT,
823 	},
824 };
825 
826 static struct clk_rcg2 byte1_clk_src = {
827 	.cmd_rcgr = 0x2140,
828 	.hid_width = 5,
829 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
830 	.freq_tbl = byte_freq_tbl,
831 	.clkr.hw.init = &(struct clk_init_data){
832 		.name = "byte1_clk_src",
833 		.parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
834 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
835 		.ops = &clk_byte2_ops,
836 		.flags = CLK_SET_RATE_PARENT,
837 	},
838 };
839 
840 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
841 	F(19200000, P_XO, 1, 0, 0),
842 	{ }
843 };
844 
845 static struct clk_rcg2 edpaux_clk_src = {
846 	.cmd_rcgr = 0x20e0,
847 	.hid_width = 5,
848 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
849 	.freq_tbl = ftbl_mdss_edpaux_clk,
850 	.clkr.hw.init = &(struct clk_init_data){
851 		.name = "edpaux_clk_src",
852 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
853 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
854 		.ops = &clk_rcg2_ops,
855 	},
856 };
857 
858 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
859 	F(135000000, P_EDPLINK, 2, 0, 0),
860 	F(270000000, P_EDPLINK, 11, 0, 0),
861 	{ }
862 };
863 
864 static struct clk_rcg2 edplink_clk_src = {
865 	.cmd_rcgr = 0x20c0,
866 	.hid_width = 5,
867 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
868 	.freq_tbl = ftbl_mdss_edplink_clk,
869 	.clkr.hw.init = &(struct clk_init_data){
870 		.name = "edplink_clk_src",
871 		.parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
872 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
873 		.ops = &clk_rcg2_ops,
874 		.flags = CLK_SET_RATE_PARENT,
875 	},
876 };
877 
878 static struct freq_tbl edp_pixel_freq_tbl[] = {
879 	{ .src = P_EDPVCO },
880 	{ }
881 };
882 
883 static struct clk_rcg2 edppixel_clk_src = {
884 	.cmd_rcgr = 0x20a0,
885 	.mnd_width = 8,
886 	.hid_width = 5,
887 	.parent_map = mmcc_xo_dsi_hdmi_edp_map,
888 	.freq_tbl = edp_pixel_freq_tbl,
889 	.clkr.hw.init = &(struct clk_init_data){
890 		.name = "edppixel_clk_src",
891 		.parent_data = mmcc_xo_dsi_hdmi_edp,
892 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp),
893 		.ops = &clk_edp_pixel_ops,
894 	},
895 };
896 
897 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
898 	F(19200000, P_XO, 1, 0, 0),
899 	{ }
900 };
901 
902 static struct clk_rcg2 esc0_clk_src = {
903 	.cmd_rcgr = 0x2160,
904 	.hid_width = 5,
905 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
906 	.freq_tbl = ftbl_mdss_esc0_1_clk,
907 	.clkr.hw.init = &(struct clk_init_data){
908 		.name = "esc0_clk_src",
909 		.parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
910 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
911 		.ops = &clk_rcg2_ops,
912 	},
913 };
914 
915 static struct clk_rcg2 esc1_clk_src = {
916 	.cmd_rcgr = 0x2180,
917 	.hid_width = 5,
918 	.parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
919 	.freq_tbl = ftbl_mdss_esc0_1_clk,
920 	.clkr.hw.init = &(struct clk_init_data){
921 		.name = "esc1_clk_src",
922 		.parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
923 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
924 		.ops = &clk_rcg2_ops,
925 	},
926 };
927 
928 static struct freq_tbl extpclk_freq_tbl[] = {
929 	{ .src = P_HDMIPLL },
930 	{ }
931 };
932 
933 static struct clk_rcg2 extpclk_clk_src = {
934 	.cmd_rcgr = 0x2060,
935 	.hid_width = 5,
936 	.parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
937 	.freq_tbl = extpclk_freq_tbl,
938 	.clkr.hw.init = &(struct clk_init_data){
939 		.name = "extpclk_clk_src",
940 		.parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
941 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
942 		.ops = &clk_byte_ops,
943 		.flags = CLK_SET_RATE_PARENT,
944 	},
945 };
946 
947 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
948 	F(19200000, P_XO, 1, 0, 0),
949 	{ }
950 };
951 
952 static struct clk_rcg2 hdmi_clk_src = {
953 	.cmd_rcgr = 0x2100,
954 	.hid_width = 5,
955 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
956 	.freq_tbl = ftbl_mdss_hdmi_clk,
957 	.clkr.hw.init = &(struct clk_init_data){
958 		.name = "hdmi_clk_src",
959 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
960 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
961 		.ops = &clk_rcg2_ops,
962 	},
963 };
964 
965 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
966 	F(19200000, P_XO, 1, 0, 0),
967 	{ }
968 };
969 
970 static struct clk_rcg2 vsync_clk_src = {
971 	.cmd_rcgr = 0x2080,
972 	.hid_width = 5,
973 	.parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
974 	.freq_tbl = ftbl_mdss_vsync_clk,
975 	.clkr.hw.init = &(struct clk_init_data){
976 		.name = "vsync_clk_src",
977 		.parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
978 		.num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
979 		.ops = &clk_rcg2_ops,
980 	},
981 };
982 
983 static struct clk_branch camss_cci_cci_ahb_clk = {
984 	.halt_reg = 0x3348,
985 	.clkr = {
986 		.enable_reg = 0x3348,
987 		.enable_mask = BIT(0),
988 		.hw.init = &(struct clk_init_data){
989 			.name = "camss_cci_cci_ahb_clk",
990 			.parent_hws = (const struct clk_hw*[]){
991 				&mmss_ahb_clk_src.clkr.hw
992 			},
993 			.num_parents = 1,
994 			.ops = &clk_branch2_ops,
995 		},
996 	},
997 };
998 
999 static struct clk_branch camss_cci_cci_clk = {
1000 	.halt_reg = 0x3344,
1001 	.clkr = {
1002 		.enable_reg = 0x3344,
1003 		.enable_mask = BIT(0),
1004 		.hw.init = &(struct clk_init_data){
1005 			.name = "camss_cci_cci_clk",
1006 			.parent_hws = (const struct clk_hw*[]){
1007 				&cci_clk_src.clkr.hw
1008 			},
1009 			.num_parents = 1,
1010 			.flags = CLK_SET_RATE_PARENT,
1011 			.ops = &clk_branch2_ops,
1012 		},
1013 	},
1014 };
1015 
1016 static struct clk_branch camss_csi0_ahb_clk = {
1017 	.halt_reg = 0x30bc,
1018 	.clkr = {
1019 		.enable_reg = 0x30bc,
1020 		.enable_mask = BIT(0),
1021 		.hw.init = &(struct clk_init_data){
1022 			.name = "camss_csi0_ahb_clk",
1023 			.parent_hws = (const struct clk_hw*[]){
1024 				&mmss_ahb_clk_src.clkr.hw
1025 			},
1026 			.num_parents = 1,
1027 			.ops = &clk_branch2_ops,
1028 		},
1029 	},
1030 };
1031 
1032 static struct clk_branch camss_csi0_clk = {
1033 	.halt_reg = 0x30b4,
1034 	.clkr = {
1035 		.enable_reg = 0x30b4,
1036 		.enable_mask = BIT(0),
1037 		.hw.init = &(struct clk_init_data){
1038 			.name = "camss_csi0_clk",
1039 			.parent_hws = (const struct clk_hw*[]){
1040 				&csi0_clk_src.clkr.hw
1041 			},
1042 			.num_parents = 1,
1043 			.flags = CLK_SET_RATE_PARENT,
1044 			.ops = &clk_branch2_ops,
1045 		},
1046 	},
1047 };
1048 
1049 static struct clk_branch camss_csi0phy_clk = {
1050 	.halt_reg = 0x30c4,
1051 	.clkr = {
1052 		.enable_reg = 0x30c4,
1053 		.enable_mask = BIT(0),
1054 		.hw.init = &(struct clk_init_data){
1055 			.name = "camss_csi0phy_clk",
1056 			.parent_hws = (const struct clk_hw*[]){
1057 				&csi0_clk_src.clkr.hw
1058 			},
1059 			.num_parents = 1,
1060 			.flags = CLK_SET_RATE_PARENT,
1061 			.ops = &clk_branch2_ops,
1062 		},
1063 	},
1064 };
1065 
1066 static struct clk_branch camss_csi0pix_clk = {
1067 	.halt_reg = 0x30e4,
1068 	.clkr = {
1069 		.enable_reg = 0x30e4,
1070 		.enable_mask = BIT(0),
1071 		.hw.init = &(struct clk_init_data){
1072 			.name = "camss_csi0pix_clk",
1073 			.parent_hws = (const struct clk_hw*[]){
1074 				&csi0_clk_src.clkr.hw
1075 			},
1076 			.num_parents = 1,
1077 			.flags = CLK_SET_RATE_PARENT,
1078 			.ops = &clk_branch2_ops,
1079 		},
1080 	},
1081 };
1082 
1083 static struct clk_branch camss_csi0rdi_clk = {
1084 	.halt_reg = 0x30d4,
1085 	.clkr = {
1086 		.enable_reg = 0x30d4,
1087 		.enable_mask = BIT(0),
1088 		.hw.init = &(struct clk_init_data){
1089 			.name = "camss_csi0rdi_clk",
1090 			.parent_hws = (const struct clk_hw*[]){
1091 				&csi0_clk_src.clkr.hw
1092 			},
1093 			.num_parents = 1,
1094 			.flags = CLK_SET_RATE_PARENT,
1095 			.ops = &clk_branch2_ops,
1096 		},
1097 	},
1098 };
1099 
1100 static struct clk_branch camss_csi1_ahb_clk = {
1101 	.halt_reg = 0x3128,
1102 	.clkr = {
1103 		.enable_reg = 0x3128,
1104 		.enable_mask = BIT(0),
1105 		.hw.init = &(struct clk_init_data){
1106 			.name = "camss_csi1_ahb_clk",
1107 			.parent_hws = (const struct clk_hw*[]){
1108 				&mmss_ahb_clk_src.clkr.hw
1109 			},
1110 			.num_parents = 1,
1111 			.ops = &clk_branch2_ops,
1112 		},
1113 	},
1114 };
1115 
1116 static struct clk_branch camss_csi1_clk = {
1117 	.halt_reg = 0x3124,
1118 	.clkr = {
1119 		.enable_reg = 0x3124,
1120 		.enable_mask = BIT(0),
1121 		.hw.init = &(struct clk_init_data){
1122 			.name = "camss_csi1_clk",
1123 			.parent_hws = (const struct clk_hw*[]){
1124 				&csi1_clk_src.clkr.hw
1125 			},
1126 			.num_parents = 1,
1127 			.flags = CLK_SET_RATE_PARENT,
1128 			.ops = &clk_branch2_ops,
1129 		},
1130 	},
1131 };
1132 
1133 static struct clk_branch camss_csi1phy_clk = {
1134 	.halt_reg = 0x3134,
1135 	.clkr = {
1136 		.enable_reg = 0x3134,
1137 		.enable_mask = BIT(0),
1138 		.hw.init = &(struct clk_init_data){
1139 			.name = "camss_csi1phy_clk",
1140 			.parent_hws = (const struct clk_hw*[]){
1141 				&csi1_clk_src.clkr.hw
1142 			},
1143 			.num_parents = 1,
1144 			.flags = CLK_SET_RATE_PARENT,
1145 			.ops = &clk_branch2_ops,
1146 		},
1147 	},
1148 };
1149 
1150 static struct clk_branch camss_csi1pix_clk = {
1151 	.halt_reg = 0x3154,
1152 	.clkr = {
1153 		.enable_reg = 0x3154,
1154 		.enable_mask = BIT(0),
1155 		.hw.init = &(struct clk_init_data){
1156 			.name = "camss_csi1pix_clk",
1157 			.parent_hws = (const struct clk_hw*[]){
1158 				&csi1_clk_src.clkr.hw
1159 			},
1160 			.num_parents = 1,
1161 			.flags = CLK_SET_RATE_PARENT,
1162 			.ops = &clk_branch2_ops,
1163 		},
1164 	},
1165 };
1166 
1167 static struct clk_branch camss_csi1rdi_clk = {
1168 	.halt_reg = 0x3144,
1169 	.clkr = {
1170 		.enable_reg = 0x3144,
1171 		.enable_mask = BIT(0),
1172 		.hw.init = &(struct clk_init_data){
1173 			.name = "camss_csi1rdi_clk",
1174 			.parent_hws = (const struct clk_hw*[]){
1175 				&csi1_clk_src.clkr.hw
1176 			},
1177 			.num_parents = 1,
1178 			.flags = CLK_SET_RATE_PARENT,
1179 			.ops = &clk_branch2_ops,
1180 		},
1181 	},
1182 };
1183 
1184 static struct clk_branch camss_csi2_ahb_clk = {
1185 	.halt_reg = 0x3188,
1186 	.clkr = {
1187 		.enable_reg = 0x3188,
1188 		.enable_mask = BIT(0),
1189 		.hw.init = &(struct clk_init_data){
1190 			.name = "camss_csi2_ahb_clk",
1191 			.parent_hws = (const struct clk_hw*[]){
1192 				&mmss_ahb_clk_src.clkr.hw
1193 			},
1194 			.num_parents = 1,
1195 			.ops = &clk_branch2_ops,
1196 		},
1197 	},
1198 };
1199 
1200 static struct clk_branch camss_csi2_clk = {
1201 	.halt_reg = 0x3184,
1202 	.clkr = {
1203 		.enable_reg = 0x3184,
1204 		.enable_mask = BIT(0),
1205 		.hw.init = &(struct clk_init_data){
1206 			.name = "camss_csi2_clk",
1207 			.parent_hws = (const struct clk_hw*[]){
1208 				&csi2_clk_src.clkr.hw
1209 			},
1210 			.num_parents = 1,
1211 			.flags = CLK_SET_RATE_PARENT,
1212 			.ops = &clk_branch2_ops,
1213 		},
1214 	},
1215 };
1216 
1217 static struct clk_branch camss_csi2phy_clk = {
1218 	.halt_reg = 0x3194,
1219 	.clkr = {
1220 		.enable_reg = 0x3194,
1221 		.enable_mask = BIT(0),
1222 		.hw.init = &(struct clk_init_data){
1223 			.name = "camss_csi2phy_clk",
1224 			.parent_hws = (const struct clk_hw*[]){
1225 				&csi2_clk_src.clkr.hw
1226 			},
1227 			.num_parents = 1,
1228 			.flags = CLK_SET_RATE_PARENT,
1229 			.ops = &clk_branch2_ops,
1230 		},
1231 	},
1232 };
1233 
1234 static struct clk_branch camss_csi2pix_clk = {
1235 	.halt_reg = 0x31b4,
1236 	.clkr = {
1237 		.enable_reg = 0x31b4,
1238 		.enable_mask = BIT(0),
1239 		.hw.init = &(struct clk_init_data){
1240 			.name = "camss_csi2pix_clk",
1241 			.parent_hws = (const struct clk_hw*[]){
1242 				&csi2_clk_src.clkr.hw
1243 			},
1244 			.num_parents = 1,
1245 			.flags = CLK_SET_RATE_PARENT,
1246 			.ops = &clk_branch2_ops,
1247 		},
1248 	},
1249 };
1250 
1251 static struct clk_branch camss_csi2rdi_clk = {
1252 	.halt_reg = 0x31a4,
1253 	.clkr = {
1254 		.enable_reg = 0x31a4,
1255 		.enable_mask = BIT(0),
1256 		.hw.init = &(struct clk_init_data){
1257 			.name = "camss_csi2rdi_clk",
1258 			.parent_hws = (const struct clk_hw*[]){
1259 				&csi2_clk_src.clkr.hw
1260 			},
1261 			.num_parents = 1,
1262 			.flags = CLK_SET_RATE_PARENT,
1263 			.ops = &clk_branch2_ops,
1264 		},
1265 	},
1266 };
1267 
1268 static struct clk_branch camss_csi3_ahb_clk = {
1269 	.halt_reg = 0x31e8,
1270 	.clkr = {
1271 		.enable_reg = 0x31e8,
1272 		.enable_mask = BIT(0),
1273 		.hw.init = &(struct clk_init_data){
1274 			.name = "camss_csi3_ahb_clk",
1275 			.parent_hws = (const struct clk_hw*[]){
1276 				&mmss_ahb_clk_src.clkr.hw
1277 			},
1278 			.num_parents = 1,
1279 			.ops = &clk_branch2_ops,
1280 		},
1281 	},
1282 };
1283 
1284 static struct clk_branch camss_csi3_clk = {
1285 	.halt_reg = 0x31e4,
1286 	.clkr = {
1287 		.enable_reg = 0x31e4,
1288 		.enable_mask = BIT(0),
1289 		.hw.init = &(struct clk_init_data){
1290 			.name = "camss_csi3_clk",
1291 			.parent_hws = (const struct clk_hw*[]){
1292 				&csi3_clk_src.clkr.hw
1293 			},
1294 			.num_parents = 1,
1295 			.flags = CLK_SET_RATE_PARENT,
1296 			.ops = &clk_branch2_ops,
1297 		},
1298 	},
1299 };
1300 
1301 static struct clk_branch camss_csi3phy_clk = {
1302 	.halt_reg = 0x31f4,
1303 	.clkr = {
1304 		.enable_reg = 0x31f4,
1305 		.enable_mask = BIT(0),
1306 		.hw.init = &(struct clk_init_data){
1307 			.name = "camss_csi3phy_clk",
1308 			.parent_hws = (const struct clk_hw*[]){
1309 				&csi3_clk_src.clkr.hw
1310 			},
1311 			.num_parents = 1,
1312 			.flags = CLK_SET_RATE_PARENT,
1313 			.ops = &clk_branch2_ops,
1314 		},
1315 	},
1316 };
1317 
1318 static struct clk_branch camss_csi3pix_clk = {
1319 	.halt_reg = 0x3214,
1320 	.clkr = {
1321 		.enable_reg = 0x3214,
1322 		.enable_mask = BIT(0),
1323 		.hw.init = &(struct clk_init_data){
1324 			.name = "camss_csi3pix_clk",
1325 			.parent_hws = (const struct clk_hw*[]){
1326 				&csi3_clk_src.clkr.hw
1327 			},
1328 			.num_parents = 1,
1329 			.flags = CLK_SET_RATE_PARENT,
1330 			.ops = &clk_branch2_ops,
1331 		},
1332 	},
1333 };
1334 
1335 static struct clk_branch camss_csi3rdi_clk = {
1336 	.halt_reg = 0x3204,
1337 	.clkr = {
1338 		.enable_reg = 0x3204,
1339 		.enable_mask = BIT(0),
1340 		.hw.init = &(struct clk_init_data){
1341 			.name = "camss_csi3rdi_clk",
1342 			.parent_hws = (const struct clk_hw*[]){
1343 				&csi3_clk_src.clkr.hw
1344 			},
1345 			.num_parents = 1,
1346 			.flags = CLK_SET_RATE_PARENT,
1347 			.ops = &clk_branch2_ops,
1348 		},
1349 	},
1350 };
1351 
1352 static struct clk_branch camss_csi_vfe0_clk = {
1353 	.halt_reg = 0x3704,
1354 	.clkr = {
1355 		.enable_reg = 0x3704,
1356 		.enable_mask = BIT(0),
1357 		.hw.init = &(struct clk_init_data){
1358 			.name = "camss_csi_vfe0_clk",
1359 			.parent_hws = (const struct clk_hw*[]){
1360 				&vfe0_clk_src.clkr.hw
1361 			},
1362 			.num_parents = 1,
1363 			.flags = CLK_SET_RATE_PARENT,
1364 			.ops = &clk_branch2_ops,
1365 		},
1366 	},
1367 };
1368 
1369 static struct clk_branch camss_csi_vfe1_clk = {
1370 	.halt_reg = 0x3714,
1371 	.clkr = {
1372 		.enable_reg = 0x3714,
1373 		.enable_mask = BIT(0),
1374 		.hw.init = &(struct clk_init_data){
1375 			.name = "camss_csi_vfe1_clk",
1376 			.parent_hws = (const struct clk_hw*[]){
1377 				&vfe1_clk_src.clkr.hw
1378 			},
1379 			.num_parents = 1,
1380 			.flags = CLK_SET_RATE_PARENT,
1381 			.ops = &clk_branch2_ops,
1382 		},
1383 	},
1384 };
1385 
1386 static struct clk_branch camss_gp0_clk = {
1387 	.halt_reg = 0x3444,
1388 	.clkr = {
1389 		.enable_reg = 0x3444,
1390 		.enable_mask = BIT(0),
1391 		.hw.init = &(struct clk_init_data){
1392 			.name = "camss_gp0_clk",
1393 			.parent_hws = (const struct clk_hw*[]){
1394 				&camss_gp0_clk_src.clkr.hw
1395 			},
1396 			.num_parents = 1,
1397 			.flags = CLK_SET_RATE_PARENT,
1398 			.ops = &clk_branch2_ops,
1399 		},
1400 	},
1401 };
1402 
1403 static struct clk_branch camss_gp1_clk = {
1404 	.halt_reg = 0x3474,
1405 	.clkr = {
1406 		.enable_reg = 0x3474,
1407 		.enable_mask = BIT(0),
1408 		.hw.init = &(struct clk_init_data){
1409 			.name = "camss_gp1_clk",
1410 			.parent_hws = (const struct clk_hw*[]){
1411 				&camss_gp1_clk_src.clkr.hw
1412 			},
1413 			.num_parents = 1,
1414 			.flags = CLK_SET_RATE_PARENT,
1415 			.ops = &clk_branch2_ops,
1416 		},
1417 	},
1418 };
1419 
1420 static struct clk_branch camss_ispif_ahb_clk = {
1421 	.halt_reg = 0x3224,
1422 	.clkr = {
1423 		.enable_reg = 0x3224,
1424 		.enable_mask = BIT(0),
1425 		.hw.init = &(struct clk_init_data){
1426 			.name = "camss_ispif_ahb_clk",
1427 			.parent_hws = (const struct clk_hw*[]){
1428 				&mmss_ahb_clk_src.clkr.hw
1429 			},
1430 			.num_parents = 1,
1431 			.ops = &clk_branch2_ops,
1432 		},
1433 	},
1434 };
1435 
1436 static struct clk_branch camss_jpeg_jpeg0_clk = {
1437 	.halt_reg = 0x35a8,
1438 	.clkr = {
1439 		.enable_reg = 0x35a8,
1440 		.enable_mask = BIT(0),
1441 		.hw.init = &(struct clk_init_data){
1442 			.name = "camss_jpeg_jpeg0_clk",
1443 			.parent_hws = (const struct clk_hw*[]){
1444 				&jpeg0_clk_src.clkr.hw
1445 			},
1446 			.num_parents = 1,
1447 			.flags = CLK_SET_RATE_PARENT,
1448 			.ops = &clk_branch2_ops,
1449 		},
1450 	},
1451 };
1452 
1453 static struct clk_branch camss_jpeg_jpeg1_clk = {
1454 	.halt_reg = 0x35ac,
1455 	.clkr = {
1456 		.enable_reg = 0x35ac,
1457 		.enable_mask = BIT(0),
1458 		.hw.init = &(struct clk_init_data){
1459 			.name = "camss_jpeg_jpeg1_clk",
1460 			.parent_hws = (const struct clk_hw*[]){
1461 				&jpeg1_clk_src.clkr.hw
1462 			},
1463 			.num_parents = 1,
1464 			.flags = CLK_SET_RATE_PARENT,
1465 			.ops = &clk_branch2_ops,
1466 		},
1467 	},
1468 };
1469 
1470 static struct clk_branch camss_jpeg_jpeg2_clk = {
1471 	.halt_reg = 0x35b0,
1472 	.clkr = {
1473 		.enable_reg = 0x35b0,
1474 		.enable_mask = BIT(0),
1475 		.hw.init = &(struct clk_init_data){
1476 			.name = "camss_jpeg_jpeg2_clk",
1477 			.parent_hws = (const struct clk_hw*[]){
1478 				&jpeg2_clk_src.clkr.hw
1479 			},
1480 			.num_parents = 1,
1481 			.flags = CLK_SET_RATE_PARENT,
1482 			.ops = &clk_branch2_ops,
1483 		},
1484 	},
1485 };
1486 
1487 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1488 	.halt_reg = 0x35b4,
1489 	.clkr = {
1490 		.enable_reg = 0x35b4,
1491 		.enable_mask = BIT(0),
1492 		.hw.init = &(struct clk_init_data){
1493 			.name = "camss_jpeg_jpeg_ahb_clk",
1494 			.parent_hws = (const struct clk_hw*[]){
1495 				&mmss_ahb_clk_src.clkr.hw
1496 			},
1497 			.num_parents = 1,
1498 			.ops = &clk_branch2_ops,
1499 		},
1500 	},
1501 };
1502 
1503 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1504 	.halt_reg = 0x35b8,
1505 	.clkr = {
1506 		.enable_reg = 0x35b8,
1507 		.enable_mask = BIT(0),
1508 		.hw.init = &(struct clk_init_data){
1509 			.name = "camss_jpeg_jpeg_axi_clk",
1510 			.parent_hws = (const struct clk_hw*[]){
1511 				&mmss_axi_clk_src.clkr.hw
1512 			},
1513 			.num_parents = 1,
1514 			.ops = &clk_branch2_ops,
1515 		},
1516 	},
1517 };
1518 
1519 static struct clk_branch camss_jpeg_jpeg_ocmemnoc_clk = {
1520 	.halt_reg = 0x35bc,
1521 	.clkr = {
1522 		.enable_reg = 0x35bc,
1523 		.enable_mask = BIT(0),
1524 		.hw.init = &(struct clk_init_data){
1525 			.name = "camss_jpeg_jpeg_ocmemnoc_clk",
1526 			.parent_hws = (const struct clk_hw*[]){
1527 				&ocmemnoc_clk_src.clkr.hw
1528 			},
1529 			.num_parents = 1,
1530 			.flags = CLK_SET_RATE_PARENT,
1531 			.ops = &clk_branch2_ops,
1532 		},
1533 	},
1534 };
1535 
1536 static struct clk_branch camss_mclk0_clk = {
1537 	.halt_reg = 0x3384,
1538 	.clkr = {
1539 		.enable_reg = 0x3384,
1540 		.enable_mask = BIT(0),
1541 		.hw.init = &(struct clk_init_data){
1542 			.name = "camss_mclk0_clk",
1543 			.parent_hws = (const struct clk_hw*[]){
1544 				&mclk0_clk_src.clkr.hw
1545 			},
1546 			.num_parents = 1,
1547 			.flags = CLK_SET_RATE_PARENT,
1548 			.ops = &clk_branch2_ops,
1549 		},
1550 	},
1551 };
1552 
1553 static struct clk_branch camss_mclk1_clk = {
1554 	.halt_reg = 0x33b4,
1555 	.clkr = {
1556 		.enable_reg = 0x33b4,
1557 		.enable_mask = BIT(0),
1558 		.hw.init = &(struct clk_init_data){
1559 			.name = "camss_mclk1_clk",
1560 			.parent_hws = (const struct clk_hw*[]){
1561 				&mclk1_clk_src.clkr.hw
1562 			},
1563 			.num_parents = 1,
1564 			.flags = CLK_SET_RATE_PARENT,
1565 			.ops = &clk_branch2_ops,
1566 		},
1567 	},
1568 };
1569 
1570 static struct clk_branch camss_mclk2_clk = {
1571 	.halt_reg = 0x33e4,
1572 	.clkr = {
1573 		.enable_reg = 0x33e4,
1574 		.enable_mask = BIT(0),
1575 		.hw.init = &(struct clk_init_data){
1576 			.name = "camss_mclk2_clk",
1577 			.parent_hws = (const struct clk_hw*[]){
1578 				&mclk2_clk_src.clkr.hw
1579 			},
1580 			.num_parents = 1,
1581 			.flags = CLK_SET_RATE_PARENT,
1582 			.ops = &clk_branch2_ops,
1583 		},
1584 	},
1585 };
1586 
1587 static struct clk_branch camss_mclk3_clk = {
1588 	.halt_reg = 0x3414,
1589 	.clkr = {
1590 		.enable_reg = 0x3414,
1591 		.enable_mask = BIT(0),
1592 		.hw.init = &(struct clk_init_data){
1593 			.name = "camss_mclk3_clk",
1594 			.parent_hws = (const struct clk_hw*[]){
1595 				&mclk3_clk_src.clkr.hw
1596 			},
1597 			.num_parents = 1,
1598 			.flags = CLK_SET_RATE_PARENT,
1599 			.ops = &clk_branch2_ops,
1600 		},
1601 	},
1602 };
1603 
1604 static struct clk_branch camss_micro_ahb_clk = {
1605 	.halt_reg = 0x3494,
1606 	.clkr = {
1607 		.enable_reg = 0x3494,
1608 		.enable_mask = BIT(0),
1609 		.hw.init = &(struct clk_init_data){
1610 			.name = "camss_micro_ahb_clk",
1611 			.parent_hws = (const struct clk_hw*[]){
1612 				&mmss_ahb_clk_src.clkr.hw
1613 			},
1614 			.num_parents = 1,
1615 			.ops = &clk_branch2_ops,
1616 		},
1617 	},
1618 };
1619 
1620 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1621 	.halt_reg = 0x3024,
1622 	.clkr = {
1623 		.enable_reg = 0x3024,
1624 		.enable_mask = BIT(0),
1625 		.hw.init = &(struct clk_init_data){
1626 			.name = "camss_phy0_csi0phytimer_clk",
1627 			.parent_hws = (const struct clk_hw*[]){
1628 				&csi0phytimer_clk_src.clkr.hw
1629 			},
1630 			.num_parents = 1,
1631 			.flags = CLK_SET_RATE_PARENT,
1632 			.ops = &clk_branch2_ops,
1633 		},
1634 	},
1635 };
1636 
1637 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1638 	.halt_reg = 0x3054,
1639 	.clkr = {
1640 		.enable_reg = 0x3054,
1641 		.enable_mask = BIT(0),
1642 		.hw.init = &(struct clk_init_data){
1643 			.name = "camss_phy1_csi1phytimer_clk",
1644 			.parent_hws = (const struct clk_hw*[]){
1645 				&csi1phytimer_clk_src.clkr.hw
1646 			},
1647 			.num_parents = 1,
1648 			.flags = CLK_SET_RATE_PARENT,
1649 			.ops = &clk_branch2_ops,
1650 		},
1651 	},
1652 };
1653 
1654 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1655 	.halt_reg = 0x3084,
1656 	.clkr = {
1657 		.enable_reg = 0x3084,
1658 		.enable_mask = BIT(0),
1659 		.hw.init = &(struct clk_init_data){
1660 			.name = "camss_phy2_csi2phytimer_clk",
1661 			.parent_hws = (const struct clk_hw*[]){
1662 				&csi2phytimer_clk_src.clkr.hw
1663 			},
1664 			.num_parents = 1,
1665 			.flags = CLK_SET_RATE_PARENT,
1666 			.ops = &clk_branch2_ops,
1667 		},
1668 	},
1669 };
1670 
1671 static struct clk_branch camss_top_ahb_clk = {
1672 	.halt_reg = 0x3484,
1673 	.clkr = {
1674 		.enable_reg = 0x3484,
1675 		.enable_mask = BIT(0),
1676 		.hw.init = &(struct clk_init_data){
1677 			.name = "camss_top_ahb_clk",
1678 			.parent_hws = (const struct clk_hw*[]){
1679 				&mmss_ahb_clk_src.clkr.hw
1680 			},
1681 			.num_parents = 1,
1682 			.ops = &clk_branch2_ops,
1683 		},
1684 	},
1685 };
1686 
1687 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1688 	.halt_reg = 0x36b4,
1689 	.clkr = {
1690 		.enable_reg = 0x36b4,
1691 		.enable_mask = BIT(0),
1692 		.hw.init = &(struct clk_init_data){
1693 			.name = "camss_vfe_cpp_ahb_clk",
1694 			.parent_hws = (const struct clk_hw*[]){
1695 				&mmss_ahb_clk_src.clkr.hw
1696 			},
1697 			.num_parents = 1,
1698 			.ops = &clk_branch2_ops,
1699 		},
1700 	},
1701 };
1702 
1703 static struct clk_branch camss_vfe_cpp_clk = {
1704 	.halt_reg = 0x36b0,
1705 	.clkr = {
1706 		.enable_reg = 0x36b0,
1707 		.enable_mask = BIT(0),
1708 		.hw.init = &(struct clk_init_data){
1709 			.name = "camss_vfe_cpp_clk",
1710 			.parent_hws = (const struct clk_hw*[]){
1711 				&cpp_clk_src.clkr.hw
1712 			},
1713 			.num_parents = 1,
1714 			.flags = CLK_SET_RATE_PARENT,
1715 			.ops = &clk_branch2_ops,
1716 		},
1717 	},
1718 };
1719 
1720 static struct clk_branch camss_vfe_vfe0_clk = {
1721 	.halt_reg = 0x36a8,
1722 	.clkr = {
1723 		.enable_reg = 0x36a8,
1724 		.enable_mask = BIT(0),
1725 		.hw.init = &(struct clk_init_data){
1726 			.name = "camss_vfe_vfe0_clk",
1727 			.parent_hws = (const struct clk_hw*[]){
1728 				&vfe0_clk_src.clkr.hw
1729 			},
1730 			.num_parents = 1,
1731 			.flags = CLK_SET_RATE_PARENT,
1732 			.ops = &clk_branch2_ops,
1733 		},
1734 	},
1735 };
1736 
1737 static struct clk_branch camss_vfe_vfe1_clk = {
1738 	.halt_reg = 0x36ac,
1739 	.clkr = {
1740 		.enable_reg = 0x36ac,
1741 		.enable_mask = BIT(0),
1742 		.hw.init = &(struct clk_init_data){
1743 			.name = "camss_vfe_vfe1_clk",
1744 			.parent_hws = (const struct clk_hw*[]){
1745 				&vfe1_clk_src.clkr.hw
1746 			},
1747 			.num_parents = 1,
1748 			.flags = CLK_SET_RATE_PARENT,
1749 			.ops = &clk_branch2_ops,
1750 		},
1751 	},
1752 };
1753 
1754 static struct clk_branch camss_vfe_vfe_ahb_clk = {
1755 	.halt_reg = 0x36b8,
1756 	.clkr = {
1757 		.enable_reg = 0x36b8,
1758 		.enable_mask = BIT(0),
1759 		.hw.init = &(struct clk_init_data){
1760 			.name = "camss_vfe_vfe_ahb_clk",
1761 			.parent_hws = (const struct clk_hw*[]){
1762 				&mmss_ahb_clk_src.clkr.hw
1763 			},
1764 			.num_parents = 1,
1765 			.ops = &clk_branch2_ops,
1766 		},
1767 	},
1768 };
1769 
1770 static struct clk_branch camss_vfe_vfe_axi_clk = {
1771 	.halt_reg = 0x36bc,
1772 	.clkr = {
1773 		.enable_reg = 0x36bc,
1774 		.enable_mask = BIT(0),
1775 		.hw.init = &(struct clk_init_data){
1776 			.name = "camss_vfe_vfe_axi_clk",
1777 			.parent_hws = (const struct clk_hw*[]){
1778 				&mmss_axi_clk_src.clkr.hw
1779 			},
1780 			.num_parents = 1,
1781 			.ops = &clk_branch2_ops,
1782 		},
1783 	},
1784 };
1785 
1786 static struct clk_branch camss_vfe_vfe_ocmemnoc_clk = {
1787 	.halt_reg = 0x36c0,
1788 	.clkr = {
1789 		.enable_reg = 0x36c0,
1790 		.enable_mask = BIT(0),
1791 		.hw.init = &(struct clk_init_data){
1792 			.name = "camss_vfe_vfe_ocmemnoc_clk",
1793 			.parent_hws = (const struct clk_hw*[]){
1794 				&ocmemnoc_clk_src.clkr.hw
1795 			},
1796 			.num_parents = 1,
1797 			.flags = CLK_SET_RATE_PARENT,
1798 			.ops = &clk_branch2_ops,
1799 		},
1800 	},
1801 };
1802 
1803 static struct clk_branch mdss_ahb_clk = {
1804 	.halt_reg = 0x2308,
1805 	.clkr = {
1806 		.enable_reg = 0x2308,
1807 		.enable_mask = BIT(0),
1808 		.hw.init = &(struct clk_init_data){
1809 			.name = "mdss_ahb_clk",
1810 			.parent_hws = (const struct clk_hw*[]){
1811 				&mmss_ahb_clk_src.clkr.hw
1812 			},
1813 			.num_parents = 1,
1814 			.ops = &clk_branch2_ops,
1815 		},
1816 	},
1817 };
1818 
1819 static struct clk_branch mdss_axi_clk = {
1820 	.halt_reg = 0x2310,
1821 	.clkr = {
1822 		.enable_reg = 0x2310,
1823 		.enable_mask = BIT(0),
1824 		.hw.init = &(struct clk_init_data){
1825 			.name = "mdss_axi_clk",
1826 			.parent_hws = (const struct clk_hw*[]){
1827 				&mmss_axi_clk_src.clkr.hw
1828 			},
1829 			.num_parents = 1,
1830 			.flags = CLK_SET_RATE_PARENT,
1831 			.ops = &clk_branch2_ops,
1832 		},
1833 	},
1834 };
1835 
1836 static struct clk_branch mdss_byte0_clk = {
1837 	.halt_reg = 0x233c,
1838 	.clkr = {
1839 		.enable_reg = 0x233c,
1840 		.enable_mask = BIT(0),
1841 		.hw.init = &(struct clk_init_data){
1842 			.name = "mdss_byte0_clk",
1843 			.parent_hws = (const struct clk_hw*[]){
1844 				&byte0_clk_src.clkr.hw
1845 			},
1846 			.num_parents = 1,
1847 			.flags = CLK_SET_RATE_PARENT,
1848 			.ops = &clk_branch2_ops,
1849 		},
1850 	},
1851 };
1852 
1853 static struct clk_branch mdss_byte1_clk = {
1854 	.halt_reg = 0x2340,
1855 	.clkr = {
1856 		.enable_reg = 0x2340,
1857 		.enable_mask = BIT(0),
1858 		.hw.init = &(struct clk_init_data){
1859 			.name = "mdss_byte1_clk",
1860 			.parent_hws = (const struct clk_hw*[]){
1861 				&byte1_clk_src.clkr.hw
1862 			},
1863 			.num_parents = 1,
1864 			.flags = CLK_SET_RATE_PARENT,
1865 			.ops = &clk_branch2_ops,
1866 		},
1867 	},
1868 };
1869 
1870 static struct clk_branch mdss_edpaux_clk = {
1871 	.halt_reg = 0x2334,
1872 	.clkr = {
1873 		.enable_reg = 0x2334,
1874 		.enable_mask = BIT(0),
1875 		.hw.init = &(struct clk_init_data){
1876 			.name = "mdss_edpaux_clk",
1877 			.parent_hws = (const struct clk_hw*[]){
1878 				&edpaux_clk_src.clkr.hw
1879 			},
1880 			.num_parents = 1,
1881 			.flags = CLK_SET_RATE_PARENT,
1882 			.ops = &clk_branch2_ops,
1883 		},
1884 	},
1885 };
1886 
1887 static struct clk_branch mdss_edplink_clk = {
1888 	.halt_reg = 0x2330,
1889 	.clkr = {
1890 		.enable_reg = 0x2330,
1891 		.enable_mask = BIT(0),
1892 		.hw.init = &(struct clk_init_data){
1893 			.name = "mdss_edplink_clk",
1894 			.parent_hws = (const struct clk_hw*[]){
1895 				&edplink_clk_src.clkr.hw
1896 			},
1897 			.num_parents = 1,
1898 			.flags = CLK_SET_RATE_PARENT,
1899 			.ops = &clk_branch2_ops,
1900 		},
1901 	},
1902 };
1903 
1904 static struct clk_branch mdss_edppixel_clk = {
1905 	.halt_reg = 0x232c,
1906 	.clkr = {
1907 		.enable_reg = 0x232c,
1908 		.enable_mask = BIT(0),
1909 		.hw.init = &(struct clk_init_data){
1910 			.name = "mdss_edppixel_clk",
1911 			.parent_hws = (const struct clk_hw*[]){
1912 				&edppixel_clk_src.clkr.hw
1913 			},
1914 			.num_parents = 1,
1915 			.flags = CLK_SET_RATE_PARENT,
1916 			.ops = &clk_branch2_ops,
1917 		},
1918 	},
1919 };
1920 
1921 static struct clk_branch mdss_esc0_clk = {
1922 	.halt_reg = 0x2344,
1923 	.clkr = {
1924 		.enable_reg = 0x2344,
1925 		.enable_mask = BIT(0),
1926 		.hw.init = &(struct clk_init_data){
1927 			.name = "mdss_esc0_clk",
1928 			.parent_hws = (const struct clk_hw*[]){
1929 				&esc0_clk_src.clkr.hw
1930 			},
1931 			.num_parents = 1,
1932 			.flags = CLK_SET_RATE_PARENT,
1933 			.ops = &clk_branch2_ops,
1934 		},
1935 	},
1936 };
1937 
1938 static struct clk_branch mdss_esc1_clk = {
1939 	.halt_reg = 0x2348,
1940 	.clkr = {
1941 		.enable_reg = 0x2348,
1942 		.enable_mask = BIT(0),
1943 		.hw.init = &(struct clk_init_data){
1944 			.name = "mdss_esc1_clk",
1945 			.parent_hws = (const struct clk_hw*[]){
1946 				&esc1_clk_src.clkr.hw
1947 			},
1948 			.num_parents = 1,
1949 			.flags = CLK_SET_RATE_PARENT,
1950 			.ops = &clk_branch2_ops,
1951 		},
1952 	},
1953 };
1954 
1955 static struct clk_branch mdss_extpclk_clk = {
1956 	.halt_reg = 0x2324,
1957 	.clkr = {
1958 		.enable_reg = 0x2324,
1959 		.enable_mask = BIT(0),
1960 		.hw.init = &(struct clk_init_data){
1961 			.name = "mdss_extpclk_clk",
1962 			.parent_hws = (const struct clk_hw*[]){
1963 				&extpclk_clk_src.clkr.hw
1964 			},
1965 			.num_parents = 1,
1966 			.flags = CLK_SET_RATE_PARENT,
1967 			.ops = &clk_branch2_ops,
1968 		},
1969 	},
1970 };
1971 
1972 static struct clk_branch mdss_hdmi_ahb_clk = {
1973 	.halt_reg = 0x230c,
1974 	.clkr = {
1975 		.enable_reg = 0x230c,
1976 		.enable_mask = BIT(0),
1977 		.hw.init = &(struct clk_init_data){
1978 			.name = "mdss_hdmi_ahb_clk",
1979 			.parent_hws = (const struct clk_hw*[]){
1980 				&mmss_ahb_clk_src.clkr.hw
1981 			},
1982 			.num_parents = 1,
1983 			.ops = &clk_branch2_ops,
1984 		},
1985 	},
1986 };
1987 
1988 static struct clk_branch mdss_hdmi_clk = {
1989 	.halt_reg = 0x2338,
1990 	.clkr = {
1991 		.enable_reg = 0x2338,
1992 		.enable_mask = BIT(0),
1993 		.hw.init = &(struct clk_init_data){
1994 			.name = "mdss_hdmi_clk",
1995 			.parent_hws = (const struct clk_hw*[]){
1996 				&hdmi_clk_src.clkr.hw
1997 			},
1998 			.num_parents = 1,
1999 			.flags = CLK_SET_RATE_PARENT,
2000 			.ops = &clk_branch2_ops,
2001 		},
2002 	},
2003 };
2004 
2005 static struct clk_branch mdss_mdp_clk = {
2006 	.halt_reg = 0x231c,
2007 	.clkr = {
2008 		.enable_reg = 0x231c,
2009 		.enable_mask = BIT(0),
2010 		.hw.init = &(struct clk_init_data){
2011 			.name = "mdss_mdp_clk",
2012 			.parent_hws = (const struct clk_hw*[]){
2013 				&mdp_clk_src.clkr.hw
2014 			},
2015 			.num_parents = 1,
2016 			.flags = CLK_SET_RATE_PARENT,
2017 			.ops = &clk_branch2_ops,
2018 		},
2019 	},
2020 };
2021 
2022 static struct clk_branch mdss_mdp_lut_clk = {
2023 	.halt_reg = 0x2320,
2024 	.clkr = {
2025 		.enable_reg = 0x2320,
2026 		.enable_mask = BIT(0),
2027 		.hw.init = &(struct clk_init_data){
2028 			.name = "mdss_mdp_lut_clk",
2029 			.parent_hws = (const struct clk_hw*[]){
2030 				&mdp_clk_src.clkr.hw
2031 			},
2032 			.num_parents = 1,
2033 			.flags = CLK_SET_RATE_PARENT,
2034 			.ops = &clk_branch2_ops,
2035 		},
2036 	},
2037 };
2038 
2039 static struct clk_branch mdss_pclk0_clk = {
2040 	.halt_reg = 0x2314,
2041 	.clkr = {
2042 		.enable_reg = 0x2314,
2043 		.enable_mask = BIT(0),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "mdss_pclk0_clk",
2046 			.parent_hws = (const struct clk_hw*[]){
2047 				&pclk0_clk_src.clkr.hw
2048 			},
2049 			.num_parents = 1,
2050 			.flags = CLK_SET_RATE_PARENT,
2051 			.ops = &clk_branch2_ops,
2052 		},
2053 	},
2054 };
2055 
2056 static struct clk_branch mdss_pclk1_clk = {
2057 	.halt_reg = 0x2318,
2058 	.clkr = {
2059 		.enable_reg = 0x2318,
2060 		.enable_mask = BIT(0),
2061 		.hw.init = &(struct clk_init_data){
2062 			.name = "mdss_pclk1_clk",
2063 			.parent_hws = (const struct clk_hw*[]){
2064 				&pclk1_clk_src.clkr.hw
2065 			},
2066 			.num_parents = 1,
2067 			.flags = CLK_SET_RATE_PARENT,
2068 			.ops = &clk_branch2_ops,
2069 		},
2070 	},
2071 };
2072 
2073 static struct clk_branch mdss_vsync_clk = {
2074 	.halt_reg = 0x2328,
2075 	.clkr = {
2076 		.enable_reg = 0x2328,
2077 		.enable_mask = BIT(0),
2078 		.hw.init = &(struct clk_init_data){
2079 			.name = "mdss_vsync_clk",
2080 			.parent_hws = (const struct clk_hw*[]){
2081 				&vsync_clk_src.clkr.hw
2082 			},
2083 			.num_parents = 1,
2084 			.flags = CLK_SET_RATE_PARENT,
2085 			.ops = &clk_branch2_ops,
2086 		},
2087 	},
2088 };
2089 
2090 static struct clk_branch mmss_misc_ahb_clk = {
2091 	.halt_reg = 0x502c,
2092 	.clkr = {
2093 		.enable_reg = 0x502c,
2094 		.enable_mask = BIT(0),
2095 		.hw.init = &(struct clk_init_data){
2096 			.name = "mmss_misc_ahb_clk",
2097 			.parent_hws = (const struct clk_hw*[]){
2098 				&mmss_ahb_clk_src.clkr.hw
2099 			},
2100 			.num_parents = 1,
2101 			.ops = &clk_branch2_ops,
2102 		},
2103 	},
2104 };
2105 
2106 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2107 	.halt_reg = 0x5024,
2108 	.clkr = {
2109 		.enable_reg = 0x5024,
2110 		.enable_mask = BIT(0),
2111 		.hw.init = &(struct clk_init_data){
2112 			.name = "mmss_mmssnoc_ahb_clk",
2113 			.parent_hws = (const struct clk_hw*[]){
2114 				&mmss_ahb_clk_src.clkr.hw
2115 			},
2116 			.num_parents = 1,
2117 			.ops = &clk_branch2_ops,
2118 			.flags = CLK_IGNORE_UNUSED,
2119 		},
2120 	},
2121 };
2122 
2123 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2124 	.halt_reg = 0x5028,
2125 	.clkr = {
2126 		.enable_reg = 0x5028,
2127 		.enable_mask = BIT(0),
2128 		.hw.init = &(struct clk_init_data){
2129 			.name = "mmss_mmssnoc_bto_ahb_clk",
2130 			.parent_hws = (const struct clk_hw*[]){
2131 				&mmss_ahb_clk_src.clkr.hw
2132 			},
2133 			.num_parents = 1,
2134 			.ops = &clk_branch2_ops,
2135 			.flags = CLK_IGNORE_UNUSED,
2136 		},
2137 	},
2138 };
2139 
2140 static struct clk_branch mmss_mmssnoc_axi_clk = {
2141 	.halt_reg = 0x506c,
2142 	.clkr = {
2143 		.enable_reg = 0x506c,
2144 		.enable_mask = BIT(0),
2145 		.hw.init = &(struct clk_init_data){
2146 			.name = "mmss_mmssnoc_axi_clk",
2147 			.parent_hws = (const struct clk_hw*[]){
2148 				&mmss_axi_clk_src.clkr.hw
2149 			},
2150 			.num_parents = 1,
2151 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2152 			.ops = &clk_branch2_ops,
2153 		},
2154 	},
2155 };
2156 
2157 static struct clk_branch mmss_s0_axi_clk = {
2158 	.halt_reg = 0x5064,
2159 	.clkr = {
2160 		.enable_reg = 0x5064,
2161 		.enable_mask = BIT(0),
2162 		.hw.init = &(struct clk_init_data){
2163 			.name = "mmss_s0_axi_clk",
2164 			.parent_hws = (const struct clk_hw*[]){
2165 				&mmss_axi_clk_src.clkr.hw
2166 			},
2167 			.num_parents = 1,
2168 			.ops = &clk_branch2_ops,
2169 			.flags = CLK_IGNORE_UNUSED,
2170 		},
2171 	},
2172 };
2173 
2174 static struct clk_branch ocmemcx_ahb_clk = {
2175 	.halt_reg = 0x405c,
2176 	.clkr = {
2177 		.enable_reg = 0x405c,
2178 		.enable_mask = BIT(0),
2179 		.hw.init = &(struct clk_init_data){
2180 			.name = "ocmemcx_ahb_clk",
2181 			.parent_hws = (const struct clk_hw*[]){
2182 				&mmss_ahb_clk_src.clkr.hw
2183 			},
2184 			.num_parents = 1,
2185 			.ops = &clk_branch2_ops,
2186 		},
2187 	},
2188 };
2189 
2190 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2191 	.halt_reg = 0x4058,
2192 	.clkr = {
2193 		.enable_reg = 0x4058,
2194 		.enable_mask = BIT(0),
2195 		.hw.init = &(struct clk_init_data){
2196 			.name = "ocmemcx_ocmemnoc_clk",
2197 			.parent_hws = (const struct clk_hw*[]){
2198 				&ocmemnoc_clk_src.clkr.hw
2199 			},
2200 			.num_parents = 1,
2201 			.flags = CLK_SET_RATE_PARENT,
2202 			.ops = &clk_branch2_ops,
2203 		},
2204 	},
2205 };
2206 
2207 static struct clk_branch oxili_ocmemgx_clk = {
2208 	.halt_reg = 0x402c,
2209 	.clkr = {
2210 		.enable_reg = 0x402c,
2211 		.enable_mask = BIT(0),
2212 		.hw.init = &(struct clk_init_data){
2213 			.name = "oxili_ocmemgx_clk",
2214 			.parent_data = (const struct clk_parent_data[]){
2215 				{ .fw_name = "gfx3d_clk_src", .name = "gfx3d_clk_src" },
2216 			},
2217 			.num_parents = 1,
2218 			.flags = CLK_SET_RATE_PARENT,
2219 			.ops = &clk_branch2_ops,
2220 		},
2221 	},
2222 };
2223 
2224 static struct clk_branch ocmemnoc_clk = {
2225 	.halt_reg = 0x50b4,
2226 	.clkr = {
2227 		.enable_reg = 0x50b4,
2228 		.enable_mask = BIT(0),
2229 		.hw.init = &(struct clk_init_data){
2230 			.name = "ocmemnoc_clk",
2231 			.parent_hws = (const struct clk_hw*[]){
2232 				&ocmemnoc_clk_src.clkr.hw
2233 			},
2234 			.num_parents = 1,
2235 			.flags = CLK_SET_RATE_PARENT,
2236 			.ops = &clk_branch2_ops,
2237 		},
2238 	},
2239 };
2240 
2241 static struct clk_branch oxili_gfx3d_clk = {
2242 	.halt_reg = 0x4028,
2243 	.clkr = {
2244 		.enable_reg = 0x4028,
2245 		.enable_mask = BIT(0),
2246 		.hw.init = &(struct clk_init_data){
2247 			.name = "oxili_gfx3d_clk",
2248 			.parent_data = (const struct clk_parent_data[]){
2249 				{ .fw_name = "gfx3d_clk_src", .name = "gfx3d_clk_src" },
2250 			},
2251 			.num_parents = 1,
2252 			.flags = CLK_SET_RATE_PARENT,
2253 			.ops = &clk_branch2_ops,
2254 		},
2255 	},
2256 };
2257 
2258 static struct clk_branch oxilicx_ahb_clk = {
2259 	.halt_reg = 0x403c,
2260 	.clkr = {
2261 		.enable_reg = 0x403c,
2262 		.enable_mask = BIT(0),
2263 		.hw.init = &(struct clk_init_data){
2264 			.name = "oxilicx_ahb_clk",
2265 			.parent_hws = (const struct clk_hw*[]){
2266 				&mmss_ahb_clk_src.clkr.hw
2267 			},
2268 			.num_parents = 1,
2269 			.ops = &clk_branch2_ops,
2270 		},
2271 	},
2272 };
2273 
2274 static struct clk_branch oxilicx_axi_clk = {
2275 	.halt_reg = 0x4038,
2276 	.clkr = {
2277 		.enable_reg = 0x4038,
2278 		.enable_mask = BIT(0),
2279 		.hw.init = &(struct clk_init_data){
2280 			.name = "oxilicx_axi_clk",
2281 			.parent_hws = (const struct clk_hw*[]){
2282 				&mmss_axi_clk_src.clkr.hw
2283 			},
2284 			.num_parents = 1,
2285 			.ops = &clk_branch2_ops,
2286 		},
2287 	},
2288 };
2289 
2290 static struct clk_branch venus0_ahb_clk = {
2291 	.halt_reg = 0x1030,
2292 	.clkr = {
2293 		.enable_reg = 0x1030,
2294 		.enable_mask = BIT(0),
2295 		.hw.init = &(struct clk_init_data){
2296 			.name = "venus0_ahb_clk",
2297 			.parent_hws = (const struct clk_hw*[]){
2298 				&mmss_ahb_clk_src.clkr.hw
2299 			},
2300 			.num_parents = 1,
2301 			.ops = &clk_branch2_ops,
2302 		},
2303 	},
2304 };
2305 
2306 static struct clk_branch venus0_axi_clk = {
2307 	.halt_reg = 0x1034,
2308 	.clkr = {
2309 		.enable_reg = 0x1034,
2310 		.enable_mask = BIT(0),
2311 		.hw.init = &(struct clk_init_data){
2312 			.name = "venus0_axi_clk",
2313 			.parent_hws = (const struct clk_hw*[]){
2314 				&mmss_axi_clk_src.clkr.hw
2315 			},
2316 			.num_parents = 1,
2317 			.ops = &clk_branch2_ops,
2318 		},
2319 	},
2320 };
2321 
2322 static struct clk_branch venus0_ocmemnoc_clk = {
2323 	.halt_reg = 0x1038,
2324 	.clkr = {
2325 		.enable_reg = 0x1038,
2326 		.enable_mask = BIT(0),
2327 		.hw.init = &(struct clk_init_data){
2328 			.name = "venus0_ocmemnoc_clk",
2329 			.parent_hws = (const struct clk_hw*[]){
2330 				&ocmemnoc_clk_src.clkr.hw
2331 			},
2332 			.num_parents = 1,
2333 			.flags = CLK_SET_RATE_PARENT,
2334 			.ops = &clk_branch2_ops,
2335 		},
2336 	},
2337 };
2338 
2339 static struct clk_branch venus0_vcodec0_clk = {
2340 	.halt_reg = 0x1028,
2341 	.clkr = {
2342 		.enable_reg = 0x1028,
2343 		.enable_mask = BIT(0),
2344 		.hw.init = &(struct clk_init_data){
2345 			.name = "venus0_vcodec0_clk",
2346 			.parent_hws = (const struct clk_hw*[]){
2347 				&vcodec0_clk_src.clkr.hw
2348 			},
2349 			.num_parents = 1,
2350 			.flags = CLK_SET_RATE_PARENT,
2351 			.ops = &clk_branch2_ops,
2352 		},
2353 	},
2354 };
2355 
2356 static const struct pll_config mmpll1_config = {
2357 	.l = 60,
2358 	.m = 25,
2359 	.n = 32,
2360 	.vco_val = 0x0,
2361 	.vco_mask = 0x3 << 20,
2362 	.pre_div_val = 0x0,
2363 	.pre_div_mask = 0x7 << 12,
2364 	.post_div_val = 0x0,
2365 	.post_div_mask = 0x3 << 8,
2366 	.mn_ena_mask = BIT(24),
2367 	.main_output_mask = BIT(0),
2368 };
2369 
2370 static struct pll_config mmpll3_config = {
2371 	.l = 48,
2372 	.m = 7,
2373 	.n = 16,
2374 	.vco_val = 0x0,
2375 	.vco_mask = 0x3 << 20,
2376 	.pre_div_val = 0x0,
2377 	.pre_div_mask = 0x7 << 12,
2378 	.post_div_val = 0x0,
2379 	.post_div_mask = 0x3 << 8,
2380 	.mn_ena_mask = BIT(24),
2381 	.main_output_mask = BIT(0),
2382 	.aux_output_mask = BIT(1),
2383 };
2384 
2385 static struct gdsc venus0_gdsc = {
2386 	.gdscr = 0x1024,
2387 	.cxcs = (unsigned int []){ 0x1028 },
2388 	.cxc_count = 1,
2389 	.resets = (unsigned int []){ VENUS0_RESET },
2390 	.reset_count = 1,
2391 	.pd = {
2392 		.name = "venus0",
2393 	},
2394 	.pwrsts = PWRSTS_ON,
2395 };
2396 
2397 static struct gdsc mdss_gdsc = {
2398 	.gdscr = 0x2304,
2399 	.cxcs = (unsigned int []){ 0x231c, 0x2320 },
2400 	.cxc_count = 2,
2401 	.pd = {
2402 		.name = "mdss",
2403 	},
2404 	.pwrsts = PWRSTS_RET_ON,
2405 };
2406 
2407 static struct gdsc camss_jpeg_gdsc = {
2408 	.gdscr = 0x35a4,
2409 	.cxcs = (unsigned int []){ 0x35a8, 0x35ac, 0x35b0 },
2410 	.cxc_count = 3,
2411 	.pd = {
2412 		.name = "camss_jpeg",
2413 	},
2414 	.pwrsts = PWRSTS_OFF_ON,
2415 };
2416 
2417 static struct gdsc camss_vfe_gdsc = {
2418 	.gdscr = 0x36a4,
2419 	.cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x3704, 0x3714, 0x36b0 },
2420 	.cxc_count = 5,
2421 	.pd = {
2422 		.name = "camss_vfe",
2423 	},
2424 	.pwrsts = PWRSTS_OFF_ON,
2425 };
2426 
2427 static struct gdsc oxili_gdsc = {
2428 	.gdscr = 0x4024,
2429 	.cxcs = (unsigned int []){ 0x4028 },
2430 	.cxc_count = 1,
2431 	.pd = {
2432 		.name = "oxili",
2433 	},
2434 	.pwrsts = PWRSTS_OFF_ON,
2435 };
2436 
2437 static struct gdsc oxilicx_gdsc = {
2438 	.gdscr = 0x4034,
2439 	.pd = {
2440 		.name = "oxilicx",
2441 	},
2442 	.parent = &oxili_gdsc.pd,
2443 	.pwrsts = PWRSTS_OFF_ON,
2444 };
2445 
2446 static struct clk_regmap *mmcc_msm8226_clocks[] = {
2447 	[MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2448 	[MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2449 	[MMPLL0] = &mmpll0.clkr,
2450 	[MMPLL0_VOTE] = &mmpll0_vote,
2451 	[MMPLL1] = &mmpll1.clkr,
2452 	[MMPLL1_VOTE] = &mmpll1_vote,
2453 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2454 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2455 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2456 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
2457 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2458 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2459 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2460 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
2461 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2462 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2463 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2464 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2465 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2466 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2467 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
2468 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2469 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2470 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2471 	[CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2472 	[CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2473 	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2474 	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2475 	[CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2476 	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2477 	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2478 	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2479 	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2480 	[CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2481 	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2482 	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2483 	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2484 	[CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2485 	[CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2486 	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2487 	[CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2488 	[CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2489 	[CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2490 	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2491 	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2492 	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2493 	[CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2494 	[CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2495 	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2496 	[CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2497 	[CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2498 	[CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2499 	[CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2500 	[CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2501 	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2502 	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2503 	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2504 	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2505 	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2506 	[MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2507 	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2508 	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2509 	[MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
2510 	[MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
2511 	[MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
2512 	[MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
2513 	[MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
2514 	[OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
2515 	[OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
2516 	[OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
2517 	[OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
2518 	[OXILICX_AXI_CLK] = &oxilicx_axi_clk.clkr,
2519 	[VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
2520 	[VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
2521 	[VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
2522 };
2523 
2524 static const struct qcom_reset_map mmcc_msm8226_resets[] = {
2525 	[SPDM_RESET] = { 0x0200 },
2526 	[SPDM_RM_RESET] = { 0x0300 },
2527 	[VENUS0_RESET] = { 0x1020 },
2528 	[MDSS_RESET] = { 0x2300 },
2529 };
2530 
2531 static struct gdsc *mmcc_msm8226_gdscs[] = {
2532 	[VENUS0_GDSC] = &venus0_gdsc,
2533 	[MDSS_GDSC] = &mdss_gdsc,
2534 	[CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
2535 	[CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
2536 };
2537 
2538 static const struct regmap_config mmcc_msm8226_regmap_config = {
2539 	.reg_bits	= 32,
2540 	.reg_stride	= 4,
2541 	.val_bits	= 32,
2542 	.max_register	= 0x5104,
2543 	.fast_io	= true,
2544 };
2545 
2546 static const struct qcom_cc_desc mmcc_msm8226_desc = {
2547 	.config = &mmcc_msm8226_regmap_config,
2548 	.clks = mmcc_msm8226_clocks,
2549 	.num_clks = ARRAY_SIZE(mmcc_msm8226_clocks),
2550 	.resets = mmcc_msm8226_resets,
2551 	.num_resets = ARRAY_SIZE(mmcc_msm8226_resets),
2552 	.gdscs = mmcc_msm8226_gdscs,
2553 	.num_gdscs = ARRAY_SIZE(mmcc_msm8226_gdscs),
2554 };
2555 
2556 static struct clk_regmap *mmcc_msm8974_clocks[] = {
2557 	[MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2558 	[MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2559 	[OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
2560 	[MMPLL0] = &mmpll0.clkr,
2561 	[MMPLL0_VOTE] = &mmpll0_vote,
2562 	[MMPLL1] = &mmpll1.clkr,
2563 	[MMPLL1_VOTE] = &mmpll1_vote,
2564 	[MMPLL2] = &mmpll2.clkr,
2565 	[MMPLL3] = &mmpll3.clkr,
2566 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2567 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2568 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2569 	[CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2570 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2571 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2572 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
2573 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2574 	[JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
2575 	[JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
2576 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2577 	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2578 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2579 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
2580 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2581 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2582 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2583 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2584 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2585 	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2586 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2587 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2588 	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2589 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
2590 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2591 	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2592 	[EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
2593 	[EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
2594 	[EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
2595 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2596 	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2597 	[EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2598 	[HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2599 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2600 	[CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2601 	[CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2602 	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2603 	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2604 	[CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2605 	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2606 	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2607 	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2608 	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2609 	[CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2610 	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2611 	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2612 	[CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2613 	[CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2614 	[CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
2615 	[CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2616 	[CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2617 	[CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2618 	[CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2619 	[CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
2620 	[CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2621 	[CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2622 	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2623 	[CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2624 	[CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2625 	[CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2626 	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2627 	[CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2628 	[CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
2629 	[CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
2630 	[CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2631 	[CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2632 	[CAMSS_JPEG_JPEG_OCMEMNOC_CLK] = &camss_jpeg_jpeg_ocmemnoc_clk.clkr,
2633 	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2634 	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2635 	[CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2636 	[CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2637 	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2638 	[CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2639 	[CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2640 	[CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
2641 	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2642 	[CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2643 	[CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2644 	[CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2645 	[CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
2646 	[CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2647 	[CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2648 	[CAMSS_VFE_VFE_OCMEMNOC_CLK] = &camss_vfe_vfe_ocmemnoc_clk.clkr,
2649 	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2650 	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2651 	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2652 	[MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
2653 	[MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
2654 	[MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
2655 	[MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
2656 	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2657 	[MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
2658 	[MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
2659 	[MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
2660 	[MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
2661 	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2662 	[MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2663 	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2664 	[MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
2665 	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2666 	[MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
2667 	[MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
2668 	[MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
2669 	[MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
2670 	[MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
2671 	[OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
2672 	[OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
2673 	[OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
2674 	[OCMEMNOC_CLK] = &ocmemnoc_clk.clkr,
2675 	[OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
2676 	[OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
2677 	[OXILICX_AXI_CLK] = &oxilicx_axi_clk.clkr,
2678 	[VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
2679 	[VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
2680 	[VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
2681 	[VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
2682 };
2683 
2684 static const struct qcom_reset_map mmcc_msm8974_resets[] = {
2685 	[SPDM_RESET] = { 0x0200 },
2686 	[SPDM_RM_RESET] = { 0x0300 },
2687 	[VENUS0_RESET] = { 0x1020 },
2688 	[MDSS_RESET] = { 0x2300 },
2689 	[CAMSS_PHY0_RESET] = { 0x3020 },
2690 	[CAMSS_PHY1_RESET] = { 0x3050 },
2691 	[CAMSS_PHY2_RESET] = { 0x3080 },
2692 	[CAMSS_CSI0_RESET] = { 0x30b0 },
2693 	[CAMSS_CSI0PHY_RESET] = { 0x30c0 },
2694 	[CAMSS_CSI0RDI_RESET] = { 0x30d0 },
2695 	[CAMSS_CSI0PIX_RESET] = { 0x30e0 },
2696 	[CAMSS_CSI1_RESET] = { 0x3120 },
2697 	[CAMSS_CSI1PHY_RESET] = { 0x3130 },
2698 	[CAMSS_CSI1RDI_RESET] = { 0x3140 },
2699 	[CAMSS_CSI1PIX_RESET] = { 0x3150 },
2700 	[CAMSS_CSI2_RESET] = { 0x3180 },
2701 	[CAMSS_CSI2PHY_RESET] = { 0x3190 },
2702 	[CAMSS_CSI2RDI_RESET] = { 0x31a0 },
2703 	[CAMSS_CSI2PIX_RESET] = { 0x31b0 },
2704 	[CAMSS_CSI3_RESET] = { 0x31e0 },
2705 	[CAMSS_CSI3PHY_RESET] = { 0x31f0 },
2706 	[CAMSS_CSI3RDI_RESET] = { 0x3200 },
2707 	[CAMSS_CSI3PIX_RESET] = { 0x3210 },
2708 	[CAMSS_ISPIF_RESET] = { 0x3220 },
2709 	[CAMSS_CCI_RESET] = { 0x3340 },
2710 	[CAMSS_MCLK0_RESET] = { 0x3380 },
2711 	[CAMSS_MCLK1_RESET] = { 0x33b0 },
2712 	[CAMSS_MCLK2_RESET] = { 0x33e0 },
2713 	[CAMSS_MCLK3_RESET] = { 0x3410 },
2714 	[CAMSS_GP0_RESET] = { 0x3440 },
2715 	[CAMSS_GP1_RESET] = { 0x3470 },
2716 	[CAMSS_TOP_RESET] = { 0x3480 },
2717 	[CAMSS_MICRO_RESET] = { 0x3490 },
2718 	[CAMSS_JPEG_RESET] = { 0x35a0 },
2719 	[CAMSS_VFE_RESET] = { 0x36a0 },
2720 	[CAMSS_CSI_VFE0_RESET] = { 0x3700 },
2721 	[CAMSS_CSI_VFE1_RESET] = { 0x3710 },
2722 	[OXILI_RESET] = { 0x4020 },
2723 	[OXILICX_RESET] = { 0x4030 },
2724 	[OCMEMCX_RESET] = { 0x4050 },
2725 	[MMSS_RBCRP_RESET] = { 0x4080 },
2726 	[MMSSNOCAHB_RESET] = { 0x5020 },
2727 	[MMSSNOCAXI_RESET] = { 0x5060 },
2728 	[OCMEMNOC_RESET] = { 0x50b0 },
2729 };
2730 
2731 static struct gdsc *mmcc_msm8974_gdscs[] = {
2732 	[VENUS0_GDSC] = &venus0_gdsc,
2733 	[MDSS_GDSC] = &mdss_gdsc,
2734 	[CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
2735 	[CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
2736 	[OXILI_GDSC] = &oxili_gdsc,
2737 	[OXILICX_GDSC] = &oxilicx_gdsc,
2738 };
2739 
2740 static const struct regmap_config mmcc_msm8974_regmap_config = {
2741 	.reg_bits	= 32,
2742 	.reg_stride	= 4,
2743 	.val_bits	= 32,
2744 	.max_register	= 0x5104,
2745 	.fast_io	= true,
2746 };
2747 
2748 static const struct qcom_cc_desc mmcc_msm8974_desc = {
2749 	.config = &mmcc_msm8974_regmap_config,
2750 	.clks = mmcc_msm8974_clocks,
2751 	.num_clks = ARRAY_SIZE(mmcc_msm8974_clocks),
2752 	.resets = mmcc_msm8974_resets,
2753 	.num_resets = ARRAY_SIZE(mmcc_msm8974_resets),
2754 	.gdscs = mmcc_msm8974_gdscs,
2755 	.num_gdscs = ARRAY_SIZE(mmcc_msm8974_gdscs),
2756 };
2757 
2758 static const struct of_device_id mmcc_msm8974_match_table[] = {
2759 	{ .compatible = "qcom,mmcc-msm8226", .data = &mmcc_msm8226_desc },
2760 	{ .compatible = "qcom,mmcc-msm8974", .data = &mmcc_msm8974_desc },
2761 	{ }
2762 };
2763 MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
2764 
2765 static void msm8226_clock_override(void)
2766 {
2767 	mmss_axi_clk_src.freq_tbl = ftbl_mmss_axi_clk_msm8226;
2768 	vfe0_clk_src.freq_tbl = ftbl_camss_vfe_vfe0_clk_msm8226;
2769 	mdp_clk_src.freq_tbl = ftbl_mdss_mdp_clk_msm8226;
2770 	vcodec0_clk_src.freq_tbl = ftbl_venus0_vcodec0_clk_msm8226;
2771 	mclk0_clk_src.freq_tbl = ftbl_camss_mclk0_3_clk_msm8226;
2772 	mclk1_clk_src.freq_tbl = ftbl_camss_mclk0_3_clk_msm8226;
2773 	cpp_clk_src.freq_tbl = ftbl_camss_vfe_cpp_clk_msm8226;
2774 }
2775 
2776 static int mmcc_msm8974_probe(struct platform_device *pdev)
2777 {
2778 	struct regmap *regmap;
2779 	const struct qcom_cc_desc *desc;
2780 
2781 	desc = of_device_get_match_data(&pdev->dev);
2782 	if (!desc)
2783 		return -EINVAL;
2784 
2785 	regmap = qcom_cc_map(pdev, desc);
2786 	if (IS_ERR(regmap))
2787 		return PTR_ERR(regmap);
2788 
2789 	if (desc == &mmcc_msm8974_desc) {
2790 		clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
2791 		clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
2792 	} else {
2793 		msm8226_clock_override();
2794 	}
2795 
2796 	return qcom_cc_really_probe(pdev, desc, regmap);
2797 }
2798 
2799 static struct platform_driver mmcc_msm8974_driver = {
2800 	.probe		= mmcc_msm8974_probe,
2801 	.driver		= {
2802 		.name	= "mmcc-msm8974",
2803 		.of_match_table = mmcc_msm8974_match_table,
2804 	},
2805 };
2806 module_platform_driver(mmcc_msm8974_driver);
2807 
2808 MODULE_DESCRIPTION("QCOM MMCC MSM8974 Driver");
2809 MODULE_LICENSE("GPL v2");
2810 MODULE_ALIAS("platform:mmcc-msm8974");
2811