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