xref: /linux/drivers/clk/meson/t7-peripherals.c (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*fab4d651SJian Hu // SPDX-License-Identifier: (GPL-2.0-only OR MIT)
2*fab4d651SJian Hu /*
3*fab4d651SJian Hu  * Copyright (C) 2024-2025 Amlogic, Inc. All rights reserved.
4*fab4d651SJian Hu  * Author: Jian Hu <jian.hu@amlogic.com>
5*fab4d651SJian Hu  */
6*fab4d651SJian Hu 
7*fab4d651SJian Hu #include <linux/clk-provider.h>
8*fab4d651SJian Hu #include <linux/platform_device.h>
9*fab4d651SJian Hu #include "clk-dualdiv.h"
10*fab4d651SJian Hu #include "clk-regmap.h"
11*fab4d651SJian Hu #include "meson-clkc-utils.h"
12*fab4d651SJian Hu #include <dt-bindings/clock/amlogic,t7-peripherals-clkc.h>
13*fab4d651SJian Hu 
14*fab4d651SJian Hu #define RTC_BY_OSCIN_CTRL0	0x8
15*fab4d651SJian Hu #define RTC_BY_OSCIN_CTRL1	0xc
16*fab4d651SJian Hu #define RTC_CTRL		0x10
17*fab4d651SJian Hu #define SYS_CLK_CTRL0		0x40
18*fab4d651SJian Hu #define SYS_CLK_EN0_REG0	0x44
19*fab4d651SJian Hu #define SYS_CLK_EN0_REG1	0x48
20*fab4d651SJian Hu #define SYS_CLK_EN0_REG2	0x4c
21*fab4d651SJian Hu #define SYS_CLK_EN0_REG3	0x50
22*fab4d651SJian Hu #define CECA_CTRL0		0x88
23*fab4d651SJian Hu #define CECA_CTRL1		0x8c
24*fab4d651SJian Hu #define CECB_CTRL0		0x90
25*fab4d651SJian Hu #define CECB_CTRL1		0x94
26*fab4d651SJian Hu #define SC_CLK_CTRL		0x98
27*fab4d651SJian Hu #define DSPA_CLK_CTRL0		0x9c
28*fab4d651SJian Hu #define DSPB_CLK_CTRL0		0xa0
29*fab4d651SJian Hu #define CLK12_24_CTRL		0xa8
30*fab4d651SJian Hu #define ANAKIN_CLK_CTRL		0xac
31*fab4d651SJian Hu #define MIPI_CSI_PHY_CLK_CTRL	0x10c
32*fab4d651SJian Hu #define MIPI_ISP_CLK_CTRL	0x110
33*fab4d651SJian Hu #define TS_CLK_CTRL		0x158
34*fab4d651SJian Hu #define MALI_CLK_CTRL		0x15c
35*fab4d651SJian Hu #define ETH_CLK_CTRL		0x164
36*fab4d651SJian Hu #define NAND_CLK_CTRL		0x168
37*fab4d651SJian Hu #define SD_EMMC_CLK_CTRL	0x16c
38*fab4d651SJian Hu #define SPICC_CLK_CTRL		0x174
39*fab4d651SJian Hu #define SAR_CLK_CTRL0		0x17c
40*fab4d651SJian Hu #define PWM_CLK_AB_CTRL		0x180
41*fab4d651SJian Hu #define PWM_CLK_CD_CTRL		0x184
42*fab4d651SJian Hu #define PWM_CLK_EF_CTRL		0x188
43*fab4d651SJian Hu #define PWM_CLK_AO_AB_CTRL	0x1a0
44*fab4d651SJian Hu #define PWM_CLK_AO_CD_CTRL	0x1a4
45*fab4d651SJian Hu #define PWM_CLK_AO_EF_CTRL	0x1a8
46*fab4d651SJian Hu #define PWM_CLK_AO_GH_CTRL	0x1ac
47*fab4d651SJian Hu #define SPICC_CLK_CTRL1		0x1c0
48*fab4d651SJian Hu #define SPICC_CLK_CTRL2		0x1c4
49*fab4d651SJian Hu 
50*fab4d651SJian Hu #define T7_COMP_SEL(_name, _reg, _shift, _mask, _pdata) \
51*fab4d651SJian Hu 	MESON_COMP_SEL(t7_, _name, _reg, _shift, _mask, _pdata, NULL, 0, 0)
52*fab4d651SJian Hu 
53*fab4d651SJian Hu #define T7_COMP_DIV(_name, _reg, _shift, _width) \
54*fab4d651SJian Hu 	MESON_COMP_DIV(t7_, _name, _reg, _shift, _width, 0, CLK_SET_RATE_PARENT)
55*fab4d651SJian Hu 
56*fab4d651SJian Hu #define T7_COMP_GATE(_name, _reg, _bit, _iflags) \
57*fab4d651SJian Hu 	MESON_COMP_GATE(t7_, _name, _reg, _bit, CLK_SET_RATE_PARENT | (_iflags))
58*fab4d651SJian Hu 
59*fab4d651SJian Hu static struct clk_regmap t7_rtc_dualdiv_in = {
60*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
61*fab4d651SJian Hu 		.offset = RTC_BY_OSCIN_CTRL0,
62*fab4d651SJian Hu 		.bit_idx = 31,
63*fab4d651SJian Hu 	},
64*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
65*fab4d651SJian Hu 		.name = "rtc_duandiv_in",
66*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
67*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
68*fab4d651SJian Hu 			.fw_name = "xtal",
69*fab4d651SJian Hu 		},
70*fab4d651SJian Hu 		.num_parents = 1,
71*fab4d651SJian Hu 	},
72*fab4d651SJian Hu };
73*fab4d651SJian Hu 
74*fab4d651SJian Hu static const struct meson_clk_dualdiv_param t7_dualdiv_table[] = {
75*fab4d651SJian Hu 	{
76*fab4d651SJian Hu 		.n1	= 733, .m1	= 8,
77*fab4d651SJian Hu 		.n2	= 732, .m2	= 11,
78*fab4d651SJian Hu 		.dual	= 1,
79*fab4d651SJian Hu 	},
80*fab4d651SJian Hu 	{}
81*fab4d651SJian Hu };
82*fab4d651SJian Hu 
83*fab4d651SJian Hu static struct clk_regmap t7_rtc_dualdiv_div = {
84*fab4d651SJian Hu 	.data = &(struct meson_clk_dualdiv_data){
85*fab4d651SJian Hu 		.n1 = {
86*fab4d651SJian Hu 			.reg_off = RTC_BY_OSCIN_CTRL0,
87*fab4d651SJian Hu 			.shift   = 0,
88*fab4d651SJian Hu 			.width   = 12,
89*fab4d651SJian Hu 		},
90*fab4d651SJian Hu 		.n2 = {
91*fab4d651SJian Hu 			.reg_off = RTC_BY_OSCIN_CTRL0,
92*fab4d651SJian Hu 			.shift   = 12,
93*fab4d651SJian Hu 			.width   = 12,
94*fab4d651SJian Hu 		},
95*fab4d651SJian Hu 		.m1 = {
96*fab4d651SJian Hu 			.reg_off = RTC_BY_OSCIN_CTRL1,
97*fab4d651SJian Hu 			.shift   = 0,
98*fab4d651SJian Hu 			.width   = 12,
99*fab4d651SJian Hu 		},
100*fab4d651SJian Hu 		.m2 = {
101*fab4d651SJian Hu 			.reg_off = RTC_BY_OSCIN_CTRL1,
102*fab4d651SJian Hu 			.shift   = 12,
103*fab4d651SJian Hu 			.width   = 12,
104*fab4d651SJian Hu 		},
105*fab4d651SJian Hu 		.dual = {
106*fab4d651SJian Hu 			.reg_off = RTC_BY_OSCIN_CTRL0,
107*fab4d651SJian Hu 			.shift   = 28,
108*fab4d651SJian Hu 			.width   = 1,
109*fab4d651SJian Hu 		},
110*fab4d651SJian Hu 		.table = t7_dualdiv_table,
111*fab4d651SJian Hu 	},
112*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
113*fab4d651SJian Hu 		.name = "rtc_dualdiv_div",
114*fab4d651SJian Hu 		.ops = &meson_clk_dualdiv_ops,
115*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
116*fab4d651SJian Hu 			&t7_rtc_dualdiv_in.hw
117*fab4d651SJian Hu 		},
118*fab4d651SJian Hu 		.num_parents = 1,
119*fab4d651SJian Hu 	},
120*fab4d651SJian Hu };
121*fab4d651SJian Hu 
122*fab4d651SJian Hu static struct clk_regmap t7_rtc_dualdiv_sel = {
123*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
124*fab4d651SJian Hu 		.offset = RTC_BY_OSCIN_CTRL1,
125*fab4d651SJian Hu 		.mask = 0x1,
126*fab4d651SJian Hu 		.shift = 24,
127*fab4d651SJian Hu 	},
128*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
129*fab4d651SJian Hu 		.name = "rtc_dualdiv_sel",
130*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
131*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
132*fab4d651SJian Hu 			&t7_rtc_dualdiv_div.hw,
133*fab4d651SJian Hu 			&t7_rtc_dualdiv_in.hw,
134*fab4d651SJian Hu 		},
135*fab4d651SJian Hu 		.num_parents = 2,
136*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
137*fab4d651SJian Hu 	},
138*fab4d651SJian Hu };
139*fab4d651SJian Hu 
140*fab4d651SJian Hu static struct clk_regmap t7_rtc_dualdiv = {
141*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
142*fab4d651SJian Hu 		.offset = RTC_BY_OSCIN_CTRL0,
143*fab4d651SJian Hu 		.bit_idx = 30,
144*fab4d651SJian Hu 	},
145*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
146*fab4d651SJian Hu 		.name = "rtc_dualdiv",
147*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
148*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
149*fab4d651SJian Hu 			&t7_rtc_dualdiv_sel.hw
150*fab4d651SJian Hu 		},
151*fab4d651SJian Hu 		.num_parents = 1,
152*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
153*fab4d651SJian Hu 	},
154*fab4d651SJian Hu };
155*fab4d651SJian Hu 
156*fab4d651SJian Hu static struct clk_regmap t7_rtc = {
157*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
158*fab4d651SJian Hu 		.offset = RTC_CTRL,
159*fab4d651SJian Hu 		.mask = 0x3,
160*fab4d651SJian Hu 		.shift = 0,
161*fab4d651SJian Hu 	},
162*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
163*fab4d651SJian Hu 		.name = "rtc",
164*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
165*fab4d651SJian Hu 		/*
166*fab4d651SJian Hu 		 * xtal is also on parent input #3 but that it is not useful to CCF since
167*fab4d651SJian Hu 		 * the same parent is available with parent input #0
168*fab4d651SJian Hu 		 */
169*fab4d651SJian Hu 		.parent_data = (const struct clk_parent_data []) {
170*fab4d651SJian Hu 			{ .fw_name = "xtal", },
171*fab4d651SJian Hu 			{ .hw = &t7_rtc_dualdiv.hw },
172*fab4d651SJian Hu 			{ .fw_name = "ext_rtc", },
173*fab4d651SJian Hu 		},
174*fab4d651SJian Hu 		.num_parents = 2,
175*fab4d651SJian Hu 		.flags = CLK_SET_RATE_NO_REPARENT,
176*fab4d651SJian Hu 	},
177*fab4d651SJian Hu };
178*fab4d651SJian Hu 
179*fab4d651SJian Hu static struct clk_regmap t7_ceca_dualdiv_in = {
180*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
181*fab4d651SJian Hu 		.offset = CECA_CTRL0,
182*fab4d651SJian Hu 		.bit_idx = 31,
183*fab4d651SJian Hu 	},
184*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
185*fab4d651SJian Hu 		.name = "ceca_dualdiv_in",
186*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
187*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
188*fab4d651SJian Hu 			.fw_name = "xtal",
189*fab4d651SJian Hu 		},
190*fab4d651SJian Hu 		.num_parents = 1,
191*fab4d651SJian Hu 	},
192*fab4d651SJian Hu };
193*fab4d651SJian Hu 
194*fab4d651SJian Hu static struct clk_regmap t7_ceca_dualdiv_div = {
195*fab4d651SJian Hu 	.data = &(struct meson_clk_dualdiv_data){
196*fab4d651SJian Hu 		.n1 = {
197*fab4d651SJian Hu 			.reg_off = CECA_CTRL0,
198*fab4d651SJian Hu 			.shift   = 0,
199*fab4d651SJian Hu 			.width   = 12,
200*fab4d651SJian Hu 		},
201*fab4d651SJian Hu 		.n2 = {
202*fab4d651SJian Hu 			.reg_off = CECA_CTRL0,
203*fab4d651SJian Hu 			.shift   = 12,
204*fab4d651SJian Hu 			.width   = 12,
205*fab4d651SJian Hu 		},
206*fab4d651SJian Hu 		.m1 = {
207*fab4d651SJian Hu 			.reg_off = CECA_CTRL1,
208*fab4d651SJian Hu 			.shift   = 0,
209*fab4d651SJian Hu 			.width   = 12,
210*fab4d651SJian Hu 		},
211*fab4d651SJian Hu 		.m2 = {
212*fab4d651SJian Hu 			.reg_off = CECA_CTRL1,
213*fab4d651SJian Hu 			.shift   = 12,
214*fab4d651SJian Hu 			.width   = 12,
215*fab4d651SJian Hu 		},
216*fab4d651SJian Hu 		.dual = {
217*fab4d651SJian Hu 			.reg_off = CECA_CTRL0,
218*fab4d651SJian Hu 			.shift   = 28,
219*fab4d651SJian Hu 			.width   = 1,
220*fab4d651SJian Hu 		},
221*fab4d651SJian Hu 		.table = t7_dualdiv_table,
222*fab4d651SJian Hu 	},
223*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
224*fab4d651SJian Hu 		.name = "ceca_dualdiv_div",
225*fab4d651SJian Hu 		.ops = &meson_clk_dualdiv_ops,
226*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
227*fab4d651SJian Hu 			&t7_ceca_dualdiv_in.hw
228*fab4d651SJian Hu 		},
229*fab4d651SJian Hu 		.num_parents = 1,
230*fab4d651SJian Hu 	},
231*fab4d651SJian Hu };
232*fab4d651SJian Hu 
233*fab4d651SJian Hu static struct clk_regmap t7_ceca_dualdiv_sel = {
234*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
235*fab4d651SJian Hu 		.offset = CECA_CTRL1,
236*fab4d651SJian Hu 		.mask = 0x1,
237*fab4d651SJian Hu 		.shift = 24,
238*fab4d651SJian Hu 	},
239*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
240*fab4d651SJian Hu 		.name = "ceca_dualdiv_sel",
241*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
242*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
243*fab4d651SJian Hu 			&t7_ceca_dualdiv_div.hw,
244*fab4d651SJian Hu 			&t7_ceca_dualdiv_in.hw,
245*fab4d651SJian Hu 		},
246*fab4d651SJian Hu 		.num_parents = 2,
247*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
248*fab4d651SJian Hu 	},
249*fab4d651SJian Hu };
250*fab4d651SJian Hu 
251*fab4d651SJian Hu static struct clk_regmap t7_ceca_dualdiv = {
252*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
253*fab4d651SJian Hu 		.offset = CECA_CTRL0,
254*fab4d651SJian Hu 		.bit_idx = 30,
255*fab4d651SJian Hu 	},
256*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
257*fab4d651SJian Hu 		.name = "ceca_dualdiv",
258*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
259*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
260*fab4d651SJian Hu 			&t7_ceca_dualdiv_sel.hw
261*fab4d651SJian Hu 		},
262*fab4d651SJian Hu 		.num_parents = 1,
263*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
264*fab4d651SJian Hu 	},
265*fab4d651SJian Hu };
266*fab4d651SJian Hu 
267*fab4d651SJian Hu static struct clk_regmap t7_ceca = {
268*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
269*fab4d651SJian Hu 		.offset = CECA_CTRL1,
270*fab4d651SJian Hu 		.mask = 0x1,
271*fab4d651SJian Hu 		.shift = 31,
272*fab4d651SJian Hu 	},
273*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
274*fab4d651SJian Hu 		.name = "ceca",
275*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
276*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
277*fab4d651SJian Hu 			&t7_ceca_dualdiv.hw,
278*fab4d651SJian Hu 			&t7_rtc.hw,
279*fab4d651SJian Hu 		},
280*fab4d651SJian Hu 		.num_parents = 2,
281*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
282*fab4d651SJian Hu 	},
283*fab4d651SJian Hu };
284*fab4d651SJian Hu 
285*fab4d651SJian Hu static struct clk_regmap t7_cecb_dualdiv_in = {
286*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
287*fab4d651SJian Hu 		.offset = CECB_CTRL0,
288*fab4d651SJian Hu 		.bit_idx = 31,
289*fab4d651SJian Hu 	},
290*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
291*fab4d651SJian Hu 		.name = "cecb_dualdiv_in",
292*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
293*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
294*fab4d651SJian Hu 			.fw_name = "xtal",
295*fab4d651SJian Hu 		},
296*fab4d651SJian Hu 		.num_parents = 1,
297*fab4d651SJian Hu 	},
298*fab4d651SJian Hu };
299*fab4d651SJian Hu 
300*fab4d651SJian Hu static struct clk_regmap t7_cecb_dualdiv_div = {
301*fab4d651SJian Hu 	.data = &(struct meson_clk_dualdiv_data){
302*fab4d651SJian Hu 		.n1 = {
303*fab4d651SJian Hu 			.reg_off = CECB_CTRL0,
304*fab4d651SJian Hu 			.shift   = 0,
305*fab4d651SJian Hu 			.width   = 12,
306*fab4d651SJian Hu 		},
307*fab4d651SJian Hu 		.n2 = {
308*fab4d651SJian Hu 			.reg_off = CECB_CTRL0,
309*fab4d651SJian Hu 			.shift   = 12,
310*fab4d651SJian Hu 			.width   = 12,
311*fab4d651SJian Hu 		},
312*fab4d651SJian Hu 		.m1 = {
313*fab4d651SJian Hu 			.reg_off = CECB_CTRL1,
314*fab4d651SJian Hu 			.shift   = 0,
315*fab4d651SJian Hu 			.width   = 12,
316*fab4d651SJian Hu 		},
317*fab4d651SJian Hu 		.m2 = {
318*fab4d651SJian Hu 			.reg_off = CECB_CTRL1,
319*fab4d651SJian Hu 			.shift   = 12,
320*fab4d651SJian Hu 			.width   = 12,
321*fab4d651SJian Hu 		},
322*fab4d651SJian Hu 		.dual = {
323*fab4d651SJian Hu 			.reg_off = CECB_CTRL0,
324*fab4d651SJian Hu 			.shift   = 28,
325*fab4d651SJian Hu 			.width   = 1,
326*fab4d651SJian Hu 		},
327*fab4d651SJian Hu 		.table = t7_dualdiv_table,
328*fab4d651SJian Hu 	},
329*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
330*fab4d651SJian Hu 		.name = "cecb_dualdiv_div",
331*fab4d651SJian Hu 		.ops = &meson_clk_dualdiv_ops,
332*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
333*fab4d651SJian Hu 			&t7_cecb_dualdiv_in.hw
334*fab4d651SJian Hu 		},
335*fab4d651SJian Hu 		.num_parents = 1,
336*fab4d651SJian Hu 	},
337*fab4d651SJian Hu };
338*fab4d651SJian Hu 
339*fab4d651SJian Hu static struct clk_regmap t7_cecb_dualdiv_sel = {
340*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
341*fab4d651SJian Hu 		.offset = CECB_CTRL1,
342*fab4d651SJian Hu 		.mask = 0x1,
343*fab4d651SJian Hu 		.shift = 24,
344*fab4d651SJian Hu 	},
345*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
346*fab4d651SJian Hu 		.name = "cecb_dualdiv_sel",
347*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
348*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
349*fab4d651SJian Hu 			&t7_cecb_dualdiv_div.hw,
350*fab4d651SJian Hu 			&t7_cecb_dualdiv_in.hw,
351*fab4d651SJian Hu 		},
352*fab4d651SJian Hu 		.num_parents = 2,
353*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
354*fab4d651SJian Hu 	},
355*fab4d651SJian Hu };
356*fab4d651SJian Hu 
357*fab4d651SJian Hu static struct clk_regmap t7_cecb_dualdiv = {
358*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
359*fab4d651SJian Hu 		.offset = CECB_CTRL0,
360*fab4d651SJian Hu 		.bit_idx = 30,
361*fab4d651SJian Hu 	},
362*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
363*fab4d651SJian Hu 		.name = "cecb_dualdiv",
364*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
365*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
366*fab4d651SJian Hu 			&t7_cecb_dualdiv_sel.hw
367*fab4d651SJian Hu 		},
368*fab4d651SJian Hu 		.num_parents = 1,
369*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
370*fab4d651SJian Hu 	},
371*fab4d651SJian Hu };
372*fab4d651SJian Hu 
373*fab4d651SJian Hu static struct clk_regmap t7_cecb = {
374*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
375*fab4d651SJian Hu 		.offset = CECB_CTRL1,
376*fab4d651SJian Hu 		.mask = 0x1,
377*fab4d651SJian Hu 		.shift = 31,
378*fab4d651SJian Hu 	},
379*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
380*fab4d651SJian Hu 		.name = "cecb",
381*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
382*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
383*fab4d651SJian Hu 			&t7_cecb_dualdiv.hw,
384*fab4d651SJian Hu 			&t7_rtc.hw,
385*fab4d651SJian Hu 		},
386*fab4d651SJian Hu 		.num_parents = 2,
387*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
388*fab4d651SJian Hu 	},
389*fab4d651SJian Hu };
390*fab4d651SJian Hu 
391*fab4d651SJian Hu static const struct clk_parent_data t7_sc_parents[] = {
392*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
393*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
394*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
395*fab4d651SJian Hu 	{ .fw_name = "xtal", },
396*fab4d651SJian Hu };
397*fab4d651SJian Hu 
398*fab4d651SJian Hu static T7_COMP_SEL(sc, SC_CLK_CTRL, 9, 0x3, t7_sc_parents);
399*fab4d651SJian Hu static T7_COMP_DIV(sc, SC_CLK_CTRL, 0, 8);
400*fab4d651SJian Hu static T7_COMP_GATE(sc, SC_CLK_CTRL, 8, 0);
401*fab4d651SJian Hu 
402*fab4d651SJian Hu static const struct clk_parent_data t7_dsp_parents[] = {
403*fab4d651SJian Hu 	{ .fw_name = "xtal", },
404*fab4d651SJian Hu 	{ .fw_name = "fdiv2p5", },
405*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
406*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
407*fab4d651SJian Hu 	{ .fw_name = "hifi", },
408*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
409*fab4d651SJian Hu 	{ .fw_name = "fdiv7", },
410*fab4d651SJian Hu 	{ .hw = &t7_rtc.hw },
411*fab4d651SJian Hu };
412*fab4d651SJian Hu 
413*fab4d651SJian Hu static T7_COMP_SEL(dspa_0, DSPA_CLK_CTRL0, 10, 0x7, t7_dsp_parents);
414*fab4d651SJian Hu static T7_COMP_DIV(dspa_0, DSPA_CLK_CTRL0, 0, 10);
415*fab4d651SJian Hu static T7_COMP_GATE(dspa_0, DSPA_CLK_CTRL0, 13, CLK_SET_RATE_GATE);
416*fab4d651SJian Hu 
417*fab4d651SJian Hu static T7_COMP_SEL(dspa_1, DSPA_CLK_CTRL0, 26, 0x7, t7_dsp_parents);
418*fab4d651SJian Hu static T7_COMP_DIV(dspa_1, DSPA_CLK_CTRL0, 16, 10);
419*fab4d651SJian Hu static T7_COMP_GATE(dspa_1, DSPA_CLK_CTRL0, 29, CLK_SET_RATE_GATE);
420*fab4d651SJian Hu 
421*fab4d651SJian Hu static struct clk_regmap t7_dspa = {
422*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data){
423*fab4d651SJian Hu 		.offset = DSPA_CLK_CTRL0,
424*fab4d651SJian Hu 		.mask = 0x1,
425*fab4d651SJian Hu 		.shift = 15,
426*fab4d651SJian Hu 	},
427*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
428*fab4d651SJian Hu 		.name = "dspa",
429*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
430*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
431*fab4d651SJian Hu 			&t7_dspa_0.hw,
432*fab4d651SJian Hu 			&t7_dspa_1.hw,
433*fab4d651SJian Hu 		},
434*fab4d651SJian Hu 		.num_parents = 2,
435*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
436*fab4d651SJian Hu 	},
437*fab4d651SJian Hu };
438*fab4d651SJian Hu 
439*fab4d651SJian Hu static T7_COMP_SEL(dspb_0, DSPB_CLK_CTRL0, 10, 0x7, t7_dsp_parents);
440*fab4d651SJian Hu static T7_COMP_DIV(dspb_0, DSPB_CLK_CTRL0, 0, 10);
441*fab4d651SJian Hu static T7_COMP_GATE(dspb_0, DSPB_CLK_CTRL0, 13, CLK_SET_RATE_GATE);
442*fab4d651SJian Hu 
443*fab4d651SJian Hu static T7_COMP_SEL(dspb_1, DSPB_CLK_CTRL0, 26, 0x7, t7_dsp_parents);
444*fab4d651SJian Hu static T7_COMP_DIV(dspb_1, DSPB_CLK_CTRL0, 16, 10);
445*fab4d651SJian Hu static T7_COMP_GATE(dspb_1, DSPB_CLK_CTRL0, 29, CLK_SET_RATE_GATE);
446*fab4d651SJian Hu 
447*fab4d651SJian Hu static struct clk_regmap t7_dspb = {
448*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data){
449*fab4d651SJian Hu 		.offset = DSPB_CLK_CTRL0,
450*fab4d651SJian Hu 		.mask = 0x1,
451*fab4d651SJian Hu 		.shift = 15,
452*fab4d651SJian Hu 	},
453*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
454*fab4d651SJian Hu 		.name = "dspb",
455*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
456*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
457*fab4d651SJian Hu 			&t7_dspb_0.hw,
458*fab4d651SJian Hu 			&t7_dspb_1.hw,
459*fab4d651SJian Hu 		},
460*fab4d651SJian Hu 		.num_parents = 2,
461*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
462*fab4d651SJian Hu 	},
463*fab4d651SJian Hu };
464*fab4d651SJian Hu 
465*fab4d651SJian Hu static struct clk_regmap t7_24m = {
466*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
467*fab4d651SJian Hu 		.offset = CLK12_24_CTRL,
468*fab4d651SJian Hu 		.bit_idx = 11,
469*fab4d651SJian Hu 	},
470*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
471*fab4d651SJian Hu 		.name = "24m",
472*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
473*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
474*fab4d651SJian Hu 			.fw_name = "xtal",
475*fab4d651SJian Hu 		},
476*fab4d651SJian Hu 		.num_parents = 1,
477*fab4d651SJian Hu 	},
478*fab4d651SJian Hu };
479*fab4d651SJian Hu 
480*fab4d651SJian Hu static struct clk_fixed_factor t7_24m_div2 = {
481*fab4d651SJian Hu 	.mult = 1,
482*fab4d651SJian Hu 	.div = 2,
483*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
484*fab4d651SJian Hu 		.name = "24m_div2",
485*fab4d651SJian Hu 		.ops = &clk_fixed_factor_ops,
486*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
487*fab4d651SJian Hu 			&t7_24m.hw
488*fab4d651SJian Hu 		},
489*fab4d651SJian Hu 		.num_parents = 1,
490*fab4d651SJian Hu 	},
491*fab4d651SJian Hu };
492*fab4d651SJian Hu 
493*fab4d651SJian Hu static struct clk_regmap t7_12m = {
494*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
495*fab4d651SJian Hu 		.offset = CLK12_24_CTRL,
496*fab4d651SJian Hu 		.bit_idx = 10,
497*fab4d651SJian Hu 	},
498*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
499*fab4d651SJian Hu 		.name = "12m",
500*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
501*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
502*fab4d651SJian Hu 			&t7_24m_div2.hw
503*fab4d651SJian Hu 		},
504*fab4d651SJian Hu 		.num_parents = 1,
505*fab4d651SJian Hu 	},
506*fab4d651SJian Hu };
507*fab4d651SJian Hu 
508*fab4d651SJian Hu static struct clk_regmap t7_25m_div = {
509*fab4d651SJian Hu 	.data = &(struct clk_regmap_div_data){
510*fab4d651SJian Hu 		.offset = CLK12_24_CTRL,
511*fab4d651SJian Hu 		.shift = 0,
512*fab4d651SJian Hu 		.width = 8,
513*fab4d651SJian Hu 	},
514*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
515*fab4d651SJian Hu 		.name = "25m_div",
516*fab4d651SJian Hu 		.ops = &clk_regmap_divider_ops,
517*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
518*fab4d651SJian Hu 			.fw_name = "fix",
519*fab4d651SJian Hu 		},
520*fab4d651SJian Hu 		.num_parents = 1,
521*fab4d651SJian Hu 	},
522*fab4d651SJian Hu };
523*fab4d651SJian Hu 
524*fab4d651SJian Hu static struct clk_regmap t7_25m = {
525*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
526*fab4d651SJian Hu 		.offset = CLK12_24_CTRL,
527*fab4d651SJian Hu 		.bit_idx = 12,
528*fab4d651SJian Hu 	},
529*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
530*fab4d651SJian Hu 		.name = "25m",
531*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
532*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
533*fab4d651SJian Hu 			&t7_25m_div.hw
534*fab4d651SJian Hu 		},
535*fab4d651SJian Hu 		.num_parents = 1,
536*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
537*fab4d651SJian Hu 	},
538*fab4d651SJian Hu };
539*fab4d651SJian Hu 
540*fab4d651SJian Hu static const struct clk_parent_data t7_anakin_parents[] = {
541*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
542*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
543*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
544*fab4d651SJian Hu 	{ .fw_name = "fdiv2", },
545*fab4d651SJian Hu 	{ .fw_name = "vid_pll0", },
546*fab4d651SJian Hu 	{ .fw_name = "mpll1", },
547*fab4d651SJian Hu 	{ .fw_name = "mpll2", },
548*fab4d651SJian Hu 	{ .fw_name = "fdiv2p5", },
549*fab4d651SJian Hu };
550*fab4d651SJian Hu 
551*fab4d651SJian Hu static T7_COMP_SEL(anakin_0, ANAKIN_CLK_CTRL, 9, 0x7, t7_anakin_parents);
552*fab4d651SJian Hu static T7_COMP_DIV(anakin_0, ANAKIN_CLK_CTRL, 0, 7);
553*fab4d651SJian Hu static T7_COMP_GATE(anakin_0, ANAKIN_CLK_CTRL, 8, CLK_SET_RATE_GATE);
554*fab4d651SJian Hu 
555*fab4d651SJian Hu static T7_COMP_SEL(anakin_1, ANAKIN_CLK_CTRL, 25, 0x7, t7_anakin_parents);
556*fab4d651SJian Hu static T7_COMP_DIV(anakin_1, ANAKIN_CLK_CTRL, 16, 7);
557*fab4d651SJian Hu static T7_COMP_GATE(anakin_1, ANAKIN_CLK_CTRL, 24, CLK_SET_RATE_GATE);
558*fab4d651SJian Hu 
559*fab4d651SJian Hu static struct clk_regmap t7_anakin_01_sel = {
560*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data){
561*fab4d651SJian Hu 		.offset = ANAKIN_CLK_CTRL,
562*fab4d651SJian Hu 		.mask = 1,
563*fab4d651SJian Hu 		.shift = 31,
564*fab4d651SJian Hu 	},
565*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
566*fab4d651SJian Hu 		.name = "anakin_01_sel",
567*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
568*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
569*fab4d651SJian Hu 			&t7_anakin_0.hw,
570*fab4d651SJian Hu 			&t7_anakin_1.hw
571*fab4d651SJian Hu 		},
572*fab4d651SJian Hu 		.num_parents = 2,
573*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT
574*fab4d651SJian Hu 	},
575*fab4d651SJian Hu };
576*fab4d651SJian Hu 
577*fab4d651SJian Hu static struct clk_regmap t7_anakin = {
578*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
579*fab4d651SJian Hu 		.offset = ANAKIN_CLK_CTRL,
580*fab4d651SJian Hu 		.bit_idx = 30,
581*fab4d651SJian Hu 	},
582*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data) {
583*fab4d651SJian Hu 		.name = "anakin",
584*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
585*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
586*fab4d651SJian Hu 			&t7_anakin_01_sel.hw
587*fab4d651SJian Hu 		},
588*fab4d651SJian Hu 		.num_parents = 1,
589*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT
590*fab4d651SJian Hu 	},
591*fab4d651SJian Hu };
592*fab4d651SJian Hu 
593*fab4d651SJian Hu static const struct clk_parent_data t7_mipi_csi_phy_parents[] = {
594*fab4d651SJian Hu 	{ .fw_name = "xtal", },
595*fab4d651SJian Hu 	{ .fw_name = "gp1", },
596*fab4d651SJian Hu 	{ .fw_name = "mpll1", },
597*fab4d651SJian Hu 	{ .fw_name = "mpll2", },
598*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
599*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
600*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
601*fab4d651SJian Hu 	{ .fw_name = "fdiv7", },
602*fab4d651SJian Hu };
603*fab4d651SJian Hu 
604*fab4d651SJian Hu static T7_COMP_SEL(mipi_csi_phy_0, MIPI_CSI_PHY_CLK_CTRL, 9, 0x7, t7_mipi_csi_phy_parents);
605*fab4d651SJian Hu static T7_COMP_DIV(mipi_csi_phy_0, MIPI_CSI_PHY_CLK_CTRL, 0, 7);
606*fab4d651SJian Hu static T7_COMP_GATE(mipi_csi_phy_0, MIPI_CSI_PHY_CLK_CTRL, 8, CLK_SET_RATE_GATE);
607*fab4d651SJian Hu 
608*fab4d651SJian Hu static T7_COMP_SEL(mipi_csi_phy_1, MIPI_CSI_PHY_CLK_CTRL, 25, 0x7, t7_mipi_csi_phy_parents);
609*fab4d651SJian Hu static T7_COMP_DIV(mipi_csi_phy_1, MIPI_CSI_PHY_CLK_CTRL, 16, 7);
610*fab4d651SJian Hu static T7_COMP_GATE(mipi_csi_phy_1, MIPI_CSI_PHY_CLK_CTRL, 24, CLK_SET_RATE_GATE);
611*fab4d651SJian Hu 
612*fab4d651SJian Hu static struct clk_regmap t7_mipi_csi_phy = {
613*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data){
614*fab4d651SJian Hu 		.offset = MIPI_CSI_PHY_CLK_CTRL,
615*fab4d651SJian Hu 		.mask = 0x1,
616*fab4d651SJian Hu 		.shift = 31,
617*fab4d651SJian Hu 	},
618*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
619*fab4d651SJian Hu 		.name = "mipi_csi_phy",
620*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
621*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
622*fab4d651SJian Hu 			&t7_mipi_csi_phy_0.hw,
623*fab4d651SJian Hu 			&t7_mipi_csi_phy_1.hw
624*fab4d651SJian Hu 		},
625*fab4d651SJian Hu 		.num_parents = 2,
626*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
627*fab4d651SJian Hu 	},
628*fab4d651SJian Hu };
629*fab4d651SJian Hu 
630*fab4d651SJian Hu static const struct clk_parent_data t7_mipi_isp_parents[] = {
631*fab4d651SJian Hu 	{ .fw_name = "xtal", },
632*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
633*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
634*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
635*fab4d651SJian Hu 	{ .fw_name = "fdiv7", },
636*fab4d651SJian Hu 	{ .fw_name = "mpll2", },
637*fab4d651SJian Hu 	{ .fw_name = "mpll3", },
638*fab4d651SJian Hu 	{ .fw_name = "gp1", },
639*fab4d651SJian Hu };
640*fab4d651SJian Hu 
641*fab4d651SJian Hu static T7_COMP_SEL(mipi_isp, MIPI_ISP_CLK_CTRL, 9, 0x7, t7_mipi_isp_parents);
642*fab4d651SJian Hu static T7_COMP_DIV(mipi_isp, MIPI_ISP_CLK_CTRL, 0, 7);
643*fab4d651SJian Hu static T7_COMP_GATE(mipi_isp, MIPI_ISP_CLK_CTRL, 8, 0);
644*fab4d651SJian Hu 
645*fab4d651SJian Hu static struct clk_regmap t7_ts_div = {
646*fab4d651SJian Hu 	.data = &(struct clk_regmap_div_data){
647*fab4d651SJian Hu 		.offset = TS_CLK_CTRL,
648*fab4d651SJian Hu 		.shift = 0,
649*fab4d651SJian Hu 		.width = 8,
650*fab4d651SJian Hu 	},
651*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
652*fab4d651SJian Hu 		.name = "ts_div",
653*fab4d651SJian Hu 		.ops = &clk_regmap_divider_ops,
654*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
655*fab4d651SJian Hu 			.fw_name = "xtal",
656*fab4d651SJian Hu 		},
657*fab4d651SJian Hu 		.num_parents = 1,
658*fab4d651SJian Hu 	},
659*fab4d651SJian Hu };
660*fab4d651SJian Hu 
661*fab4d651SJian Hu static struct clk_regmap t7_ts = {
662*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data){
663*fab4d651SJian Hu 		.offset = TS_CLK_CTRL,
664*fab4d651SJian Hu 		.bit_idx = 8,
665*fab4d651SJian Hu 	},
666*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
667*fab4d651SJian Hu 		.name = "ts",
668*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
669*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
670*fab4d651SJian Hu 			&t7_ts_div.hw
671*fab4d651SJian Hu 		},
672*fab4d651SJian Hu 		.num_parents = 1,
673*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
674*fab4d651SJian Hu 	},
675*fab4d651SJian Hu };
676*fab4d651SJian Hu 
677*fab4d651SJian Hu static const struct clk_parent_data t7_mali_parents[] = {
678*fab4d651SJian Hu 	{ .fw_name = "xtal", },
679*fab4d651SJian Hu 	{ .fw_name = "gp0", },
680*fab4d651SJian Hu 	{ .fw_name = "gp1", },
681*fab4d651SJian Hu 	{ .fw_name = "fdiv2p5", },
682*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
683*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
684*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
685*fab4d651SJian Hu 	{ .fw_name = "fdiv7", },
686*fab4d651SJian Hu };
687*fab4d651SJian Hu 
688*fab4d651SJian Hu static T7_COMP_SEL(mali_0, MALI_CLK_CTRL, 9, 0x7, t7_mali_parents);
689*fab4d651SJian Hu static T7_COMP_DIV(mali_0, MALI_CLK_CTRL, 0, 7);
690*fab4d651SJian Hu static T7_COMP_GATE(mali_0, MALI_CLK_CTRL, 8, CLK_SET_RATE_GATE);
691*fab4d651SJian Hu 
692*fab4d651SJian Hu static T7_COMP_SEL(mali_1, MALI_CLK_CTRL, 25, 0x7, t7_mali_parents);
693*fab4d651SJian Hu static T7_COMP_DIV(mali_1, MALI_CLK_CTRL, 16, 7);
694*fab4d651SJian Hu static T7_COMP_GATE(mali_1, MALI_CLK_CTRL, 24, CLK_SET_RATE_GATE);
695*fab4d651SJian Hu 
696*fab4d651SJian Hu static struct clk_regmap t7_mali = {
697*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data){
698*fab4d651SJian Hu 		.offset = MALI_CLK_CTRL,
699*fab4d651SJian Hu 		.mask = 1,
700*fab4d651SJian Hu 		.shift = 31,
701*fab4d651SJian Hu 	},
702*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
703*fab4d651SJian Hu 		.name = "mali",
704*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
705*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
706*fab4d651SJian Hu 			&t7_mali_0.hw,
707*fab4d651SJian Hu 			&t7_mali_1.hw,
708*fab4d651SJian Hu 		},
709*fab4d651SJian Hu 		.num_parents = 2,
710*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
711*fab4d651SJian Hu 	},
712*fab4d651SJian Hu };
713*fab4d651SJian Hu 
714*fab4d651SJian Hu /*
715*fab4d651SJian Hu  * parent index 2, 3, 4, 5, 6 not connect any clock signal,
716*fab4d651SJian Hu  * the last parent connect external PAD
717*fab4d651SJian Hu  */
718*fab4d651SJian Hu static u32 t7_eth_rmii_parents_val_table[] = { 0, 1, 7 };
719*fab4d651SJian Hu static const struct clk_parent_data t7_eth_rmii_parents[] = {
720*fab4d651SJian Hu 	{ .fw_name = "fdiv2", },
721*fab4d651SJian Hu 	{ .fw_name = "gp1", },
722*fab4d651SJian Hu 	{ .fw_name = "ext_rmii", },
723*fab4d651SJian Hu };
724*fab4d651SJian Hu 
725*fab4d651SJian Hu static struct clk_regmap t7_eth_rmii_sel = {
726*fab4d651SJian Hu 	.data = &(struct clk_regmap_mux_data) {
727*fab4d651SJian Hu 		.offset = ETH_CLK_CTRL,
728*fab4d651SJian Hu 		.mask = 0x7,
729*fab4d651SJian Hu 		.shift = 9,
730*fab4d651SJian Hu 		.table = t7_eth_rmii_parents_val_table,
731*fab4d651SJian Hu 	},
732*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
733*fab4d651SJian Hu 		.name = "eth_rmii_sel",
734*fab4d651SJian Hu 		.ops = &clk_regmap_mux_ops,
735*fab4d651SJian Hu 		.parent_data = t7_eth_rmii_parents,
736*fab4d651SJian Hu 		.num_parents = ARRAY_SIZE(t7_eth_rmii_parents),
737*fab4d651SJian Hu 		.flags = CLK_SET_RATE_NO_REPARENT,
738*fab4d651SJian Hu 	},
739*fab4d651SJian Hu };
740*fab4d651SJian Hu 
741*fab4d651SJian Hu static struct clk_regmap t7_eth_rmii_div = {
742*fab4d651SJian Hu 	.data = &(struct clk_regmap_div_data) {
743*fab4d651SJian Hu 		.offset = ETH_CLK_CTRL,
744*fab4d651SJian Hu 		.shift = 0,
745*fab4d651SJian Hu 		.width = 7,
746*fab4d651SJian Hu 	},
747*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
748*fab4d651SJian Hu 		.name = "eth_rmii_div",
749*fab4d651SJian Hu 		.ops = &clk_regmap_divider_ops,
750*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
751*fab4d651SJian Hu 			&t7_eth_rmii_sel.hw
752*fab4d651SJian Hu 		},
753*fab4d651SJian Hu 		.num_parents = 1,
754*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
755*fab4d651SJian Hu 	},
756*fab4d651SJian Hu };
757*fab4d651SJian Hu 
758*fab4d651SJian Hu static struct clk_regmap t7_eth_rmii = {
759*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data) {
760*fab4d651SJian Hu 		.offset = ETH_CLK_CTRL,
761*fab4d651SJian Hu 		.bit_idx = 8,
762*fab4d651SJian Hu 	},
763*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
764*fab4d651SJian Hu 		.name = "eth_rmii",
765*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
766*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
767*fab4d651SJian Hu 			&t7_eth_rmii_div.hw
768*fab4d651SJian Hu 		},
769*fab4d651SJian Hu 		.num_parents = 1,
770*fab4d651SJian Hu 		.flags = CLK_SET_RATE_PARENT,
771*fab4d651SJian Hu 	},
772*fab4d651SJian Hu };
773*fab4d651SJian Hu 
774*fab4d651SJian Hu static struct clk_fixed_factor t7_fdiv2_div8 = {
775*fab4d651SJian Hu 	.mult = 1,
776*fab4d651SJian Hu 	.div = 8,
777*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
778*fab4d651SJian Hu 		.name = "fdiv2_div8",
779*fab4d651SJian Hu 		.ops = &clk_fixed_factor_ops,
780*fab4d651SJian Hu 		.parent_data = &(const struct clk_parent_data) {
781*fab4d651SJian Hu 			.fw_name = "fdiv2",
782*fab4d651SJian Hu 		},
783*fab4d651SJian Hu 		.num_parents = 1,
784*fab4d651SJian Hu 	},
785*fab4d651SJian Hu };
786*fab4d651SJian Hu 
787*fab4d651SJian Hu static struct clk_regmap t7_eth_125m = {
788*fab4d651SJian Hu 	.data = &(struct clk_regmap_gate_data) {
789*fab4d651SJian Hu 		.offset = ETH_CLK_CTRL,
790*fab4d651SJian Hu 		.bit_idx = 7,
791*fab4d651SJian Hu 	},
792*fab4d651SJian Hu 	.hw.init = &(struct clk_init_data){
793*fab4d651SJian Hu 		.name = "eth_125m",
794*fab4d651SJian Hu 		.ops = &clk_regmap_gate_ops,
795*fab4d651SJian Hu 		.parent_hws = (const struct clk_hw *[]) {
796*fab4d651SJian Hu 			&t7_fdiv2_div8.hw
797*fab4d651SJian Hu 		},
798*fab4d651SJian Hu 		.num_parents = 1,
799*fab4d651SJian Hu 	},
800*fab4d651SJian Hu };
801*fab4d651SJian Hu 
802*fab4d651SJian Hu static const struct clk_parent_data t7_sd_emmc_parents[] = {
803*fab4d651SJian Hu 	{ .fw_name = "xtal", },
804*fab4d651SJian Hu 	{ .fw_name = "fdiv2", },
805*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
806*fab4d651SJian Hu 	{ .fw_name = "hifi", },
807*fab4d651SJian Hu 	{ .fw_name = "fdiv2p5", },
808*fab4d651SJian Hu 	{ .fw_name = "mpll2", },
809*fab4d651SJian Hu 	{ .fw_name = "mpll3", },
810*fab4d651SJian Hu 	{ .fw_name = "gp0", },
811*fab4d651SJian Hu };
812*fab4d651SJian Hu 
813*fab4d651SJian Hu static T7_COMP_SEL(sd_emmc_a, SD_EMMC_CLK_CTRL, 9, 0x7, t7_sd_emmc_parents);
814*fab4d651SJian Hu static T7_COMP_DIV(sd_emmc_a, SD_EMMC_CLK_CTRL, 0, 7);
815*fab4d651SJian Hu static T7_COMP_GATE(sd_emmc_a, SD_EMMC_CLK_CTRL, 7, 0);
816*fab4d651SJian Hu 
817*fab4d651SJian Hu static T7_COMP_SEL(sd_emmc_b, SD_EMMC_CLK_CTRL, 25, 0x7, t7_sd_emmc_parents);
818*fab4d651SJian Hu static T7_COMP_DIV(sd_emmc_b, SD_EMMC_CLK_CTRL, 16, 7);
819*fab4d651SJian Hu static T7_COMP_GATE(sd_emmc_b, SD_EMMC_CLK_CTRL, 23, 0);
820*fab4d651SJian Hu 
821*fab4d651SJian Hu static T7_COMP_SEL(sd_emmc_c, NAND_CLK_CTRL, 9, 0x7, t7_sd_emmc_parents);
822*fab4d651SJian Hu static T7_COMP_DIV(sd_emmc_c, NAND_CLK_CTRL, 0, 7);
823*fab4d651SJian Hu static T7_COMP_GATE(sd_emmc_c, NAND_CLK_CTRL, 7, 0);
824*fab4d651SJian Hu 
825*fab4d651SJian Hu static const struct clk_parent_data t7_spicc_parents[] = {
826*fab4d651SJian Hu 	{ .fw_name = "xtal", },
827*fab4d651SJian Hu 	{ .fw_name = "sys", },
828*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
829*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
830*fab4d651SJian Hu 	{ .fw_name = "fdiv2", },
831*fab4d651SJian Hu 	{ .fw_name = "fdiv5", },
832*fab4d651SJian Hu 	{ .fw_name = "fdiv7", },
833*fab4d651SJian Hu 	{ .fw_name = "gp1", },
834*fab4d651SJian Hu };
835*fab4d651SJian Hu 
836*fab4d651SJian Hu static T7_COMP_SEL(spicc0, SPICC_CLK_CTRL, 7, 0x7, t7_spicc_parents);
837*fab4d651SJian Hu static T7_COMP_DIV(spicc0, SPICC_CLK_CTRL, 0, 6);
838*fab4d651SJian Hu static T7_COMP_GATE(spicc0, SPICC_CLK_CTRL, 6, 0);
839*fab4d651SJian Hu 
840*fab4d651SJian Hu static T7_COMP_SEL(spicc1, SPICC_CLK_CTRL, 23, 0x7, t7_spicc_parents);
841*fab4d651SJian Hu static T7_COMP_DIV(spicc1, SPICC_CLK_CTRL, 16, 6);
842*fab4d651SJian Hu static T7_COMP_GATE(spicc1, SPICC_CLK_CTRL, 22, 0);
843*fab4d651SJian Hu 
844*fab4d651SJian Hu static T7_COMP_SEL(spicc2, SPICC_CLK_CTRL1, 7, 0x7, t7_spicc_parents);
845*fab4d651SJian Hu static T7_COMP_DIV(spicc2, SPICC_CLK_CTRL1, 0, 6);
846*fab4d651SJian Hu static T7_COMP_GATE(spicc2, SPICC_CLK_CTRL1, 6, 0);
847*fab4d651SJian Hu 
848*fab4d651SJian Hu static T7_COMP_SEL(spicc3, SPICC_CLK_CTRL1, 23, 0x7, t7_spicc_parents);
849*fab4d651SJian Hu static T7_COMP_DIV(spicc3, SPICC_CLK_CTRL1, 16, 6);
850*fab4d651SJian Hu static T7_COMP_GATE(spicc3, SPICC_CLK_CTRL1, 22, 0);
851*fab4d651SJian Hu 
852*fab4d651SJian Hu static T7_COMP_SEL(spicc4, SPICC_CLK_CTRL2, 7, 0x7, t7_spicc_parents);
853*fab4d651SJian Hu static T7_COMP_DIV(spicc4, SPICC_CLK_CTRL2, 0, 6);
854*fab4d651SJian Hu static T7_COMP_GATE(spicc4, SPICC_CLK_CTRL2, 6, 0);
855*fab4d651SJian Hu 
856*fab4d651SJian Hu static T7_COMP_SEL(spicc5, SPICC_CLK_CTRL2, 23, 0x7, t7_spicc_parents);
857*fab4d651SJian Hu static T7_COMP_DIV(spicc5, SPICC_CLK_CTRL2, 16, 6);
858*fab4d651SJian Hu static T7_COMP_GATE(spicc5, SPICC_CLK_CTRL2, 22, 0);
859*fab4d651SJian Hu 
860*fab4d651SJian Hu static const struct clk_parent_data t7_saradc_parents[] = {
861*fab4d651SJian Hu 	{ .fw_name = "xtal" },
862*fab4d651SJian Hu 	{ .fw_name = "sys" },
863*fab4d651SJian Hu };
864*fab4d651SJian Hu 
865*fab4d651SJian Hu static T7_COMP_SEL(saradc, SAR_CLK_CTRL0, 9, 0x1, t7_saradc_parents);
866*fab4d651SJian Hu static T7_COMP_DIV(saradc, SAR_CLK_CTRL0, 0, 8);
867*fab4d651SJian Hu static T7_COMP_GATE(saradc, SAR_CLK_CTRL0, 8, 0);
868*fab4d651SJian Hu 
869*fab4d651SJian Hu static const struct clk_parent_data t7_pwm_parents[]  = {
870*fab4d651SJian Hu 	{ .fw_name = "xtal", },
871*fab4d651SJian Hu 	{ .fw_name = "vid_pll0", },
872*fab4d651SJian Hu 	{ .fw_name = "fdiv4", },
873*fab4d651SJian Hu 	{ .fw_name = "fdiv3", },
874*fab4d651SJian Hu };
875*fab4d651SJian Hu 
876*fab4d651SJian Hu static T7_COMP_SEL(pwm_a, PWM_CLK_AB_CTRL, 9, 0x3, t7_pwm_parents);
877*fab4d651SJian Hu static T7_COMP_DIV(pwm_a, PWM_CLK_AB_CTRL, 0, 8);
878*fab4d651SJian Hu static T7_COMP_GATE(pwm_a, PWM_CLK_AB_CTRL, 8, 0);
879*fab4d651SJian Hu 
880*fab4d651SJian Hu static T7_COMP_SEL(pwm_b, PWM_CLK_AB_CTRL, 25, 0x3, t7_pwm_parents);
881*fab4d651SJian Hu static T7_COMP_DIV(pwm_b, PWM_CLK_AB_CTRL, 16, 8);
882*fab4d651SJian Hu static T7_COMP_GATE(pwm_b, PWM_CLK_AB_CTRL, 24, 0);
883*fab4d651SJian Hu 
884*fab4d651SJian Hu static T7_COMP_SEL(pwm_c, PWM_CLK_CD_CTRL, 9, 0x3, t7_pwm_parents);
885*fab4d651SJian Hu static T7_COMP_DIV(pwm_c, PWM_CLK_CD_CTRL, 0, 8);
886*fab4d651SJian Hu static T7_COMP_GATE(pwm_c, PWM_CLK_CD_CTRL, 8, 0);
887*fab4d651SJian Hu 
888*fab4d651SJian Hu static T7_COMP_SEL(pwm_d, PWM_CLK_CD_CTRL, 25, 0x3, t7_pwm_parents);
889*fab4d651SJian Hu static T7_COMP_DIV(pwm_d, PWM_CLK_CD_CTRL, 16, 8);
890*fab4d651SJian Hu static T7_COMP_GATE(pwm_d, PWM_CLK_CD_CTRL, 24, 0);
891*fab4d651SJian Hu 
892*fab4d651SJian Hu static T7_COMP_SEL(pwm_e, PWM_CLK_EF_CTRL, 9, 0x3, t7_pwm_parents);
893*fab4d651SJian Hu static T7_COMP_DIV(pwm_e, PWM_CLK_EF_CTRL, 0, 8);
894*fab4d651SJian Hu static T7_COMP_GATE(pwm_e, PWM_CLK_EF_CTRL, 8, 0);
895*fab4d651SJian Hu 
896*fab4d651SJian Hu static T7_COMP_SEL(pwm_f, PWM_CLK_EF_CTRL, 25, 0x3, t7_pwm_parents);
897*fab4d651SJian Hu static T7_COMP_DIV(pwm_f, PWM_CLK_EF_CTRL, 16, 8);
898*fab4d651SJian Hu static T7_COMP_GATE(pwm_f, PWM_CLK_EF_CTRL, 24, 0);
899*fab4d651SJian Hu 
900*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_a, PWM_CLK_AO_AB_CTRL, 9, 0x3, t7_pwm_parents);
901*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_a, PWM_CLK_AO_AB_CTRL, 0, 8);
902*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_a, PWM_CLK_AO_AB_CTRL, 8, 0);
903*fab4d651SJian Hu 
904*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_b, PWM_CLK_AO_AB_CTRL, 25, 0x3, t7_pwm_parents);
905*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_b, PWM_CLK_AO_AB_CTRL, 16, 8);
906*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_b, PWM_CLK_AO_AB_CTRL, 24, 0);
907*fab4d651SJian Hu 
908*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_c, PWM_CLK_AO_CD_CTRL, 9, 0x3, t7_pwm_parents);
909*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_c, PWM_CLK_AO_CD_CTRL, 0, 8);
910*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_c, PWM_CLK_AO_CD_CTRL, 8, 0);
911*fab4d651SJian Hu 
912*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_d, PWM_CLK_AO_CD_CTRL, 25, 0x3, t7_pwm_parents);
913*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_d, PWM_CLK_AO_CD_CTRL, 16, 8);
914*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_d, PWM_CLK_AO_CD_CTRL, 24, 0);
915*fab4d651SJian Hu 
916*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_e, PWM_CLK_AO_EF_CTRL, 9, 0x3, t7_pwm_parents);
917*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_e, PWM_CLK_AO_EF_CTRL, 0, 8);
918*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_e, PWM_CLK_AO_EF_CTRL, 8, 0);
919*fab4d651SJian Hu 
920*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_f, PWM_CLK_AO_EF_CTRL, 25, 0x3, t7_pwm_parents);
921*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_f, PWM_CLK_AO_EF_CTRL, 16, 8);
922*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_f, PWM_CLK_AO_EF_CTRL, 24, 0);
923*fab4d651SJian Hu 
924*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_g, PWM_CLK_AO_GH_CTRL, 9, 0x3, t7_pwm_parents);
925*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_g, PWM_CLK_AO_GH_CTRL, 0, 8);
926*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_g, PWM_CLK_AO_GH_CTRL, 8, 0);
927*fab4d651SJian Hu 
928*fab4d651SJian Hu static T7_COMP_SEL(pwm_ao_h, PWM_CLK_AO_GH_CTRL, 25, 0x3, t7_pwm_parents);
929*fab4d651SJian Hu static T7_COMP_DIV(pwm_ao_h, PWM_CLK_AO_GH_CTRL, 16, 8);
930*fab4d651SJian Hu static T7_COMP_GATE(pwm_ao_h, PWM_CLK_AO_GH_CTRL, 24, 0);
931*fab4d651SJian Hu 
932*fab4d651SJian Hu static const struct clk_parent_data t7_sys_pclk_parents = { .fw_name = "sys" };
933*fab4d651SJian Hu 
934*fab4d651SJian Hu #define T7_SYS_PCLK(_name, _reg, _bit, _flags) \
935*fab4d651SJian Hu 	MESON_PCLK(t7_##_name, _reg, _bit, &t7_sys_pclk_parents, _flags)
936*fab4d651SJian Hu 
937*fab4d651SJian Hu static T7_SYS_PCLK(sys_ddr,		SYS_CLK_EN0_REG0, 0,	0);
938*fab4d651SJian Hu static T7_SYS_PCLK(sys_dos,		SYS_CLK_EN0_REG0, 1,	0);
939*fab4d651SJian Hu static T7_SYS_PCLK(sys_mipi_dsi_a,	SYS_CLK_EN0_REG0, 2,	0);
940*fab4d651SJian Hu static T7_SYS_PCLK(sys_mipi_dsi_b,	SYS_CLK_EN0_REG0, 3,	0);
941*fab4d651SJian Hu static T7_SYS_PCLK(sys_ethphy,		SYS_CLK_EN0_REG0, 4,	0);
942*fab4d651SJian Hu static T7_SYS_PCLK(sys_mali,		SYS_CLK_EN0_REG0, 6,	0);
943*fab4d651SJian Hu static T7_SYS_PCLK(sys_aocpu,		SYS_CLK_EN0_REG0, 13,	0);
944*fab4d651SJian Hu static T7_SYS_PCLK(sys_aucpu,		SYS_CLK_EN0_REG0, 14,	0);
945*fab4d651SJian Hu static T7_SYS_PCLK(sys_cec,		SYS_CLK_EN0_REG0, 16,	0);
946*fab4d651SJian Hu static T7_SYS_PCLK(sys_gdc,		SYS_CLK_EN0_REG0, 17,	0);
947*fab4d651SJian Hu static T7_SYS_PCLK(sys_deswarp,		SYS_CLK_EN0_REG0, 18,	0);
948*fab4d651SJian Hu static T7_SYS_PCLK(sys_ampipe_nand,	SYS_CLK_EN0_REG0, 19,	0);
949*fab4d651SJian Hu static T7_SYS_PCLK(sys_ampipe_eth,	SYS_CLK_EN0_REG0, 20,	0);
950*fab4d651SJian Hu static T7_SYS_PCLK(sys_am2axi0,		SYS_CLK_EN0_REG0, 21,	0);
951*fab4d651SJian Hu static T7_SYS_PCLK(sys_am2axi1,		SYS_CLK_EN0_REG0, 22,	0);
952*fab4d651SJian Hu static T7_SYS_PCLK(sys_am2axi2,		SYS_CLK_EN0_REG0, 23,	0);
953*fab4d651SJian Hu static T7_SYS_PCLK(sys_sd_emmc_a,	SYS_CLK_EN0_REG0, 24,	0);
954*fab4d651SJian Hu static T7_SYS_PCLK(sys_sd_emmc_b,	SYS_CLK_EN0_REG0, 25,	0);
955*fab4d651SJian Hu static T7_SYS_PCLK(sys_sd_emmc_c,	SYS_CLK_EN0_REG0, 26,	0);
956*fab4d651SJian Hu static T7_SYS_PCLK(sys_smartcard,	SYS_CLK_EN0_REG0, 27,	0);
957*fab4d651SJian Hu static T7_SYS_PCLK(sys_acodec,		SYS_CLK_EN0_REG0, 28,	0);
958*fab4d651SJian Hu static T7_SYS_PCLK(sys_spifc,		SYS_CLK_EN0_REG0, 29,	0);
959*fab4d651SJian Hu static T7_SYS_PCLK(sys_msr_clk,		SYS_CLK_EN0_REG0, 30,	0);
960*fab4d651SJian Hu static T7_SYS_PCLK(sys_ir_ctrl,		SYS_CLK_EN0_REG0, 31,	0);
961*fab4d651SJian Hu static T7_SYS_PCLK(sys_audio,		SYS_CLK_EN0_REG1, 0,	0);
962*fab4d651SJian Hu static T7_SYS_PCLK(sys_eth,		SYS_CLK_EN0_REG1, 3,	0);
963*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_a,		SYS_CLK_EN0_REG1, 5,	0);
964*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_b,		SYS_CLK_EN0_REG1, 6,	0);
965*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_c,		SYS_CLK_EN0_REG1, 7,	0);
966*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_d,		SYS_CLK_EN0_REG1, 8,	0);
967*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_e,		SYS_CLK_EN0_REG1, 9,	0);
968*fab4d651SJian Hu static T7_SYS_PCLK(sys_uart_f,		SYS_CLK_EN0_REG1, 10,	0);
969*fab4d651SJian Hu static T7_SYS_PCLK(sys_aififo,		SYS_CLK_EN0_REG1, 11,	0);
970*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc2,		SYS_CLK_EN0_REG1, 12,	0);
971*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc3,		SYS_CLK_EN0_REG1, 13,	0);
972*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc4,		SYS_CLK_EN0_REG1, 14,	0);
973*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_a73,		SYS_CLK_EN0_REG1, 15,	0);
974*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_a53,		SYS_CLK_EN0_REG1, 16,	0);
975*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc5,		SYS_CLK_EN0_REG1, 17,	0);
976*fab4d651SJian Hu static T7_SYS_PCLK(sys_g2d,		SYS_CLK_EN0_REG1, 20,	0);
977*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc0,		SYS_CLK_EN0_REG1, 21,	0);
978*fab4d651SJian Hu static T7_SYS_PCLK(sys_spicc1,		SYS_CLK_EN0_REG1, 22,	0);
979*fab4d651SJian Hu static T7_SYS_PCLK(sys_pcie,		SYS_CLK_EN0_REG1, 24,	0);
980*fab4d651SJian Hu static T7_SYS_PCLK(sys_usb,		SYS_CLK_EN0_REG1, 26,	0);
981*fab4d651SJian Hu static T7_SYS_PCLK(sys_pcie_phy,	SYS_CLK_EN0_REG1, 27,	0);
982*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_ao_a,	SYS_CLK_EN0_REG1, 28,	0);
983*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_ao_b,	SYS_CLK_EN0_REG1, 29,	0);
984*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_a,		SYS_CLK_EN0_REG1, 30,	0);
985*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_b,		SYS_CLK_EN0_REG1, 31,	0);
986*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_c,		SYS_CLK_EN0_REG2, 0,	0);
987*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_d,		SYS_CLK_EN0_REG2, 1,	0);
988*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_e,		SYS_CLK_EN0_REG2, 2,	0);
989*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_m_f,		SYS_CLK_EN0_REG2, 3,	0);
990*fab4d651SJian Hu static T7_SYS_PCLK(sys_hdmitx_apb,	SYS_CLK_EN0_REG2, 4,	0);
991*fab4d651SJian Hu static T7_SYS_PCLK(sys_i2c_s_a,		SYS_CLK_EN0_REG2, 5,	0);
992*fab4d651SJian Hu static T7_SYS_PCLK(sys_hdmirx_pclk,	SYS_CLK_EN0_REG2, 8,	0);
993*fab4d651SJian Hu static T7_SYS_PCLK(sys_mmc_apb,		SYS_CLK_EN0_REG2, 11,	0);
994*fab4d651SJian Hu static T7_SYS_PCLK(sys_mipi_isp_pclk,	SYS_CLK_EN0_REG2, 17,	0);
995*fab4d651SJian Hu static T7_SYS_PCLK(sys_rsa,		SYS_CLK_EN0_REG2, 18,	0);
996*fab4d651SJian Hu static T7_SYS_PCLK(sys_pclk_sys_apb,	SYS_CLK_EN0_REG2, 19,	0);
997*fab4d651SJian Hu static T7_SYS_PCLK(sys_a73pclk_apb,	SYS_CLK_EN0_REG2, 20,	0);
998*fab4d651SJian Hu static T7_SYS_PCLK(sys_dspa,		SYS_CLK_EN0_REG2, 21,	0);
999*fab4d651SJian Hu static T7_SYS_PCLK(sys_dspb,		SYS_CLK_EN0_REG2, 22,	0);
1000*fab4d651SJian Hu static T7_SYS_PCLK(sys_vpu_intr,	SYS_CLK_EN0_REG2, 25,	0);
1001*fab4d651SJian Hu static T7_SYS_PCLK(sys_sar_adc,		SYS_CLK_EN0_REG2, 28,	0);
1002*fab4d651SJian Hu /*
1003*fab4d651SJian Hu  * sys_gic provides the clock for GIC(Generic Interrupt Controller).
1004*fab4d651SJian Hu  * After clock is disabled, The GIC cannot work properly. At present, the driver
1005*fab4d651SJian Hu  * used by our GIC is the public driver in kernel, and there is no management
1006*fab4d651SJian Hu  * clock in the driver.
1007*fab4d651SJian Hu  */
1008*fab4d651SJian Hu static T7_SYS_PCLK(sys_gic,		SYS_CLK_EN0_REG2, 30,	CLK_IS_CRITICAL);
1009*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_gpu,		SYS_CLK_EN0_REG2, 31,	0);
1010*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_nna,		SYS_CLK_EN0_REG3, 0,	0);
1011*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_vpu,		SYS_CLK_EN0_REG3, 1,	0);
1012*fab4d651SJian Hu static T7_SYS_PCLK(sys_ts_hevc,		SYS_CLK_EN0_REG3, 2,	0);
1013*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ao_ab,	SYS_CLK_EN0_REG3, 3,	0);
1014*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ao_cd,	SYS_CLK_EN0_REG3, 4,	0);
1015*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ao_ef,	SYS_CLK_EN0_REG3, 5,	0);
1016*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ao_gh,	SYS_CLK_EN0_REG3, 6,	0);
1017*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ab,		SYS_CLK_EN0_REG3, 7,	0);
1018*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_cd,		SYS_CLK_EN0_REG3, 8,	0);
1019*fab4d651SJian Hu static T7_SYS_PCLK(sys_pwm_ef,		SYS_CLK_EN0_REG3, 9,	0);
1020*fab4d651SJian Hu 
1021*fab4d651SJian Hu /* Array of all clocks registered by this provider */
1022*fab4d651SJian Hu static struct clk_hw *t7_peripherals_hw_clks[] = {
1023*fab4d651SJian Hu 	[CLKID_RTC_DUALDIV_IN]		= &t7_rtc_dualdiv_in.hw,
1024*fab4d651SJian Hu 	[CLKID_RTC_DUALDIV_DIV]		= &t7_rtc_dualdiv_div.hw,
1025*fab4d651SJian Hu 	[CLKID_RTC_DUALDIV_SEL]		= &t7_rtc_dualdiv_sel.hw,
1026*fab4d651SJian Hu 	[CLKID_RTC_DUALDIV]		= &t7_rtc_dualdiv.hw,
1027*fab4d651SJian Hu 	[CLKID_RTC]			= &t7_rtc.hw,
1028*fab4d651SJian Hu 	[CLKID_CECA_DUALDIV_IN]		= &t7_ceca_dualdiv_in.hw,
1029*fab4d651SJian Hu 	[CLKID_CECA_DUALDIV_DIV]	= &t7_ceca_dualdiv_div.hw,
1030*fab4d651SJian Hu 	[CLKID_CECA_DUALDIV_SEL]	= &t7_ceca_dualdiv_sel.hw,
1031*fab4d651SJian Hu 	[CLKID_CECA_DUALDIV]		= &t7_ceca_dualdiv.hw,
1032*fab4d651SJian Hu 	[CLKID_CECA]			= &t7_ceca.hw,
1033*fab4d651SJian Hu 	[CLKID_CECB_DUALDIV_IN]		= &t7_cecb_dualdiv_in.hw,
1034*fab4d651SJian Hu 	[CLKID_CECB_DUALDIV_DIV]	= &t7_cecb_dualdiv_div.hw,
1035*fab4d651SJian Hu 	[CLKID_CECB_DUALDIV_SEL]	= &t7_cecb_dualdiv_sel.hw,
1036*fab4d651SJian Hu 	[CLKID_CECB_DUALDIV]		= &t7_cecb_dualdiv.hw,
1037*fab4d651SJian Hu 	[CLKID_CECB]			= &t7_cecb.hw,
1038*fab4d651SJian Hu 	[CLKID_SC_SEL]			= &t7_sc_sel.hw,
1039*fab4d651SJian Hu 	[CLKID_SC_DIV]			= &t7_sc_div.hw,
1040*fab4d651SJian Hu 	[CLKID_SC]			= &t7_sc.hw,
1041*fab4d651SJian Hu 	[CLKID_DSPA_0_SEL]		= &t7_dspa_0_sel.hw,
1042*fab4d651SJian Hu 	[CLKID_DSPA_0_DIV]		= &t7_dspa_0_div.hw,
1043*fab4d651SJian Hu 	[CLKID_DSPA_0]			= &t7_dspa_0.hw,
1044*fab4d651SJian Hu 	[CLKID_DSPA_1_SEL]		= &t7_dspa_1_sel.hw,
1045*fab4d651SJian Hu 	[CLKID_DSPA_1_DIV]		= &t7_dspa_1_div.hw,
1046*fab4d651SJian Hu 	[CLKID_DSPA_1]			= &t7_dspa_1.hw,
1047*fab4d651SJian Hu 	[CLKID_DSPA]			= &t7_dspa.hw,
1048*fab4d651SJian Hu 	[CLKID_DSPB_0_SEL]		= &t7_dspb_0_sel.hw,
1049*fab4d651SJian Hu 	[CLKID_DSPB_0_DIV]		= &t7_dspb_0_div.hw,
1050*fab4d651SJian Hu 	[CLKID_DSPB_0]			= &t7_dspb_0.hw,
1051*fab4d651SJian Hu 	[CLKID_DSPB_1_SEL]		= &t7_dspb_1_sel.hw,
1052*fab4d651SJian Hu 	[CLKID_DSPB_1_DIV]		= &t7_dspb_1_div.hw,
1053*fab4d651SJian Hu 	[CLKID_DSPB_1]			= &t7_dspb_1.hw,
1054*fab4d651SJian Hu 	[CLKID_DSPB]			= &t7_dspb.hw,
1055*fab4d651SJian Hu 	[CLKID_24M]			= &t7_24m.hw,
1056*fab4d651SJian Hu 	[CLKID_24M_DIV2]		= &t7_24m_div2.hw,
1057*fab4d651SJian Hu 	[CLKID_12M]			= &t7_12m.hw,
1058*fab4d651SJian Hu 	[CLKID_25M_DIV]			= &t7_25m_div.hw,
1059*fab4d651SJian Hu 	[CLKID_25M]			= &t7_25m.hw,
1060*fab4d651SJian Hu 	[CLKID_ANAKIN_0_SEL]		= &t7_anakin_0_sel.hw,
1061*fab4d651SJian Hu 	[CLKID_ANAKIN_0_DIV]		= &t7_anakin_0_div.hw,
1062*fab4d651SJian Hu 	[CLKID_ANAKIN_0]		= &t7_anakin_0.hw,
1063*fab4d651SJian Hu 	[CLKID_ANAKIN_1_SEL]		= &t7_anakin_1_sel.hw,
1064*fab4d651SJian Hu 	[CLKID_ANAKIN_1_DIV]		= &t7_anakin_1_div.hw,
1065*fab4d651SJian Hu 	[CLKID_ANAKIN_1]		= &t7_anakin_1.hw,
1066*fab4d651SJian Hu 	[CLKID_ANAKIN_01_SEL]		= &t7_anakin_01_sel.hw,
1067*fab4d651SJian Hu 	[CLKID_ANAKIN]			= &t7_anakin.hw,
1068*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_0_SEL]	= &t7_mipi_csi_phy_0_sel.hw,
1069*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_0_DIV]	= &t7_mipi_csi_phy_0_div.hw,
1070*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_0]		= &t7_mipi_csi_phy_0.hw,
1071*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_1_SEL]	= &t7_mipi_csi_phy_1_sel.hw,
1072*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_1_DIV]	= &t7_mipi_csi_phy_1_div.hw,
1073*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY_1]		= &t7_mipi_csi_phy_1.hw,
1074*fab4d651SJian Hu 	[CLKID_MIPI_CSI_PHY]		= &t7_mipi_csi_phy.hw,
1075*fab4d651SJian Hu 	[CLKID_MIPI_ISP_SEL]		= &t7_mipi_isp_sel.hw,
1076*fab4d651SJian Hu 	[CLKID_MIPI_ISP_DIV]		= &t7_mipi_isp_div.hw,
1077*fab4d651SJian Hu 	[CLKID_MIPI_ISP]		= &t7_mipi_isp.hw,
1078*fab4d651SJian Hu 	[CLKID_TS_DIV]			= &t7_ts_div.hw,
1079*fab4d651SJian Hu 	[CLKID_TS]			= &t7_ts.hw,
1080*fab4d651SJian Hu 	[CLKID_MALI_0_SEL]		= &t7_mali_0_sel.hw,
1081*fab4d651SJian Hu 	[CLKID_MALI_0_DIV]		= &t7_mali_0_div.hw,
1082*fab4d651SJian Hu 	[CLKID_MALI_0]			= &t7_mali_0.hw,
1083*fab4d651SJian Hu 	[CLKID_MALI_1_SEL]		= &t7_mali_1_sel.hw,
1084*fab4d651SJian Hu 	[CLKID_MALI_1_DIV]		= &t7_mali_1_div.hw,
1085*fab4d651SJian Hu 	[CLKID_MALI_1]			= &t7_mali_1.hw,
1086*fab4d651SJian Hu 	[CLKID_MALI]			= &t7_mali.hw,
1087*fab4d651SJian Hu 	[CLKID_ETH_RMII_SEL]		= &t7_eth_rmii_sel.hw,
1088*fab4d651SJian Hu 	[CLKID_ETH_RMII_DIV]		= &t7_eth_rmii_div.hw,
1089*fab4d651SJian Hu 	[CLKID_ETH_RMII]		= &t7_eth_rmii.hw,
1090*fab4d651SJian Hu 	[CLKID_FCLK_DIV2_DIV8]		= &t7_fdiv2_div8.hw,
1091*fab4d651SJian Hu 	[CLKID_ETH_125M]		= &t7_eth_125m.hw,
1092*fab4d651SJian Hu 	[CLKID_SD_EMMC_A_SEL]		= &t7_sd_emmc_a_sel.hw,
1093*fab4d651SJian Hu 	[CLKID_SD_EMMC_A_DIV]		= &t7_sd_emmc_a_div.hw,
1094*fab4d651SJian Hu 	[CLKID_SD_EMMC_A]		= &t7_sd_emmc_a.hw,
1095*fab4d651SJian Hu 	[CLKID_SD_EMMC_B_SEL]		= &t7_sd_emmc_b_sel.hw,
1096*fab4d651SJian Hu 	[CLKID_SD_EMMC_B_DIV]		= &t7_sd_emmc_b_div.hw,
1097*fab4d651SJian Hu 	[CLKID_SD_EMMC_B]		= &t7_sd_emmc_b.hw,
1098*fab4d651SJian Hu 	[CLKID_SD_EMMC_C_SEL]		= &t7_sd_emmc_c_sel.hw,
1099*fab4d651SJian Hu 	[CLKID_SD_EMMC_C_DIV]		= &t7_sd_emmc_c_div.hw,
1100*fab4d651SJian Hu 	[CLKID_SD_EMMC_C]		= &t7_sd_emmc_c.hw,
1101*fab4d651SJian Hu 	[CLKID_SPICC0_SEL]		= &t7_spicc0_sel.hw,
1102*fab4d651SJian Hu 	[CLKID_SPICC0_DIV]		= &t7_spicc0_div.hw,
1103*fab4d651SJian Hu 	[CLKID_SPICC0]			= &t7_spicc0.hw,
1104*fab4d651SJian Hu 	[CLKID_SPICC1_SEL]		= &t7_spicc1_sel.hw,
1105*fab4d651SJian Hu 	[CLKID_SPICC1_DIV]		= &t7_spicc1_div.hw,
1106*fab4d651SJian Hu 	[CLKID_SPICC1]			= &t7_spicc1.hw,
1107*fab4d651SJian Hu 	[CLKID_SPICC2_SEL]		= &t7_spicc2_sel.hw,
1108*fab4d651SJian Hu 	[CLKID_SPICC2_DIV]		= &t7_spicc2_div.hw,
1109*fab4d651SJian Hu 	[CLKID_SPICC2]			= &t7_spicc2.hw,
1110*fab4d651SJian Hu 	[CLKID_SPICC3_SEL]		= &t7_spicc3_sel.hw,
1111*fab4d651SJian Hu 	[CLKID_SPICC3_DIV]		= &t7_spicc3_div.hw,
1112*fab4d651SJian Hu 	[CLKID_SPICC3]			= &t7_spicc3.hw,
1113*fab4d651SJian Hu 	[CLKID_SPICC4_SEL]		= &t7_spicc4_sel.hw,
1114*fab4d651SJian Hu 	[CLKID_SPICC4_DIV]		= &t7_spicc4_div.hw,
1115*fab4d651SJian Hu 	[CLKID_SPICC4]			= &t7_spicc4.hw,
1116*fab4d651SJian Hu 	[CLKID_SPICC5_SEL]		= &t7_spicc5_sel.hw,
1117*fab4d651SJian Hu 	[CLKID_SPICC5_DIV]		= &t7_spicc5_div.hw,
1118*fab4d651SJian Hu 	[CLKID_SPICC5]			= &t7_spicc5.hw,
1119*fab4d651SJian Hu 	[CLKID_SARADC_SEL]		= &t7_saradc_sel.hw,
1120*fab4d651SJian Hu 	[CLKID_SARADC_DIV]		= &t7_saradc_div.hw,
1121*fab4d651SJian Hu 	[CLKID_SARADC]			= &t7_saradc.hw,
1122*fab4d651SJian Hu 	[CLKID_PWM_A_SEL]		= &t7_pwm_a_sel.hw,
1123*fab4d651SJian Hu 	[CLKID_PWM_A_DIV]		= &t7_pwm_a_div.hw,
1124*fab4d651SJian Hu 	[CLKID_PWM_A]			= &t7_pwm_a.hw,
1125*fab4d651SJian Hu 	[CLKID_PWM_B_SEL]		= &t7_pwm_b_sel.hw,
1126*fab4d651SJian Hu 	[CLKID_PWM_B_DIV]		= &t7_pwm_b_div.hw,
1127*fab4d651SJian Hu 	[CLKID_PWM_B]			= &t7_pwm_b.hw,
1128*fab4d651SJian Hu 	[CLKID_PWM_C_SEL]		= &t7_pwm_c_sel.hw,
1129*fab4d651SJian Hu 	[CLKID_PWM_C_DIV]		= &t7_pwm_c_div.hw,
1130*fab4d651SJian Hu 	[CLKID_PWM_C]			= &t7_pwm_c.hw,
1131*fab4d651SJian Hu 	[CLKID_PWM_D_SEL]		= &t7_pwm_d_sel.hw,
1132*fab4d651SJian Hu 	[CLKID_PWM_D_DIV]		= &t7_pwm_d_div.hw,
1133*fab4d651SJian Hu 	[CLKID_PWM_D]			= &t7_pwm_d.hw,
1134*fab4d651SJian Hu 	[CLKID_PWM_E_SEL]		= &t7_pwm_e_sel.hw,
1135*fab4d651SJian Hu 	[CLKID_PWM_E_DIV]		= &t7_pwm_e_div.hw,
1136*fab4d651SJian Hu 	[CLKID_PWM_E]			= &t7_pwm_e.hw,
1137*fab4d651SJian Hu 	[CLKID_PWM_F_SEL]		= &t7_pwm_f_sel.hw,
1138*fab4d651SJian Hu 	[CLKID_PWM_F_DIV]		= &t7_pwm_f_div.hw,
1139*fab4d651SJian Hu 	[CLKID_PWM_F]			= &t7_pwm_f.hw,
1140*fab4d651SJian Hu 	[CLKID_PWM_AO_A_SEL]		= &t7_pwm_ao_a_sel.hw,
1141*fab4d651SJian Hu 	[CLKID_PWM_AO_A_DIV]		= &t7_pwm_ao_a_div.hw,
1142*fab4d651SJian Hu 	[CLKID_PWM_AO_A]		= &t7_pwm_ao_a.hw,
1143*fab4d651SJian Hu 	[CLKID_PWM_AO_B_SEL]		= &t7_pwm_ao_b_sel.hw,
1144*fab4d651SJian Hu 	[CLKID_PWM_AO_B_DIV]		= &t7_pwm_ao_b_div.hw,
1145*fab4d651SJian Hu 	[CLKID_PWM_AO_B]		= &t7_pwm_ao_b.hw,
1146*fab4d651SJian Hu 	[CLKID_PWM_AO_C_SEL]		= &t7_pwm_ao_c_sel.hw,
1147*fab4d651SJian Hu 	[CLKID_PWM_AO_C_DIV]		= &t7_pwm_ao_c_div.hw,
1148*fab4d651SJian Hu 	[CLKID_PWM_AO_C]		= &t7_pwm_ao_c.hw,
1149*fab4d651SJian Hu 	[CLKID_PWM_AO_D_SEL]		= &t7_pwm_ao_d_sel.hw,
1150*fab4d651SJian Hu 	[CLKID_PWM_AO_D_DIV]		= &t7_pwm_ao_d_div.hw,
1151*fab4d651SJian Hu 	[CLKID_PWM_AO_D]		= &t7_pwm_ao_d.hw,
1152*fab4d651SJian Hu 	[CLKID_PWM_AO_E_SEL]		= &t7_pwm_ao_e_sel.hw,
1153*fab4d651SJian Hu 	[CLKID_PWM_AO_E_DIV]		= &t7_pwm_ao_e_div.hw,
1154*fab4d651SJian Hu 	[CLKID_PWM_AO_E]		= &t7_pwm_ao_e.hw,
1155*fab4d651SJian Hu 	[CLKID_PWM_AO_F_SEL]		= &t7_pwm_ao_f_sel.hw,
1156*fab4d651SJian Hu 	[CLKID_PWM_AO_F_DIV]		= &t7_pwm_ao_f_div.hw,
1157*fab4d651SJian Hu 	[CLKID_PWM_AO_F]		= &t7_pwm_ao_f.hw,
1158*fab4d651SJian Hu 	[CLKID_PWM_AO_G_SEL]		= &t7_pwm_ao_g_sel.hw,
1159*fab4d651SJian Hu 	[CLKID_PWM_AO_G_DIV]		= &t7_pwm_ao_g_div.hw,
1160*fab4d651SJian Hu 	[CLKID_PWM_AO_G]		= &t7_pwm_ao_g.hw,
1161*fab4d651SJian Hu 	[CLKID_PWM_AO_H_SEL]		= &t7_pwm_ao_h_sel.hw,
1162*fab4d651SJian Hu 	[CLKID_PWM_AO_H_DIV]		= &t7_pwm_ao_h_div.hw,
1163*fab4d651SJian Hu 	[CLKID_PWM_AO_H]		= &t7_pwm_ao_h.hw,
1164*fab4d651SJian Hu 	[CLKID_SYS_DDR]			= &t7_sys_ddr.hw,
1165*fab4d651SJian Hu 	[CLKID_SYS_DOS]			= &t7_sys_dos.hw,
1166*fab4d651SJian Hu 	[CLKID_SYS_MIPI_DSI_A]		= &t7_sys_mipi_dsi_a.hw,
1167*fab4d651SJian Hu 	[CLKID_SYS_MIPI_DSI_B]		= &t7_sys_mipi_dsi_b.hw,
1168*fab4d651SJian Hu 	[CLKID_SYS_ETHPHY]		= &t7_sys_ethphy.hw,
1169*fab4d651SJian Hu 	[CLKID_SYS_MALI]		= &t7_sys_mali.hw,
1170*fab4d651SJian Hu 	[CLKID_SYS_AOCPU]		= &t7_sys_aocpu.hw,
1171*fab4d651SJian Hu 	[CLKID_SYS_AUCPU]		= &t7_sys_aucpu.hw,
1172*fab4d651SJian Hu 	[CLKID_SYS_CEC]			= &t7_sys_cec.hw,
1173*fab4d651SJian Hu 	[CLKID_SYS_GDC]			= &t7_sys_gdc.hw,
1174*fab4d651SJian Hu 	[CLKID_SYS_DESWARP]		= &t7_sys_deswarp.hw,
1175*fab4d651SJian Hu 	[CLKID_SYS_AMPIPE_NAND]		= &t7_sys_ampipe_nand.hw,
1176*fab4d651SJian Hu 	[CLKID_SYS_AMPIPE_ETH]		= &t7_sys_ampipe_eth.hw,
1177*fab4d651SJian Hu 	[CLKID_SYS_AM2AXI0]		= &t7_sys_am2axi0.hw,
1178*fab4d651SJian Hu 	[CLKID_SYS_AM2AXI1]		= &t7_sys_am2axi1.hw,
1179*fab4d651SJian Hu 	[CLKID_SYS_AM2AXI2]		= &t7_sys_am2axi2.hw,
1180*fab4d651SJian Hu 	[CLKID_SYS_SD_EMMC_A]		= &t7_sys_sd_emmc_a.hw,
1181*fab4d651SJian Hu 	[CLKID_SYS_SD_EMMC_B]		= &t7_sys_sd_emmc_b.hw,
1182*fab4d651SJian Hu 	[CLKID_SYS_SD_EMMC_C]		= &t7_sys_sd_emmc_c.hw,
1183*fab4d651SJian Hu 	[CLKID_SYS_SMARTCARD]		= &t7_sys_smartcard.hw,
1184*fab4d651SJian Hu 	[CLKID_SYS_ACODEC]		= &t7_sys_acodec.hw,
1185*fab4d651SJian Hu 	[CLKID_SYS_SPIFC]		= &t7_sys_spifc.hw,
1186*fab4d651SJian Hu 	[CLKID_SYS_MSR_CLK]		= &t7_sys_msr_clk.hw,
1187*fab4d651SJian Hu 	[CLKID_SYS_IR_CTRL]		= &t7_sys_ir_ctrl.hw,
1188*fab4d651SJian Hu 	[CLKID_SYS_AUDIO]		= &t7_sys_audio.hw,
1189*fab4d651SJian Hu 	[CLKID_SYS_ETH]			= &t7_sys_eth.hw,
1190*fab4d651SJian Hu 	[CLKID_SYS_UART_A]		= &t7_sys_uart_a.hw,
1191*fab4d651SJian Hu 	[CLKID_SYS_UART_B]		= &t7_sys_uart_b.hw,
1192*fab4d651SJian Hu 	[CLKID_SYS_UART_C]		= &t7_sys_uart_c.hw,
1193*fab4d651SJian Hu 	[CLKID_SYS_UART_D]		= &t7_sys_uart_d.hw,
1194*fab4d651SJian Hu 	[CLKID_SYS_UART_E]		= &t7_sys_uart_e.hw,
1195*fab4d651SJian Hu 	[CLKID_SYS_UART_F]		= &t7_sys_uart_f.hw,
1196*fab4d651SJian Hu 	[CLKID_SYS_AIFIFO]		= &t7_sys_aififo.hw,
1197*fab4d651SJian Hu 	[CLKID_SYS_SPICC2]		= &t7_sys_spicc2.hw,
1198*fab4d651SJian Hu 	[CLKID_SYS_SPICC3]		= &t7_sys_spicc3.hw,
1199*fab4d651SJian Hu 	[CLKID_SYS_SPICC4]		= &t7_sys_spicc4.hw,
1200*fab4d651SJian Hu 	[CLKID_SYS_TS_A73]		= &t7_sys_ts_a73.hw,
1201*fab4d651SJian Hu 	[CLKID_SYS_TS_A53]		= &t7_sys_ts_a53.hw,
1202*fab4d651SJian Hu 	[CLKID_SYS_SPICC5]		= &t7_sys_spicc5.hw,
1203*fab4d651SJian Hu 	[CLKID_SYS_G2D]			= &t7_sys_g2d.hw,
1204*fab4d651SJian Hu 	[CLKID_SYS_SPICC0]		= &t7_sys_spicc0.hw,
1205*fab4d651SJian Hu 	[CLKID_SYS_SPICC1]		= &t7_sys_spicc1.hw,
1206*fab4d651SJian Hu 	[CLKID_SYS_PCIE]		= &t7_sys_pcie.hw,
1207*fab4d651SJian Hu 	[CLKID_SYS_USB]			= &t7_sys_usb.hw,
1208*fab4d651SJian Hu 	[CLKID_SYS_PCIE_PHY]		= &t7_sys_pcie_phy.hw,
1209*fab4d651SJian Hu 	[CLKID_SYS_I2C_AO_A]		= &t7_sys_i2c_ao_a.hw,
1210*fab4d651SJian Hu 	[CLKID_SYS_I2C_AO_B]		= &t7_sys_i2c_ao_b.hw,
1211*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_A]		= &t7_sys_i2c_m_a.hw,
1212*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_B]		= &t7_sys_i2c_m_b.hw,
1213*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_C]		= &t7_sys_i2c_m_c.hw,
1214*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_D]		= &t7_sys_i2c_m_d.hw,
1215*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_E]		= &t7_sys_i2c_m_e.hw,
1216*fab4d651SJian Hu 	[CLKID_SYS_I2C_M_F]		= &t7_sys_i2c_m_f.hw,
1217*fab4d651SJian Hu 	[CLKID_SYS_HDMITX_APB]		= &t7_sys_hdmitx_apb.hw,
1218*fab4d651SJian Hu 	[CLKID_SYS_I2C_S_A]		= &t7_sys_i2c_s_a.hw,
1219*fab4d651SJian Hu 	[CLKID_SYS_HDMIRX_PCLK]		= &t7_sys_hdmirx_pclk.hw,
1220*fab4d651SJian Hu 	[CLKID_SYS_MMC_APB]		= &t7_sys_mmc_apb.hw,
1221*fab4d651SJian Hu 	[CLKID_SYS_MIPI_ISP_PCLK]	= &t7_sys_mipi_isp_pclk.hw,
1222*fab4d651SJian Hu 	[CLKID_SYS_RSA]			= &t7_sys_rsa.hw,
1223*fab4d651SJian Hu 	[CLKID_SYS_PCLK_SYS_APB]	= &t7_sys_pclk_sys_apb.hw,
1224*fab4d651SJian Hu 	[CLKID_SYS_A73PCLK_APB]		= &t7_sys_a73pclk_apb.hw,
1225*fab4d651SJian Hu 	[CLKID_SYS_DSPA]		= &t7_sys_dspa.hw,
1226*fab4d651SJian Hu 	[CLKID_SYS_DSPB]		= &t7_sys_dspb.hw,
1227*fab4d651SJian Hu 	[CLKID_SYS_VPU_INTR]		= &t7_sys_vpu_intr.hw,
1228*fab4d651SJian Hu 	[CLKID_SYS_SAR_ADC]		= &t7_sys_sar_adc.hw,
1229*fab4d651SJian Hu 	[CLKID_SYS_GIC]			= &t7_sys_gic.hw,
1230*fab4d651SJian Hu 	[CLKID_SYS_TS_GPU]		= &t7_sys_ts_gpu.hw,
1231*fab4d651SJian Hu 	[CLKID_SYS_TS_NNA]		= &t7_sys_ts_nna.hw,
1232*fab4d651SJian Hu 	[CLKID_SYS_TS_VPU]		= &t7_sys_ts_vpu.hw,
1233*fab4d651SJian Hu 	[CLKID_SYS_TS_HEVC]		= &t7_sys_ts_hevc.hw,
1234*fab4d651SJian Hu 	[CLKID_SYS_PWM_AO_AB]		= &t7_sys_pwm_ao_ab.hw,
1235*fab4d651SJian Hu 	[CLKID_SYS_PWM_AO_CD]		= &t7_sys_pwm_ao_cd.hw,
1236*fab4d651SJian Hu 	[CLKID_SYS_PWM_AO_EF]		= &t7_sys_pwm_ao_ef.hw,
1237*fab4d651SJian Hu 	[CLKID_SYS_PWM_AO_GH]		= &t7_sys_pwm_ao_gh.hw,
1238*fab4d651SJian Hu 	[CLKID_SYS_PWM_AB]		= &t7_sys_pwm_ab.hw,
1239*fab4d651SJian Hu 	[CLKID_SYS_PWM_CD]		= &t7_sys_pwm_cd.hw,
1240*fab4d651SJian Hu 	[CLKID_SYS_PWM_EF]		= &t7_sys_pwm_ef.hw,
1241*fab4d651SJian Hu };
1242*fab4d651SJian Hu 
1243*fab4d651SJian Hu static const struct meson_clkc_data t7_peripherals_data = {
1244*fab4d651SJian Hu 	.hw_clks = {
1245*fab4d651SJian Hu 		.hws = t7_peripherals_hw_clks,
1246*fab4d651SJian Hu 		.num = ARRAY_SIZE(t7_peripherals_hw_clks),
1247*fab4d651SJian Hu 	},
1248*fab4d651SJian Hu };
1249*fab4d651SJian Hu 
1250*fab4d651SJian Hu static const struct of_device_id t7_peripherals_clkc_match_table[] = {
1251*fab4d651SJian Hu 	{
1252*fab4d651SJian Hu 		.compatible = "amlogic,t7-peripherals-clkc",
1253*fab4d651SJian Hu 		.data = &t7_peripherals_data
1254*fab4d651SJian Hu 	},
1255*fab4d651SJian Hu 	{}
1256*fab4d651SJian Hu };
1257*fab4d651SJian Hu MODULE_DEVICE_TABLE(of, t7_peripherals_clkc_match_table);
1258*fab4d651SJian Hu 
1259*fab4d651SJian Hu static struct platform_driver t7_peripherals_clkc_driver = {
1260*fab4d651SJian Hu 	.probe = meson_clkc_mmio_probe,
1261*fab4d651SJian Hu 	.driver = {
1262*fab4d651SJian Hu 		.name = "t7-peripherals-clkc",
1263*fab4d651SJian Hu 		.of_match_table = t7_peripherals_clkc_match_table,
1264*fab4d651SJian Hu 	},
1265*fab4d651SJian Hu };
1266*fab4d651SJian Hu module_platform_driver(t7_peripherals_clkc_driver);
1267*fab4d651SJian Hu 
1268*fab4d651SJian Hu MODULE_DESCRIPTION("Amlogic T7 Peripherals Clock Controller driver");
1269*fab4d651SJian Hu MODULE_AUTHOR("Jian Hu <jian.hu@amlogic.com>");
1270*fab4d651SJian Hu MODULE_LICENSE("GPL");
1271*fab4d651SJian Hu MODULE_IMPORT_NS("CLK_MESON");
1272