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