1*28bc4229STaniya Das // SPDX-License-Identifier: GPL-2.0-only 2*28bc4229STaniya Das /* 3*28bc4229STaniya Das * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. 4*28bc4229STaniya Das */ 5*28bc4229STaniya Das 6*28bc4229STaniya Das #include <linux/clk-provider.h> 7*28bc4229STaniya Das #include <linux/module.h> 8*28bc4229STaniya Das #include <linux/mod_devicetable.h> 9*28bc4229STaniya Das #include <linux/of.h> 10*28bc4229STaniya Das #include <linux/platform_device.h> 11*28bc4229STaniya Das #include <linux/regmap.h> 12*28bc4229STaniya Das 13*28bc4229STaniya Das #include <dt-bindings/clock/qcom,qcs615-camcc.h> 14*28bc4229STaniya Das 15*28bc4229STaniya Das #include "clk-alpha-pll.h" 16*28bc4229STaniya Das #include "clk-branch.h" 17*28bc4229STaniya Das #include "clk-pll.h" 18*28bc4229STaniya Das #include "clk-rcg.h" 19*28bc4229STaniya Das #include "clk-regmap.h" 20*28bc4229STaniya Das #include "clk-regmap-divider.h" 21*28bc4229STaniya Das #include "clk-regmap-mux.h" 22*28bc4229STaniya Das #include "common.h" 23*28bc4229STaniya Das #include "gdsc.h" 24*28bc4229STaniya Das #include "reset.h" 25*28bc4229STaniya Das 26*28bc4229STaniya Das enum { 27*28bc4229STaniya Das DT_BI_TCXO, 28*28bc4229STaniya Das }; 29*28bc4229STaniya Das 30*28bc4229STaniya Das enum { 31*28bc4229STaniya Das P_BI_TCXO, 32*28bc4229STaniya Das P_CAM_CC_PLL0_OUT_AUX, 33*28bc4229STaniya Das P_CAM_CC_PLL1_OUT_AUX, 34*28bc4229STaniya Das P_CAM_CC_PLL2_OUT_AUX2, 35*28bc4229STaniya Das P_CAM_CC_PLL2_OUT_EARLY, 36*28bc4229STaniya Das P_CAM_CC_PLL3_OUT_MAIN, 37*28bc4229STaniya Das }; 38*28bc4229STaniya Das 39*28bc4229STaniya Das static const struct pll_vco brammo_vco[] = { 40*28bc4229STaniya Das { 500000000, 1250000000, 0 }, 41*28bc4229STaniya Das }; 42*28bc4229STaniya Das 43*28bc4229STaniya Das static const struct pll_vco spark_vco[] = { 44*28bc4229STaniya Das { 1000000000, 2100000000, 0 }, 45*28bc4229STaniya Das { 750000000, 1500000000, 1 }, 46*28bc4229STaniya Das { 500000000, 1000000000, 2 }, 47*28bc4229STaniya Das { 300000000, 500000000, 3 }, 48*28bc4229STaniya Das { 550000000, 1100000000, 4 }, 49*28bc4229STaniya Das }; 50*28bc4229STaniya Das 51*28bc4229STaniya Das /* 600MHz configuration VCO - 2 */ 52*28bc4229STaniya Das static const struct alpha_pll_config cam_cc_pll0_config = { 53*28bc4229STaniya Das .l = 0x1f, 54*28bc4229STaniya Das .alpha_hi = 0x40, 55*28bc4229STaniya Das .alpha_en_mask = BIT(24), 56*28bc4229STaniya Das .vco_val = BIT(21), 57*28bc4229STaniya Das .vco_mask = GENMASK(21, 20), 58*28bc4229STaniya Das .aux_output_mask = BIT(1), 59*28bc4229STaniya Das .config_ctl_val = 0x4001055b, 60*28bc4229STaniya Das .test_ctl_hi_val = 0x1, 61*28bc4229STaniya Das .test_ctl_hi_mask = 0x1, 62*28bc4229STaniya Das }; 63*28bc4229STaniya Das 64*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll0 = { 65*28bc4229STaniya Das .offset = 0x0, 66*28bc4229STaniya Das .config = &cam_cc_pll0_config, 67*28bc4229STaniya Das .vco_table = spark_vco, 68*28bc4229STaniya Das .num_vco = ARRAY_SIZE(spark_vco), 69*28bc4229STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 70*28bc4229STaniya Das .clkr = { 71*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 72*28bc4229STaniya Das .name = "cam_cc_pll0", 73*28bc4229STaniya Das .parent_data = &(const struct clk_parent_data) { 74*28bc4229STaniya Das .index = DT_BI_TCXO, 75*28bc4229STaniya Das }, 76*28bc4229STaniya Das .num_parents = 1, 77*28bc4229STaniya Das .ops = &clk_alpha_pll_ops, 78*28bc4229STaniya Das }, 79*28bc4229STaniya Das }, 80*28bc4229STaniya Das }; 81*28bc4229STaniya Das 82*28bc4229STaniya Das /* 808MHz configuration VCO - 2 */ 83*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll1_config = { 84*28bc4229STaniya Das .l = 0x2a, 85*28bc4229STaniya Das .alpha_hi = 0x15, 86*28bc4229STaniya Das .alpha = 0x55555555, 87*28bc4229STaniya Das .alpha_en_mask = BIT(24), 88*28bc4229STaniya Das .vco_val = BIT(21), 89*28bc4229STaniya Das .vco_mask = GENMASK(21, 20), 90*28bc4229STaniya Das .aux_output_mask = BIT(1), 91*28bc4229STaniya Das .config_ctl_val = 0x4001055b, 92*28bc4229STaniya Das .test_ctl_hi_val = 0x1, 93*28bc4229STaniya Das .test_ctl_hi_mask = 0x1, 94*28bc4229STaniya Das }; 95*28bc4229STaniya Das 96*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll1 = { 97*28bc4229STaniya Das .offset = 0x1000, 98*28bc4229STaniya Das .config = &cam_cc_pll1_config, 99*28bc4229STaniya Das .vco_table = spark_vco, 100*28bc4229STaniya Das .num_vco = ARRAY_SIZE(spark_vco), 101*28bc4229STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 102*28bc4229STaniya Das .clkr = { 103*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 104*28bc4229STaniya Das .name = "cam_cc_pll1", 105*28bc4229STaniya Das .parent_data = &(const struct clk_parent_data) { 106*28bc4229STaniya Das .index = DT_BI_TCXO, 107*28bc4229STaniya Das }, 108*28bc4229STaniya Das .num_parents = 1, 109*28bc4229STaniya Das .ops = &clk_alpha_pll_ops, 110*28bc4229STaniya Das }, 111*28bc4229STaniya Das }, 112*28bc4229STaniya Das }; 113*28bc4229STaniya Das 114*28bc4229STaniya Das /* 960MHz configuration VCO - 0 */ 115*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll2_config = { 116*28bc4229STaniya Das .l = 0x32, 117*28bc4229STaniya Das .vco_val = 0x0, 118*28bc4229STaniya Das .vco_mask = GENMASK(21, 20), 119*28bc4229STaniya Das .early_output_mask = BIT(3), 120*28bc4229STaniya Das .aux2_output_mask = BIT(2), 121*28bc4229STaniya Das .post_div_val = 0x1 << 8, 122*28bc4229STaniya Das .post_div_mask = 0x3 << 8, 123*28bc4229STaniya Das .config_ctl_val = 0x04289, 124*28bc4229STaniya Das .test_ctl_val = 0x08000000, 125*28bc4229STaniya Das .test_ctl_mask = 0x08000000, 126*28bc4229STaniya Das }; 127*28bc4229STaniya Das 128*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll2 = { 129*28bc4229STaniya Das .offset = 0x2000, 130*28bc4229STaniya Das .config = &cam_cc_pll2_config, 131*28bc4229STaniya Das .vco_table = brammo_vco, 132*28bc4229STaniya Das .num_vco = ARRAY_SIZE(brammo_vco), 133*28bc4229STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO], 134*28bc4229STaniya Das .clkr = { 135*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 136*28bc4229STaniya Das .name = "cam_cc_pll2", 137*28bc4229STaniya Das .parent_data = &(const struct clk_parent_data) { 138*28bc4229STaniya Das .index = DT_BI_TCXO, 139*28bc4229STaniya Das }, 140*28bc4229STaniya Das .num_parents = 1, 141*28bc4229STaniya Das .ops = &clk_alpha_pll_ops, 142*28bc4229STaniya Das }, 143*28bc4229STaniya Das }, 144*28bc4229STaniya Das }; 145*28bc4229STaniya Das 146*28bc4229STaniya Das static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux2[] = { 147*28bc4229STaniya Das { 0x1, 2 }, 148*28bc4229STaniya Das { } 149*28bc4229STaniya Das }; 150*28bc4229STaniya Das 151*28bc4229STaniya Das static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux2 = { 152*28bc4229STaniya Das .offset = 0x2000, 153*28bc4229STaniya Das .post_div_shift = 8, 154*28bc4229STaniya Das .post_div_table = post_div_table_cam_cc_pll2_out_aux2, 155*28bc4229STaniya Das .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux2), 156*28bc4229STaniya Das .width = 2, 157*28bc4229STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO], 158*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 159*28bc4229STaniya Das .name = "cam_cc_pll2_out_aux2", 160*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 161*28bc4229STaniya Das &cam_cc_pll2.clkr.hw, 162*28bc4229STaniya Das }, 163*28bc4229STaniya Das .num_parents = 1, 164*28bc4229STaniya Das .ops = &clk_alpha_pll_postdiv_ops, 165*28bc4229STaniya Das }, 166*28bc4229STaniya Das }; 167*28bc4229STaniya Das 168*28bc4229STaniya Das /* 1080MHz configuration - VCO - 0 */ 169*28bc4229STaniya Das static struct alpha_pll_config cam_cc_pll3_config = { 170*28bc4229STaniya Das .l = 0x38, 171*28bc4229STaniya Das .alpha_hi = 0x40, 172*28bc4229STaniya Das .alpha_en_mask = BIT(24), 173*28bc4229STaniya Das .vco_val = 0x0, 174*28bc4229STaniya Das .vco_mask = GENMASK(21, 20), 175*28bc4229STaniya Das .main_output_mask = BIT(0), 176*28bc4229STaniya Das .config_ctl_val = 0x4001055b, 177*28bc4229STaniya Das .test_ctl_hi_val = 0x1, 178*28bc4229STaniya Das .test_ctl_hi_mask = 0x1, 179*28bc4229STaniya Das }; 180*28bc4229STaniya Das 181*28bc4229STaniya Das static struct clk_alpha_pll cam_cc_pll3 = { 182*28bc4229STaniya Das .offset = 0x3000, 183*28bc4229STaniya Das .config = &cam_cc_pll3_config, 184*28bc4229STaniya Das .vco_table = spark_vco, 185*28bc4229STaniya Das .num_vco = ARRAY_SIZE(spark_vco), 186*28bc4229STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 187*28bc4229STaniya Das .clkr = { 188*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 189*28bc4229STaniya Das .name = "cam_cc_pll3", 190*28bc4229STaniya Das .parent_data = &(const struct clk_parent_data) { 191*28bc4229STaniya Das .index = DT_BI_TCXO, 192*28bc4229STaniya Das }, 193*28bc4229STaniya Das .num_parents = 1, 194*28bc4229STaniya Das .ops = &clk_alpha_pll_ops, 195*28bc4229STaniya Das }, 196*28bc4229STaniya Das }, 197*28bc4229STaniya Das }; 198*28bc4229STaniya Das 199*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_0[] = { 200*28bc4229STaniya Das { P_BI_TCXO, 0 }, 201*28bc4229STaniya Das { P_CAM_CC_PLL1_OUT_AUX, 2 }, 202*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 203*28bc4229STaniya Das }; 204*28bc4229STaniya Das 205*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_0[] = { 206*28bc4229STaniya Das { .index = DT_BI_TCXO }, 207*28bc4229STaniya Das { .hw = &cam_cc_pll1.clkr.hw }, 208*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 209*28bc4229STaniya Das }; 210*28bc4229STaniya Das 211*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_1[] = { 212*28bc4229STaniya Das { P_BI_TCXO, 0 }, 213*28bc4229STaniya Das { P_CAM_CC_PLL2_OUT_EARLY, 4 }, 214*28bc4229STaniya Das { P_CAM_CC_PLL3_OUT_MAIN, 5 }, 215*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 216*28bc4229STaniya Das }; 217*28bc4229STaniya Das 218*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_1[] = { 219*28bc4229STaniya Das { .index = DT_BI_TCXO }, 220*28bc4229STaniya Das { .hw = &cam_cc_pll2.clkr.hw }, 221*28bc4229STaniya Das { .hw = &cam_cc_pll3.clkr.hw }, 222*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 223*28bc4229STaniya Das }; 224*28bc4229STaniya Das 225*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_2[] = { 226*28bc4229STaniya Das { P_BI_TCXO, 0 }, 227*28bc4229STaniya Das { P_CAM_CC_PLL1_OUT_AUX, 2 }, 228*28bc4229STaniya Das { P_CAM_CC_PLL2_OUT_EARLY, 4 }, 229*28bc4229STaniya Das { P_CAM_CC_PLL3_OUT_MAIN, 5 }, 230*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 231*28bc4229STaniya Das }; 232*28bc4229STaniya Das 233*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_2[] = { 234*28bc4229STaniya Das { .index = DT_BI_TCXO }, 235*28bc4229STaniya Das { .hw = &cam_cc_pll1.clkr.hw }, 236*28bc4229STaniya Das { .hw = &cam_cc_pll2.clkr.hw }, 237*28bc4229STaniya Das { .hw = &cam_cc_pll3.clkr.hw }, 238*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 239*28bc4229STaniya Das }; 240*28bc4229STaniya Das 241*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_3[] = { 242*28bc4229STaniya Das { P_BI_TCXO, 0 }, 243*28bc4229STaniya Das { P_CAM_CC_PLL2_OUT_AUX2, 1 }, 244*28bc4229STaniya Das }; 245*28bc4229STaniya Das 246*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_3[] = { 247*28bc4229STaniya Das { .index = DT_BI_TCXO }, 248*28bc4229STaniya Das { .hw = &cam_cc_pll2_out_aux2.clkr.hw }, 249*28bc4229STaniya Das }; 250*28bc4229STaniya Das 251*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_4[] = { 252*28bc4229STaniya Das { P_BI_TCXO, 0 }, 253*28bc4229STaniya Das { P_CAM_CC_PLL3_OUT_MAIN, 5 }, 254*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 255*28bc4229STaniya Das }; 256*28bc4229STaniya Das 257*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_4[] = { 258*28bc4229STaniya Das { .index = DT_BI_TCXO }, 259*28bc4229STaniya Das { .hw = &cam_cc_pll3.clkr.hw }, 260*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 261*28bc4229STaniya Das }; 262*28bc4229STaniya Das 263*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_5[] = { 264*28bc4229STaniya Das { P_BI_TCXO, 0 }, 265*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 266*28bc4229STaniya Das }; 267*28bc4229STaniya Das 268*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_5[] = { 269*28bc4229STaniya Das { .index = DT_BI_TCXO }, 270*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 271*28bc4229STaniya Das }; 272*28bc4229STaniya Das 273*28bc4229STaniya Das static const struct parent_map cam_cc_parent_map_6[] = { 274*28bc4229STaniya Das { P_BI_TCXO, 0 }, 275*28bc4229STaniya Das { P_CAM_CC_PLL1_OUT_AUX, 2 }, 276*28bc4229STaniya Das { P_CAM_CC_PLL3_OUT_MAIN, 5 }, 277*28bc4229STaniya Das { P_CAM_CC_PLL0_OUT_AUX, 6 }, 278*28bc4229STaniya Das }; 279*28bc4229STaniya Das 280*28bc4229STaniya Das static const struct clk_parent_data cam_cc_parent_data_6[] = { 281*28bc4229STaniya Das { .index = DT_BI_TCXO }, 282*28bc4229STaniya Das { .hw = &cam_cc_pll1.clkr.hw }, 283*28bc4229STaniya Das { .hw = &cam_cc_pll3.clkr.hw }, 284*28bc4229STaniya Das { .hw = &cam_cc_pll0.clkr.hw }, 285*28bc4229STaniya Das }; 286*28bc4229STaniya Das 287*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = { 288*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 289*28bc4229STaniya Das F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0), 290*28bc4229STaniya Das F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0), 291*28bc4229STaniya Das F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0), 292*28bc4229STaniya Das F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0), 293*28bc4229STaniya Das F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0), 294*28bc4229STaniya Das { } 295*28bc4229STaniya Das }; 296*28bc4229STaniya Das 297*28bc4229STaniya Das static struct clk_rcg2 cam_cc_bps_clk_src = { 298*28bc4229STaniya Das .cmd_rcgr = 0x6010, 299*28bc4229STaniya Das .mnd_width = 0, 300*28bc4229STaniya Das .hid_width = 5, 301*28bc4229STaniya Das .parent_map = cam_cc_parent_map_1, 302*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_bps_clk_src, 303*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 304*28bc4229STaniya Das .name = "cam_cc_bps_clk_src", 305*28bc4229STaniya Das .parent_data = cam_cc_parent_data_1, 306*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 307*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 308*28bc4229STaniya Das }, 309*28bc4229STaniya Das }; 310*28bc4229STaniya Das 311*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = { 312*28bc4229STaniya Das F(37500000, P_CAM_CC_PLL0_OUT_AUX, 16, 0, 0), 313*28bc4229STaniya Das F(50000000, P_CAM_CC_PLL0_OUT_AUX, 12, 0, 0), 314*28bc4229STaniya Das F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0), 315*28bc4229STaniya Das { } 316*28bc4229STaniya Das }; 317*28bc4229STaniya Das 318*28bc4229STaniya Das static struct clk_rcg2 cam_cc_cci_clk_src = { 319*28bc4229STaniya Das .cmd_rcgr = 0xb0d8, 320*28bc4229STaniya Das .mnd_width = 8, 321*28bc4229STaniya Das .hid_width = 5, 322*28bc4229STaniya Das .parent_map = cam_cc_parent_map_5, 323*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_cci_clk_src, 324*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 325*28bc4229STaniya Das .name = "cam_cc_cci_clk_src", 326*28bc4229STaniya Das .parent_data = cam_cc_parent_data_5, 327*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_5), 328*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 329*28bc4229STaniya Das }, 330*28bc4229STaniya Das }; 331*28bc4229STaniya Das 332*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = { 333*28bc4229STaniya Das F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0), 334*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 335*28bc4229STaniya Das F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0), 336*28bc4229STaniya Das F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0), 337*28bc4229STaniya Das F(384000000, P_CAM_CC_PLL2_OUT_EARLY, 2.5, 0, 0), 338*28bc4229STaniya Das { } 339*28bc4229STaniya Das }; 340*28bc4229STaniya Das 341*28bc4229STaniya Das static struct clk_rcg2 cam_cc_cphy_rx_clk_src = { 342*28bc4229STaniya Das .cmd_rcgr = 0x9064, 343*28bc4229STaniya Das .mnd_width = 0, 344*28bc4229STaniya Das .hid_width = 5, 345*28bc4229STaniya Das .parent_map = cam_cc_parent_map_2, 346*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src, 347*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 348*28bc4229STaniya Das .name = "cam_cc_cphy_rx_clk_src", 349*28bc4229STaniya Das .parent_data = cam_cc_parent_data_2, 350*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 351*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 352*28bc4229STaniya Das }, 353*28bc4229STaniya Das }; 354*28bc4229STaniya Das 355*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = { 356*28bc4229STaniya Das F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0), 357*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 358*28bc4229STaniya Das F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0), 359*28bc4229STaniya Das { } 360*28bc4229STaniya Das }; 361*28bc4229STaniya Das 362*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = { 363*28bc4229STaniya Das .cmd_rcgr = 0x5004, 364*28bc4229STaniya Das .mnd_width = 0, 365*28bc4229STaniya Das .hid_width = 5, 366*28bc4229STaniya Das .parent_map = cam_cc_parent_map_0, 367*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 368*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 369*28bc4229STaniya Das .name = "cam_cc_csi0phytimer_clk_src", 370*28bc4229STaniya Das .parent_data = cam_cc_parent_data_0, 371*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 372*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 373*28bc4229STaniya Das }, 374*28bc4229STaniya Das }; 375*28bc4229STaniya Das 376*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = { 377*28bc4229STaniya Das .cmd_rcgr = 0x5028, 378*28bc4229STaniya Das .mnd_width = 0, 379*28bc4229STaniya Das .hid_width = 5, 380*28bc4229STaniya Das .parent_map = cam_cc_parent_map_0, 381*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 382*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 383*28bc4229STaniya Das .name = "cam_cc_csi1phytimer_clk_src", 384*28bc4229STaniya Das .parent_data = cam_cc_parent_data_0, 385*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 386*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 387*28bc4229STaniya Das }, 388*28bc4229STaniya Das }; 389*28bc4229STaniya Das 390*28bc4229STaniya Das static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = { 391*28bc4229STaniya Das .cmd_rcgr = 0x504c, 392*28bc4229STaniya Das .mnd_width = 0, 393*28bc4229STaniya Das .hid_width = 5, 394*28bc4229STaniya Das .parent_map = cam_cc_parent_map_0, 395*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 396*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 397*28bc4229STaniya Das .name = "cam_cc_csi2phytimer_clk_src", 398*28bc4229STaniya Das .parent_data = cam_cc_parent_data_0, 399*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 400*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 401*28bc4229STaniya Das }, 402*28bc4229STaniya Das }; 403*28bc4229STaniya Das 404*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = { 405*28bc4229STaniya Das F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0), 406*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 407*28bc4229STaniya Das F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0), 408*28bc4229STaniya Das F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0), 409*28bc4229STaniya Das { } 410*28bc4229STaniya Das }; 411*28bc4229STaniya Das 412*28bc4229STaniya Das static struct clk_rcg2 cam_cc_fast_ahb_clk_src = { 413*28bc4229STaniya Das .cmd_rcgr = 0x603c, 414*28bc4229STaniya Das .mnd_width = 0, 415*28bc4229STaniya Das .hid_width = 5, 416*28bc4229STaniya Das .parent_map = cam_cc_parent_map_0, 417*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src, 418*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 419*28bc4229STaniya Das .name = "cam_cc_fast_ahb_clk_src", 420*28bc4229STaniya Das .parent_data = cam_cc_parent_data_0, 421*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 422*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 423*28bc4229STaniya Das }, 424*28bc4229STaniya Das }; 425*28bc4229STaniya Das 426*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = { 427*28bc4229STaniya Das F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0), 428*28bc4229STaniya Das F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0), 429*28bc4229STaniya Das F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0), 430*28bc4229STaniya Das F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0), 431*28bc4229STaniya Das F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0), 432*28bc4229STaniya Das F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0), 433*28bc4229STaniya Das { } 434*28bc4229STaniya Das }; 435*28bc4229STaniya Das 436*28bc4229STaniya Das static struct clk_rcg2 cam_cc_icp_clk_src = { 437*28bc4229STaniya Das .cmd_rcgr = 0xb088, 438*28bc4229STaniya Das .mnd_width = 0, 439*28bc4229STaniya Das .hid_width = 5, 440*28bc4229STaniya Das .parent_map = cam_cc_parent_map_1, 441*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_icp_clk_src, 442*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 443*28bc4229STaniya Das .name = "cam_cc_icp_clk_src", 444*28bc4229STaniya Das .parent_data = cam_cc_parent_data_1, 445*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 446*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 447*28bc4229STaniya Das }, 448*28bc4229STaniya Das }; 449*28bc4229STaniya Das 450*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = { 451*28bc4229STaniya Das F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0), 452*28bc4229STaniya Das F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0), 453*28bc4229STaniya Das F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0), 454*28bc4229STaniya Das F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0), 455*28bc4229STaniya Das F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0), 456*28bc4229STaniya Das { } 457*28bc4229STaniya Das }; 458*28bc4229STaniya Das 459*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_0_clk_src = { 460*28bc4229STaniya Das .cmd_rcgr = 0x9010, 461*28bc4229STaniya Das .mnd_width = 0, 462*28bc4229STaniya Das .hid_width = 5, 463*28bc4229STaniya Das .parent_map = cam_cc_parent_map_4, 464*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_clk_src, 465*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 466*28bc4229STaniya Das .name = "cam_cc_ife_0_clk_src", 467*28bc4229STaniya Das .parent_data = cam_cc_parent_data_4, 468*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_4), 469*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 470*28bc4229STaniya Das }, 471*28bc4229STaniya Das }; 472*28bc4229STaniya Das 473*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = { 474*28bc4229STaniya Das F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0), 475*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 476*28bc4229STaniya Das F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0), 477*28bc4229STaniya Das F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0), 478*28bc4229STaniya Das F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0), 479*28bc4229STaniya Das F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0), 480*28bc4229STaniya Das { } 481*28bc4229STaniya Das }; 482*28bc4229STaniya Das 483*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = { 484*28bc4229STaniya Das .cmd_rcgr = 0x903c, 485*28bc4229STaniya Das .mnd_width = 0, 486*28bc4229STaniya Das .hid_width = 5, 487*28bc4229STaniya Das .parent_map = cam_cc_parent_map_2, 488*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 489*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 490*28bc4229STaniya Das .name = "cam_cc_ife_0_csid_clk_src", 491*28bc4229STaniya Das .parent_data = cam_cc_parent_data_2, 492*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 493*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 494*28bc4229STaniya Das }, 495*28bc4229STaniya Das }; 496*28bc4229STaniya Das 497*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_1_clk_src = { 498*28bc4229STaniya Das .cmd_rcgr = 0xa010, 499*28bc4229STaniya Das .mnd_width = 0, 500*28bc4229STaniya Das .hid_width = 5, 501*28bc4229STaniya Das .parent_map = cam_cc_parent_map_4, 502*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_clk_src, 503*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 504*28bc4229STaniya Das .name = "cam_cc_ife_1_clk_src", 505*28bc4229STaniya Das .parent_data = cam_cc_parent_data_4, 506*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_4), 507*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 508*28bc4229STaniya Das }, 509*28bc4229STaniya Das }; 510*28bc4229STaniya Das 511*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = { 512*28bc4229STaniya Das .cmd_rcgr = 0xa034, 513*28bc4229STaniya Das .mnd_width = 0, 514*28bc4229STaniya Das .hid_width = 5, 515*28bc4229STaniya Das .parent_map = cam_cc_parent_map_2, 516*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 517*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 518*28bc4229STaniya Das .name = "cam_cc_ife_1_csid_clk_src", 519*28bc4229STaniya Das .parent_data = cam_cc_parent_data_2, 520*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 521*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 522*28bc4229STaniya Das }, 523*28bc4229STaniya Das }; 524*28bc4229STaniya Das 525*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_lite_clk_src = { 526*28bc4229STaniya Das .cmd_rcgr = 0xb004, 527*28bc4229STaniya Das .mnd_width = 0, 528*28bc4229STaniya Das .hid_width = 5, 529*28bc4229STaniya Das .parent_map = cam_cc_parent_map_4, 530*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_clk_src, 531*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 532*28bc4229STaniya Das .name = "cam_cc_ife_lite_clk_src", 533*28bc4229STaniya Das .parent_data = cam_cc_parent_data_4, 534*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_4), 535*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 536*28bc4229STaniya Das }, 537*28bc4229STaniya Das }; 538*28bc4229STaniya Das 539*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = { 540*28bc4229STaniya Das .cmd_rcgr = 0xb024, 541*28bc4229STaniya Das .mnd_width = 0, 542*28bc4229STaniya Das .hid_width = 5, 543*28bc4229STaniya Das .parent_map = cam_cc_parent_map_2, 544*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 545*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 546*28bc4229STaniya Das .name = "cam_cc_ife_lite_csid_clk_src", 547*28bc4229STaniya Das .parent_data = cam_cc_parent_data_2, 548*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 549*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 550*28bc4229STaniya Das }, 551*28bc4229STaniya Das }; 552*28bc4229STaniya Das 553*28bc4229STaniya Das static struct clk_rcg2 cam_cc_ipe_0_clk_src = { 554*28bc4229STaniya Das .cmd_rcgr = 0x7010, 555*28bc4229STaniya Das .mnd_width = 0, 556*28bc4229STaniya Das .hid_width = 5, 557*28bc4229STaniya Das .parent_map = cam_cc_parent_map_1, 558*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_icp_clk_src, 559*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 560*28bc4229STaniya Das .name = "cam_cc_ipe_0_clk_src", 561*28bc4229STaniya Das .parent_data = cam_cc_parent_data_1, 562*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 563*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 564*28bc4229STaniya Das }, 565*28bc4229STaniya Das }; 566*28bc4229STaniya Das 567*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = { 568*28bc4229STaniya Das F(66666667, P_CAM_CC_PLL0_OUT_AUX, 9, 0, 0), 569*28bc4229STaniya Das F(133333333, P_CAM_CC_PLL0_OUT_AUX, 4.5, 0, 0), 570*28bc4229STaniya Das F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0), 571*28bc4229STaniya Das F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0), 572*28bc4229STaniya Das F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0), 573*28bc4229STaniya Das F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0), 574*28bc4229STaniya Das { } 575*28bc4229STaniya Das }; 576*28bc4229STaniya Das 577*28bc4229STaniya Das static struct clk_rcg2 cam_cc_jpeg_clk_src = { 578*28bc4229STaniya Das .cmd_rcgr = 0xb04c, 579*28bc4229STaniya Das .mnd_width = 0, 580*28bc4229STaniya Das .hid_width = 5, 581*28bc4229STaniya Das .parent_map = cam_cc_parent_map_1, 582*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_jpeg_clk_src, 583*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 584*28bc4229STaniya Das .name = "cam_cc_jpeg_clk_src", 585*28bc4229STaniya Das .parent_data = cam_cc_parent_data_1, 586*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 587*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 588*28bc4229STaniya Das }, 589*28bc4229STaniya Das }; 590*28bc4229STaniya Das 591*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = { 592*28bc4229STaniya Das F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0), 593*28bc4229STaniya Das F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0), 594*28bc4229STaniya Das F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0), 595*28bc4229STaniya Das F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0), 596*28bc4229STaniya Das { } 597*28bc4229STaniya Das }; 598*28bc4229STaniya Das 599*28bc4229STaniya Das static struct clk_rcg2 cam_cc_lrme_clk_src = { 600*28bc4229STaniya Das .cmd_rcgr = 0xb0f8, 601*28bc4229STaniya Das .mnd_width = 0, 602*28bc4229STaniya Das .hid_width = 5, 603*28bc4229STaniya Das .parent_map = cam_cc_parent_map_6, 604*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_lrme_clk_src, 605*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 606*28bc4229STaniya Das .name = "cam_cc_lrme_clk_src", 607*28bc4229STaniya Das .parent_data = cam_cc_parent_data_6, 608*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_6), 609*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 610*28bc4229STaniya Das }, 611*28bc4229STaniya Das }; 612*28bc4229STaniya Das 613*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = { 614*28bc4229STaniya Das F(19200000, P_BI_TCXO, 1, 0, 0), 615*28bc4229STaniya Das F(24000000, P_CAM_CC_PLL2_OUT_AUX2, 10, 1, 2), 616*28bc4229STaniya Das F(34285714, P_CAM_CC_PLL2_OUT_AUX2, 14, 0, 0), 617*28bc4229STaniya Das { } 618*28bc4229STaniya Das }; 619*28bc4229STaniya Das 620*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk0_clk_src = { 621*28bc4229STaniya Das .cmd_rcgr = 0x4004, 622*28bc4229STaniya Das .mnd_width = 8, 623*28bc4229STaniya Das .hid_width = 5, 624*28bc4229STaniya Das .parent_map = cam_cc_parent_map_3, 625*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 626*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 627*28bc4229STaniya Das .name = "cam_cc_mclk0_clk_src", 628*28bc4229STaniya Das .parent_data = cam_cc_parent_data_3, 629*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 630*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 631*28bc4229STaniya Das }, 632*28bc4229STaniya Das }; 633*28bc4229STaniya Das 634*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk1_clk_src = { 635*28bc4229STaniya Das .cmd_rcgr = 0x4024, 636*28bc4229STaniya Das .mnd_width = 8, 637*28bc4229STaniya Das .hid_width = 5, 638*28bc4229STaniya Das .parent_map = cam_cc_parent_map_3, 639*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 640*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 641*28bc4229STaniya Das .name = "cam_cc_mclk1_clk_src", 642*28bc4229STaniya Das .parent_data = cam_cc_parent_data_3, 643*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 644*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 645*28bc4229STaniya Das }, 646*28bc4229STaniya Das }; 647*28bc4229STaniya Das 648*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk2_clk_src = { 649*28bc4229STaniya Das .cmd_rcgr = 0x4044, 650*28bc4229STaniya Das .mnd_width = 8, 651*28bc4229STaniya Das .hid_width = 5, 652*28bc4229STaniya Das .parent_map = cam_cc_parent_map_3, 653*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 654*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 655*28bc4229STaniya Das .name = "cam_cc_mclk2_clk_src", 656*28bc4229STaniya Das .parent_data = cam_cc_parent_data_3, 657*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 658*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 659*28bc4229STaniya Das }, 660*28bc4229STaniya Das }; 661*28bc4229STaniya Das 662*28bc4229STaniya Das static struct clk_rcg2 cam_cc_mclk3_clk_src = { 663*28bc4229STaniya Das .cmd_rcgr = 0x4064, 664*28bc4229STaniya Das .mnd_width = 8, 665*28bc4229STaniya Das .hid_width = 5, 666*28bc4229STaniya Das .parent_map = cam_cc_parent_map_3, 667*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 668*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 669*28bc4229STaniya Das .name = "cam_cc_mclk3_clk_src", 670*28bc4229STaniya Das .parent_data = cam_cc_parent_data_3, 671*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 672*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 673*28bc4229STaniya Das }, 674*28bc4229STaniya Das }; 675*28bc4229STaniya Das 676*28bc4229STaniya Das static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = { 677*28bc4229STaniya Das F(80000000, P_CAM_CC_PLL0_OUT_AUX, 7.5, 0, 0), 678*28bc4229STaniya Das { } 679*28bc4229STaniya Das }; 680*28bc4229STaniya Das 681*28bc4229STaniya Das static struct clk_rcg2 cam_cc_slow_ahb_clk_src = { 682*28bc4229STaniya Das .cmd_rcgr = 0x6058, 683*28bc4229STaniya Das .mnd_width = 0, 684*28bc4229STaniya Das .hid_width = 5, 685*28bc4229STaniya Das .parent_map = cam_cc_parent_map_0, 686*28bc4229STaniya Das .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src, 687*28bc4229STaniya Das .clkr.hw.init = &(const struct clk_init_data) { 688*28bc4229STaniya Das .name = "cam_cc_slow_ahb_clk_src", 689*28bc4229STaniya Das .parent_data = cam_cc_parent_data_0, 690*28bc4229STaniya Das .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 691*28bc4229STaniya Das .ops = &clk_rcg2_shared_ops, 692*28bc4229STaniya Das }, 693*28bc4229STaniya Das }; 694*28bc4229STaniya Das 695*28bc4229STaniya Das static struct clk_branch cam_cc_bps_ahb_clk = { 696*28bc4229STaniya Das .halt_reg = 0x6070, 697*28bc4229STaniya Das .halt_check = BRANCH_HALT, 698*28bc4229STaniya Das .clkr = { 699*28bc4229STaniya Das .enable_reg = 0x6070, 700*28bc4229STaniya Das .enable_mask = BIT(0), 701*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 702*28bc4229STaniya Das .name = "cam_cc_bps_ahb_clk", 703*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 704*28bc4229STaniya Das &cam_cc_slow_ahb_clk_src.clkr.hw, 705*28bc4229STaniya Das }, 706*28bc4229STaniya Das .num_parents = 1, 707*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 708*28bc4229STaniya Das .ops = &clk_branch2_ops, 709*28bc4229STaniya Das }, 710*28bc4229STaniya Das }, 711*28bc4229STaniya Das }; 712*28bc4229STaniya Das 713*28bc4229STaniya Das static struct clk_branch cam_cc_bps_areg_clk = { 714*28bc4229STaniya Das .halt_reg = 0x6054, 715*28bc4229STaniya Das .halt_check = BRANCH_HALT, 716*28bc4229STaniya Das .clkr = { 717*28bc4229STaniya Das .enable_reg = 0x6054, 718*28bc4229STaniya Das .enable_mask = BIT(0), 719*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 720*28bc4229STaniya Das .name = "cam_cc_bps_areg_clk", 721*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 722*28bc4229STaniya Das &cam_cc_fast_ahb_clk_src.clkr.hw, 723*28bc4229STaniya Das }, 724*28bc4229STaniya Das .num_parents = 1, 725*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 726*28bc4229STaniya Das .ops = &clk_branch2_ops, 727*28bc4229STaniya Das }, 728*28bc4229STaniya Das }, 729*28bc4229STaniya Das }; 730*28bc4229STaniya Das 731*28bc4229STaniya Das static struct clk_branch cam_cc_bps_axi_clk = { 732*28bc4229STaniya Das .halt_reg = 0x6038, 733*28bc4229STaniya Das .halt_check = BRANCH_HALT, 734*28bc4229STaniya Das .clkr = { 735*28bc4229STaniya Das .enable_reg = 0x6038, 736*28bc4229STaniya Das .enable_mask = BIT(0), 737*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 738*28bc4229STaniya Das .name = "cam_cc_bps_axi_clk", 739*28bc4229STaniya Das .ops = &clk_branch2_ops, 740*28bc4229STaniya Das }, 741*28bc4229STaniya Das }, 742*28bc4229STaniya Das }; 743*28bc4229STaniya Das 744*28bc4229STaniya Das static struct clk_branch cam_cc_bps_clk = { 745*28bc4229STaniya Das .halt_reg = 0x6028, 746*28bc4229STaniya Das .halt_check = BRANCH_HALT, 747*28bc4229STaniya Das .clkr = { 748*28bc4229STaniya Das .enable_reg = 0x6028, 749*28bc4229STaniya Das .enable_mask = BIT(0), 750*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 751*28bc4229STaniya Das .name = "cam_cc_bps_clk", 752*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 753*28bc4229STaniya Das &cam_cc_bps_clk_src.clkr.hw, 754*28bc4229STaniya Das }, 755*28bc4229STaniya Das .num_parents = 1, 756*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 757*28bc4229STaniya Das .ops = &clk_branch2_ops, 758*28bc4229STaniya Das }, 759*28bc4229STaniya Das }, 760*28bc4229STaniya Das }; 761*28bc4229STaniya Das 762*28bc4229STaniya Das static struct clk_branch cam_cc_camnoc_axi_clk = { 763*28bc4229STaniya Das .halt_reg = 0xb124, 764*28bc4229STaniya Das .halt_check = BRANCH_HALT, 765*28bc4229STaniya Das .clkr = { 766*28bc4229STaniya Das .enable_reg = 0xb124, 767*28bc4229STaniya Das .enable_mask = BIT(0), 768*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 769*28bc4229STaniya Das .name = "cam_cc_camnoc_axi_clk", 770*28bc4229STaniya Das .ops = &clk_branch2_ops, 771*28bc4229STaniya Das }, 772*28bc4229STaniya Das }, 773*28bc4229STaniya Das }; 774*28bc4229STaniya Das 775*28bc4229STaniya Das static struct clk_branch cam_cc_cci_clk = { 776*28bc4229STaniya Das .halt_reg = 0xb0f0, 777*28bc4229STaniya Das .halt_check = BRANCH_HALT, 778*28bc4229STaniya Das .clkr = { 779*28bc4229STaniya Das .enable_reg = 0xb0f0, 780*28bc4229STaniya Das .enable_mask = BIT(0), 781*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 782*28bc4229STaniya Das .name = "cam_cc_cci_clk", 783*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 784*28bc4229STaniya Das &cam_cc_cci_clk_src.clkr.hw, 785*28bc4229STaniya Das }, 786*28bc4229STaniya Das .num_parents = 1, 787*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 788*28bc4229STaniya Das .ops = &clk_branch2_ops, 789*28bc4229STaniya Das }, 790*28bc4229STaniya Das }, 791*28bc4229STaniya Das }; 792*28bc4229STaniya Das 793*28bc4229STaniya Das static struct clk_branch cam_cc_core_ahb_clk = { 794*28bc4229STaniya Das .halt_reg = 0xb144, 795*28bc4229STaniya Das .halt_check = BRANCH_HALT_VOTED, 796*28bc4229STaniya Das .clkr = { 797*28bc4229STaniya Das .enable_reg = 0xb144, 798*28bc4229STaniya Das .enable_mask = BIT(0), 799*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 800*28bc4229STaniya Das .name = "cam_cc_core_ahb_clk", 801*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 802*28bc4229STaniya Das &cam_cc_slow_ahb_clk_src.clkr.hw, 803*28bc4229STaniya Das }, 804*28bc4229STaniya Das .num_parents = 1, 805*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 806*28bc4229STaniya Das .ops = &clk_branch2_ops, 807*28bc4229STaniya Das }, 808*28bc4229STaniya Das }, 809*28bc4229STaniya Das }; 810*28bc4229STaniya Das 811*28bc4229STaniya Das static struct clk_branch cam_cc_cpas_ahb_clk = { 812*28bc4229STaniya Das .halt_reg = 0xb11c, 813*28bc4229STaniya Das .halt_check = BRANCH_HALT, 814*28bc4229STaniya Das .clkr = { 815*28bc4229STaniya Das .enable_reg = 0xb11c, 816*28bc4229STaniya Das .enable_mask = BIT(0), 817*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 818*28bc4229STaniya Das .name = "cam_cc_cpas_ahb_clk", 819*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 820*28bc4229STaniya Das &cam_cc_slow_ahb_clk_src.clkr.hw, 821*28bc4229STaniya Das }, 822*28bc4229STaniya Das .num_parents = 1, 823*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 824*28bc4229STaniya Das .ops = &clk_branch2_ops, 825*28bc4229STaniya Das }, 826*28bc4229STaniya Das }, 827*28bc4229STaniya Das }; 828*28bc4229STaniya Das 829*28bc4229STaniya Das static struct clk_branch cam_cc_csi0phytimer_clk = { 830*28bc4229STaniya Das .halt_reg = 0x501c, 831*28bc4229STaniya Das .halt_check = BRANCH_HALT, 832*28bc4229STaniya Das .clkr = { 833*28bc4229STaniya Das .enable_reg = 0x501c, 834*28bc4229STaniya Das .enable_mask = BIT(0), 835*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 836*28bc4229STaniya Das .name = "cam_cc_csi0phytimer_clk", 837*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 838*28bc4229STaniya Das &cam_cc_csi0phytimer_clk_src.clkr.hw, 839*28bc4229STaniya Das }, 840*28bc4229STaniya Das .num_parents = 1, 841*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 842*28bc4229STaniya Das .ops = &clk_branch2_ops, 843*28bc4229STaniya Das }, 844*28bc4229STaniya Das }, 845*28bc4229STaniya Das }; 846*28bc4229STaniya Das 847*28bc4229STaniya Das static struct clk_branch cam_cc_csi1phytimer_clk = { 848*28bc4229STaniya Das .halt_reg = 0x5040, 849*28bc4229STaniya Das .halt_check = BRANCH_HALT, 850*28bc4229STaniya Das .clkr = { 851*28bc4229STaniya Das .enable_reg = 0x5040, 852*28bc4229STaniya Das .enable_mask = BIT(0), 853*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 854*28bc4229STaniya Das .name = "cam_cc_csi1phytimer_clk", 855*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 856*28bc4229STaniya Das &cam_cc_csi1phytimer_clk_src.clkr.hw, 857*28bc4229STaniya Das }, 858*28bc4229STaniya Das .num_parents = 1, 859*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 860*28bc4229STaniya Das .ops = &clk_branch2_ops, 861*28bc4229STaniya Das }, 862*28bc4229STaniya Das }, 863*28bc4229STaniya Das }; 864*28bc4229STaniya Das 865*28bc4229STaniya Das static struct clk_branch cam_cc_csi2phytimer_clk = { 866*28bc4229STaniya Das .halt_reg = 0x5064, 867*28bc4229STaniya Das .halt_check = BRANCH_HALT, 868*28bc4229STaniya Das .clkr = { 869*28bc4229STaniya Das .enable_reg = 0x5064, 870*28bc4229STaniya Das .enable_mask = BIT(0), 871*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 872*28bc4229STaniya Das .name = "cam_cc_csi2phytimer_clk", 873*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 874*28bc4229STaniya Das &cam_cc_csi2phytimer_clk_src.clkr.hw, 875*28bc4229STaniya Das }, 876*28bc4229STaniya Das .num_parents = 1, 877*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 878*28bc4229STaniya Das .ops = &clk_branch2_ops, 879*28bc4229STaniya Das }, 880*28bc4229STaniya Das }, 881*28bc4229STaniya Das }; 882*28bc4229STaniya Das 883*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy0_clk = { 884*28bc4229STaniya Das .halt_reg = 0x5020, 885*28bc4229STaniya Das .halt_check = BRANCH_HALT, 886*28bc4229STaniya Das .clkr = { 887*28bc4229STaniya Das .enable_reg = 0x5020, 888*28bc4229STaniya Das .enable_mask = BIT(0), 889*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 890*28bc4229STaniya Das .name = "cam_cc_csiphy0_clk", 891*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 892*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 893*28bc4229STaniya Das }, 894*28bc4229STaniya Das .num_parents = 1, 895*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 896*28bc4229STaniya Das .ops = &clk_branch2_ops, 897*28bc4229STaniya Das }, 898*28bc4229STaniya Das }, 899*28bc4229STaniya Das }; 900*28bc4229STaniya Das 901*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy1_clk = { 902*28bc4229STaniya Das .halt_reg = 0x5044, 903*28bc4229STaniya Das .halt_check = BRANCH_HALT, 904*28bc4229STaniya Das .clkr = { 905*28bc4229STaniya Das .enable_reg = 0x5044, 906*28bc4229STaniya Das .enable_mask = BIT(0), 907*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 908*28bc4229STaniya Das .name = "cam_cc_csiphy1_clk", 909*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 910*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 911*28bc4229STaniya Das }, 912*28bc4229STaniya Das .num_parents = 1, 913*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 914*28bc4229STaniya Das .ops = &clk_branch2_ops, 915*28bc4229STaniya Das }, 916*28bc4229STaniya Das }, 917*28bc4229STaniya Das }; 918*28bc4229STaniya Das 919*28bc4229STaniya Das static struct clk_branch cam_cc_csiphy2_clk = { 920*28bc4229STaniya Das .halt_reg = 0x5068, 921*28bc4229STaniya Das .halt_check = BRANCH_HALT, 922*28bc4229STaniya Das .clkr = { 923*28bc4229STaniya Das .enable_reg = 0x5068, 924*28bc4229STaniya Das .enable_mask = BIT(0), 925*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 926*28bc4229STaniya Das .name = "cam_cc_csiphy2_clk", 927*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 928*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 929*28bc4229STaniya Das }, 930*28bc4229STaniya Das .num_parents = 1, 931*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 932*28bc4229STaniya Das .ops = &clk_branch2_ops, 933*28bc4229STaniya Das }, 934*28bc4229STaniya Das }, 935*28bc4229STaniya Das }; 936*28bc4229STaniya Das 937*28bc4229STaniya Das static struct clk_branch cam_cc_icp_clk = { 938*28bc4229STaniya Das .halt_reg = 0xb0a0, 939*28bc4229STaniya Das .halt_check = BRANCH_HALT, 940*28bc4229STaniya Das .clkr = { 941*28bc4229STaniya Das .enable_reg = 0xb0a0, 942*28bc4229STaniya Das .enable_mask = BIT(0), 943*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 944*28bc4229STaniya Das .name = "cam_cc_icp_clk", 945*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 946*28bc4229STaniya Das &cam_cc_icp_clk_src.clkr.hw, 947*28bc4229STaniya Das }, 948*28bc4229STaniya Das .num_parents = 1, 949*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 950*28bc4229STaniya Das .ops = &clk_branch2_ops, 951*28bc4229STaniya Das }, 952*28bc4229STaniya Das }, 953*28bc4229STaniya Das }; 954*28bc4229STaniya Das 955*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_axi_clk = { 956*28bc4229STaniya Das .halt_reg = 0x9080, 957*28bc4229STaniya Das .halt_check = BRANCH_HALT, 958*28bc4229STaniya Das .clkr = { 959*28bc4229STaniya Das .enable_reg = 0x9080, 960*28bc4229STaniya Das .enable_mask = BIT(0), 961*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 962*28bc4229STaniya Das .name = "cam_cc_ife_0_axi_clk", 963*28bc4229STaniya Das .ops = &clk_branch2_ops, 964*28bc4229STaniya Das }, 965*28bc4229STaniya Das }, 966*28bc4229STaniya Das }; 967*28bc4229STaniya Das 968*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_clk = { 969*28bc4229STaniya Das .halt_reg = 0x9028, 970*28bc4229STaniya Das .halt_check = BRANCH_HALT, 971*28bc4229STaniya Das .clkr = { 972*28bc4229STaniya Das .enable_reg = 0x9028, 973*28bc4229STaniya Das .enable_mask = BIT(0), 974*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 975*28bc4229STaniya Das .name = "cam_cc_ife_0_clk", 976*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 977*28bc4229STaniya Das &cam_cc_ife_0_clk_src.clkr.hw, 978*28bc4229STaniya Das }, 979*28bc4229STaniya Das .num_parents = 1, 980*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 981*28bc4229STaniya Das .ops = &clk_branch2_ops, 982*28bc4229STaniya Das }, 983*28bc4229STaniya Das }, 984*28bc4229STaniya Das }; 985*28bc4229STaniya Das 986*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_cphy_rx_clk = { 987*28bc4229STaniya Das .halt_reg = 0x907c, 988*28bc4229STaniya Das .halt_check = BRANCH_HALT, 989*28bc4229STaniya Das .clkr = { 990*28bc4229STaniya Das .enable_reg = 0x907c, 991*28bc4229STaniya Das .enable_mask = BIT(0), 992*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 993*28bc4229STaniya Das .name = "cam_cc_ife_0_cphy_rx_clk", 994*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 995*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 996*28bc4229STaniya Das }, 997*28bc4229STaniya Das .num_parents = 1, 998*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 999*28bc4229STaniya Das .ops = &clk_branch2_ops, 1000*28bc4229STaniya Das }, 1001*28bc4229STaniya Das }, 1002*28bc4229STaniya Das }; 1003*28bc4229STaniya Das 1004*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_csid_clk = { 1005*28bc4229STaniya Das .halt_reg = 0x9054, 1006*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1007*28bc4229STaniya Das .clkr = { 1008*28bc4229STaniya Das .enable_reg = 0x9054, 1009*28bc4229STaniya Das .enable_mask = BIT(0), 1010*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1011*28bc4229STaniya Das .name = "cam_cc_ife_0_csid_clk", 1012*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1013*28bc4229STaniya Das &cam_cc_ife_0_csid_clk_src.clkr.hw, 1014*28bc4229STaniya Das }, 1015*28bc4229STaniya Das .num_parents = 1, 1016*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1017*28bc4229STaniya Das .ops = &clk_branch2_ops, 1018*28bc4229STaniya Das }, 1019*28bc4229STaniya Das }, 1020*28bc4229STaniya Das }; 1021*28bc4229STaniya Das 1022*28bc4229STaniya Das static struct clk_branch cam_cc_ife_0_dsp_clk = { 1023*28bc4229STaniya Das .halt_reg = 0x9038, 1024*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1025*28bc4229STaniya Das .clkr = { 1026*28bc4229STaniya Das .enable_reg = 0x9038, 1027*28bc4229STaniya Das .enable_mask = BIT(0), 1028*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1029*28bc4229STaniya Das .name = "cam_cc_ife_0_dsp_clk", 1030*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1031*28bc4229STaniya Das &cam_cc_ife_0_clk_src.clkr.hw, 1032*28bc4229STaniya Das }, 1033*28bc4229STaniya Das .num_parents = 1, 1034*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1035*28bc4229STaniya Das .ops = &clk_branch2_ops, 1036*28bc4229STaniya Das }, 1037*28bc4229STaniya Das }, 1038*28bc4229STaniya Das }; 1039*28bc4229STaniya Das 1040*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_axi_clk = { 1041*28bc4229STaniya Das .halt_reg = 0xa058, 1042*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1043*28bc4229STaniya Das .clkr = { 1044*28bc4229STaniya Das .enable_reg = 0xa058, 1045*28bc4229STaniya Das .enable_mask = BIT(0), 1046*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1047*28bc4229STaniya Das .name = "cam_cc_ife_1_axi_clk", 1048*28bc4229STaniya Das .ops = &clk_branch2_ops, 1049*28bc4229STaniya Das }, 1050*28bc4229STaniya Das }, 1051*28bc4229STaniya Das }; 1052*28bc4229STaniya Das 1053*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_clk = { 1054*28bc4229STaniya Das .halt_reg = 0xa028, 1055*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1056*28bc4229STaniya Das .clkr = { 1057*28bc4229STaniya Das .enable_reg = 0xa028, 1058*28bc4229STaniya Das .enable_mask = BIT(0), 1059*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1060*28bc4229STaniya Das .name = "cam_cc_ife_1_clk", 1061*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1062*28bc4229STaniya Das &cam_cc_ife_1_clk_src.clkr.hw, 1063*28bc4229STaniya Das }, 1064*28bc4229STaniya Das .num_parents = 1, 1065*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1066*28bc4229STaniya Das .ops = &clk_branch2_ops, 1067*28bc4229STaniya Das }, 1068*28bc4229STaniya Das }, 1069*28bc4229STaniya Das }; 1070*28bc4229STaniya Das 1071*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_cphy_rx_clk = { 1072*28bc4229STaniya Das .halt_reg = 0xa054, 1073*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1074*28bc4229STaniya Das .clkr = { 1075*28bc4229STaniya Das .enable_reg = 0xa054, 1076*28bc4229STaniya Das .enable_mask = BIT(0), 1077*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1078*28bc4229STaniya Das .name = "cam_cc_ife_1_cphy_rx_clk", 1079*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1080*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 1081*28bc4229STaniya Das }, 1082*28bc4229STaniya Das .num_parents = 1, 1083*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1084*28bc4229STaniya Das .ops = &clk_branch2_ops, 1085*28bc4229STaniya Das }, 1086*28bc4229STaniya Das }, 1087*28bc4229STaniya Das }; 1088*28bc4229STaniya Das 1089*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_csid_clk = { 1090*28bc4229STaniya Das .halt_reg = 0xa04c, 1091*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1092*28bc4229STaniya Das .clkr = { 1093*28bc4229STaniya Das .enable_reg = 0xa04c, 1094*28bc4229STaniya Das .enable_mask = BIT(0), 1095*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1096*28bc4229STaniya Das .name = "cam_cc_ife_1_csid_clk", 1097*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1098*28bc4229STaniya Das &cam_cc_ife_1_csid_clk_src.clkr.hw, 1099*28bc4229STaniya Das }, 1100*28bc4229STaniya Das .num_parents = 1, 1101*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1102*28bc4229STaniya Das .ops = &clk_branch2_ops, 1103*28bc4229STaniya Das }, 1104*28bc4229STaniya Das }, 1105*28bc4229STaniya Das }; 1106*28bc4229STaniya Das 1107*28bc4229STaniya Das static struct clk_branch cam_cc_ife_1_dsp_clk = { 1108*28bc4229STaniya Das .halt_reg = 0xa030, 1109*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1110*28bc4229STaniya Das .clkr = { 1111*28bc4229STaniya Das .enable_reg = 0xa030, 1112*28bc4229STaniya Das .enable_mask = BIT(0), 1113*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1114*28bc4229STaniya Das .name = "cam_cc_ife_1_dsp_clk", 1115*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1116*28bc4229STaniya Das &cam_cc_ife_1_clk_src.clkr.hw, 1117*28bc4229STaniya Das }, 1118*28bc4229STaniya Das .num_parents = 1, 1119*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1120*28bc4229STaniya Das .ops = &clk_branch2_ops, 1121*28bc4229STaniya Das }, 1122*28bc4229STaniya Das }, 1123*28bc4229STaniya Das }; 1124*28bc4229STaniya Das 1125*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_clk = { 1126*28bc4229STaniya Das .halt_reg = 0xb01c, 1127*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1128*28bc4229STaniya Das .clkr = { 1129*28bc4229STaniya Das .enable_reg = 0xb01c, 1130*28bc4229STaniya Das .enable_mask = BIT(0), 1131*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1132*28bc4229STaniya Das .name = "cam_cc_ife_lite_clk", 1133*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1134*28bc4229STaniya Das &cam_cc_ife_lite_clk_src.clkr.hw, 1135*28bc4229STaniya Das }, 1136*28bc4229STaniya Das .num_parents = 1, 1137*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1138*28bc4229STaniya Das .ops = &clk_branch2_ops, 1139*28bc4229STaniya Das }, 1140*28bc4229STaniya Das }, 1141*28bc4229STaniya Das }; 1142*28bc4229STaniya Das 1143*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = { 1144*28bc4229STaniya Das .halt_reg = 0xb044, 1145*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1146*28bc4229STaniya Das .clkr = { 1147*28bc4229STaniya Das .enable_reg = 0xb044, 1148*28bc4229STaniya Das .enable_mask = BIT(0), 1149*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1150*28bc4229STaniya Das .name = "cam_cc_ife_lite_cphy_rx_clk", 1151*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1152*28bc4229STaniya Das &cam_cc_cphy_rx_clk_src.clkr.hw, 1153*28bc4229STaniya Das }, 1154*28bc4229STaniya Das .num_parents = 1, 1155*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1156*28bc4229STaniya Das .ops = &clk_branch2_ops, 1157*28bc4229STaniya Das }, 1158*28bc4229STaniya Das }, 1159*28bc4229STaniya Das }; 1160*28bc4229STaniya Das 1161*28bc4229STaniya Das static struct clk_branch cam_cc_ife_lite_csid_clk = { 1162*28bc4229STaniya Das .halt_reg = 0xb03c, 1163*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1164*28bc4229STaniya Das .clkr = { 1165*28bc4229STaniya Das .enable_reg = 0xb03c, 1166*28bc4229STaniya Das .enable_mask = BIT(0), 1167*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1168*28bc4229STaniya Das .name = "cam_cc_ife_lite_csid_clk", 1169*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1170*28bc4229STaniya Das &cam_cc_ife_lite_csid_clk_src.clkr.hw, 1171*28bc4229STaniya Das }, 1172*28bc4229STaniya Das .num_parents = 1, 1173*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1174*28bc4229STaniya Das .ops = &clk_branch2_ops, 1175*28bc4229STaniya Das }, 1176*28bc4229STaniya Das }, 1177*28bc4229STaniya Das }; 1178*28bc4229STaniya Das 1179*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_ahb_clk = { 1180*28bc4229STaniya Das .halt_reg = 0x7040, 1181*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1182*28bc4229STaniya Das .clkr = { 1183*28bc4229STaniya Das .enable_reg = 0x7040, 1184*28bc4229STaniya Das .enable_mask = BIT(0), 1185*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1186*28bc4229STaniya Das .name = "cam_cc_ipe_0_ahb_clk", 1187*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1188*28bc4229STaniya Das &cam_cc_slow_ahb_clk_src.clkr.hw, 1189*28bc4229STaniya Das }, 1190*28bc4229STaniya Das .num_parents = 1, 1191*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1192*28bc4229STaniya Das .ops = &clk_branch2_ops, 1193*28bc4229STaniya Das }, 1194*28bc4229STaniya Das }, 1195*28bc4229STaniya Das }; 1196*28bc4229STaniya Das 1197*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_areg_clk = { 1198*28bc4229STaniya Das .halt_reg = 0x703c, 1199*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1200*28bc4229STaniya Das .clkr = { 1201*28bc4229STaniya Das .enable_reg = 0x703c, 1202*28bc4229STaniya Das .enable_mask = BIT(0), 1203*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1204*28bc4229STaniya Das .name = "cam_cc_ipe_0_areg_clk", 1205*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1206*28bc4229STaniya Das &cam_cc_fast_ahb_clk_src.clkr.hw, 1207*28bc4229STaniya Das }, 1208*28bc4229STaniya Das .num_parents = 1, 1209*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1210*28bc4229STaniya Das .ops = &clk_branch2_ops, 1211*28bc4229STaniya Das }, 1212*28bc4229STaniya Das }, 1213*28bc4229STaniya Das }; 1214*28bc4229STaniya Das 1215*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_axi_clk = { 1216*28bc4229STaniya Das .halt_reg = 0x7038, 1217*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1218*28bc4229STaniya Das .clkr = { 1219*28bc4229STaniya Das .enable_reg = 0x7038, 1220*28bc4229STaniya Das .enable_mask = BIT(0), 1221*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1222*28bc4229STaniya Das .name = "cam_cc_ipe_0_axi_clk", 1223*28bc4229STaniya Das .ops = &clk_branch2_ops, 1224*28bc4229STaniya Das }, 1225*28bc4229STaniya Das }, 1226*28bc4229STaniya Das }; 1227*28bc4229STaniya Das 1228*28bc4229STaniya Das static struct clk_branch cam_cc_ipe_0_clk = { 1229*28bc4229STaniya Das .halt_reg = 0x7028, 1230*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1231*28bc4229STaniya Das .clkr = { 1232*28bc4229STaniya Das .enable_reg = 0x7028, 1233*28bc4229STaniya Das .enable_mask = BIT(0), 1234*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1235*28bc4229STaniya Das .name = "cam_cc_ipe_0_clk", 1236*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1237*28bc4229STaniya Das &cam_cc_ipe_0_clk_src.clkr.hw, 1238*28bc4229STaniya Das }, 1239*28bc4229STaniya Das .num_parents = 1, 1240*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1241*28bc4229STaniya Das .ops = &clk_branch2_ops, 1242*28bc4229STaniya Das }, 1243*28bc4229STaniya Das }, 1244*28bc4229STaniya Das }; 1245*28bc4229STaniya Das 1246*28bc4229STaniya Das static struct clk_branch cam_cc_jpeg_clk = { 1247*28bc4229STaniya Das .halt_reg = 0xb064, 1248*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1249*28bc4229STaniya Das .clkr = { 1250*28bc4229STaniya Das .enable_reg = 0xb064, 1251*28bc4229STaniya Das .enable_mask = BIT(0), 1252*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1253*28bc4229STaniya Das .name = "cam_cc_jpeg_clk", 1254*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1255*28bc4229STaniya Das &cam_cc_jpeg_clk_src.clkr.hw, 1256*28bc4229STaniya Das }, 1257*28bc4229STaniya Das .num_parents = 1, 1258*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1259*28bc4229STaniya Das .ops = &clk_branch2_ops, 1260*28bc4229STaniya Das }, 1261*28bc4229STaniya Das }, 1262*28bc4229STaniya Das }; 1263*28bc4229STaniya Das 1264*28bc4229STaniya Das static struct clk_branch cam_cc_lrme_clk = { 1265*28bc4229STaniya Das .halt_reg = 0xb110, 1266*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1267*28bc4229STaniya Das .clkr = { 1268*28bc4229STaniya Das .enable_reg = 0xb110, 1269*28bc4229STaniya Das .enable_mask = BIT(0), 1270*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1271*28bc4229STaniya Das .name = "cam_cc_lrme_clk", 1272*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1273*28bc4229STaniya Das &cam_cc_lrme_clk_src.clkr.hw, 1274*28bc4229STaniya Das }, 1275*28bc4229STaniya Das .num_parents = 1, 1276*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1277*28bc4229STaniya Das .ops = &clk_branch2_ops, 1278*28bc4229STaniya Das }, 1279*28bc4229STaniya Das }, 1280*28bc4229STaniya Das }; 1281*28bc4229STaniya Das 1282*28bc4229STaniya Das static struct clk_branch cam_cc_mclk0_clk = { 1283*28bc4229STaniya Das .halt_reg = 0x401c, 1284*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1285*28bc4229STaniya Das .clkr = { 1286*28bc4229STaniya Das .enable_reg = 0x401c, 1287*28bc4229STaniya Das .enable_mask = BIT(0), 1288*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1289*28bc4229STaniya Das .name = "cam_cc_mclk0_clk", 1290*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1291*28bc4229STaniya Das &cam_cc_mclk0_clk_src.clkr.hw, 1292*28bc4229STaniya Das }, 1293*28bc4229STaniya Das .num_parents = 1, 1294*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1295*28bc4229STaniya Das .ops = &clk_branch2_ops, 1296*28bc4229STaniya Das }, 1297*28bc4229STaniya Das }, 1298*28bc4229STaniya Das }; 1299*28bc4229STaniya Das 1300*28bc4229STaniya Das static struct clk_branch cam_cc_mclk1_clk = { 1301*28bc4229STaniya Das .halt_reg = 0x403c, 1302*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1303*28bc4229STaniya Das .clkr = { 1304*28bc4229STaniya Das .enable_reg = 0x403c, 1305*28bc4229STaniya Das .enable_mask = BIT(0), 1306*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1307*28bc4229STaniya Das .name = "cam_cc_mclk1_clk", 1308*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1309*28bc4229STaniya Das &cam_cc_mclk1_clk_src.clkr.hw, 1310*28bc4229STaniya Das }, 1311*28bc4229STaniya Das .num_parents = 1, 1312*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1313*28bc4229STaniya Das .ops = &clk_branch2_ops, 1314*28bc4229STaniya Das }, 1315*28bc4229STaniya Das }, 1316*28bc4229STaniya Das }; 1317*28bc4229STaniya Das 1318*28bc4229STaniya Das static struct clk_branch cam_cc_mclk2_clk = { 1319*28bc4229STaniya Das .halt_reg = 0x405c, 1320*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1321*28bc4229STaniya Das .clkr = { 1322*28bc4229STaniya Das .enable_reg = 0x405c, 1323*28bc4229STaniya Das .enable_mask = BIT(0), 1324*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1325*28bc4229STaniya Das .name = "cam_cc_mclk2_clk", 1326*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1327*28bc4229STaniya Das &cam_cc_mclk2_clk_src.clkr.hw, 1328*28bc4229STaniya Das }, 1329*28bc4229STaniya Das .num_parents = 1, 1330*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1331*28bc4229STaniya Das .ops = &clk_branch2_ops, 1332*28bc4229STaniya Das }, 1333*28bc4229STaniya Das }, 1334*28bc4229STaniya Das }; 1335*28bc4229STaniya Das 1336*28bc4229STaniya Das static struct clk_branch cam_cc_mclk3_clk = { 1337*28bc4229STaniya Das .halt_reg = 0x407c, 1338*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1339*28bc4229STaniya Das .clkr = { 1340*28bc4229STaniya Das .enable_reg = 0x407c, 1341*28bc4229STaniya Das .enable_mask = BIT(0), 1342*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1343*28bc4229STaniya Das .name = "cam_cc_mclk3_clk", 1344*28bc4229STaniya Das .parent_hws = (const struct clk_hw*[]) { 1345*28bc4229STaniya Das &cam_cc_mclk3_clk_src.clkr.hw, 1346*28bc4229STaniya Das }, 1347*28bc4229STaniya Das .num_parents = 1, 1348*28bc4229STaniya Das .flags = CLK_SET_RATE_PARENT, 1349*28bc4229STaniya Das .ops = &clk_branch2_ops, 1350*28bc4229STaniya Das }, 1351*28bc4229STaniya Das }, 1352*28bc4229STaniya Das }; 1353*28bc4229STaniya Das 1354*28bc4229STaniya Das static struct clk_branch cam_cc_soc_ahb_clk = { 1355*28bc4229STaniya Das .halt_reg = 0xb140, 1356*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1357*28bc4229STaniya Das .clkr = { 1358*28bc4229STaniya Das .enable_reg = 0xb140, 1359*28bc4229STaniya Das .enable_mask = BIT(0), 1360*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1361*28bc4229STaniya Das .name = "cam_cc_soc_ahb_clk", 1362*28bc4229STaniya Das .ops = &clk_branch2_ops, 1363*28bc4229STaniya Das }, 1364*28bc4229STaniya Das }, 1365*28bc4229STaniya Das }; 1366*28bc4229STaniya Das 1367*28bc4229STaniya Das static struct clk_branch cam_cc_sys_tmr_clk = { 1368*28bc4229STaniya Das .halt_reg = 0xb0a8, 1369*28bc4229STaniya Das .halt_check = BRANCH_HALT, 1370*28bc4229STaniya Das .clkr = { 1371*28bc4229STaniya Das .enable_reg = 0xb0a8, 1372*28bc4229STaniya Das .enable_mask = BIT(0), 1373*28bc4229STaniya Das .hw.init = &(const struct clk_init_data) { 1374*28bc4229STaniya Das .name = "cam_cc_sys_tmr_clk", 1375*28bc4229STaniya Das .ops = &clk_branch2_ops, 1376*28bc4229STaniya Das }, 1377*28bc4229STaniya Das }, 1378*28bc4229STaniya Das }; 1379*28bc4229STaniya Das 1380*28bc4229STaniya Das static struct gdsc titan_top_gdsc = { 1381*28bc4229STaniya Das .gdscr = 0xb134, 1382*28bc4229STaniya Das .en_rest_wait_val = 0x2, 1383*28bc4229STaniya Das .en_few_wait_val = 0x2, 1384*28bc4229STaniya Das .clk_dis_wait_val = 0xf, 1385*28bc4229STaniya Das .pd = { 1386*28bc4229STaniya Das .name = "titan_top_gdsc", 1387*28bc4229STaniya Das }, 1388*28bc4229STaniya Das .pwrsts = PWRSTS_OFF_ON, 1389*28bc4229STaniya Das .flags = POLL_CFG_GDSCR, 1390*28bc4229STaniya Das }; 1391*28bc4229STaniya Das 1392*28bc4229STaniya Das static struct gdsc bps_gdsc = { 1393*28bc4229STaniya Das .gdscr = 0x6004, 1394*28bc4229STaniya Das .en_rest_wait_val = 0x2, 1395*28bc4229STaniya Das .en_few_wait_val = 0x2, 1396*28bc4229STaniya Das .clk_dis_wait_val = 0xf, 1397*28bc4229STaniya Das .pd = { 1398*28bc4229STaniya Das .name = "bps_gdsc", 1399*28bc4229STaniya Das }, 1400*28bc4229STaniya Das .pwrsts = PWRSTS_OFF_ON, 1401*28bc4229STaniya Das .parent = &titan_top_gdsc.pd, 1402*28bc4229STaniya Das .flags = POLL_CFG_GDSCR, 1403*28bc4229STaniya Das }; 1404*28bc4229STaniya Das 1405*28bc4229STaniya Das static struct gdsc ife_0_gdsc = { 1406*28bc4229STaniya Das .gdscr = 0x9004, 1407*28bc4229STaniya Das .en_rest_wait_val = 0x2, 1408*28bc4229STaniya Das .en_few_wait_val = 0x2, 1409*28bc4229STaniya Das .clk_dis_wait_val = 0xf, 1410*28bc4229STaniya Das .pd = { 1411*28bc4229STaniya Das .name = "ife_0_gdsc", 1412*28bc4229STaniya Das }, 1413*28bc4229STaniya Das .pwrsts = PWRSTS_OFF_ON, 1414*28bc4229STaniya Das .parent = &titan_top_gdsc.pd, 1415*28bc4229STaniya Das .flags = POLL_CFG_GDSCR, 1416*28bc4229STaniya Das }; 1417*28bc4229STaniya Das 1418*28bc4229STaniya Das static struct gdsc ife_1_gdsc = { 1419*28bc4229STaniya Das .gdscr = 0xa004, 1420*28bc4229STaniya Das .en_rest_wait_val = 0x2, 1421*28bc4229STaniya Das .en_few_wait_val = 0x2, 1422*28bc4229STaniya Das .clk_dis_wait_val = 0xf, 1423*28bc4229STaniya Das .pd = { 1424*28bc4229STaniya Das .name = "ife_1_gdsc", 1425*28bc4229STaniya Das }, 1426*28bc4229STaniya Das .pwrsts = PWRSTS_OFF_ON, 1427*28bc4229STaniya Das .parent = &titan_top_gdsc.pd, 1428*28bc4229STaniya Das .flags = POLL_CFG_GDSCR, 1429*28bc4229STaniya Das }; 1430*28bc4229STaniya Das 1431*28bc4229STaniya Das static struct gdsc ipe_0_gdsc = { 1432*28bc4229STaniya Das .gdscr = 0x7004, 1433*28bc4229STaniya Das .en_rest_wait_val = 0x2, 1434*28bc4229STaniya Das .en_few_wait_val = 0x2, 1435*28bc4229STaniya Das .clk_dis_wait_val = 0xf, 1436*28bc4229STaniya Das .pd = { 1437*28bc4229STaniya Das .name = "ipe_0_gdsc", 1438*28bc4229STaniya Das }, 1439*28bc4229STaniya Das .pwrsts = PWRSTS_OFF_ON, 1440*28bc4229STaniya Das .parent = &titan_top_gdsc.pd, 1441*28bc4229STaniya Das .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 1442*28bc4229STaniya Das }; 1443*28bc4229STaniya Das 1444*28bc4229STaniya Das static struct clk_regmap *cam_cc_qcs615_clocks[] = { 1445*28bc4229STaniya Das [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr, 1446*28bc4229STaniya Das [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr, 1447*28bc4229STaniya Das [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr, 1448*28bc4229STaniya Das [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr, 1449*28bc4229STaniya Das [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr, 1450*28bc4229STaniya Das [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr, 1451*28bc4229STaniya Das [CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr, 1452*28bc4229STaniya Das [CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr, 1453*28bc4229STaniya Das [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr, 1454*28bc4229STaniya Das [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr, 1455*28bc4229STaniya Das [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr, 1456*28bc4229STaniya Das [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr, 1457*28bc4229STaniya Das [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr, 1458*28bc4229STaniya Das [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr, 1459*28bc4229STaniya Das [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr, 1460*28bc4229STaniya Das [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr, 1461*28bc4229STaniya Das [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr, 1462*28bc4229STaniya Das [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr, 1463*28bc4229STaniya Das [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr, 1464*28bc4229STaniya Das [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr, 1465*28bc4229STaniya Das [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr, 1466*28bc4229STaniya Das [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr, 1467*28bc4229STaniya Das [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr, 1468*28bc4229STaniya Das [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr, 1469*28bc4229STaniya Das [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr, 1470*28bc4229STaniya Das [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr, 1471*28bc4229STaniya Das [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr, 1472*28bc4229STaniya Das [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr, 1473*28bc4229STaniya Das [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr, 1474*28bc4229STaniya Das [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr, 1475*28bc4229STaniya Das [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr, 1476*28bc4229STaniya Das [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr, 1477*28bc4229STaniya Das [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr, 1478*28bc4229STaniya Das [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr, 1479*28bc4229STaniya Das [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr, 1480*28bc4229STaniya Das [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr, 1481*28bc4229STaniya Das [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr, 1482*28bc4229STaniya Das [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr, 1483*28bc4229STaniya Das [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr, 1484*28bc4229STaniya Das [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr, 1485*28bc4229STaniya Das [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr, 1486*28bc4229STaniya Das [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr, 1487*28bc4229STaniya Das [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr, 1488*28bc4229STaniya Das [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr, 1489*28bc4229STaniya Das [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr, 1490*28bc4229STaniya Das [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr, 1491*28bc4229STaniya Das [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr, 1492*28bc4229STaniya Das [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr, 1493*28bc4229STaniya Das [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr, 1494*28bc4229STaniya Das [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr, 1495*28bc4229STaniya Das [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr, 1496*28bc4229STaniya Das [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr, 1497*28bc4229STaniya Das [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr, 1498*28bc4229STaniya Das [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr, 1499*28bc4229STaniya Das [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr, 1500*28bc4229STaniya Das [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr, 1501*28bc4229STaniya Das [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr, 1502*28bc4229STaniya Das [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr, 1503*28bc4229STaniya Das [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr, 1504*28bc4229STaniya Das [CAM_CC_PLL0] = &cam_cc_pll0.clkr, 1505*28bc4229STaniya Das [CAM_CC_PLL1] = &cam_cc_pll1.clkr, 1506*28bc4229STaniya Das [CAM_CC_PLL2] = &cam_cc_pll2.clkr, 1507*28bc4229STaniya Das [CAM_CC_PLL2_OUT_AUX2] = &cam_cc_pll2_out_aux2.clkr, 1508*28bc4229STaniya Das [CAM_CC_PLL3] = &cam_cc_pll3.clkr, 1509*28bc4229STaniya Das [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr, 1510*28bc4229STaniya Das [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr, 1511*28bc4229STaniya Das [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr, 1512*28bc4229STaniya Das }; 1513*28bc4229STaniya Das 1514*28bc4229STaniya Das static struct gdsc *cam_cc_qcs615_gdscs[] = { 1515*28bc4229STaniya Das [BPS_GDSC] = &bps_gdsc, 1516*28bc4229STaniya Das [IFE_0_GDSC] = &ife_0_gdsc, 1517*28bc4229STaniya Das [IFE_1_GDSC] = &ife_1_gdsc, 1518*28bc4229STaniya Das [IPE_0_GDSC] = &ipe_0_gdsc, 1519*28bc4229STaniya Das [TITAN_TOP_GDSC] = &titan_top_gdsc, 1520*28bc4229STaniya Das }; 1521*28bc4229STaniya Das 1522*28bc4229STaniya Das static const struct qcom_reset_map cam_cc_qcs615_resets[] = { 1523*28bc4229STaniya Das [CAM_CC_BPS_BCR] = { 0x6000 }, 1524*28bc4229STaniya Das [CAM_CC_CAMNOC_BCR] = { 0xb120 }, 1525*28bc4229STaniya Das [CAM_CC_CCI_BCR] = { 0xb0d4 }, 1526*28bc4229STaniya Das [CAM_CC_CPAS_BCR] = { 0xb118 }, 1527*28bc4229STaniya Das [CAM_CC_CSI0PHY_BCR] = { 0x5000 }, 1528*28bc4229STaniya Das [CAM_CC_CSI1PHY_BCR] = { 0x5024 }, 1529*28bc4229STaniya Das [CAM_CC_CSI2PHY_BCR] = { 0x5048 }, 1530*28bc4229STaniya Das [CAM_CC_ICP_BCR] = { 0xb074 }, 1531*28bc4229STaniya Das [CAM_CC_IFE_0_BCR] = { 0x9000 }, 1532*28bc4229STaniya Das [CAM_CC_IFE_1_BCR] = { 0xa000 }, 1533*28bc4229STaniya Das [CAM_CC_IFE_LITE_BCR] = { 0xb000 }, 1534*28bc4229STaniya Das [CAM_CC_IPE_0_BCR] = { 0x7000 }, 1535*28bc4229STaniya Das [CAM_CC_JPEG_BCR] = { 0xb048 }, 1536*28bc4229STaniya Das [CAM_CC_LRME_BCR] = { 0xb0f4 }, 1537*28bc4229STaniya Das [CAM_CC_MCLK0_BCR] = { 0x4000 }, 1538*28bc4229STaniya Das [CAM_CC_MCLK1_BCR] = { 0x4020 }, 1539*28bc4229STaniya Das [CAM_CC_MCLK2_BCR] = { 0x4040 }, 1540*28bc4229STaniya Das [CAM_CC_MCLK3_BCR] = { 0x4060 }, 1541*28bc4229STaniya Das [CAM_CC_TITAN_TOP_BCR] = { 0xb130 }, 1542*28bc4229STaniya Das }; 1543*28bc4229STaniya Das 1544*28bc4229STaniya Das static struct clk_alpha_pll *cam_cc_qcs615_plls[] = { 1545*28bc4229STaniya Das &cam_cc_pll0, 1546*28bc4229STaniya Das &cam_cc_pll1, 1547*28bc4229STaniya Das &cam_cc_pll2, 1548*28bc4229STaniya Das &cam_cc_pll3, 1549*28bc4229STaniya Das }; 1550*28bc4229STaniya Das 1551*28bc4229STaniya Das static const struct regmap_config cam_cc_qcs615_regmap_config = { 1552*28bc4229STaniya Das .reg_bits = 32, 1553*28bc4229STaniya Das .reg_stride = 4, 1554*28bc4229STaniya Das .val_bits = 32, 1555*28bc4229STaniya Das .max_register = 0xd004, 1556*28bc4229STaniya Das .fast_io = true, 1557*28bc4229STaniya Das }; 1558*28bc4229STaniya Das 1559*28bc4229STaniya Das static struct qcom_cc_driver_data cam_cc_qcs615_driver_data = { 1560*28bc4229STaniya Das .alpha_plls = cam_cc_qcs615_plls, 1561*28bc4229STaniya Das .num_alpha_plls = ARRAY_SIZE(cam_cc_qcs615_plls), 1562*28bc4229STaniya Das }; 1563*28bc4229STaniya Das 1564*28bc4229STaniya Das static const struct qcom_cc_desc cam_cc_qcs615_desc = { 1565*28bc4229STaniya Das .config = &cam_cc_qcs615_regmap_config, 1566*28bc4229STaniya Das .clks = cam_cc_qcs615_clocks, 1567*28bc4229STaniya Das .num_clks = ARRAY_SIZE(cam_cc_qcs615_clocks), 1568*28bc4229STaniya Das .resets = cam_cc_qcs615_resets, 1569*28bc4229STaniya Das .num_resets = ARRAY_SIZE(cam_cc_qcs615_resets), 1570*28bc4229STaniya Das .gdscs = cam_cc_qcs615_gdscs, 1571*28bc4229STaniya Das .num_gdscs = ARRAY_SIZE(cam_cc_qcs615_gdscs), 1572*28bc4229STaniya Das .driver_data = &cam_cc_qcs615_driver_data, 1573*28bc4229STaniya Das }; 1574*28bc4229STaniya Das 1575*28bc4229STaniya Das static const struct of_device_id cam_cc_qcs615_match_table[] = { 1576*28bc4229STaniya Das { .compatible = "qcom,qcs615-camcc" }, 1577*28bc4229STaniya Das { } 1578*28bc4229STaniya Das }; 1579*28bc4229STaniya Das MODULE_DEVICE_TABLE(of, cam_cc_qcs615_match_table); 1580*28bc4229STaniya Das 1581*28bc4229STaniya Das static int cam_cc_qcs615_probe(struct platform_device *pdev) 1582*28bc4229STaniya Das { 1583*28bc4229STaniya Das return qcom_cc_probe(pdev, &cam_cc_qcs615_desc); 1584*28bc4229STaniya Das } 1585*28bc4229STaniya Das 1586*28bc4229STaniya Das static struct platform_driver cam_cc_qcs615_driver = { 1587*28bc4229STaniya Das .probe = cam_cc_qcs615_probe, 1588*28bc4229STaniya Das .driver = { 1589*28bc4229STaniya Das .name = "camcc-qcs615", 1590*28bc4229STaniya Das .of_match_table = cam_cc_qcs615_match_table, 1591*28bc4229STaniya Das }, 1592*28bc4229STaniya Das }; 1593*28bc4229STaniya Das 1594*28bc4229STaniya Das module_platform_driver(cam_cc_qcs615_driver); 1595*28bc4229STaniya Das 1596*28bc4229STaniya Das MODULE_DESCRIPTION("QTI CAMCC QCS615 Driver"); 1597*28bc4229STaniya Das MODULE_LICENSE("GPL"); 1598