1*6f809ca8SJian Hu // SPDX-License-Identifier: (GPL-2.0-only OR MIT) 2*6f809ca8SJian Hu /* 3*6f809ca8SJian Hu * Copyright (C) 2026 Amlogic, Inc. All rights reserved 4*6f809ca8SJian Hu */ 5*6f809ca8SJian Hu 6*6f809ca8SJian Hu #include <dt-bindings/clock/amlogic,a9-peripherals-clkc.h> 7*6f809ca8SJian Hu #include <linux/clk-provider.h> 8*6f809ca8SJian Hu #include <linux/module.h> 9*6f809ca8SJian Hu #include <linux/platform_device.h> 10*6f809ca8SJian Hu #include "clk-regmap.h" 11*6f809ca8SJian Hu #include "clk-dualdiv.h" 12*6f809ca8SJian Hu #include "meson-clkc-utils.h" 13*6f809ca8SJian Hu #include "vid-pll-div.h" 14*6f809ca8SJian Hu 15*6f809ca8SJian Hu #define SYS_CLK_EN0_REG0 0x30 16*6f809ca8SJian Hu #define SYS_CLK_EN0_REG1 0x34 17*6f809ca8SJian Hu #define SYS_CLK_EN0_REG2 0x38 18*6f809ca8SJian Hu #define SYS_CLK_EN0_REG3 0x3c 19*6f809ca8SJian Hu #define SD_EMMC_CLK_CTRL0 0x90 20*6f809ca8SJian Hu #define SD_EMMC_CLK_CTRL1 0x94 21*6f809ca8SJian Hu #define PWM_CLK_H_CTRL 0xbc 22*6f809ca8SJian Hu #define PWM_CLK_I_CTRL 0xc0 23*6f809ca8SJian Hu #define PWM_CLK_J_CTRL 0xc4 24*6f809ca8SJian Hu #define PWM_CLK_K_CTRL 0xc8 25*6f809ca8SJian Hu #define PWM_CLK_L_CTRL 0xcc 26*6f809ca8SJian Hu #define PWM_CLK_M_CTRL 0xd0 27*6f809ca8SJian Hu #define PWM_CLK_N_CTRL 0xd4 28*6f809ca8SJian Hu #define SPISG_CLK_CTRL 0x100 29*6f809ca8SJian Hu #define SPISG_CLK_CTRL1 0x104 30*6f809ca8SJian Hu #define SAR_CLK_CTRL 0x150 31*6f809ca8SJian Hu #define AMFC_CLK_CTRL 0x154 32*6f809ca8SJian Hu #define NNA_CLK_CTRL 0x15c 33*6f809ca8SJian Hu #define USB_CLK_CTRL 0x160 34*6f809ca8SJian Hu #define PCIE_TL_CLK_CTRL 0x164 35*6f809ca8SJian Hu #define CMPR_CLK_CTRL 0x168 36*6f809ca8SJian Hu #define DEWARP_CLK_CTRL 0x16c 37*6f809ca8SJian Hu #define SC_CLK_CTRL 0x170 38*6f809ca8SJian Hu #define DPTX_CLK_CTRL 0x178 39*6f809ca8SJian Hu #define ISP_CLK_CTRL 0x17c 40*6f809ca8SJian Hu #define CVE_CLK_CTRL 0x180 41*6f809ca8SJian Hu #define PP_CLK_CTRL 0x184 42*6f809ca8SJian Hu #define GLB_CLK_CTRL 0x188 43*6f809ca8SJian Hu #define USB_CLK_CTRL0 0x18c 44*6f809ca8SJian Hu #define USB_CLK_CTRL1 0x190 45*6f809ca8SJian Hu #define CAN_CLK_CTRL 0x194 46*6f809ca8SJian Hu #define CAN_CLK_CTRL1 0x198 47*6f809ca8SJian Hu #define I3C_CLK_CTRL 0x19c 48*6f809ca8SJian Hu #define TS_CLK_CTRL 0x1a0 49*6f809ca8SJian Hu #define ETH_CLK_CTRL 0x1a4 50*6f809ca8SJian Hu #define GEN_CLK_CTRL 0x1a8 51*6f809ca8SJian Hu #define CLK12_24_CTRL 0x1ac 52*6f809ca8SJian Hu #define MALI_CLK_CTRL 0x200 53*6f809ca8SJian Hu #define MALI_STACK_CLK_CTRL 0x204 54*6f809ca8SJian Hu #define DSPA_CLK_CTRL 0x220 55*6f809ca8SJian Hu #define HEVCF_CLK_CTRL 0x240 56*6f809ca8SJian Hu #define HCODEC_CLK_CTRL 0x244 57*6f809ca8SJian Hu #define VPU_CLK_CTRL 0x260 58*6f809ca8SJian Hu #define VAPB_CLK_CTRL 0x268 59*6f809ca8SJian Hu #define VPU_CLKB_CTRL 0x280 60*6f809ca8SJian Hu #define HDMI_CLK_CTRL 0x284 61*6f809ca8SJian Hu #define HTX_CLK_CTRL 0x28c 62*6f809ca8SJian Hu #define HTX_CLK_CTRL1 0x290 63*6f809ca8SJian Hu #define HRX_CLK_CTRL 0x294 64*6f809ca8SJian Hu #define HRX_CLK_CTRL1 0x298 65*6f809ca8SJian Hu #define HRX_CLK_CTRL2 0x29c 66*6f809ca8SJian Hu #define HRX_CLK_CTRL3 0x2a0 67*6f809ca8SJian Hu #define VID_LOCK_CLK_CTRL 0x2a4 68*6f809ca8SJian Hu #define VDIN_MEAS_CLK_CTRL 0x2a8 69*6f809ca8SJian Hu #define VID_PLL_CLK_DIV 0x2b0 70*6f809ca8SJian Hu #define VID_CLK_CTRL 0x2c0 71*6f809ca8SJian Hu #define VID_CLK_CTRL2 0x2c4 72*6f809ca8SJian Hu #define VID_CLK_DIV 0x2c8 73*6f809ca8SJian Hu #define VIID_CLK_DIV 0x2cc 74*6f809ca8SJian Hu #define VIID_CLK_CTRL 0x2d0 75*6f809ca8SJian Hu #define MIPI_CSI_PHY_CLK_CTRL 0x2e0 76*6f809ca8SJian Hu #define DSI_MEAS_CLK_CTRL 0x2f4 77*6f809ca8SJian Hu 78*6f809ca8SJian Hu #define A9_COMP_SEL(_name, _reg, _shift, _mask, _pdata, _table) \ 79*6f809ca8SJian Hu MESON_COMP_SEL(a9_, _name, _reg, _shift, _mask, _pdata, _table, 0, 0) 80*6f809ca8SJian Hu 81*6f809ca8SJian Hu #define A9_COMP_DIV(_name, _reg, _shift, _width) \ 82*6f809ca8SJian Hu MESON_COMP_DIV(a9_, _name, _reg, _shift, _width, 0, CLK_SET_RATE_PARENT) 83*6f809ca8SJian Hu 84*6f809ca8SJian Hu #define A9_COMP_GATE(_name, _reg, _bit, _iflags) \ 85*6f809ca8SJian Hu MESON_COMP_GATE(a9_, _name, _reg, _bit, CLK_SET_RATE_PARENT | (_iflags)) 86*6f809ca8SJian Hu 87*6f809ca8SJian Hu static const struct clk_parent_data a9_sys_pclk_parents = { .fw_name = "sys" }; 88*6f809ca8SJian Hu 89*6f809ca8SJian Hu #define A9_SYS_PCLK(_name, _reg, _bit) \ 90*6f809ca8SJian Hu MESON_PCLK(a9_##_name, _reg, _bit, &a9_sys_pclk_parents, 0) 91*6f809ca8SJian Hu 92*6f809ca8SJian Hu static A9_SYS_PCLK(sys_am_axi, SYS_CLK_EN0_REG0, 0); 93*6f809ca8SJian Hu static A9_SYS_PCLK(sys_dos, SYS_CLK_EN0_REG0, 1); 94*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mipi_dsi0, SYS_CLK_EN0_REG0, 3); 95*6f809ca8SJian Hu static A9_SYS_PCLK(sys_eth_phy, SYS_CLK_EN0_REG0, 4); 96*6f809ca8SJian Hu static A9_SYS_PCLK(sys_amfc, SYS_CLK_EN0_REG0, 5); 97*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mali, SYS_CLK_EN0_REG0, 6); 98*6f809ca8SJian Hu static A9_SYS_PCLK(sys_nna, SYS_CLK_EN0_REG0, 7); 99*6f809ca8SJian Hu static A9_SYS_PCLK(sys_eth_axi, SYS_CLK_EN0_REG0, 8); 100*6f809ca8SJian Hu static A9_SYS_PCLK(sys_dp_apb, SYS_CLK_EN0_REG0, 9); 101*6f809ca8SJian Hu static A9_SYS_PCLK(sys_edptx_apb, SYS_CLK_EN0_REG0, 10); 102*6f809ca8SJian Hu static A9_SYS_PCLK(sys_u3hsg, SYS_CLK_EN0_REG0, 11); 103*6f809ca8SJian Hu static A9_SYS_PCLK(sys_aucpu, SYS_CLK_EN0_REG0, 14); 104*6f809ca8SJian Hu static A9_SYS_PCLK(sys_glb, SYS_CLK_EN0_REG0, 15); 105*6f809ca8SJian Hu static A9_SYS_PCLK(sys_combo_dphy_apb, SYS_CLK_EN0_REG0, 17); 106*6f809ca8SJian Hu static A9_SYS_PCLK(sys_hdmirx_apb, SYS_CLK_EN0_REG0, 18); 107*6f809ca8SJian Hu static A9_SYS_PCLK(sys_hdmirx_pclk, SYS_CLK_EN0_REG0, 19); 108*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mipi_dsi0_phy, SYS_CLK_EN0_REG0, 20); 109*6f809ca8SJian Hu static A9_SYS_PCLK(sys_can0, SYS_CLK_EN0_REG0, 21); 110*6f809ca8SJian Hu static A9_SYS_PCLK(sys_can1, SYS_CLK_EN0_REG0, 22); 111*6f809ca8SJian Hu static A9_SYS_PCLK(sys_sd_emmc_a, SYS_CLK_EN0_REG0, 24); 112*6f809ca8SJian Hu static A9_SYS_PCLK(sys_sd_emmc_b, SYS_CLK_EN0_REG0, 25); 113*6f809ca8SJian Hu static A9_SYS_PCLK(sys_sd_emmc_c, SYS_CLK_EN0_REG0, 26); 114*6f809ca8SJian Hu static A9_SYS_PCLK(sys_sc, SYS_CLK_EN0_REG0, 27); 115*6f809ca8SJian Hu static A9_SYS_PCLK(sys_acodec, SYS_CLK_EN0_REG0, 28); 116*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mipi_isp, SYS_CLK_EN0_REG0, 29); 117*6f809ca8SJian Hu static A9_SYS_PCLK(sys_msr, SYS_CLK_EN0_REG0, 30); 118*6f809ca8SJian Hu static A9_SYS_PCLK(sys_audio, SYS_CLK_EN0_REG1, 0); 119*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mipi_dsi1, SYS_CLK_EN0_REG1, 1); 120*6f809ca8SJian Hu static A9_SYS_PCLK(sys_mipi_dsi1_phy, SYS_CLK_EN0_REG1, 2); 121*6f809ca8SJian Hu static A9_SYS_PCLK(sys_eth, SYS_CLK_EN0_REG1, 3); 122*6f809ca8SJian Hu static A9_SYS_PCLK(sys_eth_1g_mac, SYS_CLK_EN0_REG1, 4); 123*6f809ca8SJian Hu static A9_SYS_PCLK(sys_uart_a, SYS_CLK_EN0_REG1, 5); 124*6f809ca8SJian Hu static A9_SYS_PCLK(sys_uart_f, SYS_CLK_EN0_REG1, 10); 125*6f809ca8SJian Hu static A9_SYS_PCLK(sys_ts_a55, SYS_CLK_EN0_REG1, 11); 126*6f809ca8SJian Hu static A9_SYS_PCLK(sys_eth_1g_axi, SYS_CLK_EN0_REG1, 12); 127*6f809ca8SJian Hu static A9_SYS_PCLK(sys_ts_dos, SYS_CLK_EN0_REG1, 13); 128*6f809ca8SJian Hu static A9_SYS_PCLK(sys_u3drd_b, SYS_CLK_EN0_REG1, 14); 129*6f809ca8SJian Hu static A9_SYS_PCLK(sys_ts_core, SYS_CLK_EN0_REG1, 15); 130*6f809ca8SJian Hu static A9_SYS_PCLK(sys_ts_pll, SYS_CLK_EN0_REG1, 16); 131*6f809ca8SJian Hu static A9_SYS_PCLK(sys_csi_dig_clkin, SYS_CLK_EN0_REG1, 18); 132*6f809ca8SJian Hu static A9_SYS_PCLK(sys_cve, SYS_CLK_EN0_REG1, 19); 133*6f809ca8SJian Hu static A9_SYS_PCLK(sys_ge2d, SYS_CLK_EN0_REG1, 20); 134*6f809ca8SJian Hu static A9_SYS_PCLK(sys_spisg, SYS_CLK_EN0_REG1, 21); 135*6f809ca8SJian Hu static A9_SYS_PCLK(sys_u2h, SYS_CLK_EN0_REG1, 23); 136*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pcie_mac_a, SYS_CLK_EN0_REG1, 24); 137*6f809ca8SJian Hu static A9_SYS_PCLK(sys_u3drd_a, SYS_CLK_EN0_REG1, 25); 138*6f809ca8SJian Hu static A9_SYS_PCLK(sys_u2drd, SYS_CLK_EN0_REG1, 26); 139*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pcie_phy, SYS_CLK_EN0_REG1, 27); 140*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pcie_mac_b, SYS_CLK_EN0_REG1, 28); 141*6f809ca8SJian Hu static A9_SYS_PCLK(sys_periph, SYS_CLK_EN0_REG1, 29); 142*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pio, SYS_CLK_EN0_REG2, 0); 143*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i3c, SYS_CLK_EN0_REG2, 1); 144*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i2c_m_e, SYS_CLK_EN0_REG2, 2); 145*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i2c_m_f, SYS_CLK_EN0_REG2, 3); 146*6f809ca8SJian Hu static A9_SYS_PCLK(sys_hdmitx_apb, SYS_CLK_EN0_REG2, 4); 147*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i2c_m_i, SYS_CLK_EN0_REG2, 5); 148*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i2c_m_g, SYS_CLK_EN0_REG2, 6); 149*6f809ca8SJian Hu static A9_SYS_PCLK(sys_i2c_m_h, SYS_CLK_EN0_REG2, 7); 150*6f809ca8SJian Hu static A9_SYS_PCLK(sys_hdmi20_aes, SYS_CLK_EN0_REG2, 9); 151*6f809ca8SJian Hu static A9_SYS_PCLK(sys_csi2_host, SYS_CLK_EN0_REG2, 16); 152*6f809ca8SJian Hu static A9_SYS_PCLK(sys_csi2_adapt, SYS_CLK_EN0_REG2, 17); 153*6f809ca8SJian Hu static A9_SYS_PCLK(sys_dspa, SYS_CLK_EN0_REG2, 21); 154*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pp_dma, SYS_CLK_EN0_REG2, 22); 155*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pp_wrapper, SYS_CLK_EN0_REG2, 23); 156*6f809ca8SJian Hu static A9_SYS_PCLK(sys_vpu_intr, SYS_CLK_EN0_REG2, 25); 157*6f809ca8SJian Hu static A9_SYS_PCLK(sys_csi2_phy, SYS_CLK_EN0_REG2, 27); 158*6f809ca8SJian Hu static A9_SYS_PCLK(sys_saradc, SYS_CLK_EN0_REG2, 28); 159*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_j, SYS_CLK_EN0_REG2, 30); 160*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_i, SYS_CLK_EN0_REG2, 31); 161*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_h, SYS_CLK_EN0_REG3, 0); 162*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_n, SYS_CLK_EN0_REG3, 8); 163*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_m, SYS_CLK_EN0_REG3, 9); 164*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_l, SYS_CLK_EN0_REG3, 10); 165*6f809ca8SJian Hu static A9_SYS_PCLK(sys_pwm_k, SYS_CLK_EN0_REG3, 11); 166*6f809ca8SJian Hu 167*6f809ca8SJian Hu /* Channel 5 is unconnected. */ 168*6f809ca8SJian Hu static u32 a9_sd_emmc_parents_val_table[] = { 0, 1, 2, 3, 4, 6, 7 }; 169*6f809ca8SJian Hu static const struct clk_parent_data a9_sd_emmc_parents[] = { 170*6f809ca8SJian Hu { .fw_name = "xtal", }, 171*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 172*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 173*6f809ca8SJian Hu { .fw_name = "hifi0", }, 174*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 175*6f809ca8SJian Hu { .fw_name = "gp1", }, 176*6f809ca8SJian Hu { .fw_name = "gp0", } 177*6f809ca8SJian Hu }; 178*6f809ca8SJian Hu 179*6f809ca8SJian Hu static A9_COMP_SEL(sd_emmc_a, SD_EMMC_CLK_CTRL0, 9, 0x7, a9_sd_emmc_parents, 180*6f809ca8SJian Hu a9_sd_emmc_parents_val_table); 181*6f809ca8SJian Hu static A9_COMP_DIV(sd_emmc_a, SD_EMMC_CLK_CTRL0, 0, 7); 182*6f809ca8SJian Hu static A9_COMP_GATE(sd_emmc_a, SD_EMMC_CLK_CTRL0, 8, 0); 183*6f809ca8SJian Hu 184*6f809ca8SJian Hu static A9_COMP_SEL(sd_emmc_b, SD_EMMC_CLK_CTRL0, 25, 0x7, a9_sd_emmc_parents, 185*6f809ca8SJian Hu a9_sd_emmc_parents_val_table); 186*6f809ca8SJian Hu static A9_COMP_DIV(sd_emmc_b, SD_EMMC_CLK_CTRL0, 16, 7); 187*6f809ca8SJian Hu static A9_COMP_GATE(sd_emmc_b, SD_EMMC_CLK_CTRL0, 24, 0); 188*6f809ca8SJian Hu 189*6f809ca8SJian Hu static A9_COMP_SEL(sd_emmc_c, SD_EMMC_CLK_CTRL1, 9, 0x7, a9_sd_emmc_parents, 190*6f809ca8SJian Hu a9_sd_emmc_parents_val_table); 191*6f809ca8SJian Hu static A9_COMP_DIV(sd_emmc_c, SD_EMMC_CLK_CTRL1, 0, 7); 192*6f809ca8SJian Hu static A9_COMP_GATE(sd_emmc_c, SD_EMMC_CLK_CTRL1, 8, 0); 193*6f809ca8SJian Hu 194*6f809ca8SJian Hu static const struct clk_parent_data a9_pwm_parents[] = { 195*6f809ca8SJian Hu { .fw_name = "xtal", }, 196*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 197*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 198*6f809ca8SJian Hu { .fw_name = "fdiv3", } 199*6f809ca8SJian Hu }; 200*6f809ca8SJian Hu 201*6f809ca8SJian Hu static A9_COMP_SEL(pwm_h, PWM_CLK_H_CTRL, 9, 0x7, a9_pwm_parents, NULL); 202*6f809ca8SJian Hu static A9_COMP_DIV(pwm_h, PWM_CLK_H_CTRL, 0, 8); 203*6f809ca8SJian Hu static A9_COMP_GATE(pwm_h, PWM_CLK_H_CTRL, 8, 0); 204*6f809ca8SJian Hu 205*6f809ca8SJian Hu static A9_COMP_SEL(pwm_i, PWM_CLK_I_CTRL, 9, 0x7, a9_pwm_parents, NULL); 206*6f809ca8SJian Hu static A9_COMP_DIV(pwm_i, PWM_CLK_I_CTRL, 0, 8); 207*6f809ca8SJian Hu static A9_COMP_GATE(pwm_i, PWM_CLK_I_CTRL, 8, 0); 208*6f809ca8SJian Hu 209*6f809ca8SJian Hu static A9_COMP_SEL(pwm_j, PWM_CLK_J_CTRL, 9, 0x7, a9_pwm_parents, NULL); 210*6f809ca8SJian Hu static A9_COMP_DIV(pwm_j, PWM_CLK_J_CTRL, 0, 8); 211*6f809ca8SJian Hu static A9_COMP_GATE(pwm_j, PWM_CLK_J_CTRL, 8, 0); 212*6f809ca8SJian Hu 213*6f809ca8SJian Hu static A9_COMP_SEL(pwm_k, PWM_CLK_K_CTRL, 9, 0x7, a9_pwm_parents, NULL); 214*6f809ca8SJian Hu static A9_COMP_DIV(pwm_k, PWM_CLK_K_CTRL, 0, 8); 215*6f809ca8SJian Hu static A9_COMP_GATE(pwm_k, PWM_CLK_K_CTRL, 8, 0); 216*6f809ca8SJian Hu 217*6f809ca8SJian Hu static A9_COMP_SEL(pwm_l, PWM_CLK_L_CTRL, 9, 0x7, a9_pwm_parents, NULL); 218*6f809ca8SJian Hu static A9_COMP_DIV(pwm_l, PWM_CLK_L_CTRL, 0, 8); 219*6f809ca8SJian Hu static A9_COMP_GATE(pwm_l, PWM_CLK_L_CTRL, 8, 0); 220*6f809ca8SJian Hu 221*6f809ca8SJian Hu static A9_COMP_SEL(pwm_m, PWM_CLK_M_CTRL, 9, 0x7, a9_pwm_parents, NULL); 222*6f809ca8SJian Hu static A9_COMP_DIV(pwm_m, PWM_CLK_M_CTRL, 0, 8); 223*6f809ca8SJian Hu static A9_COMP_GATE(pwm_m, PWM_CLK_M_CTRL, 8, 0); 224*6f809ca8SJian Hu 225*6f809ca8SJian Hu static A9_COMP_SEL(pwm_n, PWM_CLK_N_CTRL, 9, 0x7, a9_pwm_parents, NULL); 226*6f809ca8SJian Hu static A9_COMP_DIV(pwm_n, PWM_CLK_N_CTRL, 0, 8); 227*6f809ca8SJian Hu static A9_COMP_GATE(pwm_n, PWM_CLK_N_CTRL, 8, 0); 228*6f809ca8SJian Hu 229*6f809ca8SJian Hu static const struct clk_parent_data a9_spisg_parents[] = { 230*6f809ca8SJian Hu { .fw_name = "xtal", }, 231*6f809ca8SJian Hu { .fw_name = "sys", }, 232*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 233*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 234*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 235*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 236*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 237*6f809ca8SJian Hu { .fw_name = "gp0", } 238*6f809ca8SJian Hu }; 239*6f809ca8SJian Hu 240*6f809ca8SJian Hu static A9_COMP_SEL(spisg0, SPISG_CLK_CTRL, 9, 0x7, a9_spisg_parents, NULL); 241*6f809ca8SJian Hu static A9_COMP_DIV(spisg0, SPISG_CLK_CTRL, 0, 6); 242*6f809ca8SJian Hu static A9_COMP_GATE(spisg0, SPISG_CLK_CTRL, 8, 0); 243*6f809ca8SJian Hu 244*6f809ca8SJian Hu static A9_COMP_SEL(spisg1, SPISG_CLK_CTRL, 25, 0x7, a9_spisg_parents, NULL); 245*6f809ca8SJian Hu static A9_COMP_DIV(spisg1, SPISG_CLK_CTRL, 16, 6); 246*6f809ca8SJian Hu static A9_COMP_GATE(spisg1, SPISG_CLK_CTRL, 24, 0); 247*6f809ca8SJian Hu 248*6f809ca8SJian Hu static A9_COMP_SEL(spisg2, SPISG_CLK_CTRL1, 9, 0x7, a9_spisg_parents, NULL); 249*6f809ca8SJian Hu static A9_COMP_DIV(spisg2, SPISG_CLK_CTRL1, 0, 6); 250*6f809ca8SJian Hu static A9_COMP_GATE(spisg2, SPISG_CLK_CTRL1, 8, 0); 251*6f809ca8SJian Hu 252*6f809ca8SJian Hu static const struct clk_parent_data a9_saradc_parents[] = { 253*6f809ca8SJian Hu { .fw_name = "xtal", }, 254*6f809ca8SJian Hu { .fw_name = "sys", } 255*6f809ca8SJian Hu }; 256*6f809ca8SJian Hu 257*6f809ca8SJian Hu static A9_COMP_SEL(saradc, SAR_CLK_CTRL, 9, 0x7, a9_saradc_parents, NULL); 258*6f809ca8SJian Hu static A9_COMP_DIV(saradc, SAR_CLK_CTRL, 0, 8); 259*6f809ca8SJian Hu static A9_COMP_GATE(saradc, SAR_CLK_CTRL, 8, 0); 260*6f809ca8SJian Hu 261*6f809ca8SJian Hu static const struct clk_parent_data a9_amfc_parents[] = { 262*6f809ca8SJian Hu { .fw_name = "xtal", }, 263*6f809ca8SJian Hu { .fw_name = "sys", }, 264*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 265*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 266*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 267*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 268*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 269*6f809ca8SJian Hu { .fw_name = "fdiv7", } 270*6f809ca8SJian Hu }; 271*6f809ca8SJian Hu 272*6f809ca8SJian Hu static A9_COMP_SEL(amfc, AMFC_CLK_CTRL, 9, 0x7, a9_amfc_parents, NULL); 273*6f809ca8SJian Hu static A9_COMP_DIV(amfc, AMFC_CLK_CTRL, 0, 6); 274*6f809ca8SJian Hu static A9_COMP_GATE(amfc, AMFC_CLK_CTRL, 8, 0); 275*6f809ca8SJian Hu 276*6f809ca8SJian Hu static const struct clk_parent_data a9_nna_parents[] = { 277*6f809ca8SJian Hu { .fw_name = "xtal", }, 278*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 279*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 280*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 281*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 282*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 283*6f809ca8SJian Hu { .fw_name = "gp2", }, 284*6f809ca8SJian Hu { .fw_name = "hifi0", } 285*6f809ca8SJian Hu }; 286*6f809ca8SJian Hu 287*6f809ca8SJian Hu static A9_COMP_SEL(nna, NNA_CLK_CTRL, 9, 0x7, a9_nna_parents, NULL); 288*6f809ca8SJian Hu static A9_COMP_DIV(nna, NNA_CLK_CTRL, 0, 7); 289*6f809ca8SJian Hu static A9_COMP_GATE(nna, NNA_CLK_CTRL, 8, 0); 290*6f809ca8SJian Hu 291*6f809ca8SJian Hu /* Channel 5 and 6 are unconnected. */ 292*6f809ca8SJian Hu static u32 a9_usb_250m_parents_val_table[] = { 0, 1, 2, 3, 4, 7 }; 293*6f809ca8SJian Hu static const struct clk_parent_data a9_usb_250m_parents[] = { 294*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 295*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 296*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 297*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 298*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 299*6f809ca8SJian Hu { .fw_name = "fdiv2p5", } 300*6f809ca8SJian Hu }; 301*6f809ca8SJian Hu 302*6f809ca8SJian Hu static A9_COMP_SEL(usb_250m, USB_CLK_CTRL, 9, 0x7, a9_usb_250m_parents, 303*6f809ca8SJian Hu a9_usb_250m_parents_val_table); 304*6f809ca8SJian Hu static A9_COMP_DIV(usb_250m, USB_CLK_CTRL, 0, 7); 305*6f809ca8SJian Hu static A9_COMP_GATE(usb_250m, USB_CLK_CTRL, 8, 0); 306*6f809ca8SJian Hu 307*6f809ca8SJian Hu static const struct clk_parent_data a9_usb_48m_pre_parents[] = { 308*6f809ca8SJian Hu { .fw_name = "gp0", }, 309*6f809ca8SJian Hu { .fw_name = "gp1", }, 310*6f809ca8SJian Hu { .fw_name = "gp2", }, 311*6f809ca8SJian Hu { .fw_name = "fdiv2", } 312*6f809ca8SJian Hu }; 313*6f809ca8SJian Hu 314*6f809ca8SJian Hu static A9_COMP_SEL(usb_48m_pre, USB_CLK_CTRL, 25, 0x3, a9_usb_48m_pre_parents, NULL); 315*6f809ca8SJian Hu static A9_COMP_DIV(usb_48m_pre, USB_CLK_CTRL, 16, 7); 316*6f809ca8SJian Hu static A9_COMP_GATE(usb_48m_pre, USB_CLK_CTRL, 24, 0); 317*6f809ca8SJian Hu 318*6f809ca8SJian Hu static const struct clk_parent_data a9_pcie_tl_parents[] = { 319*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 320*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 321*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 322*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 323*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 324*6f809ca8SJian Hu { .fw_name = "gp0", }, 325*6f809ca8SJian Hu { .fw_name = "sys", }, 326*6f809ca8SJian Hu { .fw_name = "xtal", } 327*6f809ca8SJian Hu }; 328*6f809ca8SJian Hu 329*6f809ca8SJian Hu static A9_COMP_SEL(pcie0_tl, PCIE_TL_CLK_CTRL, 9, 0x7, a9_pcie_tl_parents, NULL); 330*6f809ca8SJian Hu static A9_COMP_DIV(pcie0_tl, PCIE_TL_CLK_CTRL, 0, 7); 331*6f809ca8SJian Hu static A9_COMP_GATE(pcie0_tl, PCIE_TL_CLK_CTRL, 8, 0); 332*6f809ca8SJian Hu 333*6f809ca8SJian Hu static A9_COMP_SEL(pcie1_tl, PCIE_TL_CLK_CTRL, 25, 0x7, a9_pcie_tl_parents, NULL); 334*6f809ca8SJian Hu static A9_COMP_DIV(pcie1_tl, PCIE_TL_CLK_CTRL, 16, 7); 335*6f809ca8SJian Hu static A9_COMP_GATE(pcie1_tl, PCIE_TL_CLK_CTRL, 24, 0); 336*6f809ca8SJian Hu 337*6f809ca8SJian Hu static const struct clk_parent_data a9_cmpr_parents[] = { 338*6f809ca8SJian Hu { .fw_name = "xtal", }, 339*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 340*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 341*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 342*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 343*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 344*6f809ca8SJian Hu { .fw_name = "hifi0", }, 345*6f809ca8SJian Hu { .fw_name = "gp1", } 346*6f809ca8SJian Hu }; 347*6f809ca8SJian Hu 348*6f809ca8SJian Hu static A9_COMP_SEL(cmpr, CMPR_CLK_CTRL, 25, 0x7, a9_cmpr_parents, NULL); 349*6f809ca8SJian Hu static A9_COMP_DIV(cmpr, CMPR_CLK_CTRL, 16, 7); 350*6f809ca8SJian Hu static A9_COMP_GATE(cmpr, CMPR_CLK_CTRL, 24, 0); 351*6f809ca8SJian Hu 352*6f809ca8SJian Hu static const struct clk_parent_data a9_dewarpa_parents[] = { 353*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 354*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 355*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 356*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 357*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 358*6f809ca8SJian Hu { .fw_name = "gp0", }, 359*6f809ca8SJian Hu { .fw_name = "hifi0", }, 360*6f809ca8SJian Hu { .fw_name = "gp1", } 361*6f809ca8SJian Hu }; 362*6f809ca8SJian Hu 363*6f809ca8SJian Hu static A9_COMP_SEL(dewarpa, DEWARP_CLK_CTRL, 9, 0x7, a9_dewarpa_parents, NULL); 364*6f809ca8SJian Hu static A9_COMP_DIV(dewarpa, DEWARP_CLK_CTRL, 0, 7); 365*6f809ca8SJian Hu static A9_COMP_GATE(dewarpa, DEWARP_CLK_CTRL, 8, 0); 366*6f809ca8SJian Hu 367*6f809ca8SJian Hu static const struct clk_parent_data a9_sc_parents[] = { 368*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 369*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 370*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 371*6f809ca8SJian Hu { .fw_name = "xtal", } 372*6f809ca8SJian Hu }; 373*6f809ca8SJian Hu 374*6f809ca8SJian Hu static A9_COMP_SEL(sc_pre, SC_CLK_CTRL, 9, 0x7, a9_sc_parents, NULL); 375*6f809ca8SJian Hu static A9_COMP_DIV(sc_pre, SC_CLK_CTRL, 0, 8); 376*6f809ca8SJian Hu static A9_COMP_GATE(sc_pre, SC_CLK_CTRL, 8, 0); 377*6f809ca8SJian Hu 378*6f809ca8SJian Hu static struct clk_regmap a9_sc = { 379*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data) { 380*6f809ca8SJian Hu .offset = SC_CLK_CTRL, 381*6f809ca8SJian Hu .shift = 16, 382*6f809ca8SJian Hu .width = 4, 383*6f809ca8SJian Hu }, 384*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 385*6f809ca8SJian Hu .name = "sc", 386*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 387*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 388*6f809ca8SJian Hu &a9_sc_pre.hw 389*6f809ca8SJian Hu }, 390*6f809ca8SJian Hu .num_parents = 1, 391*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 392*6f809ca8SJian Hu }, 393*6f809ca8SJian Hu }; 394*6f809ca8SJian Hu 395*6f809ca8SJian Hu static const struct clk_parent_data a9_dptx_apb2_parents[] = { 396*6f809ca8SJian Hu { .fw_name = "xtal", }, 397*6f809ca8SJian Hu { .fw_name = "sys", }, 398*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 399*6f809ca8SJian Hu { .fw_name = "fdiv5", } 400*6f809ca8SJian Hu }; 401*6f809ca8SJian Hu 402*6f809ca8SJian Hu static A9_COMP_SEL(dptx_apb2, DPTX_CLK_CTRL, 9, 0x7, a9_dptx_apb2_parents, NULL); 403*6f809ca8SJian Hu static A9_COMP_DIV(dptx_apb2, DPTX_CLK_CTRL, 0, 7); 404*6f809ca8SJian Hu static A9_COMP_GATE(dptx_apb2, DPTX_CLK_CTRL, 8, 0); 405*6f809ca8SJian Hu 406*6f809ca8SJian Hu static const struct clk_parent_data a9_dptx_aud_parents[] = { 407*6f809ca8SJian Hu { .fw_name = "xtal", }, 408*6f809ca8SJian Hu { .fw_name = "sys", }, 409*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 410*6f809ca8SJian Hu { .fw_name = "fdiv4", } 411*6f809ca8SJian Hu }; 412*6f809ca8SJian Hu 413*6f809ca8SJian Hu static A9_COMP_SEL(dptx_aud, DPTX_CLK_CTRL, 25, 0x7, a9_dptx_aud_parents, NULL); 414*6f809ca8SJian Hu static A9_COMP_DIV(dptx_aud, DPTX_CLK_CTRL, 16, 7); 415*6f809ca8SJian Hu static A9_COMP_GATE(dptx_aud, DPTX_CLK_CTRL, 24, 0); 416*6f809ca8SJian Hu 417*6f809ca8SJian Hu static const struct clk_parent_data a9_isp_parents[] = { 418*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 419*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 420*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 421*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 422*6f809ca8SJian Hu { .fw_name = "gp0", }, 423*6f809ca8SJian Hu { .fw_name = "hifi0", }, 424*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 425*6f809ca8SJian Hu { .fw_name = "xtal", } 426*6f809ca8SJian Hu }; 427*6f809ca8SJian Hu 428*6f809ca8SJian Hu static A9_COMP_SEL(isp, ISP_CLK_CTRL, 9, 0x7, a9_isp_parents, NULL); 429*6f809ca8SJian Hu static A9_COMP_DIV(isp, ISP_CLK_CTRL, 0, 7); 430*6f809ca8SJian Hu static A9_COMP_GATE(isp, ISP_CLK_CTRL, 8, 0); 431*6f809ca8SJian Hu 432*6f809ca8SJian Hu static const struct clk_parent_data a9_cve_vge_parents[] = { 433*6f809ca8SJian Hu { .fw_name = "xtal", }, 434*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 435*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 436*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 437*6f809ca8SJian Hu { .fw_name = "hifi0", }, 438*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 439*6f809ca8SJian Hu { .fw_name = "gp0", }, 440*6f809ca8SJian Hu { .fw_name = "rtc", } 441*6f809ca8SJian Hu }; 442*6f809ca8SJian Hu 443*6f809ca8SJian Hu static A9_COMP_SEL(cve, CVE_CLK_CTRL, 9, 0x7, a9_cve_vge_parents, NULL); 444*6f809ca8SJian Hu static A9_COMP_DIV(cve, CVE_CLK_CTRL, 0, 7); 445*6f809ca8SJian Hu static A9_COMP_GATE(cve, CVE_CLK_CTRL, 8, 0); 446*6f809ca8SJian Hu 447*6f809ca8SJian Hu static A9_COMP_SEL(vge, CVE_CLK_CTRL, 25, 0x7, a9_cve_vge_parents, NULL); 448*6f809ca8SJian Hu static A9_COMP_DIV(vge, CVE_CLK_CTRL, 16, 7); 449*6f809ca8SJian Hu static A9_COMP_GATE(vge, CVE_CLK_CTRL, 24, 0); 450*6f809ca8SJian Hu 451*6f809ca8SJian Hu static const struct clk_parent_data a9_pp_parents[] = { 452*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 453*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 454*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 455*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 456*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 457*6f809ca8SJian Hu { .fw_name = "gp0", }, 458*6f809ca8SJian Hu { .fw_name = "sys", }, 459*6f809ca8SJian Hu { .fw_name = "xtal", } 460*6f809ca8SJian Hu }; 461*6f809ca8SJian Hu 462*6f809ca8SJian Hu static A9_COMP_SEL(pp, PP_CLK_CTRL, 9, 0x7, a9_pp_parents, NULL); 463*6f809ca8SJian Hu static A9_COMP_DIV(pp, PP_CLK_CTRL, 0, 6); 464*6f809ca8SJian Hu static A9_COMP_GATE(pp, PP_CLK_CTRL, 8, 0); 465*6f809ca8SJian Hu 466*6f809ca8SJian Hu static const struct clk_parent_data a9_dspa_parents[] = { 467*6f809ca8SJian Hu { .fw_name = "xtal", }, 468*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 469*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 470*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 471*6f809ca8SJian Hu { .fw_name = "gp2", }, 472*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 473*6f809ca8SJian Hu { .fw_name = "hifi0", }, 474*6f809ca8SJian Hu { .fw_name = "rtc", } 475*6f809ca8SJian Hu }; 476*6f809ca8SJian Hu 477*6f809ca8SJian Hu static A9_COMP_SEL(dspa_0, DSPA_CLK_CTRL, 9, 0x7, a9_dspa_parents, NULL); 478*6f809ca8SJian Hu static A9_COMP_DIV(dspa_0, DSPA_CLK_CTRL, 0, 7); 479*6f809ca8SJian Hu static A9_COMP_GATE(dspa_0, DSPA_CLK_CTRL, 8, CLK_SET_RATE_GATE); 480*6f809ca8SJian Hu 481*6f809ca8SJian Hu static A9_COMP_SEL(dspa_1, DSPA_CLK_CTRL, 25, 0x7, a9_dspa_parents, NULL); 482*6f809ca8SJian Hu static A9_COMP_DIV(dspa_1, DSPA_CLK_CTRL, 16, 7); 483*6f809ca8SJian Hu static A9_COMP_GATE(dspa_1, DSPA_CLK_CTRL, 24, CLK_SET_RATE_GATE); 484*6f809ca8SJian Hu 485*6f809ca8SJian Hu static struct clk_regmap a9_dspa = { 486*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 487*6f809ca8SJian Hu .offset = DSPA_CLK_CTRL, 488*6f809ca8SJian Hu .mask = 0x1, 489*6f809ca8SJian Hu .shift = 31, 490*6f809ca8SJian Hu }, 491*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 492*6f809ca8SJian Hu .name = "dspa", 493*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 494*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 495*6f809ca8SJian Hu &a9_dspa_0.hw, 496*6f809ca8SJian Hu &a9_dspa_1.hw 497*6f809ca8SJian Hu }, 498*6f809ca8SJian Hu .num_parents = 2, 499*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 500*6f809ca8SJian Hu }, 501*6f809ca8SJian Hu }; 502*6f809ca8SJian Hu 503*6f809ca8SJian Hu /* Channel 6 is unconnected. */ 504*6f809ca8SJian Hu static u32 a9_glb_parents_val_table[] = { 0, 1, 2, 3, 4, 5, 7 }; 505*6f809ca8SJian Hu static const struct clk_parent_data a9_glb_parents[] = { 506*6f809ca8SJian Hu { .fw_name = "xtal", }, 507*6f809ca8SJian Hu { .hw = &a9_dspa.hw }, 508*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 509*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 510*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 511*6f809ca8SJian Hu { .hw = &a9_isp.hw }, 512*6f809ca8SJian Hu { .fw_name = "rtc", } 513*6f809ca8SJian Hu }; 514*6f809ca8SJian Hu 515*6f809ca8SJian Hu static A9_COMP_SEL(glb, GLB_CLK_CTRL, 9, 0x7, a9_glb_parents, a9_glb_parents_val_table); 516*6f809ca8SJian Hu static A9_COMP_DIV(glb, GLB_CLK_CTRL, 0, 7); 517*6f809ca8SJian Hu static A9_COMP_GATE(glb, GLB_CLK_CTRL, 8, 0); 518*6f809ca8SJian Hu 519*6f809ca8SJian Hu static struct clk_regmap a9_usb_48m_dualdiv_in = { 520*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 521*6f809ca8SJian Hu .offset = USB_CLK_CTRL, 522*6f809ca8SJian Hu .bit_idx = 31, 523*6f809ca8SJian Hu }, 524*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 525*6f809ca8SJian Hu .name = "usb_48m_dualdiv_in", 526*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 527*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 528*6f809ca8SJian Hu &a9_usb_48m_pre.hw 529*6f809ca8SJian Hu }, 530*6f809ca8SJian Hu .num_parents = 1, 531*6f809ca8SJian Hu }, 532*6f809ca8SJian Hu }; 533*6f809ca8SJian Hu 534*6f809ca8SJian Hu static const struct meson_clk_dualdiv_param a9_usb_48m_dualdiv_div_table[] = { 535*6f809ca8SJian Hu { 733, 732, 8, 11, 1 }, 536*6f809ca8SJian Hu { /* sentinel */ } 537*6f809ca8SJian Hu }; 538*6f809ca8SJian Hu 539*6f809ca8SJian Hu static struct clk_regmap a9_usb_48m_dualdiv_div = { 540*6f809ca8SJian Hu .data = &(struct meson_clk_dualdiv_data) { 541*6f809ca8SJian Hu .n1 = { 542*6f809ca8SJian Hu .reg_off = USB_CLK_CTRL0, 543*6f809ca8SJian Hu .shift = 0, 544*6f809ca8SJian Hu .width = 12, 545*6f809ca8SJian Hu }, 546*6f809ca8SJian Hu .n2 = { 547*6f809ca8SJian Hu .reg_off = USB_CLK_CTRL0, 548*6f809ca8SJian Hu .shift = 12, 549*6f809ca8SJian Hu .width = 12, 550*6f809ca8SJian Hu }, 551*6f809ca8SJian Hu .m1 = { 552*6f809ca8SJian Hu .reg_off = USB_CLK_CTRL1, 553*6f809ca8SJian Hu .shift = 0, 554*6f809ca8SJian Hu .width = 12, 555*6f809ca8SJian Hu }, 556*6f809ca8SJian Hu .m2 = { 557*6f809ca8SJian Hu .reg_off = USB_CLK_CTRL1, 558*6f809ca8SJian Hu .shift = 12, 559*6f809ca8SJian Hu .width = 12, 560*6f809ca8SJian Hu }, 561*6f809ca8SJian Hu .dual = { 562*6f809ca8SJian Hu .reg_off = USB_CLK_CTRL0, 563*6f809ca8SJian Hu .shift = 28, 564*6f809ca8SJian Hu .width = 1, 565*6f809ca8SJian Hu }, 566*6f809ca8SJian Hu .table = a9_usb_48m_dualdiv_div_table, 567*6f809ca8SJian Hu }, 568*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 569*6f809ca8SJian Hu .name = "usb_48m_dualdiv_div", 570*6f809ca8SJian Hu .ops = &meson_clk_dualdiv_ops, 571*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 572*6f809ca8SJian Hu &a9_usb_48m_dualdiv_in.hw 573*6f809ca8SJian Hu }, 574*6f809ca8SJian Hu .num_parents = 1, 575*6f809ca8SJian Hu }, 576*6f809ca8SJian Hu }; 577*6f809ca8SJian Hu 578*6f809ca8SJian Hu static struct clk_regmap a9_usb_48m_dualdiv_sel = { 579*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data) { 580*6f809ca8SJian Hu .offset = USB_CLK_CTRL1, 581*6f809ca8SJian Hu .mask = 0x1, 582*6f809ca8SJian Hu .shift = 24, 583*6f809ca8SJian Hu }, 584*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 585*6f809ca8SJian Hu .name = "usb_48m_dualdiv_sel", 586*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 587*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 588*6f809ca8SJian Hu &a9_usb_48m_dualdiv_in.hw, 589*6f809ca8SJian Hu &a9_usb_48m_dualdiv_div.hw, 590*6f809ca8SJian Hu }, 591*6f809ca8SJian Hu .num_parents = 2, 592*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 593*6f809ca8SJian Hu }, 594*6f809ca8SJian Hu }; 595*6f809ca8SJian Hu 596*6f809ca8SJian Hu static struct clk_regmap a9_usb_48m_dualdiv = { 597*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 598*6f809ca8SJian Hu .offset = USB_CLK_CTRL0, 599*6f809ca8SJian Hu .bit_idx = 30, 600*6f809ca8SJian Hu }, 601*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 602*6f809ca8SJian Hu .name = "usb_48m_dualdiv", 603*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 604*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 605*6f809ca8SJian Hu &a9_usb_48m_dualdiv_sel.hw 606*6f809ca8SJian Hu }, 607*6f809ca8SJian Hu .num_parents = 1, 608*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 609*6f809ca8SJian Hu }, 610*6f809ca8SJian Hu }; 611*6f809ca8SJian Hu 612*6f809ca8SJian Hu static struct clk_regmap a9_usb_48m = { 613*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data) { 614*6f809ca8SJian Hu .offset = USB_CLK_CTRL1, 615*6f809ca8SJian Hu .mask = 0x3, 616*6f809ca8SJian Hu .shift = 30, 617*6f809ca8SJian Hu }, 618*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 619*6f809ca8SJian Hu .name = "usb_48m", 620*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 621*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 622*6f809ca8SJian Hu &a9_usb_48m_pre.hw, 623*6f809ca8SJian Hu &a9_usb_48m_dualdiv.hw, 624*6f809ca8SJian Hu }, 625*6f809ca8SJian Hu .num_parents = 2, 626*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 627*6f809ca8SJian Hu }, 628*6f809ca8SJian Hu }; 629*6f809ca8SJian Hu 630*6f809ca8SJian Hu /* Channel 2 is unconnected. */ 631*6f809ca8SJian Hu static u32 a9_can_pe_parents_val_table[] = { 0, 1, 3 }; 632*6f809ca8SJian Hu static const struct clk_parent_data a9_can_pe_parents[] = { 633*6f809ca8SJian Hu { .fw_name = "sys", }, 634*6f809ca8SJian Hu { .fw_name = "xtal", }, 635*6f809ca8SJian Hu { .fw_name = "fdiv5", } 636*6f809ca8SJian Hu }; 637*6f809ca8SJian Hu 638*6f809ca8SJian Hu static A9_COMP_SEL(can0_pe, CAN_CLK_CTRL, 9, 0x7, a9_can_pe_parents, a9_can_pe_parents_val_table); 639*6f809ca8SJian Hu static A9_COMP_DIV(can0_pe, CAN_CLK_CTRL, 0, 7); 640*6f809ca8SJian Hu static A9_COMP_GATE(can0_pe, CAN_CLK_CTRL, 8, 0); 641*6f809ca8SJian Hu 642*6f809ca8SJian Hu static A9_COMP_SEL(can1_pe, CAN_CLK_CTRL, 25, 0x7, a9_can_pe_parents, a9_can_pe_parents_val_table); 643*6f809ca8SJian Hu static A9_COMP_DIV(can1_pe, CAN_CLK_CTRL, 16, 7); 644*6f809ca8SJian Hu static A9_COMP_GATE(can1_pe, CAN_CLK_CTRL, 24, 0); 645*6f809ca8SJian Hu 646*6f809ca8SJian Hu static const struct clk_parent_data a9_can_filter_parents[] = { 647*6f809ca8SJian Hu { .fw_name = "sys", }, 648*6f809ca8SJian Hu { .fw_name = "xtal", }, 649*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 650*6f809ca8SJian Hu { .fw_name = "fdiv5", } 651*6f809ca8SJian Hu }; 652*6f809ca8SJian Hu 653*6f809ca8SJian Hu static A9_COMP_SEL(can0_filter, CAN_CLK_CTRL1, 9, 0x7, a9_can_filter_parents, NULL); 654*6f809ca8SJian Hu static A9_COMP_DIV(can0_filter, CAN_CLK_CTRL1, 0, 7); 655*6f809ca8SJian Hu static A9_COMP_GATE(can0_filter, CAN_CLK_CTRL1, 8, 0); 656*6f809ca8SJian Hu 657*6f809ca8SJian Hu static A9_COMP_SEL(can1_filter, CAN_CLK_CTRL1, 25, 0x7, a9_can_filter_parents, NULL); 658*6f809ca8SJian Hu static A9_COMP_DIV(can1_filter, CAN_CLK_CTRL1, 16, 7); 659*6f809ca8SJian Hu static A9_COMP_GATE(can1_filter, CAN_CLK_CTRL1, 24, 0); 660*6f809ca8SJian Hu 661*6f809ca8SJian Hu static const struct clk_parent_data a9_i3c_parents[] = { 662*6f809ca8SJian Hu { .fw_name = "sys", }, 663*6f809ca8SJian Hu { .fw_name = "xtal", }, 664*6f809ca8SJian Hu { .fw_name = "fdiv5", } 665*6f809ca8SJian Hu }; 666*6f809ca8SJian Hu 667*6f809ca8SJian Hu static A9_COMP_SEL(i3c, I3C_CLK_CTRL, 9, 0x7, a9_i3c_parents, NULL); 668*6f809ca8SJian Hu static A9_COMP_DIV(i3c, I3C_CLK_CTRL, 0, 8); 669*6f809ca8SJian Hu static A9_COMP_GATE(i3c, I3C_CLK_CTRL, 8, 0); 670*6f809ca8SJian Hu 671*6f809ca8SJian Hu static struct clk_regmap a9_ts_div = { 672*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data) { 673*6f809ca8SJian Hu .offset = TS_CLK_CTRL, 674*6f809ca8SJian Hu .shift = 0, 675*6f809ca8SJian Hu .width = 8, 676*6f809ca8SJian Hu }, 677*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 678*6f809ca8SJian Hu .name = "ts_div", 679*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 680*6f809ca8SJian Hu .parent_data = &(const struct clk_parent_data) { 681*6f809ca8SJian Hu .fw_name = "xtal", 682*6f809ca8SJian Hu }, 683*6f809ca8SJian Hu .num_parents = 1, 684*6f809ca8SJian Hu }, 685*6f809ca8SJian Hu }; 686*6f809ca8SJian Hu 687*6f809ca8SJian Hu static struct clk_regmap a9_ts = { 688*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 689*6f809ca8SJian Hu .offset = TS_CLK_CTRL, 690*6f809ca8SJian Hu .bit_idx = 8, 691*6f809ca8SJian Hu }, 692*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 693*6f809ca8SJian Hu .name = "ts", 694*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 695*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 696*6f809ca8SJian Hu &a9_ts_div.hw 697*6f809ca8SJian Hu }, 698*6f809ca8SJian Hu .num_parents = 1, 699*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 700*6f809ca8SJian Hu }, 701*6f809ca8SJian Hu }; 702*6f809ca8SJian Hu 703*6f809ca8SJian Hu static struct clk_fixed_factor a9_eth_125m_div = { 704*6f809ca8SJian Hu .mult = 1, 705*6f809ca8SJian Hu .div = 8, 706*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 707*6f809ca8SJian Hu .name = "eth_125m_div", 708*6f809ca8SJian Hu .ops = &clk_fixed_factor_ops, 709*6f809ca8SJian Hu .parent_data = &(const struct clk_parent_data) { 710*6f809ca8SJian Hu .fw_name = "fdiv2", 711*6f809ca8SJian Hu }, 712*6f809ca8SJian Hu .num_parents = 1, 713*6f809ca8SJian Hu }, 714*6f809ca8SJian Hu }; 715*6f809ca8SJian Hu 716*6f809ca8SJian Hu static struct clk_regmap a9_eth_125m = { 717*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 718*6f809ca8SJian Hu .offset = ETH_CLK_CTRL, 719*6f809ca8SJian Hu .bit_idx = 7, 720*6f809ca8SJian Hu }, 721*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 722*6f809ca8SJian Hu .name = "eth_125m", 723*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 724*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 725*6f809ca8SJian Hu &a9_eth_125m_div.hw 726*6f809ca8SJian Hu }, 727*6f809ca8SJian Hu .num_parents = 1, 728*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 729*6f809ca8SJian Hu }, 730*6f809ca8SJian Hu }; 731*6f809ca8SJian Hu 732*6f809ca8SJian Hu /* 733*6f809ca8SJian Hu * Channel 1, 2, 3, 4, 5 and 6 are unconnected, 734*6f809ca8SJian Hu * Channel 7(ext_rmii) connects external PAD. Do not automatically reparent. 735*6f809ca8SJian Hu */ 736*6f809ca8SJian Hu static u32 a9_eth_rmii_parents_val_table[] = { 0, 7 }; 737*6f809ca8SJian Hu static const struct clk_parent_data a9_eth_rmii_parents[] = { 738*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 739*6f809ca8SJian Hu { .fw_name = "ext_rmii", } 740*6f809ca8SJian Hu }; 741*6f809ca8SJian Hu 742*6f809ca8SJian Hu static struct clk_regmap a9_eth_rmii_sel = { 743*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data) { 744*6f809ca8SJian Hu .offset = ETH_CLK_CTRL, 745*6f809ca8SJian Hu .mask = 0x7, 746*6f809ca8SJian Hu .shift = 9, 747*6f809ca8SJian Hu .table = a9_eth_rmii_parents_val_table, 748*6f809ca8SJian Hu }, 749*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 750*6f809ca8SJian Hu .name = "eth_rmii_sel", 751*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 752*6f809ca8SJian Hu .parent_data = a9_eth_rmii_parents, 753*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_eth_rmii_parents), 754*6f809ca8SJian Hu .flags = CLK_SET_RATE_NO_REPARENT, 755*6f809ca8SJian Hu }, 756*6f809ca8SJian Hu }; 757*6f809ca8SJian Hu 758*6f809ca8SJian Hu static struct clk_regmap a9_eth_rmii_div = { 759*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data) { 760*6f809ca8SJian Hu .offset = ETH_CLK_CTRL, 761*6f809ca8SJian Hu .shift = 0, 762*6f809ca8SJian Hu .width = 7, 763*6f809ca8SJian Hu }, 764*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 765*6f809ca8SJian Hu .name = "eth_rmii_div", 766*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 767*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 768*6f809ca8SJian Hu &a9_eth_rmii_sel.hw 769*6f809ca8SJian Hu }, 770*6f809ca8SJian Hu .num_parents = 1, 771*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 772*6f809ca8SJian Hu }, 773*6f809ca8SJian Hu }; 774*6f809ca8SJian Hu 775*6f809ca8SJian Hu static struct clk_regmap a9_eth_rmii = { 776*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 777*6f809ca8SJian Hu .offset = ETH_CLK_CTRL, 778*6f809ca8SJian Hu .bit_idx = 8, 779*6f809ca8SJian Hu }, 780*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 781*6f809ca8SJian Hu .name = "eth_rmii", 782*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 783*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 784*6f809ca8SJian Hu &a9_eth_rmii_div.hw 785*6f809ca8SJian Hu }, 786*6f809ca8SJian Hu .num_parents = 1, 787*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 788*6f809ca8SJian Hu }, 789*6f809ca8SJian Hu }; 790*6f809ca8SJian Hu 791*6f809ca8SJian Hu static struct clk_regmap a9_vid_pll_div = { 792*6f809ca8SJian Hu .data = &(struct meson_vid_pll_div_data){ 793*6f809ca8SJian Hu .val = { 794*6f809ca8SJian Hu .reg_off = VID_PLL_CLK_DIV, 795*6f809ca8SJian Hu .shift = 0, 796*6f809ca8SJian Hu .width = 15, 797*6f809ca8SJian Hu }, 798*6f809ca8SJian Hu .sel = { 799*6f809ca8SJian Hu .reg_off = VID_PLL_CLK_DIV, 800*6f809ca8SJian Hu .shift = 16, 801*6f809ca8SJian Hu .width = 2, 802*6f809ca8SJian Hu }, 803*6f809ca8SJian Hu }, 804*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 805*6f809ca8SJian Hu .name = "vid_pll_div", 806*6f809ca8SJian Hu .ops = &meson_vid_pll_div_ro_ops, 807*6f809ca8SJian Hu .parent_data = (const struct clk_parent_data []) { 808*6f809ca8SJian Hu { .fw_name = "hdmiout2", } 809*6f809ca8SJian Hu }, 810*6f809ca8SJian Hu .num_parents = 1, 811*6f809ca8SJian Hu }, 812*6f809ca8SJian Hu }; 813*6f809ca8SJian Hu 814*6f809ca8SJian Hu static struct clk_regmap a9_vid_pll_sel = { 815*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 816*6f809ca8SJian Hu .offset = VID_PLL_CLK_DIV, 817*6f809ca8SJian Hu .mask = 0x1, 818*6f809ca8SJian Hu .shift = 18, 819*6f809ca8SJian Hu }, 820*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 821*6f809ca8SJian Hu .name = "vid_pll_sel", 822*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 823*6f809ca8SJian Hu .parent_data = (const struct clk_parent_data []) { 824*6f809ca8SJian Hu { .hw = &a9_vid_pll_div.hw }, 825*6f809ca8SJian Hu { .fw_name = "hdmiout2", } 826*6f809ca8SJian Hu }, 827*6f809ca8SJian Hu .num_parents = 2, 828*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 829*6f809ca8SJian Hu }, 830*6f809ca8SJian Hu }; 831*6f809ca8SJian Hu 832*6f809ca8SJian Hu static struct clk_regmap a9_vid_pll = { 833*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 834*6f809ca8SJian Hu .offset = VID_PLL_CLK_DIV, 835*6f809ca8SJian Hu .bit_idx = 19, 836*6f809ca8SJian Hu }, 837*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 838*6f809ca8SJian Hu .name = "vid_pll", 839*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 840*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 841*6f809ca8SJian Hu &a9_vid_pll_sel.hw 842*6f809ca8SJian Hu }, 843*6f809ca8SJian Hu .num_parents = 1, 844*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 845*6f809ca8SJian Hu }, 846*6f809ca8SJian Hu }; 847*6f809ca8SJian Hu 848*6f809ca8SJian Hu /* 849*6f809ca8SJian Hu * Channel 12 (msr_clk) is managed by the clock measurement module and is not part of the clock 850*6f809ca8SJian Hu * tree. It depends on the measurement source selected through the measurement control registers. 851*6f809ca8SJian Hu * 852*6f809ca8SJian Hu * Channel 10, 11, 13, 14 and 16 are unconnected. 853*6f809ca8SJian Hu */ 854*6f809ca8SJian Hu static u32 a9_gen_parents_val_table[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 15, 17, 18, 855*6f809ca8SJian Hu 19, 20, 21, 22, 23, 24, 25, 26}; 856*6f809ca8SJian Hu static const struct clk_parent_data a9_gen_parents[] = { 857*6f809ca8SJian Hu { .fw_name = "xtal" }, 858*6f809ca8SJian Hu { .fw_name = "rtc" }, 859*6f809ca8SJian Hu { .fw_name = "sysplldiv16" }, 860*6f809ca8SJian Hu { .fw_name = "ddr_test" }, 861*6f809ca8SJian Hu { .hw = &a9_vid_pll.hw }, 862*6f809ca8SJian Hu { .fw_name = "gp0" }, 863*6f809ca8SJian Hu { .fw_name = "hifi1" }, 864*6f809ca8SJian Hu { .fw_name = "hifi0" }, 865*6f809ca8SJian Hu { .fw_name = "gp1" }, 866*6f809ca8SJian Hu { .fw_name = "gp2" }, 867*6f809ca8SJian Hu { .fw_name = "dsudiv16" }, 868*6f809ca8SJian Hu { .fw_name = "cpudiv16" }, 869*6f809ca8SJian Hu { .fw_name = "a78div16" }, 870*6f809ca8SJian Hu { .fw_name = "fdiv2" }, 871*6f809ca8SJian Hu { .fw_name = "fdiv2p5" }, 872*6f809ca8SJian Hu { .fw_name = "fdiv3" }, 873*6f809ca8SJian Hu { .fw_name = "fdiv4" }, 874*6f809ca8SJian Hu { .fw_name = "fdiv5" }, 875*6f809ca8SJian Hu { .fw_name = "fdiv7" }, 876*6f809ca8SJian Hu { .fw_name = "mclk0" }, 877*6f809ca8SJian Hu { .fw_name = "mclk1" } 878*6f809ca8SJian Hu }; 879*6f809ca8SJian Hu 880*6f809ca8SJian Hu static A9_COMP_SEL(gen, GEN_CLK_CTRL, 12, 0x1f, a9_gen_parents, a9_gen_parents_val_table); 881*6f809ca8SJian Hu static A9_COMP_DIV(gen, GEN_CLK_CTRL, 0, 11); 882*6f809ca8SJian Hu static A9_COMP_GATE(gen, GEN_CLK_CTRL, 11, 0); 883*6f809ca8SJian Hu 884*6f809ca8SJian Hu static struct clk_regmap a9_24m_in = { 885*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 886*6f809ca8SJian Hu .offset = CLK12_24_CTRL, 887*6f809ca8SJian Hu .bit_idx = 11, 888*6f809ca8SJian Hu }, 889*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 890*6f809ca8SJian Hu .name = "24m_in", 891*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 892*6f809ca8SJian Hu .parent_data = &(const struct clk_parent_data) { 893*6f809ca8SJian Hu .fw_name = "xtal", 894*6f809ca8SJian Hu }, 895*6f809ca8SJian Hu .num_parents = 1, 896*6f809ca8SJian Hu }, 897*6f809ca8SJian Hu }; 898*6f809ca8SJian Hu 899*6f809ca8SJian Hu static struct clk_regmap a9_12_24m = { 900*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data) { 901*6f809ca8SJian Hu .offset = CLK12_24_CTRL, 902*6f809ca8SJian Hu .shift = 10, 903*6f809ca8SJian Hu .width = 1, 904*6f809ca8SJian Hu }, 905*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 906*6f809ca8SJian Hu .name = "12_24m", 907*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 908*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 909*6f809ca8SJian Hu &a9_24m_in.hw 910*6f809ca8SJian Hu }, 911*6f809ca8SJian Hu .num_parents = 1, 912*6f809ca8SJian Hu }, 913*6f809ca8SJian Hu }; 914*6f809ca8SJian Hu 915*6f809ca8SJian Hu static const struct clk_parent_data a9_mali_parents[] = { 916*6f809ca8SJian Hu { .fw_name = "xtal", }, 917*6f809ca8SJian Hu { .fw_name = "gp1", }, 918*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 919*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 920*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 921*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 922*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 923*6f809ca8SJian Hu { .fw_name = "fdiv7", } 924*6f809ca8SJian Hu }; 925*6f809ca8SJian Hu 926*6f809ca8SJian Hu static A9_COMP_SEL(mali_0, MALI_CLK_CTRL, 9, 0x7, a9_mali_parents, NULL); 927*6f809ca8SJian Hu static A9_COMP_DIV(mali_0, MALI_CLK_CTRL, 0, 7); 928*6f809ca8SJian Hu static A9_COMP_GATE(mali_0, MALI_CLK_CTRL, 8, CLK_SET_RATE_GATE); 929*6f809ca8SJian Hu 930*6f809ca8SJian Hu static A9_COMP_SEL(mali_1, MALI_CLK_CTRL, 25, 0x7, a9_mali_parents, NULL); 931*6f809ca8SJian Hu static A9_COMP_DIV(mali_1, MALI_CLK_CTRL, 16, 7); 932*6f809ca8SJian Hu static A9_COMP_GATE(mali_1, MALI_CLK_CTRL, 24, CLK_SET_RATE_GATE); 933*6f809ca8SJian Hu 934*6f809ca8SJian Hu static struct clk_regmap a9_mali = { 935*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 936*6f809ca8SJian Hu .offset = MALI_CLK_CTRL, 937*6f809ca8SJian Hu .mask = 0x1, 938*6f809ca8SJian Hu .shift = 31, 939*6f809ca8SJian Hu }, 940*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 941*6f809ca8SJian Hu .name = "mali", 942*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 943*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 944*6f809ca8SJian Hu &a9_mali_0.hw, 945*6f809ca8SJian Hu &a9_mali_1.hw 946*6f809ca8SJian Hu }, 947*6f809ca8SJian Hu .num_parents = 2, 948*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 949*6f809ca8SJian Hu }, 950*6f809ca8SJian Hu }; 951*6f809ca8SJian Hu 952*6f809ca8SJian Hu static A9_COMP_SEL(mali_stack_0, MALI_STACK_CLK_CTRL, 9, 0x7, a9_mali_parents, NULL); 953*6f809ca8SJian Hu static A9_COMP_DIV(mali_stack_0, MALI_STACK_CLK_CTRL, 0, 7); 954*6f809ca8SJian Hu static A9_COMP_GATE(mali_stack_0, MALI_STACK_CLK_CTRL, 8, CLK_SET_RATE_GATE); 955*6f809ca8SJian Hu 956*6f809ca8SJian Hu static A9_COMP_SEL(mali_stack_1, MALI_STACK_CLK_CTRL, 25, 0x7, a9_mali_parents, NULL); 957*6f809ca8SJian Hu static A9_COMP_DIV(mali_stack_1, MALI_STACK_CLK_CTRL, 16, 7); 958*6f809ca8SJian Hu static A9_COMP_GATE(mali_stack_1, MALI_STACK_CLK_CTRL, 24, CLK_SET_RATE_GATE); 959*6f809ca8SJian Hu 960*6f809ca8SJian Hu static struct clk_regmap a9_mali_stack = { 961*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 962*6f809ca8SJian Hu .offset = MALI_STACK_CLK_CTRL, 963*6f809ca8SJian Hu .mask = 0x1, 964*6f809ca8SJian Hu .shift = 31, 965*6f809ca8SJian Hu }, 966*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 967*6f809ca8SJian Hu .name = "mali_stack", 968*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 969*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 970*6f809ca8SJian Hu &a9_mali_stack_0.hw, 971*6f809ca8SJian Hu &a9_mali_stack_1.hw 972*6f809ca8SJian Hu }, 973*6f809ca8SJian Hu .num_parents = 2, 974*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 975*6f809ca8SJian Hu }, 976*6f809ca8SJian Hu }; 977*6f809ca8SJian Hu 978*6f809ca8SJian Hu static const struct clk_parent_data a9_hevcf_parents[] = { 979*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 980*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 981*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 982*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 983*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 984*6f809ca8SJian Hu { .fw_name = "hifi0", }, 985*6f809ca8SJian Hu { .fw_name = "gp1", }, 986*6f809ca8SJian Hu { .fw_name = "xtal", } 987*6f809ca8SJian Hu }; 988*6f809ca8SJian Hu 989*6f809ca8SJian Hu static A9_COMP_SEL(hevcf_0, HEVCF_CLK_CTRL, 9, 0x7, a9_hevcf_parents, NULL); 990*6f809ca8SJian Hu static A9_COMP_DIV(hevcf_0, HEVCF_CLK_CTRL, 0, 7); 991*6f809ca8SJian Hu static A9_COMP_GATE(hevcf_0, HEVCF_CLK_CTRL, 8, CLK_SET_RATE_GATE); 992*6f809ca8SJian Hu 993*6f809ca8SJian Hu static A9_COMP_SEL(hevcf_1, HEVCF_CLK_CTRL, 25, 0x7, a9_hevcf_parents, NULL); 994*6f809ca8SJian Hu static A9_COMP_DIV(hevcf_1, HEVCF_CLK_CTRL, 16, 7); 995*6f809ca8SJian Hu static A9_COMP_GATE(hevcf_1, HEVCF_CLK_CTRL, 24, CLK_SET_RATE_GATE); 996*6f809ca8SJian Hu 997*6f809ca8SJian Hu static struct clk_regmap a9_hevcf = { 998*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 999*6f809ca8SJian Hu .offset = HEVCF_CLK_CTRL, 1000*6f809ca8SJian Hu .mask = 0x1, 1001*6f809ca8SJian Hu .shift = 31, 1002*6f809ca8SJian Hu }, 1003*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1004*6f809ca8SJian Hu .name = "hevcf", 1005*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1006*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1007*6f809ca8SJian Hu &a9_hevcf_0.hw, 1008*6f809ca8SJian Hu &a9_hevcf_1.hw 1009*6f809ca8SJian Hu }, 1010*6f809ca8SJian Hu .num_parents = 2, 1011*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1012*6f809ca8SJian Hu }, 1013*6f809ca8SJian Hu }; 1014*6f809ca8SJian Hu 1015*6f809ca8SJian Hu static const struct clk_parent_data a9_hcodec_parents[] = { 1016*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 1017*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1018*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1019*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1020*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 1021*6f809ca8SJian Hu { .fw_name = "hifi0", }, 1022*6f809ca8SJian Hu { .fw_name = "gp0", }, 1023*6f809ca8SJian Hu { .fw_name = "xtal", } 1024*6f809ca8SJian Hu }; 1025*6f809ca8SJian Hu 1026*6f809ca8SJian Hu static A9_COMP_SEL(hcodec_0, HCODEC_CLK_CTRL, 9, 0x7, a9_hcodec_parents, NULL); 1027*6f809ca8SJian Hu static A9_COMP_DIV(hcodec_0, HCODEC_CLK_CTRL, 0, 7); 1028*6f809ca8SJian Hu static A9_COMP_GATE(hcodec_0, HCODEC_CLK_CTRL, 8, CLK_SET_RATE_GATE); 1029*6f809ca8SJian Hu 1030*6f809ca8SJian Hu static A9_COMP_SEL(hcodec_1, HCODEC_CLK_CTRL, 25, 0x7, a9_hcodec_parents, NULL); 1031*6f809ca8SJian Hu static A9_COMP_DIV(hcodec_1, HCODEC_CLK_CTRL, 16, 7); 1032*6f809ca8SJian Hu static A9_COMP_GATE(hcodec_1, HCODEC_CLK_CTRL, 24, CLK_SET_RATE_GATE); 1033*6f809ca8SJian Hu 1034*6f809ca8SJian Hu static struct clk_regmap a9_hcodec = { 1035*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1036*6f809ca8SJian Hu .offset = HCODEC_CLK_CTRL, 1037*6f809ca8SJian Hu .mask = 0x1, 1038*6f809ca8SJian Hu .shift = 31, 1039*6f809ca8SJian Hu }, 1040*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1041*6f809ca8SJian Hu .name = "hcodec", 1042*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1043*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1044*6f809ca8SJian Hu &a9_hcodec_0.hw, 1045*6f809ca8SJian Hu &a9_hcodec_1.hw 1046*6f809ca8SJian Hu }, 1047*6f809ca8SJian Hu .num_parents = 2, 1048*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1049*6f809ca8SJian Hu }, 1050*6f809ca8SJian Hu }; 1051*6f809ca8SJian Hu 1052*6f809ca8SJian Hu static const struct clk_parent_data a9_vpu_parents[] = { 1053*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1054*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1055*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1056*6f809ca8SJian Hu { .fw_name = "vid1", }, 1057*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 1058*6f809ca8SJian Hu { .hw = &a9_vid_pll.hw }, 1059*6f809ca8SJian Hu { .fw_name = "vid2", }, 1060*6f809ca8SJian Hu { .fw_name = "gp1", } 1061*6f809ca8SJian Hu }; 1062*6f809ca8SJian Hu 1063*6f809ca8SJian Hu static A9_COMP_SEL(vpu_0, VPU_CLK_CTRL, 9, 0x7, a9_vpu_parents, NULL); 1064*6f809ca8SJian Hu static A9_COMP_DIV(vpu_0, VPU_CLK_CTRL, 0, 7); 1065*6f809ca8SJian Hu static A9_COMP_GATE(vpu_0, VPU_CLK_CTRL, 8, CLK_SET_RATE_GATE); 1066*6f809ca8SJian Hu 1067*6f809ca8SJian Hu static A9_COMP_SEL(vpu_1, VPU_CLK_CTRL, 25, 0x7, a9_vpu_parents, NULL); 1068*6f809ca8SJian Hu static A9_COMP_DIV(vpu_1, VPU_CLK_CTRL, 16, 7); 1069*6f809ca8SJian Hu static A9_COMP_GATE(vpu_1, VPU_CLK_CTRL, 24, CLK_SET_RATE_GATE); 1070*6f809ca8SJian Hu 1071*6f809ca8SJian Hu static struct clk_regmap a9_vpu = { 1072*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1073*6f809ca8SJian Hu .offset = VPU_CLK_CTRL, 1074*6f809ca8SJian Hu .mask = 0x1, 1075*6f809ca8SJian Hu .shift = 31, 1076*6f809ca8SJian Hu }, 1077*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1078*6f809ca8SJian Hu .name = "vpu", 1079*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1080*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1081*6f809ca8SJian Hu &a9_vpu_0.hw, 1082*6f809ca8SJian Hu &a9_vpu_1.hw 1083*6f809ca8SJian Hu }, 1084*6f809ca8SJian Hu .num_parents = 2, 1085*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1086*6f809ca8SJian Hu }, 1087*6f809ca8SJian Hu }; 1088*6f809ca8SJian Hu 1089*6f809ca8SJian Hu static const struct clk_parent_data a9_vapb_parents[] = { 1090*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1091*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1092*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1093*6f809ca8SJian Hu { .fw_name = "fdiv7", }, 1094*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 1095*6f809ca8SJian Hu { .hw = &a9_vid_pll.hw }, 1096*6f809ca8SJian Hu { .fw_name = "hifi0", }, 1097*6f809ca8SJian Hu { .fw_name = "fdiv2p5", } 1098*6f809ca8SJian Hu }; 1099*6f809ca8SJian Hu 1100*6f809ca8SJian Hu static A9_COMP_SEL(vapb_0, VAPB_CLK_CTRL, 9, 0x7, a9_vapb_parents, NULL); 1101*6f809ca8SJian Hu static A9_COMP_DIV(vapb_0, VAPB_CLK_CTRL, 0, 7); 1102*6f809ca8SJian Hu static A9_COMP_GATE(vapb_0, VAPB_CLK_CTRL, 8, CLK_SET_RATE_GATE); 1103*6f809ca8SJian Hu 1104*6f809ca8SJian Hu static A9_COMP_SEL(vapb_1, VAPB_CLK_CTRL, 25, 0x7, a9_vapb_parents, NULL); 1105*6f809ca8SJian Hu static A9_COMP_DIV(vapb_1, VAPB_CLK_CTRL, 16, 7); 1106*6f809ca8SJian Hu static A9_COMP_GATE(vapb_1, VAPB_CLK_CTRL, 24, CLK_SET_RATE_GATE); 1107*6f809ca8SJian Hu 1108*6f809ca8SJian Hu static struct clk_regmap a9_vapb = { 1109*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1110*6f809ca8SJian Hu .offset = VAPB_CLK_CTRL, 1111*6f809ca8SJian Hu .mask = 0x1, 1112*6f809ca8SJian Hu .shift = 31, 1113*6f809ca8SJian Hu }, 1114*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1115*6f809ca8SJian Hu .name = "vapb", 1116*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1117*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1118*6f809ca8SJian Hu &a9_vapb_0.hw, 1119*6f809ca8SJian Hu &a9_vapb_1.hw 1120*6f809ca8SJian Hu }, 1121*6f809ca8SJian Hu .num_parents = 2, 1122*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1123*6f809ca8SJian Hu }, 1124*6f809ca8SJian Hu }; 1125*6f809ca8SJian Hu 1126*6f809ca8SJian Hu static struct clk_regmap a9_ge2d = { 1127*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 1128*6f809ca8SJian Hu .offset = VAPB_CLK_CTRL, 1129*6f809ca8SJian Hu .bit_idx = 30, 1130*6f809ca8SJian Hu }, 1131*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1132*6f809ca8SJian Hu .name = "ge2d", 1133*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1134*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1135*6f809ca8SJian Hu &a9_vapb.hw, 1136*6f809ca8SJian Hu }, 1137*6f809ca8SJian Hu .num_parents = 1, 1138*6f809ca8SJian Hu }, 1139*6f809ca8SJian Hu }; 1140*6f809ca8SJian Hu 1141*6f809ca8SJian Hu static const struct clk_parent_data a9_vpu_clkb_tmp_parents[] = { 1142*6f809ca8SJian Hu { .hw = &a9_vpu.hw }, 1143*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1144*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1145*6f809ca8SJian Hu { .fw_name = "fdiv7", } 1146*6f809ca8SJian Hu }; 1147*6f809ca8SJian Hu 1148*6f809ca8SJian Hu static A9_COMP_SEL(vpu_clkb_tmp, VPU_CLKB_CTRL, 25, 0x7, a9_vpu_clkb_tmp_parents, NULL); 1149*6f809ca8SJian Hu static A9_COMP_DIV(vpu_clkb_tmp, VPU_CLKB_CTRL, 16, 4); 1150*6f809ca8SJian Hu static A9_COMP_GATE(vpu_clkb_tmp, VPU_CLKB_CTRL, 24, 0); 1151*6f809ca8SJian Hu 1152*6f809ca8SJian Hu static struct clk_regmap a9_vpu_clkb_div = { 1153*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data) { 1154*6f809ca8SJian Hu .offset = VPU_CLKB_CTRL, 1155*6f809ca8SJian Hu .shift = 0, 1156*6f809ca8SJian Hu .width = 8, 1157*6f809ca8SJian Hu }, 1158*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1159*6f809ca8SJian Hu .name = "vpu_clkb_div", 1160*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 1161*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1162*6f809ca8SJian Hu &a9_vpu_clkb_tmp.hw, 1163*6f809ca8SJian Hu }, 1164*6f809ca8SJian Hu .num_parents = 1, 1165*6f809ca8SJian Hu }, 1166*6f809ca8SJian Hu }; 1167*6f809ca8SJian Hu 1168*6f809ca8SJian Hu static struct clk_regmap a9_vpu_clkb = { 1169*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { 1170*6f809ca8SJian Hu .offset = VPU_CLKB_CTRL, 1171*6f809ca8SJian Hu .bit_idx = 8, 1172*6f809ca8SJian Hu }, 1173*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1174*6f809ca8SJian Hu .name = "vpu_clkb", 1175*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1176*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1177*6f809ca8SJian Hu &a9_vpu_clkb_div.hw 1178*6f809ca8SJian Hu }, 1179*6f809ca8SJian Hu .num_parents = 1, 1180*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1181*6f809ca8SJian Hu }, 1182*6f809ca8SJian Hu }; 1183*6f809ca8SJian Hu 1184*6f809ca8SJian Hu static const struct clk_parent_data a9_hdmi_parents[] = { 1185*6f809ca8SJian Hu { .fw_name = "xtal", }, 1186*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1187*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1188*6f809ca8SJian Hu { .fw_name = "fdiv5", } 1189*6f809ca8SJian Hu }; 1190*6f809ca8SJian Hu 1191*6f809ca8SJian Hu static A9_COMP_SEL(hdmitx_sys, HDMI_CLK_CTRL, 9, 0x7, a9_hdmi_parents, NULL); 1192*6f809ca8SJian Hu static A9_COMP_DIV(hdmitx_sys, HDMI_CLK_CTRL, 0, 7); 1193*6f809ca8SJian Hu static A9_COMP_GATE(hdmitx_sys, HDMI_CLK_CTRL, 8, 0); 1194*6f809ca8SJian Hu 1195*6f809ca8SJian Hu static A9_COMP_SEL(hdmitx_prif, HTX_CLK_CTRL, 9, 0x7, a9_hdmi_parents, NULL); 1196*6f809ca8SJian Hu static A9_COMP_DIV(hdmitx_prif, HTX_CLK_CTRL, 0, 7); 1197*6f809ca8SJian Hu static A9_COMP_GATE(hdmitx_prif, HTX_CLK_CTRL, 8, 0); 1198*6f809ca8SJian Hu 1199*6f809ca8SJian Hu static A9_COMP_SEL(hdmitx_200m, HTX_CLK_CTRL, 25, 0x7, a9_hdmi_parents, NULL); 1200*6f809ca8SJian Hu static A9_COMP_DIV(hdmitx_200m, HTX_CLK_CTRL, 16, 7); 1201*6f809ca8SJian Hu static A9_COMP_GATE(hdmitx_200m, HTX_CLK_CTRL, 24, 0); 1202*6f809ca8SJian Hu 1203*6f809ca8SJian Hu static A9_COMP_SEL(hdmitx_aud, HTX_CLK_CTRL1, 9, 0x7, a9_hdmi_parents, NULL); 1204*6f809ca8SJian Hu static A9_COMP_DIV(hdmitx_aud, HTX_CLK_CTRL1, 0, 7); 1205*6f809ca8SJian Hu static A9_COMP_GATE(hdmitx_aud, HTX_CLK_CTRL1, 8, 0); 1206*6f809ca8SJian Hu 1207*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_5m, HRX_CLK_CTRL, 9, 0x7, a9_hdmi_parents, NULL); 1208*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_5m, HRX_CLK_CTRL, 0, 7); 1209*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_5m, HRX_CLK_CTRL, 8, 0); 1210*6f809ca8SJian Hu 1211*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_2m, HRX_CLK_CTRL, 25, 0x7, a9_hdmi_parents, NULL); 1212*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_2m, HRX_CLK_CTRL, 16, 7); 1213*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_2m, HRX_CLK_CTRL, 24, 0); 1214*6f809ca8SJian Hu 1215*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_cfg, HRX_CLK_CTRL1, 9, 0x7, a9_hdmi_parents, NULL); 1216*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_cfg, HRX_CLK_CTRL1, 0, 7); 1217*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_cfg, HRX_CLK_CTRL1, 8, 0); 1218*6f809ca8SJian Hu 1219*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_hdcp2x, HRX_CLK_CTRL1, 25, 0x7, a9_hdmi_parents, NULL); 1220*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_hdcp2x, HRX_CLK_CTRL1, 16, 7); 1221*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_hdcp2x, HRX_CLK_CTRL1, 24, 0); 1222*6f809ca8SJian Hu 1223*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_acr_ref, HRX_CLK_CTRL2, 25, 0x7, a9_hdmi_parents, NULL); 1224*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_acr_ref, HRX_CLK_CTRL2, 16, 7); 1225*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_acr_ref, HRX_CLK_CTRL2, 24, 0); 1226*6f809ca8SJian Hu 1227*6f809ca8SJian Hu static A9_COMP_SEL(hdmirx_meter, HRX_CLK_CTRL3, 9, 0x7, a9_hdmi_parents, NULL); 1228*6f809ca8SJian Hu static A9_COMP_DIV(hdmirx_meter, HRX_CLK_CTRL3, 0, 7); 1229*6f809ca8SJian Hu static A9_COMP_GATE(hdmirx_meter, HRX_CLK_CTRL3, 8, 0); 1230*6f809ca8SJian Hu 1231*6f809ca8SJian Hu static struct clk_regmap a9_vid_pll_vclk = { 1232*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1233*6f809ca8SJian Hu .offset = HDMI_CLK_CTRL, 1234*6f809ca8SJian Hu .mask = 0x1, 1235*6f809ca8SJian Hu .shift = 15, 1236*6f809ca8SJian Hu }, 1237*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1238*6f809ca8SJian Hu .name = "vid_pll_vclk", 1239*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1240*6f809ca8SJian Hu .parent_data = (const struct clk_parent_data []) { 1241*6f809ca8SJian Hu { .hw = &a9_vid_pll.hw }, 1242*6f809ca8SJian Hu { .fw_name = "hdmipix", } 1243*6f809ca8SJian Hu }, 1244*6f809ca8SJian Hu .num_parents = 2, 1245*6f809ca8SJian Hu }, 1246*6f809ca8SJian Hu }; 1247*6f809ca8SJian Hu 1248*6f809ca8SJian Hu static const struct clk_parent_data a9_vclk_parents[] = { 1249*6f809ca8SJian Hu { .hw = &a9_vid_pll_vclk.hw }, 1250*6f809ca8SJian Hu { .fw_name = "pix0", }, 1251*6f809ca8SJian Hu { .fw_name = "vid1", }, 1252*6f809ca8SJian Hu { .fw_name = "pix1", }, 1253*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1254*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1255*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1256*6f809ca8SJian Hu { .fw_name = "vid2", } 1257*6f809ca8SJian Hu }; 1258*6f809ca8SJian Hu 1259*6f809ca8SJian Hu static struct clk_regmap a9_vclk0_sel = { 1260*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1261*6f809ca8SJian Hu .offset = VID_CLK_CTRL, 1262*6f809ca8SJian Hu .mask = 0x7, 1263*6f809ca8SJian Hu .shift = 16, 1264*6f809ca8SJian Hu }, 1265*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1266*6f809ca8SJian Hu .name = "vclk0_sel", 1267*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1268*6f809ca8SJian Hu .parent_data = a9_vclk_parents, 1269*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vclk_parents), 1270*6f809ca8SJian Hu }, 1271*6f809ca8SJian Hu }; 1272*6f809ca8SJian Hu 1273*6f809ca8SJian Hu static struct clk_regmap a9_vclk0_in = { 1274*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1275*6f809ca8SJian Hu .offset = VID_CLK_DIV, 1276*6f809ca8SJian Hu .bit_idx = 16, 1277*6f809ca8SJian Hu }, 1278*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1279*6f809ca8SJian Hu .name = "vclk0_in", 1280*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1281*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { &a9_vclk0_sel.hw }, 1282*6f809ca8SJian Hu .num_parents = 1, 1283*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1284*6f809ca8SJian Hu }, 1285*6f809ca8SJian Hu }; 1286*6f809ca8SJian Hu 1287*6f809ca8SJian Hu static struct clk_regmap a9_vclk0_div = { 1288*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data){ 1289*6f809ca8SJian Hu .offset = VID_CLK_DIV, 1290*6f809ca8SJian Hu .shift = 0, 1291*6f809ca8SJian Hu .width = 8, 1292*6f809ca8SJian Hu }, 1293*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1294*6f809ca8SJian Hu .name = "vclk0_div", 1295*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 1296*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1297*6f809ca8SJian Hu &a9_vclk0_in.hw 1298*6f809ca8SJian Hu }, 1299*6f809ca8SJian Hu .num_parents = 1, 1300*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1301*6f809ca8SJian Hu }, 1302*6f809ca8SJian Hu }; 1303*6f809ca8SJian Hu 1304*6f809ca8SJian Hu static struct clk_regmap a9_vclk0 = { 1305*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1306*6f809ca8SJian Hu .offset = VID_CLK_CTRL, 1307*6f809ca8SJian Hu .bit_idx = 19, 1308*6f809ca8SJian Hu }, 1309*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1310*6f809ca8SJian Hu .name = "vclk0", 1311*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1312*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { &a9_vclk0_div.hw }, 1313*6f809ca8SJian Hu .num_parents = 1, 1314*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1315*6f809ca8SJian Hu }, 1316*6f809ca8SJian Hu }; 1317*6f809ca8SJian Hu 1318*6f809ca8SJian Hu #define A9_VCLK_GATE(_name, _reg, _bit, _parent) \ 1319*6f809ca8SJian Hu struct clk_regmap a9_##_name##_en = { \ 1320*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data) { \ 1321*6f809ca8SJian Hu .offset = (_reg), \ 1322*6f809ca8SJian Hu .bit_idx = (_bit), \ 1323*6f809ca8SJian Hu }, \ 1324*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { \ 1325*6f809ca8SJian Hu .name = #_name "_en", \ 1326*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, \ 1327*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { \ 1328*6f809ca8SJian Hu &(_parent).hw \ 1329*6f809ca8SJian Hu }, \ 1330*6f809ca8SJian Hu .num_parents = 1, \ 1331*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, \ 1332*6f809ca8SJian Hu }, \ 1333*6f809ca8SJian Hu } 1334*6f809ca8SJian Hu 1335*6f809ca8SJian Hu #define A9_VCLK_DIV(_name, _div) \ 1336*6f809ca8SJian Hu struct clk_fixed_factor a9_##_name = { \ 1337*6f809ca8SJian Hu .mult = 1, \ 1338*6f809ca8SJian Hu .div = (_div), \ 1339*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { \ 1340*6f809ca8SJian Hu .name = #_name, \ 1341*6f809ca8SJian Hu .ops = &clk_fixed_factor_ops, \ 1342*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { \ 1343*6f809ca8SJian Hu &a9_##_name##_en.hw \ 1344*6f809ca8SJian Hu }, \ 1345*6f809ca8SJian Hu .num_parents = 1, \ 1346*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, \ 1347*6f809ca8SJian Hu }, \ 1348*6f809ca8SJian Hu } 1349*6f809ca8SJian Hu 1350*6f809ca8SJian Hu static A9_VCLK_GATE(vclk0_div1, VID_CLK_CTRL, 0, a9_vclk0); 1351*6f809ca8SJian Hu static A9_VCLK_GATE(vclk0_div2, VID_CLK_CTRL, 1, a9_vclk0); 1352*6f809ca8SJian Hu static A9_VCLK_DIV(vclk0_div2, 2); 1353*6f809ca8SJian Hu static A9_VCLK_GATE(vclk0_div4, VID_CLK_CTRL, 2, a9_vclk0); 1354*6f809ca8SJian Hu static A9_VCLK_DIV(vclk0_div4, 4); 1355*6f809ca8SJian Hu static A9_VCLK_GATE(vclk0_div6, VID_CLK_CTRL, 3, a9_vclk0); 1356*6f809ca8SJian Hu static A9_VCLK_DIV(vclk0_div6, 6); 1357*6f809ca8SJian Hu static A9_VCLK_GATE(vclk0_div12, VID_CLK_CTRL, 4, a9_vclk0); 1358*6f809ca8SJian Hu static A9_VCLK_DIV(vclk0_div12, 12); 1359*6f809ca8SJian Hu 1360*6f809ca8SJian Hu static struct clk_regmap a9_vclk1_sel = { 1361*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1362*6f809ca8SJian Hu .offset = VIID_CLK_CTRL, 1363*6f809ca8SJian Hu .mask = 0x7, 1364*6f809ca8SJian Hu .shift = 16, 1365*6f809ca8SJian Hu }, 1366*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1367*6f809ca8SJian Hu .name = "vclk1_sel", 1368*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1369*6f809ca8SJian Hu .parent_data = a9_vclk_parents, 1370*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vclk_parents), 1371*6f809ca8SJian Hu }, 1372*6f809ca8SJian Hu }; 1373*6f809ca8SJian Hu 1374*6f809ca8SJian Hu static struct clk_regmap a9_vclk1_in = { 1375*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1376*6f809ca8SJian Hu .offset = VIID_CLK_DIV, 1377*6f809ca8SJian Hu .bit_idx = 16, 1378*6f809ca8SJian Hu }, 1379*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1380*6f809ca8SJian Hu .name = "vclk1_in", 1381*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1382*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { &a9_vclk1_sel.hw }, 1383*6f809ca8SJian Hu .num_parents = 1, 1384*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1385*6f809ca8SJian Hu }, 1386*6f809ca8SJian Hu }; 1387*6f809ca8SJian Hu 1388*6f809ca8SJian Hu static struct clk_regmap a9_vclk1_div = { 1389*6f809ca8SJian Hu .data = &(struct clk_regmap_div_data){ 1390*6f809ca8SJian Hu .offset = VIID_CLK_DIV, 1391*6f809ca8SJian Hu .shift = 0, 1392*6f809ca8SJian Hu .width = 8, 1393*6f809ca8SJian Hu }, 1394*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1395*6f809ca8SJian Hu .name = "vclk1_div", 1396*6f809ca8SJian Hu .ops = &clk_regmap_divider_ops, 1397*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1398*6f809ca8SJian Hu &a9_vclk1_in.hw 1399*6f809ca8SJian Hu }, 1400*6f809ca8SJian Hu .num_parents = 1, 1401*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1402*6f809ca8SJian Hu }, 1403*6f809ca8SJian Hu }; 1404*6f809ca8SJian Hu 1405*6f809ca8SJian Hu static struct clk_regmap a9_vclk1 = { 1406*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1407*6f809ca8SJian Hu .offset = VIID_CLK_CTRL, 1408*6f809ca8SJian Hu .bit_idx = 19, 1409*6f809ca8SJian Hu }, 1410*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1411*6f809ca8SJian Hu .name = "vclk1", 1412*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1413*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { &a9_vclk1_div.hw }, 1414*6f809ca8SJian Hu .num_parents = 1, 1415*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1416*6f809ca8SJian Hu }, 1417*6f809ca8SJian Hu }; 1418*6f809ca8SJian Hu 1419*6f809ca8SJian Hu static A9_VCLK_GATE(vclk1_div1, VIID_CLK_CTRL, 0, a9_vclk1); 1420*6f809ca8SJian Hu static A9_VCLK_GATE(vclk1_div2, VIID_CLK_CTRL, 1, a9_vclk1); 1421*6f809ca8SJian Hu static A9_VCLK_DIV(vclk1_div2, 2); 1422*6f809ca8SJian Hu static A9_VCLK_GATE(vclk1_div4, VIID_CLK_CTRL, 2, a9_vclk1); 1423*6f809ca8SJian Hu static A9_VCLK_DIV(vclk1_div4, 4); 1424*6f809ca8SJian Hu static A9_VCLK_GATE(vclk1_div6, VIID_CLK_CTRL, 3, a9_vclk1); 1425*6f809ca8SJian Hu static A9_VCLK_DIV(vclk1_div6, 6); 1426*6f809ca8SJian Hu static A9_VCLK_GATE(vclk1_div12, VIID_CLK_CTRL, 4, a9_vclk1); 1427*6f809ca8SJian Hu static A9_VCLK_DIV(vclk1_div12, 12); 1428*6f809ca8SJian Hu 1429*6f809ca8SJian Hu /* Channel 5, 6 and 7 are unconnected */ 1430*6f809ca8SJian Hu static u32 a9_vid_parents_val_table[] = { 0, 1, 2, 3, 4, 8, 9, 10, 11, 12 }; 1431*6f809ca8SJian Hu static const struct clk_hw *a9_vid_parents[] = { 1432*6f809ca8SJian Hu &a9_vclk0_div1_en.hw, 1433*6f809ca8SJian Hu &a9_vclk0_div2.hw, 1434*6f809ca8SJian Hu &a9_vclk0_div4.hw, 1435*6f809ca8SJian Hu &a9_vclk0_div6.hw, 1436*6f809ca8SJian Hu &a9_vclk0_div12.hw, 1437*6f809ca8SJian Hu &a9_vclk1_div1_en.hw, 1438*6f809ca8SJian Hu &a9_vclk1_div2.hw, 1439*6f809ca8SJian Hu &a9_vclk1_div4.hw, 1440*6f809ca8SJian Hu &a9_vclk1_div6.hw, 1441*6f809ca8SJian Hu &a9_vclk1_div12.hw 1442*6f809ca8SJian Hu }; 1443*6f809ca8SJian Hu 1444*6f809ca8SJian Hu static struct clk_regmap a9_encoder0_sel = { 1445*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1446*6f809ca8SJian Hu .offset = VIID_CLK_DIV, 1447*6f809ca8SJian Hu .mask = 0xf, 1448*6f809ca8SJian Hu .shift = 12, 1449*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1450*6f809ca8SJian Hu }, 1451*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1452*6f809ca8SJian Hu .name = "encoder0_sel", 1453*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1454*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1455*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1456*6f809ca8SJian Hu }, 1457*6f809ca8SJian Hu }; 1458*6f809ca8SJian Hu 1459*6f809ca8SJian Hu static struct clk_regmap a9_encoder0 = { 1460*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1461*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1462*6f809ca8SJian Hu .bit_idx = 10, 1463*6f809ca8SJian Hu }, 1464*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1465*6f809ca8SJian Hu .name = "encoder0", 1466*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1467*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1468*6f809ca8SJian Hu &a9_encoder0_sel.hw 1469*6f809ca8SJian Hu }, 1470*6f809ca8SJian Hu .num_parents = 1, 1471*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1472*6f809ca8SJian Hu }, 1473*6f809ca8SJian Hu }; 1474*6f809ca8SJian Hu 1475*6f809ca8SJian Hu static struct clk_regmap a9_encoder1_sel = { 1476*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1477*6f809ca8SJian Hu .offset = VIID_CLK_DIV, 1478*6f809ca8SJian Hu .mask = 0xf, 1479*6f809ca8SJian Hu .shift = 8, 1480*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1481*6f809ca8SJian Hu }, 1482*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1483*6f809ca8SJian Hu .name = "encoder1_sel", 1484*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1485*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1486*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1487*6f809ca8SJian Hu }, 1488*6f809ca8SJian Hu }; 1489*6f809ca8SJian Hu 1490*6f809ca8SJian Hu static struct clk_regmap a9_encoder1 = { 1491*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1492*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1493*6f809ca8SJian Hu .bit_idx = 11, 1494*6f809ca8SJian Hu }, 1495*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1496*6f809ca8SJian Hu .name = "encoder1", 1497*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1498*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1499*6f809ca8SJian Hu &a9_encoder1_sel.hw 1500*6f809ca8SJian Hu }, 1501*6f809ca8SJian Hu .num_parents = 1, 1502*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1503*6f809ca8SJian Hu }, 1504*6f809ca8SJian Hu }; 1505*6f809ca8SJian Hu 1506*6f809ca8SJian Hu static const struct clk_parent_data a9_vid_lock_parents[] = { 1507*6f809ca8SJian Hu { .fw_name = "xtal", }, 1508*6f809ca8SJian Hu { .hw = &a9_encoder0.hw }, 1509*6f809ca8SJian Hu { .hw = &a9_encoder1.hw } 1510*6f809ca8SJian Hu }; 1511*6f809ca8SJian Hu 1512*6f809ca8SJian Hu static A9_COMP_SEL(vid_lock, VID_LOCK_CLK_CTRL, 9, 0x7, a9_vid_lock_parents, NULL); 1513*6f809ca8SJian Hu static A9_COMP_DIV(vid_lock, VID_LOCK_CLK_CTRL, 0, 7); 1514*6f809ca8SJian Hu static A9_COMP_GATE(vid_lock, VID_LOCK_CLK_CTRL, 8, 0); 1515*6f809ca8SJian Hu 1516*6f809ca8SJian Hu static const struct clk_parent_data a9_vdin_meas_parents[] = { 1517*6f809ca8SJian Hu { .fw_name = "xtal", }, 1518*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1519*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1520*6f809ca8SJian Hu { .fw_name = "fdiv5", } 1521*6f809ca8SJian Hu }; 1522*6f809ca8SJian Hu 1523*6f809ca8SJian Hu static A9_COMP_SEL(vdin_meas, VDIN_MEAS_CLK_CTRL, 9, 0x7, a9_vdin_meas_parents, NULL); 1524*6f809ca8SJian Hu static A9_COMP_DIV(vdin_meas, VDIN_MEAS_CLK_CTRL, 0, 7); 1525*6f809ca8SJian Hu static A9_COMP_GATE(vdin_meas, VDIN_MEAS_CLK_CTRL, 8, 0); 1526*6f809ca8SJian Hu 1527*6f809ca8SJian Hu static struct clk_regmap a9_vdac_sel = { 1528*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1529*6f809ca8SJian Hu .offset = VIID_CLK_DIV, 1530*6f809ca8SJian Hu .mask = 0xf, 1531*6f809ca8SJian Hu .shift = 28, 1532*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1533*6f809ca8SJian Hu }, 1534*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1535*6f809ca8SJian Hu .name = "vdac_sel", 1536*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1537*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1538*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1539*6f809ca8SJian Hu }, 1540*6f809ca8SJian Hu }; 1541*6f809ca8SJian Hu 1542*6f809ca8SJian Hu static struct clk_regmap a9_vdac = { 1543*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1544*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1545*6f809ca8SJian Hu .bit_idx = 4, 1546*6f809ca8SJian Hu }, 1547*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1548*6f809ca8SJian Hu .name = "vdac", 1549*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1550*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1551*6f809ca8SJian Hu &a9_vdac_sel.hw 1552*6f809ca8SJian Hu }, 1553*6f809ca8SJian Hu .num_parents = 1, 1554*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1555*6f809ca8SJian Hu }, 1556*6f809ca8SJian Hu }; 1557*6f809ca8SJian Hu 1558*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx0_pixel_sel = { 1559*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1560*6f809ca8SJian Hu .offset = HDMI_CLK_CTRL, 1561*6f809ca8SJian Hu .mask = 0xf, 1562*6f809ca8SJian Hu .shift = 16, 1563*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1564*6f809ca8SJian Hu }, 1565*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1566*6f809ca8SJian Hu .name = "hdmitx0_pixel_sel", 1567*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1568*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1569*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1570*6f809ca8SJian Hu }, 1571*6f809ca8SJian Hu }; 1572*6f809ca8SJian Hu 1573*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx0_pixel = { 1574*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1575*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1576*6f809ca8SJian Hu .bit_idx = 5, 1577*6f809ca8SJian Hu }, 1578*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1579*6f809ca8SJian Hu .name = "hdmitx0_pixel", 1580*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1581*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1582*6f809ca8SJian Hu &a9_hdmitx0_pixel_sel.hw 1583*6f809ca8SJian Hu }, 1584*6f809ca8SJian Hu .num_parents = 1, 1585*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1586*6f809ca8SJian Hu }, 1587*6f809ca8SJian Hu }; 1588*6f809ca8SJian Hu 1589*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx0_fe_sel = { 1590*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1591*6f809ca8SJian Hu .offset = HDMI_CLK_CTRL, 1592*6f809ca8SJian Hu .mask = 0xf, 1593*6f809ca8SJian Hu .shift = 20, 1594*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1595*6f809ca8SJian Hu }, 1596*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1597*6f809ca8SJian Hu .name = "hdmitx0_fe_sel", 1598*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1599*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1600*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1601*6f809ca8SJian Hu }, 1602*6f809ca8SJian Hu }; 1603*6f809ca8SJian Hu 1604*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx0_fe = { 1605*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1606*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1607*6f809ca8SJian Hu .bit_idx = 9, 1608*6f809ca8SJian Hu }, 1609*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1610*6f809ca8SJian Hu .name = "hdmitx0_fe", 1611*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1612*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1613*6f809ca8SJian Hu &a9_hdmitx0_fe_sel.hw 1614*6f809ca8SJian Hu }, 1615*6f809ca8SJian Hu .num_parents = 1, 1616*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1617*6f809ca8SJian Hu }, 1618*6f809ca8SJian Hu }; 1619*6f809ca8SJian Hu 1620*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx1_pixel_sel = { 1621*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1622*6f809ca8SJian Hu .offset = HDMI_CLK_CTRL, 1623*6f809ca8SJian Hu .mask = 0xf, 1624*6f809ca8SJian Hu .shift = 24, 1625*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1626*6f809ca8SJian Hu }, 1627*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1628*6f809ca8SJian Hu .name = "hdmitx1_pixel_sel", 1629*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1630*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1631*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1632*6f809ca8SJian Hu }, 1633*6f809ca8SJian Hu }; 1634*6f809ca8SJian Hu 1635*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx1_pixel = { 1636*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1637*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1638*6f809ca8SJian Hu .bit_idx = 12, 1639*6f809ca8SJian Hu }, 1640*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1641*6f809ca8SJian Hu .name = "hdmitx1_pixel", 1642*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1643*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1644*6f809ca8SJian Hu &a9_hdmitx1_pixel_sel.hw 1645*6f809ca8SJian Hu }, 1646*6f809ca8SJian Hu .num_parents = 1, 1647*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1648*6f809ca8SJian Hu }, 1649*6f809ca8SJian Hu }; 1650*6f809ca8SJian Hu 1651*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx1_fe_sel = { 1652*6f809ca8SJian Hu .data = &(struct clk_regmap_mux_data){ 1653*6f809ca8SJian Hu .offset = HDMI_CLK_CTRL, 1654*6f809ca8SJian Hu .mask = 0xf, 1655*6f809ca8SJian Hu .shift = 28, 1656*6f809ca8SJian Hu .table = a9_vid_parents_val_table, 1657*6f809ca8SJian Hu }, 1658*6f809ca8SJian Hu .hw.init = &(struct clk_init_data){ 1659*6f809ca8SJian Hu .name = "hdmitx1_fe_sel", 1660*6f809ca8SJian Hu .ops = &clk_regmap_mux_ops, 1661*6f809ca8SJian Hu .parent_hws = a9_vid_parents, 1662*6f809ca8SJian Hu .num_parents = ARRAY_SIZE(a9_vid_parents), 1663*6f809ca8SJian Hu }, 1664*6f809ca8SJian Hu }; 1665*6f809ca8SJian Hu 1666*6f809ca8SJian Hu static struct clk_regmap a9_hdmitx1_fe = { 1667*6f809ca8SJian Hu .data = &(struct clk_regmap_gate_data){ 1668*6f809ca8SJian Hu .offset = VID_CLK_CTRL2, 1669*6f809ca8SJian Hu .bit_idx = 13, 1670*6f809ca8SJian Hu }, 1671*6f809ca8SJian Hu .hw.init = &(struct clk_init_data) { 1672*6f809ca8SJian Hu .name = "hdmitx1_fe", 1673*6f809ca8SJian Hu .ops = &clk_regmap_gate_ops, 1674*6f809ca8SJian Hu .parent_hws = (const struct clk_hw *[]) { 1675*6f809ca8SJian Hu &a9_hdmitx1_fe_sel.hw 1676*6f809ca8SJian Hu }, 1677*6f809ca8SJian Hu .num_parents = 1, 1678*6f809ca8SJian Hu .flags = CLK_SET_RATE_PARENT, 1679*6f809ca8SJian Hu }, 1680*6f809ca8SJian Hu }; 1681*6f809ca8SJian Hu 1682*6f809ca8SJian Hu static const struct clk_parent_data a9_csi_phy_parents[] = { 1683*6f809ca8SJian Hu { .fw_name = "fdiv2p5", }, 1684*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1685*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1686*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1687*6f809ca8SJian Hu { .fw_name = "gp0", }, 1688*6f809ca8SJian Hu { .fw_name = "hifi0", }, 1689*6f809ca8SJian Hu { .fw_name = "fdiv2", }, 1690*6f809ca8SJian Hu { .fw_name = "xtal", } 1691*6f809ca8SJian Hu }; 1692*6f809ca8SJian Hu 1693*6f809ca8SJian Hu static A9_COMP_SEL(csi_phy, MIPI_CSI_PHY_CLK_CTRL, 9, 0x7, a9_csi_phy_parents, NULL); 1694*6f809ca8SJian Hu static A9_COMP_DIV(csi_phy, MIPI_CSI_PHY_CLK_CTRL, 0, 7); 1695*6f809ca8SJian Hu static A9_COMP_GATE(csi_phy, MIPI_CSI_PHY_CLK_CTRL, 8, 0); 1696*6f809ca8SJian Hu 1697*6f809ca8SJian Hu static const struct clk_parent_data a9_dsi_meas_parents[] = { 1698*6f809ca8SJian Hu { .fw_name = "xtal", }, 1699*6f809ca8SJian Hu { .fw_name = "fdiv4", }, 1700*6f809ca8SJian Hu { .fw_name = "fdiv3", }, 1701*6f809ca8SJian Hu { .fw_name = "fdiv5", }, 1702*6f809ca8SJian Hu { .hw = &a9_vid_pll.hw }, 1703*6f809ca8SJian Hu { .fw_name = "gp0", }, 1704*6f809ca8SJian Hu { .fw_name = "vid1", }, 1705*6f809ca8SJian Hu { .fw_name = "vid2", } 1706*6f809ca8SJian Hu }; 1707*6f809ca8SJian Hu 1708*6f809ca8SJian Hu static A9_COMP_SEL(dsi0_meas, DSI_MEAS_CLK_CTRL, 9, 0x7, a9_dsi_meas_parents, NULL); 1709*6f809ca8SJian Hu static A9_COMP_DIV(dsi0_meas, DSI_MEAS_CLK_CTRL, 0, 7); 1710*6f809ca8SJian Hu static A9_COMP_GATE(dsi0_meas, DSI_MEAS_CLK_CTRL, 8, 0); 1711*6f809ca8SJian Hu 1712*6f809ca8SJian Hu static A9_COMP_SEL(dsi1_meas, DSI_MEAS_CLK_CTRL, 25, 0x7, a9_dsi_meas_parents, NULL); 1713*6f809ca8SJian Hu static A9_COMP_DIV(dsi1_meas, DSI_MEAS_CLK_CTRL, 16, 7); 1714*6f809ca8SJian Hu static A9_COMP_GATE(dsi1_meas, DSI_MEAS_CLK_CTRL, 24, 0); 1715*6f809ca8SJian Hu 1716*6f809ca8SJian Hu static struct clk_hw *a9_peripherals_hw_clks[] = { 1717*6f809ca8SJian Hu [CLKID_SYS_AM_AXI] = &a9_sys_am_axi.hw, 1718*6f809ca8SJian Hu [CLKID_SYS_DOS] = &a9_sys_dos.hw, 1719*6f809ca8SJian Hu [CLKID_SYS_MIPI_DSI0] = &a9_sys_mipi_dsi0.hw, 1720*6f809ca8SJian Hu [CLKID_SYS_ETH_PHY] = &a9_sys_eth_phy.hw, 1721*6f809ca8SJian Hu [CLKID_SYS_AMFC] = &a9_sys_amfc.hw, 1722*6f809ca8SJian Hu [CLKID_SYS_MALI] = &a9_sys_mali.hw, 1723*6f809ca8SJian Hu [CLKID_SYS_NNA] = &a9_sys_nna.hw, 1724*6f809ca8SJian Hu [CLKID_SYS_ETH_AXI] = &a9_sys_eth_axi.hw, 1725*6f809ca8SJian Hu [CLKID_SYS_DP_APB] = &a9_sys_dp_apb.hw, 1726*6f809ca8SJian Hu [CLKID_SYS_EDPTX_APB] = &a9_sys_edptx_apb.hw, 1727*6f809ca8SJian Hu [CLKID_SYS_U3HSG] = &a9_sys_u3hsg.hw, 1728*6f809ca8SJian Hu [CLKID_SYS_AUCPU] = &a9_sys_aucpu.hw, 1729*6f809ca8SJian Hu [CLKID_SYS_GLB] = &a9_sys_glb.hw, 1730*6f809ca8SJian Hu [CLKID_SYS_COMBO_DPHY_APB] = &a9_sys_combo_dphy_apb.hw, 1731*6f809ca8SJian Hu [CLKID_SYS_HDMIRX_APB] = &a9_sys_hdmirx_apb.hw, 1732*6f809ca8SJian Hu [CLKID_SYS_HDMIRX_PCLK] = &a9_sys_hdmirx_pclk.hw, 1733*6f809ca8SJian Hu [CLKID_SYS_MIPI_DSI0_PHY] = &a9_sys_mipi_dsi0_phy.hw, 1734*6f809ca8SJian Hu [CLKID_SYS_CAN0] = &a9_sys_can0.hw, 1735*6f809ca8SJian Hu [CLKID_SYS_CAN1] = &a9_sys_can1.hw, 1736*6f809ca8SJian Hu [CLKID_SYS_SD_EMMC_A] = &a9_sys_sd_emmc_a.hw, 1737*6f809ca8SJian Hu [CLKID_SYS_SD_EMMC_B] = &a9_sys_sd_emmc_b.hw, 1738*6f809ca8SJian Hu [CLKID_SYS_SD_EMMC_C] = &a9_sys_sd_emmc_c.hw, 1739*6f809ca8SJian Hu [CLKID_SYS_SC] = &a9_sys_sc.hw, 1740*6f809ca8SJian Hu [CLKID_SYS_ACODEC] = &a9_sys_acodec.hw, 1741*6f809ca8SJian Hu [CLKID_SYS_MIPI_ISP] = &a9_sys_mipi_isp.hw, 1742*6f809ca8SJian Hu [CLKID_SYS_MSR] = &a9_sys_msr.hw, 1743*6f809ca8SJian Hu [CLKID_SYS_AUDIO] = &a9_sys_audio.hw, 1744*6f809ca8SJian Hu [CLKID_SYS_MIPI_DSI1] = &a9_sys_mipi_dsi1.hw, 1745*6f809ca8SJian Hu [CLKID_SYS_MIPI_DSI1_PHY] = &a9_sys_mipi_dsi1_phy.hw, 1746*6f809ca8SJian Hu [CLKID_SYS_ETH] = &a9_sys_eth.hw, 1747*6f809ca8SJian Hu [CLKID_SYS_ETH_1G_MAC] = &a9_sys_eth_1g_mac.hw, 1748*6f809ca8SJian Hu [CLKID_SYS_UART_A] = &a9_sys_uart_a.hw, 1749*6f809ca8SJian Hu [CLKID_SYS_UART_F] = &a9_sys_uart_f.hw, 1750*6f809ca8SJian Hu [CLKID_SYS_TS_A55] = &a9_sys_ts_a55.hw, 1751*6f809ca8SJian Hu [CLKID_SYS_ETH_1G_AXI] = &a9_sys_eth_1g_axi.hw, 1752*6f809ca8SJian Hu [CLKID_SYS_TS_DOS] = &a9_sys_ts_dos.hw, 1753*6f809ca8SJian Hu [CLKID_SYS_U3DRD_B] = &a9_sys_u3drd_b.hw, 1754*6f809ca8SJian Hu [CLKID_SYS_TS_CORE] = &a9_sys_ts_core.hw, 1755*6f809ca8SJian Hu [CLKID_SYS_TS_PLL] = &a9_sys_ts_pll.hw, 1756*6f809ca8SJian Hu [CLKID_SYS_CSI_DIG_CLKIN] = &a9_sys_csi_dig_clkin.hw, 1757*6f809ca8SJian Hu [CLKID_SYS_CVE] = &a9_sys_cve.hw, 1758*6f809ca8SJian Hu [CLKID_SYS_GE2D] = &a9_sys_ge2d.hw, 1759*6f809ca8SJian Hu [CLKID_SYS_SPISG] = &a9_sys_spisg.hw, 1760*6f809ca8SJian Hu [CLKID_SYS_U2H] = &a9_sys_u2h.hw, 1761*6f809ca8SJian Hu [CLKID_SYS_PCIE_MAC_A] = &a9_sys_pcie_mac_a.hw, 1762*6f809ca8SJian Hu [CLKID_SYS_U3DRD_A] = &a9_sys_u3drd_a.hw, 1763*6f809ca8SJian Hu [CLKID_SYS_U2DRD] = &a9_sys_u2drd.hw, 1764*6f809ca8SJian Hu [CLKID_SYS_PCIE_PHY] = &a9_sys_pcie_phy.hw, 1765*6f809ca8SJian Hu [CLKID_SYS_PCIE_MAC_B] = &a9_sys_pcie_mac_b.hw, 1766*6f809ca8SJian Hu [CLKID_SYS_PERIPH] = &a9_sys_periph.hw, 1767*6f809ca8SJian Hu [CLKID_SYS_PIO] = &a9_sys_pio.hw, 1768*6f809ca8SJian Hu [CLKID_SYS_I3C] = &a9_sys_i3c.hw, 1769*6f809ca8SJian Hu [CLKID_SYS_I2C_M_E] = &a9_sys_i2c_m_e.hw, 1770*6f809ca8SJian Hu [CLKID_SYS_I2C_M_F] = &a9_sys_i2c_m_f.hw, 1771*6f809ca8SJian Hu [CLKID_SYS_HDMITX_APB] = &a9_sys_hdmitx_apb.hw, 1772*6f809ca8SJian Hu [CLKID_SYS_I2C_M_I] = &a9_sys_i2c_m_i.hw, 1773*6f809ca8SJian Hu [CLKID_SYS_I2C_M_G] = &a9_sys_i2c_m_g.hw, 1774*6f809ca8SJian Hu [CLKID_SYS_I2C_M_H] = &a9_sys_i2c_m_h.hw, 1775*6f809ca8SJian Hu [CLKID_SYS_HDMI20_AES] = &a9_sys_hdmi20_aes.hw, 1776*6f809ca8SJian Hu [CLKID_SYS_CSI2_HOST] = &a9_sys_csi2_host.hw, 1777*6f809ca8SJian Hu [CLKID_SYS_CSI2_ADAPT] = &a9_sys_csi2_adapt.hw, 1778*6f809ca8SJian Hu [CLKID_SYS_DSPA] = &a9_sys_dspa.hw, 1779*6f809ca8SJian Hu [CLKID_SYS_PP_DMA] = &a9_sys_pp_dma.hw, 1780*6f809ca8SJian Hu [CLKID_SYS_PP_WRAPPER] = &a9_sys_pp_wrapper.hw, 1781*6f809ca8SJian Hu [CLKID_SYS_VPU_INTR] = &a9_sys_vpu_intr.hw, 1782*6f809ca8SJian Hu [CLKID_SYS_CSI2_PHY] = &a9_sys_csi2_phy.hw, 1783*6f809ca8SJian Hu [CLKID_SYS_SARADC] = &a9_sys_saradc.hw, 1784*6f809ca8SJian Hu [CLKID_SYS_PWM_J] = &a9_sys_pwm_j.hw, 1785*6f809ca8SJian Hu [CLKID_SYS_PWM_I] = &a9_sys_pwm_i.hw, 1786*6f809ca8SJian Hu [CLKID_SYS_PWM_H] = &a9_sys_pwm_h.hw, 1787*6f809ca8SJian Hu [CLKID_SYS_PWM_N] = &a9_sys_pwm_n.hw, 1788*6f809ca8SJian Hu [CLKID_SYS_PWM_M] = &a9_sys_pwm_m.hw, 1789*6f809ca8SJian Hu [CLKID_SYS_PWM_L] = &a9_sys_pwm_l.hw, 1790*6f809ca8SJian Hu [CLKID_SYS_PWM_K] = &a9_sys_pwm_k.hw, 1791*6f809ca8SJian Hu [CLKID_SD_EMMC_A_SEL] = &a9_sd_emmc_a_sel.hw, 1792*6f809ca8SJian Hu [CLKID_SD_EMMC_A_DIV] = &a9_sd_emmc_a_div.hw, 1793*6f809ca8SJian Hu [CLKID_SD_EMMC_A] = &a9_sd_emmc_a.hw, 1794*6f809ca8SJian Hu [CLKID_SD_EMMC_B_SEL] = &a9_sd_emmc_b_sel.hw, 1795*6f809ca8SJian Hu [CLKID_SD_EMMC_B_DIV] = &a9_sd_emmc_b_div.hw, 1796*6f809ca8SJian Hu [CLKID_SD_EMMC_B] = &a9_sd_emmc_b.hw, 1797*6f809ca8SJian Hu [CLKID_SD_EMMC_C_SEL] = &a9_sd_emmc_c_sel.hw, 1798*6f809ca8SJian Hu [CLKID_SD_EMMC_C_DIV] = &a9_sd_emmc_c_div.hw, 1799*6f809ca8SJian Hu [CLKID_SD_EMMC_C] = &a9_sd_emmc_c.hw, 1800*6f809ca8SJian Hu [CLKID_PWM_H_SEL] = &a9_pwm_h_sel.hw, 1801*6f809ca8SJian Hu [CLKID_PWM_H_DIV] = &a9_pwm_h_div.hw, 1802*6f809ca8SJian Hu [CLKID_PWM_H] = &a9_pwm_h.hw, 1803*6f809ca8SJian Hu [CLKID_PWM_I_SEL] = &a9_pwm_i_sel.hw, 1804*6f809ca8SJian Hu [CLKID_PWM_I_DIV] = &a9_pwm_i_div.hw, 1805*6f809ca8SJian Hu [CLKID_PWM_I] = &a9_pwm_i.hw, 1806*6f809ca8SJian Hu [CLKID_PWM_J_SEL] = &a9_pwm_j_sel.hw, 1807*6f809ca8SJian Hu [CLKID_PWM_J_DIV] = &a9_pwm_j_div.hw, 1808*6f809ca8SJian Hu [CLKID_PWM_J] = &a9_pwm_j.hw, 1809*6f809ca8SJian Hu [CLKID_PWM_K_SEL] = &a9_pwm_k_sel.hw, 1810*6f809ca8SJian Hu [CLKID_PWM_K_DIV] = &a9_pwm_k_div.hw, 1811*6f809ca8SJian Hu [CLKID_PWM_K] = &a9_pwm_k.hw, 1812*6f809ca8SJian Hu [CLKID_PWM_L_SEL] = &a9_pwm_l_sel.hw, 1813*6f809ca8SJian Hu [CLKID_PWM_L_DIV] = &a9_pwm_l_div.hw, 1814*6f809ca8SJian Hu [CLKID_PWM_L] = &a9_pwm_l.hw, 1815*6f809ca8SJian Hu [CLKID_PWM_M_SEL] = &a9_pwm_m_sel.hw, 1816*6f809ca8SJian Hu [CLKID_PWM_M_DIV] = &a9_pwm_m_div.hw, 1817*6f809ca8SJian Hu [CLKID_PWM_M] = &a9_pwm_m.hw, 1818*6f809ca8SJian Hu [CLKID_PWM_N_SEL] = &a9_pwm_n_sel.hw, 1819*6f809ca8SJian Hu [CLKID_PWM_N_DIV] = &a9_pwm_n_div.hw, 1820*6f809ca8SJian Hu [CLKID_PWM_N] = &a9_pwm_n.hw, 1821*6f809ca8SJian Hu [CLKID_SPISG0_SEL] = &a9_spisg0_sel.hw, 1822*6f809ca8SJian Hu [CLKID_SPISG0_DIV] = &a9_spisg0_div.hw, 1823*6f809ca8SJian Hu [CLKID_SPISG0] = &a9_spisg0.hw, 1824*6f809ca8SJian Hu [CLKID_SPISG1_SEL] = &a9_spisg1_sel.hw, 1825*6f809ca8SJian Hu [CLKID_SPISG1_DIV] = &a9_spisg1_div.hw, 1826*6f809ca8SJian Hu [CLKID_SPISG1] = &a9_spisg1.hw, 1827*6f809ca8SJian Hu [CLKID_SPISG2_SEL] = &a9_spisg2_sel.hw, 1828*6f809ca8SJian Hu [CLKID_SPISG2_DIV] = &a9_spisg2_div.hw, 1829*6f809ca8SJian Hu [CLKID_SPISG2] = &a9_spisg2.hw, 1830*6f809ca8SJian Hu [CLKID_SARADC_SEL] = &a9_saradc_sel.hw, 1831*6f809ca8SJian Hu [CLKID_SARADC_DIV] = &a9_saradc_div.hw, 1832*6f809ca8SJian Hu [CLKID_SARADC] = &a9_saradc.hw, 1833*6f809ca8SJian Hu [CLKID_AMFC_SEL] = &a9_amfc_sel.hw, 1834*6f809ca8SJian Hu [CLKID_AMFC_DIV] = &a9_amfc_div.hw, 1835*6f809ca8SJian Hu [CLKID_AMFC] = &a9_amfc.hw, 1836*6f809ca8SJian Hu [CLKID_NNA_SEL] = &a9_nna_sel.hw, 1837*6f809ca8SJian Hu [CLKID_NNA_DIV] = &a9_nna_div.hw, 1838*6f809ca8SJian Hu [CLKID_NNA] = &a9_nna.hw, 1839*6f809ca8SJian Hu [CLKID_USB_250M_SEL] = &a9_usb_250m_sel.hw, 1840*6f809ca8SJian Hu [CLKID_USB_250M_DIV] = &a9_usb_250m_div.hw, 1841*6f809ca8SJian Hu [CLKID_USB_250M] = &a9_usb_250m.hw, 1842*6f809ca8SJian Hu [CLKID_USB_48M_PRE_SEL] = &a9_usb_48m_pre_sel.hw, 1843*6f809ca8SJian Hu [CLKID_USB_48M_PRE_DIV] = &a9_usb_48m_pre_div.hw, 1844*6f809ca8SJian Hu [CLKID_USB_48M_PRE] = &a9_usb_48m_pre.hw, 1845*6f809ca8SJian Hu [CLKID_PCIE0_TL_SEL] = &a9_pcie0_tl_sel.hw, 1846*6f809ca8SJian Hu [CLKID_PCIE0_TL_DIV] = &a9_pcie0_tl_div.hw, 1847*6f809ca8SJian Hu [CLKID_PCIE0_TL] = &a9_pcie0_tl.hw, 1848*6f809ca8SJian Hu [CLKID_PCIE1_TL_SEL] = &a9_pcie1_tl_sel.hw, 1849*6f809ca8SJian Hu [CLKID_PCIE1_TL_DIV] = &a9_pcie1_tl_div.hw, 1850*6f809ca8SJian Hu [CLKID_PCIE1_TL] = &a9_pcie1_tl.hw, 1851*6f809ca8SJian Hu [CLKID_CMPR_SEL] = &a9_cmpr_sel.hw, 1852*6f809ca8SJian Hu [CLKID_CMPR_DIV] = &a9_cmpr_div.hw, 1853*6f809ca8SJian Hu [CLKID_CMPR] = &a9_cmpr.hw, 1854*6f809ca8SJian Hu [CLKID_DEWARPA_SEL] = &a9_dewarpa_sel.hw, 1855*6f809ca8SJian Hu [CLKID_DEWARPA_DIV] = &a9_dewarpa_div.hw, 1856*6f809ca8SJian Hu [CLKID_DEWARPA] = &a9_dewarpa.hw, 1857*6f809ca8SJian Hu [CLKID_SC_PRE_SEL] = &a9_sc_pre_sel.hw, 1858*6f809ca8SJian Hu [CLKID_SC_PRE_DIV] = &a9_sc_pre_div.hw, 1859*6f809ca8SJian Hu [CLKID_SC_PRE] = &a9_sc_pre.hw, 1860*6f809ca8SJian Hu [CLKID_SC] = &a9_sc.hw, 1861*6f809ca8SJian Hu [CLKID_DPTX_APB2_SEL] = &a9_dptx_apb2_sel.hw, 1862*6f809ca8SJian Hu [CLKID_DPTX_APB2_DIV] = &a9_dptx_apb2_div.hw, 1863*6f809ca8SJian Hu [CLKID_DPTX_APB2] = &a9_dptx_apb2.hw, 1864*6f809ca8SJian Hu [CLKID_DPTX_AUD_SEL] = &a9_dptx_aud_sel.hw, 1865*6f809ca8SJian Hu [CLKID_DPTX_AUD_DIV] = &a9_dptx_aud_div.hw, 1866*6f809ca8SJian Hu [CLKID_DPTX_AUD] = &a9_dptx_aud.hw, 1867*6f809ca8SJian Hu [CLKID_ISP_SEL] = &a9_isp_sel.hw, 1868*6f809ca8SJian Hu [CLKID_ISP_DIV] = &a9_isp_div.hw, 1869*6f809ca8SJian Hu [CLKID_ISP] = &a9_isp.hw, 1870*6f809ca8SJian Hu [CLKID_CVE_SEL] = &a9_cve_sel.hw, 1871*6f809ca8SJian Hu [CLKID_CVE_DIV] = &a9_cve_div.hw, 1872*6f809ca8SJian Hu [CLKID_CVE] = &a9_cve.hw, 1873*6f809ca8SJian Hu [CLKID_VGE_SEL] = &a9_vge_sel.hw, 1874*6f809ca8SJian Hu [CLKID_VGE_DIV] = &a9_vge_div.hw, 1875*6f809ca8SJian Hu [CLKID_VGE] = &a9_vge.hw, 1876*6f809ca8SJian Hu [CLKID_PP_SEL] = &a9_pp_sel.hw, 1877*6f809ca8SJian Hu [CLKID_PP_DIV] = &a9_pp_div.hw, 1878*6f809ca8SJian Hu [CLKID_PP] = &a9_pp.hw, 1879*6f809ca8SJian Hu [CLKID_GLB_SEL] = &a9_glb_sel.hw, 1880*6f809ca8SJian Hu [CLKID_GLB_DIV] = &a9_glb_div.hw, 1881*6f809ca8SJian Hu [CLKID_GLB] = &a9_glb.hw, 1882*6f809ca8SJian Hu [CLKID_USB_48M_DUALDIV_IN] = &a9_usb_48m_dualdiv_in.hw, 1883*6f809ca8SJian Hu [CLKID_USB_48M_DUALDIV_DIV] = &a9_usb_48m_dualdiv_div.hw, 1884*6f809ca8SJian Hu [CLKID_USB_48M_DUALDIV_SEL] = &a9_usb_48m_dualdiv_sel.hw, 1885*6f809ca8SJian Hu [CLKID_USB_48M_DUALDIV] = &a9_usb_48m_dualdiv.hw, 1886*6f809ca8SJian Hu [CLKID_USB_48M] = &a9_usb_48m.hw, 1887*6f809ca8SJian Hu [CLKID_CAN0_PE_SEL] = &a9_can0_pe_sel.hw, 1888*6f809ca8SJian Hu [CLKID_CAN0_PE_DIV] = &a9_can0_pe_div.hw, 1889*6f809ca8SJian Hu [CLKID_CAN0_PE] = &a9_can0_pe.hw, 1890*6f809ca8SJian Hu [CLKID_CAN1_PE_SEL] = &a9_can1_pe_sel.hw, 1891*6f809ca8SJian Hu [CLKID_CAN1_PE_DIV] = &a9_can1_pe_div.hw, 1892*6f809ca8SJian Hu [CLKID_CAN1_PE] = &a9_can1_pe.hw, 1893*6f809ca8SJian Hu [CLKID_CAN0_FILTER_SEL] = &a9_can0_filter_sel.hw, 1894*6f809ca8SJian Hu [CLKID_CAN0_FILTER_DIV] = &a9_can0_filter_div.hw, 1895*6f809ca8SJian Hu [CLKID_CAN0_FILTER] = &a9_can0_filter.hw, 1896*6f809ca8SJian Hu [CLKID_CAN1_FILTER_SEL] = &a9_can1_filter_sel.hw, 1897*6f809ca8SJian Hu [CLKID_CAN1_FILTER_DIV] = &a9_can1_filter_div.hw, 1898*6f809ca8SJian Hu [CLKID_CAN1_FILTER] = &a9_can1_filter.hw, 1899*6f809ca8SJian Hu [CLKID_I3C_SEL] = &a9_i3c_sel.hw, 1900*6f809ca8SJian Hu [CLKID_I3C_DIV] = &a9_i3c_div.hw, 1901*6f809ca8SJian Hu [CLKID_I3C] = &a9_i3c.hw, 1902*6f809ca8SJian Hu [CLKID_TS_DIV] = &a9_ts_div.hw, 1903*6f809ca8SJian Hu [CLKID_TS] = &a9_ts.hw, 1904*6f809ca8SJian Hu [CLKID_ETH_125M_DIV] = &a9_eth_125m_div.hw, 1905*6f809ca8SJian Hu [CLKID_ETH_125M] = &a9_eth_125m.hw, 1906*6f809ca8SJian Hu [CLKID_ETH_RMII_SEL] = &a9_eth_rmii_sel.hw, 1907*6f809ca8SJian Hu [CLKID_ETH_RMII_DIV] = &a9_eth_rmii_div.hw, 1908*6f809ca8SJian Hu [CLKID_ETH_RMII] = &a9_eth_rmii.hw, 1909*6f809ca8SJian Hu [CLKID_GEN_SEL] = &a9_gen_sel.hw, 1910*6f809ca8SJian Hu [CLKID_GEN_DIV] = &a9_gen_div.hw, 1911*6f809ca8SJian Hu [CLKID_GEN] = &a9_gen.hw, 1912*6f809ca8SJian Hu [CLKID_CLK24M_IN] = &a9_24m_in.hw, 1913*6f809ca8SJian Hu [CLKID_CLK12_24M] = &a9_12_24m.hw, 1914*6f809ca8SJian Hu [CLKID_MALI_0_SEL] = &a9_mali_0_sel.hw, 1915*6f809ca8SJian Hu [CLKID_MALI_0_DIV] = &a9_mali_0_div.hw, 1916*6f809ca8SJian Hu [CLKID_MALI_0] = &a9_mali_0.hw, 1917*6f809ca8SJian Hu [CLKID_MALI_1_SEL] = &a9_mali_1_sel.hw, 1918*6f809ca8SJian Hu [CLKID_MALI_1_DIV] = &a9_mali_1_div.hw, 1919*6f809ca8SJian Hu [CLKID_MALI_1] = &a9_mali_1.hw, 1920*6f809ca8SJian Hu [CLKID_MALI] = &a9_mali.hw, 1921*6f809ca8SJian Hu [CLKID_MALI_STACK_0_SEL] = &a9_mali_stack_0_sel.hw, 1922*6f809ca8SJian Hu [CLKID_MALI_STACK_0_DIV] = &a9_mali_stack_0_div.hw, 1923*6f809ca8SJian Hu [CLKID_MALI_STACK_0] = &a9_mali_stack_0.hw, 1924*6f809ca8SJian Hu [CLKID_MALI_STACK_1_SEL] = &a9_mali_stack_1_sel.hw, 1925*6f809ca8SJian Hu [CLKID_MALI_STACK_1_DIV] = &a9_mali_stack_1_div.hw, 1926*6f809ca8SJian Hu [CLKID_MALI_STACK_1] = &a9_mali_stack_1.hw, 1927*6f809ca8SJian Hu [CLKID_MALI_STACK] = &a9_mali_stack.hw, 1928*6f809ca8SJian Hu [CLKID_DSPA_0_SEL] = &a9_dspa_0_sel.hw, 1929*6f809ca8SJian Hu [CLKID_DSPA_0_DIV] = &a9_dspa_0_div.hw, 1930*6f809ca8SJian Hu [CLKID_DSPA_0] = &a9_dspa_0.hw, 1931*6f809ca8SJian Hu [CLKID_DSPA_1_SEL] = &a9_dspa_1_sel.hw, 1932*6f809ca8SJian Hu [CLKID_DSPA_1_DIV] = &a9_dspa_1_div.hw, 1933*6f809ca8SJian Hu [CLKID_DSPA_1] = &a9_dspa_1.hw, 1934*6f809ca8SJian Hu [CLKID_DSPA] = &a9_dspa.hw, 1935*6f809ca8SJian Hu [CLKID_HEVCF_0_SEL] = &a9_hevcf_0_sel.hw, 1936*6f809ca8SJian Hu [CLKID_HEVCF_0_DIV] = &a9_hevcf_0_div.hw, 1937*6f809ca8SJian Hu [CLKID_HEVCF_0] = &a9_hevcf_0.hw, 1938*6f809ca8SJian Hu [CLKID_HEVCF_1_SEL] = &a9_hevcf_1_sel.hw, 1939*6f809ca8SJian Hu [CLKID_HEVCF_1_DIV] = &a9_hevcf_1_div.hw, 1940*6f809ca8SJian Hu [CLKID_HEVCF_1] = &a9_hevcf_1.hw, 1941*6f809ca8SJian Hu [CLKID_HEVCF] = &a9_hevcf.hw, 1942*6f809ca8SJian Hu [CLKID_HCODEC_0_SEL] = &a9_hcodec_0_sel.hw, 1943*6f809ca8SJian Hu [CLKID_HCODEC_0_DIV] = &a9_hcodec_0_div.hw, 1944*6f809ca8SJian Hu [CLKID_HCODEC_0] = &a9_hcodec_0.hw, 1945*6f809ca8SJian Hu [CLKID_HCODEC_1_SEL] = &a9_hcodec_1_sel.hw, 1946*6f809ca8SJian Hu [CLKID_HCODEC_1_DIV] = &a9_hcodec_1_div.hw, 1947*6f809ca8SJian Hu [CLKID_HCODEC_1] = &a9_hcodec_1.hw, 1948*6f809ca8SJian Hu [CLKID_HCODEC] = &a9_hcodec.hw, 1949*6f809ca8SJian Hu [CLKID_VPU_0_SEL] = &a9_vpu_0_sel.hw, 1950*6f809ca8SJian Hu [CLKID_VPU_0_DIV] = &a9_vpu_0_div.hw, 1951*6f809ca8SJian Hu [CLKID_VPU_0] = &a9_vpu_0.hw, 1952*6f809ca8SJian Hu [CLKID_VPU_1_SEL] = &a9_vpu_1_sel.hw, 1953*6f809ca8SJian Hu [CLKID_VPU_1_DIV] = &a9_vpu_1_div.hw, 1954*6f809ca8SJian Hu [CLKID_VPU_1] = &a9_vpu_1.hw, 1955*6f809ca8SJian Hu [CLKID_VPU] = &a9_vpu.hw, 1956*6f809ca8SJian Hu [CLKID_VAPB_0_SEL] = &a9_vapb_0_sel.hw, 1957*6f809ca8SJian Hu [CLKID_VAPB_0_DIV] = &a9_vapb_0_div.hw, 1958*6f809ca8SJian Hu [CLKID_VAPB_0] = &a9_vapb_0.hw, 1959*6f809ca8SJian Hu [CLKID_VAPB_1_SEL] = &a9_vapb_1_sel.hw, 1960*6f809ca8SJian Hu [CLKID_VAPB_1_DIV] = &a9_vapb_1_div.hw, 1961*6f809ca8SJian Hu [CLKID_VAPB_1] = &a9_vapb_1.hw, 1962*6f809ca8SJian Hu [CLKID_VAPB] = &a9_vapb.hw, 1963*6f809ca8SJian Hu [CLKID_GE2D] = &a9_ge2d.hw, 1964*6f809ca8SJian Hu [CLKID_VPU_CLKB_TMP_SEL] = &a9_vpu_clkb_tmp_sel.hw, 1965*6f809ca8SJian Hu [CLKID_VPU_CLKB_TMP_DIV] = &a9_vpu_clkb_tmp_div.hw, 1966*6f809ca8SJian Hu [CLKID_VPU_CLKB_TMP] = &a9_vpu_clkb_tmp.hw, 1967*6f809ca8SJian Hu [CLKID_VPU_CLKB_DIV] = &a9_vpu_clkb_div.hw, 1968*6f809ca8SJian Hu [CLKID_VPU_CLKB] = &a9_vpu_clkb.hw, 1969*6f809ca8SJian Hu [CLKID_HDMITX_SYS_SEL] = &a9_hdmitx_sys_sel.hw, 1970*6f809ca8SJian Hu [CLKID_HDMITX_SYS_DIV] = &a9_hdmitx_sys_div.hw, 1971*6f809ca8SJian Hu [CLKID_HDMITX_SYS] = &a9_hdmitx_sys.hw, 1972*6f809ca8SJian Hu [CLKID_HDMITX_PRIF_SEL] = &a9_hdmitx_prif_sel.hw, 1973*6f809ca8SJian Hu [CLKID_HDMITX_PRIF_DIV] = &a9_hdmitx_prif_div.hw, 1974*6f809ca8SJian Hu [CLKID_HDMITX_PRIF] = &a9_hdmitx_prif.hw, 1975*6f809ca8SJian Hu [CLKID_HDMITX_200M_SEL] = &a9_hdmitx_200m_sel.hw, 1976*6f809ca8SJian Hu [CLKID_HDMITX_200M_DIV] = &a9_hdmitx_200m_div.hw, 1977*6f809ca8SJian Hu [CLKID_HDMITX_200M] = &a9_hdmitx_200m.hw, 1978*6f809ca8SJian Hu [CLKID_HDMITX_AUD_SEL] = &a9_hdmitx_aud_sel.hw, 1979*6f809ca8SJian Hu [CLKID_HDMITX_AUD_DIV] = &a9_hdmitx_aud_div.hw, 1980*6f809ca8SJian Hu [CLKID_HDMITX_AUD] = &a9_hdmitx_aud.hw, 1981*6f809ca8SJian Hu [CLKID_HDMIRX_5M_SEL] = &a9_hdmirx_5m_sel.hw, 1982*6f809ca8SJian Hu [CLKID_HDMIRX_5M_DIV] = &a9_hdmirx_5m_div.hw, 1983*6f809ca8SJian Hu [CLKID_HDMIRX_5M] = &a9_hdmirx_5m.hw, 1984*6f809ca8SJian Hu [CLKID_HDMIRX_2M_SEL] = &a9_hdmirx_2m_sel.hw, 1985*6f809ca8SJian Hu [CLKID_HDMIRX_2M_DIV] = &a9_hdmirx_2m_div.hw, 1986*6f809ca8SJian Hu [CLKID_HDMIRX_2M] = &a9_hdmirx_2m.hw, 1987*6f809ca8SJian Hu [CLKID_HDMIRX_CFG_SEL] = &a9_hdmirx_cfg_sel.hw, 1988*6f809ca8SJian Hu [CLKID_HDMIRX_CFG_DIV] = &a9_hdmirx_cfg_div.hw, 1989*6f809ca8SJian Hu [CLKID_HDMIRX_CFG] = &a9_hdmirx_cfg.hw, 1990*6f809ca8SJian Hu [CLKID_HDMIRX_HDCP2X_SEL] = &a9_hdmirx_hdcp2x_sel.hw, 1991*6f809ca8SJian Hu [CLKID_HDMIRX_HDCP2X_DIV] = &a9_hdmirx_hdcp2x_div.hw, 1992*6f809ca8SJian Hu [CLKID_HDMIRX_HDCP2X] = &a9_hdmirx_hdcp2x.hw, 1993*6f809ca8SJian Hu [CLKID_HDMIRX_ACR_REF_SEL] = &a9_hdmirx_acr_ref_sel.hw, 1994*6f809ca8SJian Hu [CLKID_HDMIRX_ACR_REF_DIV] = &a9_hdmirx_acr_ref_div.hw, 1995*6f809ca8SJian Hu [CLKID_HDMIRX_ACR_REF] = &a9_hdmirx_acr_ref.hw, 1996*6f809ca8SJian Hu [CLKID_HDMIRX_METER_SEL] = &a9_hdmirx_meter_sel.hw, 1997*6f809ca8SJian Hu [CLKID_HDMIRX_METER_DIV] = &a9_hdmirx_meter_div.hw, 1998*6f809ca8SJian Hu [CLKID_HDMIRX_METER] = &a9_hdmirx_meter.hw, 1999*6f809ca8SJian Hu [CLKID_VID_LOCK_SEL] = &a9_vid_lock_sel.hw, 2000*6f809ca8SJian Hu [CLKID_VID_LOCK_DIV] = &a9_vid_lock_div.hw, 2001*6f809ca8SJian Hu [CLKID_VID_LOCK] = &a9_vid_lock.hw, 2002*6f809ca8SJian Hu [CLKID_VDIN_MEAS_SEL] = &a9_vdin_meas_sel.hw, 2003*6f809ca8SJian Hu [CLKID_VDIN_MEAS_DIV] = &a9_vdin_meas_div.hw, 2004*6f809ca8SJian Hu [CLKID_VDIN_MEAS] = &a9_vdin_meas.hw, 2005*6f809ca8SJian Hu [CLKID_VID_PLL_DIV] = &a9_vid_pll_div.hw, 2006*6f809ca8SJian Hu [CLKID_VID_PLL_SEL] = &a9_vid_pll_sel.hw, 2007*6f809ca8SJian Hu [CLKID_VID_PLL] = &a9_vid_pll.hw, 2008*6f809ca8SJian Hu [CLKID_VID_PLL_VCLK] = &a9_vid_pll_vclk.hw, 2009*6f809ca8SJian Hu [CLKID_VCLK0_SEL] = &a9_vclk0_sel.hw, 2010*6f809ca8SJian Hu [CLKID_VCLK0_IN] = &a9_vclk0_in.hw, 2011*6f809ca8SJian Hu [CLKID_VCLK0_DIV] = &a9_vclk0_div.hw, 2012*6f809ca8SJian Hu [CLKID_VCLK0] = &a9_vclk0.hw, 2013*6f809ca8SJian Hu [CLKID_VCLK0_DIV1_EN] = &a9_vclk0_div1_en.hw, 2014*6f809ca8SJian Hu [CLKID_VCLK0_DIV2_EN] = &a9_vclk0_div2_en.hw, 2015*6f809ca8SJian Hu [CLKID_VCLK0_DIV2] = &a9_vclk0_div2.hw, 2016*6f809ca8SJian Hu [CLKID_VCLK0_DIV4_EN] = &a9_vclk0_div4_en.hw, 2017*6f809ca8SJian Hu [CLKID_VCLK0_DIV4] = &a9_vclk0_div4.hw, 2018*6f809ca8SJian Hu [CLKID_VCLK0_DIV6_EN] = &a9_vclk0_div6_en.hw, 2019*6f809ca8SJian Hu [CLKID_VCLK0_DIV6] = &a9_vclk0_div6.hw, 2020*6f809ca8SJian Hu [CLKID_VCLK0_DIV12_EN] = &a9_vclk0_div12_en.hw, 2021*6f809ca8SJian Hu [CLKID_VCLK0_DIV12] = &a9_vclk0_div12.hw, 2022*6f809ca8SJian Hu [CLKID_VCLK1_SEL] = &a9_vclk1_sel.hw, 2023*6f809ca8SJian Hu [CLKID_VCLK1_IN] = &a9_vclk1_in.hw, 2024*6f809ca8SJian Hu [CLKID_VCLK1_DIV] = &a9_vclk1_div.hw, 2025*6f809ca8SJian Hu [CLKID_VCLK1] = &a9_vclk1.hw, 2026*6f809ca8SJian Hu [CLKID_VCLK1_DIV1_EN] = &a9_vclk1_div1_en.hw, 2027*6f809ca8SJian Hu [CLKID_VCLK1_DIV2_EN] = &a9_vclk1_div2_en.hw, 2028*6f809ca8SJian Hu [CLKID_VCLK1_DIV2] = &a9_vclk1_div2.hw, 2029*6f809ca8SJian Hu [CLKID_VCLK1_DIV4_EN] = &a9_vclk1_div4_en.hw, 2030*6f809ca8SJian Hu [CLKID_VCLK1_DIV4] = &a9_vclk1_div4.hw, 2031*6f809ca8SJian Hu [CLKID_VCLK1_DIV6_EN] = &a9_vclk1_div6_en.hw, 2032*6f809ca8SJian Hu [CLKID_VCLK1_DIV6] = &a9_vclk1_div6.hw, 2033*6f809ca8SJian Hu [CLKID_VCLK1_DIV12_EN] = &a9_vclk1_div12_en.hw, 2034*6f809ca8SJian Hu [CLKID_VCLK1_DIV12] = &a9_vclk1_div12.hw, 2035*6f809ca8SJian Hu [CLKID_VDAC_SEL] = &a9_vdac_sel.hw, 2036*6f809ca8SJian Hu [CLKID_VDAC] = &a9_vdac.hw, 2037*6f809ca8SJian Hu [CLKID_ENCODER0_SEL] = &a9_encoder0_sel.hw, 2038*6f809ca8SJian Hu [CLKID_ENCODER0] = &a9_encoder0.hw, 2039*6f809ca8SJian Hu [CLKID_ENCODER1_SEL] = &a9_encoder1_sel.hw, 2040*6f809ca8SJian Hu [CLKID_ENCODER1] = &a9_encoder1.hw, 2041*6f809ca8SJian Hu [CLKID_HDMITX0_PIXEL_SEL] = &a9_hdmitx0_pixel_sel.hw, 2042*6f809ca8SJian Hu [CLKID_HDMITX0_PIXEL] = &a9_hdmitx0_pixel.hw, 2043*6f809ca8SJian Hu [CLKID_HDMITX0_FE_SEL] = &a9_hdmitx0_fe_sel.hw, 2044*6f809ca8SJian Hu [CLKID_HDMITX0_FE] = &a9_hdmitx0_fe.hw, 2045*6f809ca8SJian Hu [CLKID_HDMITX1_PIXEL_SEL] = &a9_hdmitx1_pixel_sel.hw, 2046*6f809ca8SJian Hu [CLKID_HDMITX1_PIXEL] = &a9_hdmitx1_pixel.hw, 2047*6f809ca8SJian Hu [CLKID_HDMITX1_FE_SEL] = &a9_hdmitx1_fe_sel.hw, 2048*6f809ca8SJian Hu [CLKID_HDMITX1_FE] = &a9_hdmitx1_fe.hw, 2049*6f809ca8SJian Hu [CLKID_CSI_PHY_SEL] = &a9_csi_phy_sel.hw, 2050*6f809ca8SJian Hu [CLKID_CSI_PHY_DIV] = &a9_csi_phy_div.hw, 2051*6f809ca8SJian Hu [CLKID_CSI_PHY] = &a9_csi_phy.hw, 2052*6f809ca8SJian Hu [CLKID_DSI0_MEAS_SEL] = &a9_dsi0_meas_sel.hw, 2053*6f809ca8SJian Hu [CLKID_DSI0_MEAS_DIV] = &a9_dsi0_meas_div.hw, 2054*6f809ca8SJian Hu [CLKID_DSI0_MEAS] = &a9_dsi0_meas.hw, 2055*6f809ca8SJian Hu [CLKID_DSI1_MEAS_SEL] = &a9_dsi1_meas_sel.hw, 2056*6f809ca8SJian Hu [CLKID_DSI1_MEAS_DIV] = &a9_dsi1_meas_div.hw, 2057*6f809ca8SJian Hu [CLKID_DSI1_MEAS] = &a9_dsi1_meas.hw, 2058*6f809ca8SJian Hu }; 2059*6f809ca8SJian Hu 2060*6f809ca8SJian Hu static const struct meson_clkc_data a9_peripherals_clkc_data = { 2061*6f809ca8SJian Hu .hw_clks = { 2062*6f809ca8SJian Hu .hws = a9_peripherals_hw_clks, 2063*6f809ca8SJian Hu .num = ARRAY_SIZE(a9_peripherals_hw_clks), 2064*6f809ca8SJian Hu }, 2065*6f809ca8SJian Hu }; 2066*6f809ca8SJian Hu 2067*6f809ca8SJian Hu static const struct of_device_id a9_peripherals_clkc_match_table[] = { 2068*6f809ca8SJian Hu { 2069*6f809ca8SJian Hu .compatible = "amlogic,a9-peripherals-clkc", 2070*6f809ca8SJian Hu .data = &a9_peripherals_clkc_data, 2071*6f809ca8SJian Hu }, 2072*6f809ca8SJian Hu { /* sentinel */ } 2073*6f809ca8SJian Hu }; 2074*6f809ca8SJian Hu 2075*6f809ca8SJian Hu MODULE_DEVICE_TABLE(of, a9_peripherals_clkc_match_table); 2076*6f809ca8SJian Hu 2077*6f809ca8SJian Hu static struct platform_driver a9_peripherals_clkc_driver = { 2078*6f809ca8SJian Hu .probe = meson_clkc_mmio_probe, 2079*6f809ca8SJian Hu .driver = { 2080*6f809ca8SJian Hu .name = "a9-peripherals-clkc", 2081*6f809ca8SJian Hu .of_match_table = a9_peripherals_clkc_match_table, 2082*6f809ca8SJian Hu }, 2083*6f809ca8SJian Hu }; 2084*6f809ca8SJian Hu module_platform_driver(a9_peripherals_clkc_driver); 2085*6f809ca8SJian Hu 2086*6f809ca8SJian Hu MODULE_DESCRIPTION("Amlogic A9 Peripherals Clock Controller driver"); 2087*6f809ca8SJian Hu MODULE_AUTHOR("Jian Hu <jian.hu@amlogic.com>"); 2088*6f809ca8SJian Hu MODULE_LICENSE("GPL"); 2089*6f809ca8SJian Hu MODULE_IMPORT_NS("CLK_MESON"); 2090