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