Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / clk / qcom / mmcc-apq8084.c
1 /*
2  * Copyright (c) 2014, 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/platform_device.h>
16 #include <linux/module.h>
17 #include <linux/regmap.h>
18 #include <linux/reset-controller.h>
19
20 #include <dt-bindings/clock/qcom,mmcc-apq8084.h>
21 #include <dt-bindings/reset/qcom,mmcc-apq8084.h>
22
23 #include "common.h"
24 #include "clk-regmap.h"
25 #include "clk-pll.h"
26 #include "clk-rcg.h"
27 #include "clk-branch.h"
28 #include "reset.h"
29
30 enum {
31         P_XO,
32         P_MMPLL0,
33         P_EDPLINK,
34         P_MMPLL1,
35         P_HDMIPLL,
36         P_GPLL0,
37         P_EDPVCO,
38         P_MMPLL4,
39         P_DSI0PLL,
40         P_DSI0PLL_BYTE,
41         P_MMPLL2,
42         P_MMPLL3,
43         P_GPLL1,
44         P_DSI1PLL,
45         P_DSI1PLL_BYTE,
46         P_MMSLEEP,
47 };
48
49 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
50         { P_XO, 0 },
51         { P_MMPLL0, 1 },
52         { P_MMPLL1, 2 },
53         { P_GPLL0, 5 }
54 };
55
56 static const char *mmcc_xo_mmpll0_mmpll1_gpll0[] = {
57         "xo",
58         "mmpll0_vote",
59         "mmpll1_vote",
60         "mmss_gpll0_vote",
61 };
62
63 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
64         { P_XO, 0 },
65         { P_MMPLL0, 1 },
66         { P_HDMIPLL, 4 },
67         { P_GPLL0, 5 },
68         { P_DSI0PLL, 2 },
69         { P_DSI1PLL, 3 }
70 };
71
72 static const char *mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
73         "xo",
74         "mmpll0_vote",
75         "hdmipll",
76         "mmss_gpll0_vote",
77         "dsi0pll",
78         "dsi1pll",
79 };
80
81 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
82         { P_XO, 0 },
83         { P_MMPLL0, 1 },
84         { P_MMPLL1, 2 },
85         { P_GPLL0, 5 },
86         { P_MMPLL2, 3 }
87 };
88
89 static const char *mmcc_xo_mmpll0_1_2_gpll0[] = {
90         "xo",
91         "mmpll0_vote",
92         "mmpll1_vote",
93         "mmss_gpll0_vote",
94         "mmpll2",
95 };
96
97 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
98         { P_XO, 0 },
99         { P_MMPLL0, 1 },
100         { P_MMPLL1, 2 },
101         { P_GPLL0, 5 },
102         { P_MMPLL3, 3 }
103 };
104
105 static const char *mmcc_xo_mmpll0_1_3_gpll0[] = {
106         "xo",
107         "mmpll0_vote",
108         "mmpll1_vote",
109         "mmss_gpll0_vote",
110         "mmpll3",
111 };
112
113 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
114         { P_XO, 0 },
115         { P_EDPLINK, 4 },
116         { P_HDMIPLL, 3 },
117         { P_EDPVCO, 5 },
118         { P_DSI0PLL, 1 },
119         { P_DSI1PLL, 2 }
120 };
121
122 static const char *mmcc_xo_dsi_hdmi_edp[] = {
123         "xo",
124         "edp_link_clk",
125         "hdmipll",
126         "edp_vco_div",
127         "dsi0pll",
128         "dsi1pll",
129 };
130
131 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
132         { P_XO, 0 },
133         { P_EDPLINK, 4 },
134         { P_HDMIPLL, 3 },
135         { P_GPLL0, 5 },
136         { P_DSI0PLL, 1 },
137         { P_DSI1PLL, 2 }
138 };
139
140 static const char *mmcc_xo_dsi_hdmi_edp_gpll0[] = {
141         "xo",
142         "edp_link_clk",
143         "hdmipll",
144         "gpll0_vote",
145         "dsi0pll",
146         "dsi1pll",
147 };
148
149 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
150         { P_XO, 0 },
151         { P_EDPLINK, 4 },
152         { P_HDMIPLL, 3 },
153         { P_GPLL0, 5 },
154         { P_DSI0PLL_BYTE, 1 },
155         { P_DSI1PLL_BYTE, 2 }
156 };
157
158 static const char *mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
159         "xo",
160         "edp_link_clk",
161         "hdmipll",
162         "gpll0_vote",
163         "dsi0pllbyte",
164         "dsi1pllbyte",
165 };
166
167 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {
168         { P_XO, 0 },
169         { P_MMPLL0, 1 },
170         { P_MMPLL1, 2 },
171         { P_GPLL0, 5 },
172         { P_MMPLL4, 3 }
173 };
174
175 static const char *mmcc_xo_mmpll0_1_4_gpll0[] = {
176         "xo",
177         "mmpll0",
178         "mmpll1",
179         "mmpll4",
180         "gpll0",
181 };
182
183 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {
184         { P_XO, 0 },
185         { P_MMPLL0, 1 },
186         { P_MMPLL1, 2 },
187         { P_MMPLL4, 3 },
188         { P_GPLL0, 5 },
189         { P_GPLL1, 4 }
190 };
191
192 static const char *mmcc_xo_mmpll0_1_4_gpll1_0[] = {
193         "xo",
194         "mmpll0",
195         "mmpll1",
196         "mmpll4",
197         "gpll1",
198         "gpll0",
199 };
200
201 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {
202         { P_XO, 0 },
203         { P_MMPLL0, 1 },
204         { P_MMPLL1, 2 },
205         { P_MMPLL4, 3 },
206         { P_GPLL0, 5 },
207         { P_GPLL1, 4 },
208         { P_MMSLEEP, 6 }
209 };
210
211 static const char *mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {
212         "xo",
213         "mmpll0",
214         "mmpll1",
215         "mmpll4",
216         "gpll1",
217         "gpll0",
218         "sleep_clk_src",
219 };
220
221 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
222
223 static struct clk_pll mmpll0 = {
224         .l_reg = 0x0004,
225         .m_reg = 0x0008,
226         .n_reg = 0x000c,
227         .config_reg = 0x0014,
228         .mode_reg = 0x0000,
229         .status_reg = 0x001c,
230         .status_bit = 17,
231         .clkr.hw.init = &(struct clk_init_data){
232                 .name = "mmpll0",
233                 .parent_names = (const char *[]){ "xo" },
234                 .num_parents = 1,
235                 .ops = &clk_pll_ops,
236         },
237 };
238
239 static struct clk_regmap mmpll0_vote = {
240         .enable_reg = 0x0100,
241         .enable_mask = BIT(0),
242         .hw.init = &(struct clk_init_data){
243                 .name = "mmpll0_vote",
244                 .parent_names = (const char *[]){ "mmpll0" },
245                 .num_parents = 1,
246                 .ops = &clk_pll_vote_ops,
247         },
248 };
249
250 static struct clk_pll mmpll1 = {
251         .l_reg = 0x0044,
252         .m_reg = 0x0048,
253         .n_reg = 0x004c,
254         .config_reg = 0x0050,
255         .mode_reg = 0x0040,
256         .status_reg = 0x005c,
257         .status_bit = 17,
258         .clkr.hw.init = &(struct clk_init_data){
259                 .name = "mmpll1",
260                 .parent_names = (const char *[]){ "xo" },
261                 .num_parents = 1,
262                 .ops = &clk_pll_ops,
263         },
264 };
265
266 static struct clk_regmap mmpll1_vote = {
267         .enable_reg = 0x0100,
268         .enable_mask = BIT(1),
269         .hw.init = &(struct clk_init_data){
270                 .name = "mmpll1_vote",
271                 .parent_names = (const char *[]){ "mmpll1" },
272                 .num_parents = 1,
273                 .ops = &clk_pll_vote_ops,
274         },
275 };
276
277 static struct clk_pll mmpll2 = {
278         .l_reg = 0x4104,
279         .m_reg = 0x4108,
280         .n_reg = 0x410c,
281         .config_reg = 0x4110,
282         .mode_reg = 0x4100,
283         .status_reg = 0x411c,
284         .clkr.hw.init = &(struct clk_init_data){
285                 .name = "mmpll2",
286                 .parent_names = (const char *[]){ "xo" },
287                 .num_parents = 1,
288                 .ops = &clk_pll_ops,
289         },
290 };
291
292 static struct clk_pll mmpll3 = {
293         .l_reg = 0x0084,
294         .m_reg = 0x0088,
295         .n_reg = 0x008c,
296         .config_reg = 0x0090,
297         .mode_reg = 0x0080,
298         .status_reg = 0x009c,
299         .status_bit = 17,
300         .clkr.hw.init = &(struct clk_init_data){
301                 .name = "mmpll3",
302                 .parent_names = (const char *[]){ "xo" },
303                 .num_parents = 1,
304                 .ops = &clk_pll_ops,
305         },
306 };
307
308 static struct clk_pll mmpll4 = {
309         .l_reg = 0x00a4,
310         .m_reg = 0x00a8,
311         .n_reg = 0x00ac,
312         .config_reg = 0x00b0,
313         .mode_reg = 0x0080,
314         .status_reg = 0x00bc,
315         .clkr.hw.init = &(struct clk_init_data){
316                 .name = "mmpll4",
317                 .parent_names = (const char *[]){ "xo" },
318                 .num_parents = 1,
319                 .ops = &clk_pll_ops,
320         },
321 };
322
323 static struct clk_rcg2 mmss_ahb_clk_src = {
324         .cmd_rcgr = 0x5000,
325         .hid_width = 5,
326         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
327         .clkr.hw.init = &(struct clk_init_data){
328                 .name = "mmss_ahb_clk_src",
329                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
330                 .num_parents = 4,
331                 .ops = &clk_rcg2_ops,
332         },
333 };
334
335 static struct freq_tbl ftbl_mmss_axi_clk[] = {
336         F(19200000, P_XO, 1, 0, 0),
337         F(37500000, P_GPLL0, 16, 0, 0),
338         F(50000000, P_GPLL0, 12, 0, 0),
339         F(75000000, P_GPLL0, 8, 0, 0),
340         F(100000000, P_GPLL0, 6, 0, 0),
341         F(150000000, P_GPLL0, 4, 0, 0),
342         F(333430000, P_MMPLL1, 3.5, 0, 0),
343         F(400000000, P_MMPLL0, 2, 0, 0),
344         F(466800000, P_MMPLL1, 2.5, 0, 0),
345 };
346
347 static struct clk_rcg2 mmss_axi_clk_src = {
348         .cmd_rcgr = 0x5040,
349         .hid_width = 5,
350         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
351         .freq_tbl = ftbl_mmss_axi_clk,
352         .clkr.hw.init = &(struct clk_init_data){
353                 .name = "mmss_axi_clk_src",
354                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
355                 .num_parents = 4,
356                 .ops = &clk_rcg2_ops,
357         },
358 };
359
360 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
361         F(19200000, P_XO, 1, 0, 0),
362         F(37500000, P_GPLL0, 16, 0, 0),
363         F(50000000, P_GPLL0, 12, 0, 0),
364         F(75000000, P_GPLL0, 8, 0, 0),
365         F(109090000, P_GPLL0, 5.5, 0, 0),
366         F(150000000, P_GPLL0, 4, 0, 0),
367         F(228570000, P_MMPLL0, 3.5, 0, 0),
368         F(320000000, P_MMPLL0, 2.5, 0, 0),
369 };
370
371 static struct clk_rcg2 ocmemnoc_clk_src = {
372         .cmd_rcgr = 0x5090,
373         .hid_width = 5,
374         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
375         .freq_tbl = ftbl_ocmemnoc_clk,
376         .clkr.hw.init = &(struct clk_init_data){
377                 .name = "ocmemnoc_clk_src",
378                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
379                 .num_parents = 4,
380                 .ops = &clk_rcg2_ops,
381         },
382 };
383
384 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
385         F(100000000, P_GPLL0, 6, 0, 0),
386         F(200000000, P_MMPLL0, 4, 0, 0),
387         { }
388 };
389
390 static struct clk_rcg2 csi0_clk_src = {
391         .cmd_rcgr = 0x3090,
392         .hid_width = 5,
393         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
394         .freq_tbl = ftbl_camss_csi0_3_clk,
395         .clkr.hw.init = &(struct clk_init_data){
396                 .name = "csi0_clk_src",
397                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
398                 .num_parents = 5,
399                 .ops = &clk_rcg2_ops,
400         },
401 };
402
403 static struct clk_rcg2 csi1_clk_src = {
404         .cmd_rcgr = 0x3100,
405         .hid_width = 5,
406         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
407         .freq_tbl = ftbl_camss_csi0_3_clk,
408         .clkr.hw.init = &(struct clk_init_data){
409                 .name = "csi1_clk_src",
410                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
411                 .num_parents = 5,
412                 .ops = &clk_rcg2_ops,
413         },
414 };
415
416 static struct clk_rcg2 csi2_clk_src = {
417         .cmd_rcgr = 0x3160,
418         .hid_width = 5,
419         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
420         .freq_tbl = ftbl_camss_csi0_3_clk,
421         .clkr.hw.init = &(struct clk_init_data){
422                 .name = "csi2_clk_src",
423                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
424                 .num_parents = 5,
425                 .ops = &clk_rcg2_ops,
426         },
427 };
428
429 static struct clk_rcg2 csi3_clk_src = {
430         .cmd_rcgr = 0x31c0,
431         .hid_width = 5,
432         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
433         .freq_tbl = ftbl_camss_csi0_3_clk,
434         .clkr.hw.init = &(struct clk_init_data){
435                 .name = "csi3_clk_src",
436                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
437                 .num_parents = 5,
438                 .ops = &clk_rcg2_ops,
439         },
440 };
441
442 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
443         F(37500000, P_GPLL0, 16, 0, 0),
444         F(50000000, P_GPLL0, 12, 0, 0),
445         F(60000000, P_GPLL0, 10, 0, 0),
446         F(80000000, P_GPLL0, 7.5, 0, 0),
447         F(100000000, P_GPLL0, 6, 0, 0),
448         F(109090000, P_GPLL0, 5.5, 0, 0),
449         F(133330000, P_GPLL0, 4.5, 0, 0),
450         F(200000000, P_GPLL0, 3, 0, 0),
451         F(228570000, P_MMPLL0, 3.5, 0, 0),
452         F(266670000, P_MMPLL0, 3, 0, 0),
453         F(320000000, P_MMPLL0, 2.5, 0, 0),
454         F(465000000, P_MMPLL4, 2, 0, 0),
455         F(600000000, P_GPLL0, 1, 0, 0),
456         { }
457 };
458
459 static struct clk_rcg2 vfe0_clk_src = {
460         .cmd_rcgr = 0x3600,
461         .hid_width = 5,
462         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
463         .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
464         .clkr.hw.init = &(struct clk_init_data){
465                 .name = "vfe0_clk_src",
466                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
467                 .num_parents = 5,
468                 .ops = &clk_rcg2_ops,
469         },
470 };
471
472 static struct clk_rcg2 vfe1_clk_src = {
473         .cmd_rcgr = 0x3620,
474         .hid_width = 5,
475         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
476         .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
477         .clkr.hw.init = &(struct clk_init_data){
478                 .name = "vfe1_clk_src",
479                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
480                 .num_parents = 5,
481                 .ops = &clk_rcg2_ops,
482         },
483 };
484
485 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
486         F(37500000, P_GPLL0, 16, 0, 0),
487         F(60000000, P_GPLL0, 10, 0, 0),
488         F(75000000, P_GPLL0, 8, 0, 0),
489         F(85710000, P_GPLL0, 7, 0, 0),
490         F(100000000, P_GPLL0, 6, 0, 0),
491         F(150000000, P_GPLL0, 4, 0, 0),
492         F(160000000, P_MMPLL0, 5, 0, 0),
493         F(200000000, P_MMPLL0, 4, 0, 0),
494         F(228570000, P_MMPLL0, 3.5, 0, 0),
495         F(300000000, P_GPLL0, 2, 0, 0),
496         F(320000000, P_MMPLL0, 2.5, 0, 0),
497         { }
498 };
499
500 static struct clk_rcg2 mdp_clk_src = {
501         .cmd_rcgr = 0x2040,
502         .hid_width = 5,
503         .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
504         .freq_tbl = ftbl_mdss_mdp_clk,
505         .clkr.hw.init = &(struct clk_init_data){
506                 .name = "mdp_clk_src",
507                 .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
508                 .num_parents = 6,
509                 .ops = &clk_rcg2_ops,
510         },
511 };
512
513 static struct clk_rcg2 gfx3d_clk_src = {
514         .cmd_rcgr = 0x4000,
515         .hid_width = 5,
516         .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
517         .clkr.hw.init = &(struct clk_init_data){
518                 .name = "gfx3d_clk_src",
519                 .parent_names = mmcc_xo_mmpll0_1_2_gpll0,
520                 .num_parents = 5,
521                 .ops = &clk_rcg2_ops,
522         },
523 };
524
525 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
526         F(75000000, P_GPLL0, 8, 0, 0),
527         F(133330000, P_GPLL0, 4.5, 0, 0),
528         F(200000000, P_GPLL0, 3, 0, 0),
529         F(228570000, P_MMPLL0, 3.5, 0, 0),
530         F(266670000, P_MMPLL0, 3, 0, 0),
531         F(320000000, P_MMPLL0, 2.5, 0, 0),
532         { }
533 };
534
535 static struct clk_rcg2 jpeg0_clk_src = {
536         .cmd_rcgr = 0x3500,
537         .hid_width = 5,
538         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
539         .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
540         .clkr.hw.init = &(struct clk_init_data){
541                 .name = "jpeg0_clk_src",
542                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
543                 .num_parents = 5,
544                 .ops = &clk_rcg2_ops,
545         },
546 };
547
548 static struct clk_rcg2 jpeg1_clk_src = {
549         .cmd_rcgr = 0x3520,
550         .hid_width = 5,
551         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
552         .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
553         .clkr.hw.init = &(struct clk_init_data){
554                 .name = "jpeg1_clk_src",
555                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
556                 .num_parents = 5,
557                 .ops = &clk_rcg2_ops,
558         },
559 };
560
561 static struct clk_rcg2 jpeg2_clk_src = {
562         .cmd_rcgr = 0x3540,
563         .hid_width = 5,
564         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
565         .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
566         .clkr.hw.init = &(struct clk_init_data){
567                 .name = "jpeg2_clk_src",
568                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
569                 .num_parents = 5,
570                 .ops = &clk_rcg2_ops,
571         },
572 };
573
574 static struct freq_tbl pixel_freq_tbl[] = {
575         { .src = P_DSI0PLL },
576         { }
577 };
578
579 static struct clk_rcg2 pclk0_clk_src = {
580         .cmd_rcgr = 0x2000,
581         .mnd_width = 8,
582         .hid_width = 5,
583         .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
584         .freq_tbl = pixel_freq_tbl,
585         .clkr.hw.init = &(struct clk_init_data){
586                 .name = "pclk0_clk_src",
587                 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
588                 .num_parents = 6,
589                 .ops = &clk_pixel_ops,
590                 .flags = CLK_SET_RATE_PARENT,
591         },
592 };
593
594 static struct clk_rcg2 pclk1_clk_src = {
595         .cmd_rcgr = 0x2020,
596         .mnd_width = 8,
597         .hid_width = 5,
598         .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
599         .freq_tbl = pixel_freq_tbl,
600         .clkr.hw.init = &(struct clk_init_data){
601                 .name = "pclk1_clk_src",
602                 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
603                 .num_parents = 6,
604                 .ops = &clk_pixel_ops,
605                 .flags = CLK_SET_RATE_PARENT,
606         },
607 };
608
609 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
610         F(50000000, P_GPLL0, 12, 0, 0),
611         F(100000000, P_GPLL0, 6, 0, 0),
612         F(133330000, P_GPLL0, 4.5, 0, 0),
613         F(200000000, P_MMPLL0, 4, 0, 0),
614         F(266670000, P_MMPLL0, 3, 0, 0),
615         F(465000000, P_MMPLL3, 2, 0, 0),
616         { }
617 };
618
619 static struct clk_rcg2 vcodec0_clk_src = {
620         .cmd_rcgr = 0x1000,
621         .mnd_width = 8,
622         .hid_width = 5,
623         .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
624         .freq_tbl = ftbl_venus0_vcodec0_clk,
625         .clkr.hw.init = &(struct clk_init_data){
626                 .name = "vcodec0_clk_src",
627                 .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
628                 .num_parents = 5,
629                 .ops = &clk_rcg2_ops,
630         },
631 };
632
633 static struct freq_tbl ftbl_avsync_vp_clk[] = {
634         F(150000000, P_GPLL0, 4, 0, 0),
635         F(320000000, P_MMPLL0, 2.5, 0, 0),
636         { }
637 };
638
639 static struct clk_rcg2 vp_clk_src = {
640         .cmd_rcgr = 0x2430,
641         .hid_width = 5,
642         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
643         .freq_tbl = ftbl_avsync_vp_clk,
644         .clkr.hw.init = &(struct clk_init_data){
645                 .name = "vp_clk_src",
646                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
647                 .num_parents = 4,
648                 .ops = &clk_rcg2_ops,
649         },
650 };
651
652 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
653         F(19200000, P_XO, 1, 0, 0),
654         { }
655 };
656
657 static struct clk_rcg2 cci_clk_src = {
658         .cmd_rcgr = 0x3300,
659         .mnd_width = 8,
660         .hid_width = 5,
661         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
662         .freq_tbl = ftbl_camss_cci_cci_clk,
663         .clkr.hw.init = &(struct clk_init_data){
664                 .name = "cci_clk_src",
665                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
666                 .num_parents = 6,
667                 .ops = &clk_rcg2_ops,
668         },
669 };
670
671 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
672         F(10000, P_XO, 16, 1, 120),
673         F(24000, P_XO, 16, 1, 50),
674         F(6000000, P_GPLL0, 10, 1, 10),
675         F(12000000, P_GPLL0, 10, 1, 5),
676         F(13000000, P_GPLL0, 4, 13, 150),
677         F(24000000, P_GPLL0, 5, 1, 5),
678         { }
679 };
680
681 static struct clk_rcg2 camss_gp0_clk_src = {
682         .cmd_rcgr = 0x3420,
683         .mnd_width = 8,
684         .hid_width = 5,
685         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
686         .freq_tbl = ftbl_camss_gp0_1_clk,
687         .clkr.hw.init = &(struct clk_init_data){
688                 .name = "camss_gp0_clk_src",
689                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
690                 .num_parents = 7,
691                 .ops = &clk_rcg2_ops,
692         },
693 };
694
695 static struct clk_rcg2 camss_gp1_clk_src = {
696         .cmd_rcgr = 0x3450,
697         .mnd_width = 8,
698         .hid_width = 5,
699         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
700         .freq_tbl = ftbl_camss_gp0_1_clk,
701         .clkr.hw.init = &(struct clk_init_data){
702                 .name = "camss_gp1_clk_src",
703                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
704                 .num_parents = 7,
705                 .ops = &clk_rcg2_ops,
706         },
707 };
708
709 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
710         F(4800000, P_XO, 4, 0, 0),
711         F(6000000, P_GPLL0, 10, 1, 10),
712         F(8000000, P_GPLL0, 15, 1, 5),
713         F(9600000, P_XO, 2, 0, 0),
714         F(16000000, P_MMPLL0, 10, 1, 5),
715         F(19200000, P_XO, 1, 0, 0),
716         F(24000000, P_GPLL0, 5, 1, 5),
717         F(32000000, P_MMPLL0, 5, 1, 5),
718         F(48000000, P_GPLL0, 12.5, 0, 0),
719         F(64000000, P_MMPLL0, 12.5, 0, 0),
720         { }
721 };
722
723 static struct clk_rcg2 mclk0_clk_src = {
724         .cmd_rcgr = 0x3360,
725         .mnd_width = 8,
726         .hid_width = 5,
727         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
728         .freq_tbl = ftbl_camss_mclk0_3_clk,
729         .clkr.hw.init = &(struct clk_init_data){
730                 .name = "mclk0_clk_src",
731                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
732                 .num_parents = 6,
733                 .ops = &clk_rcg2_ops,
734         },
735 };
736
737 static struct clk_rcg2 mclk1_clk_src = {
738         .cmd_rcgr = 0x3390,
739         .mnd_width = 8,
740         .hid_width = 5,
741         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
742         .freq_tbl = ftbl_camss_mclk0_3_clk,
743         .clkr.hw.init = &(struct clk_init_data){
744                 .name = "mclk1_clk_src",
745                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
746                 .num_parents = 6,
747                 .ops = &clk_rcg2_ops,
748         },
749 };
750
751 static struct clk_rcg2 mclk2_clk_src = {
752         .cmd_rcgr = 0x33c0,
753         .mnd_width = 8,
754         .hid_width = 5,
755         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
756         .freq_tbl = ftbl_camss_mclk0_3_clk,
757         .clkr.hw.init = &(struct clk_init_data){
758                 .name = "mclk2_clk_src",
759                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
760                 .num_parents = 6,
761                 .ops = &clk_rcg2_ops,
762         },
763 };
764
765 static struct clk_rcg2 mclk3_clk_src = {
766         .cmd_rcgr = 0x33f0,
767         .mnd_width = 8,
768         .hid_width = 5,
769         .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
770         .freq_tbl = ftbl_camss_mclk0_3_clk,
771         .clkr.hw.init = &(struct clk_init_data){
772                 .name = "mclk3_clk_src",
773                 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
774                 .num_parents = 6,
775                 .ops = &clk_rcg2_ops,
776         },
777 };
778
779 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
780         F(100000000, P_GPLL0, 6, 0, 0),
781         F(200000000, P_MMPLL0, 4, 0, 0),
782         { }
783 };
784
785 static struct clk_rcg2 csi0phytimer_clk_src = {
786         .cmd_rcgr = 0x3000,
787         .hid_width = 5,
788         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
789         .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
790         .clkr.hw.init = &(struct clk_init_data){
791                 .name = "csi0phytimer_clk_src",
792                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
793                 .num_parents = 5,
794                 .ops = &clk_rcg2_ops,
795         },
796 };
797
798 static struct clk_rcg2 csi1phytimer_clk_src = {
799         .cmd_rcgr = 0x3030,
800         .hid_width = 5,
801         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
802         .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
803         .clkr.hw.init = &(struct clk_init_data){
804                 .name = "csi1phytimer_clk_src",
805                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
806                 .num_parents = 5,
807                 .ops = &clk_rcg2_ops,
808         },
809 };
810
811 static struct clk_rcg2 csi2phytimer_clk_src = {
812         .cmd_rcgr = 0x3060,
813         .hid_width = 5,
814         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
815         .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
816         .clkr.hw.init = &(struct clk_init_data){
817                 .name = "csi2phytimer_clk_src",
818                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
819                 .num_parents = 5,
820                 .ops = &clk_rcg2_ops,
821         },
822 };
823
824 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
825         F(133330000, P_GPLL0, 4.5, 0, 0),
826         F(266670000, P_MMPLL0, 3, 0, 0),
827         F(320000000, P_MMPLL0, 2.5, 0, 0),
828         F(372000000, P_MMPLL4, 2.5, 0, 0),
829         F(465000000, P_MMPLL4, 2, 0, 0),
830         F(600000000, P_GPLL0, 1, 0, 0),
831         { }
832 };
833
834 static struct clk_rcg2 cpp_clk_src = {
835         .cmd_rcgr = 0x3640,
836         .hid_width = 5,
837         .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
838         .freq_tbl = ftbl_camss_vfe_cpp_clk,
839         .clkr.hw.init = &(struct clk_init_data){
840                 .name = "cpp_clk_src",
841                 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
842                 .num_parents = 5,
843                 .ops = &clk_rcg2_ops,
844         },
845 };
846
847 static struct freq_tbl byte_freq_tbl[] = {
848         { .src = P_DSI0PLL_BYTE },
849         { }
850 };
851
852 static struct clk_rcg2 byte0_clk_src = {
853         .cmd_rcgr = 0x2120,
854         .hid_width = 5,
855         .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
856         .freq_tbl = byte_freq_tbl,
857         .clkr.hw.init = &(struct clk_init_data){
858                 .name = "byte0_clk_src",
859                 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
860                 .num_parents = 6,
861                 .ops = &clk_byte_ops,
862                 .flags = CLK_SET_RATE_PARENT,
863         },
864 };
865
866 static struct clk_rcg2 byte1_clk_src = {
867         .cmd_rcgr = 0x2140,
868         .hid_width = 5,
869         .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
870         .freq_tbl = byte_freq_tbl,
871         .clkr.hw.init = &(struct clk_init_data){
872                 .name = "byte1_clk_src",
873                 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
874                 .num_parents = 6,
875                 .ops = &clk_byte_ops,
876                 .flags = CLK_SET_RATE_PARENT,
877         },
878 };
879
880 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
881         F(19200000, P_XO, 1, 0, 0),
882         { }
883 };
884
885 static struct clk_rcg2 edpaux_clk_src = {
886         .cmd_rcgr = 0x20e0,
887         .hid_width = 5,
888         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
889         .freq_tbl = ftbl_mdss_edpaux_clk,
890         .clkr.hw.init = &(struct clk_init_data){
891                 .name = "edpaux_clk_src",
892                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
893                 .num_parents = 4,
894                 .ops = &clk_rcg2_ops,
895         },
896 };
897
898 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
899         F(135000000, P_EDPLINK, 2, 0, 0),
900         F(270000000, P_EDPLINK, 11, 0, 0),
901         { }
902 };
903
904 static struct clk_rcg2 edplink_clk_src = {
905         .cmd_rcgr = 0x20c0,
906         .hid_width = 5,
907         .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
908         .freq_tbl = ftbl_mdss_edplink_clk,
909         .clkr.hw.init = &(struct clk_init_data){
910                 .name = "edplink_clk_src",
911                 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
912                 .num_parents = 6,
913                 .ops = &clk_rcg2_ops,
914                 .flags = CLK_SET_RATE_PARENT,
915         },
916 };
917
918 static struct freq_tbl edp_pixel_freq_tbl[] = {
919         { .src = P_EDPVCO },
920         { }
921 };
922
923 static struct clk_rcg2 edppixel_clk_src = {
924         .cmd_rcgr = 0x20a0,
925         .mnd_width = 8,
926         .hid_width = 5,
927         .parent_map = mmcc_xo_dsi_hdmi_edp_map,
928         .freq_tbl = edp_pixel_freq_tbl,
929         .clkr.hw.init = &(struct clk_init_data){
930                 .name = "edppixel_clk_src",
931                 .parent_names = mmcc_xo_dsi_hdmi_edp,
932                 .num_parents = 6,
933                 .ops = &clk_edp_pixel_ops,
934         },
935 };
936
937 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
938         F(19200000, P_XO, 1, 0, 0),
939         { }
940 };
941
942 static struct clk_rcg2 esc0_clk_src = {
943         .cmd_rcgr = 0x2160,
944         .hid_width = 5,
945         .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
946         .freq_tbl = ftbl_mdss_esc0_1_clk,
947         .clkr.hw.init = &(struct clk_init_data){
948                 .name = "esc0_clk_src",
949                 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
950                 .num_parents = 6,
951                 .ops = &clk_rcg2_ops,
952         },
953 };
954
955 static struct clk_rcg2 esc1_clk_src = {
956         .cmd_rcgr = 0x2180,
957         .hid_width = 5,
958         .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
959         .freq_tbl = ftbl_mdss_esc0_1_clk,
960         .clkr.hw.init = &(struct clk_init_data){
961                 .name = "esc1_clk_src",
962                 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
963                 .num_parents = 6,
964                 .ops = &clk_rcg2_ops,
965         },
966 };
967
968 static struct freq_tbl extpclk_freq_tbl[] = {
969         { .src = P_HDMIPLL },
970         { }
971 };
972
973 static struct clk_rcg2 extpclk_clk_src = {
974         .cmd_rcgr = 0x2060,
975         .hid_width = 5,
976         .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
977         .freq_tbl = extpclk_freq_tbl,
978         .clkr.hw.init = &(struct clk_init_data){
979                 .name = "extpclk_clk_src",
980                 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
981                 .num_parents = 6,
982                 .ops = &clk_byte_ops,
983                 .flags = CLK_SET_RATE_PARENT,
984         },
985 };
986
987 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
988         F(19200000, P_XO, 1, 0, 0),
989         { }
990 };
991
992 static struct clk_rcg2 hdmi_clk_src = {
993         .cmd_rcgr = 0x2100,
994         .hid_width = 5,
995         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
996         .freq_tbl = ftbl_mdss_hdmi_clk,
997         .clkr.hw.init = &(struct clk_init_data){
998                 .name = "hdmi_clk_src",
999                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1000                 .num_parents = 4,
1001                 .ops = &clk_rcg2_ops,
1002         },
1003 };
1004
1005 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
1006         F(19200000, P_XO, 1, 0, 0),
1007         { }
1008 };
1009
1010 static struct clk_rcg2 vsync_clk_src = {
1011         .cmd_rcgr = 0x2080,
1012         .hid_width = 5,
1013         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1014         .freq_tbl = ftbl_mdss_vsync_clk,
1015         .clkr.hw.init = &(struct clk_init_data){
1016                 .name = "vsync_clk_src",
1017                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1018                 .num_parents = 4,
1019                 .ops = &clk_rcg2_ops,
1020         },
1021 };
1022
1023 static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1024         F(50000000, P_GPLL0, 12, 0, 0),
1025         { }
1026 };
1027
1028 static struct clk_rcg2 rbcpr_clk_src = {
1029         .cmd_rcgr = 0x4060,
1030         .hid_width = 5,
1031         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1032         .freq_tbl = ftbl_mmss_rbcpr_clk,
1033         .clkr.hw.init = &(struct clk_init_data){
1034                 .name = "rbcpr_clk_src",
1035                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1036                 .num_parents = 4,
1037                 .ops = &clk_rcg2_ops,
1038         },
1039 };
1040
1041 static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1042         F(19200000, P_XO, 1, 0, 0),
1043         { }
1044 };
1045
1046 static struct clk_rcg2 rbbmtimer_clk_src = {
1047         .cmd_rcgr = 0x4090,
1048         .hid_width = 5,
1049         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1050         .freq_tbl = ftbl_oxili_rbbmtimer_clk,
1051         .clkr.hw.init = &(struct clk_init_data){
1052                 .name = "rbbmtimer_clk_src",
1053                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1054                 .num_parents = 4,
1055                 .ops = &clk_rcg2_ops,
1056         },
1057 };
1058
1059 static struct freq_tbl ftbl_vpu_maple_clk[] = {
1060         F(50000000, P_GPLL0, 12, 0, 0),
1061         F(100000000, P_GPLL0, 6, 0, 0),
1062         F(133330000, P_GPLL0, 4.5, 0, 0),
1063         F(200000000, P_MMPLL0, 4, 0, 0),
1064         F(266670000, P_MMPLL0, 3, 0, 0),
1065         F(465000000, P_MMPLL3, 2, 0, 0),
1066         { }
1067 };
1068
1069 static struct clk_rcg2 maple_clk_src = {
1070         .cmd_rcgr = 0x1320,
1071         .hid_width = 5,
1072         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1073         .freq_tbl = ftbl_vpu_maple_clk,
1074         .clkr.hw.init = &(struct clk_init_data){
1075                 .name = "maple_clk_src",
1076                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1077                 .num_parents = 4,
1078                 .ops = &clk_rcg2_ops,
1079         },
1080 };
1081
1082 static struct freq_tbl ftbl_vpu_vdp_clk[] = {
1083         F(50000000, P_GPLL0, 12, 0, 0),
1084         F(100000000, P_GPLL0, 6, 0, 0),
1085         F(200000000, P_MMPLL0, 4, 0, 0),
1086         F(320000000, P_MMPLL0, 2.5, 0, 0),
1087         F(400000000, P_MMPLL0, 2, 0, 0),
1088         { }
1089 };
1090
1091 static struct clk_rcg2 vdp_clk_src = {
1092         .cmd_rcgr = 0x1300,
1093         .hid_width = 5,
1094         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1095         .freq_tbl = ftbl_vpu_vdp_clk,
1096         .clkr.hw.init = &(struct clk_init_data){
1097                 .name = "vdp_clk_src",
1098                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1099                 .num_parents = 4,
1100                 .ops = &clk_rcg2_ops,
1101         },
1102 };
1103
1104 static struct freq_tbl ftbl_vpu_bus_clk[] = {
1105         F(40000000, P_GPLL0, 15, 0, 0),
1106         F(80000000, P_MMPLL0, 10, 0, 0),
1107         { }
1108 };
1109
1110 static struct clk_rcg2 vpu_bus_clk_src = {
1111         .cmd_rcgr = 0x1340,
1112         .hid_width = 5,
1113         .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1114         .freq_tbl = ftbl_vpu_bus_clk,
1115         .clkr.hw.init = &(struct clk_init_data){
1116                 .name = "vpu_bus_clk_src",
1117                 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1118                 .num_parents = 4,
1119                 .ops = &clk_rcg2_ops,
1120         },
1121 };
1122
1123 static struct clk_branch mmss_cxo_clk = {
1124         .halt_reg = 0x5104,
1125         .clkr = {
1126                 .enable_reg = 0x5104,
1127                 .enable_mask = BIT(0),
1128                 .hw.init = &(struct clk_init_data){
1129                         .name = "mmss_cxo_clk",
1130                         .parent_names = (const char *[]){ "xo" },
1131                         .num_parents = 1,
1132                         .flags = CLK_SET_RATE_PARENT,
1133                         .ops = &clk_branch2_ops,
1134                 },
1135         },
1136 };
1137
1138 static struct clk_branch mmss_sleepclk_clk = {
1139         .halt_reg = 0x5100,
1140         .clkr = {
1141                 .enable_reg = 0x5100,
1142                 .enable_mask = BIT(0),
1143                 .hw.init = &(struct clk_init_data){
1144                         .name = "mmss_sleepclk_clk",
1145                         .parent_names = (const char *[]){
1146                                 "sleep_clk_src",
1147                         },
1148                         .num_parents = 1,
1149                         .flags = CLK_SET_RATE_PARENT,
1150                         .ops = &clk_branch2_ops,
1151                 },
1152         },
1153 };
1154
1155 static struct clk_branch avsync_ahb_clk = {
1156         .halt_reg = 0x2414,
1157         .clkr = {
1158                 .enable_reg = 0x2414,
1159                 .enable_mask = BIT(0),
1160                 .hw.init = &(struct clk_init_data){
1161                         .name = "avsync_ahb_clk",
1162                         .parent_names = (const char *[]){
1163                                 "mmss_ahb_clk_src",
1164                         },
1165                         .num_parents = 1,
1166                         .flags = CLK_SET_RATE_PARENT,
1167                         .ops = &clk_branch2_ops,
1168                 },
1169         },
1170 };
1171
1172 static struct clk_branch avsync_edppixel_clk = {
1173         .halt_reg = 0x2418,
1174         .clkr = {
1175                 .enable_reg = 0x2418,
1176                 .enable_mask = BIT(0),
1177                 .hw.init = &(struct clk_init_data){
1178                         .name = "avsync_edppixel_clk",
1179                         .parent_names = (const char *[]){
1180                                 "edppixel_clk_src",
1181                         },
1182                         .num_parents = 1,
1183                         .flags = CLK_SET_RATE_PARENT,
1184                         .ops = &clk_branch2_ops,
1185                 },
1186         },
1187 };
1188
1189 static struct clk_branch avsync_extpclk_clk = {
1190         .halt_reg = 0x2410,
1191         .clkr = {
1192                 .enable_reg = 0x2410,
1193                 .enable_mask = BIT(0),
1194                 .hw.init = &(struct clk_init_data){
1195                         .name = "avsync_extpclk_clk",
1196                         .parent_names = (const char *[]){
1197                                 "extpclk_clk_src",
1198                         },
1199                         .num_parents = 1,
1200                         .flags = CLK_SET_RATE_PARENT,
1201                         .ops = &clk_branch2_ops,
1202                 },
1203         },
1204 };
1205
1206 static struct clk_branch avsync_pclk0_clk = {
1207         .halt_reg = 0x241c,
1208         .clkr = {
1209                 .enable_reg = 0x241c,
1210                 .enable_mask = BIT(0),
1211                 .hw.init = &(struct clk_init_data){
1212                         .name = "avsync_pclk0_clk",
1213                         .parent_names = (const char *[]){
1214                                 "pclk0_clk_src",
1215                         },
1216                         .num_parents = 1,
1217                         .flags = CLK_SET_RATE_PARENT,
1218                         .ops = &clk_branch2_ops,
1219                 },
1220         },
1221 };
1222
1223 static struct clk_branch avsync_pclk1_clk = {
1224         .halt_reg = 0x2420,
1225         .clkr = {
1226                 .enable_reg = 0x2420,
1227                 .enable_mask = BIT(0),
1228                 .hw.init = &(struct clk_init_data){
1229                         .name = "avsync_pclk1_clk",
1230                         .parent_names = (const char *[]){
1231                                 "pclk1_clk_src",
1232                         },
1233                         .num_parents = 1,
1234                         .flags = CLK_SET_RATE_PARENT,
1235                         .ops = &clk_branch2_ops,
1236                 },
1237         },
1238 };
1239
1240 static struct clk_branch avsync_vp_clk = {
1241         .halt_reg = 0x2404,
1242         .clkr = {
1243                 .enable_reg = 0x2404,
1244                 .enable_mask = BIT(0),
1245                 .hw.init = &(struct clk_init_data){
1246                         .name = "avsync_vp_clk",
1247                         .parent_names = (const char *[]){
1248                                 "vp_clk_src",
1249                         },
1250                         .num_parents = 1,
1251                         .flags = CLK_SET_RATE_PARENT,
1252                         .ops = &clk_branch2_ops,
1253                 },
1254         },
1255 };
1256
1257 static struct clk_branch camss_ahb_clk = {
1258         .halt_reg = 0x348c,
1259         .clkr = {
1260                 .enable_reg = 0x348c,
1261                 .enable_mask = BIT(0),
1262                 .hw.init = &(struct clk_init_data){
1263                         .name = "camss_ahb_clk",
1264                         .parent_names = (const char *[]){
1265                                 "mmss_ahb_clk_src",
1266                         },
1267                         .num_parents = 1,
1268                         .flags = CLK_SET_RATE_PARENT,
1269                         .ops = &clk_branch2_ops,
1270                 },
1271         },
1272 };
1273
1274 static struct clk_branch camss_cci_cci_ahb_clk = {
1275         .halt_reg = 0x3348,
1276         .clkr = {
1277                 .enable_reg = 0x3348,
1278                 .enable_mask = BIT(0),
1279                 .hw.init = &(struct clk_init_data){
1280                         .name = "camss_cci_cci_ahb_clk",
1281                         .parent_names = (const char *[]){
1282                                 "mmss_ahb_clk_src",
1283                         },
1284                         .num_parents = 1,
1285                         .ops = &clk_branch2_ops,
1286                 },
1287         },
1288 };
1289
1290 static struct clk_branch camss_cci_cci_clk = {
1291         .halt_reg = 0x3344,
1292         .clkr = {
1293                 .enable_reg = 0x3344,
1294                 .enable_mask = BIT(0),
1295                 .hw.init = &(struct clk_init_data){
1296                         .name = "camss_cci_cci_clk",
1297                         .parent_names = (const char *[]){
1298                                 "cci_clk_src",
1299                         },
1300                         .num_parents = 1,
1301                         .flags = CLK_SET_RATE_PARENT,
1302                         .ops = &clk_branch2_ops,
1303                 },
1304         },
1305 };
1306
1307 static struct clk_branch camss_csi0_ahb_clk = {
1308         .halt_reg = 0x30bc,
1309         .clkr = {
1310                 .enable_reg = 0x30bc,
1311                 .enable_mask = BIT(0),
1312                 .hw.init = &(struct clk_init_data){
1313                         .name = "camss_csi0_ahb_clk",
1314                         .parent_names = (const char *[]){
1315                                 "mmss_ahb_clk_src",
1316                         },
1317                         .num_parents = 1,
1318                         .ops = &clk_branch2_ops,
1319                 },
1320         },
1321 };
1322
1323 static struct clk_branch camss_csi0_clk = {
1324         .halt_reg = 0x30b4,
1325         .clkr = {
1326                 .enable_reg = 0x30b4,
1327                 .enable_mask = BIT(0),
1328                 .hw.init = &(struct clk_init_data){
1329                         .name = "camss_csi0_clk",
1330                         .parent_names = (const char *[]){
1331                                 "csi0_clk_src",
1332                         },
1333                         .num_parents = 1,
1334                         .flags = CLK_SET_RATE_PARENT,
1335                         .ops = &clk_branch2_ops,
1336                 },
1337         },
1338 };
1339
1340 static struct clk_branch camss_csi0phy_clk = {
1341         .halt_reg = 0x30c4,
1342         .clkr = {
1343                 .enable_reg = 0x30c4,
1344                 .enable_mask = BIT(0),
1345                 .hw.init = &(struct clk_init_data){
1346                         .name = "camss_csi0phy_clk",
1347                         .parent_names = (const char *[]){
1348                                 "csi0_clk_src",
1349                         },
1350                         .num_parents = 1,
1351                         .flags = CLK_SET_RATE_PARENT,
1352                         .ops = &clk_branch2_ops,
1353                 },
1354         },
1355 };
1356
1357 static struct clk_branch camss_csi0pix_clk = {
1358         .halt_reg = 0x30e4,
1359         .clkr = {
1360                 .enable_reg = 0x30e4,
1361                 .enable_mask = BIT(0),
1362                 .hw.init = &(struct clk_init_data){
1363                         .name = "camss_csi0pix_clk",
1364                         .parent_names = (const char *[]){
1365                                 "csi0_clk_src",
1366                         },
1367                         .num_parents = 1,
1368                         .flags = CLK_SET_RATE_PARENT,
1369                         .ops = &clk_branch2_ops,
1370                 },
1371         },
1372 };
1373
1374 static struct clk_branch camss_csi0rdi_clk = {
1375         .halt_reg = 0x30d4,
1376         .clkr = {
1377                 .enable_reg = 0x30d4,
1378                 .enable_mask = BIT(0),
1379                 .hw.init = &(struct clk_init_data){
1380                         .name = "camss_csi0rdi_clk",
1381                         .parent_names = (const char *[]){
1382                                 "csi0_clk_src",
1383                         },
1384                         .num_parents = 1,
1385                         .flags = CLK_SET_RATE_PARENT,
1386                         .ops = &clk_branch2_ops,
1387                 },
1388         },
1389 };
1390
1391 static struct clk_branch camss_csi1_ahb_clk = {
1392         .halt_reg = 0x3128,
1393         .clkr = {
1394                 .enable_reg = 0x3128,
1395                 .enable_mask = BIT(0),
1396                 .hw.init = &(struct clk_init_data){
1397                         .name = "camss_csi1_ahb_clk",
1398                         .parent_names = (const char *[]){
1399                                 "mmss_ahb_clk_src",
1400                         },
1401                         .num_parents = 1,
1402                         .flags = CLK_SET_RATE_PARENT,
1403                         .ops = &clk_branch2_ops,
1404                 },
1405         },
1406 };
1407
1408 static struct clk_branch camss_csi1_clk = {
1409         .halt_reg = 0x3124,
1410         .clkr = {
1411                 .enable_reg = 0x3124,
1412                 .enable_mask = BIT(0),
1413                 .hw.init = &(struct clk_init_data){
1414                         .name = "camss_csi1_clk",
1415                         .parent_names = (const char *[]){
1416                                 "csi1_clk_src",
1417                         },
1418                         .num_parents = 1,
1419                         .flags = CLK_SET_RATE_PARENT,
1420                         .ops = &clk_branch2_ops,
1421                 },
1422         },
1423 };
1424
1425 static struct clk_branch camss_csi1phy_clk = {
1426         .halt_reg = 0x3134,
1427         .clkr = {
1428                 .enable_reg = 0x3134,
1429                 .enable_mask = BIT(0),
1430                 .hw.init = &(struct clk_init_data){
1431                         .name = "camss_csi1phy_clk",
1432                         .parent_names = (const char *[]){
1433                                 "csi1_clk_src",
1434                         },
1435                         .num_parents = 1,
1436                         .flags = CLK_SET_RATE_PARENT,
1437                         .ops = &clk_branch2_ops,
1438                 },
1439         },
1440 };
1441
1442 static struct clk_branch camss_csi1pix_clk = {
1443         .halt_reg = 0x3154,
1444         .clkr = {
1445                 .enable_reg = 0x3154,
1446                 .enable_mask = BIT(0),
1447                 .hw.init = &(struct clk_init_data){
1448                         .name = "camss_csi1pix_clk",
1449                         .parent_names = (const char *[]){
1450                                 "csi1_clk_src",
1451                         },
1452                         .num_parents = 1,
1453                         .flags = CLK_SET_RATE_PARENT,
1454                         .ops = &clk_branch2_ops,
1455                 },
1456         },
1457 };
1458
1459 static struct clk_branch camss_csi1rdi_clk = {
1460         .halt_reg = 0x3144,
1461         .clkr = {
1462                 .enable_reg = 0x3144,
1463                 .enable_mask = BIT(0),
1464                 .hw.init = &(struct clk_init_data){
1465                         .name = "camss_csi1rdi_clk",
1466                         .parent_names = (const char *[]){
1467                                 "csi1_clk_src",
1468                         },
1469                         .num_parents = 1,
1470                         .flags = CLK_SET_RATE_PARENT,
1471                         .ops = &clk_branch2_ops,
1472                 },
1473         },
1474 };
1475
1476 static struct clk_branch camss_csi2_ahb_clk = {
1477         .halt_reg = 0x3188,
1478         .clkr = {
1479                 .enable_reg = 0x3188,
1480                 .enable_mask = BIT(0),
1481                 .hw.init = &(struct clk_init_data){
1482                         .name = "camss_csi2_ahb_clk",
1483                         .parent_names = (const char *[]){
1484                                 "mmss_ahb_clk_src",
1485                         },
1486                         .num_parents = 1,
1487                         .ops = &clk_branch2_ops,
1488                 },
1489         },
1490 };
1491
1492 static struct clk_branch camss_csi2_clk = {
1493         .halt_reg = 0x3184,
1494         .clkr = {
1495                 .enable_reg = 0x3184,
1496                 .enable_mask = BIT(0),
1497                 .hw.init = &(struct clk_init_data){
1498                         .name = "camss_csi2_clk",
1499                         .parent_names = (const char *[]){
1500                                 "csi2_clk_src",
1501                         },
1502                         .num_parents = 1,
1503                         .flags = CLK_SET_RATE_PARENT,
1504                         .ops = &clk_branch2_ops,
1505                 },
1506         },
1507 };
1508
1509 static struct clk_branch camss_csi2phy_clk = {
1510         .halt_reg = 0x3194,
1511         .clkr = {
1512                 .enable_reg = 0x3194,
1513                 .enable_mask = BIT(0),
1514                 .hw.init = &(struct clk_init_data){
1515                         .name = "camss_csi2phy_clk",
1516                         .parent_names = (const char *[]){
1517                                 "csi2_clk_src",
1518                         },
1519                         .num_parents = 1,
1520                         .flags = CLK_SET_RATE_PARENT,
1521                         .ops = &clk_branch2_ops,
1522                 },
1523         },
1524 };
1525
1526 static struct clk_branch camss_csi2pix_clk = {
1527         .halt_reg = 0x31b4,
1528         .clkr = {
1529                 .enable_reg = 0x31b4,
1530                 .enable_mask = BIT(0),
1531                 .hw.init = &(struct clk_init_data){
1532                         .name = "camss_csi2pix_clk",
1533                         .parent_names = (const char *[]){
1534                                 "csi2_clk_src",
1535                         },
1536                         .num_parents = 1,
1537                         .flags = CLK_SET_RATE_PARENT,
1538                         .ops = &clk_branch2_ops,
1539                 },
1540         },
1541 };
1542
1543 static struct clk_branch camss_csi2rdi_clk = {
1544         .halt_reg = 0x31a4,
1545         .clkr = {
1546                 .enable_reg = 0x31a4,
1547                 .enable_mask = BIT(0),
1548                 .hw.init = &(struct clk_init_data){
1549                         .name = "camss_csi2rdi_clk",
1550                         .parent_names = (const char *[]){
1551                                 "csi2_clk_src",
1552                         },
1553                         .num_parents = 1,
1554                         .flags = CLK_SET_RATE_PARENT,
1555                         .ops = &clk_branch2_ops,
1556                 },
1557         },
1558 };
1559
1560 static struct clk_branch camss_csi3_ahb_clk = {
1561         .halt_reg = 0x31e8,
1562         .clkr = {
1563                 .enable_reg = 0x31e8,
1564                 .enable_mask = BIT(0),
1565                 .hw.init = &(struct clk_init_data){
1566                         .name = "camss_csi3_ahb_clk",
1567                         .parent_names = (const char *[]){
1568                                 "mmss_ahb_clk_src",
1569                         },
1570                         .num_parents = 1,
1571                         .ops = &clk_branch2_ops,
1572                 },
1573         },
1574 };
1575
1576 static struct clk_branch camss_csi3_clk = {
1577         .halt_reg = 0x31e4,
1578         .clkr = {
1579                 .enable_reg = 0x31e4,
1580                 .enable_mask = BIT(0),
1581                 .hw.init = &(struct clk_init_data){
1582                         .name = "camss_csi3_clk",
1583                         .parent_names = (const char *[]){
1584                                 "csi3_clk_src",
1585                         },
1586                         .num_parents = 1,
1587                         .flags = CLK_SET_RATE_PARENT,
1588                         .ops = &clk_branch2_ops,
1589                 },
1590         },
1591 };
1592
1593 static struct clk_branch camss_csi3phy_clk = {
1594         .halt_reg = 0x31f4,
1595         .clkr = {
1596                 .enable_reg = 0x31f4,
1597                 .enable_mask = BIT(0),
1598                 .hw.init = &(struct clk_init_data){
1599                         .name = "camss_csi3phy_clk",
1600                         .parent_names = (const char *[]){
1601                                 "csi3_clk_src",
1602                         },
1603                         .num_parents = 1,
1604                         .flags = CLK_SET_RATE_PARENT,
1605                         .ops = &clk_branch2_ops,
1606                 },
1607         },
1608 };
1609
1610 static struct clk_branch camss_csi3pix_clk = {
1611         .halt_reg = 0x3214,
1612         .clkr = {
1613                 .enable_reg = 0x3214,
1614                 .enable_mask = BIT(0),
1615                 .hw.init = &(struct clk_init_data){
1616                         .name = "camss_csi3pix_clk",
1617                         .parent_names = (const char *[]){
1618                                 "csi3_clk_src",
1619                         },
1620                         .num_parents = 1,
1621                         .flags = CLK_SET_RATE_PARENT,
1622                         .ops = &clk_branch2_ops,
1623                 },
1624         },
1625 };
1626
1627 static struct clk_branch camss_csi3rdi_clk = {
1628         .halt_reg = 0x3204,
1629         .clkr = {
1630                 .enable_reg = 0x3204,
1631                 .enable_mask = BIT(0),
1632                 .hw.init = &(struct clk_init_data){
1633                         .name = "camss_csi3rdi_clk",
1634                         .parent_names = (const char *[]){
1635                                 "csi3_clk_src",
1636                         },
1637                         .num_parents = 1,
1638                         .flags = CLK_SET_RATE_PARENT,
1639                         .ops = &clk_branch2_ops,
1640                 },
1641         },
1642 };
1643
1644 static struct clk_branch camss_csi_vfe0_clk = {
1645         .halt_reg = 0x3704,
1646         .clkr = {
1647                 .enable_reg = 0x3704,
1648                 .enable_mask = BIT(0),
1649                 .hw.init = &(struct clk_init_data){
1650                         .name = "camss_csi_vfe0_clk",
1651                         .parent_names = (const char *[]){
1652                                 "vfe0_clk_src",
1653                         },
1654                         .num_parents = 1,
1655                         .flags = CLK_SET_RATE_PARENT,
1656                         .ops = &clk_branch2_ops,
1657                 },
1658         },
1659 };
1660
1661 static struct clk_branch camss_csi_vfe1_clk = {
1662         .halt_reg = 0x3714,
1663         .clkr = {
1664                 .enable_reg = 0x3714,
1665                 .enable_mask = BIT(0),
1666                 .hw.init = &(struct clk_init_data){
1667                         .name = "camss_csi_vfe1_clk",
1668                         .parent_names = (const char *[]){
1669                                 "vfe1_clk_src",
1670                         },
1671                         .num_parents = 1,
1672                         .flags = CLK_SET_RATE_PARENT,
1673                         .ops = &clk_branch2_ops,
1674                 },
1675         },
1676 };
1677
1678 static struct clk_branch camss_gp0_clk = {
1679         .halt_reg = 0x3444,
1680         .clkr = {
1681                 .enable_reg = 0x3444,
1682                 .enable_mask = BIT(0),
1683                 .hw.init = &(struct clk_init_data){
1684                         .name = "camss_gp0_clk",
1685                         .parent_names = (const char *[]){
1686                                 "camss_gp0_clk_src",
1687                         },
1688                         .num_parents = 1,
1689                         .flags = CLK_SET_RATE_PARENT,
1690                         .ops = &clk_branch2_ops,
1691                 },
1692         },
1693 };
1694
1695 static struct clk_branch camss_gp1_clk = {
1696         .halt_reg = 0x3474,
1697         .clkr = {
1698                 .enable_reg = 0x3474,
1699                 .enable_mask = BIT(0),
1700                 .hw.init = &(struct clk_init_data){
1701                         .name = "camss_gp1_clk",
1702                         .parent_names = (const char *[]){
1703                                 "camss_gp1_clk_src",
1704                         },
1705                         .num_parents = 1,
1706                         .flags = CLK_SET_RATE_PARENT,
1707                         .ops = &clk_branch2_ops,
1708                 },
1709         },
1710 };
1711
1712 static struct clk_branch camss_ispif_ahb_clk = {
1713         .halt_reg = 0x3224,
1714         .clkr = {
1715                 .enable_reg = 0x3224,
1716                 .enable_mask = BIT(0),
1717                 .hw.init = &(struct clk_init_data){
1718                         .name = "camss_ispif_ahb_clk",
1719                         .parent_names = (const char *[]){
1720                                 "mmss_ahb_clk_src",
1721                         },
1722                         .num_parents = 1,
1723                         .flags = CLK_SET_RATE_PARENT,
1724                         .ops = &clk_branch2_ops,
1725                 },
1726         },
1727 };
1728
1729 static struct clk_branch camss_jpeg_jpeg0_clk = {
1730         .halt_reg = 0x35a8,
1731         .clkr = {
1732                 .enable_reg = 0x35a8,
1733                 .enable_mask = BIT(0),
1734                 .hw.init = &(struct clk_init_data){
1735                         .name = "camss_jpeg_jpeg0_clk",
1736                         .parent_names = (const char *[]){
1737                                 "jpeg0_clk_src",
1738                         },
1739                         .num_parents = 1,
1740                         .flags = CLK_SET_RATE_PARENT,
1741                         .ops = &clk_branch2_ops,
1742                 },
1743         },
1744 };
1745
1746 static struct clk_branch camss_jpeg_jpeg1_clk = {
1747         .halt_reg = 0x35ac,
1748         .clkr = {
1749                 .enable_reg = 0x35ac,
1750                 .enable_mask = BIT(0),
1751                 .hw.init = &(struct clk_init_data){
1752                         .name = "camss_jpeg_jpeg1_clk",
1753                         .parent_names = (const char *[]){
1754                                 "jpeg1_clk_src",
1755                         },
1756                         .num_parents = 1,
1757                         .flags = CLK_SET_RATE_PARENT,
1758                         .ops = &clk_branch2_ops,
1759                 },
1760         },
1761 };
1762
1763 static struct clk_branch camss_jpeg_jpeg2_clk = {
1764         .halt_reg = 0x35b0,
1765         .clkr = {
1766                 .enable_reg = 0x35b0,
1767                 .enable_mask = BIT(0),
1768                 .hw.init = &(struct clk_init_data){
1769                         .name = "camss_jpeg_jpeg2_clk",
1770                         .parent_names = (const char *[]){
1771                                 "jpeg2_clk_src",
1772                         },
1773                         .num_parents = 1,
1774                         .flags = CLK_SET_RATE_PARENT,
1775                         .ops = &clk_branch2_ops,
1776                 },
1777         },
1778 };
1779
1780 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1781         .halt_reg = 0x35b4,
1782         .clkr = {
1783                 .enable_reg = 0x35b4,
1784                 .enable_mask = BIT(0),
1785                 .hw.init = &(struct clk_init_data){
1786                         .name = "camss_jpeg_jpeg_ahb_clk",
1787                         .parent_names = (const char *[]){
1788                                 "mmss_ahb_clk_src",
1789                         },
1790                         .num_parents = 1,
1791                         .ops = &clk_branch2_ops,
1792                 },
1793         },
1794 };
1795
1796 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1797         .halt_reg = 0x35b8,
1798         .clkr = {
1799                 .enable_reg = 0x35b8,
1800                 .enable_mask = BIT(0),
1801                 .hw.init = &(struct clk_init_data){
1802                         .name = "camss_jpeg_jpeg_axi_clk",
1803                         .parent_names = (const char *[]){
1804                                 "mmss_axi_clk_src",
1805                         },
1806                         .num_parents = 1,
1807                         .ops = &clk_branch2_ops,
1808                 },
1809         },
1810 };
1811
1812 static struct clk_branch camss_mclk0_clk = {
1813         .halt_reg = 0x3384,
1814         .clkr = {
1815                 .enable_reg = 0x3384,
1816                 .enable_mask = BIT(0),
1817                 .hw.init = &(struct clk_init_data){
1818                         .name = "camss_mclk0_clk",
1819                         .parent_names = (const char *[]){
1820                                 "mclk0_clk_src",
1821                         },
1822                         .num_parents = 1,
1823                         .flags = CLK_SET_RATE_PARENT,
1824                         .ops = &clk_branch2_ops,
1825                 },
1826         },
1827 };
1828
1829 static struct clk_branch camss_mclk1_clk = {
1830         .halt_reg = 0x33b4,
1831         .clkr = {
1832                 .enable_reg = 0x33b4,
1833                 .enable_mask = BIT(0),
1834                 .hw.init = &(struct clk_init_data){
1835                         .name = "camss_mclk1_clk",
1836                         .parent_names = (const char *[]){
1837                                 "mclk1_clk_src",
1838                         },
1839                         .num_parents = 1,
1840                         .flags = CLK_SET_RATE_PARENT,
1841                         .ops = &clk_branch2_ops,
1842                 },
1843         },
1844 };
1845
1846 static struct clk_branch camss_mclk2_clk = {
1847         .halt_reg = 0x33e4,
1848         .clkr = {
1849                 .enable_reg = 0x33e4,
1850                 .enable_mask = BIT(0),
1851                 .hw.init = &(struct clk_init_data){
1852                         .name = "camss_mclk2_clk",
1853                         .parent_names = (const char *[]){
1854                                 "mclk2_clk_src",
1855                         },
1856                         .num_parents = 1,
1857                         .flags = CLK_SET_RATE_PARENT,
1858                         .ops = &clk_branch2_ops,
1859                 },
1860         },
1861 };
1862
1863 static struct clk_branch camss_mclk3_clk = {
1864         .halt_reg = 0x3414,
1865         .clkr = {
1866                 .enable_reg = 0x3414,
1867                 .enable_mask = BIT(0),
1868                 .hw.init = &(struct clk_init_data){
1869                         .name = "camss_mclk3_clk",
1870                         .parent_names = (const char *[]){
1871                                 "mclk3_clk_src",
1872                         },
1873                         .num_parents = 1,
1874                         .flags = CLK_SET_RATE_PARENT,
1875                         .ops = &clk_branch2_ops,
1876                 },
1877         },
1878 };
1879
1880 static struct clk_branch camss_micro_ahb_clk = {
1881         .halt_reg = 0x3494,
1882         .clkr = {
1883                 .enable_reg = 0x3494,
1884                 .enable_mask = BIT(0),
1885                 .hw.init = &(struct clk_init_data){
1886                         .name = "camss_micro_ahb_clk",
1887                         .parent_names = (const char *[]){
1888                                 "mmss_ahb_clk_src",
1889                         },
1890                         .num_parents = 1,
1891                         .ops = &clk_branch2_ops,
1892                 },
1893         },
1894 };
1895
1896 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1897         .halt_reg = 0x3024,
1898         .clkr = {
1899                 .enable_reg = 0x3024,
1900                 .enable_mask = BIT(0),
1901                 .hw.init = &(struct clk_init_data){
1902                         .name = "camss_phy0_csi0phytimer_clk",
1903                         .parent_names = (const char *[]){
1904                                 "csi0phytimer_clk_src",
1905                         },
1906                         .num_parents = 1,
1907                         .flags = CLK_SET_RATE_PARENT,
1908                         .ops = &clk_branch2_ops,
1909                 },
1910         },
1911 };
1912
1913 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1914         .halt_reg = 0x3054,
1915         .clkr = {
1916                 .enable_reg = 0x3054,
1917                 .enable_mask = BIT(0),
1918                 .hw.init = &(struct clk_init_data){
1919                         .name = "camss_phy1_csi1phytimer_clk",
1920                         .parent_names = (const char *[]){
1921                                 "csi1phytimer_clk_src",
1922                         },
1923                         .num_parents = 1,
1924                         .flags = CLK_SET_RATE_PARENT,
1925                         .ops = &clk_branch2_ops,
1926                 },
1927         },
1928 };
1929
1930 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1931         .halt_reg = 0x3084,
1932         .clkr = {
1933                 .enable_reg = 0x3084,
1934                 .enable_mask = BIT(0),
1935                 .hw.init = &(struct clk_init_data){
1936                         .name = "camss_phy2_csi2phytimer_clk",
1937                         .parent_names = (const char *[]){
1938                                 "csi2phytimer_clk_src",
1939                         },
1940                         .num_parents = 1,
1941                         .flags = CLK_SET_RATE_PARENT,
1942                         .ops = &clk_branch2_ops,
1943                 },
1944         },
1945 };
1946
1947 static struct clk_branch camss_top_ahb_clk = {
1948         .halt_reg = 0x3484,
1949         .clkr = {
1950                 .enable_reg = 0x3484,
1951                 .enable_mask = BIT(0),
1952                 .hw.init = &(struct clk_init_data){
1953                         .name = "camss_top_ahb_clk",
1954                         .parent_names = (const char *[]){
1955                                 "mmss_ahb_clk_src",
1956                         },
1957                         .num_parents = 1,
1958                         .flags = CLK_SET_RATE_PARENT,
1959                         .ops = &clk_branch2_ops,
1960                 },
1961         },
1962 };
1963
1964 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1965         .halt_reg = 0x36b4,
1966         .clkr = {
1967                 .enable_reg = 0x36b4,
1968                 .enable_mask = BIT(0),
1969                 .hw.init = &(struct clk_init_data){
1970                         .name = "camss_vfe_cpp_ahb_clk",
1971                         .parent_names = (const char *[]){
1972                                 "mmss_ahb_clk_src",
1973                         },
1974                         .num_parents = 1,
1975                         .flags = CLK_SET_RATE_PARENT,
1976                         .ops = &clk_branch2_ops,
1977                 },
1978         },
1979 };
1980
1981 static struct clk_branch camss_vfe_cpp_clk = {
1982         .halt_reg = 0x36b0,
1983         .clkr = {
1984                 .enable_reg = 0x36b0,
1985                 .enable_mask = BIT(0),
1986                 .hw.init = &(struct clk_init_data){
1987                         .name = "camss_vfe_cpp_clk",
1988                         .parent_names = (const char *[]){
1989                                 "cpp_clk_src",
1990                         },
1991                         .num_parents = 1,
1992                         .flags = CLK_SET_RATE_PARENT,
1993                         .ops = &clk_branch2_ops,
1994                 },
1995         },
1996 };
1997
1998 static struct clk_branch camss_vfe_vfe0_clk = {
1999         .halt_reg = 0x36a8,
2000         .clkr = {
2001                 .enable_reg = 0x36a8,
2002                 .enable_mask = BIT(0),
2003                 .hw.init = &(struct clk_init_data){
2004                         .name = "camss_vfe_vfe0_clk",
2005                         .parent_names = (const char *[]){
2006                                 "vfe0_clk_src",
2007                         },
2008                         .num_parents = 1,
2009                         .flags = CLK_SET_RATE_PARENT,
2010                         .ops = &clk_branch2_ops,
2011                 },
2012         },
2013 };
2014
2015 static struct clk_branch camss_vfe_vfe1_clk = {
2016         .halt_reg = 0x36ac,
2017         .clkr = {
2018                 .enable_reg = 0x36ac,
2019                 .enable_mask = BIT(0),
2020                 .hw.init = &(struct clk_init_data){
2021                         .name = "camss_vfe_vfe1_clk",
2022                         .parent_names = (const char *[]){
2023                                 "vfe1_clk_src",
2024                         },
2025                         .num_parents = 1,
2026                         .flags = CLK_SET_RATE_PARENT,
2027                         .ops = &clk_branch2_ops,
2028                 },
2029         },
2030 };
2031
2032 static struct clk_branch camss_vfe_vfe_ahb_clk = {
2033         .halt_reg = 0x36b8,
2034         .clkr = {
2035                 .enable_reg = 0x36b8,
2036                 .enable_mask = BIT(0),
2037                 .hw.init = &(struct clk_init_data){
2038                         .name = "camss_vfe_vfe_ahb_clk",
2039                         .parent_names = (const char *[]){
2040                                 "mmss_ahb_clk_src",
2041                         },
2042                         .num_parents = 1,
2043                         .flags = CLK_SET_RATE_PARENT,
2044                         .ops = &clk_branch2_ops,
2045                 },
2046         },
2047 };
2048
2049 static struct clk_branch camss_vfe_vfe_axi_clk = {
2050         .halt_reg = 0x36bc,
2051         .clkr = {
2052                 .enable_reg = 0x36bc,
2053                 .enable_mask = BIT(0),
2054                 .hw.init = &(struct clk_init_data){
2055                         .name = "camss_vfe_vfe_axi_clk",
2056                         .parent_names = (const char *[]){
2057                                 "mmss_axi_clk_src",
2058                         },
2059                         .num_parents = 1,
2060                         .flags = CLK_SET_RATE_PARENT,
2061                         .ops = &clk_branch2_ops,
2062                 },
2063         },
2064 };
2065
2066 static struct clk_branch mdss_ahb_clk = {
2067         .halt_reg = 0x2308,
2068         .clkr = {
2069                 .enable_reg = 0x2308,
2070                 .enable_mask = BIT(0),
2071                 .hw.init = &(struct clk_init_data){
2072                         .name = "mdss_ahb_clk",
2073                         .parent_names = (const char *[]){
2074                                 "mmss_ahb_clk_src",
2075                         },
2076                         .num_parents = 1,
2077                         .flags = CLK_SET_RATE_PARENT,
2078                         .ops = &clk_branch2_ops,
2079                 },
2080         },
2081 };
2082
2083 static struct clk_branch mdss_axi_clk = {
2084         .halt_reg = 0x2310,
2085         .clkr = {
2086                 .enable_reg = 0x2310,
2087                 .enable_mask = BIT(0),
2088                 .hw.init = &(struct clk_init_data){
2089                         .name = "mdss_axi_clk",
2090                         .parent_names = (const char *[]){
2091                                 "mmss_axi_clk_src",
2092                         },
2093                         .num_parents = 1,
2094                         .flags = CLK_SET_RATE_PARENT,
2095                         .ops = &clk_branch2_ops,
2096                 },
2097         },
2098 };
2099
2100 static struct clk_branch mdss_byte0_clk = {
2101         .halt_reg = 0x233c,
2102         .clkr = {
2103                 .enable_reg = 0x233c,
2104                 .enable_mask = BIT(0),
2105                 .hw.init = &(struct clk_init_data){
2106                         .name = "mdss_byte0_clk",
2107                         .parent_names = (const char *[]){
2108                                 "byte0_clk_src",
2109                         },
2110                         .num_parents = 1,
2111                         .flags = CLK_SET_RATE_PARENT,
2112                         .ops = &clk_branch2_ops,
2113                 },
2114         },
2115 };
2116
2117 static struct clk_branch mdss_byte1_clk = {
2118         .halt_reg = 0x2340,
2119         .clkr = {
2120                 .enable_reg = 0x2340,
2121                 .enable_mask = BIT(0),
2122                 .hw.init = &(struct clk_init_data){
2123                         .name = "mdss_byte1_clk",
2124                         .parent_names = (const char *[]){
2125                                 "byte1_clk_src",
2126                         },
2127                         .num_parents = 1,
2128                         .flags = CLK_SET_RATE_PARENT,
2129                         .ops = &clk_branch2_ops,
2130                 },
2131         },
2132 };
2133
2134 static struct clk_branch mdss_edpaux_clk = {
2135         .halt_reg = 0x2334,
2136         .clkr = {
2137                 .enable_reg = 0x2334,
2138                 .enable_mask = BIT(0),
2139                 .hw.init = &(struct clk_init_data){
2140                         .name = "mdss_edpaux_clk",
2141                         .parent_names = (const char *[]){
2142                                 "edpaux_clk_src",
2143                         },
2144                         .num_parents = 1,
2145                         .flags = CLK_SET_RATE_PARENT,
2146                         .ops = &clk_branch2_ops,
2147                 },
2148         },
2149 };
2150
2151 static struct clk_branch mdss_edplink_clk = {
2152         .halt_reg = 0x2330,
2153         .clkr = {
2154                 .enable_reg = 0x2330,
2155                 .enable_mask = BIT(0),
2156                 .hw.init = &(struct clk_init_data){
2157                         .name = "mdss_edplink_clk",
2158                         .parent_names = (const char *[]){
2159                                 "edplink_clk_src",
2160                         },
2161                         .num_parents = 1,
2162                         .flags = CLK_SET_RATE_PARENT,
2163                         .ops = &clk_branch2_ops,
2164                 },
2165         },
2166 };
2167
2168 static struct clk_branch mdss_edppixel_clk = {
2169         .halt_reg = 0x232c,
2170         .clkr = {
2171                 .enable_reg = 0x232c,
2172                 .enable_mask = BIT(0),
2173                 .hw.init = &(struct clk_init_data){
2174                         .name = "mdss_edppixel_clk",
2175                         .parent_names = (const char *[]){
2176                                 "edppixel_clk_src",
2177                         },
2178                         .num_parents = 1,
2179                         .flags = CLK_SET_RATE_PARENT,
2180                         .ops = &clk_branch2_ops,
2181                 },
2182         },
2183 };
2184
2185 static struct clk_branch mdss_esc0_clk = {
2186         .halt_reg = 0x2344,
2187         .clkr = {
2188                 .enable_reg = 0x2344,
2189                 .enable_mask = BIT(0),
2190                 .hw.init = &(struct clk_init_data){
2191                         .name = "mdss_esc0_clk",
2192                         .parent_names = (const char *[]){
2193                                 "esc0_clk_src",
2194                         },
2195                         .num_parents = 1,
2196                         .flags = CLK_SET_RATE_PARENT,
2197                         .ops = &clk_branch2_ops,
2198                 },
2199         },
2200 };
2201
2202 static struct clk_branch mdss_esc1_clk = {
2203         .halt_reg = 0x2348,
2204         .clkr = {
2205                 .enable_reg = 0x2348,
2206                 .enable_mask = BIT(0),
2207                 .hw.init = &(struct clk_init_data){
2208                         .name = "mdss_esc1_clk",
2209                         .parent_names = (const char *[]){
2210                                 "esc1_clk_src",
2211                         },
2212                         .num_parents = 1,
2213                         .flags = CLK_SET_RATE_PARENT,
2214                         .ops = &clk_branch2_ops,
2215                 },
2216         },
2217 };
2218
2219 static struct clk_branch mdss_extpclk_clk = {
2220         .halt_reg = 0x2324,
2221         .clkr = {
2222                 .enable_reg = 0x2324,
2223                 .enable_mask = BIT(0),
2224                 .hw.init = &(struct clk_init_data){
2225                         .name = "mdss_extpclk_clk",
2226                         .parent_names = (const char *[]){
2227                                 "extpclk_clk_src",
2228                         },
2229                         .num_parents = 1,
2230                         .flags = CLK_SET_RATE_PARENT,
2231                         .ops = &clk_branch2_ops,
2232                 },
2233         },
2234 };
2235
2236 static struct clk_branch mdss_hdmi_ahb_clk = {
2237         .halt_reg = 0x230c,
2238         .clkr = {
2239                 .enable_reg = 0x230c,
2240                 .enable_mask = BIT(0),
2241                 .hw.init = &(struct clk_init_data){
2242                         .name = "mdss_hdmi_ahb_clk",
2243                         .parent_names = (const char *[]){
2244                                 "mmss_ahb_clk_src",
2245                         },
2246                         .num_parents = 1,
2247                         .flags = CLK_SET_RATE_PARENT,
2248                         .ops = &clk_branch2_ops,
2249                 },
2250         },
2251 };
2252
2253 static struct clk_branch mdss_hdmi_clk = {
2254         .halt_reg = 0x2338,
2255         .clkr = {
2256                 .enable_reg = 0x2338,
2257                 .enable_mask = BIT(0),
2258                 .hw.init = &(struct clk_init_data){
2259                         .name = "mdss_hdmi_clk",
2260                         .parent_names = (const char *[]){
2261                                 "hdmi_clk_src",
2262                         },
2263                         .num_parents = 1,
2264                         .flags = CLK_SET_RATE_PARENT,
2265                         .ops = &clk_branch2_ops,
2266                 },
2267         },
2268 };
2269
2270 static struct clk_branch mdss_mdp_clk = {
2271         .halt_reg = 0x231c,
2272         .clkr = {
2273                 .enable_reg = 0x231c,
2274                 .enable_mask = BIT(0),
2275                 .hw.init = &(struct clk_init_data){
2276                         .name = "mdss_mdp_clk",
2277                         .parent_names = (const char *[]){
2278                                 "mdp_clk_src",
2279                         },
2280                         .num_parents = 1,
2281                         .flags = CLK_SET_RATE_PARENT,
2282                         .ops = &clk_branch2_ops,
2283                 },
2284         },
2285 };
2286
2287 static struct clk_branch mdss_mdp_lut_clk = {
2288         .halt_reg = 0x2320,
2289         .clkr = {
2290                 .enable_reg = 0x2320,
2291                 .enable_mask = BIT(0),
2292                 .hw.init = &(struct clk_init_data){
2293                         .name = "mdss_mdp_lut_clk",
2294                         .parent_names = (const char *[]){
2295                                 "mdp_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 mdss_pclk0_clk = {
2305         .halt_reg = 0x2314,
2306         .clkr = {
2307                 .enable_reg = 0x2314,
2308                 .enable_mask = BIT(0),
2309                 .hw.init = &(struct clk_init_data){
2310                         .name = "mdss_pclk0_clk",
2311                         .parent_names = (const char *[]){
2312                                 "pclk0_clk_src",
2313                         },
2314                         .num_parents = 1,
2315                         .flags = CLK_SET_RATE_PARENT,
2316                         .ops = &clk_branch2_ops,
2317                 },
2318         },
2319 };
2320
2321 static struct clk_branch mdss_pclk1_clk = {
2322         .halt_reg = 0x2318,
2323         .clkr = {
2324                 .enable_reg = 0x2318,
2325                 .enable_mask = BIT(0),
2326                 .hw.init = &(struct clk_init_data){
2327                         .name = "mdss_pclk1_clk",
2328                         .parent_names = (const char *[]){
2329                                 "pclk1_clk_src",
2330                         },
2331                         .num_parents = 1,
2332                         .flags = CLK_SET_RATE_PARENT,
2333                         .ops = &clk_branch2_ops,
2334                 },
2335         },
2336 };
2337
2338 static struct clk_branch mdss_vsync_clk = {
2339         .halt_reg = 0x2328,
2340         .clkr = {
2341                 .enable_reg = 0x2328,
2342                 .enable_mask = BIT(0),
2343                 .hw.init = &(struct clk_init_data){
2344                         .name = "mdss_vsync_clk",
2345                         .parent_names = (const char *[]){
2346                                 "vsync_clk_src",
2347                         },
2348                         .num_parents = 1,
2349                         .flags = CLK_SET_RATE_PARENT,
2350                         .ops = &clk_branch2_ops,
2351                 },
2352         },
2353 };
2354
2355 static struct clk_branch mmss_rbcpr_ahb_clk = {
2356         .halt_reg = 0x4088,
2357         .clkr = {
2358                 .enable_reg = 0x4088,
2359                 .enable_mask = BIT(0),
2360                 .hw.init = &(struct clk_init_data){
2361                         .name = "mmss_rbcpr_ahb_clk",
2362                         .parent_names = (const char *[]){
2363                                 "mmss_ahb_clk_src",
2364                         },
2365                         .num_parents = 1,
2366                         .flags = CLK_SET_RATE_PARENT,
2367                         .ops = &clk_branch2_ops,
2368                 },
2369         },
2370 };
2371
2372 static struct clk_branch mmss_rbcpr_clk = {
2373         .halt_reg = 0x4084,
2374         .clkr = {
2375                 .enable_reg = 0x4084,
2376                 .enable_mask = BIT(0),
2377                 .hw.init = &(struct clk_init_data){
2378                         .name = "mmss_rbcpr_clk",
2379                         .parent_names = (const char *[]){
2380                                 "rbcpr_clk_src",
2381                         },
2382                         .num_parents = 1,
2383                         .flags = CLK_SET_RATE_PARENT,
2384                         .ops = &clk_branch2_ops,
2385                 },
2386         },
2387 };
2388
2389 static struct clk_branch mmss_spdm_ahb_clk = {
2390         .halt_reg = 0x0230,
2391         .clkr = {
2392                 .enable_reg = 0x0230,
2393                 .enable_mask = BIT(0),
2394                 .hw.init = &(struct clk_init_data){
2395                         .name = "mmss_spdm_ahb_clk",
2396                         .parent_names = (const char *[]){
2397                                 "mmss_spdm_ahb_div_clk",
2398                         },
2399                         .num_parents = 1,
2400                         .flags = CLK_SET_RATE_PARENT,
2401                         .ops = &clk_branch2_ops,
2402                 },
2403         },
2404 };
2405
2406 static struct clk_branch mmss_spdm_axi_clk = {
2407         .halt_reg = 0x0210,
2408         .clkr = {
2409                 .enable_reg = 0x0210,
2410                 .enable_mask = BIT(0),
2411                 .hw.init = &(struct clk_init_data){
2412                         .name = "mmss_spdm_axi_clk",
2413                         .parent_names = (const char *[]){
2414                                 "mmss_spdm_axi_div_clk",
2415                         },
2416                         .num_parents = 1,
2417                         .flags = CLK_SET_RATE_PARENT,
2418                         .ops = &clk_branch2_ops,
2419                 },
2420         },
2421 };
2422
2423 static struct clk_branch mmss_spdm_csi0_clk = {
2424         .halt_reg = 0x023c,
2425         .clkr = {
2426                 .enable_reg = 0x023c,
2427                 .enable_mask = BIT(0),
2428                 .hw.init = &(struct clk_init_data){
2429                         .name = "mmss_spdm_csi0_clk",
2430                         .parent_names = (const char *[]){
2431                                 "mmss_spdm_csi0_div_clk",
2432                         },
2433                         .num_parents = 1,
2434                         .flags = CLK_SET_RATE_PARENT,
2435                         .ops = &clk_branch2_ops,
2436                 },
2437         },
2438 };
2439
2440 static struct clk_branch mmss_spdm_gfx3d_clk = {
2441         .halt_reg = 0x022c,
2442         .clkr = {
2443                 .enable_reg = 0x022c,
2444                 .enable_mask = BIT(0),
2445                 .hw.init = &(struct clk_init_data){
2446                         .name = "mmss_spdm_gfx3d_clk",
2447                         .parent_names = (const char *[]){
2448                                 "mmss_spdm_gfx3d_div_clk",
2449                         },
2450                         .num_parents = 1,
2451                         .flags = CLK_SET_RATE_PARENT,
2452                         .ops = &clk_branch2_ops,
2453                 },
2454         },
2455 };
2456
2457 static struct clk_branch mmss_spdm_jpeg0_clk = {
2458         .halt_reg = 0x0204,
2459         .clkr = {
2460                 .enable_reg = 0x0204,
2461                 .enable_mask = BIT(0),
2462                 .hw.init = &(struct clk_init_data){
2463                         .name = "mmss_spdm_jpeg0_clk",
2464                         .parent_names = (const char *[]){
2465                                 "mmss_spdm_jpeg0_div_clk",
2466                         },
2467                         .num_parents = 1,
2468                         .flags = CLK_SET_RATE_PARENT,
2469                         .ops = &clk_branch2_ops,
2470                 },
2471         },
2472 };
2473
2474 static struct clk_branch mmss_spdm_jpeg1_clk = {
2475         .halt_reg = 0x0208,
2476         .clkr = {
2477                 .enable_reg = 0x0208,
2478                 .enable_mask = BIT(0),
2479                 .hw.init = &(struct clk_init_data){
2480                         .name = "mmss_spdm_jpeg1_clk",
2481                         .parent_names = (const char *[]){
2482                                 "mmss_spdm_jpeg1_div_clk",
2483                         },
2484                         .num_parents = 1,
2485                         .flags = CLK_SET_RATE_PARENT,
2486                         .ops = &clk_branch2_ops,
2487                 },
2488         },
2489 };
2490
2491 static struct clk_branch mmss_spdm_jpeg2_clk = {
2492         .halt_reg = 0x0224,
2493         .clkr = {
2494                 .enable_reg = 0x0224,
2495                 .enable_mask = BIT(0),
2496                 .hw.init = &(struct clk_init_data){
2497                         .name = "mmss_spdm_jpeg2_clk",
2498                         .parent_names = (const char *[]){
2499                                 "mmss_spdm_jpeg2_div_clk",
2500                         },
2501                         .num_parents = 1,
2502                         .flags = CLK_SET_RATE_PARENT,
2503                         .ops = &clk_branch2_ops,
2504                 },
2505         },
2506 };
2507
2508 static struct clk_branch mmss_spdm_mdp_clk = {
2509         .halt_reg = 0x020c,
2510         .clkr = {
2511                 .enable_reg = 0x020c,
2512                 .enable_mask = BIT(0),
2513                 .hw.init = &(struct clk_init_data){
2514                         .name = "mmss_spdm_mdp_clk",
2515                         .parent_names = (const char *[]){
2516                                 "mmss_spdm_mdp_div_clk",
2517                         },
2518                         .num_parents = 1,
2519                         .flags = CLK_SET_RATE_PARENT,
2520                         .ops = &clk_branch2_ops,
2521                 },
2522         },
2523 };
2524
2525 static struct clk_branch mmss_spdm_pclk0_clk = {
2526         .halt_reg = 0x0234,
2527         .clkr = {
2528                 .enable_reg = 0x0234,
2529                 .enable_mask = BIT(0),
2530                 .hw.init = &(struct clk_init_data){
2531                         .name = "mmss_spdm_pclk0_clk",
2532                         .parent_names = (const char *[]){
2533                                 "mmss_spdm_pclk0_div_clk",
2534                         },
2535                         .num_parents = 1,
2536                         .flags = CLK_SET_RATE_PARENT,
2537                         .ops = &clk_branch2_ops,
2538                 },
2539         },
2540 };
2541
2542 static struct clk_branch mmss_spdm_pclk1_clk = {
2543         .halt_reg = 0x0228,
2544         .clkr = {
2545                 .enable_reg = 0x0228,
2546                 .enable_mask = BIT(0),
2547                 .hw.init = &(struct clk_init_data){
2548                         .name = "mmss_spdm_pclk1_clk",
2549                         .parent_names = (const char *[]){
2550                                 "mmss_spdm_pclk1_div_clk",
2551                         },
2552                         .num_parents = 1,
2553                         .flags = CLK_SET_RATE_PARENT,
2554                         .ops = &clk_branch2_ops,
2555                 },
2556         },
2557 };
2558
2559 static struct clk_branch mmss_spdm_vcodec0_clk = {
2560         .halt_reg = 0x0214,
2561         .clkr = {
2562                 .enable_reg = 0x0214,
2563                 .enable_mask = BIT(0),
2564                 .hw.init = &(struct clk_init_data){
2565                         .name = "mmss_spdm_vcodec0_clk",
2566                         .parent_names = (const char *[]){
2567                                 "mmss_spdm_vcodec0_div_clk",
2568                         },
2569                         .num_parents = 1,
2570                         .flags = CLK_SET_RATE_PARENT,
2571                         .ops = &clk_branch2_ops,
2572                 },
2573         },
2574 };
2575
2576 static struct clk_branch mmss_spdm_vfe0_clk = {
2577         .halt_reg = 0x0218,
2578         .clkr = {
2579                 .enable_reg = 0x0218,
2580                 .enable_mask = BIT(0),
2581                 .hw.init = &(struct clk_init_data){
2582                         .name = "mmss_spdm_vfe0_clk",
2583                         .parent_names = (const char *[]){
2584                                 "mmss_spdm_vfe0_div_clk",
2585                         },
2586                         .num_parents = 1,
2587                         .flags = CLK_SET_RATE_PARENT,
2588                         .ops = &clk_branch2_ops,
2589                 },
2590         },
2591 };
2592
2593 static struct clk_branch mmss_spdm_vfe1_clk = {
2594         .halt_reg = 0x021c,
2595         .clkr = {
2596                 .enable_reg = 0x021c,
2597                 .enable_mask = BIT(0),
2598                 .hw.init = &(struct clk_init_data){
2599                         .name = "mmss_spdm_vfe1_clk",
2600                         .parent_names = (const char *[]){
2601                                 "mmss_spdm_vfe1_div_clk",
2602                         },
2603                         .num_parents = 1,
2604                         .flags = CLK_SET_RATE_PARENT,
2605                         .ops = &clk_branch2_ops,
2606                 },
2607         },
2608 };
2609
2610 static struct clk_branch mmss_spdm_rm_axi_clk = {
2611         .halt_reg = 0x0304,
2612         .clkr = {
2613                 .enable_reg = 0x0304,
2614                 .enable_mask = BIT(0),
2615                 .hw.init = &(struct clk_init_data){
2616                         .name = "mmss_spdm_rm_axi_clk",
2617                         .parent_names = (const char *[]){
2618                                 "mmss_axi_clk_src",
2619                         },
2620                         .num_parents = 1,
2621                         .flags = CLK_SET_RATE_PARENT,
2622                         .ops = &clk_branch2_ops,
2623                 },
2624         },
2625 };
2626
2627 static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = {
2628         .halt_reg = 0x0308,
2629         .clkr = {
2630                 .enable_reg = 0x0308,
2631                 .enable_mask = BIT(0),
2632                 .hw.init = &(struct clk_init_data){
2633                         .name = "mmss_spdm_rm_ocmemnoc_clk",
2634                         .parent_names = (const char *[]){
2635                                 "ocmemnoc_clk_src",
2636                         },
2637                         .num_parents = 1,
2638                         .flags = CLK_SET_RATE_PARENT,
2639                         .ops = &clk_branch2_ops,
2640                 },
2641         },
2642 };
2643
2644
2645 static struct clk_branch mmss_misc_ahb_clk = {
2646         .halt_reg = 0x502c,
2647         .clkr = {
2648                 .enable_reg = 0x502c,
2649                 .enable_mask = BIT(0),
2650                 .hw.init = &(struct clk_init_data){
2651                         .name = "mmss_misc_ahb_clk",
2652                         .parent_names = (const char *[]){
2653                                 "mmss_ahb_clk_src",
2654                         },
2655                         .num_parents = 1,
2656                         .flags = CLK_SET_RATE_PARENT,
2657                         .ops = &clk_branch2_ops,
2658                 },
2659         },
2660 };
2661
2662 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2663         .halt_reg = 0x5024,
2664         .clkr = {
2665                 .enable_reg = 0x5024,
2666                 .enable_mask = BIT(0),
2667                 .hw.init = &(struct clk_init_data){
2668                         .name = "mmss_mmssnoc_ahb_clk",
2669                         .parent_names = (const char *[]){
2670                                 "mmss_ahb_clk_src",
2671                         },
2672                         .num_parents = 1,
2673                         .ops = &clk_branch2_ops,
2674                         .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2675                 },
2676         },
2677 };
2678
2679 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2680         .halt_reg = 0x5028,
2681         .clkr = {
2682                 .enable_reg = 0x5028,
2683                 .enable_mask = BIT(0),
2684                 .hw.init = &(struct clk_init_data){
2685                         .name = "mmss_mmssnoc_bto_ahb_clk",
2686                         .parent_names = (const char *[]){
2687                                 "mmss_ahb_clk_src",
2688                         },
2689                         .num_parents = 1,
2690                         .ops = &clk_branch2_ops,
2691                         .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2692                 },
2693         },
2694 };
2695
2696 static struct clk_branch mmss_mmssnoc_axi_clk = {
2697         .halt_reg = 0x506c,
2698         .clkr = {
2699                 .enable_reg = 0x506c,
2700                 .enable_mask = BIT(0),
2701                 .hw.init = &(struct clk_init_data){
2702                         .name = "mmss_mmssnoc_axi_clk",
2703                         .parent_names = (const char *[]){
2704                                 "mmss_axi_clk_src",
2705                         },
2706                         .num_parents = 1,
2707                         .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2708                         .ops = &clk_branch2_ops,
2709                 },
2710         },
2711 };
2712
2713 static struct clk_branch mmss_s0_axi_clk = {
2714         .halt_reg = 0x5064,
2715         .clkr = {
2716                 .enable_reg = 0x5064,
2717                 .enable_mask = BIT(0),
2718                 .hw.init = &(struct clk_init_data){
2719                         .name = "mmss_s0_axi_clk",
2720                         .parent_names = (const char *[]){
2721                                 "mmss_axi_clk_src",
2722                         },
2723                         .num_parents = 1,
2724                         .ops = &clk_branch2_ops,
2725                         .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2726                 },
2727         },
2728 };
2729
2730 static struct clk_branch ocmemcx_ahb_clk = {
2731         .halt_reg = 0x405c,
2732         .clkr = {
2733                 .enable_reg = 0x405c,
2734                 .enable_mask = BIT(0),
2735                 .hw.init = &(struct clk_init_data){
2736                         .name = "ocmemcx_ahb_clk",
2737                         .parent_names = (const char *[]){
2738                                 "mmss_ahb_clk_src",
2739                         },
2740                         .num_parents = 1,
2741                         .flags = CLK_SET_RATE_PARENT,
2742                         .ops = &clk_branch2_ops,
2743                 },
2744         },
2745 };
2746
2747 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2748         .halt_reg = 0x4058,
2749         .clkr = {
2750                 .enable_reg = 0x4058,
2751                 .enable_mask = BIT(0),
2752                 .hw.init = &(struct clk_init_data){
2753                         .name = "ocmemcx_ocmemnoc_clk",
2754                         .parent_names = (const char *[]){
2755                                 "ocmemnoc_clk_src",
2756                         },
2757                         .num_parents = 1,
2758                         .flags = CLK_SET_RATE_PARENT,
2759                         .ops = &clk_branch2_ops,
2760                 },
2761         },
2762 };
2763
2764 static struct clk_branch oxili_ocmemgx_clk = {
2765         .halt_reg = 0x402c,
2766         .clkr = {
2767                 .enable_reg = 0x402c,
2768                 .enable_mask = BIT(0),
2769                 .hw.init = &(struct clk_init_data){
2770                         .name = "oxili_ocmemgx_clk",
2771                         .parent_names = (const char *[]){
2772                                 "gfx3d_clk_src",
2773                         },
2774                         .num_parents = 1,
2775                         .flags = CLK_SET_RATE_PARENT,
2776                         .ops = &clk_branch2_ops,
2777                 },
2778         },
2779 };
2780
2781 static struct clk_branch oxili_gfx3d_clk = {
2782         .halt_reg = 0x4028,
2783         .clkr = {
2784                 .enable_reg = 0x4028,
2785                 .enable_mask = BIT(0),
2786                 .hw.init = &(struct clk_init_data){
2787                         .name = "oxili_gfx3d_clk",
2788                         .parent_names = (const char *[]){
2789                                 "gfx3d_clk_src",
2790                         },
2791                         .num_parents = 1,
2792                         .flags = CLK_SET_RATE_PARENT,
2793                         .ops = &clk_branch2_ops,
2794                 },
2795         },
2796 };
2797
2798 static struct clk_branch oxili_rbbmtimer_clk = {
2799         .halt_reg = 0x40b0,
2800         .clkr = {
2801                 .enable_reg = 0x40b0,
2802                 .enable_mask = BIT(0),
2803                 .hw.init = &(struct clk_init_data){
2804                         .name = "oxili_rbbmtimer_clk",
2805                         .parent_names = (const char *[]){
2806                                 "rbbmtimer_clk_src",
2807                         },
2808                         .num_parents = 1,
2809                         .flags = CLK_SET_RATE_PARENT,
2810                         .ops = &clk_branch2_ops,
2811                 },
2812         },
2813 };
2814
2815 static struct clk_branch oxilicx_ahb_clk = {
2816         .halt_reg = 0x403c,
2817         .clkr = {
2818                 .enable_reg = 0x403c,
2819                 .enable_mask = BIT(0),
2820                 .hw.init = &(struct clk_init_data){
2821                         .name = "oxilicx_ahb_clk",
2822                         .parent_names = (const char *[]){
2823                                 "mmss_ahb_clk_src",
2824                         },
2825                         .num_parents = 1,
2826                         .flags = CLK_SET_RATE_PARENT,
2827                         .ops = &clk_branch2_ops,
2828                 },
2829         },
2830 };
2831
2832 static struct clk_branch venus0_ahb_clk = {
2833         .halt_reg = 0x1030,
2834         .clkr = {
2835                 .enable_reg = 0x1030,
2836                 .enable_mask = BIT(0),
2837                 .hw.init = &(struct clk_init_data){
2838                         .name = "venus0_ahb_clk",
2839                         .parent_names = (const char *[]){
2840                                 "mmss_ahb_clk_src",
2841                         },
2842                         .num_parents = 1,
2843                         .flags = CLK_SET_RATE_PARENT,
2844                         .ops = &clk_branch2_ops,
2845                 },
2846         },
2847 };
2848
2849 static struct clk_branch venus0_axi_clk = {
2850         .halt_reg = 0x1034,
2851         .clkr = {
2852                 .enable_reg = 0x1034,
2853                 .enable_mask = BIT(0),
2854                 .hw.init = &(struct clk_init_data){
2855                         .name = "venus0_axi_clk",
2856                         .parent_names = (const char *[]){
2857                                 "mmss_axi_clk_src",
2858                         },
2859                         .num_parents = 1,
2860                         .flags = CLK_SET_RATE_PARENT,
2861                         .ops = &clk_branch2_ops,
2862                 },
2863         },
2864 };
2865
2866 static struct clk_branch venus0_core0_vcodec_clk = {
2867         .halt_reg = 0x1048,
2868         .clkr = {
2869                 .enable_reg = 0x1048,
2870                 .enable_mask = BIT(0),
2871                 .hw.init = &(struct clk_init_data){
2872                         .name = "venus0_core0_vcodec_clk",
2873                         .parent_names = (const char *[]){
2874                                 "vcodec0_clk_src",
2875                         },
2876                         .num_parents = 1,
2877                         .flags = CLK_SET_RATE_PARENT,
2878                         .ops = &clk_branch2_ops,
2879                 },
2880         },
2881 };
2882
2883 static struct clk_branch venus0_core1_vcodec_clk = {
2884         .halt_reg = 0x104c,
2885         .clkr = {
2886                 .enable_reg = 0x104c,
2887                 .enable_mask = BIT(0),
2888                 .hw.init = &(struct clk_init_data){
2889                         .name = "venus0_core1_vcodec_clk",
2890                         .parent_names = (const char *[]){
2891                                 "vcodec0_clk_src",
2892                         },
2893                         .num_parents = 1,
2894                         .flags = CLK_SET_RATE_PARENT,
2895                         .ops = &clk_branch2_ops,
2896                 },
2897         },
2898 };
2899
2900 static struct clk_branch venus0_ocmemnoc_clk = {
2901         .halt_reg = 0x1038,
2902         .clkr = {
2903                 .enable_reg = 0x1038,
2904                 .enable_mask = BIT(0),
2905                 .hw.init = &(struct clk_init_data){
2906                         .name = "venus0_ocmemnoc_clk",
2907                         .parent_names = (const char *[]){
2908                                 "ocmemnoc_clk_src",
2909                         },
2910                         .num_parents = 1,
2911                         .flags = CLK_SET_RATE_PARENT,
2912                         .ops = &clk_branch2_ops,
2913                 },
2914         },
2915 };
2916
2917 static struct clk_branch venus0_vcodec0_clk = {
2918         .halt_reg = 0x1028,
2919         .clkr = {
2920                 .enable_reg = 0x1028,
2921                 .enable_mask = BIT(0),
2922                 .hw.init = &(struct clk_init_data){
2923                         .name = "venus0_vcodec0_clk",
2924                         .parent_names = (const char *[]){
2925                                 "vcodec0_clk_src",
2926                         },
2927                         .num_parents = 1,
2928                         .flags = CLK_SET_RATE_PARENT,
2929                         .ops = &clk_branch2_ops,
2930                 },
2931         },
2932 };
2933
2934 static struct clk_branch vpu_ahb_clk = {
2935         .halt_reg = 0x1430,
2936         .clkr = {
2937                 .enable_reg = 0x1430,
2938                 .enable_mask = BIT(0),
2939                 .hw.init = &(struct clk_init_data){
2940                         .name = "vpu_ahb_clk",
2941                         .parent_names = (const char *[]){
2942                                 "mmss_ahb_clk_src",
2943                         },
2944                         .num_parents = 1,
2945                         .flags = CLK_SET_RATE_PARENT,
2946                         .ops = &clk_branch2_ops,
2947                 },
2948         },
2949 };
2950
2951 static struct clk_branch vpu_axi_clk = {
2952         .halt_reg = 0x143c,
2953         .clkr = {
2954                 .enable_reg = 0x143c,
2955                 .enable_mask = BIT(0),
2956                 .hw.init = &(struct clk_init_data){
2957                         .name = "vpu_axi_clk",
2958                         .parent_names = (const char *[]){
2959                                 "mmss_axi_clk_src",
2960                         },
2961                         .num_parents = 1,
2962                         .flags = CLK_SET_RATE_PARENT,
2963                         .ops = &clk_branch2_ops,
2964                 },
2965         },
2966 };
2967
2968 static struct clk_branch vpu_bus_clk = {
2969         .halt_reg = 0x1440,
2970         .clkr = {
2971                 .enable_reg = 0x1440,
2972                 .enable_mask = BIT(0),
2973                 .hw.init = &(struct clk_init_data){
2974                         .name = "vpu_bus_clk",
2975                         .parent_names = (const char *[]){
2976                                 "vpu_bus_clk_src",
2977                         },
2978                         .num_parents = 1,
2979                         .flags = CLK_SET_RATE_PARENT,
2980                         .ops = &clk_branch2_ops,
2981                 },
2982         },
2983 };
2984
2985 static struct clk_branch vpu_cxo_clk = {
2986         .halt_reg = 0x1434,
2987         .clkr = {
2988                 .enable_reg = 0x1434,
2989                 .enable_mask = BIT(0),
2990                 .hw.init = &(struct clk_init_data){
2991                         .name = "vpu_cxo_clk",
2992                         .parent_names = (const char *[]){ "xo" },
2993                         .num_parents = 1,
2994                         .flags = CLK_SET_RATE_PARENT,
2995                         .ops = &clk_branch2_ops,
2996                 },
2997         },
2998 };
2999
3000 static struct clk_branch vpu_maple_clk = {
3001         .halt_reg = 0x142c,
3002         .clkr = {
3003                 .enable_reg = 0x142c,
3004                 .enable_mask = BIT(0),
3005                 .hw.init = &(struct clk_init_data){
3006                         .name = "vpu_maple_clk",
3007                         .parent_names = (const char *[]){
3008                                 "maple_clk_src",
3009                         },
3010                         .num_parents = 1,
3011                         .flags = CLK_SET_RATE_PARENT,
3012                         .ops = &clk_branch2_ops,
3013                 },
3014         },
3015 };
3016
3017 static struct clk_branch vpu_sleep_clk = {
3018         .halt_reg = 0x1438,
3019         .clkr = {
3020                 .enable_reg = 0x1438,
3021                 .enable_mask = BIT(0),
3022                 .hw.init = &(struct clk_init_data){
3023                         .name = "vpu_sleep_clk",
3024                         .parent_names = (const char *[]){
3025                                 "sleep_clk_src",
3026                         },
3027                         .num_parents = 1,
3028                         .flags = CLK_SET_RATE_PARENT,
3029                         .ops = &clk_branch2_ops,
3030                 },
3031         },
3032 };
3033
3034 static struct clk_branch vpu_vdp_clk = {
3035         .halt_reg = 0x1428,
3036         .clkr = {
3037                 .enable_reg = 0x1428,
3038                 .enable_mask = BIT(0),
3039                 .hw.init = &(struct clk_init_data){
3040                         .name = "vpu_vdp_clk",
3041                         .parent_names = (const char *[]){
3042                                 "vdp_clk_src",
3043                         },
3044                         .num_parents = 1,
3045                         .flags = CLK_SET_RATE_PARENT,
3046                         .ops = &clk_branch2_ops,
3047                 },
3048         },
3049 };
3050
3051 static const struct pll_config mmpll1_config = {
3052         .l = 60,
3053         .m = 25,
3054         .n = 32,
3055         .vco_val = 0x0,
3056         .vco_mask = 0x3 << 20,
3057         .pre_div_val = 0x0,
3058         .pre_div_mask = 0x7 << 12,
3059         .post_div_val = 0x0,
3060         .post_div_mask = 0x3 << 8,
3061         .mn_ena_mask = BIT(24),
3062         .main_output_mask = BIT(0),
3063 };
3064
3065 static const struct pll_config mmpll3_config = {
3066         .l = 48,
3067         .m = 7,
3068         .n = 16,
3069         .vco_val = 0x0,
3070         .vco_mask = 0x3 << 20,
3071         .pre_div_val = 0x0,
3072         .pre_div_mask = 0x7 << 12,
3073         .post_div_val = 0x0,
3074         .post_div_mask = 0x3 << 8,
3075         .mn_ena_mask = BIT(24),
3076         .main_output_mask = BIT(0),
3077         .aux_output_mask = BIT(1),
3078 };
3079
3080 static struct clk_regmap *mmcc_apq8084_clocks[] = {
3081         [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
3082         [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
3083         [MMPLL0] = &mmpll0.clkr,
3084         [MMPLL0_VOTE] = &mmpll0_vote,
3085         [MMPLL1] = &mmpll1.clkr,
3086         [MMPLL1_VOTE] = &mmpll1_vote,
3087         [MMPLL2] = &mmpll2.clkr,
3088         [MMPLL3] = &mmpll3.clkr,
3089         [MMPLL4] = &mmpll4.clkr,
3090         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3091         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3092         [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3093         [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3094         [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3095         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3096         [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3097         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3098         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3099         [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3100         [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
3101         [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3102         [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3103         [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
3104         [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3105         [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
3106         [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3107         [VP_CLK_SRC] = &vp_clk_src.clkr,
3108         [CCI_CLK_SRC] = &cci_clk_src.clkr,
3109         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3110         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3111         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3112         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3113         [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3114         [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3115         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3116         [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3117         [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3118         [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3119         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3120         [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3121         [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
3122         [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
3123         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3124         [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3125         [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3126         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3127         [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3128         [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3129         [MAPLE_CLK_SRC] = &maple_clk_src.clkr,
3130         [VDP_CLK_SRC] = &vdp_clk_src.clkr,
3131         [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
3132         [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
3133         [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
3134         [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
3135         [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
3136         [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
3137         [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
3138         [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
3139         [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
3140         [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3141         [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
3142         [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
3143         [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3144         [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3145         [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3146         [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3147         [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3148         [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3149         [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3150         [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3151         [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3152         [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3153         [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3154         [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3155         [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3156         [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3157         [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3158         [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3159         [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3160         [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3161         [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3162         [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3163         [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3164         [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3165         [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3166         [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3167         [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3168         [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
3169         [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
3170         [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
3171         [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
3172         [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
3173         [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3174         [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3175         [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3176         [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3177         [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3178         [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
3179         [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
3180         [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
3181         [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3182         [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
3183         [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
3184         [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
3185         [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
3186         [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
3187         [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
3188         [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3189         [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3190         [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3191         [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3192         [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3193         [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3194         [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3195         [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3196         [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3197         [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3198         [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3199         [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3200         [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3201         [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3202         [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3203         [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3204         [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3205         [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3206         [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3207         [MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr,
3208         [MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr,
3209         [MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr,
3210         [MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr,
3211         [MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr,
3212         [MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr,
3213         [MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr,
3214         [MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr,
3215         [MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr,
3216         [MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr,
3217         [MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr,
3218         [MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr,
3219         [MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr,
3220         [MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr,
3221         [MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr,
3222         [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3223         [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3224         [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3225         [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3226         [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3227         [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3228         [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3229         [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3230         [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3231         [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3232         [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3233         [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3234         [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3235         [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3236         [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3237         [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3238         [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3239         [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3240         [VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3241         [VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3242         [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3243         [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3244         [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3245         [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3246 };
3247
3248 static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3249         [MMSS_SPDM_RESET] = { 0x0200 },
3250         [MMSS_SPDM_RM_RESET] = { 0x0300 },
3251         [VENUS0_RESET] = { 0x1020 },
3252         [VPU_RESET] = { 0x1400 },
3253         [MDSS_RESET] = { 0x2300 },
3254         [AVSYNC_RESET] = { 0x2400 },
3255         [CAMSS_PHY0_RESET] = { 0x3020 },
3256         [CAMSS_PHY1_RESET] = { 0x3050 },
3257         [CAMSS_PHY2_RESET] = { 0x3080 },
3258         [CAMSS_CSI0_RESET] = { 0x30b0 },
3259         [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3260         [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3261         [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3262         [CAMSS_CSI1_RESET] = { 0x3120 },
3263         [CAMSS_CSI1PHY_RESET] = { 0x3130 },
3264         [CAMSS_CSI1RDI_RESET] = { 0x3140 },
3265         [CAMSS_CSI1PIX_RESET] = { 0x3150 },
3266         [CAMSS_CSI2_RESET] = { 0x3180 },
3267         [CAMSS_CSI2PHY_RESET] = { 0x3190 },
3268         [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3269         [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3270         [CAMSS_CSI3_RESET] = { 0x31e0 },
3271         [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3272         [CAMSS_CSI3RDI_RESET] = { 0x3200 },
3273         [CAMSS_CSI3PIX_RESET] = { 0x3210 },
3274         [CAMSS_ISPIF_RESET] = { 0x3220 },
3275         [CAMSS_CCI_RESET] = { 0x3340 },
3276         [CAMSS_MCLK0_RESET] = { 0x3380 },
3277         [CAMSS_MCLK1_RESET] = { 0x33b0 },
3278         [CAMSS_MCLK2_RESET] = { 0x33e0 },
3279         [CAMSS_MCLK3_RESET] = { 0x3410 },
3280         [CAMSS_GP0_RESET] = { 0x3440 },
3281         [CAMSS_GP1_RESET] = { 0x3470 },
3282         [CAMSS_TOP_RESET] = { 0x3480 },
3283         [CAMSS_AHB_RESET] = { 0x3488 },
3284         [CAMSS_MICRO_RESET] = { 0x3490 },
3285         [CAMSS_JPEG_RESET] = { 0x35a0 },
3286         [CAMSS_VFE_RESET] = { 0x36a0 },
3287         [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3288         [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3289         [OXILI_RESET] = { 0x4020 },
3290         [OXILICX_RESET] = { 0x4030 },
3291         [OCMEMCX_RESET] = { 0x4050 },
3292         [MMSS_RBCRP_RESET] = { 0x4080 },
3293         [MMSSNOCAHB_RESET] = { 0x5020 },
3294         [MMSSNOCAXI_RESET] = { 0x5060 },
3295 };
3296
3297 static const struct regmap_config mmcc_apq8084_regmap_config = {
3298         .reg_bits       = 32,
3299         .reg_stride     = 4,
3300         .val_bits       = 32,
3301         .max_register   = 0x5104,
3302         .fast_io        = true,
3303 };
3304
3305 static const struct qcom_cc_desc mmcc_apq8084_desc = {
3306         .config = &mmcc_apq8084_regmap_config,
3307         .clks = mmcc_apq8084_clocks,
3308         .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3309         .resets = mmcc_apq8084_resets,
3310         .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3311 };
3312
3313 static const struct of_device_id mmcc_apq8084_match_table[] = {
3314         { .compatible = "qcom,mmcc-apq8084" },
3315         { }
3316 };
3317 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3318
3319 static int mmcc_apq8084_probe(struct platform_device *pdev)
3320 {
3321         int ret;
3322         struct regmap *regmap;
3323
3324         ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3325         if (ret)
3326                 return ret;
3327
3328         regmap = dev_get_regmap(&pdev->dev, NULL);
3329         clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3330         clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3331
3332         return 0;
3333 }
3334
3335 static int mmcc_apq8084_remove(struct platform_device *pdev)
3336 {
3337         qcom_cc_remove(pdev);
3338         return 0;
3339 }
3340
3341 static struct platform_driver mmcc_apq8084_driver = {
3342         .probe          = mmcc_apq8084_probe,
3343         .remove         = mmcc_apq8084_remove,
3344         .driver         = {
3345                 .name   = "mmcc-apq8084",
3346                 .of_match_table = mmcc_apq8084_match_table,
3347         },
3348 };
3349 module_platform_driver(mmcc_apq8084_driver);
3350
3351 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3352 MODULE_LICENSE("GPL v2");
3353 MODULE_ALIAS("platform:mmcc-apq8084");