GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / clk / qcom / mmcc-msm8996.c
1 /*x
2  * Copyright (c) 2015, 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 #include <linux/clk.h>
25
26 #include <dt-bindings/clock/qcom,mmcc-msm8996.h>
27
28 #include "common.h"
29 #include "clk-regmap.h"
30 #include "clk-regmap-divider.h"
31 #include "clk-alpha-pll.h"
32 #include "clk-rcg.h"
33 #include "clk-branch.h"
34 #include "reset.h"
35 #include "gdsc.h"
36
37 enum {
38         P_XO,
39         P_MMPLL0,
40         P_GPLL0,
41         P_GPLL0_DIV,
42         P_MMPLL1,
43         P_MMPLL9,
44         P_MMPLL2,
45         P_MMPLL8,
46         P_MMPLL3,
47         P_DSI0PLL,
48         P_DSI1PLL,
49         P_MMPLL5,
50         P_HDMIPLL,
51         P_DSI0PLL_BYTE,
52         P_DSI1PLL_BYTE,
53         P_MMPLL4,
54 };
55
56 static const struct parent_map mmss_xo_hdmi_map[] = {
57         { P_XO, 0 },
58         { P_HDMIPLL, 1 }
59 };
60
61 static const char * const mmss_xo_hdmi[] = {
62         "xo",
63         "hdmipll"
64 };
65
66 static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
67         { P_XO, 0 },
68         { P_DSI0PLL, 1 },
69         { P_DSI1PLL, 2 }
70 };
71
72 static const char * const mmss_xo_dsi0pll_dsi1pll[] = {
73         "xo",
74         "dsi0pll",
75         "dsi1pll"
76 };
77
78 static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
79         { P_XO, 0 },
80         { P_GPLL0, 5 },
81         { P_GPLL0_DIV, 6 }
82 };
83
84 static const char * const mmss_xo_gpll0_gpll0_div[] = {
85         "xo",
86         "gpll0",
87         "gpll0_div"
88 };
89
90 static const struct parent_map mmss_xo_dsibyte_map[] = {
91         { P_XO, 0 },
92         { P_DSI0PLL_BYTE, 1 },
93         { P_DSI1PLL_BYTE, 2 }
94 };
95
96 static const char * const mmss_xo_dsibyte[] = {
97         "xo",
98         "dsi0pllbyte",
99         "dsi1pllbyte"
100 };
101
102 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
103         { P_XO, 0 },
104         { P_MMPLL0, 1 },
105         { P_GPLL0, 5 },
106         { P_GPLL0_DIV, 6 }
107 };
108
109 static const char * const mmss_xo_mmpll0_gpll0_gpll0_div[] = {
110         "xo",
111         "mmpll0",
112         "gpll0",
113         "gpll0_div"
114 };
115
116 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
117         { P_XO, 0 },
118         { P_MMPLL0, 1 },
119         { P_MMPLL1, 2 },
120         { P_GPLL0, 5 },
121         { P_GPLL0_DIV, 6 }
122 };
123
124 static const char * const mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
125         "xo",
126         "mmpll0",
127         "mmpll1",
128         "gpll0",
129         "gpll0_div"
130 };
131
132 static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = {
133         { P_XO, 0 },
134         { P_MMPLL0, 1 },
135         { P_MMPLL3, 3 },
136         { P_GPLL0, 5 },
137         { P_GPLL0_DIV, 6 }
138 };
139
140 static const char * const mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = {
141         "xo",
142         "mmpll0",
143         "mmpll3",
144         "gpll0",
145         "gpll0_div"
146 };
147
148 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
149         { P_XO, 0 },
150         { P_MMPLL0, 1 },
151         { P_MMPLL5, 2 },
152         { P_GPLL0, 5 },
153         { P_GPLL0_DIV, 6 }
154 };
155
156 static const char * const mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
157         "xo",
158         "mmpll0",
159         "mmpll5",
160         "gpll0",
161         "gpll0_div"
162 };
163
164 static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = {
165         { P_XO, 0 },
166         { P_MMPLL0, 1 },
167         { P_MMPLL4, 3 },
168         { P_GPLL0, 5 },
169         { P_GPLL0_DIV, 6 }
170 };
171
172 static const char * const mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = {
173         "xo",
174         "mmpll0",
175         "mmpll4",
176         "gpll0",
177         "gpll0_div"
178 };
179
180 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = {
181         { P_XO, 0 },
182         { P_MMPLL0, 1 },
183         { P_MMPLL9, 2 },
184         { P_MMPLL2, 3 },
185         { P_MMPLL8, 4 },
186         { P_GPLL0, 5 }
187 };
188
189 static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = {
190         "xo",
191         "mmpll0",
192         "mmpll9",
193         "mmpll2",
194         "mmpll8",
195         "gpll0"
196 };
197
198 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = {
199         { P_XO, 0 },
200         { P_MMPLL0, 1 },
201         { P_MMPLL9, 2 },
202         { P_MMPLL2, 3 },
203         { P_MMPLL8, 4 },
204         { P_GPLL0, 5 },
205         { P_GPLL0_DIV, 6 }
206 };
207
208 static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = {
209         "xo",
210         "mmpll0",
211         "mmpll9",
212         "mmpll2",
213         "mmpll8",
214         "gpll0",
215         "gpll0_div"
216 };
217
218 static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = {
219         { P_XO, 0 },
220         { P_MMPLL0, 1 },
221         { P_MMPLL1, 2 },
222         { P_MMPLL4, 3 },
223         { P_MMPLL3, 4 },
224         { P_GPLL0, 5 },
225         { P_GPLL0_DIV, 6 }
226 };
227
228 static const char * const mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = {
229         "xo",
230         "mmpll0",
231         "mmpll1",
232         "mmpll4",
233         "mmpll3",
234         "gpll0",
235         "gpll0_div"
236 };
237
238 static struct clk_fixed_factor gpll0_div = {
239         .mult = 1,
240         .div = 2,
241         .hw.init = &(struct clk_init_data){
242                 .name = "gpll0_div",
243                 .parent_names = (const char *[]){ "gpll0" },
244                 .num_parents = 1,
245                 .ops = &clk_fixed_factor_ops,
246         },
247 };
248
249 static struct pll_vco mmpll_p_vco[] = {
250         { 250000000, 500000000, 3 },
251         { 500000000, 1000000000, 2 },
252         { 1000000000, 1500000000, 1 },
253         { 1500000000, 2000000000, 0 },
254 };
255
256 static struct pll_vco mmpll_gfx_vco[] = {
257         { 400000000, 1000000000, 2 },
258         { 1000000000, 1500000000, 1 },
259         { 1500000000, 2000000000, 0 },
260 };
261
262 static struct pll_vco mmpll_t_vco[] = {
263         { 500000000, 1500000000, 0 },
264 };
265
266 static struct clk_alpha_pll mmpll0_early = {
267         .offset = 0x0,
268         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
269         .vco_table = mmpll_p_vco,
270         .num_vco = ARRAY_SIZE(mmpll_p_vco),
271         .clkr = {
272                 .enable_reg = 0x100,
273                 .enable_mask = BIT(0),
274                 .hw.init = &(struct clk_init_data){
275                         .name = "mmpll0_early",
276                         .parent_names = (const char *[]){ "xo" },
277                         .num_parents = 1,
278                         .ops = &clk_alpha_pll_ops,
279                 },
280         },
281 };
282
283 static struct clk_alpha_pll_postdiv mmpll0 = {
284         .offset = 0x0,
285         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
286         .width = 4,
287         .clkr.hw.init = &(struct clk_init_data){
288                 .name = "mmpll0",
289                 .parent_names = (const char *[]){ "mmpll0_early" },
290                 .num_parents = 1,
291                 .ops = &clk_alpha_pll_postdiv_ops,
292                 .flags = CLK_SET_RATE_PARENT,
293         },
294 };
295
296 static struct clk_alpha_pll mmpll1_early = {
297         .offset = 0x30,
298         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
299         .vco_table = mmpll_p_vco,
300         .num_vco = ARRAY_SIZE(mmpll_p_vco),
301         .clkr = {
302                 .enable_reg = 0x100,
303                 .enable_mask = BIT(1),
304                 .hw.init = &(struct clk_init_data){
305                         .name = "mmpll1_early",
306                         .parent_names = (const char *[]){ "xo" },
307                         .num_parents = 1,
308                         .ops = &clk_alpha_pll_ops,
309                 }
310         },
311 };
312
313 static struct clk_alpha_pll_postdiv mmpll1 = {
314         .offset = 0x30,
315         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
316         .width = 4,
317         .clkr.hw.init = &(struct clk_init_data){
318                 .name = "mmpll1",
319                 .parent_names = (const char *[]){ "mmpll1_early" },
320                 .num_parents = 1,
321                 .ops = &clk_alpha_pll_postdiv_ops,
322                 .flags = CLK_SET_RATE_PARENT,
323         },
324 };
325
326 static struct clk_alpha_pll mmpll2_early = {
327         .offset = 0x4100,
328         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
329         .vco_table = mmpll_gfx_vco,
330         .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
331         .clkr.hw.init = &(struct clk_init_data){
332                 .name = "mmpll2_early",
333                 .parent_names = (const char *[]){ "xo" },
334                 .num_parents = 1,
335                 .ops = &clk_alpha_pll_ops,
336         },
337 };
338
339 static struct clk_alpha_pll_postdiv mmpll2 = {
340         .offset = 0x4100,
341         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
342         .width = 4,
343         .clkr.hw.init = &(struct clk_init_data){
344                 .name = "mmpll2",
345                 .parent_names = (const char *[]){ "mmpll2_early" },
346                 .num_parents = 1,
347                 .ops = &clk_alpha_pll_postdiv_ops,
348                 .flags = CLK_SET_RATE_PARENT,
349         },
350 };
351
352 static struct clk_alpha_pll mmpll3_early = {
353         .offset = 0x60,
354         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
355         .vco_table = mmpll_p_vco,
356         .num_vco = ARRAY_SIZE(mmpll_p_vco),
357         .clkr.hw.init = &(struct clk_init_data){
358                 .name = "mmpll3_early",
359                 .parent_names = (const char *[]){ "xo" },
360                 .num_parents = 1,
361                 .ops = &clk_alpha_pll_ops,
362         },
363 };
364
365 static struct clk_alpha_pll_postdiv mmpll3 = {
366         .offset = 0x60,
367         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
368         .width = 4,
369         .clkr.hw.init = &(struct clk_init_data){
370                 .name = "mmpll3",
371                 .parent_names = (const char *[]){ "mmpll3_early" },
372                 .num_parents = 1,
373                 .ops = &clk_alpha_pll_postdiv_ops,
374                 .flags = CLK_SET_RATE_PARENT,
375         },
376 };
377
378 static struct clk_alpha_pll mmpll4_early = {
379         .offset = 0x90,
380         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
381         .vco_table = mmpll_t_vco,
382         .num_vco = ARRAY_SIZE(mmpll_t_vco),
383         .clkr.hw.init = &(struct clk_init_data){
384                 .name = "mmpll4_early",
385                 .parent_names = (const char *[]){ "xo" },
386                 .num_parents = 1,
387                 .ops = &clk_alpha_pll_ops,
388         },
389 };
390
391 static struct clk_alpha_pll_postdiv mmpll4 = {
392         .offset = 0x90,
393         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
394         .width = 2,
395         .clkr.hw.init = &(struct clk_init_data){
396                 .name = "mmpll4",
397                 .parent_names = (const char *[]){ "mmpll4_early" },
398                 .num_parents = 1,
399                 .ops = &clk_alpha_pll_postdiv_ops,
400                 .flags = CLK_SET_RATE_PARENT,
401         },
402 };
403
404 static struct clk_alpha_pll mmpll5_early = {
405         .offset = 0xc0,
406         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
407         .vco_table = mmpll_p_vco,
408         .num_vco = ARRAY_SIZE(mmpll_p_vco),
409         .clkr.hw.init = &(struct clk_init_data){
410                 .name = "mmpll5_early",
411                 .parent_names = (const char *[]){ "xo" },
412                 .num_parents = 1,
413                 .ops = &clk_alpha_pll_ops,
414         },
415 };
416
417 static struct clk_alpha_pll_postdiv mmpll5 = {
418         .offset = 0xc0,
419         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
420         .width = 4,
421         .clkr.hw.init = &(struct clk_init_data){
422                 .name = "mmpll5",
423                 .parent_names = (const char *[]){ "mmpll5_early" },
424                 .num_parents = 1,
425                 .ops = &clk_alpha_pll_postdiv_ops,
426                 .flags = CLK_SET_RATE_PARENT,
427         },
428 };
429
430 static struct clk_alpha_pll mmpll8_early = {
431         .offset = 0x4130,
432         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
433         .vco_table = mmpll_gfx_vco,
434         .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
435         .clkr.hw.init = &(struct clk_init_data){
436                 .name = "mmpll8_early",
437                 .parent_names = (const char *[]){ "xo" },
438                 .num_parents = 1,
439                 .ops = &clk_alpha_pll_ops,
440         },
441 };
442
443 static struct clk_alpha_pll_postdiv mmpll8 = {
444         .offset = 0x4130,
445         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
446         .width = 4,
447         .clkr.hw.init = &(struct clk_init_data){
448                 .name = "mmpll8",
449                 .parent_names = (const char *[]){ "mmpll8_early" },
450                 .num_parents = 1,
451                 .ops = &clk_alpha_pll_postdiv_ops,
452                 .flags = CLK_SET_RATE_PARENT,
453         },
454 };
455
456 static struct clk_alpha_pll mmpll9_early = {
457         .offset = 0x4200,
458         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
459         .vco_table = mmpll_t_vco,
460         .num_vco = ARRAY_SIZE(mmpll_t_vco),
461         .clkr.hw.init = &(struct clk_init_data){
462                 .name = "mmpll9_early",
463                 .parent_names = (const char *[]){ "xo" },
464                 .num_parents = 1,
465                 .ops = &clk_alpha_pll_ops,
466         },
467 };
468
469 static struct clk_alpha_pll_postdiv mmpll9 = {
470         .offset = 0x4200,
471         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
472         .width = 2,
473         .clkr.hw.init = &(struct clk_init_data){
474                 .name = "mmpll9",
475                 .parent_names = (const char *[]){ "mmpll9_early" },
476                 .num_parents = 1,
477                 .ops = &clk_alpha_pll_postdiv_ops,
478                 .flags = CLK_SET_RATE_PARENT,
479         },
480 };
481
482 static const struct freq_tbl ftbl_ahb_clk_src[] = {
483         F(19200000, P_XO, 1, 0, 0),
484         F(40000000, P_GPLL0_DIV, 7.5, 0, 0),
485         F(80000000, P_MMPLL0, 10, 0, 0),
486         { }
487 };
488
489 static struct clk_rcg2 ahb_clk_src = {
490         .cmd_rcgr = 0x5000,
491         .hid_width = 5,
492         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
493         .freq_tbl = ftbl_ahb_clk_src,
494         .clkr.hw.init = &(struct clk_init_data){
495                 .name = "ahb_clk_src",
496                 .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
497                 .num_parents = 4,
498                 .ops = &clk_rcg2_ops,
499         },
500 };
501
502 static const struct freq_tbl ftbl_axi_clk_src[] = {
503         F(19200000, P_XO, 1, 0, 0),
504         F(75000000, P_GPLL0_DIV, 4, 0, 0),
505         F(100000000, P_GPLL0, 6, 0, 0),
506         F(171430000, P_GPLL0, 3.5, 0, 0),
507         F(200000000, P_GPLL0, 3, 0, 0),
508         F(320000000, P_MMPLL0, 2.5, 0, 0),
509         F(400000000, P_MMPLL0, 2, 0, 0),
510         { }
511 };
512
513 static struct clk_rcg2 axi_clk_src = {
514         .cmd_rcgr = 0x5040,
515         .hid_width = 5,
516         .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
517         .freq_tbl = ftbl_axi_clk_src,
518         .clkr.hw.init = &(struct clk_init_data){
519                 .name = "axi_clk_src",
520                 .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
521                 .num_parents = 5,
522                 .ops = &clk_rcg2_ops,
523         },
524 };
525
526 static struct clk_rcg2 maxi_clk_src = {
527         .cmd_rcgr = 0x5090,
528         .hid_width = 5,
529         .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
530         .freq_tbl = ftbl_axi_clk_src,
531         .clkr.hw.init = &(struct clk_init_data){
532                 .name = "maxi_clk_src",
533                 .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
534                 .num_parents = 5,
535                 .ops = &clk_rcg2_ops,
536         },
537 };
538
539 static struct clk_rcg2 gfx3d_clk_src = {
540         .cmd_rcgr = 0x4000,
541         .hid_width = 5,
542         .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map,
543         .clkr.hw.init = &(struct clk_init_data){
544                 .name = "gfx3d_clk_src",
545                 .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0,
546                 .num_parents = 6,
547                 .ops = &clk_gfx3d_ops,
548                 .flags = CLK_SET_RATE_PARENT,
549         },
550 };
551
552 static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {
553         F(19200000, P_XO, 1, 0, 0),
554         { }
555 };
556
557 static struct clk_rcg2 rbbmtimer_clk_src = {
558         .cmd_rcgr = 0x4090,
559         .hid_width = 5,
560         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
561         .freq_tbl = ftbl_rbbmtimer_clk_src,
562         .clkr.hw.init = &(struct clk_init_data){
563                 .name = "rbbmtimer_clk_src",
564                 .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
565                 .num_parents = 4,
566                 .ops = &clk_rcg2_ops,
567         },
568 };
569
570 static struct clk_rcg2 isense_clk_src = {
571         .cmd_rcgr = 0x4010,
572         .hid_width = 5,
573         .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map,
574         .clkr.hw.init = &(struct clk_init_data){
575                 .name = "isense_clk_src",
576                 .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div,
577                 .num_parents = 7,
578                 .ops = &clk_rcg2_ops,
579         },
580 };
581
582 static const struct freq_tbl ftbl_rbcpr_clk_src[] = {
583         F(19200000, P_XO, 1, 0, 0),
584         F(50000000, P_GPLL0, 12, 0, 0),
585         { }
586 };
587
588 static struct clk_rcg2 rbcpr_clk_src = {
589         .cmd_rcgr = 0x4060,
590         .hid_width = 5,
591         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
592         .freq_tbl = ftbl_rbcpr_clk_src,
593         .clkr.hw.init = &(struct clk_init_data){
594                 .name = "rbcpr_clk_src",
595                 .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
596                 .num_parents = 4,
597                 .ops = &clk_rcg2_ops,
598         },
599 };
600
601 static const struct freq_tbl ftbl_video_core_clk_src[] = {
602         F(75000000, P_GPLL0_DIV, 4, 0, 0),
603         F(150000000, P_GPLL0, 4, 0, 0),
604         F(346666667, P_MMPLL3, 3, 0, 0),
605         F(520000000, P_MMPLL3, 2, 0, 0),
606         { }
607 };
608
609 static struct clk_rcg2 video_core_clk_src = {
610         .cmd_rcgr = 0x1000,
611         .mnd_width = 8,
612         .hid_width = 5,
613         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
614         .freq_tbl = ftbl_video_core_clk_src,
615         .clkr.hw.init = &(struct clk_init_data){
616                 .name = "video_core_clk_src",
617                 .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
618                 .num_parents = 5,
619                 .ops = &clk_rcg2_ops,
620         },
621 };
622
623 static struct clk_rcg2 video_subcore0_clk_src = {
624         .cmd_rcgr = 0x1060,
625         .mnd_width = 8,
626         .hid_width = 5,
627         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
628         .freq_tbl = ftbl_video_core_clk_src,
629         .clkr.hw.init = &(struct clk_init_data){
630                 .name = "video_subcore0_clk_src",
631                 .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
632                 .num_parents = 5,
633                 .ops = &clk_rcg2_ops,
634         },
635 };
636
637 static struct clk_rcg2 video_subcore1_clk_src = {
638         .cmd_rcgr = 0x1080,
639         .mnd_width = 8,
640         .hid_width = 5,
641         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
642         .freq_tbl = ftbl_video_core_clk_src,
643         .clkr.hw.init = &(struct clk_init_data){
644                 .name = "video_subcore1_clk_src",
645                 .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
646                 .num_parents = 5,
647                 .ops = &clk_rcg2_ops,
648         },
649 };
650
651 static struct clk_rcg2 pclk0_clk_src = {
652         .cmd_rcgr = 0x2000,
653         .mnd_width = 8,
654         .hid_width = 5,
655         .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
656         .clkr.hw.init = &(struct clk_init_data){
657                 .name = "pclk0_clk_src",
658                 .parent_names = mmss_xo_dsi0pll_dsi1pll,
659                 .num_parents = 3,
660                 .ops = &clk_pixel_ops,
661                 .flags = CLK_SET_RATE_PARENT,
662         },
663 };
664
665 static struct clk_rcg2 pclk1_clk_src = {
666         .cmd_rcgr = 0x2020,
667         .mnd_width = 8,
668         .hid_width = 5,
669         .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
670         .clkr.hw.init = &(struct clk_init_data){
671                 .name = "pclk1_clk_src",
672                 .parent_names = mmss_xo_dsi0pll_dsi1pll,
673                 .num_parents = 3,
674                 .ops = &clk_pixel_ops,
675                 .flags = CLK_SET_RATE_PARENT,
676         },
677 };
678
679 static const struct freq_tbl ftbl_mdp_clk_src[] = {
680         F(85714286, P_GPLL0, 7, 0, 0),
681         F(100000000, P_GPLL0, 6, 0, 0),
682         F(150000000, P_GPLL0, 4, 0, 0),
683         F(171428571, P_GPLL0, 3.5, 0, 0),
684         F(200000000, P_GPLL0, 3, 0, 0),
685         F(275000000, P_MMPLL5, 3, 0, 0),
686         F(300000000, P_GPLL0, 2, 0, 0),
687         F(330000000, P_MMPLL5, 2.5, 0, 0),
688         F(412500000, P_MMPLL5, 2, 0, 0),
689         { }
690 };
691
692 static struct clk_rcg2 mdp_clk_src = {
693         .cmd_rcgr = 0x2040,
694         .hid_width = 5,
695         .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
696         .freq_tbl = ftbl_mdp_clk_src,
697         .clkr.hw.init = &(struct clk_init_data){
698                 .name = "mdp_clk_src",
699                 .parent_names = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
700                 .num_parents = 5,
701                 .ops = &clk_rcg2_ops,
702         },
703 };
704
705 static struct freq_tbl extpclk_freq_tbl[] = {
706         { .src = P_HDMIPLL },
707         { }
708 };
709
710 static struct clk_rcg2 extpclk_clk_src = {
711         .cmd_rcgr = 0x2060,
712         .hid_width = 5,
713         .parent_map = mmss_xo_hdmi_map,
714         .freq_tbl = extpclk_freq_tbl,
715         .clkr.hw.init = &(struct clk_init_data){
716                 .name = "extpclk_clk_src",
717                 .parent_names = mmss_xo_hdmi,
718                 .num_parents = 2,
719                 .ops = &clk_byte_ops,
720                 .flags = CLK_SET_RATE_PARENT,
721         },
722 };
723
724 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
725         F(19200000, P_XO, 1, 0, 0),
726         { }
727 };
728
729 static struct clk_rcg2 vsync_clk_src = {
730         .cmd_rcgr = 0x2080,
731         .hid_width = 5,
732         .parent_map = mmss_xo_gpll0_gpll0_div_map,
733         .freq_tbl = ftbl_mdss_vsync_clk,
734         .clkr.hw.init = &(struct clk_init_data){
735                 .name = "vsync_clk_src",
736                 .parent_names = mmss_xo_gpll0_gpll0_div,
737                 .num_parents = 3,
738                 .ops = &clk_rcg2_ops,
739         },
740 };
741
742 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
743         F(19200000, P_XO, 1, 0, 0),
744         { }
745 };
746
747 static struct clk_rcg2 hdmi_clk_src = {
748         .cmd_rcgr = 0x2100,
749         .hid_width = 5,
750         .parent_map = mmss_xo_gpll0_gpll0_div_map,
751         .freq_tbl = ftbl_mdss_hdmi_clk,
752         .clkr.hw.init = &(struct clk_init_data){
753                 .name = "hdmi_clk_src",
754                 .parent_names = mmss_xo_gpll0_gpll0_div,
755                 .num_parents = 3,
756                 .ops = &clk_rcg2_ops,
757         },
758 };
759
760 static struct clk_rcg2 byte0_clk_src = {
761         .cmd_rcgr = 0x2120,
762         .hid_width = 5,
763         .parent_map = mmss_xo_dsibyte_map,
764         .clkr.hw.init = &(struct clk_init_data){
765                 .name = "byte0_clk_src",
766                 .parent_names = mmss_xo_dsibyte,
767                 .num_parents = 3,
768                 .ops = &clk_byte2_ops,
769                 .flags = CLK_SET_RATE_PARENT,
770         },
771 };
772
773 static struct clk_rcg2 byte1_clk_src = {
774         .cmd_rcgr = 0x2140,
775         .hid_width = 5,
776         .parent_map = mmss_xo_dsibyte_map,
777         .clkr.hw.init = &(struct clk_init_data){
778                 .name = "byte1_clk_src",
779                 .parent_names = mmss_xo_dsibyte,
780                 .num_parents = 3,
781                 .ops = &clk_byte2_ops,
782                 .flags = CLK_SET_RATE_PARENT,
783         },
784 };
785
786 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
787         F(19200000, P_XO, 1, 0, 0),
788         { }
789 };
790
791 static struct clk_rcg2 esc0_clk_src = {
792         .cmd_rcgr = 0x2160,
793         .hid_width = 5,
794         .parent_map = mmss_xo_dsibyte_map,
795         .freq_tbl = ftbl_mdss_esc0_1_clk,
796         .clkr.hw.init = &(struct clk_init_data){
797                 .name = "esc0_clk_src",
798                 .parent_names = mmss_xo_dsibyte,
799                 .num_parents = 3,
800                 .ops = &clk_rcg2_ops,
801         },
802 };
803
804 static struct clk_rcg2 esc1_clk_src = {
805         .cmd_rcgr = 0x2180,
806         .hid_width = 5,
807         .parent_map = mmss_xo_dsibyte_map,
808         .freq_tbl = ftbl_mdss_esc0_1_clk,
809         .clkr.hw.init = &(struct clk_init_data){
810                 .name = "esc1_clk_src",
811                 .parent_names = mmss_xo_dsibyte,
812                 .num_parents = 3,
813                 .ops = &clk_rcg2_ops,
814         },
815 };
816
817 static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
818         F(10000, P_XO, 16, 1, 120),
819         F(24000, P_XO, 16, 1, 50),
820         F(6000000, P_GPLL0_DIV, 10, 1, 5),
821         F(12000000, P_GPLL0_DIV, 1, 1, 25),
822         F(13000000, P_GPLL0_DIV, 2, 13, 150),
823         F(24000000, P_GPLL0_DIV, 1, 2, 25),
824         { }
825 };
826
827 static struct clk_rcg2 camss_gp0_clk_src = {
828         .cmd_rcgr = 0x3420,
829         .mnd_width = 8,
830         .hid_width = 5,
831         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
832         .freq_tbl = ftbl_camss_gp0_clk_src,
833         .clkr.hw.init = &(struct clk_init_data){
834                 .name = "camss_gp0_clk_src",
835                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
836                 .num_parents = 5,
837                 .ops = &clk_rcg2_ops,
838         },
839 };
840
841 static struct clk_rcg2 camss_gp1_clk_src = {
842         .cmd_rcgr = 0x3450,
843         .mnd_width = 8,
844         .hid_width = 5,
845         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
846         .freq_tbl = ftbl_camss_gp0_clk_src,
847         .clkr.hw.init = &(struct clk_init_data){
848                 .name = "camss_gp1_clk_src",
849                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
850                 .num_parents = 5,
851                 .ops = &clk_rcg2_ops,
852         },
853 };
854
855 static const struct freq_tbl ftbl_mclk0_clk_src[] = {
856         F(4800000, P_XO, 4, 0, 0),
857         F(6000000, P_GPLL0_DIV, 10, 1, 5),
858         F(8000000, P_GPLL0_DIV, 1, 2, 75),
859         F(9600000, P_XO, 2, 0, 0),
860         F(16666667, P_GPLL0_DIV, 2, 1, 9),
861         F(19200000, P_XO, 1, 0, 0),
862         F(24000000, P_GPLL0_DIV, 1, 2, 25),
863         F(33333333, P_GPLL0_DIV, 1, 1, 9),
864         F(48000000, P_GPLL0, 1, 2, 25),
865         F(66666667, P_GPLL0, 1, 1, 9),
866         { }
867 };
868
869 static struct clk_rcg2 mclk0_clk_src = {
870         .cmd_rcgr = 0x3360,
871         .mnd_width = 8,
872         .hid_width = 5,
873         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
874         .freq_tbl = ftbl_mclk0_clk_src,
875         .clkr.hw.init = &(struct clk_init_data){
876                 .name = "mclk0_clk_src",
877                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
878                 .num_parents = 5,
879                 .ops = &clk_rcg2_ops,
880         },
881 };
882
883 static struct clk_rcg2 mclk1_clk_src = {
884         .cmd_rcgr = 0x3390,
885         .mnd_width = 8,
886         .hid_width = 5,
887         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
888         .freq_tbl = ftbl_mclk0_clk_src,
889         .clkr.hw.init = &(struct clk_init_data){
890                 .name = "mclk1_clk_src",
891                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
892                 .num_parents = 5,
893                 .ops = &clk_rcg2_ops,
894         },
895 };
896
897 static struct clk_rcg2 mclk2_clk_src = {
898         .cmd_rcgr = 0x33c0,
899         .mnd_width = 8,
900         .hid_width = 5,
901         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
902         .freq_tbl = ftbl_mclk0_clk_src,
903         .clkr.hw.init = &(struct clk_init_data){
904                 .name = "mclk2_clk_src",
905                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
906                 .num_parents = 5,
907                 .ops = &clk_rcg2_ops,
908         },
909 };
910
911 static struct clk_rcg2 mclk3_clk_src = {
912         .cmd_rcgr = 0x33f0,
913         .mnd_width = 8,
914         .hid_width = 5,
915         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
916         .freq_tbl = ftbl_mclk0_clk_src,
917         .clkr.hw.init = &(struct clk_init_data){
918                 .name = "mclk3_clk_src",
919                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
920                 .num_parents = 5,
921                 .ops = &clk_rcg2_ops,
922         },
923 };
924
925 static const struct freq_tbl ftbl_cci_clk_src[] = {
926         F(19200000, P_XO, 1, 0, 0),
927         F(37500000, P_GPLL0, 16, 0, 0),
928         F(50000000, P_GPLL0, 12, 0, 0),
929         F(100000000, P_GPLL0, 6, 0, 0),
930         { }
931 };
932
933 static struct clk_rcg2 cci_clk_src = {
934         .cmd_rcgr = 0x3300,
935         .mnd_width = 8,
936         .hid_width = 5,
937         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
938         .freq_tbl = ftbl_cci_clk_src,
939         .clkr.hw.init = &(struct clk_init_data){
940                 .name = "cci_clk_src",
941                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
942                 .num_parents = 5,
943                 .ops = &clk_rcg2_ops,
944         },
945 };
946
947 static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
948         F(100000000, P_GPLL0_DIV, 3, 0, 0),
949         F(200000000, P_GPLL0, 3, 0, 0),
950         F(266666667, P_MMPLL0, 3, 0, 0),
951         { }
952 };
953
954 static struct clk_rcg2 csi0phytimer_clk_src = {
955         .cmd_rcgr = 0x3000,
956         .hid_width = 5,
957         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
958         .freq_tbl = ftbl_csi0phytimer_clk_src,
959         .clkr.hw.init = &(struct clk_init_data){
960                 .name = "csi0phytimer_clk_src",
961                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
962                 .num_parents = 7,
963                 .ops = &clk_rcg2_ops,
964         },
965 };
966
967 static struct clk_rcg2 csi1phytimer_clk_src = {
968         .cmd_rcgr = 0x3030,
969         .hid_width = 5,
970         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
971         .freq_tbl = ftbl_csi0phytimer_clk_src,
972         .clkr.hw.init = &(struct clk_init_data){
973                 .name = "csi1phytimer_clk_src",
974                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
975                 .num_parents = 7,
976                 .ops = &clk_rcg2_ops,
977         },
978 };
979
980 static struct clk_rcg2 csi2phytimer_clk_src = {
981         .cmd_rcgr = 0x3060,
982         .hid_width = 5,
983         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
984         .freq_tbl = ftbl_csi0phytimer_clk_src,
985         .clkr.hw.init = &(struct clk_init_data){
986                 .name = "csi2phytimer_clk_src",
987                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
988                 .num_parents = 7,
989                 .ops = &clk_rcg2_ops,
990         },
991 };
992
993 static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = {
994         F(100000000, P_GPLL0_DIV, 3, 0, 0),
995         F(200000000, P_GPLL0, 3, 0, 0),
996         F(320000000, P_MMPLL4, 3, 0, 0),
997         F(384000000, P_MMPLL4, 2.5, 0, 0),
998         { }
999 };
1000
1001 static struct clk_rcg2 csiphy0_3p_clk_src = {
1002         .cmd_rcgr = 0x3240,
1003         .hid_width = 5,
1004         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1005         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1006         .clkr.hw.init = &(struct clk_init_data){
1007                 .name = "csiphy0_3p_clk_src",
1008                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1009                 .num_parents = 7,
1010                 .ops = &clk_rcg2_ops,
1011         },
1012 };
1013
1014 static struct clk_rcg2 csiphy1_3p_clk_src = {
1015         .cmd_rcgr = 0x3260,
1016         .hid_width = 5,
1017         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1018         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1019         .clkr.hw.init = &(struct clk_init_data){
1020                 .name = "csiphy1_3p_clk_src",
1021                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1022                 .num_parents = 7,
1023                 .ops = &clk_rcg2_ops,
1024         },
1025 };
1026
1027 static struct clk_rcg2 csiphy2_3p_clk_src = {
1028         .cmd_rcgr = 0x3280,
1029         .hid_width = 5,
1030         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1031         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1032         .clkr.hw.init = &(struct clk_init_data){
1033                 .name = "csiphy2_3p_clk_src",
1034                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1035                 .num_parents = 7,
1036                 .ops = &clk_rcg2_ops,
1037         },
1038 };
1039
1040 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1041         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1042         F(150000000, P_GPLL0, 4, 0, 0),
1043         F(228571429, P_MMPLL0, 3.5, 0, 0),
1044         F(266666667, P_MMPLL0, 3, 0, 0),
1045         F(320000000, P_MMPLL0, 2.5, 0, 0),
1046         F(480000000, P_MMPLL4, 2, 0, 0),
1047         { }
1048 };
1049
1050 static struct clk_rcg2 jpeg0_clk_src = {
1051         .cmd_rcgr = 0x3500,
1052         .hid_width = 5,
1053         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1054         .freq_tbl = ftbl_jpeg0_clk_src,
1055         .clkr.hw.init = &(struct clk_init_data){
1056                 .name = "jpeg0_clk_src",
1057                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1058                 .num_parents = 7,
1059                 .ops = &clk_rcg2_ops,
1060         },
1061 };
1062
1063 static const struct freq_tbl ftbl_jpeg2_clk_src[] = {
1064         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1065         F(150000000, P_GPLL0, 4, 0, 0),
1066         F(228571429, P_MMPLL0, 3.5, 0, 0),
1067         F(266666667, P_MMPLL0, 3, 0, 0),
1068         F(320000000, P_MMPLL0, 2.5, 0, 0),
1069         { }
1070 };
1071
1072 static struct clk_rcg2 jpeg2_clk_src = {
1073         .cmd_rcgr = 0x3540,
1074         .hid_width = 5,
1075         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1076         .freq_tbl = ftbl_jpeg2_clk_src,
1077         .clkr.hw.init = &(struct clk_init_data){
1078                 .name = "jpeg2_clk_src",
1079                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1080                 .num_parents = 7,
1081                 .ops = &clk_rcg2_ops,
1082         },
1083 };
1084
1085 static struct clk_rcg2 jpeg_dma_clk_src = {
1086         .cmd_rcgr = 0x3560,
1087         .hid_width = 5,
1088         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1089         .freq_tbl = ftbl_jpeg0_clk_src,
1090         .clkr.hw.init = &(struct clk_init_data){
1091                 .name = "jpeg_dma_clk_src",
1092                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1093                 .num_parents = 7,
1094                 .ops = &clk_rcg2_ops,
1095         },
1096 };
1097
1098 static const struct freq_tbl ftbl_vfe0_clk_src[] = {
1099         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1100         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1101         F(300000000, P_GPLL0, 2, 0, 0),
1102         F(320000000, P_MMPLL0, 2.5, 0, 0),
1103         F(480000000, P_MMPLL4, 2, 0, 0),
1104         F(600000000, P_GPLL0, 1, 0, 0),
1105         { }
1106 };
1107
1108 static struct clk_rcg2 vfe0_clk_src = {
1109         .cmd_rcgr = 0x3600,
1110         .hid_width = 5,
1111         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1112         .freq_tbl = ftbl_vfe0_clk_src,
1113         .clkr.hw.init = &(struct clk_init_data){
1114                 .name = "vfe0_clk_src",
1115                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1116                 .num_parents = 7,
1117                 .ops = &clk_rcg2_ops,
1118         },
1119 };
1120
1121 static struct clk_rcg2 vfe1_clk_src = {
1122         .cmd_rcgr = 0x3620,
1123         .hid_width = 5,
1124         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1125         .freq_tbl = ftbl_vfe0_clk_src,
1126         .clkr.hw.init = &(struct clk_init_data){
1127                 .name = "vfe1_clk_src",
1128                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1129                 .num_parents = 7,
1130                 .ops = &clk_rcg2_ops,
1131         },
1132 };
1133
1134 static const struct freq_tbl ftbl_cpp_clk_src[] = {
1135         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1136         F(200000000, P_GPLL0, 3, 0, 0),
1137         F(320000000, P_MMPLL0, 2.5, 0, 0),
1138         F(480000000, P_MMPLL4, 2, 0, 0),
1139         F(640000000, P_MMPLL4, 1.5, 0, 0),
1140         { }
1141 };
1142
1143 static struct clk_rcg2 cpp_clk_src = {
1144         .cmd_rcgr = 0x3640,
1145         .hid_width = 5,
1146         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1147         .freq_tbl = ftbl_cpp_clk_src,
1148         .clkr.hw.init = &(struct clk_init_data){
1149                 .name = "cpp_clk_src",
1150                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1151                 .num_parents = 7,
1152                 .ops = &clk_rcg2_ops,
1153         },
1154 };
1155
1156 static const struct freq_tbl ftbl_csi0_clk_src[] = {
1157         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1158         F(200000000, P_GPLL0, 3, 0, 0),
1159         F(266666667, P_MMPLL0, 3, 0, 0),
1160         F(480000000, P_MMPLL4, 2, 0, 0),
1161         F(600000000, P_GPLL0, 1, 0, 0),
1162         { }
1163 };
1164
1165 static struct clk_rcg2 csi0_clk_src = {
1166         .cmd_rcgr = 0x3090,
1167         .hid_width = 5,
1168         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1169         .freq_tbl = ftbl_csi0_clk_src,
1170         .clkr.hw.init = &(struct clk_init_data){
1171                 .name = "csi0_clk_src",
1172                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1173                 .num_parents = 7,
1174                 .ops = &clk_rcg2_ops,
1175         },
1176 };
1177
1178 static struct clk_rcg2 csi1_clk_src = {
1179         .cmd_rcgr = 0x3100,
1180         .hid_width = 5,
1181         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1182         .freq_tbl = ftbl_csi0_clk_src,
1183         .clkr.hw.init = &(struct clk_init_data){
1184                 .name = "csi1_clk_src",
1185                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1186                 .num_parents = 7,
1187                 .ops = &clk_rcg2_ops,
1188         },
1189 };
1190
1191 static struct clk_rcg2 csi2_clk_src = {
1192         .cmd_rcgr = 0x3160,
1193         .hid_width = 5,
1194         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1195         .freq_tbl = ftbl_csi0_clk_src,
1196         .clkr.hw.init = &(struct clk_init_data){
1197                 .name = "csi2_clk_src",
1198                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1199                 .num_parents = 7,
1200                 .ops = &clk_rcg2_ops,
1201         },
1202 };
1203
1204 static struct clk_rcg2 csi3_clk_src = {
1205         .cmd_rcgr = 0x31c0,
1206         .hid_width = 5,
1207         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1208         .freq_tbl = ftbl_csi0_clk_src,
1209         .clkr.hw.init = &(struct clk_init_data){
1210                 .name = "csi3_clk_src",
1211                 .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1212                 .num_parents = 7,
1213                 .ops = &clk_rcg2_ops,
1214         },
1215 };
1216
1217 static const struct freq_tbl ftbl_fd_core_clk_src[] = {
1218         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1219         F(200000000, P_GPLL0, 3, 0, 0),
1220         F(400000000, P_MMPLL0, 2, 0, 0),
1221         { }
1222 };
1223
1224 static struct clk_rcg2 fd_core_clk_src = {
1225         .cmd_rcgr = 0x3b00,
1226         .hid_width = 5,
1227         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
1228         .freq_tbl = ftbl_fd_core_clk_src,
1229         .clkr.hw.init = &(struct clk_init_data){
1230                 .name = "fd_core_clk_src",
1231                 .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
1232                 .num_parents = 5,
1233                 .ops = &clk_rcg2_ops,
1234         },
1235 };
1236
1237 static struct clk_branch mmss_mmagic_ahb_clk = {
1238         .halt_reg = 0x5024,
1239         .clkr = {
1240                 .enable_reg = 0x5024,
1241                 .enable_mask = BIT(0),
1242                 .hw.init = &(struct clk_init_data){
1243                         .name = "mmss_mmagic_ahb_clk",
1244                         .parent_names = (const char *[]){ "ahb_clk_src" },
1245                         .num_parents = 1,
1246                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1247                         .ops = &clk_branch2_ops,
1248                 },
1249         },
1250 };
1251
1252 static struct clk_branch mmss_mmagic_cfg_ahb_clk = {
1253         .halt_reg = 0x5054,
1254         .clkr = {
1255                 .enable_reg = 0x5054,
1256                 .enable_mask = BIT(0),
1257                 .hw.init = &(struct clk_init_data){
1258                         .name = "mmss_mmagic_cfg_ahb_clk",
1259                         .parent_names = (const char *[]){ "ahb_clk_src" },
1260                         .num_parents = 1,
1261                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1262                         .ops = &clk_branch2_ops,
1263                 },
1264         },
1265 };
1266
1267 static struct clk_branch mmss_misc_ahb_clk = {
1268         .halt_reg = 0x5018,
1269         .clkr = {
1270                 .enable_reg = 0x5018,
1271                 .enable_mask = BIT(0),
1272                 .hw.init = &(struct clk_init_data){
1273                         .name = "mmss_misc_ahb_clk",
1274                         .parent_names = (const char *[]){ "ahb_clk_src" },
1275                         .num_parents = 1,
1276                         .flags = CLK_SET_RATE_PARENT,
1277                         .ops = &clk_branch2_ops,
1278                 },
1279         },
1280 };
1281
1282 static struct clk_branch mmss_misc_cxo_clk = {
1283         .halt_reg = 0x5014,
1284         .clkr = {
1285                 .enable_reg = 0x5014,
1286                 .enable_mask = BIT(0),
1287                 .hw.init = &(struct clk_init_data){
1288                         .name = "mmss_misc_cxo_clk",
1289                         .parent_names = (const char *[]){ "xo" },
1290                         .num_parents = 1,
1291                         .ops = &clk_branch2_ops,
1292                 },
1293         },
1294 };
1295
1296 static struct clk_branch mmss_mmagic_maxi_clk = {
1297         .halt_reg = 0x5074,
1298         .clkr = {
1299                 .enable_reg = 0x5074,
1300                 .enable_mask = BIT(0),
1301                 .hw.init = &(struct clk_init_data){
1302                         .name = "mmss_mmagic_maxi_clk",
1303                         .parent_names = (const char *[]){ "maxi_clk_src" },
1304                         .num_parents = 1,
1305                         .flags = CLK_SET_RATE_PARENT,
1306                         .ops = &clk_branch2_ops,
1307                 },
1308         },
1309 };
1310
1311 static struct clk_branch mmagic_camss_axi_clk = {
1312         .halt_reg = 0x3c44,
1313         .clkr = {
1314                 .enable_reg = 0x3c44,
1315                 .enable_mask = BIT(0),
1316                 .hw.init = &(struct clk_init_data){
1317                         .name = "mmagic_camss_axi_clk",
1318                         .parent_names = (const char *[]){ "axi_clk_src" },
1319                         .num_parents = 1,
1320                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1321                         .ops = &clk_branch2_ops,
1322                 },
1323         },
1324 };
1325
1326 static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = {
1327         .halt_reg = 0x3c48,
1328         .clkr = {
1329                 .enable_reg = 0x3c48,
1330                 .enable_mask = BIT(0),
1331                 .hw.init = &(struct clk_init_data){
1332                         .name = "mmagic_camss_noc_cfg_ahb_clk",
1333                         .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1334                         .num_parents = 1,
1335                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1336                         .ops = &clk_branch2_ops,
1337                 },
1338         },
1339 };
1340
1341 static struct clk_branch smmu_vfe_ahb_clk = {
1342         .halt_reg = 0x3c04,
1343         .clkr = {
1344                 .enable_reg = 0x3c04,
1345                 .enable_mask = BIT(0),
1346                 .hw.init = &(struct clk_init_data){
1347                         .name = "smmu_vfe_ahb_clk",
1348                         .parent_names = (const char *[]){ "ahb_clk_src" },
1349                         .num_parents = 1,
1350                         .flags = CLK_SET_RATE_PARENT,
1351                         .ops = &clk_branch2_ops,
1352                 },
1353         },
1354 };
1355
1356 static struct clk_branch smmu_vfe_axi_clk = {
1357         .halt_reg = 0x3c08,
1358         .clkr = {
1359                 .enable_reg = 0x3c08,
1360                 .enable_mask = BIT(0),
1361                 .hw.init = &(struct clk_init_data){
1362                         .name = "smmu_vfe_axi_clk",
1363                         .parent_names = (const char *[]){ "axi_clk_src" },
1364                         .num_parents = 1,
1365                         .flags = CLK_SET_RATE_PARENT,
1366                         .ops = &clk_branch2_ops,
1367                 },
1368         },
1369 };
1370
1371 static struct clk_branch smmu_cpp_ahb_clk = {
1372         .halt_reg = 0x3c14,
1373         .clkr = {
1374                 .enable_reg = 0x3c14,
1375                 .enable_mask = BIT(0),
1376                 .hw.init = &(struct clk_init_data){
1377                         .name = "smmu_cpp_ahb_clk",
1378                         .parent_names = (const char *[]){ "ahb_clk_src" },
1379                         .num_parents = 1,
1380                         .flags = CLK_SET_RATE_PARENT,
1381                         .ops = &clk_branch2_ops,
1382                 },
1383         },
1384 };
1385
1386 static struct clk_branch smmu_cpp_axi_clk = {
1387         .halt_reg = 0x3c18,
1388         .clkr = {
1389                 .enable_reg = 0x3c18,
1390                 .enable_mask = BIT(0),
1391                 .hw.init = &(struct clk_init_data){
1392                         .name = "smmu_cpp_axi_clk",
1393                         .parent_names = (const char *[]){ "axi_clk_src" },
1394                         .num_parents = 1,
1395                         .flags = CLK_SET_RATE_PARENT,
1396                         .ops = &clk_branch2_ops,
1397                 },
1398         },
1399 };
1400
1401 static struct clk_branch smmu_jpeg_ahb_clk = {
1402         .halt_reg = 0x3c24,
1403         .clkr = {
1404                 .enable_reg = 0x3c24,
1405                 .enable_mask = BIT(0),
1406                 .hw.init = &(struct clk_init_data){
1407                         .name = "smmu_jpeg_ahb_clk",
1408                         .parent_names = (const char *[]){ "ahb_clk_src" },
1409                         .num_parents = 1,
1410                         .flags = CLK_SET_RATE_PARENT,
1411                         .ops = &clk_branch2_ops,
1412                 },
1413         },
1414 };
1415
1416 static struct clk_branch smmu_jpeg_axi_clk = {
1417         .halt_reg = 0x3c28,
1418         .clkr = {
1419                 .enable_reg = 0x3c28,
1420                 .enable_mask = BIT(0),
1421                 .hw.init = &(struct clk_init_data){
1422                         .name = "smmu_jpeg_axi_clk",
1423                         .parent_names = (const char *[]){ "axi_clk_src" },
1424                         .num_parents = 1,
1425                         .flags = CLK_SET_RATE_PARENT,
1426                         .ops = &clk_branch2_ops,
1427                 },
1428         },
1429 };
1430
1431 static struct clk_branch mmagic_mdss_axi_clk = {
1432         .halt_reg = 0x2474,
1433         .clkr = {
1434                 .enable_reg = 0x2474,
1435                 .enable_mask = BIT(0),
1436                 .hw.init = &(struct clk_init_data){
1437                         .name = "mmagic_mdss_axi_clk",
1438                         .parent_names = (const char *[]){ "axi_clk_src" },
1439                         .num_parents = 1,
1440                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1441                         .ops = &clk_branch2_ops,
1442                 },
1443         },
1444 };
1445
1446 static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = {
1447         .halt_reg = 0x2478,
1448         .clkr = {
1449                 .enable_reg = 0x2478,
1450                 .enable_mask = BIT(0),
1451                 .hw.init = &(struct clk_init_data){
1452                         .name = "mmagic_mdss_noc_cfg_ahb_clk",
1453                         .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1454                         .num_parents = 1,
1455                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1456                         .ops = &clk_branch2_ops,
1457                 },
1458         },
1459 };
1460
1461 static struct clk_branch smmu_rot_ahb_clk = {
1462         .halt_reg = 0x2444,
1463         .clkr = {
1464                 .enable_reg = 0x2444,
1465                 .enable_mask = BIT(0),
1466                 .hw.init = &(struct clk_init_data){
1467                         .name = "smmu_rot_ahb_clk",
1468                         .parent_names = (const char *[]){ "ahb_clk_src" },
1469                         .num_parents = 1,
1470                         .flags = CLK_SET_RATE_PARENT,
1471                         .ops = &clk_branch2_ops,
1472                 },
1473         },
1474 };
1475
1476 static struct clk_branch smmu_rot_axi_clk = {
1477         .halt_reg = 0x2448,
1478         .clkr = {
1479                 .enable_reg = 0x2448,
1480                 .enable_mask = BIT(0),
1481                 .hw.init = &(struct clk_init_data){
1482                         .name = "smmu_rot_axi_clk",
1483                         .parent_names = (const char *[]){ "axi_clk_src" },
1484                         .num_parents = 1,
1485                         .flags = CLK_SET_RATE_PARENT,
1486                         .ops = &clk_branch2_ops,
1487                 },
1488         },
1489 };
1490
1491 static struct clk_branch smmu_mdp_ahb_clk = {
1492         .halt_reg = 0x2454,
1493         .clkr = {
1494                 .enable_reg = 0x2454,
1495                 .enable_mask = BIT(0),
1496                 .hw.init = &(struct clk_init_data){
1497                         .name = "smmu_mdp_ahb_clk",
1498                         .parent_names = (const char *[]){ "ahb_clk_src" },
1499                         .num_parents = 1,
1500                         .flags = CLK_SET_RATE_PARENT,
1501                         .ops = &clk_branch2_ops,
1502                 },
1503         },
1504 };
1505
1506 static struct clk_branch smmu_mdp_axi_clk = {
1507         .halt_reg = 0x2458,
1508         .clkr = {
1509                 .enable_reg = 0x2458,
1510                 .enable_mask = BIT(0),
1511                 .hw.init = &(struct clk_init_data){
1512                         .name = "smmu_mdp_axi_clk",
1513                         .parent_names = (const char *[]){ "axi_clk_src" },
1514                         .num_parents = 1,
1515                         .flags = CLK_SET_RATE_PARENT,
1516                         .ops = &clk_branch2_ops,
1517                 },
1518         },
1519 };
1520
1521 static struct clk_branch mmagic_video_axi_clk = {
1522         .halt_reg = 0x1194,
1523         .clkr = {
1524                 .enable_reg = 0x1194,
1525                 .enable_mask = BIT(0),
1526                 .hw.init = &(struct clk_init_data){
1527                         .name = "mmagic_video_axi_clk",
1528                         .parent_names = (const char *[]){ "axi_clk_src" },
1529                         .num_parents = 1,
1530                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1531                         .ops = &clk_branch2_ops,
1532                 },
1533         },
1534 };
1535
1536 static struct clk_branch mmagic_video_noc_cfg_ahb_clk = {
1537         .halt_reg = 0x1198,
1538         .clkr = {
1539                 .enable_reg = 0x1198,
1540                 .enable_mask = BIT(0),
1541                 .hw.init = &(struct clk_init_data){
1542                         .name = "mmagic_video_noc_cfg_ahb_clk",
1543                         .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1544                         .num_parents = 1,
1545                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1546                         .ops = &clk_branch2_ops,
1547                 },
1548         },
1549 };
1550
1551 static struct clk_branch smmu_video_ahb_clk = {
1552         .halt_reg = 0x1174,
1553         .clkr = {
1554                 .enable_reg = 0x1174,
1555                 .enable_mask = BIT(0),
1556                 .hw.init = &(struct clk_init_data){
1557                         .name = "smmu_video_ahb_clk",
1558                         .parent_names = (const char *[]){ "ahb_clk_src" },
1559                         .num_parents = 1,
1560                         .flags = CLK_SET_RATE_PARENT,
1561                         .ops = &clk_branch2_ops,
1562                 },
1563         },
1564 };
1565
1566 static struct clk_branch smmu_video_axi_clk = {
1567         .halt_reg = 0x1178,
1568         .clkr = {
1569                 .enable_reg = 0x1178,
1570                 .enable_mask = BIT(0),
1571                 .hw.init = &(struct clk_init_data){
1572                         .name = "smmu_video_axi_clk",
1573                         .parent_names = (const char *[]){ "axi_clk_src" },
1574                         .num_parents = 1,
1575                         .flags = CLK_SET_RATE_PARENT,
1576                         .ops = &clk_branch2_ops,
1577                 },
1578         },
1579 };
1580
1581 static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = {
1582         .halt_reg = 0x5298,
1583         .clkr = {
1584                 .enable_reg = 0x5298,
1585                 .enable_mask = BIT(0),
1586                 .hw.init = &(struct clk_init_data){
1587                         .name = "mmagic_bimc_noc_cfg_ahb_clk",
1588                         .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1589                         .num_parents = 1,
1590                         .flags = CLK_SET_RATE_PARENT,
1591                         .ops = &clk_branch2_ops,
1592                 },
1593         },
1594 };
1595
1596 static struct clk_branch gpu_gx_gfx3d_clk = {
1597         .halt_reg = 0x4028,
1598         .clkr = {
1599                 .enable_reg = 0x4028,
1600                 .enable_mask = BIT(0),
1601                 .hw.init = &(struct clk_init_data){
1602                         .name = "gpu_gx_gfx3d_clk",
1603                         .parent_names = (const char *[]){ "gfx3d_clk_src" },
1604                         .num_parents = 1,
1605                         .flags = CLK_SET_RATE_PARENT,
1606                         .ops = &clk_branch2_ops,
1607                 },
1608         },
1609 };
1610
1611 static struct clk_branch gpu_gx_rbbmtimer_clk = {
1612         .halt_reg = 0x40b0,
1613         .clkr = {
1614                 .enable_reg = 0x40b0,
1615                 .enable_mask = BIT(0),
1616                 .hw.init = &(struct clk_init_data){
1617                         .name = "gpu_gx_rbbmtimer_clk",
1618                         .parent_names = (const char *[]){ "rbbmtimer_clk_src" },
1619                         .num_parents = 1,
1620                         .flags = CLK_SET_RATE_PARENT,
1621                         .ops = &clk_branch2_ops,
1622                 },
1623         },
1624 };
1625
1626 static struct clk_branch gpu_ahb_clk = {
1627         .halt_reg = 0x403c,
1628         .clkr = {
1629                 .enable_reg = 0x403c,
1630                 .enable_mask = BIT(0),
1631                 .hw.init = &(struct clk_init_data){
1632                         .name = "gpu_ahb_clk",
1633                         .parent_names = (const char *[]){ "ahb_clk_src" },
1634                         .num_parents = 1,
1635                         .flags = CLK_SET_RATE_PARENT,
1636                         .ops = &clk_branch2_ops,
1637                 },
1638         },
1639 };
1640
1641 static struct clk_branch gpu_aon_isense_clk = {
1642         .halt_reg = 0x4044,
1643         .clkr = {
1644                 .enable_reg = 0x4044,
1645                 .enable_mask = BIT(0),
1646                 .hw.init = &(struct clk_init_data){
1647                         .name = "gpu_aon_isense_clk",
1648                         .parent_names = (const char *[]){ "isense_clk_src" },
1649                         .num_parents = 1,
1650                         .flags = CLK_SET_RATE_PARENT,
1651                         .ops = &clk_branch2_ops,
1652                 },
1653         },
1654 };
1655
1656 static struct clk_branch vmem_maxi_clk = {
1657         .halt_reg = 0x1204,
1658         .clkr = {
1659                 .enable_reg = 0x1204,
1660                 .enable_mask = BIT(0),
1661                 .hw.init = &(struct clk_init_data){
1662                         .name = "vmem_maxi_clk",
1663                         .parent_names = (const char *[]){ "maxi_clk_src" },
1664                         .num_parents = 1,
1665                         .flags = CLK_SET_RATE_PARENT,
1666                         .ops = &clk_branch2_ops,
1667                 },
1668         },
1669 };
1670
1671 static struct clk_branch vmem_ahb_clk = {
1672         .halt_reg = 0x1208,
1673         .clkr = {
1674                 .enable_reg = 0x1208,
1675                 .enable_mask = BIT(0),
1676                 .hw.init = &(struct clk_init_data){
1677                         .name = "vmem_ahb_clk",
1678                         .parent_names = (const char *[]){ "ahb_clk_src" },
1679                         .num_parents = 1,
1680                         .flags = CLK_SET_RATE_PARENT,
1681                         .ops = &clk_branch2_ops,
1682                 },
1683         },
1684 };
1685
1686 static struct clk_branch mmss_rbcpr_clk = {
1687         .halt_reg = 0x4084,
1688         .clkr = {
1689                 .enable_reg = 0x4084,
1690                 .enable_mask = BIT(0),
1691                 .hw.init = &(struct clk_init_data){
1692                         .name = "mmss_rbcpr_clk",
1693                         .parent_names = (const char *[]){ "rbcpr_clk_src" },
1694                         .num_parents = 1,
1695                         .flags = CLK_SET_RATE_PARENT,
1696                         .ops = &clk_branch2_ops,
1697                 },
1698         },
1699 };
1700
1701 static struct clk_branch mmss_rbcpr_ahb_clk = {
1702         .halt_reg = 0x4088,
1703         .clkr = {
1704                 .enable_reg = 0x4088,
1705                 .enable_mask = BIT(0),
1706                 .hw.init = &(struct clk_init_data){
1707                         .name = "mmss_rbcpr_ahb_clk",
1708                         .parent_names = (const char *[]){ "ahb_clk_src" },
1709                         .num_parents = 1,
1710                         .flags = CLK_SET_RATE_PARENT,
1711                         .ops = &clk_branch2_ops,
1712                 },
1713         },
1714 };
1715
1716 static struct clk_branch video_core_clk = {
1717         .halt_reg = 0x1028,
1718         .clkr = {
1719                 .enable_reg = 0x1028,
1720                 .enable_mask = BIT(0),
1721                 .hw.init = &(struct clk_init_data){
1722                         .name = "video_core_clk",
1723                         .parent_names = (const char *[]){ "video_core_clk_src" },
1724                         .num_parents = 1,
1725                         .flags = CLK_SET_RATE_PARENT,
1726                         .ops = &clk_branch2_ops,
1727                 },
1728         },
1729 };
1730
1731 static struct clk_branch video_axi_clk = {
1732         .halt_reg = 0x1034,
1733         .clkr = {
1734                 .enable_reg = 0x1034,
1735                 .enable_mask = BIT(0),
1736                 .hw.init = &(struct clk_init_data){
1737                         .name = "video_axi_clk",
1738                         .parent_names = (const char *[]){ "axi_clk_src" },
1739                         .num_parents = 1,
1740                         .flags = CLK_SET_RATE_PARENT,
1741                         .ops = &clk_branch2_ops,
1742                 },
1743         },
1744 };
1745
1746 static struct clk_branch video_maxi_clk = {
1747         .halt_reg = 0x1038,
1748         .clkr = {
1749                 .enable_reg = 0x1038,
1750                 .enable_mask = BIT(0),
1751                 .hw.init = &(struct clk_init_data){
1752                         .name = "video_maxi_clk",
1753                         .parent_names = (const char *[]){ "maxi_clk_src" },
1754                         .num_parents = 1,
1755                         .flags = CLK_SET_RATE_PARENT,
1756                         .ops = &clk_branch2_ops,
1757                 },
1758         },
1759 };
1760
1761 static struct clk_branch video_ahb_clk = {
1762         .halt_reg = 0x1030,
1763         .clkr = {
1764                 .enable_reg = 0x1030,
1765                 .enable_mask = BIT(0),
1766                 .hw.init = &(struct clk_init_data){
1767                         .name = "video_ahb_clk",
1768                         .parent_names = (const char *[]){ "ahb_clk_src" },
1769                         .num_parents = 1,
1770                         .flags = CLK_SET_RATE_PARENT,
1771                         .ops = &clk_branch2_ops,
1772                 },
1773         },
1774 };
1775
1776 static struct clk_branch video_subcore0_clk = {
1777         .halt_reg = 0x1048,
1778         .clkr = {
1779                 .enable_reg = 0x1048,
1780                 .enable_mask = BIT(0),
1781                 .hw.init = &(struct clk_init_data){
1782                         .name = "video_subcore0_clk",
1783                         .parent_names = (const char *[]){ "video_subcore0_clk_src" },
1784                         .num_parents = 1,
1785                         .flags = CLK_SET_RATE_PARENT,
1786                         .ops = &clk_branch2_ops,
1787                 },
1788         },
1789 };
1790
1791 static struct clk_branch video_subcore1_clk = {
1792         .halt_reg = 0x104c,
1793         .clkr = {
1794                 .enable_reg = 0x104c,
1795                 .enable_mask = BIT(0),
1796                 .hw.init = &(struct clk_init_data){
1797                         .name = "video_subcore1_clk",
1798                         .parent_names = (const char *[]){ "video_subcore1_clk_src" },
1799                         .num_parents = 1,
1800                         .flags = CLK_SET_RATE_PARENT,
1801                         .ops = &clk_branch2_ops,
1802                 },
1803         },
1804 };
1805
1806 static struct clk_branch mdss_ahb_clk = {
1807         .halt_reg = 0x2308,
1808         .clkr = {
1809                 .enable_reg = 0x2308,
1810                 .enable_mask = BIT(0),
1811                 .hw.init = &(struct clk_init_data){
1812                         .name = "mdss_ahb_clk",
1813                         .parent_names = (const char *[]){ "ahb_clk_src" },
1814                         .num_parents = 1,
1815                         .flags = CLK_SET_RATE_PARENT,
1816                         .ops = &clk_branch2_ops,
1817                 },
1818         },
1819 };
1820
1821 static struct clk_branch mdss_hdmi_ahb_clk = {
1822         .halt_reg = 0x230c,
1823         .clkr = {
1824                 .enable_reg = 0x230c,
1825                 .enable_mask = BIT(0),
1826                 .hw.init = &(struct clk_init_data){
1827                         .name = "mdss_hdmi_ahb_clk",
1828                         .parent_names = (const char *[]){ "ahb_clk_src" },
1829                         .num_parents = 1,
1830                         .flags = CLK_SET_RATE_PARENT,
1831                         .ops = &clk_branch2_ops,
1832                 },
1833         },
1834 };
1835
1836 static struct clk_branch mdss_axi_clk = {
1837         .halt_reg = 0x2310,
1838         .clkr = {
1839                 .enable_reg = 0x2310,
1840                 .enable_mask = BIT(0),
1841                 .hw.init = &(struct clk_init_data){
1842                         .name = "mdss_axi_clk",
1843                         .parent_names = (const char *[]){ "axi_clk_src" },
1844                         .num_parents = 1,
1845                         .flags = CLK_SET_RATE_PARENT,
1846                         .ops = &clk_branch2_ops,
1847                 },
1848         },
1849 };
1850
1851 static struct clk_branch mdss_pclk0_clk = {
1852         .halt_reg = 0x2314,
1853         .clkr = {
1854                 .enable_reg = 0x2314,
1855                 .enable_mask = BIT(0),
1856                 .hw.init = &(struct clk_init_data){
1857                         .name = "mdss_pclk0_clk",
1858                         .parent_names = (const char *[]){ "pclk0_clk_src" },
1859                         .num_parents = 1,
1860                         .flags = CLK_SET_RATE_PARENT,
1861                         .ops = &clk_branch2_ops,
1862                 },
1863         },
1864 };
1865
1866 static struct clk_branch mdss_pclk1_clk = {
1867         .halt_reg = 0x2318,
1868         .clkr = {
1869                 .enable_reg = 0x2318,
1870                 .enable_mask = BIT(0),
1871                 .hw.init = &(struct clk_init_data){
1872                         .name = "mdss_pclk1_clk",
1873                         .parent_names = (const char *[]){ "pclk1_clk_src" },
1874                         .num_parents = 1,
1875                         .flags = CLK_SET_RATE_PARENT,
1876                         .ops = &clk_branch2_ops,
1877                 },
1878         },
1879 };
1880
1881 static struct clk_branch mdss_mdp_clk = {
1882         .halt_reg = 0x231c,
1883         .clkr = {
1884                 .enable_reg = 0x231c,
1885                 .enable_mask = BIT(0),
1886                 .hw.init = &(struct clk_init_data){
1887                         .name = "mdss_mdp_clk",
1888                         .parent_names = (const char *[]){ "mdp_clk_src" },
1889                         .num_parents = 1,
1890                         .flags = CLK_SET_RATE_PARENT,
1891                         .ops = &clk_branch2_ops,
1892                 },
1893         },
1894 };
1895
1896 static struct clk_branch mdss_extpclk_clk = {
1897         .halt_reg = 0x2324,
1898         .clkr = {
1899                 .enable_reg = 0x2324,
1900                 .enable_mask = BIT(0),
1901                 .hw.init = &(struct clk_init_data){
1902                         .name = "mdss_extpclk_clk",
1903                         .parent_names = (const char *[]){ "extpclk_clk_src" },
1904                         .num_parents = 1,
1905                         .flags = CLK_SET_RATE_PARENT,
1906                         .ops = &clk_branch2_ops,
1907                 },
1908         },
1909 };
1910
1911 static struct clk_branch mdss_vsync_clk = {
1912         .halt_reg = 0x2328,
1913         .clkr = {
1914                 .enable_reg = 0x2328,
1915                 .enable_mask = BIT(0),
1916                 .hw.init = &(struct clk_init_data){
1917                         .name = "mdss_vsync_clk",
1918                         .parent_names = (const char *[]){ "vsync_clk_src" },
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_hdmi_clk = {
1927         .halt_reg = 0x2338,
1928         .clkr = {
1929                 .enable_reg = 0x2338,
1930                 .enable_mask = BIT(0),
1931                 .hw.init = &(struct clk_init_data){
1932                         .name = "mdss_hdmi_clk",
1933                         .parent_names = (const char *[]){ "hdmi_clk_src" },
1934                         .num_parents = 1,
1935                         .flags = CLK_SET_RATE_PARENT,
1936                         .ops = &clk_branch2_ops,
1937                 },
1938         },
1939 };
1940
1941 static struct clk_branch mdss_byte0_clk = {
1942         .halt_reg = 0x233c,
1943         .clkr = {
1944                 .enable_reg = 0x233c,
1945                 .enable_mask = BIT(0),
1946                 .hw.init = &(struct clk_init_data){
1947                         .name = "mdss_byte0_clk",
1948                         .parent_names = (const char *[]){ "byte0_clk_src" },
1949                         .num_parents = 1,
1950                         .flags = CLK_SET_RATE_PARENT,
1951                         .ops = &clk_branch2_ops,
1952                 },
1953         },
1954 };
1955
1956 static struct clk_branch mdss_byte1_clk = {
1957         .halt_reg = 0x2340,
1958         .clkr = {
1959                 .enable_reg = 0x2340,
1960                 .enable_mask = BIT(0),
1961                 .hw.init = &(struct clk_init_data){
1962                         .name = "mdss_byte1_clk",
1963                         .parent_names = (const char *[]){ "byte1_clk_src" },
1964                         .num_parents = 1,
1965                         .flags = CLK_SET_RATE_PARENT,
1966                         .ops = &clk_branch2_ops,
1967                 },
1968         },
1969 };
1970
1971 static struct clk_branch mdss_esc0_clk = {
1972         .halt_reg = 0x2344,
1973         .clkr = {
1974                 .enable_reg = 0x2344,
1975                 .enable_mask = BIT(0),
1976                 .hw.init = &(struct clk_init_data){
1977                         .name = "mdss_esc0_clk",
1978                         .parent_names = (const char *[]){ "esc0_clk_src" },
1979                         .num_parents = 1,
1980                         .flags = CLK_SET_RATE_PARENT,
1981                         .ops = &clk_branch2_ops,
1982                 },
1983         },
1984 };
1985
1986 static struct clk_branch mdss_esc1_clk = {
1987         .halt_reg = 0x2348,
1988         .clkr = {
1989                 .enable_reg = 0x2348,
1990                 .enable_mask = BIT(0),
1991                 .hw.init = &(struct clk_init_data){
1992                         .name = "mdss_esc1_clk",
1993                         .parent_names = (const char *[]){ "esc1_clk_src" },
1994                         .num_parents = 1,
1995                         .flags = CLK_SET_RATE_PARENT,
1996                         .ops = &clk_branch2_ops,
1997                 },
1998         },
1999 };
2000
2001 static struct clk_branch camss_top_ahb_clk = {
2002         .halt_reg = 0x3484,
2003         .clkr = {
2004                 .enable_reg = 0x3484,
2005                 .enable_mask = BIT(0),
2006                 .hw.init = &(struct clk_init_data){
2007                         .name = "camss_top_ahb_clk",
2008                         .parent_names = (const char *[]){ "ahb_clk_src" },
2009                         .num_parents = 1,
2010                         .flags = CLK_SET_RATE_PARENT,
2011                         .ops = &clk_branch2_ops,
2012                 },
2013         },
2014 };
2015
2016 static struct clk_branch camss_ahb_clk = {
2017         .halt_reg = 0x348c,
2018         .clkr = {
2019                 .enable_reg = 0x348c,
2020                 .enable_mask = BIT(0),
2021                 .hw.init = &(struct clk_init_data){
2022                         .name = "camss_ahb_clk",
2023                         .parent_names = (const char *[]){ "ahb_clk_src" },
2024                         .num_parents = 1,
2025                         .flags = CLK_SET_RATE_PARENT,
2026                         .ops = &clk_branch2_ops,
2027                 },
2028         },
2029 };
2030
2031 static struct clk_branch camss_micro_ahb_clk = {
2032         .halt_reg = 0x3494,
2033         .clkr = {
2034                 .enable_reg = 0x3494,
2035                 .enable_mask = BIT(0),
2036                 .hw.init = &(struct clk_init_data){
2037                         .name = "camss_micro_ahb_clk",
2038                         .parent_names = (const char *[]){ "ahb_clk_src" },
2039                         .num_parents = 1,
2040                         .flags = CLK_SET_RATE_PARENT,
2041                         .ops = &clk_branch2_ops,
2042                 },
2043         },
2044 };
2045
2046 static struct clk_branch camss_gp0_clk = {
2047         .halt_reg = 0x3444,
2048         .clkr = {
2049                 .enable_reg = 0x3444,
2050                 .enable_mask = BIT(0),
2051                 .hw.init = &(struct clk_init_data){
2052                         .name = "camss_gp0_clk",
2053                         .parent_names = (const char *[]){ "camss_gp0_clk_src" },
2054                         .num_parents = 1,
2055                         .flags = CLK_SET_RATE_PARENT,
2056                         .ops = &clk_branch2_ops,
2057                 },
2058         },
2059 };
2060
2061 static struct clk_branch camss_gp1_clk = {
2062         .halt_reg = 0x3474,
2063         .clkr = {
2064                 .enable_reg = 0x3474,
2065                 .enable_mask = BIT(0),
2066                 .hw.init = &(struct clk_init_data){
2067                         .name = "camss_gp1_clk",
2068                         .parent_names = (const char *[]){ "camss_gp1_clk_src" },
2069                         .num_parents = 1,
2070                         .flags = CLK_SET_RATE_PARENT,
2071                         .ops = &clk_branch2_ops,
2072                 },
2073         },
2074 };
2075
2076 static struct clk_branch camss_mclk0_clk = {
2077         .halt_reg = 0x3384,
2078         .clkr = {
2079                 .enable_reg = 0x3384,
2080                 .enable_mask = BIT(0),
2081                 .hw.init = &(struct clk_init_data){
2082                         .name = "camss_mclk0_clk",
2083                         .parent_names = (const char *[]){ "mclk0_clk_src" },
2084                         .num_parents = 1,
2085                         .flags = CLK_SET_RATE_PARENT,
2086                         .ops = &clk_branch2_ops,
2087                 },
2088         },
2089 };
2090
2091 static struct clk_branch camss_mclk1_clk = {
2092         .halt_reg = 0x33b4,
2093         .clkr = {
2094                 .enable_reg = 0x33b4,
2095                 .enable_mask = BIT(0),
2096                 .hw.init = &(struct clk_init_data){
2097                         .name = "camss_mclk1_clk",
2098                         .parent_names = (const char *[]){ "mclk1_clk_src" },
2099                         .num_parents = 1,
2100                         .flags = CLK_SET_RATE_PARENT,
2101                         .ops = &clk_branch2_ops,
2102                 },
2103         },
2104 };
2105
2106 static struct clk_branch camss_mclk2_clk = {
2107         .halt_reg = 0x33e4,
2108         .clkr = {
2109                 .enable_reg = 0x33e4,
2110                 .enable_mask = BIT(0),
2111                 .hw.init = &(struct clk_init_data){
2112                         .name = "camss_mclk2_clk",
2113                         .parent_names = (const char *[]){ "mclk2_clk_src" },
2114                         .num_parents = 1,
2115                         .flags = CLK_SET_RATE_PARENT,
2116                         .ops = &clk_branch2_ops,
2117                 },
2118         },
2119 };
2120
2121 static struct clk_branch camss_mclk3_clk = {
2122         .halt_reg = 0x3414,
2123         .clkr = {
2124                 .enable_reg = 0x3414,
2125                 .enable_mask = BIT(0),
2126                 .hw.init = &(struct clk_init_data){
2127                         .name = "camss_mclk3_clk",
2128                         .parent_names = (const char *[]){ "mclk3_clk_src" },
2129                         .num_parents = 1,
2130                         .flags = CLK_SET_RATE_PARENT,
2131                         .ops = &clk_branch2_ops,
2132                 },
2133         },
2134 };
2135
2136 static struct clk_branch camss_cci_clk = {
2137         .halt_reg = 0x3344,
2138         .clkr = {
2139                 .enable_reg = 0x3344,
2140                 .enable_mask = BIT(0),
2141                 .hw.init = &(struct clk_init_data){
2142                         .name = "camss_cci_clk",
2143                         .parent_names = (const char *[]){ "cci_clk_src" },
2144                         .num_parents = 1,
2145                         .flags = CLK_SET_RATE_PARENT,
2146                         .ops = &clk_branch2_ops,
2147                 },
2148         },
2149 };
2150
2151 static struct clk_branch camss_cci_ahb_clk = {
2152         .halt_reg = 0x3348,
2153         .clkr = {
2154                 .enable_reg = 0x3348,
2155                 .enable_mask = BIT(0),
2156                 .hw.init = &(struct clk_init_data){
2157                         .name = "camss_cci_ahb_clk",
2158                         .parent_names = (const char *[]){ "ahb_clk_src" },
2159                         .num_parents = 1,
2160                         .flags = CLK_SET_RATE_PARENT,
2161                         .ops = &clk_branch2_ops,
2162                 },
2163         },
2164 };
2165
2166 static struct clk_branch camss_csi0phytimer_clk = {
2167         .halt_reg = 0x3024,
2168         .clkr = {
2169                 .enable_reg = 0x3024,
2170                 .enable_mask = BIT(0),
2171                 .hw.init = &(struct clk_init_data){
2172                         .name = "camss_csi0phytimer_clk",
2173                         .parent_names = (const char *[]){ "csi0phytimer_clk_src" },
2174                         .num_parents = 1,
2175                         .flags = CLK_SET_RATE_PARENT,
2176                         .ops = &clk_branch2_ops,
2177                 },
2178         },
2179 };
2180
2181 static struct clk_branch camss_csi1phytimer_clk = {
2182         .halt_reg = 0x3054,
2183         .clkr = {
2184                 .enable_reg = 0x3054,
2185                 .enable_mask = BIT(0),
2186                 .hw.init = &(struct clk_init_data){
2187                         .name = "camss_csi1phytimer_clk",
2188                         .parent_names = (const char *[]){ "csi1phytimer_clk_src" },
2189                         .num_parents = 1,
2190                         .flags = CLK_SET_RATE_PARENT,
2191                         .ops = &clk_branch2_ops,
2192                 },
2193         },
2194 };
2195
2196 static struct clk_branch camss_csi2phytimer_clk = {
2197         .halt_reg = 0x3084,
2198         .clkr = {
2199                 .enable_reg = 0x3084,
2200                 .enable_mask = BIT(0),
2201                 .hw.init = &(struct clk_init_data){
2202                         .name = "camss_csi2phytimer_clk",
2203                         .parent_names = (const char *[]){ "csi2phytimer_clk_src" },
2204                         .num_parents = 1,
2205                         .flags = CLK_SET_RATE_PARENT,
2206                         .ops = &clk_branch2_ops,
2207                 },
2208         },
2209 };
2210
2211 static struct clk_branch camss_csiphy0_3p_clk = {
2212         .halt_reg = 0x3234,
2213         .clkr = {
2214                 .enable_reg = 0x3234,
2215                 .enable_mask = BIT(0),
2216                 .hw.init = &(struct clk_init_data){
2217                         .name = "camss_csiphy0_3p_clk",
2218                         .parent_names = (const char *[]){ "csiphy0_3p_clk_src" },
2219                         .num_parents = 1,
2220                         .flags = CLK_SET_RATE_PARENT,
2221                         .ops = &clk_branch2_ops,
2222                 },
2223         },
2224 };
2225
2226 static struct clk_branch camss_csiphy1_3p_clk = {
2227         .halt_reg = 0x3254,
2228         .clkr = {
2229                 .enable_reg = 0x3254,
2230                 .enable_mask = BIT(0),
2231                 .hw.init = &(struct clk_init_data){
2232                         .name = "camss_csiphy1_3p_clk",
2233                         .parent_names = (const char *[]){ "csiphy1_3p_clk_src" },
2234                         .num_parents = 1,
2235                         .flags = CLK_SET_RATE_PARENT,
2236                         .ops = &clk_branch2_ops,
2237                 },
2238         },
2239 };
2240
2241 static struct clk_branch camss_csiphy2_3p_clk = {
2242         .halt_reg = 0x3274,
2243         .clkr = {
2244                 .enable_reg = 0x3274,
2245                 .enable_mask = BIT(0),
2246                 .hw.init = &(struct clk_init_data){
2247                         .name = "camss_csiphy2_3p_clk",
2248                         .parent_names = (const char *[]){ "csiphy2_3p_clk_src" },
2249                         .num_parents = 1,
2250                         .flags = CLK_SET_RATE_PARENT,
2251                         .ops = &clk_branch2_ops,
2252                 },
2253         },
2254 };
2255
2256 static struct clk_branch camss_jpeg0_clk = {
2257         .halt_reg = 0x35a8,
2258         .clkr = {
2259                 .enable_reg = 0x35a8,
2260                 .enable_mask = BIT(0),
2261                 .hw.init = &(struct clk_init_data){
2262                         .name = "camss_jpeg0_clk",
2263                         .parent_names = (const char *[]){ "jpeg0_clk_src" },
2264                         .num_parents = 1,
2265                         .flags = CLK_SET_RATE_PARENT,
2266                         .ops = &clk_branch2_ops,
2267                 },
2268         },
2269 };
2270
2271 static struct clk_branch camss_jpeg2_clk = {
2272         .halt_reg = 0x35b0,
2273         .clkr = {
2274                 .enable_reg = 0x35b0,
2275                 .enable_mask = BIT(0),
2276                 .hw.init = &(struct clk_init_data){
2277                         .name = "camss_jpeg2_clk",
2278                         .parent_names = (const char *[]){ "jpeg2_clk_src" },
2279                         .num_parents = 1,
2280                         .flags = CLK_SET_RATE_PARENT,
2281                         .ops = &clk_branch2_ops,
2282                 },
2283         },
2284 };
2285
2286 static struct clk_branch camss_jpeg_dma_clk = {
2287         .halt_reg = 0x35c0,
2288         .clkr = {
2289                 .enable_reg = 0x35c0,
2290                 .enable_mask = BIT(0),
2291                 .hw.init = &(struct clk_init_data){
2292                         .name = "camss_jpeg_dma_clk",
2293                         .parent_names = (const char *[]){ "jpeg_dma_clk_src" },
2294                         .num_parents = 1,
2295                         .flags = CLK_SET_RATE_PARENT,
2296                         .ops = &clk_branch2_ops,
2297                 },
2298         },
2299 };
2300
2301 static struct clk_branch camss_jpeg_ahb_clk = {
2302         .halt_reg = 0x35b4,
2303         .clkr = {
2304                 .enable_reg = 0x35b4,
2305                 .enable_mask = BIT(0),
2306                 .hw.init = &(struct clk_init_data){
2307                         .name = "camss_jpeg_ahb_clk",
2308                         .parent_names = (const char *[]){ "ahb_clk_src" },
2309                         .num_parents = 1,
2310                         .flags = CLK_SET_RATE_PARENT,
2311                         .ops = &clk_branch2_ops,
2312                 },
2313         },
2314 };
2315
2316 static struct clk_branch camss_jpeg_axi_clk = {
2317         .halt_reg = 0x35b8,
2318         .clkr = {
2319                 .enable_reg = 0x35b8,
2320                 .enable_mask = BIT(0),
2321                 .hw.init = &(struct clk_init_data){
2322                         .name = "camss_jpeg_axi_clk",
2323                         .parent_names = (const char *[]){ "axi_clk_src" },
2324                         .num_parents = 1,
2325                         .flags = CLK_SET_RATE_PARENT,
2326                         .ops = &clk_branch2_ops,
2327                 },
2328         },
2329 };
2330
2331 static struct clk_branch camss_vfe_ahb_clk = {
2332         .halt_reg = 0x36b8,
2333         .clkr = {
2334                 .enable_reg = 0x36b8,
2335                 .enable_mask = BIT(0),
2336                 .hw.init = &(struct clk_init_data){
2337                         .name = "camss_vfe_ahb_clk",
2338                         .parent_names = (const char *[]){ "ahb_clk_src" },
2339                         .num_parents = 1,
2340                         .flags = CLK_SET_RATE_PARENT,
2341                         .ops = &clk_branch2_ops,
2342                 },
2343         },
2344 };
2345
2346 static struct clk_branch camss_vfe_axi_clk = {
2347         .halt_reg = 0x36bc,
2348         .clkr = {
2349                 .enable_reg = 0x36bc,
2350                 .enable_mask = BIT(0),
2351                 .hw.init = &(struct clk_init_data){
2352                         .name = "camss_vfe_axi_clk",
2353                         .parent_names = (const char *[]){ "axi_clk_src" },
2354                         .num_parents = 1,
2355                         .flags = CLK_SET_RATE_PARENT,
2356                         .ops = &clk_branch2_ops,
2357                 },
2358         },
2359 };
2360
2361 static struct clk_branch camss_vfe0_clk = {
2362         .halt_reg = 0x36a8,
2363         .clkr = {
2364                 .enable_reg = 0x36a8,
2365                 .enable_mask = BIT(0),
2366                 .hw.init = &(struct clk_init_data){
2367                         .name = "camss_vfe0_clk",
2368                         .parent_names = (const char *[]){ "vfe0_clk_src" },
2369                         .num_parents = 1,
2370                         .flags = CLK_SET_RATE_PARENT,
2371                         .ops = &clk_branch2_ops,
2372                 },
2373         },
2374 };
2375
2376 static struct clk_branch camss_vfe0_stream_clk = {
2377         .halt_reg = 0x3720,
2378         .clkr = {
2379                 .enable_reg = 0x3720,
2380                 .enable_mask = BIT(0),
2381                 .hw.init = &(struct clk_init_data){
2382                         .name = "camss_vfe0_stream_clk",
2383                         .parent_names = (const char *[]){ "vfe0_clk_src" },
2384                         .num_parents = 1,
2385                         .flags = CLK_SET_RATE_PARENT,
2386                         .ops = &clk_branch2_ops,
2387                 },
2388         },
2389 };
2390
2391 static struct clk_branch camss_vfe0_ahb_clk = {
2392         .halt_reg = 0x3668,
2393         .clkr = {
2394                 .enable_reg = 0x3668,
2395                 .enable_mask = BIT(0),
2396                 .hw.init = &(struct clk_init_data){
2397                         .name = "camss_vfe0_ahb_clk",
2398                         .parent_names = (const char *[]){ "ahb_clk_src" },
2399                         .num_parents = 1,
2400                         .flags = CLK_SET_RATE_PARENT,
2401                         .ops = &clk_branch2_ops,
2402                 },
2403         },
2404 };
2405
2406 static struct clk_branch camss_vfe1_clk = {
2407         .halt_reg = 0x36ac,
2408         .clkr = {
2409                 .enable_reg = 0x36ac,
2410                 .enable_mask = BIT(0),
2411                 .hw.init = &(struct clk_init_data){
2412                         .name = "camss_vfe1_clk",
2413                         .parent_names = (const char *[]){ "vfe1_clk_src" },
2414                         .num_parents = 1,
2415                         .flags = CLK_SET_RATE_PARENT,
2416                         .ops = &clk_branch2_ops,
2417                 },
2418         },
2419 };
2420
2421 static struct clk_branch camss_vfe1_stream_clk = {
2422         .halt_reg = 0x3724,
2423         .clkr = {
2424                 .enable_reg = 0x3724,
2425                 .enable_mask = BIT(0),
2426                 .hw.init = &(struct clk_init_data){
2427                         .name = "camss_vfe1_stream_clk",
2428                         .parent_names = (const char *[]){ "vfe1_clk_src" },
2429                         .num_parents = 1,
2430                         .flags = CLK_SET_RATE_PARENT,
2431                         .ops = &clk_branch2_ops,
2432                 },
2433         },
2434 };
2435
2436 static struct clk_branch camss_vfe1_ahb_clk = {
2437         .halt_reg = 0x3678,
2438         .clkr = {
2439                 .enable_reg = 0x3678,
2440                 .enable_mask = BIT(0),
2441                 .hw.init = &(struct clk_init_data){
2442                         .name = "camss_vfe1_ahb_clk",
2443                         .parent_names = (const char *[]){ "ahb_clk_src" },
2444                         .num_parents = 1,
2445                         .flags = CLK_SET_RATE_PARENT,
2446                         .ops = &clk_branch2_ops,
2447                 },
2448         },
2449 };
2450
2451 static struct clk_branch camss_csi_vfe0_clk = {
2452         .halt_reg = 0x3704,
2453         .clkr = {
2454                 .enable_reg = 0x3704,
2455                 .enable_mask = BIT(0),
2456                 .hw.init = &(struct clk_init_data){
2457                         .name = "camss_csi_vfe0_clk",
2458                         .parent_names = (const char *[]){ "vfe0_clk_src" },
2459                         .num_parents = 1,
2460                         .flags = CLK_SET_RATE_PARENT,
2461                         .ops = &clk_branch2_ops,
2462                 },
2463         },
2464 };
2465
2466 static struct clk_branch camss_csi_vfe1_clk = {
2467         .halt_reg = 0x3714,
2468         .clkr = {
2469                 .enable_reg = 0x3714,
2470                 .enable_mask = BIT(0),
2471                 .hw.init = &(struct clk_init_data){
2472                         .name = "camss_csi_vfe1_clk",
2473                         .parent_names = (const char *[]){ "vfe1_clk_src" },
2474                         .num_parents = 1,
2475                         .flags = CLK_SET_RATE_PARENT,
2476                         .ops = &clk_branch2_ops,
2477                 },
2478         },
2479 };
2480
2481 static struct clk_branch camss_cpp_vbif_ahb_clk = {
2482         .halt_reg = 0x36c8,
2483         .clkr = {
2484                 .enable_reg = 0x36c8,
2485                 .enable_mask = BIT(0),
2486                 .hw.init = &(struct clk_init_data){
2487                         .name = "camss_cpp_vbif_ahb_clk",
2488                         .parent_names = (const char *[]){ "ahb_clk_src" },
2489                         .num_parents = 1,
2490                         .flags = CLK_SET_RATE_PARENT,
2491                         .ops = &clk_branch2_ops,
2492                 },
2493         },
2494 };
2495
2496 static struct clk_branch camss_cpp_axi_clk = {
2497         .halt_reg = 0x36c4,
2498         .clkr = {
2499                 .enable_reg = 0x36c4,
2500                 .enable_mask = BIT(0),
2501                 .hw.init = &(struct clk_init_data){
2502                         .name = "camss_cpp_axi_clk",
2503                         .parent_names = (const char *[]){ "axi_clk_src" },
2504                         .num_parents = 1,
2505                         .flags = CLK_SET_RATE_PARENT,
2506                         .ops = &clk_branch2_ops,
2507                 },
2508         },
2509 };
2510
2511 static struct clk_branch camss_cpp_clk = {
2512         .halt_reg = 0x36b0,
2513         .clkr = {
2514                 .enable_reg = 0x36b0,
2515                 .enable_mask = BIT(0),
2516                 .hw.init = &(struct clk_init_data){
2517                         .name = "camss_cpp_clk",
2518                         .parent_names = (const char *[]){ "cpp_clk_src" },
2519                         .num_parents = 1,
2520                         .flags = CLK_SET_RATE_PARENT,
2521                         .ops = &clk_branch2_ops,
2522                 },
2523         },
2524 };
2525
2526 static struct clk_branch camss_cpp_ahb_clk = {
2527         .halt_reg = 0x36b4,
2528         .clkr = {
2529                 .enable_reg = 0x36b4,
2530                 .enable_mask = BIT(0),
2531                 .hw.init = &(struct clk_init_data){
2532                         .name = "camss_cpp_ahb_clk",
2533                         .parent_names = (const char *[]){ "ahb_clk_src" },
2534                         .num_parents = 1,
2535                         .flags = CLK_SET_RATE_PARENT,
2536                         .ops = &clk_branch2_ops,
2537                 },
2538         },
2539 };
2540
2541 static struct clk_branch camss_csi0_clk = {
2542         .halt_reg = 0x30b4,
2543         .clkr = {
2544                 .enable_reg = 0x30b4,
2545                 .enable_mask = BIT(0),
2546                 .hw.init = &(struct clk_init_data){
2547                         .name = "camss_csi0_clk",
2548                         .parent_names = (const char *[]){ "csi0_clk_src" },
2549                         .num_parents = 1,
2550                         .flags = CLK_SET_RATE_PARENT,
2551                         .ops = &clk_branch2_ops,
2552                 },
2553         },
2554 };
2555
2556 static struct clk_branch camss_csi0_ahb_clk = {
2557         .halt_reg = 0x30bc,
2558         .clkr = {
2559                 .enable_reg = 0x30bc,
2560                 .enable_mask = BIT(0),
2561                 .hw.init = &(struct clk_init_data){
2562                         .name = "camss_csi0_ahb_clk",
2563                         .parent_names = (const char *[]){ "ahb_clk_src" },
2564                         .num_parents = 1,
2565                         .flags = CLK_SET_RATE_PARENT,
2566                         .ops = &clk_branch2_ops,
2567                 },
2568         },
2569 };
2570
2571 static struct clk_branch camss_csi0phy_clk = {
2572         .halt_reg = 0x30c4,
2573         .clkr = {
2574                 .enable_reg = 0x30c4,
2575                 .enable_mask = BIT(0),
2576                 .hw.init = &(struct clk_init_data){
2577                         .name = "camss_csi0phy_clk",
2578                         .parent_names = (const char *[]){ "csi0_clk_src" },
2579                         .num_parents = 1,
2580                         .flags = CLK_SET_RATE_PARENT,
2581                         .ops = &clk_branch2_ops,
2582                 },
2583         },
2584 };
2585
2586 static struct clk_branch camss_csi0rdi_clk = {
2587         .halt_reg = 0x30d4,
2588         .clkr = {
2589                 .enable_reg = 0x30d4,
2590                 .enable_mask = BIT(0),
2591                 .hw.init = &(struct clk_init_data){
2592                         .name = "camss_csi0rdi_clk",
2593                         .parent_names = (const char *[]){ "csi0_clk_src" },
2594                         .num_parents = 1,
2595                         .flags = CLK_SET_RATE_PARENT,
2596                         .ops = &clk_branch2_ops,
2597                 },
2598         },
2599 };
2600
2601 static struct clk_branch camss_csi0pix_clk = {
2602         .halt_reg = 0x30e4,
2603         .clkr = {
2604                 .enable_reg = 0x30e4,
2605                 .enable_mask = BIT(0),
2606                 .hw.init = &(struct clk_init_data){
2607                         .name = "camss_csi0pix_clk",
2608                         .parent_names = (const char *[]){ "csi0_clk_src" },
2609                         .num_parents = 1,
2610                         .flags = CLK_SET_RATE_PARENT,
2611                         .ops = &clk_branch2_ops,
2612                 },
2613         },
2614 };
2615
2616 static struct clk_branch camss_csi1_clk = {
2617         .halt_reg = 0x3124,
2618         .clkr = {
2619                 .enable_reg = 0x3124,
2620                 .enable_mask = BIT(0),
2621                 .hw.init = &(struct clk_init_data){
2622                         .name = "camss_csi1_clk",
2623                         .parent_names = (const char *[]){ "csi1_clk_src" },
2624                         .num_parents = 1,
2625                         .flags = CLK_SET_RATE_PARENT,
2626                         .ops = &clk_branch2_ops,
2627                 },
2628         },
2629 };
2630
2631 static struct clk_branch camss_csi1_ahb_clk = {
2632         .halt_reg = 0x3128,
2633         .clkr = {
2634                 .enable_reg = 0x3128,
2635                 .enable_mask = BIT(0),
2636                 .hw.init = &(struct clk_init_data){
2637                         .name = "camss_csi1_ahb_clk",
2638                         .parent_names = (const char *[]){ "ahb_clk_src" },
2639                         .num_parents = 1,
2640                         .flags = CLK_SET_RATE_PARENT,
2641                         .ops = &clk_branch2_ops,
2642                 },
2643         },
2644 };
2645
2646 static struct clk_branch camss_csi1phy_clk = {
2647         .halt_reg = 0x3134,
2648         .clkr = {
2649                 .enable_reg = 0x3134,
2650                 .enable_mask = BIT(0),
2651                 .hw.init = &(struct clk_init_data){
2652                         .name = "camss_csi1phy_clk",
2653                         .parent_names = (const char *[]){ "csi1_clk_src" },
2654                         .num_parents = 1,
2655                         .flags = CLK_SET_RATE_PARENT,
2656                         .ops = &clk_branch2_ops,
2657                 },
2658         },
2659 };
2660
2661 static struct clk_branch camss_csi1rdi_clk = {
2662         .halt_reg = 0x3144,
2663         .clkr = {
2664                 .enable_reg = 0x3144,
2665                 .enable_mask = BIT(0),
2666                 .hw.init = &(struct clk_init_data){
2667                         .name = "camss_csi1rdi_clk",
2668                         .parent_names = (const char *[]){ "csi1_clk_src" },
2669                         .num_parents = 1,
2670                         .flags = CLK_SET_RATE_PARENT,
2671                         .ops = &clk_branch2_ops,
2672                 },
2673         },
2674 };
2675
2676 static struct clk_branch camss_csi1pix_clk = {
2677         .halt_reg = 0x3154,
2678         .clkr = {
2679                 .enable_reg = 0x3154,
2680                 .enable_mask = BIT(0),
2681                 .hw.init = &(struct clk_init_data){
2682                         .name = "camss_csi1pix_clk",
2683                         .parent_names = (const char *[]){ "csi1_clk_src" },
2684                         .num_parents = 1,
2685                         .flags = CLK_SET_RATE_PARENT,
2686                         .ops = &clk_branch2_ops,
2687                 },
2688         },
2689 };
2690
2691 static struct clk_branch camss_csi2_clk = {
2692         .halt_reg = 0x3184,
2693         .clkr = {
2694                 .enable_reg = 0x3184,
2695                 .enable_mask = BIT(0),
2696                 .hw.init = &(struct clk_init_data){
2697                         .name = "camss_csi2_clk",
2698                         .parent_names = (const char *[]){ "csi2_clk_src" },
2699                         .num_parents = 1,
2700                         .flags = CLK_SET_RATE_PARENT,
2701                         .ops = &clk_branch2_ops,
2702                 },
2703         },
2704 };
2705
2706 static struct clk_branch camss_csi2_ahb_clk = {
2707         .halt_reg = 0x3188,
2708         .clkr = {
2709                 .enable_reg = 0x3188,
2710                 .enable_mask = BIT(0),
2711                 .hw.init = &(struct clk_init_data){
2712                         .name = "camss_csi2_ahb_clk",
2713                         .parent_names = (const char *[]){ "ahb_clk_src" },
2714                         .num_parents = 1,
2715                         .flags = CLK_SET_RATE_PARENT,
2716                         .ops = &clk_branch2_ops,
2717                 },
2718         },
2719 };
2720
2721 static struct clk_branch camss_csi2phy_clk = {
2722         .halt_reg = 0x3194,
2723         .clkr = {
2724                 .enable_reg = 0x3194,
2725                 .enable_mask = BIT(0),
2726                 .hw.init = &(struct clk_init_data){
2727                         .name = "camss_csi2phy_clk",
2728                         .parent_names = (const char *[]){ "csi2_clk_src" },
2729                         .num_parents = 1,
2730                         .flags = CLK_SET_RATE_PARENT,
2731                         .ops = &clk_branch2_ops,
2732                 },
2733         },
2734 };
2735
2736 static struct clk_branch camss_csi2rdi_clk = {
2737         .halt_reg = 0x31a4,
2738         .clkr = {
2739                 .enable_reg = 0x31a4,
2740                 .enable_mask = BIT(0),
2741                 .hw.init = &(struct clk_init_data){
2742                         .name = "camss_csi2rdi_clk",
2743                         .parent_names = (const char *[]){ "csi2_clk_src" },
2744                         .num_parents = 1,
2745                         .flags = CLK_SET_RATE_PARENT,
2746                         .ops = &clk_branch2_ops,
2747                 },
2748         },
2749 };
2750
2751 static struct clk_branch camss_csi2pix_clk = {
2752         .halt_reg = 0x31b4,
2753         .clkr = {
2754                 .enable_reg = 0x31b4,
2755                 .enable_mask = BIT(0),
2756                 .hw.init = &(struct clk_init_data){
2757                         .name = "camss_csi2pix_clk",
2758                         .parent_names = (const char *[]){ "csi2_clk_src" },
2759                         .num_parents = 1,
2760                         .flags = CLK_SET_RATE_PARENT,
2761                         .ops = &clk_branch2_ops,
2762                 },
2763         },
2764 };
2765
2766 static struct clk_branch camss_csi3_clk = {
2767         .halt_reg = 0x31e4,
2768         .clkr = {
2769                 .enable_reg = 0x31e4,
2770                 .enable_mask = BIT(0),
2771                 .hw.init = &(struct clk_init_data){
2772                         .name = "camss_csi3_clk",
2773                         .parent_names = (const char *[]){ "csi3_clk_src" },
2774                         .num_parents = 1,
2775                         .flags = CLK_SET_RATE_PARENT,
2776                         .ops = &clk_branch2_ops,
2777                 },
2778         },
2779 };
2780
2781 static struct clk_branch camss_csi3_ahb_clk = {
2782         .halt_reg = 0x31e8,
2783         .clkr = {
2784                 .enable_reg = 0x31e8,
2785                 .enable_mask = BIT(0),
2786                 .hw.init = &(struct clk_init_data){
2787                         .name = "camss_csi3_ahb_clk",
2788                         .parent_names = (const char *[]){ "ahb_clk_src" },
2789                         .num_parents = 1,
2790                         .flags = CLK_SET_RATE_PARENT,
2791                         .ops = &clk_branch2_ops,
2792                 },
2793         },
2794 };
2795
2796 static struct clk_branch camss_csi3phy_clk = {
2797         .halt_reg = 0x31f4,
2798         .clkr = {
2799                 .enable_reg = 0x31f4,
2800                 .enable_mask = BIT(0),
2801                 .hw.init = &(struct clk_init_data){
2802                         .name = "camss_csi3phy_clk",
2803                         .parent_names = (const char *[]){ "csi3_clk_src" },
2804                         .num_parents = 1,
2805                         .flags = CLK_SET_RATE_PARENT,
2806                         .ops = &clk_branch2_ops,
2807                 },
2808         },
2809 };
2810
2811 static struct clk_branch camss_csi3rdi_clk = {
2812         .halt_reg = 0x3204,
2813         .clkr = {
2814                 .enable_reg = 0x3204,
2815                 .enable_mask = BIT(0),
2816                 .hw.init = &(struct clk_init_data){
2817                         .name = "camss_csi3rdi_clk",
2818                         .parent_names = (const char *[]){ "csi3_clk_src" },
2819                         .num_parents = 1,
2820                         .flags = CLK_SET_RATE_PARENT,
2821                         .ops = &clk_branch2_ops,
2822                 },
2823         },
2824 };
2825
2826 static struct clk_branch camss_csi3pix_clk = {
2827         .halt_reg = 0x3214,
2828         .clkr = {
2829                 .enable_reg = 0x3214,
2830                 .enable_mask = BIT(0),
2831                 .hw.init = &(struct clk_init_data){
2832                         .name = "camss_csi3pix_clk",
2833                         .parent_names = (const char *[]){ "csi3_clk_src" },
2834                         .num_parents = 1,
2835                         .flags = CLK_SET_RATE_PARENT,
2836                         .ops = &clk_branch2_ops,
2837                 },
2838         },
2839 };
2840
2841 static struct clk_branch camss_ispif_ahb_clk = {
2842         .halt_reg = 0x3224,
2843         .clkr = {
2844                 .enable_reg = 0x3224,
2845                 .enable_mask = BIT(0),
2846                 .hw.init = &(struct clk_init_data){
2847                         .name = "camss_ispif_ahb_clk",
2848                         .parent_names = (const char *[]){ "ahb_clk_src" },
2849                         .num_parents = 1,
2850                         .flags = CLK_SET_RATE_PARENT,
2851                         .ops = &clk_branch2_ops,
2852                 },
2853         },
2854 };
2855
2856 static struct clk_branch fd_core_clk = {
2857         .halt_reg = 0x3b68,
2858         .clkr = {
2859                 .enable_reg = 0x3b68,
2860                 .enable_mask = BIT(0),
2861                 .hw.init = &(struct clk_init_data){
2862                         .name = "fd_core_clk",
2863                         .parent_names = (const char *[]){ "fd_core_clk_src" },
2864                         .num_parents = 1,
2865                         .flags = CLK_SET_RATE_PARENT,
2866                         .ops = &clk_branch2_ops,
2867                 },
2868         },
2869 };
2870
2871 static struct clk_branch fd_core_uar_clk = {
2872         .halt_reg = 0x3b6c,
2873         .clkr = {
2874                 .enable_reg = 0x3b6c,
2875                 .enable_mask = BIT(0),
2876                 .hw.init = &(struct clk_init_data){
2877                         .name = "fd_core_uar_clk",
2878                         .parent_names = (const char *[]){ "fd_core_clk_src" },
2879                         .num_parents = 1,
2880                         .flags = CLK_SET_RATE_PARENT,
2881                         .ops = &clk_branch2_ops,
2882                 },
2883         },
2884 };
2885
2886 static struct clk_branch fd_ahb_clk = {
2887         .halt_reg = 0x3ba74,
2888         .clkr = {
2889                 .enable_reg = 0x3ba74,
2890                 .enable_mask = BIT(0),
2891                 .hw.init = &(struct clk_init_data){
2892                         .name = "fd_ahb_clk",
2893                         .parent_names = (const char *[]){ "ahb_clk_src" },
2894                         .num_parents = 1,
2895                         .flags = CLK_SET_RATE_PARENT,
2896                         .ops = &clk_branch2_ops,
2897                 },
2898         },
2899 };
2900
2901 static struct clk_hw *mmcc_msm8996_hws[] = {
2902         &gpll0_div.hw,
2903 };
2904
2905 static struct gdsc mmagic_bimc_gdsc = {
2906         .gdscr = 0x529c,
2907         .pd = {
2908                 .name = "mmagic_bimc",
2909         },
2910         .pwrsts = PWRSTS_OFF_ON,
2911         .flags = ALWAYS_ON,
2912 };
2913
2914 static struct gdsc mmagic_video_gdsc = {
2915         .gdscr = 0x119c,
2916         .gds_hw_ctrl = 0x120c,
2917         .pd = {
2918                 .name = "mmagic_video",
2919         },
2920         .pwrsts = PWRSTS_OFF_ON,
2921         .flags = VOTABLE | ALWAYS_ON,
2922 };
2923
2924 static struct gdsc mmagic_mdss_gdsc = {
2925         .gdscr = 0x247c,
2926         .gds_hw_ctrl = 0x2480,
2927         .pd = {
2928                 .name = "mmagic_mdss",
2929         },
2930         .pwrsts = PWRSTS_OFF_ON,
2931         .flags = VOTABLE | ALWAYS_ON,
2932 };
2933
2934 static struct gdsc mmagic_camss_gdsc = {
2935         .gdscr = 0x3c4c,
2936         .gds_hw_ctrl = 0x3c50,
2937         .pd = {
2938                 .name = "mmagic_camss",
2939         },
2940         .pwrsts = PWRSTS_OFF_ON,
2941         .flags = VOTABLE | ALWAYS_ON,
2942 };
2943
2944 static struct gdsc venus_gdsc = {
2945         .gdscr = 0x1024,
2946         .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },
2947         .cxc_count = 3,
2948         .pd = {
2949                 .name = "venus",
2950         },
2951         .parent = &mmagic_video_gdsc.pd,
2952         .pwrsts = PWRSTS_OFF_ON,
2953 };
2954
2955 static struct gdsc venus_core0_gdsc = {
2956         .gdscr = 0x1040,
2957         .cxcs = (unsigned int []){ 0x1048 },
2958         .cxc_count = 1,
2959         .pd = {
2960                 .name = "venus_core0",
2961         },
2962         .parent = &venus_gdsc.pd,
2963         .pwrsts = PWRSTS_OFF_ON,
2964         .flags = HW_CTRL,
2965 };
2966
2967 static struct gdsc venus_core1_gdsc = {
2968         .gdscr = 0x1044,
2969         .cxcs = (unsigned int []){ 0x104c },
2970         .cxc_count = 1,
2971         .pd = {
2972                 .name = "venus_core1",
2973         },
2974         .parent = &venus_gdsc.pd,
2975         .pwrsts = PWRSTS_OFF_ON,
2976         .flags = HW_CTRL,
2977 };
2978
2979 static struct gdsc camss_gdsc = {
2980         .gdscr = 0x34a0,
2981         .cxcs = (unsigned int []){ 0x36bc, 0x36c4 },
2982         .cxc_count = 2,
2983         .pd = {
2984                 .name = "camss",
2985         },
2986         .parent = &mmagic_camss_gdsc.pd,
2987         .pwrsts = PWRSTS_OFF_ON,
2988 };
2989
2990 static struct gdsc vfe0_gdsc = {
2991         .gdscr = 0x3664,
2992         .cxcs = (unsigned int []){ 0x36a8 },
2993         .cxc_count = 1,
2994         .pd = {
2995                 .name = "vfe0",
2996         },
2997         .parent = &camss_gdsc.pd,
2998         .pwrsts = PWRSTS_OFF_ON,
2999 };
3000
3001 static struct gdsc vfe1_gdsc = {
3002         .gdscr = 0x3674,
3003         .cxcs = (unsigned int []){ 0x36ac },
3004         .cxc_count = 1,
3005         .pd = {
3006                 .name = "vfe1",
3007         },
3008         .parent = &camss_gdsc.pd,
3009         .pwrsts = PWRSTS_OFF_ON,
3010 };
3011
3012 static struct gdsc jpeg_gdsc = {
3013         .gdscr = 0x35a4,
3014         .cxcs = (unsigned int []){ 0x35a8, 0x35b0, 0x35c0, 0x35b8 },
3015         .cxc_count = 4,
3016         .pd = {
3017                 .name = "jpeg",
3018         },
3019         .parent = &camss_gdsc.pd,
3020         .pwrsts = PWRSTS_OFF_ON,
3021 };
3022
3023 static struct gdsc cpp_gdsc = {
3024         .gdscr = 0x36d4,
3025         .cxcs = (unsigned int []){ 0x36b0 },
3026         .cxc_count = 1,
3027         .pd = {
3028                 .name = "cpp",
3029         },
3030         .parent = &camss_gdsc.pd,
3031         .pwrsts = PWRSTS_OFF_ON,
3032 };
3033
3034 static struct gdsc fd_gdsc = {
3035         .gdscr = 0x3b64,
3036         .cxcs = (unsigned int []){ 0x3b68, 0x3b6c },
3037         .cxc_count = 2,
3038         .pd = {
3039                 .name = "fd",
3040         },
3041         .parent = &camss_gdsc.pd,
3042         .pwrsts = PWRSTS_OFF_ON,
3043 };
3044
3045 static struct gdsc mdss_gdsc = {
3046         .gdscr = 0x2304,
3047         .cxcs = (unsigned int []){ 0x2310, 0x231c },
3048         .cxc_count = 2,
3049         .pd = {
3050                 .name = "mdss",
3051         },
3052         .parent = &mmagic_mdss_gdsc.pd,
3053         .pwrsts = PWRSTS_OFF_ON,
3054 };
3055
3056 static struct gdsc gpu_gdsc = {
3057         .gdscr = 0x4034,
3058         .gds_hw_ctrl = 0x4038,
3059         .pd = {
3060                 .name = "gpu",
3061         },
3062         .pwrsts = PWRSTS_OFF_ON,
3063         .flags = VOTABLE,
3064 };
3065
3066 static struct gdsc gpu_gx_gdsc = {
3067         .gdscr = 0x4024,
3068         .clamp_io_ctrl = 0x4300,
3069         .cxcs = (unsigned int []){ 0x4028 },
3070         .cxc_count = 1,
3071         .pd = {
3072                 .name = "gpu_gx",
3073         },
3074         .pwrsts = PWRSTS_OFF_ON,
3075         .flags = CLAMP_IO,
3076 };
3077
3078 static struct clk_regmap *mmcc_msm8996_clocks[] = {
3079         [MMPLL0_EARLY] = &mmpll0_early.clkr,
3080         [MMPLL0_PLL] = &mmpll0.clkr,
3081         [MMPLL1_EARLY] = &mmpll1_early.clkr,
3082         [MMPLL1_PLL] = &mmpll1.clkr,
3083         [MMPLL2_EARLY] = &mmpll2_early.clkr,
3084         [MMPLL2_PLL] = &mmpll2.clkr,
3085         [MMPLL3_EARLY] = &mmpll3_early.clkr,
3086         [MMPLL3_PLL] = &mmpll3.clkr,
3087         [MMPLL4_EARLY] = &mmpll4_early.clkr,
3088         [MMPLL4_PLL] = &mmpll4.clkr,
3089         [MMPLL5_EARLY] = &mmpll5_early.clkr,
3090         [MMPLL5_PLL] = &mmpll5.clkr,
3091         [MMPLL8_EARLY] = &mmpll8_early.clkr,
3092         [MMPLL8_PLL] = &mmpll8.clkr,
3093         [MMPLL9_EARLY] = &mmpll9_early.clkr,
3094         [MMPLL9_PLL] = &mmpll9.clkr,
3095         [AHB_CLK_SRC] = &ahb_clk_src.clkr,
3096         [AXI_CLK_SRC] = &axi_clk_src.clkr,
3097         [MAXI_CLK_SRC] = &maxi_clk_src.clkr,
3098         [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3099         [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3100         [ISENSE_CLK_SRC] = &isense_clk_src.clkr,
3101         [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3102         [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
3103         [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
3104         [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
3105         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3106         [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3107         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3108         [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3109         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3110         [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3111         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3112         [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3113         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3114         [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3115         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3116         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3117         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3118         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3119         [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3120         [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3121         [CCI_CLK_SRC] = &cci_clk_src.clkr,
3122         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3123         [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3124         [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3125         [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr,
3126         [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr,
3127         [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr,
3128         [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3129         [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3130         [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,
3131         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3132         [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3133         [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3134         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3135         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3136         [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3137         [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3138         [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
3139         [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr,
3140         [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr,
3141         [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3142         [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr,
3143         [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr,
3144         [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr,
3145         [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr,
3146         [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr,
3147         [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr,
3148         [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr,
3149         [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr,
3150         [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr,
3151         [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr,
3152         [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr,
3153         [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr,
3154         [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr,
3155         [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr,
3156         [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr,
3157         [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr,
3158         [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr,
3159         [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr,
3160         [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr,
3161         [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr,
3162         [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr,
3163         [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr,
3164         [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr,
3165         [GPU_AHB_CLK] = &gpu_ahb_clk.clkr,
3166         [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr,
3167         [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
3168         [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
3169         [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3170         [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3171         [VIDEO_CORE_CLK] = &video_core_clk.clkr,
3172         [VIDEO_AXI_CLK] = &video_axi_clk.clkr,
3173         [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
3174         [VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
3175         [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
3176         [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
3177         [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3178         [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3179         [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3180         [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3181         [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3182         [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3183         [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3184         [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3185         [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3186         [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3187         [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3188         [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3189         [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3190         [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3191         [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3192         [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3193         [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3194         [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3195         [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3196         [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3197         [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3198         [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3199         [CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
3200         [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
3201         [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
3202         [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
3203         [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
3204         [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr,
3205         [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr,
3206         [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr,
3207         [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
3208         [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr,
3209         [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,
3210         [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
3211         [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
3212         [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr,
3213         [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr,
3214         [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
3215         [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
3216         [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
3217         [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
3218         [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
3219         [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
3220         [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3221         [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3222         [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
3223         [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
3224         [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
3225         [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
3226         [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3227         [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3228         [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3229         [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3230         [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3231         [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3232         [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3233         [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3234         [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3235         [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3236         [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3237         [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3238         [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3239         [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3240         [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3241         [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3242         [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3243         [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3244         [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3245         [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3246         [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3247         [FD_CORE_CLK] = &fd_core_clk.clkr,
3248         [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
3249         [FD_AHB_CLK] = &fd_ahb_clk.clkr,
3250 };
3251
3252 static struct gdsc *mmcc_msm8996_gdscs[] = {
3253         [MMAGIC_BIMC_GDSC] = &mmagic_bimc_gdsc,
3254         [MMAGIC_VIDEO_GDSC] = &mmagic_video_gdsc,
3255         [MMAGIC_MDSS_GDSC] = &mmagic_mdss_gdsc,
3256         [MMAGIC_CAMSS_GDSC] = &mmagic_camss_gdsc,
3257         [VENUS_GDSC] = &venus_gdsc,
3258         [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3259         [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
3260         [CAMSS_GDSC] = &camss_gdsc,
3261         [VFE0_GDSC] = &vfe0_gdsc,
3262         [VFE1_GDSC] = &vfe1_gdsc,
3263         [JPEG_GDSC] = &jpeg_gdsc,
3264         [CPP_GDSC] = &cpp_gdsc,
3265         [FD_GDSC] = &fd_gdsc,
3266         [MDSS_GDSC] = &mdss_gdsc,
3267         [GPU_GDSC] = &gpu_gdsc,
3268         [GPU_GX_GDSC] = &gpu_gx_gdsc,
3269 };
3270
3271 static const struct qcom_reset_map mmcc_msm8996_resets[] = {
3272         [MMAGICAHB_BCR] = { 0x5020 },
3273         [MMAGIC_CFG_BCR] = { 0x5050 },
3274         [MISC_BCR] = { 0x5010 },
3275         [BTO_BCR] = { 0x5030 },
3276         [MMAGICAXI_BCR] = { 0x5060 },
3277         [MMAGICMAXI_BCR] = { 0x5070 },
3278         [DSA_BCR] = { 0x50a0 },
3279         [MMAGIC_CAMSS_BCR] = { 0x3c40 },
3280         [THROTTLE_CAMSS_BCR] = { 0x3c30 },
3281         [SMMU_VFE_BCR] = { 0x3c00 },
3282         [SMMU_CPP_BCR] = { 0x3c10 },
3283         [SMMU_JPEG_BCR] = { 0x3c20 },
3284         [MMAGIC_MDSS_BCR] = { 0x2470 },
3285         [THROTTLE_MDSS_BCR] = { 0x2460 },
3286         [SMMU_ROT_BCR] = { 0x2440 },
3287         [SMMU_MDP_BCR] = { 0x2450 },
3288         [MMAGIC_VIDEO_BCR] = { 0x1190 },
3289         [THROTTLE_VIDEO_BCR] = { 0x1180 },
3290         [SMMU_VIDEO_BCR] = { 0x1170 },
3291         [MMAGIC_BIMC_BCR] = { 0x5290 },
3292         [GPU_GX_BCR] = { 0x4020 },
3293         [GPU_BCR] = { 0x4030 },
3294         [GPU_AON_BCR] = { 0x4040 },
3295         [VMEM_BCR] = { 0x1200 },
3296         [MMSS_RBCPR_BCR] = { 0x4080 },
3297         [VIDEO_BCR] = { 0x1020 },
3298         [MDSS_BCR] = { 0x2300 },
3299         [CAMSS_TOP_BCR] = { 0x3480 },
3300         [CAMSS_AHB_BCR] = { 0x3488 },
3301         [CAMSS_MICRO_BCR] = { 0x3490 },
3302         [CAMSS_CCI_BCR] = { 0x3340 },
3303         [CAMSS_PHY0_BCR] = { 0x3020 },
3304         [CAMSS_PHY1_BCR] = { 0x3050 },
3305         [CAMSS_PHY2_BCR] = { 0x3080 },
3306         [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 },
3307         [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 },
3308         [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 },
3309         [CAMSS_JPEG_BCR] = { 0x35a0 },
3310         [CAMSS_VFE_BCR] = { 0x36a0 },
3311         [CAMSS_VFE0_BCR] = { 0x3660 },
3312         [CAMSS_VFE1_BCR] = { 0x3670 },
3313         [CAMSS_CSI_VFE0_BCR] = { 0x3700 },
3314         [CAMSS_CSI_VFE1_BCR] = { 0x3710 },
3315         [CAMSS_CPP_TOP_BCR] = { 0x36c0 },
3316         [CAMSS_CPP_BCR] = { 0x36d0 },
3317         [CAMSS_CSI0_BCR] = { 0x30b0 },
3318         [CAMSS_CSI0RDI_BCR] = { 0x30d0 },
3319         [CAMSS_CSI0PIX_BCR] = { 0x30e0 },
3320         [CAMSS_CSI1_BCR] = { 0x3120 },
3321         [CAMSS_CSI1RDI_BCR] = { 0x3140 },
3322         [CAMSS_CSI1PIX_BCR] = { 0x3150 },
3323         [CAMSS_CSI2_BCR] = { 0x3180 },
3324         [CAMSS_CSI2RDI_BCR] = { 0x31a0 },
3325         [CAMSS_CSI2PIX_BCR] = { 0x31b0 },
3326         [CAMSS_CSI3_BCR] = { 0x31e0 },
3327         [CAMSS_CSI3RDI_BCR] = { 0x3200 },
3328         [CAMSS_CSI3PIX_BCR] = { 0x3210 },
3329         [CAMSS_ISPIF_BCR] = { 0x3220 },
3330         [FD_BCR] = { 0x3b60 },
3331         [MMSS_SPDM_RM_BCR] = { 0x300 },
3332 };
3333
3334 static const struct regmap_config mmcc_msm8996_regmap_config = {
3335         .reg_bits       = 32,
3336         .reg_stride     = 4,
3337         .val_bits       = 32,
3338         .max_register   = 0xb008,
3339         .fast_io        = true,
3340 };
3341
3342 static const struct qcom_cc_desc mmcc_msm8996_desc = {
3343         .config = &mmcc_msm8996_regmap_config,
3344         .clks = mmcc_msm8996_clocks,
3345         .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks),
3346         .resets = mmcc_msm8996_resets,
3347         .num_resets = ARRAY_SIZE(mmcc_msm8996_resets),
3348         .gdscs = mmcc_msm8996_gdscs,
3349         .num_gdscs = ARRAY_SIZE(mmcc_msm8996_gdscs),
3350 };
3351
3352 static const struct of_device_id mmcc_msm8996_match_table[] = {
3353         { .compatible = "qcom,mmcc-msm8996" },
3354         { }
3355 };
3356 MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table);
3357
3358 static int mmcc_msm8996_probe(struct platform_device *pdev)
3359 {
3360         struct device *dev = &pdev->dev;
3361         int i, ret;
3362         struct regmap *regmap;
3363
3364         regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc);
3365         if (IS_ERR(regmap))
3366                 return PTR_ERR(regmap);
3367
3368         /* Disable the AHB DCD */
3369         regmap_update_bits(regmap, 0x50d8, BIT(31), 0);
3370         /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */
3371         regmap_update_bits(regmap, 0x5054, BIT(15), 0);
3372
3373         for (i = 0; i < ARRAY_SIZE(mmcc_msm8996_hws); i++) {
3374                 ret = devm_clk_hw_register(dev, mmcc_msm8996_hws[i]);
3375                 if (ret)
3376                         return ret;
3377         }
3378
3379         return qcom_cc_really_probe(pdev, &mmcc_msm8996_desc, regmap);
3380 }
3381
3382 static struct platform_driver mmcc_msm8996_driver = {
3383         .probe          = mmcc_msm8996_probe,
3384         .driver         = {
3385                 .name   = "mmcc-msm8996",
3386                 .of_match_table = mmcc_msm8996_match_table,
3387         },
3388 };
3389 module_platform_driver(mmcc_msm8996_driver);
3390
3391 MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver");
3392 MODULE_LICENSE("GPL v2");
3393 MODULE_ALIAS("platform:mmcc-msm8996");