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