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
24enum {
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
43static 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
61static 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
74static 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
92static 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
105static 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
122static 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
140static 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
157static 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
164static 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
171static 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
180static 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
189static 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
197static 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
205static 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
213static 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
221static 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
230static 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
239static 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
248static 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
257static 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
266static 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
275static 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
283static 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
291static 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
300static 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
309static 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
319static 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
329static 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
341static 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
354static 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
367static 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
379static 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
392static 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
398static 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
411static 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
424static 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
437static 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
450static 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
467static 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
480static 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
493static 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
508static 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
521static 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
533static 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
543static 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
556static 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
569static 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
582static 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
596static 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
610static 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
620static 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
634static 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
640static 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
653static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
654	F(19200000, P_XO, 1, 0, 0),
655	{ }
656};
657
658static 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
672static 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
682static 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
696static 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
710static 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
724static 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
738static 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
752static 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
766static 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
780static 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
786static 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
799static 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
812static 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
825static 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
835static 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
848static 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
861static 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
874static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
875	F(19200000, P_XO, 1, 0, 0),
876	{ }
877};
878
879static 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
892static 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
898static 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
912static struct freq_tbl edp_pixel_freq_tbl[] = {
913	{ .src = P_EDPVCO },
914	{ }
915};
916
917static 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
931static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
932	F(19200000, P_XO, 1, 0, 0),
933	{ }
934};
935
936static 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
949static 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
962static struct freq_tbl extpclk_freq_tbl[] = {
963	{ .src = P_HDMIPLL },
964	{ }
965};
966
967static 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
981static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
982	F(19200000, P_XO, 1, 0, 0),
983	{ }
984};
985
986static 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
999static struct freq_tbl ftbl_mdss_vsync_clk[] = {
1000	F(19200000, P_XO, 1, 0, 0),
1001	{ }
1002};
1003
1004static 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
1017static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1018	F(50000000, P_GPLL0, 12, 0, 0),
1019	{ }
1020};
1021
1022static 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
1035static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1036	F(19200000, P_XO, 1, 0, 0),
1037	{ }
1038};
1039
1040static 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
1053static 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
1063static 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
1076static 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
1085static 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
1098static 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
1104static 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
1117static 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
1134static 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
1151static 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
1168static 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
1185static 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
1202static 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
1219static 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
1236static 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
1253static 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
1270static 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
1286static 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
1303static 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
1319static 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
1336static 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
1353static 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
1370static 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
1387static 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
1404static 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
1421static 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
1438static 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
1455static 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
1472static 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
1488static 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
1505static 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
1522static 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
1539static 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
1556static 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
1572static 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
1589static 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
1606static 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
1623static 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
1640static 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
1657static 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
1674static 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
1691static 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
1708static 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
1725static 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
1742static 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
1759static 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
1776static 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
1792static 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
1808static 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
1825static 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
1842static 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
1859static 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
1876static 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
1892static 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
1909static 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
1926static 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
1943static 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
1960static 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
1977static 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
1994static 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
2011static 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
2028static 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
2045static 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
2062static 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
2079static 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
2096static 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
2113static 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
2130static 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
2147static 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
2164static 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
2181static 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
2198static 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
2215static 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
2232static 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
2249static 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
2266static 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
2283static 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
2300static 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
2317static 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
2334static 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
2351static 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
2368static 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
2385static 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
2402static 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
2419static 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
2436static 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
2453static 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
2470static 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
2487static 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
2504static 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
2521static 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
2538static 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
2555static 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
2572static 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
2589static 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
2606static 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
2623static 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
2640static 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
2657static 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
2674static 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
2691static 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
2708static 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
2725static 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
2742static 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
2759static 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
2776static 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
2793static 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
2807static 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
2822static struct gdsc venus0_gdsc = {
2823	.gdscr = 0x1024,
2824	.pd = {
2825		.name = "venus0",
2826	},
2827	.pwrsts = PWRSTS_OFF_ON,
2828};
2829
2830static struct gdsc venus0_core0_gdsc = {
2831	.gdscr = 0x1040,
2832	.pd = {
2833		.name = "venus0_core0",
2834	},
2835	.pwrsts = PWRSTS_OFF_ON,
2836};
2837
2838static struct gdsc venus0_core1_gdsc = {
2839	.gdscr = 0x1044,
2840	.pd = {
2841		.name = "venus0_core1",
2842	},
2843	.pwrsts = PWRSTS_OFF_ON,
2844};
2845
2846static 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
2856static struct gdsc camss_jpeg_gdsc = {
2857	.gdscr = 0x35a4,
2858	.pd = {
2859		.name = "camss_jpeg",
2860	},
2861	.pwrsts = PWRSTS_OFF_ON,
2862};
2863
2864static 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
2874static 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
2884static struct gdsc oxilicx_gdsc = {
2885	.gdscr = 0x4034,
2886	.pd = {
2887		.name = "oxilicx",
2888	},
2889	.pwrsts = PWRSTS_OFF_ON,
2890};
2891
2892static 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
3045static 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
3094static 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
3105static 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
3113static 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
3123static const struct of_device_id mmcc_apq8084_match_table[] = {
3124	{ .compatible = "qcom,mmcc-apq8084" },
3125	{ }
3126};
3127MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3128
3129static 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
3145static 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};
3152module_platform_driver(mmcc_apq8084_driver);
3153
3154MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3155MODULE_LICENSE("GPL v2");
3156MODULE_ALIAS("platform:mmcc-apq8084");
3157