0001
0002
0003
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
0190
0191
0192
0193
0194
0195
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");