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