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