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