Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/clk-provider.h>
0007 #include <linux/module.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/regmap.h>
0010 #include <linux/reset-controller.h>
0011 
0012 #include <dt-bindings/clock/qcom,camcc-sm8250.h>
0013 
0014 #include "clk-alpha-pll.h"
0015 #include "clk-branch.h"
0016 #include "clk-rcg.h"
0017 #include "clk-regmap-divider.h"
0018 #include "common.h"
0019 #include "gdsc.h"
0020 #include "reset.h"
0021 
0022 enum {
0023     P_BI_TCXO,
0024     P_CAM_CC_PLL0_OUT_EVEN,
0025     P_CAM_CC_PLL0_OUT_MAIN,
0026     P_CAM_CC_PLL0_OUT_ODD,
0027     P_CAM_CC_PLL1_OUT_EVEN,
0028     P_CAM_CC_PLL2_OUT_EARLY,
0029     P_CAM_CC_PLL2_OUT_MAIN,
0030     P_CAM_CC_PLL3_OUT_EVEN,
0031     P_CAM_CC_PLL4_OUT_EVEN,
0032     P_SLEEP_CLK,
0033 };
0034 
0035 static struct pll_vco lucid_vco[] = {
0036     { 249600000, 2000000000, 0 },
0037 };
0038 
0039 static struct pll_vco zonda_vco[] = {
0040     { 595200000UL, 3600000000UL, 0 },
0041 };
0042 
0043 static const struct alpha_pll_config cam_cc_pll0_config = {
0044     .l = 0x3e,
0045     .alpha = 0x8000,
0046     .config_ctl_val = 0x20485699,
0047     .config_ctl_hi_val = 0x00002261,
0048     .config_ctl_hi1_val = 0x329A699c,
0049     .user_ctl_val = 0x00003100,
0050     .user_ctl_hi_val = 0x00000805,
0051     .user_ctl_hi1_val = 0x00000000,
0052 };
0053 
0054 static struct clk_alpha_pll cam_cc_pll0 = {
0055     .offset = 0x0,
0056     .vco_table = lucid_vco,
0057     .num_vco = ARRAY_SIZE(lucid_vco),
0058     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0059     .clkr = {
0060         .hw.init = &(struct clk_init_data){
0061             .name = "cam_cc_pll0",
0062             .parent_data = &(const struct clk_parent_data){
0063                 .fw_name = "bi_tcxo",
0064             },
0065             .num_parents = 1,
0066             .ops = &clk_alpha_pll_lucid_ops,
0067         },
0068     },
0069 };
0070 
0071 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
0072     { 0x1, 2 },
0073     { }
0074 };
0075 
0076 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
0077     .offset = 0x0,
0078     .post_div_shift = 8,
0079     .post_div_table = post_div_table_cam_cc_pll0_out_even,
0080     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
0081     .width = 4,
0082     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0083     .clkr.hw.init = &(struct clk_init_data){
0084         .name = "cam_cc_pll0_out_even",
0085         .parent_hws = (const struct clk_hw*[]){
0086             &cam_cc_pll0.clkr.hw,
0087         },
0088         .num_parents = 1,
0089         .flags = CLK_SET_RATE_PARENT,
0090         .ops = &clk_alpha_pll_postdiv_lucid_ops,
0091     },
0092 };
0093 
0094 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
0095     { 0x3, 3 },
0096     { }
0097 };
0098 
0099 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
0100     .offset = 0x0,
0101     .post_div_shift = 12,
0102     .post_div_table = post_div_table_cam_cc_pll0_out_odd,
0103     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
0104     .width = 4,
0105     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0106     .clkr.hw.init = &(struct clk_init_data){
0107         .name = "cam_cc_pll0_out_odd",
0108         .parent_hws = (const struct clk_hw*[]){
0109             &cam_cc_pll0.clkr.hw,
0110         },
0111         .num_parents = 1,
0112         .flags = CLK_SET_RATE_PARENT,
0113         .ops = &clk_alpha_pll_postdiv_lucid_ops,
0114     },
0115 };
0116 
0117 static const struct alpha_pll_config cam_cc_pll1_config = {
0118     .l = 0x1f,
0119     .alpha = 0x4000,
0120     .config_ctl_val = 0x20485699,
0121     .config_ctl_hi_val = 0x00002261,
0122     .config_ctl_hi1_val = 0x329A699c,
0123     .user_ctl_val = 0x00000100,
0124     .user_ctl_hi_val = 0x00000805,
0125     .user_ctl_hi1_val = 0x00000000,
0126 };
0127 
0128 static struct clk_alpha_pll cam_cc_pll1 = {
0129     .offset = 0x1000,
0130     .vco_table = lucid_vco,
0131     .num_vco = ARRAY_SIZE(lucid_vco),
0132     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0133     .clkr = {
0134         .hw.init = &(struct clk_init_data){
0135             .name = "cam_cc_pll1",
0136             .parent_data = &(const struct clk_parent_data){
0137                 .fw_name = "bi_tcxo",
0138             },
0139             .num_parents = 1,
0140             .ops = &clk_alpha_pll_lucid_ops,
0141         },
0142     },
0143 };
0144 
0145 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
0146     { 0x1, 2 },
0147     { }
0148 };
0149 
0150 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
0151     .offset = 0x1000,
0152     .post_div_shift = 8,
0153     .post_div_table = post_div_table_cam_cc_pll1_out_even,
0154     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
0155     .width = 4,
0156     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0157     .clkr.hw.init = &(struct clk_init_data){
0158         .name = "cam_cc_pll1_out_even",
0159         .parent_hws = (const struct clk_hw*[]){
0160             &cam_cc_pll1.clkr.hw,
0161         },
0162         .num_parents = 1,
0163         .flags = CLK_SET_RATE_PARENT,
0164         .ops = &clk_alpha_pll_postdiv_lucid_ops,
0165     },
0166 };
0167 
0168 static const struct alpha_pll_config cam_cc_pll2_config = {
0169     .l = 0x4b,
0170     .alpha = 0x0,
0171     .config_ctl_val = 0x08200920,
0172     .config_ctl_hi_val = 0x05002015,
0173     .config_ctl_hi1_val = 0x00000000,
0174     .user_ctl_val = 0x00000100,
0175     .user_ctl_hi_val = 0x00000000,
0176     .user_ctl_hi1_val = 0x00000000,
0177 };
0178 
0179 static struct clk_alpha_pll cam_cc_pll2 = {
0180     .offset = 0x2000,
0181     .vco_table = zonda_vco,
0182     .num_vco = ARRAY_SIZE(zonda_vco),
0183     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
0184     .clkr = {
0185         .hw.init = &(struct clk_init_data){
0186             .name = "cam_cc_pll2",
0187             .parent_data = &(const struct clk_parent_data){
0188                 .fw_name = "bi_tcxo",
0189             },
0190             .num_parents = 1,
0191             .ops = &clk_alpha_pll_zonda_ops,
0192         },
0193     },
0194 };
0195 
0196 static const struct clk_div_table post_div_table_cam_cc_pll2_out_main[] = {
0197     { 0x1, 2 },
0198     { }
0199 };
0200 
0201 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main = {
0202     .offset = 0x2000,
0203     .post_div_shift = 8,
0204     .post_div_table = post_div_table_cam_cc_pll2_out_main,
0205     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main),
0206     .width = 2,
0207     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
0208     .clkr.hw.init = &(struct clk_init_data){
0209         .name = "cam_cc_pll2_out_main",
0210         .parent_hws = (const struct clk_hw*[]){
0211             &cam_cc_pll2.clkr.hw,
0212         },
0213         .num_parents = 1,
0214         .flags = CLK_SET_RATE_PARENT,
0215         .ops = &clk_alpha_pll_postdiv_zonda_ops,
0216     },
0217 };
0218 
0219 static const struct alpha_pll_config cam_cc_pll3_config = {
0220     .l = 0x24,
0221     .alpha = 0x7555,
0222     .config_ctl_val = 0x20485699,
0223     .config_ctl_hi_val = 0x00002261,
0224     .config_ctl_hi1_val = 0x329A699c,
0225     .user_ctl_val = 0x00000100,
0226     .user_ctl_hi_val = 0x00000805,
0227     .user_ctl_hi1_val = 0x00000000,
0228 };
0229 
0230 static struct clk_alpha_pll cam_cc_pll3 = {
0231     .offset = 0x3000,
0232     .vco_table = lucid_vco,
0233     .num_vco = ARRAY_SIZE(lucid_vco),
0234     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0235     .clkr = {
0236         .hw.init = &(struct clk_init_data){
0237             .name = "cam_cc_pll3",
0238             .parent_data = &(const struct clk_parent_data){
0239                 .fw_name = "bi_tcxo",
0240             },
0241             .num_parents = 1,
0242             .ops = &clk_alpha_pll_lucid_ops,
0243         },
0244     },
0245 };
0246 
0247 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
0248     { 0x1, 2 },
0249     { }
0250 };
0251 
0252 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
0253     .offset = 0x3000,
0254     .post_div_shift = 8,
0255     .post_div_table = post_div_table_cam_cc_pll3_out_even,
0256     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
0257     .width = 4,
0258     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0259     .clkr.hw.init = &(struct clk_init_data){
0260         .name = "cam_cc_pll3_out_even",
0261         .parent_hws = (const struct clk_hw*[]){
0262             &cam_cc_pll3.clkr.hw,
0263         },
0264         .num_parents = 1,
0265         .flags = CLK_SET_RATE_PARENT,
0266         .ops = &clk_alpha_pll_postdiv_lucid_ops,
0267     },
0268 };
0269 
0270 static const struct alpha_pll_config cam_cc_pll4_config = {
0271     .l = 0x24,
0272     .alpha = 0x7555,
0273     .config_ctl_val = 0x20485699,
0274     .config_ctl_hi_val = 0x00002261,
0275     .config_ctl_hi1_val = 0x329A699c,
0276     .user_ctl_val = 0x00000100,
0277     .user_ctl_hi_val = 0x00000805,
0278     .user_ctl_hi1_val = 0x00000000,
0279 };
0280 
0281 static struct clk_alpha_pll cam_cc_pll4 = {
0282     .offset = 0x4000,
0283     .vco_table = lucid_vco,
0284     .num_vco = ARRAY_SIZE(lucid_vco),
0285     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0286     .clkr = {
0287         .hw.init = &(struct clk_init_data){
0288             .name = "cam_cc_pll4",
0289             .parent_data = &(const struct clk_parent_data){
0290                 .fw_name = "bi_tcxo",
0291             },
0292             .num_parents = 1,
0293             .ops = &clk_alpha_pll_lucid_ops,
0294         },
0295     },
0296 };
0297 
0298 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
0299     { 0x1, 2 },
0300     { }
0301 };
0302 
0303 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
0304     .offset = 0x4000,
0305     .post_div_shift = 8,
0306     .post_div_table = post_div_table_cam_cc_pll4_out_even,
0307     .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
0308     .width = 4,
0309     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0310     .clkr.hw.init = &(struct clk_init_data){
0311         .name = "cam_cc_pll4_out_even",
0312         .parent_hws = (const struct clk_hw*[]){
0313             &cam_cc_pll4.clkr.hw,
0314         },
0315         .num_parents = 1,
0316         .flags = CLK_SET_RATE_PARENT,
0317         .ops = &clk_alpha_pll_postdiv_lucid_ops,
0318     },
0319 };
0320 
0321 static const struct parent_map cam_cc_parent_map_0[] = {
0322     { P_BI_TCXO, 0 },
0323     { P_CAM_CC_PLL0_OUT_MAIN, 1 },
0324     { P_CAM_CC_PLL0_OUT_EVEN, 2 },
0325     { P_CAM_CC_PLL0_OUT_ODD, 3 },
0326     { P_CAM_CC_PLL2_OUT_MAIN, 5 },
0327 };
0328 
0329 static const struct clk_parent_data cam_cc_parent_data_0[] = {
0330     { .fw_name = "bi_tcxo" },
0331     { .hw = &cam_cc_pll0.clkr.hw },
0332     { .hw = &cam_cc_pll0_out_even.clkr.hw },
0333     { .hw = &cam_cc_pll0_out_odd.clkr.hw },
0334     { .hw = &cam_cc_pll2_out_main.clkr.hw },
0335 };
0336 
0337 static const struct parent_map cam_cc_parent_map_1[] = {
0338     { P_BI_TCXO, 0 },
0339     { P_CAM_CC_PLL2_OUT_EARLY, 5 },
0340 };
0341 
0342 static const struct clk_parent_data cam_cc_parent_data_1[] = {
0343     { .fw_name = "bi_tcxo" },
0344     { .hw = &cam_cc_pll2.clkr.hw },
0345 };
0346 
0347 static const struct parent_map cam_cc_parent_map_2[] = {
0348     { P_BI_TCXO, 0 },
0349     { P_CAM_CC_PLL3_OUT_EVEN, 6 },
0350 };
0351 
0352 static const struct clk_parent_data cam_cc_parent_data_2[] = {
0353     { .fw_name = "bi_tcxo" },
0354     { .hw = &cam_cc_pll3_out_even.clkr.hw },
0355 };
0356 
0357 static const struct parent_map cam_cc_parent_map_3[] = {
0358     { P_BI_TCXO, 0 },
0359     { P_CAM_CC_PLL4_OUT_EVEN, 6 },
0360 };
0361 
0362 static const struct clk_parent_data cam_cc_parent_data_3[] = {
0363     { .fw_name = "bi_tcxo" },
0364     { .hw = &cam_cc_pll4_out_even.clkr.hw },
0365 };
0366 
0367 static const struct parent_map cam_cc_parent_map_4[] = {
0368     { P_BI_TCXO, 0 },
0369     { P_CAM_CC_PLL1_OUT_EVEN, 4 },
0370 };
0371 
0372 static const struct clk_parent_data cam_cc_parent_data_4[] = {
0373     { .fw_name = "bi_tcxo" },
0374     { .hw = &cam_cc_pll1_out_even.clkr.hw },
0375 };
0376 
0377 static const struct parent_map cam_cc_parent_map_5[] = {
0378     { P_SLEEP_CLK, 0 },
0379 };
0380 
0381 static const struct clk_parent_data cam_cc_parent_data_5[] = {
0382     { .fw_name = "sleep_clk" },
0383 };
0384 
0385 static const struct parent_map cam_cc_parent_map_6[] = {
0386     { P_BI_TCXO, 0 },
0387 };
0388 
0389 static const struct clk_parent_data cam_cc_parent_data_6[] = {
0390     { .fw_name = "bi_tcxo" },
0391 };
0392 
0393 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
0394     F(19200000, P_BI_TCXO, 1, 0, 0),
0395     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0396     F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
0397     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0398     F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
0399     F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
0400     { }
0401 };
0402 
0403 static struct clk_rcg2 cam_cc_bps_clk_src = {
0404     .cmd_rcgr = 0x7010,
0405     .mnd_width = 0,
0406     .hid_width = 5,
0407     .parent_map = cam_cc_parent_map_0,
0408     .freq_tbl = ftbl_cam_cc_bps_clk_src,
0409     .clkr.hw.init = &(struct clk_init_data){
0410         .name = "cam_cc_bps_clk_src",
0411         .parent_data = cam_cc_parent_data_0,
0412         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0413         .flags = CLK_SET_RATE_PARENT,
0414         .ops = &clk_rcg2_ops,
0415     },
0416 };
0417 
0418 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
0419     F(19200000, P_BI_TCXO, 1, 0, 0),
0420     F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
0421     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0422     { }
0423 };
0424 
0425 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
0426     .cmd_rcgr = 0xc0f8,
0427     .mnd_width = 0,
0428     .hid_width = 5,
0429     .parent_map = cam_cc_parent_map_0,
0430     .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
0431     .clkr.hw.init = &(struct clk_init_data){
0432         .name = "cam_cc_camnoc_axi_clk_src",
0433         .parent_data = cam_cc_parent_data_0,
0434         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0435         .flags = CLK_SET_RATE_PARENT,
0436         .ops = &clk_rcg2_ops,
0437     },
0438 };
0439 
0440 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
0441     F(19200000, P_BI_TCXO, 1, 0, 0),
0442     F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
0443     { }
0444 };
0445 
0446 static struct clk_rcg2 cam_cc_cci_0_clk_src = {
0447     .cmd_rcgr = 0xc0bc,
0448     .mnd_width = 8,
0449     .hid_width = 5,
0450     .parent_map = cam_cc_parent_map_0,
0451     .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
0452     .clkr.hw.init = &(struct clk_init_data){
0453         .name = "cam_cc_cci_0_clk_src",
0454         .parent_data = cam_cc_parent_data_0,
0455         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0456         .flags = CLK_SET_RATE_PARENT,
0457         .ops = &clk_rcg2_ops,
0458     },
0459 };
0460 
0461 static struct clk_rcg2 cam_cc_cci_1_clk_src = {
0462     .cmd_rcgr = 0xc0d8,
0463     .mnd_width = 8,
0464     .hid_width = 5,
0465     .parent_map = cam_cc_parent_map_0,
0466     .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
0467     .clkr.hw.init = &(struct clk_init_data){
0468         .name = "cam_cc_cci_1_clk_src",
0469         .parent_data = cam_cc_parent_data_0,
0470         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0471         .flags = CLK_SET_RATE_PARENT,
0472         .ops = &clk_rcg2_ops,
0473     },
0474 };
0475 
0476 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
0477     F(19200000, P_BI_TCXO, 1, 0, 0),
0478     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0479     { }
0480 };
0481 
0482 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
0483     .cmd_rcgr = 0xa068,
0484     .mnd_width = 0,
0485     .hid_width = 5,
0486     .parent_map = cam_cc_parent_map_0,
0487     .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
0488     .clkr.hw.init = &(struct clk_init_data){
0489         .name = "cam_cc_cphy_rx_clk_src",
0490         .parent_data = cam_cc_parent_data_0,
0491         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0492         .flags = CLK_SET_RATE_PARENT,
0493         .ops = &clk_rcg2_ops,
0494     },
0495 };
0496 
0497 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
0498     F(19200000, P_BI_TCXO, 1, 0, 0),
0499     F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
0500     { }
0501 };
0502 
0503 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
0504     .cmd_rcgr = 0x6000,
0505     .mnd_width = 0,
0506     .hid_width = 5,
0507     .parent_map = cam_cc_parent_map_0,
0508     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0509     .clkr.hw.init = &(struct clk_init_data){
0510         .name = "cam_cc_csi0phytimer_clk_src",
0511         .parent_data = cam_cc_parent_data_0,
0512         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0513         .flags = CLK_SET_RATE_PARENT,
0514         .ops = &clk_rcg2_ops,
0515     },
0516 };
0517 
0518 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
0519     .cmd_rcgr = 0x6020,
0520     .mnd_width = 0,
0521     .hid_width = 5,
0522     .parent_map = cam_cc_parent_map_0,
0523     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0524     .clkr.hw.init = &(struct clk_init_data){
0525         .name = "cam_cc_csi1phytimer_clk_src",
0526         .parent_data = cam_cc_parent_data_0,
0527         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0528         .flags = CLK_SET_RATE_PARENT,
0529         .ops = &clk_rcg2_ops,
0530     },
0531 };
0532 
0533 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
0534     .cmd_rcgr = 0x6040,
0535     .mnd_width = 0,
0536     .hid_width = 5,
0537     .parent_map = cam_cc_parent_map_0,
0538     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0539     .clkr.hw.init = &(struct clk_init_data){
0540         .name = "cam_cc_csi2phytimer_clk_src",
0541         .parent_data = cam_cc_parent_data_0,
0542         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0543         .flags = CLK_SET_RATE_PARENT,
0544         .ops = &clk_rcg2_ops,
0545     },
0546 };
0547 
0548 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
0549     .cmd_rcgr = 0x6060,
0550     .mnd_width = 0,
0551     .hid_width = 5,
0552     .parent_map = cam_cc_parent_map_0,
0553     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0554     .clkr.hw.init = &(struct clk_init_data){
0555         .name = "cam_cc_csi3phytimer_clk_src",
0556         .parent_data = cam_cc_parent_data_0,
0557         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0558         .flags = CLK_SET_RATE_PARENT,
0559         .ops = &clk_rcg2_ops,
0560     },
0561 };
0562 
0563 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
0564     .cmd_rcgr = 0x6080,
0565     .mnd_width = 0,
0566     .hid_width = 5,
0567     .parent_map = cam_cc_parent_map_0,
0568     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0569     .clkr.hw.init = &(struct clk_init_data){
0570         .name = "cam_cc_csi4phytimer_clk_src",
0571         .parent_data = cam_cc_parent_data_0,
0572         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0573         .flags = CLK_SET_RATE_PARENT,
0574         .ops = &clk_rcg2_ops,
0575     },
0576 };
0577 
0578 static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
0579     .cmd_rcgr = 0x60a0,
0580     .mnd_width = 0,
0581     .hid_width = 5,
0582     .parent_map = cam_cc_parent_map_0,
0583     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0584     .clkr.hw.init = &(struct clk_init_data){
0585         .name = "cam_cc_csi5phytimer_clk_src",
0586         .parent_data = cam_cc_parent_data_0,
0587         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0588         .flags = CLK_SET_RATE_PARENT,
0589         .ops = &clk_rcg2_ops,
0590     },
0591 };
0592 
0593 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
0594     F(19200000, P_BI_TCXO, 1, 0, 0),
0595     F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
0596     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0597     F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
0598     F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
0599     F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
0600     { }
0601 };
0602 
0603 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
0604     .cmd_rcgr = 0x703c,
0605     .mnd_width = 0,
0606     .hid_width = 5,
0607     .parent_map = cam_cc_parent_map_0,
0608     .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
0609     .clkr.hw.init = &(struct clk_init_data){
0610         .name = "cam_cc_fast_ahb_clk_src",
0611         .parent_data = cam_cc_parent_data_0,
0612         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0613         .flags = CLK_SET_RATE_PARENT,
0614         .ops = &clk_rcg2_ops,
0615     },
0616 };
0617 
0618 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
0619     F(19200000, P_BI_TCXO, 1, 0, 0),
0620     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0621     F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
0622     F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
0623     { }
0624 };
0625 
0626 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
0627     .cmd_rcgr = 0xc098,
0628     .mnd_width = 0,
0629     .hid_width = 5,
0630     .parent_map = cam_cc_parent_map_0,
0631     .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
0632     .clkr.hw.init = &(struct clk_init_data){
0633         .name = "cam_cc_fd_core_clk_src",
0634         .parent_data = cam_cc_parent_data_0,
0635         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0636         .flags = CLK_SET_RATE_PARENT,
0637         .ops = &clk_rcg2_ops,
0638     },
0639 };
0640 
0641 static struct clk_rcg2 cam_cc_icp_clk_src = {
0642     .cmd_rcgr = 0xc074,
0643     .mnd_width = 0,
0644     .hid_width = 5,
0645     .parent_map = cam_cc_parent_map_0,
0646     .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
0647     .clkr.hw.init = &(struct clk_init_data){
0648         .name = "cam_cc_icp_clk_src",
0649         .parent_data = cam_cc_parent_data_0,
0650         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0651         .flags = CLK_SET_RATE_PARENT,
0652         .ops = &clk_rcg2_ops,
0653     },
0654 };
0655 
0656 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
0657     F(19200000, P_BI_TCXO, 1, 0, 0),
0658     F(350000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0659     F(475000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0660     F(576000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0661     F(680000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0662     { }
0663 };
0664 
0665 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
0666     .cmd_rcgr = 0xa010,
0667     .mnd_width = 0,
0668     .hid_width = 5,
0669     .parent_map = cam_cc_parent_map_2,
0670     .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
0671     .clkr.hw.init = &(struct clk_init_data){
0672         .name = "cam_cc_ife_0_clk_src",
0673         .parent_data = cam_cc_parent_data_2,
0674         .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
0675         .flags = CLK_SET_RATE_PARENT,
0676         .ops = &clk_rcg2_ops,
0677     },
0678 };
0679 
0680 static struct clk_regmap_div cam_cc_sbi_div_clk_src = {
0681     .reg = 0x9010,
0682     .shift = 0,
0683     .width = 3,
0684     .clkr.hw.init = &(struct clk_init_data) {
0685         .name = "cam_cc_sbi_div_clk_src",
0686         .parent_hws = (const struct clk_hw*[]){
0687             &cam_cc_ife_0_clk_src.clkr.hw,
0688         },
0689         .num_parents = 1,
0690         .flags = CLK_SET_RATE_PARENT,
0691         .ops = &clk_regmap_div_ro_ops,
0692     },
0693 };
0694 
0695 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
0696     F(19200000, P_BI_TCXO, 1, 0, 0),
0697     F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
0698     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0699     { }
0700 };
0701 
0702 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
0703     .cmd_rcgr = 0xa040,
0704     .mnd_width = 0,
0705     .hid_width = 5,
0706     .parent_map = cam_cc_parent_map_0,
0707     .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
0708     .clkr.hw.init = &(struct clk_init_data){
0709         .name = "cam_cc_ife_0_csid_clk_src",
0710         .parent_data = cam_cc_parent_data_0,
0711         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0712         .flags = CLK_SET_RATE_PARENT,
0713         .ops = &clk_rcg2_ops,
0714     },
0715 };
0716 
0717 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
0718     F(19200000, P_BI_TCXO, 1, 0, 0),
0719     F(350000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
0720     F(475000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
0721     F(576000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
0722     F(680000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
0723     { }
0724 };
0725 
0726 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
0727     .cmd_rcgr = 0xb010,
0728     .mnd_width = 0,
0729     .hid_width = 5,
0730     .parent_map = cam_cc_parent_map_3,
0731     .freq_tbl = ftbl_cam_cc_ife_1_clk_src,
0732     .clkr.hw.init = &(struct clk_init_data){
0733         .name = "cam_cc_ife_1_clk_src",
0734         .parent_data = cam_cc_parent_data_3,
0735         .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
0736         .flags = CLK_SET_RATE_PARENT,
0737         .ops = &clk_rcg2_ops,
0738     },
0739 };
0740 
0741 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
0742     .cmd_rcgr = 0xb040,
0743     .mnd_width = 0,
0744     .hid_width = 5,
0745     .parent_map = cam_cc_parent_map_0,
0746     .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
0747     .clkr.hw.init = &(struct clk_init_data){
0748         .name = "cam_cc_ife_1_csid_clk_src",
0749         .parent_data = cam_cc_parent_data_0,
0750         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0751         .flags = CLK_SET_RATE_PARENT,
0752         .ops = &clk_rcg2_ops,
0753     },
0754 };
0755 
0756 static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = {
0757     F(19200000, P_BI_TCXO, 1, 0, 0),
0758     F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
0759     F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
0760     { }
0761 };
0762 
0763 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
0764     .cmd_rcgr = 0xc000,
0765     .mnd_width = 0,
0766     .hid_width = 5,
0767     .parent_map = cam_cc_parent_map_0,
0768     .freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
0769     .clkr.hw.init = &(struct clk_init_data){
0770         .name = "cam_cc_ife_lite_clk_src",
0771         .parent_data = cam_cc_parent_data_0,
0772         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0773         .flags = CLK_SET_RATE_PARENT,
0774         .ops = &clk_rcg2_ops,
0775     },
0776 };
0777 
0778 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
0779     .cmd_rcgr = 0xc01c,
0780     .mnd_width = 0,
0781     .hid_width = 5,
0782     .parent_map = cam_cc_parent_map_0,
0783     .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
0784     .clkr.hw.init = &(struct clk_init_data){
0785         .name = "cam_cc_ife_lite_csid_clk_src",
0786         .parent_data = cam_cc_parent_data_0,
0787         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0788         .flags = CLK_SET_RATE_PARENT,
0789         .ops = &clk_rcg2_ops,
0790     },
0791 };
0792 
0793 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
0794     F(19200000, P_BI_TCXO, 1, 0, 0),
0795     F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
0796     F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
0797     F(525000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
0798     F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
0799     { }
0800 };
0801 
0802 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
0803     .cmd_rcgr = 0x8010,
0804     .mnd_width = 0,
0805     .hid_width = 5,
0806     .parent_map = cam_cc_parent_map_4,
0807     .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
0808     .clkr.hw.init = &(struct clk_init_data){
0809         .name = "cam_cc_ipe_0_clk_src",
0810         .parent_data = cam_cc_parent_data_4,
0811         .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
0812         .flags = CLK_SET_RATE_PARENT,
0813         .ops = &clk_rcg2_ops,
0814     },
0815 };
0816 
0817 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
0818     .cmd_rcgr = 0xc048,
0819     .mnd_width = 0,
0820     .hid_width = 5,
0821     .parent_map = cam_cc_parent_map_0,
0822     .freq_tbl = ftbl_cam_cc_bps_clk_src,
0823     .clkr.hw.init = &(struct clk_init_data){
0824         .name = "cam_cc_jpeg_clk_src",
0825         .parent_data = cam_cc_parent_data_0,
0826         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0827         .flags = CLK_SET_RATE_PARENT,
0828         .ops = &clk_rcg2_ops,
0829     },
0830 };
0831 
0832 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
0833     F(19200000, P_BI_TCXO, 1, 0, 0),
0834     F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 6),
0835     F(68571429, P_CAM_CC_PLL2_OUT_EARLY, 1, 1, 21),
0836     { }
0837 };
0838 
0839 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
0840     .cmd_rcgr = 0x5000,
0841     .mnd_width = 8,
0842     .hid_width = 5,
0843     .parent_map = cam_cc_parent_map_1,
0844     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0845     .clkr.hw.init = &(struct clk_init_data){
0846         .name = "cam_cc_mclk0_clk_src",
0847         .parent_data = cam_cc_parent_data_1,
0848         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0849         .flags = CLK_SET_RATE_PARENT,
0850         .ops = &clk_rcg2_ops,
0851     },
0852 };
0853 
0854 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
0855     .cmd_rcgr = 0x501c,
0856     .mnd_width = 8,
0857     .hid_width = 5,
0858     .parent_map = cam_cc_parent_map_1,
0859     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0860     .clkr.hw.init = &(struct clk_init_data){
0861         .name = "cam_cc_mclk1_clk_src",
0862         .parent_data = cam_cc_parent_data_1,
0863         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0864         .flags = CLK_SET_RATE_PARENT,
0865         .ops = &clk_rcg2_ops,
0866     },
0867 };
0868 
0869 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
0870     .cmd_rcgr = 0x5038,
0871     .mnd_width = 8,
0872     .hid_width = 5,
0873     .parent_map = cam_cc_parent_map_1,
0874     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0875     .clkr.hw.init = &(struct clk_init_data){
0876         .name = "cam_cc_mclk2_clk_src",
0877         .parent_data = cam_cc_parent_data_1,
0878         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0879         .flags = CLK_SET_RATE_PARENT,
0880         .ops = &clk_rcg2_ops,
0881     },
0882 };
0883 
0884 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
0885     .cmd_rcgr = 0x5054,
0886     .mnd_width = 8,
0887     .hid_width = 5,
0888     .parent_map = cam_cc_parent_map_1,
0889     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0890     .clkr.hw.init = &(struct clk_init_data){
0891         .name = "cam_cc_mclk3_clk_src",
0892         .parent_data = cam_cc_parent_data_1,
0893         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0894         .flags = CLK_SET_RATE_PARENT,
0895         .ops = &clk_rcg2_ops,
0896     },
0897 };
0898 
0899 static struct clk_rcg2 cam_cc_mclk4_clk_src = {
0900     .cmd_rcgr = 0x5070,
0901     .mnd_width = 8,
0902     .hid_width = 5,
0903     .parent_map = cam_cc_parent_map_1,
0904     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0905     .clkr.hw.init = &(struct clk_init_data){
0906         .name = "cam_cc_mclk4_clk_src",
0907         .parent_data = cam_cc_parent_data_1,
0908         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0909         .flags = CLK_SET_RATE_PARENT,
0910         .ops = &clk_rcg2_ops,
0911     },
0912 };
0913 
0914 static struct clk_rcg2 cam_cc_mclk5_clk_src = {
0915     .cmd_rcgr = 0x508c,
0916     .mnd_width = 8,
0917     .hid_width = 5,
0918     .parent_map = cam_cc_parent_map_1,
0919     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0920     .clkr.hw.init = &(struct clk_init_data){
0921         .name = "cam_cc_mclk5_clk_src",
0922         .parent_data = cam_cc_parent_data_1,
0923         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0924         .flags = CLK_SET_RATE_PARENT,
0925         .ops = &clk_rcg2_ops,
0926     },
0927 };
0928 
0929 static struct clk_rcg2 cam_cc_mclk6_clk_src = {
0930     .cmd_rcgr = 0x50a8,
0931     .mnd_width = 8,
0932     .hid_width = 5,
0933     .parent_map = cam_cc_parent_map_1,
0934     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0935     .clkr.hw.init = &(struct clk_init_data){
0936         .name = "cam_cc_mclk6_clk_src",
0937         .parent_data = cam_cc_parent_data_1,
0938         .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
0939         .flags = CLK_SET_RATE_PARENT,
0940         .ops = &clk_rcg2_ops,
0941     },
0942 };
0943 
0944 static struct clk_rcg2 cam_cc_sbi_csid_clk_src = {
0945     .cmd_rcgr = 0x901c,
0946     .mnd_width = 0,
0947     .hid_width = 5,
0948     .parent_map = cam_cc_parent_map_0,
0949     .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
0950     .clkr.hw.init = &(struct clk_init_data){
0951         .name = "cam_cc_sbi_csid_clk_src",
0952         .parent_data = cam_cc_parent_data_0,
0953         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0954         .flags = CLK_SET_RATE_PARENT,
0955         .ops = &clk_rcg2_ops,
0956     },
0957 };
0958 
0959 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
0960     F(32768, P_SLEEP_CLK, 1, 0, 0),
0961     { }
0962 };
0963 
0964 static struct clk_rcg2 cam_cc_sleep_clk_src = {
0965     .cmd_rcgr = 0xc170,
0966     .mnd_width = 0,
0967     .hid_width = 5,
0968     .parent_map = cam_cc_parent_map_5,
0969     .freq_tbl = ftbl_cam_cc_sleep_clk_src,
0970     .clkr.hw.init = &(struct clk_init_data){
0971         .name = "cam_cc_sleep_clk_src",
0972         .parent_data = cam_cc_parent_data_5,
0973         .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
0974         .flags = CLK_SET_RATE_PARENT,
0975         .ops = &clk_rcg2_ops,
0976     },
0977 };
0978 
0979 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
0980     F(19200000, P_BI_TCXO, 1, 0, 0),
0981     F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
0982     { }
0983 };
0984 
0985 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
0986     .cmd_rcgr = 0x7058,
0987     .mnd_width = 8,
0988     .hid_width = 5,
0989     .parent_map = cam_cc_parent_map_0,
0990     .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
0991     .clkr.hw.init = &(struct clk_init_data){
0992         .name = "cam_cc_slow_ahb_clk_src",
0993         .parent_data = cam_cc_parent_data_0,
0994         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0995         .flags = CLK_SET_RATE_PARENT,
0996         .ops = &clk_rcg2_ops,
0997     },
0998 };
0999 
1000 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1001     F(19200000, P_BI_TCXO, 1, 0, 0),
1002     { }
1003 };
1004 
1005 static struct clk_rcg2 cam_cc_xo_clk_src = {
1006     .cmd_rcgr = 0xc154,
1007     .mnd_width = 0,
1008     .hid_width = 5,
1009     .parent_map = cam_cc_parent_map_6,
1010     .freq_tbl = ftbl_cam_cc_xo_clk_src,
1011     .clkr.hw.init = &(struct clk_init_data){
1012         .name = "cam_cc_xo_clk_src",
1013         .parent_data = cam_cc_parent_data_6,
1014         .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1015         .flags = CLK_SET_RATE_PARENT,
1016         .ops = &clk_rcg2_ops,
1017     },
1018 };
1019 
1020 static struct clk_branch cam_cc_bps_ahb_clk = {
1021     .halt_reg = 0x7070,
1022     .halt_check = BRANCH_HALT,
1023     .clkr = {
1024         .enable_reg = 0x7070,
1025         .enable_mask = BIT(0),
1026         .hw.init = &(struct clk_init_data){
1027             .name = "cam_cc_bps_ahb_clk",
1028             .parent_hws = (const struct clk_hw*[]){
1029                 &cam_cc_slow_ahb_clk_src.clkr.hw
1030             },
1031             .num_parents = 1,
1032             .flags = CLK_SET_RATE_PARENT,
1033             .ops = &clk_branch2_ops,
1034         },
1035     },
1036 };
1037 
1038 static struct clk_branch cam_cc_bps_areg_clk = {
1039     .halt_reg = 0x7054,
1040     .halt_check = BRANCH_HALT,
1041     .clkr = {
1042         .enable_reg = 0x7054,
1043         .enable_mask = BIT(0),
1044         .hw.init = &(struct clk_init_data){
1045             .name = "cam_cc_bps_areg_clk",
1046             .parent_hws = (const struct clk_hw*[]){
1047                 &cam_cc_fast_ahb_clk_src.clkr.hw
1048             },
1049             .num_parents = 1,
1050             .flags = CLK_SET_RATE_PARENT,
1051             .ops = &clk_branch2_ops,
1052         },
1053     },
1054 };
1055 
1056 static struct clk_branch cam_cc_bps_axi_clk = {
1057     .halt_reg = 0x7038,
1058     .halt_check = BRANCH_HALT,
1059     .clkr = {
1060         .enable_reg = 0x7038,
1061         .enable_mask = BIT(0),
1062         .hw.init = &(struct clk_init_data){
1063             .name = "cam_cc_bps_axi_clk",
1064             .parent_hws = (const struct clk_hw*[]){
1065                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1066             },
1067             .num_parents = 1,
1068             .flags = CLK_SET_RATE_PARENT,
1069             .ops = &clk_branch2_ops,
1070         },
1071     },
1072 };
1073 
1074 static struct clk_branch cam_cc_bps_clk = {
1075     .halt_reg = 0x7028,
1076     .halt_check = BRANCH_HALT,
1077     .clkr = {
1078         .enable_reg = 0x7028,
1079         .enable_mask = BIT(0),
1080         .hw.init = &(struct clk_init_data){
1081             .name = "cam_cc_bps_clk",
1082             .parent_hws = (const struct clk_hw*[]){
1083                 &cam_cc_bps_clk_src.clkr.hw
1084             },
1085             .num_parents = 1,
1086             .flags = CLK_SET_RATE_PARENT,
1087             .ops = &clk_branch2_ops,
1088         },
1089     },
1090 };
1091 
1092 static struct clk_branch cam_cc_camnoc_axi_clk = {
1093     .halt_reg = 0xc114,
1094     .halt_check = BRANCH_HALT,
1095     .clkr = {
1096         .enable_reg = 0xc114,
1097         .enable_mask = BIT(0),
1098         .hw.init = &(struct clk_init_data){
1099             .name = "cam_cc_camnoc_axi_clk",
1100             .parent_hws = (const struct clk_hw*[]){
1101                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1102             },
1103             .num_parents = 1,
1104             .flags = CLK_SET_RATE_PARENT,
1105             .ops = &clk_branch2_ops,
1106         },
1107     },
1108 };
1109 
1110 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1111     .halt_reg = 0xc11c,
1112     .halt_check = BRANCH_HALT,
1113     .clkr = {
1114         .enable_reg = 0xc11c,
1115         .enable_mask = BIT(0),
1116         .hw.init = &(struct clk_init_data){
1117             .name = "cam_cc_camnoc_dcd_xo_clk",
1118             .parent_hws = (const struct clk_hw*[]){
1119                 &cam_cc_xo_clk_src.clkr.hw
1120             },
1121             .num_parents = 1,
1122             .flags = CLK_SET_RATE_PARENT,
1123             .ops = &clk_branch2_ops,
1124         },
1125     },
1126 };
1127 
1128 static struct clk_branch cam_cc_cci_0_clk = {
1129     .halt_reg = 0xc0d4,
1130     .halt_check = BRANCH_HALT,
1131     .clkr = {
1132         .enable_reg = 0xc0d4,
1133         .enable_mask = BIT(0),
1134         .hw.init = &(struct clk_init_data){
1135             .name = "cam_cc_cci_0_clk",
1136             .parent_hws = (const struct clk_hw*[]){
1137                 &cam_cc_cci_0_clk_src.clkr.hw
1138             },
1139             .num_parents = 1,
1140             .flags = CLK_SET_RATE_PARENT,
1141             .ops = &clk_branch2_ops,
1142         },
1143     },
1144 };
1145 
1146 static struct clk_branch cam_cc_cci_1_clk = {
1147     .halt_reg = 0xc0f0,
1148     .halt_check = BRANCH_HALT,
1149     .clkr = {
1150         .enable_reg = 0xc0f0,
1151         .enable_mask = BIT(0),
1152         .hw.init = &(struct clk_init_data){
1153             .name = "cam_cc_cci_1_clk",
1154             .parent_hws = (const struct clk_hw*[]){
1155                 &cam_cc_cci_1_clk_src.clkr.hw
1156             },
1157             .num_parents = 1,
1158             .flags = CLK_SET_RATE_PARENT,
1159             .ops = &clk_branch2_ops,
1160         },
1161     },
1162 };
1163 
1164 static struct clk_branch cam_cc_core_ahb_clk = {
1165     .halt_reg = 0xc150,
1166     .halt_check = BRANCH_HALT_DELAY,
1167     .clkr = {
1168         .enable_reg = 0xc150,
1169         .enable_mask = BIT(0),
1170         .hw.init = &(struct clk_init_data){
1171             .name = "cam_cc_core_ahb_clk",
1172             .parent_hws = (const struct clk_hw*[]){
1173                 &cam_cc_slow_ahb_clk_src.clkr.hw
1174             },
1175             .num_parents = 1,
1176             .flags = CLK_SET_RATE_PARENT,
1177             .ops = &clk_branch2_ops,
1178         },
1179     },
1180 };
1181 
1182 static struct clk_branch cam_cc_cpas_ahb_clk = {
1183     .halt_reg = 0xc0f4,
1184     .halt_check = BRANCH_HALT,
1185     .clkr = {
1186         .enable_reg = 0xc0f4,
1187         .enable_mask = BIT(0),
1188         .hw.init = &(struct clk_init_data){
1189             .name = "cam_cc_cpas_ahb_clk",
1190             .parent_hws = (const struct clk_hw*[]){
1191                 &cam_cc_slow_ahb_clk_src.clkr.hw
1192             },
1193             .num_parents = 1,
1194             .flags = CLK_SET_RATE_PARENT,
1195             .ops = &clk_branch2_ops,
1196         },
1197     },
1198 };
1199 
1200 static struct clk_branch cam_cc_csi0phytimer_clk = {
1201     .halt_reg = 0x6018,
1202     .halt_check = BRANCH_HALT,
1203     .clkr = {
1204         .enable_reg = 0x6018,
1205         .enable_mask = BIT(0),
1206         .hw.init = &(struct clk_init_data){
1207             .name = "cam_cc_csi0phytimer_clk",
1208             .parent_hws = (const struct clk_hw*[]){
1209                 &cam_cc_csi0phytimer_clk_src.clkr.hw
1210             },
1211             .num_parents = 1,
1212             .flags = CLK_SET_RATE_PARENT,
1213             .ops = &clk_branch2_ops,
1214         },
1215     },
1216 };
1217 
1218 static struct clk_branch cam_cc_csi1phytimer_clk = {
1219     .halt_reg = 0x6038,
1220     .halt_check = BRANCH_HALT,
1221     .clkr = {
1222         .enable_reg = 0x6038,
1223         .enable_mask = BIT(0),
1224         .hw.init = &(struct clk_init_data){
1225             .name = "cam_cc_csi1phytimer_clk",
1226             .parent_hws = (const struct clk_hw*[]){
1227                 &cam_cc_csi1phytimer_clk_src.clkr.hw
1228             },
1229             .num_parents = 1,
1230             .flags = CLK_SET_RATE_PARENT,
1231             .ops = &clk_branch2_ops,
1232         },
1233     },
1234 };
1235 
1236 static struct clk_branch cam_cc_csi2phytimer_clk = {
1237     .halt_reg = 0x6058,
1238     .halt_check = BRANCH_HALT,
1239     .clkr = {
1240         .enable_reg = 0x6058,
1241         .enable_mask = BIT(0),
1242         .hw.init = &(struct clk_init_data){
1243             .name = "cam_cc_csi2phytimer_clk",
1244             .parent_hws = (const struct clk_hw*[]){
1245                 &cam_cc_csi2phytimer_clk_src.clkr.hw
1246             },
1247             .num_parents = 1,
1248             .flags = CLK_SET_RATE_PARENT,
1249             .ops = &clk_branch2_ops,
1250         },
1251     },
1252 };
1253 
1254 static struct clk_branch cam_cc_csi3phytimer_clk = {
1255     .halt_reg = 0x6078,
1256     .halt_check = BRANCH_HALT,
1257     .clkr = {
1258         .enable_reg = 0x6078,
1259         .enable_mask = BIT(0),
1260         .hw.init = &(struct clk_init_data){
1261             .name = "cam_cc_csi3phytimer_clk",
1262             .parent_hws = (const struct clk_hw*[]){
1263                 &cam_cc_csi3phytimer_clk_src.clkr.hw
1264             },
1265             .num_parents = 1,
1266             .flags = CLK_SET_RATE_PARENT,
1267             .ops = &clk_branch2_ops,
1268         },
1269     },
1270 };
1271 
1272 static struct clk_branch cam_cc_csi4phytimer_clk = {
1273     .halt_reg = 0x6098,
1274     .halt_check = BRANCH_HALT,
1275     .clkr = {
1276         .enable_reg = 0x6098,
1277         .enable_mask = BIT(0),
1278         .hw.init = &(struct clk_init_data){
1279             .name = "cam_cc_csi4phytimer_clk",
1280             .parent_hws = (const struct clk_hw*[]){
1281                 &cam_cc_csi4phytimer_clk_src.clkr.hw
1282             },
1283             .num_parents = 1,
1284             .flags = CLK_SET_RATE_PARENT,
1285             .ops = &clk_branch2_ops,
1286         },
1287     },
1288 };
1289 
1290 static struct clk_branch cam_cc_csi5phytimer_clk = {
1291     .halt_reg = 0x60b8,
1292     .halt_check = BRANCH_HALT,
1293     .clkr = {
1294         .enable_reg = 0x60b8,
1295         .enable_mask = BIT(0),
1296         .hw.init = &(struct clk_init_data){
1297             .name = "cam_cc_csi5phytimer_clk",
1298             .parent_hws = (const struct clk_hw*[]){
1299                 &cam_cc_csi5phytimer_clk_src.clkr.hw
1300             },
1301             .num_parents = 1,
1302             .flags = CLK_SET_RATE_PARENT,
1303             .ops = &clk_branch2_ops,
1304         },
1305     },
1306 };
1307 
1308 static struct clk_branch cam_cc_csiphy0_clk = {
1309     .halt_reg = 0x601c,
1310     .halt_check = BRANCH_HALT,
1311     .clkr = {
1312         .enable_reg = 0x601c,
1313         .enable_mask = BIT(0),
1314         .hw.init = &(struct clk_init_data){
1315             .name = "cam_cc_csiphy0_clk",
1316             .parent_hws = (const struct clk_hw*[]){
1317                 &cam_cc_cphy_rx_clk_src.clkr.hw
1318             },
1319             .num_parents = 1,
1320             .flags = CLK_SET_RATE_PARENT,
1321             .ops = &clk_branch2_ops,
1322         },
1323     },
1324 };
1325 
1326 static struct clk_branch cam_cc_csiphy1_clk = {
1327     .halt_reg = 0x603c,
1328     .halt_check = BRANCH_HALT,
1329     .clkr = {
1330         .enable_reg = 0x603c,
1331         .enable_mask = BIT(0),
1332         .hw.init = &(struct clk_init_data){
1333             .name = "cam_cc_csiphy1_clk",
1334             .parent_hws = (const struct clk_hw*[]){
1335                 &cam_cc_cphy_rx_clk_src.clkr.hw
1336             },
1337             .num_parents = 1,
1338             .flags = CLK_SET_RATE_PARENT,
1339             .ops = &clk_branch2_ops,
1340         },
1341     },
1342 };
1343 
1344 static struct clk_branch cam_cc_csiphy2_clk = {
1345     .halt_reg = 0x605c,
1346     .halt_check = BRANCH_HALT,
1347     .clkr = {
1348         .enable_reg = 0x605c,
1349         .enable_mask = BIT(0),
1350         .hw.init = &(struct clk_init_data){
1351             .name = "cam_cc_csiphy2_clk",
1352             .parent_hws = (const struct clk_hw*[]){
1353                 &cam_cc_cphy_rx_clk_src.clkr.hw
1354             },
1355             .num_parents = 1,
1356             .flags = CLK_SET_RATE_PARENT,
1357             .ops = &clk_branch2_ops,
1358         },
1359     },
1360 };
1361 
1362 static struct clk_branch cam_cc_csiphy3_clk = {
1363     .halt_reg = 0x607c,
1364     .halt_check = BRANCH_HALT,
1365     .clkr = {
1366         .enable_reg = 0x607c,
1367         .enable_mask = BIT(0),
1368         .hw.init = &(struct clk_init_data){
1369             .name = "cam_cc_csiphy3_clk",
1370             .parent_hws = (const struct clk_hw*[]){
1371                 &cam_cc_cphy_rx_clk_src.clkr.hw
1372             },
1373             .num_parents = 1,
1374             .flags = CLK_SET_RATE_PARENT,
1375             .ops = &clk_branch2_ops,
1376         },
1377     },
1378 };
1379 
1380 static struct clk_branch cam_cc_csiphy4_clk = {
1381     .halt_reg = 0x609c,
1382     .halt_check = BRANCH_HALT,
1383     .clkr = {
1384         .enable_reg = 0x609c,
1385         .enable_mask = BIT(0),
1386         .hw.init = &(struct clk_init_data){
1387             .name = "cam_cc_csiphy4_clk",
1388             .parent_hws = (const struct clk_hw*[]){
1389                 &cam_cc_cphy_rx_clk_src.clkr.hw
1390             },
1391             .num_parents = 1,
1392             .flags = CLK_SET_RATE_PARENT,
1393             .ops = &clk_branch2_ops,
1394         },
1395     },
1396 };
1397 
1398 static struct clk_branch cam_cc_csiphy5_clk = {
1399     .halt_reg = 0x60bc,
1400     .halt_check = BRANCH_HALT,
1401     .clkr = {
1402         .enable_reg = 0x60bc,
1403         .enable_mask = BIT(0),
1404         .hw.init = &(struct clk_init_data){
1405             .name = "cam_cc_csiphy5_clk",
1406             .parent_hws = (const struct clk_hw*[]){
1407                 &cam_cc_cphy_rx_clk_src.clkr.hw
1408             },
1409             .num_parents = 1,
1410             .flags = CLK_SET_RATE_PARENT,
1411             .ops = &clk_branch2_ops,
1412         },
1413     },
1414 };
1415 
1416 static struct clk_branch cam_cc_fd_core_clk = {
1417     .halt_reg = 0xc0b0,
1418     .halt_check = BRANCH_HALT,
1419     .clkr = {
1420         .enable_reg = 0xc0b0,
1421         .enable_mask = BIT(0),
1422         .hw.init = &(struct clk_init_data){
1423             .name = "cam_cc_fd_core_clk",
1424             .parent_hws = (const struct clk_hw*[]){
1425                 &cam_cc_fd_core_clk_src.clkr.hw
1426             },
1427             .num_parents = 1,
1428             .flags = CLK_SET_RATE_PARENT,
1429             .ops = &clk_branch2_ops,
1430         },
1431     },
1432 };
1433 
1434 static struct clk_branch cam_cc_fd_core_uar_clk = {
1435     .halt_reg = 0xc0b8,
1436     .halt_check = BRANCH_HALT,
1437     .clkr = {
1438         .enable_reg = 0xc0b8,
1439         .enable_mask = BIT(0),
1440         .hw.init = &(struct clk_init_data){
1441             .name = "cam_cc_fd_core_uar_clk",
1442             .parent_hws = (const struct clk_hw*[]){
1443                 &cam_cc_fd_core_clk_src.clkr.hw
1444             },
1445             .num_parents = 1,
1446             .flags = CLK_SET_RATE_PARENT,
1447             .ops = &clk_branch2_ops,
1448         },
1449     },
1450 };
1451 
1452 static struct clk_branch cam_cc_gdsc_clk = {
1453     .halt_reg = 0xc16c,
1454     .halt_check = BRANCH_HALT,
1455     .clkr = {
1456         .enable_reg = 0xc16c,
1457         .enable_mask = BIT(0),
1458         .hw.init = &(struct clk_init_data){
1459             .name = "cam_cc_gdsc_clk",
1460             .parent_hws = (const struct clk_hw*[]){
1461                 &cam_cc_xo_clk_src.clkr.hw
1462             },
1463             .num_parents = 1,
1464             .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1465             .ops = &clk_branch2_ops,
1466         },
1467     },
1468 };
1469 
1470 static struct clk_branch cam_cc_icp_ahb_clk = {
1471     .halt_reg = 0xc094,
1472     .halt_check = BRANCH_HALT,
1473     .clkr = {
1474         .enable_reg = 0xc094,
1475         .enable_mask = BIT(0),
1476         .hw.init = &(struct clk_init_data){
1477             .name = "cam_cc_icp_ahb_clk",
1478             .parent_hws = (const struct clk_hw*[]){
1479                 &cam_cc_slow_ahb_clk_src.clkr.hw
1480             },
1481             .num_parents = 1,
1482             .flags = CLK_SET_RATE_PARENT,
1483             .ops = &clk_branch2_ops,
1484         },
1485     },
1486 };
1487 
1488 static struct clk_branch cam_cc_icp_clk = {
1489     .halt_reg = 0xc08c,
1490     .halt_check = BRANCH_HALT,
1491     .clkr = {
1492         .enable_reg = 0xc08c,
1493         .enable_mask = BIT(0),
1494         .hw.init = &(struct clk_init_data){
1495             .name = "cam_cc_icp_clk",
1496             .parent_hws = (const struct clk_hw*[]){
1497                 &cam_cc_icp_clk_src.clkr.hw
1498             },
1499             .num_parents = 1,
1500             .flags = CLK_SET_RATE_PARENT,
1501             .ops = &clk_branch2_ops,
1502         },
1503     },
1504 };
1505 
1506 static struct clk_branch cam_cc_ife_0_ahb_clk = {
1507     .halt_reg = 0xa088,
1508     .halt_check = BRANCH_HALT,
1509     .clkr = {
1510         .enable_reg = 0xa088,
1511         .enable_mask = BIT(0),
1512         .hw.init = &(struct clk_init_data){
1513             .name = "cam_cc_ife_0_ahb_clk",
1514             .parent_hws = (const struct clk_hw*[]){
1515                 &cam_cc_slow_ahb_clk_src.clkr.hw
1516             },
1517             .num_parents = 1,
1518             .flags = CLK_SET_RATE_PARENT,
1519             .ops = &clk_branch2_ops,
1520         },
1521     },
1522 };
1523 
1524 static struct clk_branch cam_cc_ife_0_areg_clk = {
1525     .halt_reg = 0xa030,
1526     .halt_check = BRANCH_HALT,
1527     .clkr = {
1528         .enable_reg = 0xa030,
1529         .enable_mask = BIT(0),
1530         .hw.init = &(struct clk_init_data){
1531             .name = "cam_cc_ife_0_areg_clk",
1532             .parent_hws = (const struct clk_hw*[]){
1533                 &cam_cc_fast_ahb_clk_src.clkr.hw
1534             },
1535             .num_parents = 1,
1536             .flags = CLK_SET_RATE_PARENT,
1537             .ops = &clk_branch2_ops,
1538         },
1539     },
1540 };
1541 
1542 static struct clk_branch cam_cc_ife_0_axi_clk = {
1543     .halt_reg = 0xa084,
1544     .halt_check = BRANCH_HALT,
1545     .clkr = {
1546         .enable_reg = 0xa084,
1547         .enable_mask = BIT(0),
1548         .hw.init = &(struct clk_init_data){
1549             .name = "cam_cc_ife_0_axi_clk",
1550             .parent_hws = (const struct clk_hw*[]){
1551                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1552             },
1553             .num_parents = 1,
1554             .flags = CLK_SET_RATE_PARENT,
1555             .ops = &clk_branch2_ops,
1556         },
1557     },
1558 };
1559 
1560 static struct clk_branch cam_cc_ife_0_clk = {
1561     .halt_reg = 0xa028,
1562     .halt_check = BRANCH_HALT,
1563     .clkr = {
1564         .enable_reg = 0xa028,
1565         .enable_mask = BIT(0),
1566         .hw.init = &(struct clk_init_data){
1567             .name = "cam_cc_ife_0_clk",
1568             .parent_hws = (const struct clk_hw*[]){
1569                 &cam_cc_ife_0_clk_src.clkr.hw
1570             },
1571             .num_parents = 1,
1572             .flags = CLK_SET_RATE_PARENT,
1573             .ops = &clk_branch2_ops,
1574         },
1575     },
1576 };
1577 
1578 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1579     .halt_reg = 0xa080,
1580     .halt_check = BRANCH_HALT,
1581     .clkr = {
1582         .enable_reg = 0xa080,
1583         .enable_mask = BIT(0),
1584         .hw.init = &(struct clk_init_data){
1585             .name = "cam_cc_ife_0_cphy_rx_clk",
1586             .parent_hws = (const struct clk_hw*[]){
1587                 &cam_cc_cphy_rx_clk_src.clkr.hw
1588             },
1589             .num_parents = 1,
1590             .flags = CLK_SET_RATE_PARENT,
1591             .ops = &clk_branch2_ops,
1592         },
1593     },
1594 };
1595 
1596 static struct clk_branch cam_cc_ife_0_csid_clk = {
1597     .halt_reg = 0xa058,
1598     .halt_check = BRANCH_HALT,
1599     .clkr = {
1600         .enable_reg = 0xa058,
1601         .enable_mask = BIT(0),
1602         .hw.init = &(struct clk_init_data){
1603             .name = "cam_cc_ife_0_csid_clk",
1604             .parent_hws = (const struct clk_hw*[]){
1605                 &cam_cc_ife_0_csid_clk_src.clkr.hw
1606             },
1607             .num_parents = 1,
1608             .flags = CLK_SET_RATE_PARENT,
1609             .ops = &clk_branch2_ops,
1610         },
1611     },
1612 };
1613 
1614 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1615     .halt_reg = 0xa03c,
1616     .halt_check = BRANCH_HALT,
1617     .clkr = {
1618         .enable_reg = 0xa03c,
1619         .enable_mask = BIT(0),
1620         .hw.init = &(struct clk_init_data){
1621             .name = "cam_cc_ife_0_dsp_clk",
1622             .parent_hws = (const struct clk_hw*[]){
1623                 &cam_cc_ife_0_clk_src.clkr.hw
1624             },
1625             .num_parents = 1,
1626             .flags = CLK_SET_RATE_PARENT,
1627             .ops = &clk_branch2_ops,
1628         },
1629     },
1630 };
1631 
1632 static struct clk_branch cam_cc_ife_1_ahb_clk = {
1633     .halt_reg = 0xb068,
1634     .halt_check = BRANCH_HALT,
1635     .clkr = {
1636         .enable_reg = 0xb068,
1637         .enable_mask = BIT(0),
1638         .hw.init = &(struct clk_init_data){
1639             .name = "cam_cc_ife_1_ahb_clk",
1640             .parent_hws = (const struct clk_hw*[]){
1641                 &cam_cc_slow_ahb_clk_src.clkr.hw
1642             },
1643             .num_parents = 1,
1644             .flags = CLK_SET_RATE_PARENT,
1645             .ops = &clk_branch2_ops,
1646         },
1647     },
1648 };
1649 
1650 static struct clk_branch cam_cc_ife_1_areg_clk = {
1651     .halt_reg = 0xb030,
1652     .halt_check = BRANCH_HALT,
1653     .clkr = {
1654         .enable_reg = 0xb030,
1655         .enable_mask = BIT(0),
1656         .hw.init = &(struct clk_init_data){
1657             .name = "cam_cc_ife_1_areg_clk",
1658             .parent_hws = (const struct clk_hw*[]){
1659                 &cam_cc_fast_ahb_clk_src.clkr.hw
1660             },
1661             .num_parents = 1,
1662             .flags = CLK_SET_RATE_PARENT,
1663             .ops = &clk_branch2_ops,
1664         },
1665     },
1666 };
1667 
1668 static struct clk_branch cam_cc_ife_1_axi_clk = {
1669     .halt_reg = 0xb064,
1670     .halt_check = BRANCH_HALT,
1671     .clkr = {
1672         .enable_reg = 0xb064,
1673         .enable_mask = BIT(0),
1674         .hw.init = &(struct clk_init_data){
1675             .name = "cam_cc_ife_1_axi_clk",
1676             .parent_hws = (const struct clk_hw*[]){
1677                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1678             },
1679             .num_parents = 1,
1680             .flags = CLK_SET_RATE_PARENT,
1681             .ops = &clk_branch2_ops,
1682         },
1683     },
1684 };
1685 
1686 static struct clk_branch cam_cc_ife_1_clk = {
1687     .halt_reg = 0xb028,
1688     .halt_check = BRANCH_HALT,
1689     .clkr = {
1690         .enable_reg = 0xb028,
1691         .enable_mask = BIT(0),
1692         .hw.init = &(struct clk_init_data){
1693             .name = "cam_cc_ife_1_clk",
1694             .parent_hws = (const struct clk_hw*[]){
1695                 &cam_cc_ife_1_clk_src.clkr.hw
1696             },
1697             .num_parents = 1,
1698             .flags = CLK_SET_RATE_PARENT,
1699             .ops = &clk_branch2_ops,
1700         },
1701     },
1702 };
1703 
1704 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1705     .halt_reg = 0xb060,
1706     .halt_check = BRANCH_HALT,
1707     .clkr = {
1708         .enable_reg = 0xb060,
1709         .enable_mask = BIT(0),
1710         .hw.init = &(struct clk_init_data){
1711             .name = "cam_cc_ife_1_cphy_rx_clk",
1712             .parent_hws = (const struct clk_hw*[]){
1713                 &cam_cc_cphy_rx_clk_src.clkr.hw
1714             },
1715             .num_parents = 1,
1716             .flags = CLK_SET_RATE_PARENT,
1717             .ops = &clk_branch2_ops,
1718         },
1719     },
1720 };
1721 
1722 static struct clk_branch cam_cc_ife_1_csid_clk = {
1723     .halt_reg = 0xb058,
1724     .halt_check = BRANCH_HALT,
1725     .clkr = {
1726         .enable_reg = 0xb058,
1727         .enable_mask = BIT(0),
1728         .hw.init = &(struct clk_init_data){
1729             .name = "cam_cc_ife_1_csid_clk",
1730             .parent_hws = (const struct clk_hw*[]){
1731                 &cam_cc_ife_1_csid_clk_src.clkr.hw
1732             },
1733             .num_parents = 1,
1734             .flags = CLK_SET_RATE_PARENT,
1735             .ops = &clk_branch2_ops,
1736         },
1737     },
1738 };
1739 
1740 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1741     .halt_reg = 0xb03c,
1742     .halt_check = BRANCH_HALT,
1743     .clkr = {
1744         .enable_reg = 0xb03c,
1745         .enable_mask = BIT(0),
1746         .hw.init = &(struct clk_init_data){
1747             .name = "cam_cc_ife_1_dsp_clk",
1748             .parent_hws = (const struct clk_hw*[]){
1749                 &cam_cc_ife_1_clk_src.clkr.hw
1750             },
1751             .num_parents = 1,
1752             .flags = CLK_SET_RATE_PARENT,
1753             .ops = &clk_branch2_ops,
1754         },
1755     },
1756 };
1757 
1758 static struct clk_branch cam_cc_ife_lite_ahb_clk = {
1759     .halt_reg = 0xc040,
1760     .halt_check = BRANCH_HALT,
1761     .clkr = {
1762         .enable_reg = 0xc040,
1763         .enable_mask = BIT(0),
1764         .hw.init = &(struct clk_init_data){
1765             .name = "cam_cc_ife_lite_ahb_clk",
1766             .parent_hws = (const struct clk_hw*[]){
1767                 &cam_cc_slow_ahb_clk_src.clkr.hw
1768             },
1769             .num_parents = 1,
1770             .flags = CLK_SET_RATE_PARENT,
1771             .ops = &clk_branch2_ops,
1772         },
1773     },
1774 };
1775 
1776 static struct clk_branch cam_cc_ife_lite_axi_clk = {
1777     .halt_reg = 0xc044,
1778     .halt_check = BRANCH_HALT,
1779     .clkr = {
1780         .enable_reg = 0xc044,
1781         .enable_mask = BIT(0),
1782         .hw.init = &(struct clk_init_data){
1783             .name = "cam_cc_ife_lite_axi_clk",
1784             .parent_hws = (const struct clk_hw*[]){
1785                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1786             },
1787             .num_parents = 1,
1788             .flags = CLK_SET_RATE_PARENT,
1789             .ops = &clk_branch2_ops,
1790         },
1791     },
1792 };
1793 
1794 static struct clk_branch cam_cc_ife_lite_clk = {
1795     .halt_reg = 0xc018,
1796     .halt_check = BRANCH_HALT,
1797     .clkr = {
1798         .enable_reg = 0xc018,
1799         .enable_mask = BIT(0),
1800         .hw.init = &(struct clk_init_data){
1801             .name = "cam_cc_ife_lite_clk",
1802             .parent_hws = (const struct clk_hw*[]){
1803                 &cam_cc_ife_lite_clk_src.clkr.hw
1804             },
1805             .num_parents = 1,
1806             .flags = CLK_SET_RATE_PARENT,
1807             .ops = &clk_branch2_ops,
1808         },
1809     },
1810 };
1811 
1812 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
1813     .halt_reg = 0xc03c,
1814     .halt_check = BRANCH_HALT,
1815     .clkr = {
1816         .enable_reg = 0xc03c,
1817         .enable_mask = BIT(0),
1818         .hw.init = &(struct clk_init_data){
1819             .name = "cam_cc_ife_lite_cphy_rx_clk",
1820             .parent_hws = (const struct clk_hw*[]){
1821                 &cam_cc_cphy_rx_clk_src.clkr.hw
1822             },
1823             .num_parents = 1,
1824             .flags = CLK_SET_RATE_PARENT,
1825             .ops = &clk_branch2_ops,
1826         },
1827     },
1828 };
1829 
1830 static struct clk_branch cam_cc_ife_lite_csid_clk = {
1831     .halt_reg = 0xc034,
1832     .halt_check = BRANCH_HALT,
1833     .clkr = {
1834         .enable_reg = 0xc034,
1835         .enable_mask = BIT(0),
1836         .hw.init = &(struct clk_init_data){
1837             .name = "cam_cc_ife_lite_csid_clk",
1838             .parent_hws = (const struct clk_hw*[]){
1839                 &cam_cc_ife_lite_csid_clk_src.clkr.hw
1840             },
1841             .num_parents = 1,
1842             .flags = CLK_SET_RATE_PARENT,
1843             .ops = &clk_branch2_ops,
1844         },
1845     },
1846 };
1847 
1848 static struct clk_branch cam_cc_ipe_0_ahb_clk = {
1849     .halt_reg = 0x8040,
1850     .halt_check = BRANCH_HALT,
1851     .clkr = {
1852         .enable_reg = 0x8040,
1853         .enable_mask = BIT(0),
1854         .hw.init = &(struct clk_init_data){
1855             .name = "cam_cc_ipe_0_ahb_clk",
1856             .parent_hws = (const struct clk_hw*[]){
1857                 &cam_cc_slow_ahb_clk_src.clkr.hw
1858             },
1859             .num_parents = 1,
1860             .flags = CLK_SET_RATE_PARENT,
1861             .ops = &clk_branch2_ops,
1862         },
1863     },
1864 };
1865 
1866 static struct clk_branch cam_cc_ipe_0_areg_clk = {
1867     .halt_reg = 0x803c,
1868     .halt_check = BRANCH_HALT,
1869     .clkr = {
1870         .enable_reg = 0x803c,
1871         .enable_mask = BIT(0),
1872         .hw.init = &(struct clk_init_data){
1873             .name = "cam_cc_ipe_0_areg_clk",
1874             .parent_hws = (const struct clk_hw*[]){
1875                 &cam_cc_fast_ahb_clk_src.clkr.hw
1876             },
1877             .num_parents = 1,
1878             .flags = CLK_SET_RATE_PARENT,
1879             .ops = &clk_branch2_ops,
1880         },
1881     },
1882 };
1883 
1884 static struct clk_branch cam_cc_ipe_0_axi_clk = {
1885     .halt_reg = 0x8038,
1886     .halt_check = BRANCH_HALT,
1887     .clkr = {
1888         .enable_reg = 0x8038,
1889         .enable_mask = BIT(0),
1890         .hw.init = &(struct clk_init_data){
1891             .name = "cam_cc_ipe_0_axi_clk",
1892             .parent_hws = (const struct clk_hw*[]){
1893                 &cam_cc_camnoc_axi_clk_src.clkr.hw
1894             },
1895             .num_parents = 1,
1896             .flags = CLK_SET_RATE_PARENT,
1897             .ops = &clk_branch2_ops,
1898         },
1899     },
1900 };
1901 
1902 static struct clk_branch cam_cc_ipe_0_clk = {
1903     .halt_reg = 0x8028,
1904     .halt_check = BRANCH_HALT,
1905     .clkr = {
1906         .enable_reg = 0x8028,
1907         .enable_mask = BIT(0),
1908         .hw.init = &(struct clk_init_data){
1909             .name = "cam_cc_ipe_0_clk",
1910             .parent_hws = (const struct clk_hw*[]){
1911                 &cam_cc_ipe_0_clk_src.clkr.hw
1912             },
1913             .num_parents = 1,
1914             .flags = CLK_SET_RATE_PARENT,
1915             .ops = &clk_branch2_ops,
1916         },
1917     },
1918 };
1919 
1920 static struct clk_branch cam_cc_jpeg_clk = {
1921     .halt_reg = 0xc060,
1922     .halt_check = BRANCH_HALT,
1923     .clkr = {
1924         .enable_reg = 0xc060,
1925         .enable_mask = BIT(0),
1926         .hw.init = &(struct clk_init_data){
1927             .name = "cam_cc_jpeg_clk",
1928             .parent_hws = (const struct clk_hw*[]){
1929                 &cam_cc_jpeg_clk_src.clkr.hw
1930             },
1931             .num_parents = 1,
1932             .flags = CLK_SET_RATE_PARENT,
1933             .ops = &clk_branch2_ops,
1934         },
1935     },
1936 };
1937 
1938 static struct clk_branch cam_cc_mclk0_clk = {
1939     .halt_reg = 0x5018,
1940     .halt_check = BRANCH_HALT,
1941     .clkr = {
1942         .enable_reg = 0x5018,
1943         .enable_mask = BIT(0),
1944         .hw.init = &(struct clk_init_data){
1945             .name = "cam_cc_mclk0_clk",
1946             .parent_hws = (const struct clk_hw*[]){
1947                 &cam_cc_mclk0_clk_src.clkr.hw
1948             },
1949             .num_parents = 1,
1950             .flags = CLK_SET_RATE_PARENT,
1951             .ops = &clk_branch2_ops,
1952         },
1953     },
1954 };
1955 
1956 static struct clk_branch cam_cc_mclk1_clk = {
1957     .halt_reg = 0x5034,
1958     .halt_check = BRANCH_HALT,
1959     .clkr = {
1960         .enable_reg = 0x5034,
1961         .enable_mask = BIT(0),
1962         .hw.init = &(struct clk_init_data){
1963             .name = "cam_cc_mclk1_clk",
1964             .parent_hws = (const struct clk_hw*[]){
1965                 &cam_cc_mclk1_clk_src.clkr.hw
1966             },
1967             .num_parents = 1,
1968             .flags = CLK_SET_RATE_PARENT,
1969             .ops = &clk_branch2_ops,
1970         },
1971     },
1972 };
1973 
1974 static struct clk_branch cam_cc_mclk2_clk = {
1975     .halt_reg = 0x5050,
1976     .halt_check = BRANCH_HALT,
1977     .clkr = {
1978         .enable_reg = 0x5050,
1979         .enable_mask = BIT(0),
1980         .hw.init = &(struct clk_init_data){
1981             .name = "cam_cc_mclk2_clk",
1982             .parent_hws = (const struct clk_hw*[]){
1983                 &cam_cc_mclk2_clk_src.clkr.hw
1984             },
1985             .num_parents = 1,
1986             .flags = CLK_SET_RATE_PARENT,
1987             .ops = &clk_branch2_ops,
1988         },
1989     },
1990 };
1991 
1992 static struct clk_branch cam_cc_mclk3_clk = {
1993     .halt_reg = 0x506c,
1994     .halt_check = BRANCH_HALT,
1995     .clkr = {
1996         .enable_reg = 0x506c,
1997         .enable_mask = BIT(0),
1998         .hw.init = &(struct clk_init_data){
1999             .name = "cam_cc_mclk3_clk",
2000             .parent_hws = (const struct clk_hw*[]){
2001                 &cam_cc_mclk3_clk_src.clkr.hw
2002             },
2003             .num_parents = 1,
2004             .flags = CLK_SET_RATE_PARENT,
2005             .ops = &clk_branch2_ops,
2006         },
2007     },
2008 };
2009 
2010 static struct clk_branch cam_cc_mclk4_clk = {
2011     .halt_reg = 0x5088,
2012     .halt_check = BRANCH_HALT,
2013     .clkr = {
2014         .enable_reg = 0x5088,
2015         .enable_mask = BIT(0),
2016         .hw.init = &(struct clk_init_data){
2017             .name = "cam_cc_mclk4_clk",
2018             .parent_hws = (const struct clk_hw*[]){
2019                 &cam_cc_mclk4_clk_src.clkr.hw
2020             },
2021             .num_parents = 1,
2022             .flags = CLK_SET_RATE_PARENT,
2023             .ops = &clk_branch2_ops,
2024         },
2025     },
2026 };
2027 
2028 static struct clk_branch cam_cc_mclk5_clk = {
2029     .halt_reg = 0x50a4,
2030     .halt_check = BRANCH_HALT,
2031     .clkr = {
2032         .enable_reg = 0x50a4,
2033         .enable_mask = BIT(0),
2034         .hw.init = &(struct clk_init_data){
2035             .name = "cam_cc_mclk5_clk",
2036             .parent_hws = (const struct clk_hw*[]){
2037                 &cam_cc_mclk5_clk_src.clkr.hw
2038             },
2039             .num_parents = 1,
2040             .flags = CLK_SET_RATE_PARENT,
2041             .ops = &clk_branch2_ops,
2042         },
2043     },
2044 };
2045 
2046 static struct clk_branch cam_cc_mclk6_clk = {
2047     .halt_reg = 0x50c0,
2048     .halt_check = BRANCH_HALT,
2049     .clkr = {
2050         .enable_reg = 0x50c0,
2051         .enable_mask = BIT(0),
2052         .hw.init = &(struct clk_init_data){
2053             .name = "cam_cc_mclk6_clk",
2054             .parent_hws = (const struct clk_hw*[]){
2055                 &cam_cc_mclk6_clk_src.clkr.hw
2056             },
2057             .num_parents = 1,
2058             .flags = CLK_SET_RATE_PARENT,
2059             .ops = &clk_branch2_ops,
2060         },
2061     },
2062 };
2063 
2064 static struct clk_branch cam_cc_sbi_ahb_clk = {
2065     .halt_reg = 0x9040,
2066     .halt_check = BRANCH_HALT,
2067     .clkr = {
2068         .enable_reg = 0x9040,
2069         .enable_mask = BIT(0),
2070         .hw.init = &(struct clk_init_data){
2071             .name = "cam_cc_sbi_ahb_clk",
2072             .parent_hws = (const struct clk_hw*[]){
2073                 &cam_cc_slow_ahb_clk_src.clkr.hw
2074             },
2075             .num_parents = 1,
2076             .flags = CLK_SET_RATE_PARENT,
2077             .ops = &clk_branch2_ops,
2078         },
2079     },
2080 };
2081 
2082 static struct clk_branch cam_cc_sbi_axi_clk = {
2083     .halt_reg = 0x903c,
2084     .halt_check = BRANCH_HALT,
2085     .clkr = {
2086         .enable_reg = 0x903c,
2087         .enable_mask = BIT(0),
2088         .hw.init = &(struct clk_init_data){
2089             .name = "cam_cc_sbi_axi_clk",
2090             .parent_hws = (const struct clk_hw*[]){
2091                 &cam_cc_camnoc_axi_clk_src.clkr.hw
2092             },
2093             .num_parents = 1,
2094             .flags = CLK_SET_RATE_PARENT,
2095             .ops = &clk_branch2_ops,
2096         },
2097     },
2098 };
2099 
2100 static struct clk_branch cam_cc_sbi_clk = {
2101     .halt_reg = 0x9014,
2102     .halt_check = BRANCH_HALT,
2103     .clkr = {
2104         .enable_reg = 0x9014,
2105         .enable_mask = BIT(0),
2106         .hw.init = &(struct clk_init_data){
2107             .name = "cam_cc_sbi_clk",
2108             .parent_hws = (const struct clk_hw*[]){
2109                 &cam_cc_sbi_div_clk_src.clkr.hw
2110             },
2111             .num_parents = 1,
2112             .flags = CLK_SET_RATE_PARENT,
2113             .ops = &clk_branch2_ops,
2114         },
2115     },
2116 };
2117 
2118 static struct clk_branch cam_cc_sbi_cphy_rx_clk = {
2119     .halt_reg = 0x9038,
2120     .halt_check = BRANCH_HALT,
2121     .clkr = {
2122         .enable_reg = 0x9038,
2123         .enable_mask = BIT(0),
2124         .hw.init = &(struct clk_init_data){
2125             .name = "cam_cc_sbi_cphy_rx_clk",
2126             .parent_hws = (const struct clk_hw*[]){
2127                 &cam_cc_cphy_rx_clk_src.clkr.hw
2128             },
2129             .num_parents = 1,
2130             .flags = CLK_SET_RATE_PARENT,
2131             .ops = &clk_branch2_ops,
2132         },
2133     },
2134 };
2135 
2136 static struct clk_branch cam_cc_sbi_csid_clk = {
2137     .halt_reg = 0x9034,
2138     .halt_check = BRANCH_HALT,
2139     .clkr = {
2140         .enable_reg = 0x9034,
2141         .enable_mask = BIT(0),
2142         .hw.init = &(struct clk_init_data){
2143             .name = "cam_cc_sbi_csid_clk",
2144             .parent_hws = (const struct clk_hw*[]){
2145                 &cam_cc_sbi_csid_clk_src.clkr.hw
2146             },
2147             .num_parents = 1,
2148             .flags = CLK_SET_RATE_PARENT,
2149             .ops = &clk_branch2_ops,
2150         },
2151     },
2152 };
2153 
2154 static struct clk_branch cam_cc_sbi_ife_0_clk = {
2155     .halt_reg = 0x9044,
2156     .halt_check = BRANCH_HALT,
2157     .clkr = {
2158         .enable_reg = 0x9044,
2159         .enable_mask = BIT(0),
2160         .hw.init = &(struct clk_init_data){
2161             .name = "cam_cc_sbi_ife_0_clk",
2162             .parent_hws = (const struct clk_hw*[]){
2163                 &cam_cc_ife_0_clk_src.clkr.hw
2164             },
2165             .num_parents = 1,
2166             .flags = CLK_SET_RATE_PARENT,
2167             .ops = &clk_branch2_ops,
2168         },
2169     },
2170 };
2171 
2172 static struct clk_branch cam_cc_sbi_ife_1_clk = {
2173     .halt_reg = 0x9048,
2174     .halt_check = BRANCH_HALT,
2175     .clkr = {
2176         .enable_reg = 0x9048,
2177         .enable_mask = BIT(0),
2178         .hw.init = &(struct clk_init_data){
2179             .name = "cam_cc_sbi_ife_1_clk",
2180             .parent_hws = (const struct clk_hw*[]){
2181                 &cam_cc_ife_1_clk_src.clkr.hw
2182             },
2183             .num_parents = 1,
2184             .flags = CLK_SET_RATE_PARENT,
2185             .ops = &clk_branch2_ops,
2186         },
2187     },
2188 };
2189 
2190 static struct clk_branch cam_cc_sleep_clk = {
2191     .halt_reg = 0xc188,
2192     .halt_check = BRANCH_HALT,
2193     .clkr = {
2194         .enable_reg = 0xc188,
2195         .enable_mask = BIT(0),
2196         .hw.init = &(struct clk_init_data){
2197             .name = "cam_cc_sleep_clk",
2198             .parent_hws = (const struct clk_hw*[]){
2199                 &cam_cc_sleep_clk_src.clkr.hw
2200             },
2201             .num_parents = 1,
2202             .flags = CLK_SET_RATE_PARENT,
2203             .ops = &clk_branch2_ops,
2204         },
2205     },
2206 };
2207 
2208 static struct gdsc titan_top_gdsc;
2209 
2210 static struct gdsc bps_gdsc = {
2211     .gdscr = 0x7004,
2212     .pd = {
2213         .name = "bps_gdsc",
2214     },
2215     .flags = HW_CTRL | POLL_CFG_GDSCR,
2216     .pwrsts = PWRSTS_OFF_ON,
2217 };
2218 
2219 static struct gdsc ipe_0_gdsc = {
2220     .gdscr = 0x8004,
2221     .pd = {
2222         .name = "ipe_0_gdsc",
2223     },
2224     .flags = HW_CTRL | POLL_CFG_GDSCR,
2225     .pwrsts = PWRSTS_OFF_ON,
2226 };
2227 
2228 static struct gdsc sbi_gdsc = {
2229     .gdscr = 0x9004,
2230     .pd = {
2231         .name = "sbi_gdsc",
2232     },
2233     .flags = HW_CTRL | POLL_CFG_GDSCR,
2234     .pwrsts = PWRSTS_OFF_ON,
2235 };
2236 
2237 static struct gdsc ife_0_gdsc = {
2238     .gdscr = 0xa004,
2239     .pd = {
2240         .name = "ife_0_gdsc",
2241     },
2242     .flags = POLL_CFG_GDSCR,
2243     .parent = &titan_top_gdsc.pd,
2244     .pwrsts = PWRSTS_OFF_ON,
2245 };
2246 
2247 static struct gdsc ife_1_gdsc = {
2248     .gdscr = 0xb004,
2249     .pd = {
2250         .name = "ife_1_gdsc",
2251     },
2252     .flags = POLL_CFG_GDSCR,
2253     .parent = &titan_top_gdsc.pd,
2254     .pwrsts = PWRSTS_OFF_ON,
2255 };
2256 
2257 static struct gdsc titan_top_gdsc = {
2258     .gdscr = 0xc144,
2259     .pd = {
2260         .name = "titan_top_gdsc",
2261     },
2262     .flags = POLL_CFG_GDSCR,
2263     .pwrsts = PWRSTS_OFF_ON,
2264 };
2265 
2266 static struct clk_regmap *cam_cc_sm8250_clocks[] = {
2267     [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
2268     [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
2269     [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
2270     [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
2271     [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
2272     [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
2273     [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
2274     [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
2275     [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
2276     [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
2277     [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
2278     [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
2279     [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
2280     [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
2281     [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
2282     [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
2283     [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
2284     [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
2285     [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
2286     [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
2287     [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
2288     [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
2289     [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
2290     [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
2291     [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
2292     [CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
2293     [CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
2294     [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
2295     [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
2296     [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
2297     [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
2298     [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
2299     [CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
2300     [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
2301     [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
2302     [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
2303     [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
2304     [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr,
2305     [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
2306     [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
2307     [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
2308     [CAM_CC_IFE_0_AHB_CLK] = &cam_cc_ife_0_ahb_clk.clkr,
2309     [CAM_CC_IFE_0_AREG_CLK] = &cam_cc_ife_0_areg_clk.clkr,
2310     [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
2311     [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
2312     [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
2313     [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
2314     [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
2315     [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
2316     [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
2317     [CAM_CC_IFE_1_AHB_CLK] = &cam_cc_ife_1_ahb_clk.clkr,
2318     [CAM_CC_IFE_1_AREG_CLK] = &cam_cc_ife_1_areg_clk.clkr,
2319     [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
2320     [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
2321     [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
2322     [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
2323     [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
2324     [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
2325     [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
2326     [CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
2327     [CAM_CC_IFE_LITE_AXI_CLK] = &cam_cc_ife_lite_axi_clk.clkr,
2328     [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
2329     [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
2330     [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
2331     [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
2332     [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
2333     [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
2334     [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
2335     [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
2336     [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
2337     [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
2338     [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
2339     [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
2340     [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
2341     [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
2342     [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
2343     [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
2344     [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
2345     [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
2346     [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
2347     [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
2348     [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
2349     [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
2350     [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
2351     [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
2352     [CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
2353     [CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
2354     [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
2355     [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
2356     [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
2357     [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
2358     [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
2359     [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
2360     [CAM_CC_PLL2_OUT_MAIN] = &cam_cc_pll2_out_main.clkr,
2361     [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
2362     [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
2363     [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
2364     [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
2365     [CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr,
2366     [CAM_CC_SBI_AXI_CLK] = &cam_cc_sbi_axi_clk.clkr,
2367     [CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
2368     [CAM_CC_SBI_CPHY_RX_CLK] = &cam_cc_sbi_cphy_rx_clk.clkr,
2369     [CAM_CC_SBI_CSID_CLK] = &cam_cc_sbi_csid_clk.clkr,
2370     [CAM_CC_SBI_CSID_CLK_SRC] = &cam_cc_sbi_csid_clk_src.clkr,
2371     [CAM_CC_SBI_DIV_CLK_SRC] = &cam_cc_sbi_div_clk_src.clkr,
2372     [CAM_CC_SBI_IFE_0_CLK] = &cam_cc_sbi_ife_0_clk.clkr,
2373     [CAM_CC_SBI_IFE_1_CLK] = &cam_cc_sbi_ife_1_clk.clkr,
2374     [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
2375     [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
2376     [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
2377     [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
2378 };
2379 
2380 static struct gdsc *cam_cc_sm8250_gdscs[] = {
2381     [BPS_GDSC] = &bps_gdsc,
2382     [IPE_0_GDSC] = &ipe_0_gdsc,
2383     [SBI_GDSC] = &sbi_gdsc,
2384     [IFE_0_GDSC] = &ife_0_gdsc,
2385     [IFE_1_GDSC] = &ife_1_gdsc,
2386     [TITAN_TOP_GDSC] = &titan_top_gdsc,
2387 };
2388 
2389 static const struct qcom_reset_map cam_cc_sm8250_resets[] = {
2390     [CAM_CC_BPS_BCR] = { 0x7000 },
2391     [CAM_CC_ICP_BCR] = { 0xc070 },
2392     [CAM_CC_IFE_0_BCR] = { 0xa000 },
2393     [CAM_CC_IFE_1_BCR] = { 0xb000 },
2394     [CAM_CC_IPE_0_BCR] = { 0x8000 },
2395     [CAM_CC_SBI_BCR] = { 0x9000 },
2396 };
2397 
2398 static const struct regmap_config cam_cc_sm8250_regmap_config = {
2399     .reg_bits = 32,
2400     .reg_stride = 4,
2401     .val_bits = 32,
2402     .max_register = 0xe004,
2403     .fast_io = true,
2404 };
2405 
2406 static const struct qcom_cc_desc cam_cc_sm8250_desc = {
2407     .config = &cam_cc_sm8250_regmap_config,
2408     .clks = cam_cc_sm8250_clocks,
2409     .num_clks = ARRAY_SIZE(cam_cc_sm8250_clocks),
2410     .resets = cam_cc_sm8250_resets,
2411     .num_resets = ARRAY_SIZE(cam_cc_sm8250_resets),
2412     .gdscs = cam_cc_sm8250_gdscs,
2413     .num_gdscs = ARRAY_SIZE(cam_cc_sm8250_gdscs),
2414 };
2415 
2416 static const struct of_device_id cam_cc_sm8250_match_table[] = {
2417     { .compatible = "qcom,sm8250-camcc" },
2418     { }
2419 };
2420 MODULE_DEVICE_TABLE(of, cam_cc_sm8250_match_table);
2421 
2422 static int cam_cc_sm8250_probe(struct platform_device *pdev)
2423 {
2424     struct regmap *regmap;
2425 
2426     regmap = qcom_cc_map(pdev, &cam_cc_sm8250_desc);
2427     if (IS_ERR(regmap))
2428         return PTR_ERR(regmap);
2429 
2430     clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
2431     clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
2432     clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
2433     clk_lucid_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
2434     clk_lucid_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
2435 
2436     return qcom_cc_really_probe(pdev, &cam_cc_sm8250_desc, regmap);
2437 }
2438 
2439 static struct platform_driver cam_cc_sm8250_driver = {
2440     .probe = cam_cc_sm8250_probe,
2441     .driver = {
2442         .name = "cam_cc-sm8250",
2443         .of_match_table = cam_cc_sm8250_match_table,
2444     },
2445 };
2446 
2447 module_platform_driver(cam_cc_sm8250_driver);
2448 
2449 MODULE_DESCRIPTION("QTI CAMCC SM8250 Driver");
2450 MODULE_LICENSE("GPL v2");