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