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