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