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