xref: /linux/drivers/interconnect/mediatek/mt8195.c (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1*b4529379SAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0
2*b4529379SAngeloGioacchino Del Regno /*
3*b4529379SAngeloGioacchino Del Regno  * Copyright (c) 2021 MediaTek Inc.
4*b4529379SAngeloGioacchino Del Regno  * Copyright (c) 2024 Collabora Ltd.
5*b4529379SAngeloGioacchino Del Regno  *                    AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
6*b4529379SAngeloGioacchino Del Regno  */
7*b4529379SAngeloGioacchino Del Regno 
8*b4529379SAngeloGioacchino Del Regno #include <linux/device.h>
9*b4529379SAngeloGioacchino Del Regno #include <linux/interconnect.h>
10*b4529379SAngeloGioacchino Del Regno #include <linux/interconnect-provider.h>
11*b4529379SAngeloGioacchino Del Regno #include <linux/mod_devicetable.h>
12*b4529379SAngeloGioacchino Del Regno #include <linux/module.h>
13*b4529379SAngeloGioacchino Del Regno #include <linux/platform_device.h>
14*b4529379SAngeloGioacchino Del Regno #include <dt-bindings/interconnect/mediatek,mt8195.h>
15*b4529379SAngeloGioacchino Del Regno 
16*b4529379SAngeloGioacchino Del Regno #include "icc-emi.h"
17*b4529379SAngeloGioacchino Del Regno 
18*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node ddr_emi = {
19*b4529379SAngeloGioacchino Del Regno 	.name = "ddr-emi",
20*b4529379SAngeloGioacchino Del Regno 	.id = SLAVE_DDR_EMI,
21*b4529379SAngeloGioacchino Del Regno 	.ep = 1,
22*b4529379SAngeloGioacchino Del Regno };
23*b4529379SAngeloGioacchino Del Regno 
24*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mcusys = {
25*b4529379SAngeloGioacchino Del Regno 	.name = "mcusys",
26*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MCUSYS,
27*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
28*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
29*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
30*b4529379SAngeloGioacchino Del Regno };
31*b4529379SAngeloGioacchino Del Regno 
32*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node gpu = {
33*b4529379SAngeloGioacchino Del Regno 	.name = "gpu",
34*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_GPUSYS,
35*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
36*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
37*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
38*b4529379SAngeloGioacchino Del Regno };
39*b4529379SAngeloGioacchino Del Regno 
40*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mmsys = {
41*b4529379SAngeloGioacchino Del Regno 	.name = "mmsys",
42*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MMSYS,
43*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
44*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
45*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
46*b4529379SAngeloGioacchino Del Regno };
47*b4529379SAngeloGioacchino Del Regno 
48*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vpu = {
49*b4529379SAngeloGioacchino Del Regno 	.name = "mm-vpu",
50*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_VPU,
51*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
52*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
53*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
54*b4529379SAngeloGioacchino Del Regno };
55*b4529379SAngeloGioacchino Del Regno 
56*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_disp = {
57*b4529379SAngeloGioacchino Del Regno 	.name = "mm-disp",
58*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_DISP,
59*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
60*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
61*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
62*b4529379SAngeloGioacchino Del Regno };
63*b4529379SAngeloGioacchino Del Regno 
64*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vdec = {
65*b4529379SAngeloGioacchino Del Regno 	.name = "mm-vdec",
66*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_VDEC,
67*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
68*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
69*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
70*b4529379SAngeloGioacchino Del Regno };
71*b4529379SAngeloGioacchino Del Regno 
72*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_venc = {
73*b4529379SAngeloGioacchino Del Regno 	.name = "mm-venc",
74*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_VENC,
75*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
76*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
77*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
78*b4529379SAngeloGioacchino Del Regno };
79*b4529379SAngeloGioacchino Del Regno 
80*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_cam = {
81*b4529379SAngeloGioacchino Del Regno 	.name = "mm-cam",
82*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_CAM,
83*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
84*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
85*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
86*b4529379SAngeloGioacchino Del Regno };
87*b4529379SAngeloGioacchino Del Regno 
88*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_img = {
89*b4529379SAngeloGioacchino Del Regno 	.name = "mm-img",
90*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_IMG,
91*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
92*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
93*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
94*b4529379SAngeloGioacchino Del Regno };
95*b4529379SAngeloGioacchino Del Regno 
96*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mm_mdp = {
97*b4529379SAngeloGioacchino Del Regno 	.name = "mm-mdp",
98*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MM_MDP,
99*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
100*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
101*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
102*b4529379SAngeloGioacchino Del Regno };
103*b4529379SAngeloGioacchino Del Regno 
104*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node vpusys = {
105*b4529379SAngeloGioacchino Del Regno 	.name = "vpusys",
106*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_VPUSYS,
107*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
108*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
109*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
110*b4529379SAngeloGioacchino Del Regno };
111*b4529379SAngeloGioacchino Del Regno 
112*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port0 = {
113*b4529379SAngeloGioacchino Del Regno 	.name = "vpu-port0",
114*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_VPU_0,
115*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
116*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
117*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_VPUSYS }
118*b4529379SAngeloGioacchino Del Regno };
119*b4529379SAngeloGioacchino Del Regno 
120*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port1 = {
121*b4529379SAngeloGioacchino Del Regno 	.name = "vpu-port1",
122*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_VPU_1,
123*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
124*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
125*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_VPUSYS }
126*b4529379SAngeloGioacchino Del Regno };
127*b4529379SAngeloGioacchino Del Regno 
128*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mdlasys = {
129*b4529379SAngeloGioacchino Del Regno 	.name = "mdlasys",
130*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MDLASYS,
131*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
132*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
133*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
134*b4529379SAngeloGioacchino Del Regno };
135*b4529379SAngeloGioacchino Del Regno 
136*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node mdla_port0 = {
137*b4529379SAngeloGioacchino Del Regno 	.name = "mdla-port0",
138*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_MDLA_0,
139*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
140*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
141*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_MDLASYS }
142*b4529379SAngeloGioacchino Del Regno };
143*b4529379SAngeloGioacchino Del Regno 
144*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node ufs = {
145*b4529379SAngeloGioacchino Del Regno 	.name = "ufs",
146*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_UFS,
147*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
148*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
149*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
150*b4529379SAngeloGioacchino Del Regno };
151*b4529379SAngeloGioacchino Del Regno 
152*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node pcie0 = {
153*b4529379SAngeloGioacchino Del Regno 	.name = "pcie0",
154*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_PCIE_0,
155*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
156*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
157*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
158*b4529379SAngeloGioacchino Del Regno };
159*b4529379SAngeloGioacchino Del Regno 
160*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node pcie1 = {
161*b4529379SAngeloGioacchino Del Regno 	.name = "pcie1",
162*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_PCIE_1,
163*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
164*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
165*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
166*b4529379SAngeloGioacchino Del Regno };
167*b4529379SAngeloGioacchino Del Regno 
168*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node usb = {
169*b4529379SAngeloGioacchino Del Regno 	.name = "usb",
170*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_USB,
171*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
172*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
173*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
174*b4529379SAngeloGioacchino Del Regno };
175*b4529379SAngeloGioacchino Del Regno 
176*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node wifi = {
177*b4529379SAngeloGioacchino Del Regno 	.name = "wifi",
178*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_WIFI,
179*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
180*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
181*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
182*b4529379SAngeloGioacchino Del Regno };
183*b4529379SAngeloGioacchino Del Regno 
184*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node bt = {
185*b4529379SAngeloGioacchino Del Regno 	.name = "bt",
186*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_BT,
187*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
188*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
189*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
190*b4529379SAngeloGioacchino Del Regno };
191*b4529379SAngeloGioacchino Del Regno 
192*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node netsys = {
193*b4529379SAngeloGioacchino Del Regno 	.name = "netsys",
194*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_NETSYS,
195*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
196*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
197*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
198*b4529379SAngeloGioacchino Del Regno };
199*b4529379SAngeloGioacchino Del Regno 
200*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node dbgif = {
201*b4529379SAngeloGioacchino Del Regno 	.name = "dbgif",
202*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_DBGIF,
203*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
204*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
205*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
206*b4529379SAngeloGioacchino Del Regno };
207*b4529379SAngeloGioacchino Del Regno 
208*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_ddr_emi = {
209*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-ddr-emi",
210*b4529379SAngeloGioacchino Del Regno 	.id = SLAVE_HRT_DDR_EMI,
211*b4529379SAngeloGioacchino Del Regno 	.ep = 2,
212*b4529379SAngeloGioacchino Del Regno };
213*b4529379SAngeloGioacchino Del Regno 
214*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mmsys = {
215*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mmsys",
216*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MMSYS,
217*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
218*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
219*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_HRT_DDR_EMI }
220*b4529379SAngeloGioacchino Del Regno };
221*b4529379SAngeloGioacchino Del Regno 
222*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_disp = {
223*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-disp",
224*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_DISP,
225*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
226*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
227*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
228*b4529379SAngeloGioacchino Del Regno };
229*b4529379SAngeloGioacchino Del Regno 
230*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_vdec = {
231*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-vdec",
232*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_VDEC,
233*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
234*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
235*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
236*b4529379SAngeloGioacchino Del Regno };
237*b4529379SAngeloGioacchino Del Regno 
238*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_venc = {
239*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-venc",
240*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_VENC,
241*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
242*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
243*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
244*b4529379SAngeloGioacchino Del Regno };
245*b4529379SAngeloGioacchino Del Regno 
246*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_cam = {
247*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-cam",
248*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_CAM,
249*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
250*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
251*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
252*b4529379SAngeloGioacchino Del Regno };
253*b4529379SAngeloGioacchino Del Regno 
254*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_img = {
255*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-img",
256*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_IMG,
257*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
258*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
259*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
260*b4529379SAngeloGioacchino Del Regno };
261*b4529379SAngeloGioacchino Del Regno 
262*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_mdp = {
263*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-mm-mdp",
264*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_MDP,
265*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
266*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
267*b4529379SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
268*b4529379SAngeloGioacchino Del Regno };
269*b4529379SAngeloGioacchino Del Regno 
270*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_dbgif = {
271*b4529379SAngeloGioacchino Del Regno 	.name = "hrt-dbgif",
272*b4529379SAngeloGioacchino Del Regno 	.id = MASTER_HRT_DBGIF,
273*b4529379SAngeloGioacchino Del Regno 	.ep = 0,
274*b4529379SAngeloGioacchino Del Regno 	.num_links = 1,
275*b4529379SAngeloGioacchino Del Regno 	.links = { SLAVE_HRT_DDR_EMI }
276*b4529379SAngeloGioacchino Del Regno };
277*b4529379SAngeloGioacchino Del Regno 
278*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_node *mt8195_emi_icc_nodes[] = {
279*b4529379SAngeloGioacchino Del Regno 	[SLAVE_DDR_EMI] = &ddr_emi,
280*b4529379SAngeloGioacchino Del Regno 	[MASTER_MCUSYS] = &mcusys,
281*b4529379SAngeloGioacchino Del Regno 	[MASTER_GPUSYS] = &gpu,
282*b4529379SAngeloGioacchino Del Regno 	[MASTER_MMSYS] = &mmsys,
283*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_VPU] = &mm_vpu,
284*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_DISP] = &mm_disp,
285*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_VDEC] = &mm_vdec,
286*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_VENC] = &mm_venc,
287*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_CAM] = &mm_cam,
288*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_IMG] = &mm_img,
289*b4529379SAngeloGioacchino Del Regno 	[MASTER_MM_MDP] = &mm_mdp,
290*b4529379SAngeloGioacchino Del Regno 	[MASTER_VPUSYS] = &vpusys,
291*b4529379SAngeloGioacchino Del Regno 	[MASTER_VPU_0] = &vpu_port0,
292*b4529379SAngeloGioacchino Del Regno 	[MASTER_VPU_1] = &vpu_port1,
293*b4529379SAngeloGioacchino Del Regno 	[MASTER_MDLASYS] = &mdlasys,
294*b4529379SAngeloGioacchino Del Regno 	[MASTER_MDLA_0] = &mdla_port0,
295*b4529379SAngeloGioacchino Del Regno 	[MASTER_UFS] = &ufs,
296*b4529379SAngeloGioacchino Del Regno 	[MASTER_PCIE_0] = &pcie0,
297*b4529379SAngeloGioacchino Del Regno 	[MASTER_PCIE_1] = &pcie1,
298*b4529379SAngeloGioacchino Del Regno 	[MASTER_USB] = &usb,
299*b4529379SAngeloGioacchino Del Regno 	[MASTER_WIFI] = &wifi,
300*b4529379SAngeloGioacchino Del Regno 	[MASTER_BT] = &bt,
301*b4529379SAngeloGioacchino Del Regno 	[MASTER_NETSYS] = &netsys,
302*b4529379SAngeloGioacchino Del Regno 	[MASTER_DBGIF] = &dbgif,
303*b4529379SAngeloGioacchino Del Regno 	[SLAVE_HRT_DDR_EMI] = &hrt_ddr_emi,
304*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MMSYS] = &hrt_mmsys,
305*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_DISP] = &hrt_mm_disp,
306*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_VDEC] = &hrt_mm_vdec,
307*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_VENC] = &hrt_mm_venc,
308*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_CAM] = &hrt_mm_cam,
309*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_IMG] = &hrt_mm_img,
310*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_MDP] = &hrt_mm_mdp,
311*b4529379SAngeloGioacchino Del Regno 	[MASTER_HRT_DBGIF] = &hrt_dbgif
312*b4529379SAngeloGioacchino Del Regno };
313*b4529379SAngeloGioacchino Del Regno 
314*b4529379SAngeloGioacchino Del Regno static struct mtk_icc_desc mt8195_emi_icc = {
315*b4529379SAngeloGioacchino Del Regno 	.nodes = mt8195_emi_icc_nodes,
316*b4529379SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(mt8195_emi_icc_nodes),
317*b4529379SAngeloGioacchino Del Regno };
318*b4529379SAngeloGioacchino Del Regno 
319*b4529379SAngeloGioacchino Del Regno static const struct of_device_id mtk_mt8195_emi_icc_of_match[] = {
320*b4529379SAngeloGioacchino Del Regno 	{ .compatible = "mediatek,mt8195-emi", .data = &mt8195_emi_icc },
321*b4529379SAngeloGioacchino Del Regno 	{ /* sentinel */ },
322*b4529379SAngeloGioacchino Del Regno };
323*b4529379SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, mtk_mt8195_emi_icc_of_match);
324*b4529379SAngeloGioacchino Del Regno 
325*b4529379SAngeloGioacchino Del Regno static struct platform_driver mtk_emi_icc_mt8195_driver = {
326*b4529379SAngeloGioacchino Del Regno 	.driver = {
327*b4529379SAngeloGioacchino Del Regno 		.name = "emi-icc-mt8195",
328*b4529379SAngeloGioacchino Del Regno 		.of_match_table = mtk_mt8195_emi_icc_of_match,
329*b4529379SAngeloGioacchino Del Regno 		.sync_state = icc_sync_state,
330*b4529379SAngeloGioacchino Del Regno 	},
331*b4529379SAngeloGioacchino Del Regno 	.probe = mtk_emi_icc_probe,
332*b4529379SAngeloGioacchino Del Regno 	.remove_new = mtk_emi_icc_remove,
333*b4529379SAngeloGioacchino Del Regno 
334*b4529379SAngeloGioacchino Del Regno };
335*b4529379SAngeloGioacchino Del Regno module_platform_driver(mtk_emi_icc_mt8195_driver);
336*b4529379SAngeloGioacchino Del Regno 
337*b4529379SAngeloGioacchino Del Regno MODULE_AUTHOR("AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>");
338*b4529379SAngeloGioacchino Del Regno MODULE_DESCRIPTION("MediaTek MT8195 EMI ICC driver");
339*b4529379SAngeloGioacchino Del Regno MODULE_LICENSE("GPL");
340