1*b093e0f1SLaura Nao // SPDX-License-Identifier: GPL-2.0-only 2*b093e0f1SLaura Nao /* 3*b093e0f1SLaura Nao * Copyright (c) 2025 MediaTek Inc. 4*b093e0f1SLaura Nao * Guangjie Song <guangjie.song@mediatek.com> 5*b093e0f1SLaura Nao * Copyright (c) 2025 Collabora Ltd. 6*b093e0f1SLaura Nao * Laura Nao <laura.nao@collabora.com> 7*b093e0f1SLaura Nao */ 8*b093e0f1SLaura Nao #include <dt-bindings/clock/mediatek,mt8196-clock.h> 9*b093e0f1SLaura Nao 10*b093e0f1SLaura Nao #include <linux/clk.h> 11*b093e0f1SLaura Nao #include <linux/module.h> 12*b093e0f1SLaura Nao #include <linux/of.h> 13*b093e0f1SLaura Nao #include <linux/of_address.h> 14*b093e0f1SLaura Nao #include <linux/of_device.h> 15*b093e0f1SLaura Nao #include <linux/platform_device.h> 16*b093e0f1SLaura Nao 17*b093e0f1SLaura Nao #include "clk-mtk.h" 18*b093e0f1SLaura Nao #include "clk-mux.h" 19*b093e0f1SLaura Nao 20*b093e0f1SLaura Nao /* MUX SEL REG */ 21*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_UPDATE 0x0004 22*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0 0x0010 23*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0_SET 0x0014 24*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0_CLR 0x0018 25*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1 0x0020 26*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1_SET 0x0024 27*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1_CLR 0x0028 28*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2 0x0030 29*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2_SET 0x0034 30*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2_CLR 0x0038 31*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3 0x0040 32*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3_SET 0x0044 33*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3_CLR 0x0048 34*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4 0x0050 35*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4_SET 0x0054 36*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4_CLR 0x0058 37*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5 0x0060 38*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5_SET 0x0064 39*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5_CLR 0x0068 40*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6 0x0070 41*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6_SET 0x0074 42*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6_CLR 0x0078 43*b093e0f1SLaura Nao #define CKSYS2_CLK_FENC_STATUS_MON_0 0x0174 44*b093e0f1SLaura Nao 45*b093e0f1SLaura Nao /* MUX SHIFT */ 46*b093e0f1SLaura Nao #define TOP_MUX_SENINF0_SHIFT 0 47*b093e0f1SLaura Nao #define TOP_MUX_SENINF1_SHIFT 1 48*b093e0f1SLaura Nao #define TOP_MUX_SENINF2_SHIFT 2 49*b093e0f1SLaura Nao #define TOP_MUX_SENINF3_SHIFT 3 50*b093e0f1SLaura Nao #define TOP_MUX_SENINF4_SHIFT 4 51*b093e0f1SLaura Nao #define TOP_MUX_SENINF5_SHIFT 5 52*b093e0f1SLaura Nao #define TOP_MUX_IMG1_SHIFT 6 53*b093e0f1SLaura Nao #define TOP_MUX_IPE_SHIFT 7 54*b093e0f1SLaura Nao #define TOP_MUX_CAM_SHIFT 8 55*b093e0f1SLaura Nao #define TOP_MUX_CAMTM_SHIFT 9 56*b093e0f1SLaura Nao #define TOP_MUX_DPE_SHIFT 10 57*b093e0f1SLaura Nao #define TOP_MUX_VDEC_SHIFT 11 58*b093e0f1SLaura Nao #define TOP_MUX_CCUSYS_SHIFT 12 59*b093e0f1SLaura Nao #define TOP_MUX_CCUTM_SHIFT 13 60*b093e0f1SLaura Nao #define TOP_MUX_VENC_SHIFT 14 61*b093e0f1SLaura Nao #define TOP_MUX_DVO_SHIFT 15 62*b093e0f1SLaura Nao #define TOP_MUX_DVO_FAVT_SHIFT 16 63*b093e0f1SLaura Nao #define TOP_MUX_DP1_SHIFT 17 64*b093e0f1SLaura Nao #define TOP_MUX_DP0_SHIFT 18 65*b093e0f1SLaura Nao #define TOP_MUX_DISP_SHIFT 19 66*b093e0f1SLaura Nao #define TOP_MUX_MDP_SHIFT 20 67*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_SHIFT 21 68*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_SNOC_SHIFT 22 69*b093e0f1SLaura Nao #define TOP_MUX_MMUP_SHIFT 23 70*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_AO_SHIFT 26 71*b093e0f1SLaura Nao 72*b093e0f1SLaura Nao /* HW Voter REG */ 73*b093e0f1SLaura Nao #define HWV_CG_30_SET 0x0058 74*b093e0f1SLaura Nao #define HWV_CG_30_CLR 0x005c 75*b093e0f1SLaura Nao #define HWV_CG_30_DONE 0x2c2c 76*b093e0f1SLaura Nao 77*b093e0f1SLaura Nao #define MM_HWV_CG_30_SET 0x00f0 78*b093e0f1SLaura Nao #define MM_HWV_CG_30_CLR 0x00f4 79*b093e0f1SLaura Nao #define MM_HWV_CG_30_DONE 0x2c78 80*b093e0f1SLaura Nao #define MM_HWV_CG_31_SET 0x00f8 81*b093e0f1SLaura Nao #define MM_HWV_CG_31_CLR 0x00fc 82*b093e0f1SLaura Nao #define MM_HWV_CG_31_DONE 0x2c7c 83*b093e0f1SLaura Nao #define MM_HWV_CG_32_SET 0x0100 84*b093e0f1SLaura Nao #define MM_HWV_CG_32_CLR 0x0104 85*b093e0f1SLaura Nao #define MM_HWV_CG_32_DONE 0x2c80 86*b093e0f1SLaura Nao #define MM_HWV_CG_33_SET 0x0108 87*b093e0f1SLaura Nao #define MM_HWV_CG_33_CLR 0x010c 88*b093e0f1SLaura Nao #define MM_HWV_CG_33_DONE 0x2c84 89*b093e0f1SLaura Nao #define MM_HWV_CG_34_SET 0x0110 90*b093e0f1SLaura Nao #define MM_HWV_CG_34_CLR 0x0114 91*b093e0f1SLaura Nao #define MM_HWV_CG_34_DONE 0x2c88 92*b093e0f1SLaura Nao #define MM_HWV_CG_35_SET 0x0118 93*b093e0f1SLaura Nao #define MM_HWV_CG_35_CLR 0x011c 94*b093e0f1SLaura Nao #define MM_HWV_CG_35_DONE 0x2c8c 95*b093e0f1SLaura Nao #define MM_HWV_CG_36_SET 0x0120 96*b093e0f1SLaura Nao #define MM_HWV_CG_36_CLR 0x0124 97*b093e0f1SLaura Nao #define MM_HWV_CG_36_DONE 0x2c90 98*b093e0f1SLaura Nao #define MM_HWV_MUX_UPDATE_31_0 0x0240 99*b093e0f1SLaura Nao 100*b093e0f1SLaura Nao static const struct mtk_fixed_factor top_divs[] = { 101*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D2, "mainpll2_d2", "mainpll2", 1, 2), 102*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D3, "mainpll2_d3", "mainpll2", 1, 3), 103*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D4, "mainpll2_d4", "mainpll2", 1, 4), 104*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D4_D2, "mainpll2_d4_d2", "mainpll2", 1, 8), 105*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D4_D4, "mainpll2_d4_d4", "mainpll2", 1, 16), 106*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D5, "mainpll2_d5", "mainpll2", 1, 5), 107*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D5_D2, "mainpll2_d5_d2", "mainpll2", 1, 10), 108*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D6, "mainpll2_d6", "mainpll2", 1, 6), 109*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D6_D2, "mainpll2_d6_d2", "mainpll2", 1, 12), 110*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D7, "mainpll2_d7", "mainpll2", 1, 7), 111*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D7_D2, "mainpll2_d7_d2", "mainpll2", 1, 14), 112*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MAINPLL2_D9, "mainpll2_d9", "mainpll2", 1, 9), 113*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D3, "univpll2_d3", "univpll2", 1, 3), 114*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D4, "univpll2_d4", "univpll2", 1, 4), 115*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D4_D2, "univpll2_d4_d2", "univpll2", 1, 8), 116*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D5, "univpll2_d5", "univpll2", 1, 5), 117*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D5_D2, "univpll2_d5_d2", "univpll2", 1, 10), 118*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D6, "univpll2_d6", "univpll2", 1, 6), 119*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D6_D2, "univpll2_d6_d2", "univpll2", 1, 12), 120*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D6_D4, "univpll2_d6_d4", "univpll2", 1, 24), 121*b093e0f1SLaura Nao FACTOR(CLK_TOP2_UNIVPLL2_D7, "univpll2_d7", "univpll2", 1, 7), 122*b093e0f1SLaura Nao FACTOR(CLK_TOP2_IMGPLL_D2, "imgpll_d2", "imgpll", 1, 2), 123*b093e0f1SLaura Nao FACTOR(CLK_TOP2_IMGPLL_D4, "imgpll_d4", "imgpll", 1, 4), 124*b093e0f1SLaura Nao FACTOR(CLK_TOP2_IMGPLL_D5, "imgpll_d5", "imgpll", 1, 5), 125*b093e0f1SLaura Nao FACTOR(CLK_TOP2_IMGPLL_D5_D2, "imgpll_d5_d2", "imgpll", 1, 10), 126*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D3, "mmpll2_d3", "mmpll2", 1, 3), 127*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D4, "mmpll2_d4", "mmpll2", 1, 4), 128*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D4_D2, "mmpll2_d4_d2", "mmpll2", 1, 8), 129*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D5, "mmpll2_d5", "mmpll2", 1, 5), 130*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D5_D2, "mmpll2_d5_d2", "mmpll2", 1, 10), 131*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D6, "mmpll2_d6", "mmpll2", 1, 6), 132*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D6_D2, "mmpll2_d6_d2", "mmpll2", 1, 12), 133*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D7, "mmpll2_d7", "mmpll2", 1, 7), 134*b093e0f1SLaura Nao FACTOR(CLK_TOP2_MMPLL2_D9, "mmpll2_d9", "mmpll2", 1, 9), 135*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL1_D4, "tvdpll1_d4", "tvdpll1", 1, 4), 136*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL1_D8, "tvdpll1_d8", "tvdpll1", 1, 8), 137*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL1_D16, "tvdpll1_d16", "tvdpll1", 1, 16), 138*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL2_D2, "tvdpll2_d2", "tvdpll2", 1, 2), 139*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL2_D4, "tvdpll2_d4", "tvdpll2", 1, 4), 140*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL2_D8, "tvdpll2_d8", "tvdpll2", 1, 8), 141*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL2_D16, "tvdpll2_d16", "tvdpll2", 92, 1473), 142*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL3_D2, "tvdpll3_d2", "tvdpll3", 1, 2), 143*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL3_D4, "tvdpll3_d4", "tvdpll3", 1, 4), 144*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL3_D8, "tvdpll3_d8", "tvdpll3", 1, 8), 145*b093e0f1SLaura Nao FACTOR(CLK_TOP2_TVDPLL3_D16, "tvdpll3_d16", "tvdpll3", 92, 1473), 146*b093e0f1SLaura Nao }; 147*b093e0f1SLaura Nao 148*b093e0f1SLaura Nao static const char * const seninf_parents[] = { 149*b093e0f1SLaura Nao "clk26m", 150*b093e0f1SLaura Nao "ck_osc_d10", 151*b093e0f1SLaura Nao "ck_osc_d8", 152*b093e0f1SLaura Nao "ck_osc_d5", 153*b093e0f1SLaura Nao "ck_osc_d4", 154*b093e0f1SLaura Nao "univpll2_d6_d2", 155*b093e0f1SLaura Nao "mainpll2_d9", 156*b093e0f1SLaura Nao "ck_osc_d2", 157*b093e0f1SLaura Nao "mainpll2_d4_d2", 158*b093e0f1SLaura Nao "univpll2_d4_d2", 159*b093e0f1SLaura Nao "mmpll2_d4_d2", 160*b093e0f1SLaura Nao "univpll2_d7", 161*b093e0f1SLaura Nao "mainpll2_d6", 162*b093e0f1SLaura Nao "mmpll2_d7", 163*b093e0f1SLaura Nao "univpll2_d6", 164*b093e0f1SLaura Nao "univpll2_d5" 165*b093e0f1SLaura Nao }; 166*b093e0f1SLaura Nao 167*b093e0f1SLaura Nao static const char * const img1_parents[] = { 168*b093e0f1SLaura Nao "clk26m", 169*b093e0f1SLaura Nao "ck_osc_d4", 170*b093e0f1SLaura Nao "ck_osc_d3", 171*b093e0f1SLaura Nao "mmpll2_d6_d2", 172*b093e0f1SLaura Nao "ck_osc_d2", 173*b093e0f1SLaura Nao "imgpll_d5_d2", 174*b093e0f1SLaura Nao "mmpll2_d5_d2", 175*b093e0f1SLaura Nao "univpll2_d4_d2", 176*b093e0f1SLaura Nao "mmpll2_d4_d2", 177*b093e0f1SLaura Nao "mmpll2_d7", 178*b093e0f1SLaura Nao "univpll2_d6", 179*b093e0f1SLaura Nao "mmpll2_d6", 180*b093e0f1SLaura Nao "univpll2_d5", 181*b093e0f1SLaura Nao "mmpll2_d5", 182*b093e0f1SLaura Nao "univpll2_d4", 183*b093e0f1SLaura Nao "imgpll_d4" 184*b093e0f1SLaura Nao }; 185*b093e0f1SLaura Nao 186*b093e0f1SLaura Nao static const char * const ipe_parents[] = { 187*b093e0f1SLaura Nao "clk26m", 188*b093e0f1SLaura Nao "ck_osc_d4", 189*b093e0f1SLaura Nao "ck_osc_d3", 190*b093e0f1SLaura Nao "ck_osc_d2", 191*b093e0f1SLaura Nao "univpll2_d6", 192*b093e0f1SLaura Nao "mmpll2_d6", 193*b093e0f1SLaura Nao "univpll2_d5", 194*b093e0f1SLaura Nao "imgpll_d5", 195*b093e0f1SLaura Nao "ck_mainpll_d4", 196*b093e0f1SLaura Nao "mmpll2_d5", 197*b093e0f1SLaura Nao "imgpll_d4" 198*b093e0f1SLaura Nao }; 199*b093e0f1SLaura Nao 200*b093e0f1SLaura Nao static const char * const cam_parents[] = { 201*b093e0f1SLaura Nao "clk26m", 202*b093e0f1SLaura Nao "ck_osc_d10", 203*b093e0f1SLaura Nao "ck_osc_d4", 204*b093e0f1SLaura Nao "ck_osc_d3", 205*b093e0f1SLaura Nao "ck_osc_d2", 206*b093e0f1SLaura Nao "mmpll2_d5_d2", 207*b093e0f1SLaura Nao "univpll2_d4_d2", 208*b093e0f1SLaura Nao "univpll2_d7", 209*b093e0f1SLaura Nao "mmpll2_d7", 210*b093e0f1SLaura Nao "univpll2_d6", 211*b093e0f1SLaura Nao "mmpll2_d6", 212*b093e0f1SLaura Nao "univpll2_d5", 213*b093e0f1SLaura Nao "mmpll2_d5", 214*b093e0f1SLaura Nao "univpll2_d4", 215*b093e0f1SLaura Nao "imgpll_d4", 216*b093e0f1SLaura Nao "mmpll2_d4" 217*b093e0f1SLaura Nao }; 218*b093e0f1SLaura Nao 219*b093e0f1SLaura Nao static const char * const camtm_parents[] = { 220*b093e0f1SLaura Nao "clk26m", 221*b093e0f1SLaura Nao "univpll2_d6_d4", 222*b093e0f1SLaura Nao "ck_osc_d4", 223*b093e0f1SLaura Nao "ck_osc_d3", 224*b093e0f1SLaura Nao "univpll2_d6_d2" 225*b093e0f1SLaura Nao }; 226*b093e0f1SLaura Nao 227*b093e0f1SLaura Nao static const char * const dpe_parents[] = { 228*b093e0f1SLaura Nao "clk26m", 229*b093e0f1SLaura Nao "mmpll2_d5_d2", 230*b093e0f1SLaura Nao "univpll2_d4_d2", 231*b093e0f1SLaura Nao "mmpll2_d7", 232*b093e0f1SLaura Nao "univpll2_d6", 233*b093e0f1SLaura Nao "mmpll2_d6", 234*b093e0f1SLaura Nao "univpll2_d5", 235*b093e0f1SLaura Nao "mmpll2_d5", 236*b093e0f1SLaura Nao "imgpll_d4", 237*b093e0f1SLaura Nao "mmpll2_d4" 238*b093e0f1SLaura Nao }; 239*b093e0f1SLaura Nao 240*b093e0f1SLaura Nao static const char * const vdec_parents[] = { 241*b093e0f1SLaura Nao "clk26m", 242*b093e0f1SLaura Nao "ck_mainpll_d5_d2", 243*b093e0f1SLaura Nao "mainpll2_d4_d4", 244*b093e0f1SLaura Nao "mainpll2_d7_d2", 245*b093e0f1SLaura Nao "mainpll2_d6_d2", 246*b093e0f1SLaura Nao "mainpll2_d5_d2", 247*b093e0f1SLaura Nao "mainpll2_d9", 248*b093e0f1SLaura Nao "mainpll2_d4_d2", 249*b093e0f1SLaura Nao "mainpll2_d7", 250*b093e0f1SLaura Nao "mainpll2_d6", 251*b093e0f1SLaura Nao "univpll2_d6", 252*b093e0f1SLaura Nao "mainpll2_d5", 253*b093e0f1SLaura Nao "mainpll2_d4", 254*b093e0f1SLaura Nao "imgpll_d2" 255*b093e0f1SLaura Nao }; 256*b093e0f1SLaura Nao 257*b093e0f1SLaura Nao static const char * const ccusys_parents[] = { 258*b093e0f1SLaura Nao "clk26m", 259*b093e0f1SLaura Nao "ck_osc_d4", 260*b093e0f1SLaura Nao "ck_osc_d3", 261*b093e0f1SLaura Nao "ck_osc_d2", 262*b093e0f1SLaura Nao "mmpll2_d5_d2", 263*b093e0f1SLaura Nao "univpll2_d4_d2", 264*b093e0f1SLaura Nao "mmpll2_d7", 265*b093e0f1SLaura Nao "univpll2_d6", 266*b093e0f1SLaura Nao "mmpll2_d6", 267*b093e0f1SLaura Nao "univpll2_d5", 268*b093e0f1SLaura Nao "mainpll2_d4", 269*b093e0f1SLaura Nao "mainpll2_d3", 270*b093e0f1SLaura Nao "univpll2_d3" 271*b093e0f1SLaura Nao }; 272*b093e0f1SLaura Nao 273*b093e0f1SLaura Nao static const char * const ccutm_parents[] = { 274*b093e0f1SLaura Nao "clk26m", 275*b093e0f1SLaura Nao "univpll2_d6_d4", 276*b093e0f1SLaura Nao "ck_osc_d4", 277*b093e0f1SLaura Nao "ck_osc_d3", 278*b093e0f1SLaura Nao "univpll2_d6_d2" 279*b093e0f1SLaura Nao }; 280*b093e0f1SLaura Nao 281*b093e0f1SLaura Nao static const char * const venc_parents[] = { 282*b093e0f1SLaura Nao "clk26m", 283*b093e0f1SLaura Nao "mainpll2_d5_d2", 284*b093e0f1SLaura Nao "univpll2_d5_d2", 285*b093e0f1SLaura Nao "mainpll2_d4_d2", 286*b093e0f1SLaura Nao "mmpll2_d9", 287*b093e0f1SLaura Nao "univpll2_d4_d2", 288*b093e0f1SLaura Nao "mmpll2_d4_d2", 289*b093e0f1SLaura Nao "mainpll2_d6", 290*b093e0f1SLaura Nao "univpll2_d6", 291*b093e0f1SLaura Nao "mainpll2_d5", 292*b093e0f1SLaura Nao "mmpll2_d6", 293*b093e0f1SLaura Nao "univpll2_d5", 294*b093e0f1SLaura Nao "mainpll2_d4", 295*b093e0f1SLaura Nao "univpll2_d4", 296*b093e0f1SLaura Nao "univpll2_d3" 297*b093e0f1SLaura Nao }; 298*b093e0f1SLaura Nao 299*b093e0f1SLaura Nao static const char * const dp1_parents[] = { 300*b093e0f1SLaura Nao "clk26m", 301*b093e0f1SLaura Nao "tvdpll2_d16", 302*b093e0f1SLaura Nao "tvdpll2_d8", 303*b093e0f1SLaura Nao "tvdpll2_d4", 304*b093e0f1SLaura Nao "tvdpll2_d2" 305*b093e0f1SLaura Nao }; 306*b093e0f1SLaura Nao 307*b093e0f1SLaura Nao static const char * const dp0_parents[] = { 308*b093e0f1SLaura Nao "clk26m", 309*b093e0f1SLaura Nao "tvdpll1_d16", 310*b093e0f1SLaura Nao "tvdpll1_d8", 311*b093e0f1SLaura Nao "tvdpll1_d4", 312*b093e0f1SLaura Nao "ck_tvdpll1_d2" 313*b093e0f1SLaura Nao }; 314*b093e0f1SLaura Nao 315*b093e0f1SLaura Nao static const char * const disp_parents[] = { 316*b093e0f1SLaura Nao "clk26m", 317*b093e0f1SLaura Nao "ck_mainpll_d5_d2", 318*b093e0f1SLaura Nao "ck_mainpll_d4_d2", 319*b093e0f1SLaura Nao "ck_mainpll_d6", 320*b093e0f1SLaura Nao "mainpll2_d5", 321*b093e0f1SLaura Nao "mmpll2_d6", 322*b093e0f1SLaura Nao "mainpll2_d4", 323*b093e0f1SLaura Nao "univpll2_d4", 324*b093e0f1SLaura Nao "mainpll2_d3" 325*b093e0f1SLaura Nao }; 326*b093e0f1SLaura Nao 327*b093e0f1SLaura Nao static const char * const mdp_parents[] = { 328*b093e0f1SLaura Nao "clk26m", 329*b093e0f1SLaura Nao "ck_mainpll_d5_d2", 330*b093e0f1SLaura Nao "mainpll2_d5_d2", 331*b093e0f1SLaura Nao "mmpll2_d6_d2", 332*b093e0f1SLaura Nao "mainpll2_d9", 333*b093e0f1SLaura Nao "mainpll2_d4_d2", 334*b093e0f1SLaura Nao "mainpll2_d7", 335*b093e0f1SLaura Nao "mainpll2_d6", 336*b093e0f1SLaura Nao "mainpll2_d5", 337*b093e0f1SLaura Nao "mmpll2_d6", 338*b093e0f1SLaura Nao "mainpll2_d4", 339*b093e0f1SLaura Nao "univpll2_d4", 340*b093e0f1SLaura Nao "mainpll2_d3" 341*b093e0f1SLaura Nao }; 342*b093e0f1SLaura Nao 343*b093e0f1SLaura Nao static const char * const mminfra_parents[] = { 344*b093e0f1SLaura Nao "clk26m", 345*b093e0f1SLaura Nao "ck_osc_d4", 346*b093e0f1SLaura Nao "ck_mainpll_d7_d2", 347*b093e0f1SLaura Nao "ck_mainpll_d5_d2", 348*b093e0f1SLaura Nao "ck_mainpll_d9", 349*b093e0f1SLaura Nao "mmpll2_d6_d2", 350*b093e0f1SLaura Nao "mainpll2_d4_d2", 351*b093e0f1SLaura Nao "ck_mainpll_d6", 352*b093e0f1SLaura Nao "univpll2_d6", 353*b093e0f1SLaura Nao "mainpll2_d5", 354*b093e0f1SLaura Nao "mmpll2_d6", 355*b093e0f1SLaura Nao "univpll2_d5", 356*b093e0f1SLaura Nao "mainpll2_d4", 357*b093e0f1SLaura Nao "univpll2_d4", 358*b093e0f1SLaura Nao "mainpll2_d3", 359*b093e0f1SLaura Nao "univpll2_d3" 360*b093e0f1SLaura Nao }; 361*b093e0f1SLaura Nao 362*b093e0f1SLaura Nao static const char * const mminfra_snoc_parents[] = { 363*b093e0f1SLaura Nao "clk26m", 364*b093e0f1SLaura Nao "ck_osc_d4", 365*b093e0f1SLaura Nao "ck_mainpll_d7_d2", 366*b093e0f1SLaura Nao "ck_mainpll_d9", 367*b093e0f1SLaura Nao "ck_mainpll_d7", 368*b093e0f1SLaura Nao "ck_mainpll_d6", 369*b093e0f1SLaura Nao "mmpll2_d4_d2", 370*b093e0f1SLaura Nao "ck_mainpll_d5", 371*b093e0f1SLaura Nao "ck_mainpll_d4", 372*b093e0f1SLaura Nao "univpll2_d4", 373*b093e0f1SLaura Nao "mmpll2_d4", 374*b093e0f1SLaura Nao "mainpll2_d3", 375*b093e0f1SLaura Nao "univpll2_d3", 376*b093e0f1SLaura Nao "mmpll2_d3", 377*b093e0f1SLaura Nao "mainpll2_d2" 378*b093e0f1SLaura Nao }; 379*b093e0f1SLaura Nao 380*b093e0f1SLaura Nao static const char * const mmup_parents[] = { 381*b093e0f1SLaura Nao "clk26m", 382*b093e0f1SLaura Nao "mainpll2_d6", 383*b093e0f1SLaura Nao "mainpll2_d5", 384*b093e0f1SLaura Nao "ck_osc_d2", 385*b093e0f1SLaura Nao "ck_osc", 386*b093e0f1SLaura Nao "ck_mainpll_d4", 387*b093e0f1SLaura Nao "univpll2_d4", 388*b093e0f1SLaura Nao "mainpll2_d3" 389*b093e0f1SLaura Nao }; 390*b093e0f1SLaura Nao 391*b093e0f1SLaura Nao static const char * const mminfra_ao_parents[] = { 392*b093e0f1SLaura Nao "clk26m", 393*b093e0f1SLaura Nao "ck_osc_d4", 394*b093e0f1SLaura Nao "ck_mainpll_d3" 395*b093e0f1SLaura Nao }; 396*b093e0f1SLaura Nao 397*b093e0f1SLaura Nao static const char * const dvo_parents[] = { 398*b093e0f1SLaura Nao "clk26m", 399*b093e0f1SLaura Nao "tvdpll3_d16", 400*b093e0f1SLaura Nao "tvdpll3_d8", 401*b093e0f1SLaura Nao "tvdpll3_d4", 402*b093e0f1SLaura Nao "tvdpll3_d2" 403*b093e0f1SLaura Nao }; 404*b093e0f1SLaura Nao 405*b093e0f1SLaura Nao static const char * const dvo_favt_parents[] = { 406*b093e0f1SLaura Nao "clk26m", 407*b093e0f1SLaura Nao "tvdpll3_d16", 408*b093e0f1SLaura Nao "tvdpll3_d8", 409*b093e0f1SLaura Nao "tvdpll3_d4", 410*b093e0f1SLaura Nao "vlp_apll1", 411*b093e0f1SLaura Nao "vlp_apll2", 412*b093e0f1SLaura Nao "tvdpll3_d2" 413*b093e0f1SLaura Nao }; 414*b093e0f1SLaura Nao 415*b093e0f1SLaura Nao static const struct mtk_mux top_muxes[] = { 416*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_0 */ 417*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF0, "seninf0", seninf_parents, 418*b093e0f1SLaura Nao CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR, 419*b093e0f1SLaura Nao MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR, 420*b093e0f1SLaura Nao 0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF0_SHIFT, 421*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 31), 422*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF1, "seninf1", seninf_parents, 423*b093e0f1SLaura Nao CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR, 424*b093e0f1SLaura Nao MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR, 425*b093e0f1SLaura Nao 8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF1_SHIFT, 426*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 30), 427*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF2, "seninf2", seninf_parents, 428*b093e0f1SLaura Nao CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR, 429*b093e0f1SLaura Nao MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR, 430*b093e0f1SLaura Nao 16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF2_SHIFT, 431*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 29), 432*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF3, "seninf3", seninf_parents, 433*b093e0f1SLaura Nao CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR, 434*b093e0f1SLaura Nao MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR, 435*b093e0f1SLaura Nao 24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF3_SHIFT, 436*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 28), 437*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_1 */ 438*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF4, "seninf4", seninf_parents, 439*b093e0f1SLaura Nao CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR, 440*b093e0f1SLaura Nao MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR, 441*b093e0f1SLaura Nao 0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF4_SHIFT, 442*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 27), 443*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF5, "seninf5", seninf_parents, 444*b093e0f1SLaura Nao CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR, 445*b093e0f1SLaura Nao MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR, 446*b093e0f1SLaura Nao 8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF5_SHIFT, 447*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 26), 448*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_IMG1, "img1", img1_parents, 449*b093e0f1SLaura Nao CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR, 450*b093e0f1SLaura Nao MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR, 451*b093e0f1SLaura Nao 16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_IMG1_SHIFT, 452*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 25), 453*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_IPE, "ipe", ipe_parents, 454*b093e0f1SLaura Nao CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR, 455*b093e0f1SLaura Nao MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR, 456*b093e0f1SLaura Nao 24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_IPE_SHIFT, 457*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 24), 458*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_2 */ 459*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CAM, "cam", cam_parents, 460*b093e0f1SLaura Nao CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR, 461*b093e0f1SLaura Nao MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR, 462*b093e0f1SLaura Nao 0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CAM_SHIFT, 463*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 23), 464*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CAMTM, "camtm", camtm_parents, 465*b093e0f1SLaura Nao CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR, 466*b093e0f1SLaura Nao MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR, 467*b093e0f1SLaura Nao 8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CAMTM_SHIFT, 468*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 22), 469*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_DPE, "dpe", dpe_parents, 470*b093e0f1SLaura Nao CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR, 471*b093e0f1SLaura Nao MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR, 472*b093e0f1SLaura Nao 16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DPE_SHIFT, 473*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 21), 474*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_VDEC, "vdec", vdec_parents, 475*b093e0f1SLaura Nao CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR, 476*b093e0f1SLaura Nao MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR, 477*b093e0f1SLaura Nao 24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_VDEC_SHIFT, 478*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 20), 479*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_3 */ 480*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CCUSYS, "ccusys", ccusys_parents, 481*b093e0f1SLaura Nao CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR, 482*b093e0f1SLaura Nao MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR, 483*b093e0f1SLaura Nao 0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CCUSYS_SHIFT, 484*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 19), 485*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CCUTM, "ccutm", ccutm_parents, 486*b093e0f1SLaura Nao CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR, 487*b093e0f1SLaura Nao MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR, 488*b093e0f1SLaura Nao 8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CCUTM_SHIFT, 489*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 18), 490*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_VENC, "venc", venc_parents, 491*b093e0f1SLaura Nao CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR, 492*b093e0f1SLaura Nao MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR, 493*b093e0f1SLaura Nao 16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_VENC_SHIFT, 494*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 17), 495*b093e0f1SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DVO, "dvo", dvo_parents, 496*b093e0f1SLaura Nao CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR, 497*b093e0f1SLaura Nao 24, 3, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DVO_SHIFT, 498*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 16), 499*b093e0f1SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DVO_FAVT, "dvo_favt", dvo_favt_parents, 500*b093e0f1SLaura Nao CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR, 501*b093e0f1SLaura Nao 0, 3, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DVO_FAVT_SHIFT, 502*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 15), 503*b093e0f1SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DP1, "dp1", dp1_parents, 504*b093e0f1SLaura Nao CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR, 505*b093e0f1SLaura Nao 8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DP1_SHIFT, 506*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 14), 507*b093e0f1SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DP0, "dp0", dp0_parents, 508*b093e0f1SLaura Nao CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR, 509*b093e0f1SLaura Nao 16, 3, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DP0_SHIFT, 510*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 13), 511*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_DISP, "disp", disp_parents, 512*b093e0f1SLaura Nao CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR, 513*b093e0f1SLaura Nao MM_HWV_CG_34_DONE, MM_HWV_CG_34_SET, MM_HWV_CG_34_CLR, 514*b093e0f1SLaura Nao 24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DISP_SHIFT, 515*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 12), 516*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_5 */ 517*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MDP, "mdp", mdp_parents, 518*b093e0f1SLaura Nao CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR, 519*b093e0f1SLaura Nao MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR, 520*b093e0f1SLaura Nao 0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MDP_SHIFT, 521*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 11), 522*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA, "mminfra", mminfra_parents, 523*b093e0f1SLaura Nao CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR, 524*b093e0f1SLaura Nao MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR, 525*b093e0f1SLaura Nao 8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_SHIFT, 526*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 10), 527*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA_SNOC, "mminfra_snoc", mminfra_snoc_parents, 528*b093e0f1SLaura Nao CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR, 529*b093e0f1SLaura Nao MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR, 530*b093e0f1SLaura Nao 16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_SNOC_SHIFT, 531*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 9), 532*b093e0f1SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_MMUP, "mmup", mmup_parents, 533*b093e0f1SLaura Nao CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR, 534*b093e0f1SLaura Nao 24, 3, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMUP_SHIFT, 535*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 8), 536*b093e0f1SLaura Nao /* CKSYS2_CLK_CFG_6 */ 537*b093e0f1SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA_AO, "mminfra_ao", mminfra_ao_parents, 538*b093e0f1SLaura Nao CKSYS2_CLK_CFG_6, CKSYS2_CLK_CFG_6_SET, CKSYS2_CLK_CFG_6_CLR, 539*b093e0f1SLaura Nao MM_HWV_CG_36_DONE, MM_HWV_CG_36_SET, MM_HWV_CG_36_CLR, 540*b093e0f1SLaura Nao 16, 2, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_AO_SHIFT, 541*b093e0f1SLaura Nao CKSYS2_CLK_FENC_STATUS_MON_0, 5), 542*b093e0f1SLaura Nao }; 543*b093e0f1SLaura Nao 544*b093e0f1SLaura Nao static const struct mtk_clk_desc topck_desc = { 545*b093e0f1SLaura Nao .factor_clks = top_divs, 546*b093e0f1SLaura Nao .num_factor_clks = ARRAY_SIZE(top_divs), 547*b093e0f1SLaura Nao .mux_clks = top_muxes, 548*b093e0f1SLaura Nao .num_mux_clks = ARRAY_SIZE(top_muxes), 549*b093e0f1SLaura Nao }; 550*b093e0f1SLaura Nao 551*b093e0f1SLaura Nao static const struct of_device_id of_match_clk_mt8196_ck[] = { 552*b093e0f1SLaura Nao { .compatible = "mediatek,mt8196-topckgen-gp2", .data = &topck_desc }, 553*b093e0f1SLaura Nao { /* sentinel */ } 554*b093e0f1SLaura Nao }; 555*b093e0f1SLaura Nao MODULE_DEVICE_TABLE(of, of_match_clk_mt8196_ck); 556*b093e0f1SLaura Nao 557*b093e0f1SLaura Nao static struct platform_driver clk_mt8196_topck_drv = { 558*b093e0f1SLaura Nao .probe = mtk_clk_simple_probe, 559*b093e0f1SLaura Nao .remove = mtk_clk_simple_remove, 560*b093e0f1SLaura Nao .driver = { 561*b093e0f1SLaura Nao .name = "clk-mt8196-topck2", 562*b093e0f1SLaura Nao .of_match_table = of_match_clk_mt8196_ck, 563*b093e0f1SLaura Nao }, 564*b093e0f1SLaura Nao }; 565*b093e0f1SLaura Nao 566*b093e0f1SLaura Nao MODULE_DESCRIPTION("MediaTek MT8196 GP2 top clock generators driver"); 567*b093e0f1SLaura Nao module_platform_driver(clk_mt8196_topck_drv); 568*b093e0f1SLaura Nao MODULE_LICENSE("GPL"); 569