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