Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (c) 2018, 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 
0011 #include <dt-bindings/clock/qcom,camcc-sdm845.h>
0012 
0013 #include "common.h"
0014 #include "clk-alpha-pll.h"
0015 #include "clk-branch.h"
0016 #include "clk-rcg.h"
0017 #include "clk-regmap.h"
0018 #include "gdsc.h"
0019 
0020 enum {
0021     P_BI_TCXO,
0022     P_CAM_CC_PLL0_OUT_EVEN,
0023     P_CAM_CC_PLL1_OUT_EVEN,
0024     P_CAM_CC_PLL2_OUT_EVEN,
0025     P_CAM_CC_PLL3_OUT_EVEN,
0026 };
0027 
0028 static struct clk_alpha_pll cam_cc_pll0 = {
0029     .offset = 0x0,
0030     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0031     .clkr = {
0032         .hw.init = &(struct clk_init_data){
0033             .name = "cam_cc_pll0",
0034             .parent_data = &(const struct clk_parent_data){
0035                 .fw_name = "bi_tcxo", .name = "bi_tcxo",
0036             },
0037             .num_parents = 1,
0038             .ops = &clk_alpha_pll_fabia_ops,
0039         },
0040     },
0041 };
0042 
0043 static const struct clk_div_table post_div_table_fabia_even[] = {
0044     { 0x0, 1 },
0045     { 0x1, 2 },
0046     { }
0047 };
0048 
0049 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
0050     .offset = 0x0,
0051     .post_div_shift = 8,
0052     .post_div_table = post_div_table_fabia_even,
0053     .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
0054     .width = 4,
0055     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0056     .clkr.hw.init = &(struct clk_init_data){
0057         .name = "cam_cc_pll0_out_even",
0058         .parent_hws = (const struct clk_hw*[]){
0059             &cam_cc_pll0.clkr.hw,
0060         },
0061         .num_parents = 1,
0062         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0063     },
0064 };
0065 
0066 static struct clk_alpha_pll cam_cc_pll1 = {
0067     .offset = 0x1000,
0068     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0069     .clkr = {
0070         .hw.init = &(struct clk_init_data){
0071             .name = "cam_cc_pll1",
0072             .parent_data = &(const struct clk_parent_data){
0073                 .fw_name = "bi_tcxo", .name = "bi_tcxo",
0074             },
0075             .num_parents = 1,
0076             .ops = &clk_alpha_pll_fabia_ops,
0077         },
0078     },
0079 };
0080 
0081 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
0082     .offset = 0x1000,
0083     .post_div_shift = 8,
0084     .post_div_table = post_div_table_fabia_even,
0085     .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
0086     .width = 4,
0087     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0088     .clkr.hw.init = &(struct clk_init_data){
0089         .name = "cam_cc_pll1_out_even",
0090         .parent_hws = (const struct clk_hw*[]){
0091             &cam_cc_pll1.clkr.hw,
0092         },
0093         .num_parents = 1,
0094         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0095     },
0096 };
0097 
0098 static struct clk_alpha_pll cam_cc_pll2 = {
0099     .offset = 0x2000,
0100     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0101     .clkr = {
0102         .hw.init = &(struct clk_init_data){
0103             .name = "cam_cc_pll2",
0104             .parent_data = &(const struct clk_parent_data){
0105                 .fw_name = "bi_tcxo", .name = "bi_tcxo",
0106             },
0107             .num_parents = 1,
0108             .ops = &clk_alpha_pll_fabia_ops,
0109         },
0110     },
0111 };
0112 
0113 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
0114     .offset = 0x2000,
0115     .post_div_shift = 8,
0116     .post_div_table = post_div_table_fabia_even,
0117     .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
0118     .width = 4,
0119     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0120     .clkr.hw.init = &(struct clk_init_data){
0121         .name = "cam_cc_pll2_out_even",
0122         .parent_hws = (const struct clk_hw*[]){
0123             &cam_cc_pll2.clkr.hw,
0124         },
0125         .num_parents = 1,
0126         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0127     },
0128 };
0129 
0130 static struct clk_alpha_pll cam_cc_pll3 = {
0131     .offset = 0x3000,
0132     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0133     .clkr = {
0134         .hw.init = &(struct clk_init_data){
0135             .name = "cam_cc_pll3",
0136             .parent_data = &(const struct clk_parent_data){
0137                 .fw_name = "bi_tcxo", .name = "bi_tcxo",
0138             },
0139             .num_parents = 1,
0140             .ops = &clk_alpha_pll_fabia_ops,
0141         },
0142     },
0143 };
0144 
0145 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
0146     .offset = 0x3000,
0147     .post_div_shift = 8,
0148     .post_div_table = post_div_table_fabia_even,
0149     .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
0150     .width = 4,
0151     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0152     .clkr.hw.init = &(struct clk_init_data){
0153         .name = "cam_cc_pll3_out_even",
0154         .parent_hws = (const struct clk_hw*[]){
0155             &cam_cc_pll3.clkr.hw,
0156         },
0157         .num_parents = 1,
0158         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0159     },
0160 };
0161 
0162 static const struct parent_map cam_cc_parent_map_0[] = {
0163     { P_BI_TCXO, 0 },
0164     { P_CAM_CC_PLL2_OUT_EVEN, 1 },
0165     { P_CAM_CC_PLL1_OUT_EVEN, 2 },
0166     { P_CAM_CC_PLL3_OUT_EVEN, 5 },
0167     { P_CAM_CC_PLL0_OUT_EVEN, 6 },
0168 };
0169 
0170 static const struct clk_parent_data cam_cc_parent_data_0[] = {
0171     { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
0172     { .hw = &cam_cc_pll2_out_even.clkr.hw },
0173     { .hw = &cam_cc_pll1_out_even.clkr.hw },
0174     { .hw = &cam_cc_pll3_out_even.clkr.hw },
0175     { .hw = &cam_cc_pll0_out_even.clkr.hw },
0176 };
0177 
0178 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
0179     F(19200000, P_BI_TCXO, 1, 0, 0),
0180     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0181     F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
0182     F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
0183     F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
0184     F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
0185     { }
0186 };
0187 
0188 /*
0189  * As per HW design, some of the CAMCC RCGs needs to
0190  * move to XO clock during their clock disable so using
0191  * clk_rcg2_shared_ops for such RCGs. This is required
0192  * to power down the camera memories gracefully.
0193  * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
0194  * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
0195  * table and requires reconfiguration of the PLL frequency.
0196  */
0197 static struct clk_rcg2 cam_cc_bps_clk_src = {
0198     .cmd_rcgr = 0x600c,
0199     .mnd_width = 0,
0200     .hid_width = 5,
0201     .parent_map = cam_cc_parent_map_0,
0202     .freq_tbl = ftbl_cam_cc_bps_clk_src,
0203     .clkr.hw.init = &(struct clk_init_data){
0204         .name = "cam_cc_bps_clk_src",
0205         .parent_data = cam_cc_parent_data_0,
0206         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0207         .flags = CLK_SET_RATE_PARENT,
0208         .ops = &clk_rcg2_shared_ops,
0209     },
0210 };
0211 
0212 static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
0213     F(19200000, P_BI_TCXO, 1, 0, 0),
0214     F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
0215     F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
0216     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0217     { }
0218 };
0219 
0220 static struct clk_rcg2 cam_cc_cci_clk_src = {
0221     .cmd_rcgr = 0xb0d8,
0222     .mnd_width = 8,
0223     .hid_width = 5,
0224     .parent_map = cam_cc_parent_map_0,
0225     .freq_tbl = ftbl_cam_cc_cci_clk_src,
0226     .clkr.hw.init = &(struct clk_init_data){
0227         .name = "cam_cc_cci_clk_src",
0228         .parent_data = cam_cc_parent_data_0,
0229         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0230         .ops = &clk_rcg2_ops,
0231     },
0232 };
0233 
0234 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
0235     F(19200000, P_BI_TCXO, 1, 0, 0),
0236     F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0237     { }
0238 };
0239 
0240 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
0241     .cmd_rcgr = 0x9060,
0242     .mnd_width = 0,
0243     .hid_width = 5,
0244     .parent_map = cam_cc_parent_map_0,
0245     .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
0246     .clkr.hw.init = &(struct clk_init_data){
0247         .name = "cam_cc_cphy_rx_clk_src",
0248         .parent_data = cam_cc_parent_data_0,
0249         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0250         .ops = &clk_rcg2_ops,
0251     },
0252 };
0253 
0254 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
0255     F(19200000, P_BI_TCXO, 1, 0, 0),
0256     F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
0257     F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
0258     { }
0259 };
0260 
0261 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
0262     .cmd_rcgr = 0x5004,
0263     .mnd_width = 0,
0264     .hid_width = 5,
0265     .parent_map = cam_cc_parent_map_0,
0266     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0267     .clkr.hw.init = &(struct clk_init_data){
0268         .name = "cam_cc_csi0phytimer_clk_src",
0269         .parent_data = cam_cc_parent_data_0,
0270         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0271         .flags = CLK_SET_RATE_PARENT,
0272         .ops = &clk_rcg2_ops,
0273     },
0274 };
0275 
0276 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
0277     .cmd_rcgr = 0x5028,
0278     .mnd_width = 0,
0279     .hid_width = 5,
0280     .parent_map = cam_cc_parent_map_0,
0281     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0282     .clkr.hw.init = &(struct clk_init_data){
0283         .name = "cam_cc_csi1phytimer_clk_src",
0284         .parent_data = cam_cc_parent_data_0,
0285         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0286         .flags = CLK_SET_RATE_PARENT,
0287         .ops = &clk_rcg2_ops,
0288     },
0289 };
0290 
0291 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
0292     .cmd_rcgr = 0x504c,
0293     .mnd_width = 0,
0294     .hid_width = 5,
0295     .parent_map = cam_cc_parent_map_0,
0296     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0297     .clkr.hw.init = &(struct clk_init_data){
0298         .name = "cam_cc_csi2phytimer_clk_src",
0299         .parent_data = cam_cc_parent_data_0,
0300         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0301         .flags = CLK_SET_RATE_PARENT,
0302         .ops = &clk_rcg2_ops,
0303     },
0304 };
0305 
0306 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
0307     .cmd_rcgr = 0x5070,
0308     .mnd_width = 0,
0309     .hid_width = 5,
0310     .parent_map = cam_cc_parent_map_0,
0311     .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
0312     .clkr.hw.init = &(struct clk_init_data){
0313         .name = "cam_cc_csi3phytimer_clk_src",
0314         .parent_data = cam_cc_parent_data_0,
0315         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0316         .flags = CLK_SET_RATE_PARENT,
0317         .ops = &clk_rcg2_ops,
0318     },
0319 };
0320 
0321 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
0322     F(19200000, P_BI_TCXO, 1, 0, 0),
0323     F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
0324     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0325     F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
0326     F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
0327     F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
0328     { }
0329 };
0330 
0331 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
0332     .cmd_rcgr = 0x6038,
0333     .mnd_width = 0,
0334     .hid_width = 5,
0335     .parent_map = cam_cc_parent_map_0,
0336     .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
0337     .clkr.hw.init = &(struct clk_init_data){
0338         .name = "cam_cc_fast_ahb_clk_src",
0339         .parent_data = cam_cc_parent_data_0,
0340         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0341         .ops = &clk_rcg2_ops,
0342     },
0343 };
0344 
0345 static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
0346     F(19200000, P_BI_TCXO, 1, 0, 0),
0347     F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0348     F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
0349     F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
0350     F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
0351     { }
0352 };
0353 
0354 static struct clk_rcg2 cam_cc_fd_core_clk_src = {
0355     .cmd_rcgr = 0xb0b0,
0356     .mnd_width = 0,
0357     .hid_width = 5,
0358     .parent_map = cam_cc_parent_map_0,
0359     .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
0360     .clkr.hw.init = &(struct clk_init_data){
0361         .name = "cam_cc_fd_core_clk_src",
0362         .parent_data = cam_cc_parent_data_0,
0363         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0364         .ops = &clk_rcg2_shared_ops,
0365     },
0366 };
0367 
0368 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
0369     F(19200000, P_BI_TCXO, 1, 0, 0),
0370     F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0371     F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
0372     F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
0373     F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
0374     { }
0375 };
0376 
0377 static struct clk_rcg2 cam_cc_icp_clk_src = {
0378     .cmd_rcgr = 0xb088,
0379     .mnd_width = 0,
0380     .hid_width = 5,
0381     .parent_map = cam_cc_parent_map_0,
0382     .freq_tbl = ftbl_cam_cc_icp_clk_src,
0383     .clkr.hw.init = &(struct clk_init_data){
0384         .name = "cam_cc_icp_clk_src",
0385         .parent_data = cam_cc_parent_data_0,
0386         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0387         .ops = &clk_rcg2_shared_ops,
0388     },
0389 };
0390 
0391 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
0392     F(19200000, P_BI_TCXO, 1, 0, 0),
0393     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0394     F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
0395     F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
0396     F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
0397     F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
0398     { }
0399 };
0400 
0401 static struct clk_rcg2 cam_cc_ife_0_clk_src = {
0402     .cmd_rcgr = 0x900c,
0403     .mnd_width = 0,
0404     .hid_width = 5,
0405     .parent_map = cam_cc_parent_map_0,
0406     .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
0407     .clkr.hw.init = &(struct clk_init_data){
0408         .name = "cam_cc_ife_0_clk_src",
0409         .parent_data = cam_cc_parent_data_0,
0410         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0411         .flags = CLK_SET_RATE_PARENT,
0412         .ops = &clk_rcg2_shared_ops,
0413     },
0414 };
0415 
0416 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
0417     F(19200000, P_BI_TCXO, 1, 0, 0),
0418     F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
0419     F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
0420     F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
0421     { }
0422 };
0423 
0424 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
0425     .cmd_rcgr = 0x9038,
0426     .mnd_width = 0,
0427     .hid_width = 5,
0428     .parent_map = cam_cc_parent_map_0,
0429     .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
0430     .clkr.hw.init = &(struct clk_init_data){
0431         .name = "cam_cc_ife_0_csid_clk_src",
0432         .parent_data = cam_cc_parent_data_0,
0433         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0434         .ops = &clk_rcg2_shared_ops,
0435     },
0436 };
0437 
0438 static struct clk_rcg2 cam_cc_ife_1_clk_src = {
0439     .cmd_rcgr = 0xa00c,
0440     .mnd_width = 0,
0441     .hid_width = 5,
0442     .parent_map = cam_cc_parent_map_0,
0443     .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
0444     .clkr.hw.init = &(struct clk_init_data){
0445         .name = "cam_cc_ife_1_clk_src",
0446         .parent_data = cam_cc_parent_data_0,
0447         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0448         .flags = CLK_SET_RATE_PARENT,
0449         .ops = &clk_rcg2_shared_ops,
0450     },
0451 };
0452 
0453 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
0454     .cmd_rcgr = 0xa030,
0455     .mnd_width = 0,
0456     .hid_width = 5,
0457     .parent_map = cam_cc_parent_map_0,
0458     .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
0459     .clkr.hw.init = &(struct clk_init_data){
0460         .name = "cam_cc_ife_1_csid_clk_src",
0461         .parent_data = cam_cc_parent_data_0,
0462         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0463         .ops = &clk_rcg2_shared_ops,
0464     },
0465 };
0466 
0467 static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
0468     .cmd_rcgr = 0xb004,
0469     .mnd_width = 0,
0470     .hid_width = 5,
0471     .parent_map = cam_cc_parent_map_0,
0472     .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
0473     .clkr.hw.init = &(struct clk_init_data){
0474         .name = "cam_cc_ife_lite_clk_src",
0475         .parent_data = cam_cc_parent_data_0,
0476         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0477         .flags = CLK_SET_RATE_PARENT,
0478         .ops = &clk_rcg2_shared_ops,
0479     },
0480 };
0481 
0482 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
0483     .cmd_rcgr = 0xb024,
0484     .mnd_width = 0,
0485     .hid_width = 5,
0486     .parent_map = cam_cc_parent_map_0,
0487     .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
0488     .clkr.hw.init = &(struct clk_init_data){
0489         .name = "cam_cc_ife_lite_csid_clk_src",
0490         .parent_data = cam_cc_parent_data_0,
0491         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0492         .ops = &clk_rcg2_shared_ops,
0493     },
0494 };
0495 
0496 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
0497     F(19200000, P_BI_TCXO, 1, 0, 0),
0498     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0499     F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
0500     F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
0501     F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
0502     F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
0503     F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
0504     { }
0505 };
0506 
0507 static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
0508     .cmd_rcgr = 0x700c,
0509     .mnd_width = 0,
0510     .hid_width = 5,
0511     .parent_map = cam_cc_parent_map_0,
0512     .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
0513     .clkr.hw.init = &(struct clk_init_data){
0514         .name = "cam_cc_ipe_0_clk_src",
0515         .parent_data = cam_cc_parent_data_0,
0516         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0517         .flags = CLK_SET_RATE_PARENT,
0518         .ops = &clk_rcg2_shared_ops,
0519     },
0520 };
0521 
0522 static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
0523     .cmd_rcgr = 0x800c,
0524     .mnd_width = 0,
0525     .hid_width = 5,
0526     .parent_map = cam_cc_parent_map_0,
0527     .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
0528     .clkr.hw.init = &(struct clk_init_data){
0529         .name = "cam_cc_ipe_1_clk_src",
0530         .parent_data = cam_cc_parent_data_0,
0531         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0532         .flags = CLK_SET_RATE_PARENT,
0533         .ops = &clk_rcg2_shared_ops,
0534     },
0535 };
0536 
0537 static struct clk_rcg2 cam_cc_jpeg_clk_src = {
0538     .cmd_rcgr = 0xb04c,
0539     .mnd_width = 0,
0540     .hid_width = 5,
0541     .parent_map = cam_cc_parent_map_0,
0542     .freq_tbl = ftbl_cam_cc_bps_clk_src,
0543     .clkr.hw.init = &(struct clk_init_data){
0544         .name = "cam_cc_jpeg_clk_src",
0545         .parent_data = cam_cc_parent_data_0,
0546         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0547         .flags = CLK_SET_RATE_PARENT,
0548         .ops = &clk_rcg2_shared_ops,
0549     },
0550 };
0551 
0552 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
0553     F(19200000, P_BI_TCXO, 1, 0, 0),
0554     F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
0555     F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
0556     F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
0557     F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
0558     F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
0559     { }
0560 };
0561 
0562 static struct clk_rcg2 cam_cc_lrme_clk_src = {
0563     .cmd_rcgr = 0xb0f8,
0564     .mnd_width = 0,
0565     .hid_width = 5,
0566     .parent_map = cam_cc_parent_map_0,
0567     .freq_tbl = ftbl_cam_cc_lrme_clk_src,
0568     .clkr.hw.init = &(struct clk_init_data){
0569         .name = "cam_cc_lrme_clk_src",
0570         .parent_data = cam_cc_parent_data_0,
0571         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0572         .flags = CLK_SET_RATE_PARENT,
0573         .ops = &clk_rcg2_shared_ops,
0574     },
0575 };
0576 
0577 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
0578     F(19200000, P_BI_TCXO, 1, 0, 0),
0579     F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
0580     F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
0581     F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
0582     { }
0583 };
0584 
0585 static struct clk_rcg2 cam_cc_mclk0_clk_src = {
0586     .cmd_rcgr = 0x4004,
0587     .mnd_width = 8,
0588     .hid_width = 5,
0589     .parent_map = cam_cc_parent_map_0,
0590     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0591     .clkr.hw.init = &(struct clk_init_data){
0592         .name = "cam_cc_mclk0_clk_src",
0593         .parent_data = cam_cc_parent_data_0,
0594         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0595         .flags = CLK_SET_RATE_PARENT,
0596         .ops = &clk_rcg2_ops,
0597     },
0598 };
0599 
0600 static struct clk_rcg2 cam_cc_mclk1_clk_src = {
0601     .cmd_rcgr = 0x4024,
0602     .mnd_width = 8,
0603     .hid_width = 5,
0604     .parent_map = cam_cc_parent_map_0,
0605     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0606     .clkr.hw.init = &(struct clk_init_data){
0607         .name = "cam_cc_mclk1_clk_src",
0608         .parent_data = cam_cc_parent_data_0,
0609         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0610         .flags = CLK_SET_RATE_PARENT,
0611         .ops = &clk_rcg2_ops,
0612     },
0613 };
0614 
0615 static struct clk_rcg2 cam_cc_mclk2_clk_src = {
0616     .cmd_rcgr = 0x4044,
0617     .mnd_width = 8,
0618     .hid_width = 5,
0619     .parent_map = cam_cc_parent_map_0,
0620     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0621     .clkr.hw.init = &(struct clk_init_data){
0622         .name = "cam_cc_mclk2_clk_src",
0623         .parent_data = cam_cc_parent_data_0,
0624         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0625         .flags = CLK_SET_RATE_PARENT,
0626         .ops = &clk_rcg2_ops,
0627     },
0628 };
0629 
0630 static struct clk_rcg2 cam_cc_mclk3_clk_src = {
0631     .cmd_rcgr = 0x4064,
0632     .mnd_width = 8,
0633     .hid_width = 5,
0634     .parent_map = cam_cc_parent_map_0,
0635     .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
0636     .clkr.hw.init = &(struct clk_init_data){
0637         .name = "cam_cc_mclk3_clk_src",
0638         .parent_data = cam_cc_parent_data_0,
0639         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0640         .flags = CLK_SET_RATE_PARENT,
0641         .ops = &clk_rcg2_ops,
0642     },
0643 };
0644 
0645 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
0646     F(19200000, P_BI_TCXO, 1, 0, 0),
0647     F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
0648     F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
0649     F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
0650     F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
0651     { }
0652 };
0653 
0654 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
0655     .cmd_rcgr = 0x6054,
0656     .mnd_width = 0,
0657     .hid_width = 5,
0658     .parent_map = cam_cc_parent_map_0,
0659     .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
0660     .clkr.hw.init = &(struct clk_init_data){
0661         .name = "cam_cc_slow_ahb_clk_src",
0662         .parent_data = cam_cc_parent_data_0,
0663         .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
0664         .flags = CLK_SET_RATE_PARENT,
0665         .ops = &clk_rcg2_ops,
0666     },
0667 };
0668 
0669 static struct clk_branch cam_cc_bps_ahb_clk = {
0670     .halt_reg = 0x606c,
0671     .halt_check = BRANCH_HALT,
0672     .clkr = {
0673         .enable_reg = 0x606c,
0674         .enable_mask = BIT(0),
0675         .hw.init = &(struct clk_init_data){
0676             .name = "cam_cc_bps_ahb_clk",
0677             .parent_hws = (const struct clk_hw*[]){
0678                 &cam_cc_slow_ahb_clk_src.clkr.hw,
0679             },
0680             .num_parents = 1,
0681             .flags = CLK_SET_RATE_PARENT,
0682             .ops = &clk_branch2_ops,
0683         },
0684     },
0685 };
0686 
0687 static struct clk_branch cam_cc_bps_areg_clk = {
0688     .halt_reg = 0x6050,
0689     .halt_check = BRANCH_HALT,
0690     .clkr = {
0691         .enable_reg = 0x6050,
0692         .enable_mask = BIT(0),
0693         .hw.init = &(struct clk_init_data){
0694             .name = "cam_cc_bps_areg_clk",
0695             .parent_hws = (const struct clk_hw*[]){
0696                 &cam_cc_fast_ahb_clk_src.clkr.hw,
0697             },
0698             .num_parents = 1,
0699             .flags = CLK_SET_RATE_PARENT,
0700             .ops = &clk_branch2_ops,
0701         },
0702     },
0703 };
0704 
0705 static struct clk_branch cam_cc_bps_axi_clk = {
0706     .halt_reg = 0x6034,
0707     .halt_check = BRANCH_HALT,
0708     .clkr = {
0709         .enable_reg = 0x6034,
0710         .enable_mask = BIT(0),
0711         .hw.init = &(struct clk_init_data){
0712             .name = "cam_cc_bps_axi_clk",
0713             .ops = &clk_branch2_ops,
0714         },
0715     },
0716 };
0717 
0718 static struct clk_branch cam_cc_bps_clk = {
0719     .halt_reg = 0x6024,
0720     .halt_check = BRANCH_HALT,
0721     .clkr = {
0722         .enable_reg = 0x6024,
0723         .enable_mask = BIT(0),
0724         .hw.init = &(struct clk_init_data){
0725             .name = "cam_cc_bps_clk",
0726             .parent_hws = (const struct clk_hw*[]){
0727                 &cam_cc_bps_clk_src.clkr.hw,
0728             },
0729             .num_parents = 1,
0730             .flags = CLK_SET_RATE_PARENT,
0731             .ops = &clk_branch2_ops,
0732         },
0733     },
0734 };
0735 
0736 static struct clk_branch cam_cc_camnoc_atb_clk = {
0737     .halt_reg = 0xb12c,
0738     .halt_check = BRANCH_HALT,
0739     .clkr = {
0740         .enable_reg = 0xb12c,
0741         .enable_mask = BIT(0),
0742         .hw.init = &(struct clk_init_data){
0743             .name = "cam_cc_camnoc_atb_clk",
0744             .ops = &clk_branch2_ops,
0745         },
0746     },
0747 };
0748 
0749 static struct clk_branch cam_cc_camnoc_axi_clk = {
0750     .halt_reg = 0xb124,
0751     .halt_check = BRANCH_HALT,
0752     .clkr = {
0753         .enable_reg = 0xb124,
0754         .enable_mask = BIT(0),
0755         .hw.init = &(struct clk_init_data){
0756             .name = "cam_cc_camnoc_axi_clk",
0757             .ops = &clk_branch2_ops,
0758         },
0759     },
0760 };
0761 
0762 static struct clk_branch cam_cc_cci_clk = {
0763     .halt_reg = 0xb0f0,
0764     .halt_check = BRANCH_HALT,
0765     .clkr = {
0766         .enable_reg = 0xb0f0,
0767         .enable_mask = BIT(0),
0768         .hw.init = &(struct clk_init_data){
0769             .name = "cam_cc_cci_clk",
0770             .parent_hws = (const struct clk_hw*[]){
0771                 &cam_cc_cci_clk_src.clkr.hw,
0772             },
0773             .num_parents = 1,
0774             .flags = CLK_SET_RATE_PARENT,
0775             .ops = &clk_branch2_ops,
0776         },
0777     },
0778 };
0779 
0780 static struct clk_branch cam_cc_cpas_ahb_clk = {
0781     .halt_reg = 0xb11c,
0782     .halt_check = BRANCH_HALT,
0783     .clkr = {
0784         .enable_reg = 0xb11c,
0785         .enable_mask = BIT(0),
0786         .hw.init = &(struct clk_init_data){
0787             .name = "cam_cc_cpas_ahb_clk",
0788             .parent_hws = (const struct clk_hw*[]){
0789                 &cam_cc_slow_ahb_clk_src.clkr.hw,
0790             },
0791             .num_parents = 1,
0792             .flags = CLK_SET_RATE_PARENT,
0793             .ops = &clk_branch2_ops,
0794         },
0795     },
0796 };
0797 
0798 static struct clk_branch cam_cc_csi0phytimer_clk = {
0799     .halt_reg = 0x501c,
0800     .halt_check = BRANCH_HALT,
0801     .clkr = {
0802         .enable_reg = 0x501c,
0803         .enable_mask = BIT(0),
0804         .hw.init = &(struct clk_init_data){
0805             .name = "cam_cc_csi0phytimer_clk",
0806             .parent_hws = (const struct clk_hw*[]){
0807                 &cam_cc_csi0phytimer_clk_src.clkr.hw,
0808             },
0809             .num_parents = 1,
0810             .flags = CLK_SET_RATE_PARENT,
0811             .ops = &clk_branch2_ops,
0812         },
0813     },
0814 };
0815 
0816 static struct clk_branch cam_cc_csi1phytimer_clk = {
0817     .halt_reg = 0x5040,
0818     .halt_check = BRANCH_HALT,
0819     .clkr = {
0820         .enable_reg = 0x5040,
0821         .enable_mask = BIT(0),
0822         .hw.init = &(struct clk_init_data){
0823             .name = "cam_cc_csi1phytimer_clk",
0824             .parent_hws = (const struct clk_hw*[]){
0825                 &cam_cc_csi1phytimer_clk_src.clkr.hw,
0826             },
0827             .num_parents = 1,
0828             .flags = CLK_SET_RATE_PARENT,
0829             .ops = &clk_branch2_ops,
0830         },
0831     },
0832 };
0833 
0834 static struct clk_branch cam_cc_csi2phytimer_clk = {
0835     .halt_reg = 0x5064,
0836     .halt_check = BRANCH_HALT,
0837     .clkr = {
0838         .enable_reg = 0x5064,
0839         .enable_mask = BIT(0),
0840         .hw.init = &(struct clk_init_data){
0841             .name = "cam_cc_csi2phytimer_clk",
0842             .parent_hws = (const struct clk_hw*[]){
0843                 &cam_cc_csi2phytimer_clk_src.clkr.hw,
0844             },
0845             .num_parents = 1,
0846             .flags = CLK_SET_RATE_PARENT,
0847             .ops = &clk_branch2_ops,
0848         },
0849     },
0850 };
0851 
0852 static struct clk_branch cam_cc_csi3phytimer_clk = {
0853     .halt_reg = 0x5088,
0854     .halt_check = BRANCH_HALT,
0855     .clkr = {
0856         .enable_reg = 0x5088,
0857         .enable_mask = BIT(0),
0858         .hw.init = &(struct clk_init_data){
0859             .name = "cam_cc_csi3phytimer_clk",
0860             .parent_hws = (const struct clk_hw*[]){
0861                 &cam_cc_csi3phytimer_clk_src.clkr.hw,
0862             },
0863             .num_parents = 1,
0864             .flags = CLK_SET_RATE_PARENT,
0865             .ops = &clk_branch2_ops,
0866         },
0867     },
0868 };
0869 
0870 static struct clk_branch cam_cc_csiphy0_clk = {
0871     .halt_reg = 0x5020,
0872     .halt_check = BRANCH_HALT,
0873     .clkr = {
0874         .enable_reg = 0x5020,
0875         .enable_mask = BIT(0),
0876         .hw.init = &(struct clk_init_data){
0877             .name = "cam_cc_csiphy0_clk",
0878             .parent_hws = (const struct clk_hw*[]){
0879                 &cam_cc_cphy_rx_clk_src.clkr.hw,
0880             },
0881             .num_parents = 1,
0882             .flags = CLK_SET_RATE_PARENT,
0883             .ops = &clk_branch2_ops,
0884         },
0885     },
0886 };
0887 
0888 static struct clk_branch cam_cc_csiphy1_clk = {
0889     .halt_reg = 0x5044,
0890     .halt_check = BRANCH_HALT,
0891     .clkr = {
0892         .enable_reg = 0x5044,
0893         .enable_mask = BIT(0),
0894         .hw.init = &(struct clk_init_data){
0895             .name = "cam_cc_csiphy1_clk",
0896             .parent_hws = (const struct clk_hw*[]){
0897                 &cam_cc_cphy_rx_clk_src.clkr.hw,
0898             },
0899             .num_parents = 1,
0900             .flags = CLK_SET_RATE_PARENT,
0901             .ops = &clk_branch2_ops,
0902         },
0903     },
0904 };
0905 
0906 static struct clk_branch cam_cc_csiphy2_clk = {
0907     .halt_reg = 0x5068,
0908     .halt_check = BRANCH_HALT,
0909     .clkr = {
0910         .enable_reg = 0x5068,
0911         .enable_mask = BIT(0),
0912         .hw.init = &(struct clk_init_data){
0913             .name = "cam_cc_csiphy2_clk",
0914             .parent_hws = (const struct clk_hw*[]){
0915                 &cam_cc_cphy_rx_clk_src.clkr.hw,
0916             },
0917             .num_parents = 1,
0918             .flags = CLK_SET_RATE_PARENT,
0919             .ops = &clk_branch2_ops,
0920         },
0921     },
0922 };
0923 
0924 static struct clk_branch cam_cc_csiphy3_clk = {
0925     .halt_reg = 0x508c,
0926     .halt_check = BRANCH_HALT,
0927     .clkr = {
0928         .enable_reg = 0x508c,
0929         .enable_mask = BIT(0),
0930         .hw.init = &(struct clk_init_data){
0931             .name = "cam_cc_csiphy3_clk",
0932             .parent_hws = (const struct clk_hw*[]){
0933                 &cam_cc_cphy_rx_clk_src.clkr.hw,
0934             },
0935             .num_parents = 1,
0936             .flags = CLK_SET_RATE_PARENT,
0937             .ops = &clk_branch2_ops,
0938         },
0939     },
0940 };
0941 
0942 static struct clk_branch cam_cc_fd_core_clk = {
0943     .halt_reg = 0xb0c8,
0944     .halt_check = BRANCH_HALT,
0945     .clkr = {
0946         .enable_reg = 0xb0c8,
0947         .enable_mask = BIT(0),
0948         .hw.init = &(struct clk_init_data){
0949             .name = "cam_cc_fd_core_clk",
0950             .parent_hws = (const struct clk_hw*[]){
0951                 &cam_cc_fd_core_clk_src.clkr.hw,
0952             },
0953             .num_parents = 1,
0954             .flags = CLK_SET_RATE_PARENT,
0955             .ops = &clk_branch2_ops,
0956         },
0957     },
0958 };
0959 
0960 static struct clk_branch cam_cc_fd_core_uar_clk = {
0961     .halt_reg = 0xb0d0,
0962     .halt_check = BRANCH_HALT,
0963     .clkr = {
0964         .enable_reg = 0xb0d0,
0965         .enable_mask = BIT(0),
0966         .hw.init = &(struct clk_init_data){
0967             .name = "cam_cc_fd_core_uar_clk",
0968             .parent_hws = (const struct clk_hw*[]){
0969                 &cam_cc_fd_core_clk_src.clkr.hw,
0970             },
0971             .num_parents = 1,
0972             .ops = &clk_branch2_ops,
0973         },
0974     },
0975 };
0976 
0977 static struct clk_branch cam_cc_icp_apb_clk = {
0978     .halt_reg = 0xb084,
0979     .halt_check = BRANCH_HALT,
0980     .clkr = {
0981         .enable_reg = 0xb084,
0982         .enable_mask = BIT(0),
0983         .hw.init = &(struct clk_init_data){
0984             .name = "cam_cc_icp_apb_clk",
0985             .ops = &clk_branch2_ops,
0986         },
0987     },
0988 };
0989 
0990 static struct clk_branch cam_cc_icp_atb_clk = {
0991     .halt_reg = 0xb078,
0992     .halt_check = BRANCH_HALT,
0993     .clkr = {
0994         .enable_reg = 0xb078,
0995         .enable_mask = BIT(0),
0996         .hw.init = &(struct clk_init_data){
0997             .name = "cam_cc_icp_atb_clk",
0998             .ops = &clk_branch2_ops,
0999         },
1000     },
1001 };
1002 
1003 static struct clk_branch cam_cc_icp_clk = {
1004     .halt_reg = 0xb0a0,
1005     .halt_check = BRANCH_HALT,
1006     .clkr = {
1007         .enable_reg = 0xb0a0,
1008         .enable_mask = BIT(0),
1009         .hw.init = &(struct clk_init_data){
1010             .name = "cam_cc_icp_clk",
1011             .parent_hws = (const struct clk_hw*[]){
1012                 &cam_cc_icp_clk_src.clkr.hw,
1013             },
1014             .num_parents = 1,
1015             .flags = CLK_SET_RATE_PARENT,
1016             .ops = &clk_branch2_ops,
1017         },
1018     },
1019 };
1020 
1021 static struct clk_branch cam_cc_icp_cti_clk = {
1022     .halt_reg = 0xb07c,
1023     .halt_check = BRANCH_HALT,
1024     .clkr = {
1025         .enable_reg = 0xb07c,
1026         .enable_mask = BIT(0),
1027         .hw.init = &(struct clk_init_data){
1028             .name = "cam_cc_icp_cti_clk",
1029             .ops = &clk_branch2_ops,
1030         },
1031     },
1032 };
1033 
1034 static struct clk_branch cam_cc_icp_ts_clk = {
1035     .halt_reg = 0xb080,
1036     .halt_check = BRANCH_HALT,
1037     .clkr = {
1038         .enable_reg = 0xb080,
1039         .enable_mask = BIT(0),
1040         .hw.init = &(struct clk_init_data){
1041             .name = "cam_cc_icp_ts_clk",
1042             .ops = &clk_branch2_ops,
1043         },
1044     },
1045 };
1046 
1047 static struct clk_branch cam_cc_ife_0_axi_clk = {
1048     .halt_reg = 0x907c,
1049     .halt_check = BRANCH_HALT,
1050     .clkr = {
1051         .enable_reg = 0x907c,
1052         .enable_mask = BIT(0),
1053         .hw.init = &(struct clk_init_data){
1054             .name = "cam_cc_ife_0_axi_clk",
1055             .ops = &clk_branch2_ops,
1056         },
1057     },
1058 };
1059 
1060 static struct clk_branch cam_cc_ife_0_clk = {
1061     .halt_reg = 0x9024,
1062     .halt_check = BRANCH_HALT,
1063     .clkr = {
1064         .enable_reg = 0x9024,
1065         .enable_mask = BIT(0),
1066         .hw.init = &(struct clk_init_data){
1067             .name = "cam_cc_ife_0_clk",
1068             .parent_hws = (const struct clk_hw*[]){
1069                 &cam_cc_ife_0_clk_src.clkr.hw,
1070             },
1071             .num_parents = 1,
1072             .flags = CLK_SET_RATE_PARENT,
1073             .ops = &clk_branch2_ops,
1074         },
1075     },
1076 };
1077 
1078 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1079     .halt_reg = 0x9078,
1080     .halt_check = BRANCH_HALT,
1081     .clkr = {
1082         .enable_reg = 0x9078,
1083         .enable_mask = BIT(0),
1084         .hw.init = &(struct clk_init_data){
1085             .name = "cam_cc_ife_0_cphy_rx_clk",
1086             .parent_hws = (const struct clk_hw*[]){
1087                 &cam_cc_cphy_rx_clk_src.clkr.hw,
1088             },
1089             .num_parents = 1,
1090             .flags = CLK_SET_RATE_PARENT,
1091             .ops = &clk_branch2_ops,
1092         },
1093     },
1094 };
1095 
1096 static struct clk_branch cam_cc_ife_0_csid_clk = {
1097     .halt_reg = 0x9050,
1098     .halt_check = BRANCH_HALT,
1099     .clkr = {
1100         .enable_reg = 0x9050,
1101         .enable_mask = BIT(0),
1102         .hw.init = &(struct clk_init_data){
1103             .name = "cam_cc_ife_0_csid_clk",
1104             .parent_hws = (const struct clk_hw*[]){
1105                 &cam_cc_ife_0_csid_clk_src.clkr.hw,
1106             },
1107             .num_parents = 1,
1108             .flags = CLK_SET_RATE_PARENT,
1109             .ops = &clk_branch2_ops,
1110         },
1111     },
1112 };
1113 
1114 static struct clk_branch cam_cc_ife_0_dsp_clk = {
1115     .halt_reg = 0x9034,
1116     .halt_check = BRANCH_HALT,
1117     .clkr = {
1118         .enable_reg = 0x9034,
1119         .enable_mask = BIT(0),
1120         .hw.init = &(struct clk_init_data){
1121             .name = "cam_cc_ife_0_dsp_clk",
1122             .parent_hws = (const struct clk_hw*[]){
1123                 &cam_cc_ife_0_clk_src.clkr.hw,
1124             },
1125             .num_parents = 1,
1126             .ops = &clk_branch2_ops,
1127         },
1128     },
1129 };
1130 
1131 static struct clk_branch cam_cc_ife_1_axi_clk = {
1132     .halt_reg = 0xa054,
1133     .halt_check = BRANCH_HALT,
1134     .clkr = {
1135         .enable_reg = 0xa054,
1136         .enable_mask = BIT(0),
1137         .hw.init = &(struct clk_init_data){
1138             .name = "cam_cc_ife_1_axi_clk",
1139             .ops = &clk_branch2_ops,
1140         },
1141     },
1142 };
1143 
1144 static struct clk_branch cam_cc_ife_1_clk = {
1145     .halt_reg = 0xa024,
1146     .halt_check = BRANCH_HALT,
1147     .clkr = {
1148         .enable_reg = 0xa024,
1149         .enable_mask = BIT(0),
1150         .hw.init = &(struct clk_init_data){
1151             .name = "cam_cc_ife_1_clk",
1152             .parent_hws = (const struct clk_hw*[]){
1153                 &cam_cc_ife_1_clk_src.clkr.hw,
1154             },
1155             .num_parents = 1,
1156             .flags = CLK_SET_RATE_PARENT,
1157             .ops = &clk_branch2_ops,
1158         },
1159     },
1160 };
1161 
1162 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1163     .halt_reg = 0xa050,
1164     .halt_check = BRANCH_HALT,
1165     .clkr = {
1166         .enable_reg = 0xa050,
1167         .enable_mask = BIT(0),
1168         .hw.init = &(struct clk_init_data){
1169             .name = "cam_cc_ife_1_cphy_rx_clk",
1170             .parent_hws = (const struct clk_hw*[]){
1171                 &cam_cc_cphy_rx_clk_src.clkr.hw,
1172             },
1173             .num_parents = 1,
1174             .flags = CLK_SET_RATE_PARENT,
1175             .ops = &clk_branch2_ops,
1176         },
1177     },
1178 };
1179 
1180 static struct clk_branch cam_cc_ife_1_csid_clk = {
1181     .halt_reg = 0xa048,
1182     .halt_check = BRANCH_HALT,
1183     .clkr = {
1184         .enable_reg = 0xa048,
1185         .enable_mask = BIT(0),
1186         .hw.init = &(struct clk_init_data){
1187             .name = "cam_cc_ife_1_csid_clk",
1188             .parent_hws = (const struct clk_hw*[]){
1189                 &cam_cc_ife_1_csid_clk_src.clkr.hw,
1190             },
1191             .num_parents = 1,
1192             .flags = CLK_SET_RATE_PARENT,
1193             .ops = &clk_branch2_ops,
1194         },
1195     },
1196 };
1197 
1198 static struct clk_branch cam_cc_ife_1_dsp_clk = {
1199     .halt_reg = 0xa02c,
1200     .halt_check = BRANCH_HALT,
1201     .clkr = {
1202         .enable_reg = 0xa02c,
1203         .enable_mask = BIT(0),
1204         .hw.init = &(struct clk_init_data){
1205             .name = "cam_cc_ife_1_dsp_clk",
1206             .parent_hws = (const struct clk_hw*[]){
1207                 &cam_cc_ife_1_clk_src.clkr.hw,
1208             },
1209             .num_parents = 1,
1210             .ops = &clk_branch2_ops,
1211         },
1212     },
1213 };
1214 
1215 static struct clk_branch cam_cc_ife_lite_clk = {
1216     .halt_reg = 0xb01c,
1217     .halt_check = BRANCH_HALT,
1218     .clkr = {
1219         .enable_reg = 0xb01c,
1220         .enable_mask = BIT(0),
1221         .hw.init = &(struct clk_init_data){
1222             .name = "cam_cc_ife_lite_clk",
1223             .parent_hws = (const struct clk_hw*[]){
1224                 &cam_cc_ife_lite_clk_src.clkr.hw,
1225             },
1226             .num_parents = 1,
1227             .flags = CLK_SET_RATE_PARENT,
1228             .ops = &clk_branch2_ops,
1229         },
1230     },
1231 };
1232 
1233 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
1234     .halt_reg = 0xb044,
1235     .halt_check = BRANCH_HALT,
1236     .clkr = {
1237         .enable_reg = 0xb044,
1238         .enable_mask = BIT(0),
1239         .hw.init = &(struct clk_init_data){
1240             .name = "cam_cc_ife_lite_cphy_rx_clk",
1241             .parent_hws = (const struct clk_hw*[]){
1242                 &cam_cc_cphy_rx_clk_src.clkr.hw,
1243             },
1244             .num_parents = 1,
1245             .flags = CLK_SET_RATE_PARENT,
1246             .ops = &clk_branch2_ops,
1247         },
1248     },
1249 };
1250 
1251 static struct clk_branch cam_cc_ife_lite_csid_clk = {
1252     .halt_reg = 0xb03c,
1253     .halt_check = BRANCH_HALT,
1254     .clkr = {
1255         .enable_reg = 0xb03c,
1256         .enable_mask = BIT(0),
1257         .hw.init = &(struct clk_init_data){
1258             .name = "cam_cc_ife_lite_csid_clk",
1259             .parent_hws = (const struct clk_hw*[]){
1260                 &cam_cc_ife_lite_csid_clk_src.clkr.hw,
1261             },
1262             .num_parents = 1,
1263             .flags = CLK_SET_RATE_PARENT,
1264             .ops = &clk_branch2_ops,
1265         },
1266     },
1267 };
1268 
1269 static struct clk_branch cam_cc_ipe_0_ahb_clk = {
1270     .halt_reg = 0x703c,
1271     .halt_check = BRANCH_HALT,
1272     .clkr = {
1273         .enable_reg = 0x703c,
1274         .enable_mask = BIT(0),
1275         .hw.init = &(struct clk_init_data){
1276             .name = "cam_cc_ipe_0_ahb_clk",
1277             .parent_hws = (const struct clk_hw*[]){
1278                 &cam_cc_slow_ahb_clk_src.clkr.hw,
1279             },
1280             .num_parents = 1,
1281             .flags = CLK_SET_RATE_PARENT,
1282             .ops = &clk_branch2_ops,
1283         },
1284     },
1285 };
1286 
1287 static struct clk_branch cam_cc_ipe_0_areg_clk = {
1288     .halt_reg = 0x7038,
1289     .halt_check = BRANCH_HALT,
1290     .clkr = {
1291         .enable_reg = 0x7038,
1292         .enable_mask = BIT(0),
1293         .hw.init = &(struct clk_init_data){
1294             .name = "cam_cc_ipe_0_areg_clk",
1295             .parent_hws = (const struct clk_hw*[]){
1296                 &cam_cc_fast_ahb_clk_src.clkr.hw,
1297             },
1298             .num_parents = 1,
1299             .flags = CLK_SET_RATE_PARENT,
1300             .ops = &clk_branch2_ops,
1301         },
1302     },
1303 };
1304 
1305 static struct clk_branch cam_cc_ipe_0_axi_clk = {
1306     .halt_reg = 0x7034,
1307     .halt_check = BRANCH_HALT,
1308     .clkr = {
1309         .enable_reg = 0x7034,
1310         .enable_mask = BIT(0),
1311         .hw.init = &(struct clk_init_data){
1312             .name = "cam_cc_ipe_0_axi_clk",
1313             .ops = &clk_branch2_ops,
1314         },
1315     },
1316 };
1317 
1318 static struct clk_branch cam_cc_ipe_0_clk = {
1319     .halt_reg = 0x7024,
1320     .halt_check = BRANCH_HALT,
1321     .clkr = {
1322         .enable_reg = 0x7024,
1323         .enable_mask = BIT(0),
1324         .hw.init = &(struct clk_init_data){
1325             .name = "cam_cc_ipe_0_clk",
1326             .parent_hws = (const struct clk_hw*[]){
1327                 &cam_cc_ipe_0_clk_src.clkr.hw,
1328             },
1329             .num_parents = 1,
1330             .flags = CLK_SET_RATE_PARENT,
1331             .ops = &clk_branch2_ops,
1332         },
1333     },
1334 };
1335 
1336 static struct clk_branch cam_cc_ipe_1_ahb_clk = {
1337     .halt_reg = 0x803c,
1338     .halt_check = BRANCH_HALT,
1339     .clkr = {
1340         .enable_reg = 0x803c,
1341         .enable_mask = BIT(0),
1342         .hw.init = &(struct clk_init_data){
1343             .name = "cam_cc_ipe_1_ahb_clk",
1344             .parent_hws = (const struct clk_hw*[]){
1345                 &cam_cc_slow_ahb_clk_src.clkr.hw,
1346             },
1347             .num_parents = 1,
1348             .flags = CLK_SET_RATE_PARENT,
1349             .ops = &clk_branch2_ops,
1350         },
1351     },
1352 };
1353 
1354 static struct clk_branch cam_cc_ipe_1_areg_clk = {
1355     .halt_reg = 0x8038,
1356     .halt_check = BRANCH_HALT,
1357     .clkr = {
1358         .enable_reg = 0x8038,
1359         .enable_mask = BIT(0),
1360         .hw.init = &(struct clk_init_data){
1361             .name = "cam_cc_ipe_1_areg_clk",
1362             .parent_hws = (const struct clk_hw*[]){
1363                 &cam_cc_fast_ahb_clk_src.clkr.hw,
1364             },
1365             .num_parents = 1,
1366             .flags = CLK_SET_RATE_PARENT,
1367             .ops = &clk_branch2_ops,
1368         },
1369     },
1370 };
1371 
1372 static struct clk_branch cam_cc_ipe_1_axi_clk = {
1373     .halt_reg = 0x8034,
1374     .halt_check = BRANCH_HALT,
1375     .clkr = {
1376         .enable_reg = 0x8034,
1377         .enable_mask = BIT(0),
1378         .hw.init = &(struct clk_init_data){
1379             .name = "cam_cc_ipe_1_axi_clk",
1380             .ops = &clk_branch2_ops,
1381         },
1382     },
1383 };
1384 
1385 static struct clk_branch cam_cc_ipe_1_clk = {
1386     .halt_reg = 0x8024,
1387     .halt_check = BRANCH_HALT,
1388     .clkr = {
1389         .enable_reg = 0x8024,
1390         .enable_mask = BIT(0),
1391         .hw.init = &(struct clk_init_data){
1392             .name = "cam_cc_ipe_1_clk",
1393             .parent_hws = (const struct clk_hw*[]){
1394                 &cam_cc_ipe_1_clk_src.clkr.hw,
1395             },
1396             .num_parents = 1,
1397             .flags = CLK_SET_RATE_PARENT,
1398             .ops = &clk_branch2_ops,
1399         },
1400     },
1401 };
1402 
1403 static struct clk_branch cam_cc_jpeg_clk = {
1404     .halt_reg = 0xb064,
1405     .halt_check = BRANCH_HALT,
1406     .clkr = {
1407         .enable_reg = 0xb064,
1408         .enable_mask = BIT(0),
1409         .hw.init = &(struct clk_init_data){
1410             .name = "cam_cc_jpeg_clk",
1411             .parent_hws = (const struct clk_hw*[]){
1412                 &cam_cc_jpeg_clk_src.clkr.hw,
1413             },
1414             .num_parents = 1,
1415             .flags = CLK_SET_RATE_PARENT,
1416             .ops = &clk_branch2_ops,
1417         },
1418     },
1419 };
1420 
1421 static struct clk_branch cam_cc_lrme_clk = {
1422     .halt_reg = 0xb110,
1423     .halt_check = BRANCH_HALT,
1424     .clkr = {
1425         .enable_reg = 0xb110,
1426         .enable_mask = BIT(0),
1427         .hw.init = &(struct clk_init_data){
1428             .name = "cam_cc_lrme_clk",
1429             .parent_hws = (const struct clk_hw*[]){
1430                 &cam_cc_lrme_clk_src.clkr.hw,
1431             },
1432             .num_parents = 1,
1433             .flags = CLK_SET_RATE_PARENT,
1434             .ops = &clk_branch2_ops,
1435         },
1436     },
1437 };
1438 
1439 static struct clk_branch cam_cc_mclk0_clk = {
1440     .halt_reg = 0x401c,
1441     .halt_check = BRANCH_HALT,
1442     .clkr = {
1443         .enable_reg = 0x401c,
1444         .enable_mask = BIT(0),
1445         .hw.init = &(struct clk_init_data){
1446             .name = "cam_cc_mclk0_clk",
1447             .parent_hws = (const struct clk_hw*[]){
1448                 &cam_cc_mclk0_clk_src.clkr.hw,
1449             },
1450             .num_parents = 1,
1451             .flags = CLK_SET_RATE_PARENT,
1452             .ops = &clk_branch2_ops,
1453         },
1454     },
1455 };
1456 
1457 static struct clk_branch cam_cc_mclk1_clk = {
1458     .halt_reg = 0x403c,
1459     .halt_check = BRANCH_HALT,
1460     .clkr = {
1461         .enable_reg = 0x403c,
1462         .enable_mask = BIT(0),
1463         .hw.init = &(struct clk_init_data){
1464             .name = "cam_cc_mclk1_clk",
1465             .parent_hws = (const struct clk_hw*[]){
1466                 &cam_cc_mclk1_clk_src.clkr.hw,
1467             },
1468             .num_parents = 1,
1469             .flags = CLK_SET_RATE_PARENT,
1470             .ops = &clk_branch2_ops,
1471         },
1472     },
1473 };
1474 
1475 static struct clk_branch cam_cc_mclk2_clk = {
1476     .halt_reg = 0x405c,
1477     .halt_check = BRANCH_HALT,
1478     .clkr = {
1479         .enable_reg = 0x405c,
1480         .enable_mask = BIT(0),
1481         .hw.init = &(struct clk_init_data){
1482             .name = "cam_cc_mclk2_clk",
1483             .parent_hws = (const struct clk_hw*[]){
1484                 &cam_cc_mclk2_clk_src.clkr.hw,
1485             },
1486             .num_parents = 1,
1487             .flags = CLK_SET_RATE_PARENT,
1488             .ops = &clk_branch2_ops,
1489         },
1490     },
1491 };
1492 
1493 static struct clk_branch cam_cc_mclk3_clk = {
1494     .halt_reg = 0x407c,
1495     .halt_check = BRANCH_HALT,
1496     .clkr = {
1497         .enable_reg = 0x407c,
1498         .enable_mask = BIT(0),
1499         .hw.init = &(struct clk_init_data){
1500             .name = "cam_cc_mclk3_clk",
1501             .parent_hws = (const struct clk_hw*[]){
1502                 &cam_cc_mclk3_clk_src.clkr.hw,
1503             },
1504             .num_parents = 1,
1505             .flags = CLK_SET_RATE_PARENT,
1506             .ops = &clk_branch2_ops,
1507         },
1508     },
1509 };
1510 
1511 static struct clk_branch cam_cc_soc_ahb_clk = {
1512     .halt_reg = 0xb13c,
1513     .halt_check = BRANCH_HALT,
1514     .clkr = {
1515         .enable_reg = 0xb13c,
1516         .enable_mask = BIT(0),
1517         .hw.init = &(struct clk_init_data){
1518             .name = "cam_cc_soc_ahb_clk",
1519             .ops = &clk_branch2_ops,
1520         },
1521     },
1522 };
1523 
1524 static struct clk_branch cam_cc_sys_tmr_clk = {
1525     .halt_reg = 0xb0a8,
1526     .halt_check = BRANCH_HALT,
1527     .clkr = {
1528         .enable_reg = 0xb0a8,
1529         .enable_mask = BIT(0),
1530         .hw.init = &(struct clk_init_data){
1531             .name = "cam_cc_sys_tmr_clk",
1532             .ops = &clk_branch2_ops,
1533         },
1534     },
1535 };
1536 
1537 static struct gdsc titan_top_gdsc;
1538 
1539 static struct gdsc bps_gdsc = {
1540     .gdscr = 0x6004,
1541     .pd = {
1542         .name = "bps_gdsc",
1543     },
1544     .flags = HW_CTRL | POLL_CFG_GDSCR,
1545     .pwrsts = PWRSTS_OFF_ON,
1546 };
1547 
1548 static struct gdsc ipe_0_gdsc = {
1549     .gdscr = 0x7004,
1550     .pd = {
1551         .name = "ipe_0_gdsc",
1552     },
1553     .flags = HW_CTRL | POLL_CFG_GDSCR,
1554     .pwrsts = PWRSTS_OFF_ON,
1555 };
1556 
1557 static struct gdsc ipe_1_gdsc = {
1558     .gdscr = 0x8004,
1559     .pd = {
1560         .name = "ipe_1_gdsc",
1561     },
1562     .flags = HW_CTRL | POLL_CFG_GDSCR,
1563     .pwrsts = PWRSTS_OFF_ON,
1564 };
1565 
1566 static struct gdsc ife_0_gdsc = {
1567     .gdscr = 0x9004,
1568     .pd = {
1569         .name = "ife_0_gdsc",
1570     },
1571     .flags = POLL_CFG_GDSCR,
1572     .parent = &titan_top_gdsc.pd,
1573     .pwrsts = PWRSTS_OFF_ON,
1574 };
1575 
1576 static struct gdsc ife_1_gdsc = {
1577     .gdscr = 0xa004,
1578     .pd = {
1579         .name = "ife_1_gdsc",
1580     },
1581     .flags = POLL_CFG_GDSCR,
1582     .parent = &titan_top_gdsc.pd,
1583     .pwrsts = PWRSTS_OFF_ON,
1584 };
1585 
1586 static struct gdsc titan_top_gdsc = {
1587     .gdscr = 0xb134,
1588     .pd = {
1589         .name = "titan_top_gdsc",
1590     },
1591     .flags = POLL_CFG_GDSCR,
1592     .pwrsts = PWRSTS_OFF_ON,
1593 };
1594 
1595 static struct clk_regmap *cam_cc_sdm845_clocks[] = {
1596     [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
1597     [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
1598     [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
1599     [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
1600     [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
1601     [CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
1602     [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
1603     [CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
1604     [CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
1605     [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
1606     [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
1607     [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
1608     [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
1609     [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
1610     [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
1611     [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
1612     [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
1613     [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
1614     [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
1615     [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
1616     [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
1617     [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
1618     [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
1619     [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
1620     [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
1621     [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
1622     [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
1623     [CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
1624     [CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
1625     [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
1626     [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
1627     [CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
1628     [CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
1629     [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
1630     [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
1631     [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
1632     [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
1633     [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
1634     [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
1635     [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
1636     [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
1637     [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
1638     [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
1639     [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
1640     [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
1641     [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
1642     [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
1643     [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
1644     [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
1645     [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
1646     [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
1647     [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
1648     [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
1649     [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
1650     [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
1651     [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
1652     [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
1653     [CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
1654     [CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
1655     [CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
1656     [CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
1657     [CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
1658     [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
1659     [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
1660     [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
1661     [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
1662     [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
1663     [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
1664     [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
1665     [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
1666     [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
1667     [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
1668     [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
1669     [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
1670     [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
1671     [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
1672     [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
1673     [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
1674     [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
1675     [CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
1676     [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
1677     [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
1678     [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
1679     [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
1680     [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
1681 };
1682 
1683 static struct gdsc *cam_cc_sdm845_gdscs[] = {
1684     [BPS_GDSC] = &bps_gdsc,
1685     [IPE_0_GDSC] = &ipe_0_gdsc,
1686     [IPE_1_GDSC] = &ipe_1_gdsc,
1687     [IFE_0_GDSC] = &ife_0_gdsc,
1688     [IFE_1_GDSC] = &ife_1_gdsc,
1689     [TITAN_TOP_GDSC] = &titan_top_gdsc,
1690 };
1691 
1692 static const struct regmap_config cam_cc_sdm845_regmap_config = {
1693     .reg_bits   = 32,
1694     .reg_stride = 4,
1695     .val_bits   = 32,
1696     .max_register   = 0xd004,
1697     .fast_io    = true,
1698 };
1699 
1700 static const struct qcom_cc_desc cam_cc_sdm845_desc = {
1701     .config = &cam_cc_sdm845_regmap_config,
1702     .clks = cam_cc_sdm845_clocks,
1703     .num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
1704     .gdscs = cam_cc_sdm845_gdscs,
1705     .num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
1706 };
1707 
1708 static const struct of_device_id cam_cc_sdm845_match_table[] = {
1709     { .compatible = "qcom,sdm845-camcc" },
1710     { }
1711 };
1712 MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
1713 
1714 static int cam_cc_sdm845_probe(struct platform_device *pdev)
1715 {
1716     struct regmap *regmap;
1717     struct alpha_pll_config cam_cc_pll_config = { };
1718 
1719     regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
1720     if (IS_ERR(regmap))
1721         return PTR_ERR(regmap);
1722 
1723     cam_cc_pll_config.l = 0x1f;
1724     cam_cc_pll_config.alpha = 0x4000;
1725     clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
1726 
1727     cam_cc_pll_config.l = 0x2a;
1728     cam_cc_pll_config.alpha = 0x1556;
1729     clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
1730 
1731     cam_cc_pll_config.l = 0x32;
1732     cam_cc_pll_config.alpha = 0x0;
1733     clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
1734 
1735     cam_cc_pll_config.l = 0x14;
1736     clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
1737 
1738     return qcom_cc_really_probe(pdev, &cam_cc_sdm845_desc, regmap);
1739 }
1740 
1741 static struct platform_driver cam_cc_sdm845_driver = {
1742     .probe  = cam_cc_sdm845_probe,
1743     .driver = {
1744         .name = "sdm845-camcc",
1745         .of_match_table = cam_cc_sdm845_match_table,
1746     },
1747 };
1748 
1749 static int __init cam_cc_sdm845_init(void)
1750 {
1751     return platform_driver_register(&cam_cc_sdm845_driver);
1752 }
1753 subsys_initcall(cam_cc_sdm845_init);
1754 
1755 static void __exit cam_cc_sdm845_exit(void)
1756 {
1757     platform_driver_unregister(&cam_cc_sdm845_driver);
1758 }
1759 module_exit(cam_cc_sdm845_exit);
1760 
1761 MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
1762 MODULE_LICENSE("GPL v2");