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