1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/mod_devicetable.h> 8 #include <linux/module.h> 9 #include <linux/platform_device.h> 10 #include <linux/regmap.h> 11 12 #include <dt-bindings/clock/qcom,sm8450-camcc.h> 13 14 #include "clk-alpha-pll.h" 15 #include "clk-branch.h" 16 #include "clk-pll.h" 17 #include "clk-rcg.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-regmap-mux.h" 20 #include "clk-regmap.h" 21 #include "common.h" 22 #include "gdsc.h" 23 #include "reset.h" 24 25 enum { 26 DT_IFACE, 27 DT_BI_TCXO, 28 DT_BI_TCXO_AO, 29 DT_SLEEP_CLK 30 }; 31 32 enum { 33 P_BI_TCXO, 34 P_CAM_CC_PLL0_OUT_EVEN, 35 P_CAM_CC_PLL0_OUT_MAIN, 36 P_CAM_CC_PLL0_OUT_ODD, 37 P_CAM_CC_PLL1_OUT_EVEN, 38 P_CAM_CC_PLL2_OUT_EVEN, 39 P_CAM_CC_PLL2_OUT_MAIN, 40 P_CAM_CC_PLL3_OUT_EVEN, 41 P_CAM_CC_PLL4_OUT_EVEN, 42 P_CAM_CC_PLL5_OUT_EVEN, 43 P_CAM_CC_PLL6_OUT_EVEN, 44 P_CAM_CC_PLL7_OUT_EVEN, 45 P_CAM_CC_PLL8_OUT_EVEN, 46 P_SLEEP_CLK, 47 }; 48 49 static const struct pll_vco lucid_evo_vco[] = { 50 { 249600000, 2000000000, 0 }, 51 }; 52 53 static const struct pll_vco rivian_evo_vco[] = { 54 { 864000000, 1056000000, 0 }, 55 }; 56 57 static const struct clk_parent_data pll_parent_data_tcxo = { .index = DT_BI_TCXO }; 58 59 static const struct alpha_pll_config cam_cc_pll0_config = { 60 .l = 0x3e, 61 .alpha = 0x8000, 62 .config_ctl_val = 0x20485699, 63 .config_ctl_hi_val = 0x00182261, 64 .config_ctl_hi1_val = 0x32aa299c, 65 .user_ctl_val = 0x00008400, 66 .user_ctl_hi_val = 0x00000805, 67 }; 68 69 static struct clk_alpha_pll cam_cc_pll0 = { 70 .offset = 0x0, 71 .vco_table = lucid_evo_vco, 72 .num_vco = ARRAY_SIZE(lucid_evo_vco), 73 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 74 .clkr = { 75 .hw.init = &(const struct clk_init_data) { 76 .name = "cam_cc_pll0", 77 .parent_data = &pll_parent_data_tcxo, 78 .num_parents = 1, 79 .ops = &clk_alpha_pll_lucid_evo_ops, 80 }, 81 }, 82 }; 83 84 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = { 85 { 0x1, 2 }, 86 { } 87 }; 88 89 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = { 90 .offset = 0x0, 91 .post_div_shift = 10, 92 .post_div_table = post_div_table_cam_cc_pll0_out_even, 93 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even), 94 .width = 4, 95 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 96 .clkr.hw.init = &(const struct clk_init_data) { 97 .name = "cam_cc_pll0_out_even", 98 .parent_hws = (const struct clk_hw*[]) { 99 &cam_cc_pll0.clkr.hw, 100 }, 101 .num_parents = 1, 102 .flags = CLK_SET_RATE_PARENT, 103 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 104 }, 105 }; 106 107 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = { 108 { 0x2, 3 }, 109 { } 110 }; 111 112 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = { 113 .offset = 0x0, 114 .post_div_shift = 14, 115 .post_div_table = post_div_table_cam_cc_pll0_out_odd, 116 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd), 117 .width = 4, 118 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 119 .clkr.hw.init = &(const struct clk_init_data) { 120 .name = "cam_cc_pll0_out_odd", 121 .parent_hws = (const struct clk_hw*[]) { 122 &cam_cc_pll0.clkr.hw, 123 }, 124 .num_parents = 1, 125 .flags = CLK_SET_RATE_PARENT, 126 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 127 }, 128 }; 129 130 static const struct alpha_pll_config cam_cc_pll1_config = { 131 .l = 0x25, 132 .alpha = 0xeaaa, 133 .config_ctl_val = 0x20485699, 134 .config_ctl_hi_val = 0x00182261, 135 .config_ctl_hi1_val = 0x32aa299c, 136 .user_ctl_val = 0x00000400, 137 .user_ctl_hi_val = 0x00000805, 138 }; 139 140 static struct clk_alpha_pll cam_cc_pll1 = { 141 .offset = 0x1000, 142 .vco_table = lucid_evo_vco, 143 .num_vco = ARRAY_SIZE(lucid_evo_vco), 144 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 145 .clkr = { 146 .hw.init = &(const struct clk_init_data) { 147 .name = "cam_cc_pll1", 148 .parent_data = &pll_parent_data_tcxo, 149 .num_parents = 1, 150 .ops = &clk_alpha_pll_lucid_evo_ops, 151 }, 152 }, 153 }; 154 155 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = { 156 { 0x1, 2 }, 157 { } 158 }; 159 160 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = { 161 .offset = 0x1000, 162 .post_div_shift = 10, 163 .post_div_table = post_div_table_cam_cc_pll1_out_even, 164 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even), 165 .width = 4, 166 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 167 .clkr.hw.init = &(const struct clk_init_data) { 168 .name = "cam_cc_pll1_out_even", 169 .parent_hws = (const struct clk_hw*[]) { 170 &cam_cc_pll1.clkr.hw, 171 }, 172 .num_parents = 1, 173 .flags = CLK_SET_RATE_PARENT, 174 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 175 }, 176 }; 177 178 static const struct alpha_pll_config cam_cc_pll2_config = { 179 .l = 0x32, 180 .alpha = 0x0, 181 .config_ctl_val = 0x90008820, 182 .config_ctl_hi_val = 0x00890263, 183 .config_ctl_hi1_val = 0x00000217, 184 }; 185 186 static struct clk_alpha_pll cam_cc_pll2 = { 187 .offset = 0x2000, 188 .vco_table = rivian_evo_vco, 189 .num_vco = ARRAY_SIZE(rivian_evo_vco), 190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO], 191 .clkr = { 192 .hw.init = &(const struct clk_init_data) { 193 .name = "cam_cc_pll2", 194 .parent_data = &pll_parent_data_tcxo, 195 .num_parents = 1, 196 .ops = &clk_alpha_pll_rivian_evo_ops, 197 }, 198 }, 199 }; 200 201 static const struct alpha_pll_config cam_cc_pll3_config = { 202 .l = 0x2d, 203 .alpha = 0x0, 204 .config_ctl_val = 0x20485699, 205 .config_ctl_hi_val = 0x00182261, 206 .config_ctl_hi1_val = 0x32aa299c, 207 .user_ctl_val = 0x00000400, 208 .user_ctl_hi_val = 0x00000805, 209 }; 210 211 static struct clk_alpha_pll cam_cc_pll3 = { 212 .offset = 0x3000, 213 .vco_table = lucid_evo_vco, 214 .num_vco = ARRAY_SIZE(lucid_evo_vco), 215 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 216 .clkr = { 217 .hw.init = &(const struct clk_init_data) { 218 .name = "cam_cc_pll3", 219 .parent_data = &pll_parent_data_tcxo, 220 .num_parents = 1, 221 .ops = &clk_alpha_pll_lucid_evo_ops, 222 }, 223 }, 224 }; 225 226 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = { 227 { 0x1, 2 }, 228 { } 229 }; 230 231 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = { 232 .offset = 0x3000, 233 .post_div_shift = 10, 234 .post_div_table = post_div_table_cam_cc_pll3_out_even, 235 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even), 236 .width = 4, 237 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 238 .clkr.hw.init = &(const struct clk_init_data) { 239 .name = "cam_cc_pll3_out_even", 240 .parent_hws = (const struct clk_hw*[]) { 241 &cam_cc_pll3.clkr.hw, 242 }, 243 .num_parents = 1, 244 .flags = CLK_SET_RATE_PARENT, 245 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 246 }, 247 }; 248 249 static const struct alpha_pll_config cam_cc_pll4_config = { 250 .l = 0x2d, 251 .alpha = 0x0, 252 .config_ctl_val = 0x20485699, 253 .config_ctl_hi_val = 0x00182261, 254 .config_ctl_hi1_val = 0x32aa299c, 255 .user_ctl_val = 0x00000400, 256 .user_ctl_hi_val = 0x00000805, 257 }; 258 259 static struct clk_alpha_pll cam_cc_pll4 = { 260 .offset = 0x4000, 261 .vco_table = lucid_evo_vco, 262 .num_vco = ARRAY_SIZE(lucid_evo_vco), 263 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 264 .clkr = { 265 .hw.init = &(const struct clk_init_data) { 266 .name = "cam_cc_pll4", 267 .parent_data = &pll_parent_data_tcxo, 268 .num_parents = 1, 269 .ops = &clk_alpha_pll_lucid_evo_ops, 270 }, 271 }, 272 }; 273 274 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = { 275 { 0x1, 2 }, 276 { } 277 }; 278 279 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = { 280 .offset = 0x4000, 281 .post_div_shift = 10, 282 .post_div_table = post_div_table_cam_cc_pll4_out_even, 283 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even), 284 .width = 4, 285 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 286 .clkr.hw.init = &(const struct clk_init_data) { 287 .name = "cam_cc_pll4_out_even", 288 .parent_hws = (const struct clk_hw*[]) { 289 &cam_cc_pll4.clkr.hw, 290 }, 291 .num_parents = 1, 292 .flags = CLK_SET_RATE_PARENT, 293 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 294 }, 295 }; 296 297 static const struct alpha_pll_config cam_cc_pll5_config = { 298 .l = 0x2d, 299 .alpha = 0x0, 300 .config_ctl_val = 0x20485699, 301 .config_ctl_hi_val = 0x00182261, 302 .config_ctl_hi1_val = 0x32aa299c, 303 .user_ctl_val = 0x00000400, 304 .user_ctl_hi_val = 0x00000805, 305 }; 306 307 static struct clk_alpha_pll cam_cc_pll5 = { 308 .offset = 0x5000, 309 .vco_table = lucid_evo_vco, 310 .num_vco = ARRAY_SIZE(lucid_evo_vco), 311 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 312 .clkr = { 313 .hw.init = &(const struct clk_init_data) { 314 .name = "cam_cc_pll5", 315 .parent_data = &pll_parent_data_tcxo, 316 .num_parents = 1, 317 .ops = &clk_alpha_pll_lucid_evo_ops, 318 }, 319 }, 320 }; 321 322 static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = { 323 { 0x1, 2 }, 324 { } 325 }; 326 327 static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = { 328 .offset = 0x5000, 329 .post_div_shift = 10, 330 .post_div_table = post_div_table_cam_cc_pll5_out_even, 331 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even), 332 .width = 4, 333 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 334 .clkr.hw.init = &(const struct clk_init_data) { 335 .name = "cam_cc_pll5_out_even", 336 .parent_hws = (const struct clk_hw*[]) { 337 &cam_cc_pll5.clkr.hw, 338 }, 339 .num_parents = 1, 340 .flags = CLK_SET_RATE_PARENT, 341 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 342 }, 343 }; 344 345 static const struct alpha_pll_config cam_cc_pll6_config = { 346 .l = 0x2d, 347 .alpha = 0x0, 348 .config_ctl_val = 0x20485699, 349 .config_ctl_hi_val = 0x00182261, 350 .config_ctl_hi1_val = 0x32aa299c, 351 .user_ctl_val = 0x00000400, 352 .user_ctl_hi_val = 0x00000805, 353 }; 354 355 static struct clk_alpha_pll cam_cc_pll6 = { 356 .offset = 0x6000, 357 .vco_table = lucid_evo_vco, 358 .num_vco = ARRAY_SIZE(lucid_evo_vco), 359 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 360 .clkr = { 361 .hw.init = &(const struct clk_init_data) { 362 .name = "cam_cc_pll6", 363 .parent_data = &pll_parent_data_tcxo, 364 .num_parents = 1, 365 .ops = &clk_alpha_pll_lucid_evo_ops, 366 }, 367 }, 368 }; 369 370 static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = { 371 { 0x1, 2 }, 372 { } 373 }; 374 375 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = { 376 .offset = 0x6000, 377 .post_div_shift = 10, 378 .post_div_table = post_div_table_cam_cc_pll6_out_even, 379 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even), 380 .width = 4, 381 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 382 .clkr.hw.init = &(const struct clk_init_data) { 383 .name = "cam_cc_pll6_out_even", 384 .parent_hws = (const struct clk_hw*[]) { 385 &cam_cc_pll6.clkr.hw, 386 }, 387 .num_parents = 1, 388 .flags = CLK_SET_RATE_PARENT, 389 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 390 }, 391 }; 392 393 static const struct alpha_pll_config cam_cc_pll7_config = { 394 .l = 0x2d, 395 .alpha = 0x0, 396 .config_ctl_val = 0x20485699, 397 .config_ctl_hi_val = 0x00182261, 398 .config_ctl_hi1_val = 0x32aa299c, 399 .user_ctl_val = 0x00000400, 400 .user_ctl_hi_val = 0x00000805, 401 }; 402 403 static struct clk_alpha_pll cam_cc_pll7 = { 404 .offset = 0x7000, 405 .vco_table = lucid_evo_vco, 406 .num_vco = ARRAY_SIZE(lucid_evo_vco), 407 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 408 .clkr = { 409 .hw.init = &(const struct clk_init_data) { 410 .name = "cam_cc_pll7", 411 .parent_data = &pll_parent_data_tcxo, 412 .num_parents = 1, 413 .ops = &clk_alpha_pll_lucid_evo_ops, 414 }, 415 }, 416 }; 417 418 static const struct clk_div_table post_div_table_cam_cc_pll7_out_even[] = { 419 { 0x1, 2 }, 420 { } 421 }; 422 423 static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = { 424 .offset = 0x7000, 425 .post_div_shift = 10, 426 .post_div_table = post_div_table_cam_cc_pll7_out_even, 427 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even), 428 .width = 4, 429 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 430 .clkr.hw.init = &(const struct clk_init_data) { 431 .name = "cam_cc_pll7_out_even", 432 .parent_hws = (const struct clk_hw*[]) { 433 &cam_cc_pll7.clkr.hw, 434 }, 435 .num_parents = 1, 436 .flags = CLK_SET_RATE_PARENT, 437 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 438 }, 439 }; 440 441 static const struct alpha_pll_config cam_cc_pll8_config = { 442 .l = 0x32, 443 .alpha = 0x0, 444 .config_ctl_val = 0x20485699, 445 .config_ctl_hi_val = 0x00182261, 446 .config_ctl_hi1_val = 0x32aa299c, 447 .user_ctl_val = 0x00000400, 448 .user_ctl_hi_val = 0x00000805, 449 }; 450 451 static struct clk_alpha_pll cam_cc_pll8 = { 452 .offset = 0x8000, 453 .vco_table = lucid_evo_vco, 454 .num_vco = ARRAY_SIZE(lucid_evo_vco), 455 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 456 .clkr = { 457 .hw.init = &(const struct clk_init_data) { 458 .name = "cam_cc_pll8", 459 .parent_data = &pll_parent_data_tcxo, 460 .num_parents = 1, 461 .ops = &clk_alpha_pll_lucid_evo_ops, 462 }, 463 }, 464 }; 465 466 static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = { 467 { 0x1, 2 }, 468 { } 469 }; 470 471 static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = { 472 .offset = 0x8000, 473 .post_div_shift = 10, 474 .post_div_table = post_div_table_cam_cc_pll8_out_even, 475 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even), 476 .width = 4, 477 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 478 .clkr.hw.init = &(const struct clk_init_data) { 479 .name = "cam_cc_pll8_out_even", 480 .parent_hws = (const struct clk_hw*[]) { 481 &cam_cc_pll8.clkr.hw, 482 }, 483 .num_parents = 1, 484 .flags = CLK_SET_RATE_PARENT, 485 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 486 }, 487 }; 488 489 static const struct parent_map cam_cc_parent_map_0[] = { 490 { P_BI_TCXO, 0 }, 491 { P_CAM_CC_PLL0_OUT_MAIN, 1 }, 492 { P_CAM_CC_PLL0_OUT_EVEN, 2 }, 493 { P_CAM_CC_PLL0_OUT_ODD, 3 }, 494 { P_CAM_CC_PLL8_OUT_EVEN, 5 }, 495 }; 496 497 static const struct clk_parent_data cam_cc_parent_data_0[] = { 498 { .index = DT_BI_TCXO }, 499 { .hw = &cam_cc_pll0.clkr.hw }, 500 { .hw = &cam_cc_pll0_out_even.clkr.hw }, 501 { .hw = &cam_cc_pll0_out_odd.clkr.hw }, 502 { .hw = &cam_cc_pll8_out_even.clkr.hw }, 503 }; 504 505 static const struct parent_map cam_cc_parent_map_1[] = { 506 { P_BI_TCXO, 0 }, 507 { P_CAM_CC_PLL2_OUT_EVEN, 3 }, 508 { P_CAM_CC_PLL2_OUT_MAIN, 5 }, 509 }; 510 511 static const struct clk_parent_data cam_cc_parent_data_1[] = { 512 { .index = DT_BI_TCXO }, 513 { .hw = &cam_cc_pll2.clkr.hw }, 514 { .hw = &cam_cc_pll2.clkr.hw }, 515 }; 516 517 static const struct parent_map cam_cc_parent_map_2[] = { 518 { P_BI_TCXO, 0 }, 519 { P_CAM_CC_PLL3_OUT_EVEN, 6 }, 520 }; 521 522 static const struct clk_parent_data cam_cc_parent_data_2[] = { 523 { .index = DT_BI_TCXO }, 524 { .hw = &cam_cc_pll3_out_even.clkr.hw }, 525 }; 526 527 static const struct parent_map cam_cc_parent_map_3[] = { 528 { P_BI_TCXO, 0 }, 529 { P_CAM_CC_PLL4_OUT_EVEN, 6 }, 530 }; 531 532 static const struct clk_parent_data cam_cc_parent_data_3[] = { 533 { .index = DT_BI_TCXO }, 534 { .hw = &cam_cc_pll4_out_even.clkr.hw }, 535 }; 536 537 static const struct parent_map cam_cc_parent_map_4[] = { 538 { P_BI_TCXO, 0 }, 539 { P_CAM_CC_PLL5_OUT_EVEN, 6 }, 540 }; 541 542 static const struct clk_parent_data cam_cc_parent_data_4[] = { 543 { .index = DT_BI_TCXO }, 544 { .hw = &cam_cc_pll5_out_even.clkr.hw }, 545 }; 546 547 static const struct parent_map cam_cc_parent_map_5[] = { 548 { P_BI_TCXO, 0 }, 549 { P_CAM_CC_PLL1_OUT_EVEN, 4 }, 550 }; 551 552 static const struct clk_parent_data cam_cc_parent_data_5[] = { 553 { .index = DT_BI_TCXO }, 554 { .hw = &cam_cc_pll1_out_even.clkr.hw }, 555 }; 556 557 static const struct parent_map cam_cc_parent_map_6[] = { 558 { P_BI_TCXO, 0 }, 559 { P_CAM_CC_PLL6_OUT_EVEN, 6 }, 560 }; 561 562 static const struct clk_parent_data cam_cc_parent_data_6[] = { 563 { .index = DT_BI_TCXO }, 564 { .hw = &cam_cc_pll6_out_even.clkr.hw }, 565 }; 566 567 static const struct parent_map cam_cc_parent_map_7[] = { 568 { P_BI_TCXO, 0 }, 569 { P_CAM_CC_PLL7_OUT_EVEN, 6 }, 570 }; 571 572 static const struct clk_parent_data cam_cc_parent_data_7[] = { 573 { .index = DT_BI_TCXO }, 574 { .hw = &cam_cc_pll7_out_even.clkr.hw }, 575 }; 576 577 static const struct parent_map cam_cc_parent_map_8[] = { 578 { P_SLEEP_CLK, 0 }, 579 }; 580 581 static const struct clk_parent_data cam_cc_parent_data_8[] = { 582 { .index = DT_SLEEP_CLK }, 583 }; 584 585 static const struct parent_map cam_cc_parent_map_9[] = { 586 { P_BI_TCXO, 0 }, 587 }; 588 589 static const struct clk_parent_data cam_cc_parent_data_9_ao[] = { 590 { .index = DT_BI_TCXO_AO, .name = "bi_tcxo_ao" }, 591 }; 592 593 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = { 594 F(19200000, P_BI_TCXO, 1, 0, 0), 595 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0), 596 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 597 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0), 598 F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0), 599 { } 600 }; 601 602 static struct clk_rcg2 cam_cc_bps_clk_src = { 603 .cmd_rcgr = 0x10050, 604 .mnd_width = 0, 605 .hid_width = 5, 606 .parent_map = cam_cc_parent_map_0, 607 .freq_tbl = ftbl_cam_cc_bps_clk_src, 608 .clkr.hw.init = &(const struct clk_init_data) { 609 .name = "cam_cc_bps_clk_src", 610 .parent_data = cam_cc_parent_data_0, 611 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 612 .flags = CLK_SET_RATE_PARENT, 613 .ops = &clk_rcg2_ops, 614 }, 615 }; 616 617 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = { 618 F(19200000, P_BI_TCXO, 1, 0, 0), 619 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0), 620 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 621 { } 622 }; 623 624 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = { 625 .cmd_rcgr = 0x13194, 626 .mnd_width = 0, 627 .hid_width = 5, 628 .parent_map = cam_cc_parent_map_0, 629 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src, 630 .clkr.hw.init = &(const struct clk_init_data) { 631 .name = "cam_cc_camnoc_axi_clk_src", 632 .parent_data = cam_cc_parent_data_0, 633 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 634 .flags = CLK_SET_RATE_PARENT, 635 .ops = &clk_rcg2_ops, 636 }, 637 }; 638 639 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = { 640 F(19200000, P_BI_TCXO, 1, 0, 0), 641 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0), 642 { } 643 }; 644 645 static struct clk_rcg2 cam_cc_cci_0_clk_src = { 646 .cmd_rcgr = 0x1312c, 647 .mnd_width = 8, 648 .hid_width = 5, 649 .parent_map = cam_cc_parent_map_0, 650 .freq_tbl = ftbl_cam_cc_cci_0_clk_src, 651 .clkr.hw.init = &(const struct clk_init_data) { 652 .name = "cam_cc_cci_0_clk_src", 653 .parent_data = cam_cc_parent_data_0, 654 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 655 .flags = CLK_SET_RATE_PARENT, 656 .ops = &clk_rcg2_ops, 657 }, 658 }; 659 660 static struct clk_rcg2 cam_cc_cci_1_clk_src = { 661 .cmd_rcgr = 0x13148, 662 .mnd_width = 8, 663 .hid_width = 5, 664 .parent_map = cam_cc_parent_map_0, 665 .freq_tbl = ftbl_cam_cc_cci_0_clk_src, 666 .clkr.hw.init = &(const struct clk_init_data) { 667 .name = "cam_cc_cci_1_clk_src", 668 .parent_data = cam_cc_parent_data_0, 669 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 670 .flags = CLK_SET_RATE_PARENT, 671 .ops = &clk_rcg2_ops, 672 }, 673 }; 674 675 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = { 676 F(19200000, P_BI_TCXO, 1, 0, 0), 677 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 678 F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0), 679 { } 680 }; 681 682 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = { 683 .cmd_rcgr = 0x1104c, 684 .mnd_width = 0, 685 .hid_width = 5, 686 .parent_map = cam_cc_parent_map_0, 687 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src, 688 .clkr.hw.init = &(const struct clk_init_data) { 689 .name = "cam_cc_cphy_rx_clk_src", 690 .parent_data = cam_cc_parent_data_0, 691 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 692 .flags = CLK_SET_RATE_PARENT, 693 .ops = &clk_rcg2_ops, 694 }, 695 }; 696 697 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = { 698 F(19200000, P_BI_TCXO, 1, 0, 0), 699 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 700 { } 701 }; 702 703 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = { 704 .cmd_rcgr = 0x150e0, 705 .mnd_width = 0, 706 .hid_width = 5, 707 .parent_map = cam_cc_parent_map_0, 708 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 709 .clkr.hw.init = &(const struct clk_init_data) { 710 .name = "cam_cc_csi0phytimer_clk_src", 711 .parent_data = cam_cc_parent_data_0, 712 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 713 .flags = CLK_SET_RATE_PARENT, 714 .ops = &clk_rcg2_ops, 715 }, 716 }; 717 718 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = { 719 .cmd_rcgr = 0x15104, 720 .mnd_width = 0, 721 .hid_width = 5, 722 .parent_map = cam_cc_parent_map_0, 723 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 724 .clkr.hw.init = &(const struct clk_init_data) { 725 .name = "cam_cc_csi1phytimer_clk_src", 726 .parent_data = cam_cc_parent_data_0, 727 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 728 .flags = CLK_SET_RATE_PARENT, 729 .ops = &clk_rcg2_ops, 730 }, 731 }; 732 733 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = { 734 .cmd_rcgr = 0x15124, 735 .mnd_width = 0, 736 .hid_width = 5, 737 .parent_map = cam_cc_parent_map_0, 738 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 739 .clkr.hw.init = &(const struct clk_init_data) { 740 .name = "cam_cc_csi2phytimer_clk_src", 741 .parent_data = cam_cc_parent_data_0, 742 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 743 .flags = CLK_SET_RATE_PARENT, 744 .ops = &clk_rcg2_ops, 745 }, 746 }; 747 748 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = { 749 .cmd_rcgr = 0x1514c, 750 .mnd_width = 0, 751 .hid_width = 5, 752 .parent_map = cam_cc_parent_map_0, 753 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 754 .clkr.hw.init = &(const struct clk_init_data) { 755 .name = "cam_cc_csi3phytimer_clk_src", 756 .parent_data = cam_cc_parent_data_0, 757 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 758 .flags = CLK_SET_RATE_PARENT, 759 .ops = &clk_rcg2_ops, 760 }, 761 }; 762 763 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = { 764 .cmd_rcgr = 0x1516c, 765 .mnd_width = 0, 766 .hid_width = 5, 767 .parent_map = cam_cc_parent_map_0, 768 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 769 .clkr.hw.init = &(const struct clk_init_data) { 770 .name = "cam_cc_csi4phytimer_clk_src", 771 .parent_data = cam_cc_parent_data_0, 772 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 773 .flags = CLK_SET_RATE_PARENT, 774 .ops = &clk_rcg2_ops, 775 }, 776 }; 777 778 static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = { 779 .cmd_rcgr = 0x1518c, 780 .mnd_width = 0, 781 .hid_width = 5, 782 .parent_map = cam_cc_parent_map_0, 783 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 784 .clkr.hw.init = &(const struct clk_init_data) { 785 .name = "cam_cc_csi5phytimer_clk_src", 786 .parent_data = cam_cc_parent_data_0, 787 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 788 .flags = CLK_SET_RATE_PARENT, 789 .ops = &clk_rcg2_ops, 790 }, 791 }; 792 793 static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = { 794 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 795 F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0), 796 { } 797 }; 798 799 static struct clk_rcg2 cam_cc_csid_clk_src = { 800 .cmd_rcgr = 0x13174, 801 .mnd_width = 0, 802 .hid_width = 5, 803 .parent_map = cam_cc_parent_map_0, 804 .freq_tbl = ftbl_cam_cc_csid_clk_src, 805 .clkr.hw.init = &(const struct clk_init_data) { 806 .name = "cam_cc_csid_clk_src", 807 .parent_data = cam_cc_parent_data_0, 808 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 809 .flags = CLK_SET_RATE_PARENT, 810 .ops = &clk_rcg2_ops, 811 }, 812 }; 813 814 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = { 815 F(19200000, P_BI_TCXO, 1, 0, 0), 816 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0), 817 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0), 818 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0), 819 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 820 { } 821 }; 822 823 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = { 824 .cmd_rcgr = 0x10018, 825 .mnd_width = 0, 826 .hid_width = 5, 827 .parent_map = cam_cc_parent_map_0, 828 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src, 829 .clkr.hw.init = &(const struct clk_init_data) { 830 .name = "cam_cc_fast_ahb_clk_src", 831 .parent_data = cam_cc_parent_data_0, 832 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 833 .flags = CLK_SET_RATE_PARENT, 834 .ops = &clk_rcg2_ops, 835 }, 836 }; 837 838 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = { 839 F(19200000, P_BI_TCXO, 1, 0, 0), 840 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 841 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0), 842 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0), 843 { } 844 }; 845 846 static struct clk_rcg2 cam_cc_icp_clk_src = { 847 .cmd_rcgr = 0x13108, 848 .mnd_width = 0, 849 .hid_width = 5, 850 .parent_map = cam_cc_parent_map_0, 851 .freq_tbl = ftbl_cam_cc_icp_clk_src, 852 .clkr.hw.init = &(const struct clk_init_data) { 853 .name = "cam_cc_icp_clk_src", 854 .parent_data = cam_cc_parent_data_0, 855 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 856 .flags = CLK_SET_RATE_PARENT, 857 .ops = &clk_rcg2_ops, 858 }, 859 }; 860 861 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = { 862 F(19200000, P_BI_TCXO, 1, 0, 0), 863 F(432000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 864 F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 865 F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 866 F(727000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 867 { } 868 }; 869 870 static struct clk_rcg2 cam_cc_ife_0_clk_src = { 871 .cmd_rcgr = 0x11018, 872 .mnd_width = 0, 873 .hid_width = 5, 874 .parent_map = cam_cc_parent_map_2, 875 .freq_tbl = ftbl_cam_cc_ife_0_clk_src, 876 .clkr.hw.init = &(const struct clk_init_data) { 877 .name = "cam_cc_ife_0_clk_src", 878 .parent_data = cam_cc_parent_data_2, 879 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 880 .flags = CLK_SET_RATE_PARENT, 881 .ops = &clk_rcg2_ops, 882 }, 883 }; 884 885 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = { 886 F(19200000, P_BI_TCXO, 1, 0, 0), 887 F(432000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 888 F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 889 F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 890 F(727000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 891 { } 892 }; 893 894 static struct clk_rcg2 cam_cc_ife_1_clk_src = { 895 .cmd_rcgr = 0x12018, 896 .mnd_width = 0, 897 .hid_width = 5, 898 .parent_map = cam_cc_parent_map_3, 899 .freq_tbl = ftbl_cam_cc_ife_1_clk_src, 900 .clkr.hw.init = &(const struct clk_init_data) { 901 .name = "cam_cc_ife_1_clk_src", 902 .parent_data = cam_cc_parent_data_3, 903 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 904 .flags = CLK_SET_RATE_PARENT, 905 .ops = &clk_rcg2_ops, 906 }, 907 }; 908 909 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = { 910 F(432000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 911 F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 912 F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 913 F(727000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 914 { } 915 }; 916 917 static struct clk_rcg2 cam_cc_ife_2_clk_src = { 918 .cmd_rcgr = 0x12064, 919 .mnd_width = 0, 920 .hid_width = 5, 921 .parent_map = cam_cc_parent_map_4, 922 .freq_tbl = ftbl_cam_cc_ife_2_clk_src, 923 .clkr.hw.init = &(const struct clk_init_data) { 924 .name = "cam_cc_ife_2_clk_src", 925 .parent_data = cam_cc_parent_data_4, 926 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4), 927 .flags = CLK_SET_RATE_PARENT, 928 .ops = &clk_rcg2_ops, 929 }, 930 }; 931 932 static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = { 933 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 934 F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0), 935 { } 936 }; 937 938 static struct clk_rcg2 cam_cc_ife_lite_clk_src = { 939 .cmd_rcgr = 0x13000, 940 .mnd_width = 0, 941 .hid_width = 5, 942 .parent_map = cam_cc_parent_map_0, 943 .freq_tbl = ftbl_cam_cc_ife_lite_clk_src, 944 .clkr.hw.init = &(const struct clk_init_data) { 945 .name = "cam_cc_ife_lite_clk_src", 946 .parent_data = cam_cc_parent_data_0, 947 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 948 .flags = CLK_SET_RATE_PARENT, 949 .ops = &clk_rcg2_ops, 950 }, 951 }; 952 953 static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = { 954 .cmd_rcgr = 0x13024, 955 .mnd_width = 0, 956 .hid_width = 5, 957 .parent_map = cam_cc_parent_map_0, 958 .freq_tbl = ftbl_cam_cc_ife_lite_clk_src, 959 .clkr.hw.init = &(const struct clk_init_data) { 960 .name = "cam_cc_ife_lite_csid_clk_src", 961 .parent_data = cam_cc_parent_data_0, 962 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 963 .flags = CLK_SET_RATE_PARENT, 964 .ops = &clk_rcg2_ops, 965 }, 966 }; 967 968 static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = { 969 F(364000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 970 F(500000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 971 F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 972 F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 973 { } 974 }; 975 976 static struct clk_rcg2 cam_cc_ipe_nps_clk_src = { 977 .cmd_rcgr = 0x1008c, 978 .mnd_width = 0, 979 .hid_width = 5, 980 .parent_map = cam_cc_parent_map_5, 981 .freq_tbl = ftbl_cam_cc_ipe_nps_clk_src, 982 .clkr.hw.init = &(const struct clk_init_data) { 983 .name = "cam_cc_ipe_nps_clk_src", 984 .parent_data = cam_cc_parent_data_5, 985 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5), 986 .flags = CLK_SET_RATE_PARENT, 987 .ops = &clk_rcg2_ops, 988 }, 989 }; 990 991 static struct clk_rcg2 cam_cc_jpeg_clk_src = { 992 .cmd_rcgr = 0x130dc, 993 .mnd_width = 0, 994 .hid_width = 5, 995 .parent_map = cam_cc_parent_map_0, 996 .freq_tbl = ftbl_cam_cc_bps_clk_src, 997 .clkr.hw.init = &(const struct clk_init_data) { 998 .name = "cam_cc_jpeg_clk_src", 999 .parent_data = cam_cc_parent_data_0, 1000 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 1001 .flags = CLK_SET_RATE_PARENT, 1002 .ops = &clk_rcg2_ops, 1003 }, 1004 }; 1005 1006 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = { 1007 F(19200000, P_BI_TCXO, 1, 0, 0), 1008 F(24000000, P_CAM_CC_PLL2_OUT_MAIN, 10, 1, 4), 1009 F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0), 1010 { } 1011 }; 1012 1013 static struct clk_rcg2 cam_cc_mclk0_clk_src = { 1014 .cmd_rcgr = 0x15000, 1015 .mnd_width = 8, 1016 .hid_width = 5, 1017 .parent_map = cam_cc_parent_map_1, 1018 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1019 .clkr.hw.init = &(const struct clk_init_data) { 1020 .name = "cam_cc_mclk0_clk_src", 1021 .parent_data = cam_cc_parent_data_1, 1022 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1023 .flags = CLK_SET_RATE_PARENT, 1024 .ops = &clk_rcg2_ops, 1025 }, 1026 }; 1027 1028 static struct clk_rcg2 cam_cc_mclk1_clk_src = { 1029 .cmd_rcgr = 0x1501c, 1030 .mnd_width = 8, 1031 .hid_width = 5, 1032 .parent_map = cam_cc_parent_map_1, 1033 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1034 .clkr.hw.init = &(const struct clk_init_data) { 1035 .name = "cam_cc_mclk1_clk_src", 1036 .parent_data = cam_cc_parent_data_1, 1037 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1038 .flags = CLK_SET_RATE_PARENT, 1039 .ops = &clk_rcg2_ops, 1040 }, 1041 }; 1042 1043 static struct clk_rcg2 cam_cc_mclk2_clk_src = { 1044 .cmd_rcgr = 0x15038, 1045 .mnd_width = 8, 1046 .hid_width = 5, 1047 .parent_map = cam_cc_parent_map_1, 1048 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1049 .clkr.hw.init = &(const struct clk_init_data) { 1050 .name = "cam_cc_mclk2_clk_src", 1051 .parent_data = cam_cc_parent_data_1, 1052 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1053 .flags = CLK_SET_RATE_PARENT, 1054 .ops = &clk_rcg2_ops, 1055 }, 1056 }; 1057 1058 static struct clk_rcg2 cam_cc_mclk3_clk_src = { 1059 .cmd_rcgr = 0x15054, 1060 .mnd_width = 8, 1061 .hid_width = 5, 1062 .parent_map = cam_cc_parent_map_1, 1063 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1064 .clkr.hw.init = &(const struct clk_init_data) { 1065 .name = "cam_cc_mclk3_clk_src", 1066 .parent_data = cam_cc_parent_data_1, 1067 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1068 .flags = CLK_SET_RATE_PARENT, 1069 .ops = &clk_rcg2_ops, 1070 }, 1071 }; 1072 1073 static struct clk_rcg2 cam_cc_mclk4_clk_src = { 1074 .cmd_rcgr = 0x15070, 1075 .mnd_width = 8, 1076 .hid_width = 5, 1077 .parent_map = cam_cc_parent_map_1, 1078 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1079 .clkr.hw.init = &(const struct clk_init_data) { 1080 .name = "cam_cc_mclk4_clk_src", 1081 .parent_data = cam_cc_parent_data_1, 1082 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1083 .flags = CLK_SET_RATE_PARENT, 1084 .ops = &clk_rcg2_ops, 1085 }, 1086 }; 1087 1088 static struct clk_rcg2 cam_cc_mclk5_clk_src = { 1089 .cmd_rcgr = 0x1508c, 1090 .mnd_width = 8, 1091 .hid_width = 5, 1092 .parent_map = cam_cc_parent_map_1, 1093 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1094 .clkr.hw.init = &(const struct clk_init_data) { 1095 .name = "cam_cc_mclk5_clk_src", 1096 .parent_data = cam_cc_parent_data_1, 1097 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1098 .flags = CLK_SET_RATE_PARENT, 1099 .ops = &clk_rcg2_ops, 1100 }, 1101 }; 1102 1103 static struct clk_rcg2 cam_cc_mclk6_clk_src = { 1104 .cmd_rcgr = 0x150a8, 1105 .mnd_width = 8, 1106 .hid_width = 5, 1107 .parent_map = cam_cc_parent_map_1, 1108 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1109 .clkr.hw.init = &(const struct clk_init_data) { 1110 .name = "cam_cc_mclk6_clk_src", 1111 .parent_data = cam_cc_parent_data_1, 1112 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1113 .flags = CLK_SET_RATE_PARENT, 1114 .ops = &clk_rcg2_ops, 1115 }, 1116 }; 1117 1118 static struct clk_rcg2 cam_cc_mclk7_clk_src = { 1119 .cmd_rcgr = 0x150c4, 1120 .mnd_width = 8, 1121 .hid_width = 5, 1122 .parent_map = cam_cc_parent_map_1, 1123 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1124 .clkr.hw.init = &(const struct clk_init_data) { 1125 .name = "cam_cc_mclk7_clk_src", 1126 .parent_data = cam_cc_parent_data_1, 1127 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1128 .flags = CLK_SET_RATE_PARENT, 1129 .ops = &clk_rcg2_ops, 1130 }, 1131 }; 1132 1133 static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = { 1134 F(19200000, P_BI_TCXO, 1, 0, 0), 1135 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0), 1136 F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0), 1137 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0), 1138 { } 1139 }; 1140 1141 static struct clk_rcg2 cam_cc_qdss_debug_clk_src = { 1142 .cmd_rcgr = 0x131bc, 1143 .mnd_width = 0, 1144 .hid_width = 5, 1145 .parent_map = cam_cc_parent_map_0, 1146 .freq_tbl = ftbl_cam_cc_qdss_debug_clk_src, 1147 .clkr.hw.init = &(const struct clk_init_data) { 1148 .name = "cam_cc_qdss_debug_clk_src", 1149 .parent_data = cam_cc_parent_data_0, 1150 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 1151 .flags = CLK_SET_RATE_PARENT, 1152 .ops = &clk_rcg2_ops, 1153 }, 1154 }; 1155 1156 static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = { 1157 F(432000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 1158 F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 1159 F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 1160 F(727000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 1161 { } 1162 }; 1163 1164 static struct clk_rcg2 cam_cc_sfe_0_clk_src = { 1165 .cmd_rcgr = 0x13064, 1166 .mnd_width = 0, 1167 .hid_width = 5, 1168 .parent_map = cam_cc_parent_map_6, 1169 .freq_tbl = ftbl_cam_cc_sfe_0_clk_src, 1170 .clkr.hw.init = &(const struct clk_init_data) { 1171 .name = "cam_cc_sfe_0_clk_src", 1172 .parent_data = cam_cc_parent_data_6, 1173 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6), 1174 .flags = CLK_SET_RATE_PARENT, 1175 .ops = &clk_rcg2_ops, 1176 }, 1177 }; 1178 1179 static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = { 1180 F(432000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0), 1181 F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0), 1182 F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0), 1183 F(727000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0), 1184 { } 1185 }; 1186 1187 static struct clk_rcg2 cam_cc_sfe_1_clk_src = { 1188 .cmd_rcgr = 0x130ac, 1189 .mnd_width = 0, 1190 .hid_width = 5, 1191 .parent_map = cam_cc_parent_map_7, 1192 .freq_tbl = ftbl_cam_cc_sfe_1_clk_src, 1193 .clkr.hw.init = &(const struct clk_init_data) { 1194 .name = "cam_cc_sfe_1_clk_src", 1195 .parent_data = cam_cc_parent_data_7, 1196 .num_parents = ARRAY_SIZE(cam_cc_parent_data_7), 1197 .flags = CLK_SET_RATE_PARENT, 1198 .ops = &clk_rcg2_ops, 1199 }, 1200 }; 1201 1202 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = { 1203 F(32000, P_SLEEP_CLK, 1, 0, 0), 1204 { } 1205 }; 1206 1207 static struct clk_rcg2 cam_cc_sleep_clk_src = { 1208 .cmd_rcgr = 0x13210, 1209 .mnd_width = 0, 1210 .hid_width = 5, 1211 .parent_map = cam_cc_parent_map_8, 1212 .freq_tbl = ftbl_cam_cc_sleep_clk_src, 1213 .clkr.hw.init = &(const struct clk_init_data) { 1214 .name = "cam_cc_sleep_clk_src", 1215 .parent_data = cam_cc_parent_data_8, 1216 .num_parents = ARRAY_SIZE(cam_cc_parent_data_8), 1217 .flags = CLK_SET_RATE_PARENT, 1218 .ops = &clk_rcg2_ops, 1219 }, 1220 }; 1221 1222 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = { 1223 F(19200000, P_BI_TCXO, 1, 0, 0), 1224 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0), 1225 { } 1226 }; 1227 1228 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = { 1229 .cmd_rcgr = 0x10034, 1230 .mnd_width = 8, 1231 .hid_width = 5, 1232 .parent_map = cam_cc_parent_map_0, 1233 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src, 1234 .clkr.hw.init = &(const struct clk_init_data) { 1235 .name = "cam_cc_slow_ahb_clk_src", 1236 .parent_data = cam_cc_parent_data_0, 1237 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 1238 .flags = CLK_SET_RATE_PARENT, 1239 .ops = &clk_rcg2_ops, 1240 }, 1241 }; 1242 1243 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = { 1244 F(19200000, P_BI_TCXO, 1, 0, 0), 1245 { } 1246 }; 1247 1248 static struct clk_rcg2 cam_cc_xo_clk_src = { 1249 .cmd_rcgr = 0x131f4, 1250 .mnd_width = 0, 1251 .hid_width = 5, 1252 .parent_map = cam_cc_parent_map_9, 1253 .freq_tbl = ftbl_cam_cc_xo_clk_src, 1254 .clkr.hw.init = &(const struct clk_init_data) { 1255 .name = "cam_cc_xo_clk_src", 1256 .parent_data = cam_cc_parent_data_9_ao, 1257 .num_parents = ARRAY_SIZE(cam_cc_parent_data_9_ao), 1258 .flags = CLK_SET_RATE_PARENT, 1259 .ops = &clk_rcg2_ops, 1260 }, 1261 }; 1262 1263 static struct clk_branch cam_cc_gdsc_clk = { 1264 .halt_reg = 0x1320c, 1265 .halt_check = BRANCH_HALT, 1266 .clkr = { 1267 .enable_reg = 0x1320c, 1268 .enable_mask = BIT(0), 1269 .hw.init = &(const struct clk_init_data) { 1270 .name = "cam_cc_gdsc_clk", 1271 .parent_hws = (const struct clk_hw*[]) { 1272 &cam_cc_xo_clk_src.clkr.hw, 1273 }, 1274 .num_parents = 1, 1275 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1276 .ops = &clk_branch2_ops, 1277 }, 1278 }, 1279 }; 1280 1281 static struct clk_branch cam_cc_bps_ahb_clk = { 1282 .halt_reg = 0x1004c, 1283 .halt_check = BRANCH_HALT, 1284 .clkr = { 1285 .enable_reg = 0x1004c, 1286 .enable_mask = BIT(0), 1287 .hw.init = &(const struct clk_init_data) { 1288 .name = "cam_cc_bps_ahb_clk", 1289 .parent_hws = (const struct clk_hw*[]) { 1290 &cam_cc_slow_ahb_clk_src.clkr.hw, 1291 }, 1292 .num_parents = 1, 1293 .flags = CLK_SET_RATE_PARENT, 1294 .ops = &clk_branch2_ops, 1295 }, 1296 }, 1297 }; 1298 1299 static struct clk_branch cam_cc_bps_clk = { 1300 .halt_reg = 0x10068, 1301 .halt_check = BRANCH_HALT, 1302 .clkr = { 1303 .enable_reg = 0x10068, 1304 .enable_mask = BIT(0), 1305 .hw.init = &(const struct clk_init_data) { 1306 .name = "cam_cc_bps_clk", 1307 .parent_hws = (const struct clk_hw*[]) { 1308 &cam_cc_bps_clk_src.clkr.hw, 1309 }, 1310 .num_parents = 1, 1311 .flags = CLK_SET_RATE_PARENT, 1312 .ops = &clk_branch2_ops, 1313 }, 1314 }, 1315 }; 1316 1317 static struct clk_branch cam_cc_bps_fast_ahb_clk = { 1318 .halt_reg = 0x10030, 1319 .halt_check = BRANCH_HALT, 1320 .clkr = { 1321 .enable_reg = 0x10030, 1322 .enable_mask = BIT(0), 1323 .hw.init = &(const struct clk_init_data) { 1324 .name = "cam_cc_bps_fast_ahb_clk", 1325 .parent_hws = (const struct clk_hw*[]) { 1326 &cam_cc_fast_ahb_clk_src.clkr.hw, 1327 }, 1328 .num_parents = 1, 1329 .flags = CLK_SET_RATE_PARENT, 1330 .ops = &clk_branch2_ops, 1331 }, 1332 }, 1333 }; 1334 1335 static struct clk_branch cam_cc_camnoc_axi_clk = { 1336 .halt_reg = 0x131ac, 1337 .halt_check = BRANCH_HALT, 1338 .clkr = { 1339 .enable_reg = 0x131ac, 1340 .enable_mask = BIT(0), 1341 .hw.init = &(const struct clk_init_data) { 1342 .name = "cam_cc_camnoc_axi_clk", 1343 .parent_hws = (const struct clk_hw*[]) { 1344 &cam_cc_camnoc_axi_clk_src.clkr.hw, 1345 }, 1346 .num_parents = 1, 1347 .flags = CLK_SET_RATE_PARENT, 1348 .ops = &clk_branch2_ops, 1349 }, 1350 }, 1351 }; 1352 1353 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = { 1354 .halt_reg = 0x131b4, 1355 .halt_check = BRANCH_HALT, 1356 .clkr = { 1357 .enable_reg = 0x131b4, 1358 .enable_mask = BIT(0), 1359 .hw.init = &(const struct clk_init_data) { 1360 .name = "cam_cc_camnoc_dcd_xo_clk", 1361 .parent_hws = (const struct clk_hw*[]) { 1362 &cam_cc_xo_clk_src.clkr.hw, 1363 }, 1364 .num_parents = 1, 1365 .flags = CLK_SET_RATE_PARENT, 1366 .ops = &clk_branch2_ops, 1367 }, 1368 }, 1369 }; 1370 1371 static struct clk_branch cam_cc_cci_0_clk = { 1372 .halt_reg = 0x13144, 1373 .halt_check = BRANCH_HALT, 1374 .clkr = { 1375 .enable_reg = 0x13144, 1376 .enable_mask = BIT(0), 1377 .hw.init = &(const struct clk_init_data) { 1378 .name = "cam_cc_cci_0_clk", 1379 .parent_hws = (const struct clk_hw*[]) { 1380 &cam_cc_cci_0_clk_src.clkr.hw, 1381 }, 1382 .num_parents = 1, 1383 .flags = CLK_SET_RATE_PARENT, 1384 .ops = &clk_branch2_ops, 1385 }, 1386 }, 1387 }; 1388 1389 static struct clk_branch cam_cc_cci_1_clk = { 1390 .halt_reg = 0x13160, 1391 .halt_check = BRANCH_HALT, 1392 .clkr = { 1393 .enable_reg = 0x13160, 1394 .enable_mask = BIT(0), 1395 .hw.init = &(const struct clk_init_data) { 1396 .name = "cam_cc_cci_1_clk", 1397 .parent_hws = (const struct clk_hw*[]) { 1398 &cam_cc_cci_1_clk_src.clkr.hw, 1399 }, 1400 .num_parents = 1, 1401 .flags = CLK_SET_RATE_PARENT, 1402 .ops = &clk_branch2_ops, 1403 }, 1404 }, 1405 }; 1406 1407 static struct clk_branch cam_cc_core_ahb_clk = { 1408 .halt_reg = 0x131f0, 1409 .halt_check = BRANCH_HALT_DELAY, 1410 .clkr = { 1411 .enable_reg = 0x131f0, 1412 .enable_mask = BIT(0), 1413 .hw.init = &(const struct clk_init_data) { 1414 .name = "cam_cc_core_ahb_clk", 1415 .parent_hws = (const struct clk_hw*[]) { 1416 &cam_cc_slow_ahb_clk_src.clkr.hw, 1417 }, 1418 .num_parents = 1, 1419 .flags = CLK_SET_RATE_PARENT, 1420 .ops = &clk_branch2_ops, 1421 }, 1422 }, 1423 }; 1424 1425 static struct clk_branch cam_cc_cpas_ahb_clk = { 1426 .halt_reg = 0x13164, 1427 .halt_check = BRANCH_HALT, 1428 .clkr = { 1429 .enable_reg = 0x13164, 1430 .enable_mask = BIT(0), 1431 .hw.init = &(const struct clk_init_data) { 1432 .name = "cam_cc_cpas_ahb_clk", 1433 .parent_hws = (const struct clk_hw*[]) { 1434 &cam_cc_slow_ahb_clk_src.clkr.hw, 1435 }, 1436 .num_parents = 1, 1437 .flags = CLK_SET_RATE_PARENT, 1438 .ops = &clk_branch2_ops, 1439 }, 1440 }, 1441 }; 1442 1443 static struct clk_branch cam_cc_cpas_bps_clk = { 1444 .halt_reg = 0x10070, 1445 .halt_check = BRANCH_HALT, 1446 .clkr = { 1447 .enable_reg = 0x10070, 1448 .enable_mask = BIT(0), 1449 .hw.init = &(const struct clk_init_data) { 1450 .name = "cam_cc_cpas_bps_clk", 1451 .parent_hws = (const struct clk_hw*[]) { 1452 &cam_cc_bps_clk_src.clkr.hw, 1453 }, 1454 .num_parents = 1, 1455 .flags = CLK_SET_RATE_PARENT, 1456 .ops = &clk_branch2_ops, 1457 }, 1458 }, 1459 }; 1460 1461 static struct clk_branch cam_cc_cpas_fast_ahb_clk = { 1462 .halt_reg = 0x1316c, 1463 .halt_check = BRANCH_HALT, 1464 .clkr = { 1465 .enable_reg = 0x1316c, 1466 .enable_mask = BIT(0), 1467 .hw.init = &(const struct clk_init_data) { 1468 .name = "cam_cc_cpas_fast_ahb_clk", 1469 .parent_hws = (const struct clk_hw*[]) { 1470 &cam_cc_fast_ahb_clk_src.clkr.hw, 1471 }, 1472 .num_parents = 1, 1473 .flags = CLK_SET_RATE_PARENT, 1474 .ops = &clk_branch2_ops, 1475 }, 1476 }, 1477 }; 1478 1479 static struct clk_branch cam_cc_cpas_ife_0_clk = { 1480 .halt_reg = 0x11038, 1481 .halt_check = BRANCH_HALT, 1482 .clkr = { 1483 .enable_reg = 0x11038, 1484 .enable_mask = BIT(0), 1485 .hw.init = &(const struct clk_init_data) { 1486 .name = "cam_cc_cpas_ife_0_clk", 1487 .parent_hws = (const struct clk_hw*[]) { 1488 &cam_cc_ife_0_clk_src.clkr.hw, 1489 }, 1490 .num_parents = 1, 1491 .flags = CLK_SET_RATE_PARENT, 1492 .ops = &clk_branch2_ops, 1493 }, 1494 }, 1495 }; 1496 1497 static struct clk_branch cam_cc_cpas_ife_1_clk = { 1498 .halt_reg = 0x12038, 1499 .halt_check = BRANCH_HALT, 1500 .clkr = { 1501 .enable_reg = 0x12038, 1502 .enable_mask = BIT(0), 1503 .hw.init = &(const struct clk_init_data) { 1504 .name = "cam_cc_cpas_ife_1_clk", 1505 .parent_hws = (const struct clk_hw*[]) { 1506 &cam_cc_ife_1_clk_src.clkr.hw, 1507 }, 1508 .num_parents = 1, 1509 .flags = CLK_SET_RATE_PARENT, 1510 .ops = &clk_branch2_ops, 1511 }, 1512 }, 1513 }; 1514 1515 static struct clk_branch cam_cc_cpas_ife_2_clk = { 1516 .halt_reg = 0x12084, 1517 .halt_check = BRANCH_HALT, 1518 .clkr = { 1519 .enable_reg = 0x12084, 1520 .enable_mask = BIT(0), 1521 .hw.init = &(const struct clk_init_data) { 1522 .name = "cam_cc_cpas_ife_2_clk", 1523 .parent_hws = (const struct clk_hw*[]) { 1524 &cam_cc_ife_2_clk_src.clkr.hw, 1525 }, 1526 .num_parents = 1, 1527 .flags = CLK_SET_RATE_PARENT, 1528 .ops = &clk_branch2_ops, 1529 }, 1530 }, 1531 }; 1532 1533 static struct clk_branch cam_cc_cpas_ife_lite_clk = { 1534 .halt_reg = 0x13020, 1535 .halt_check = BRANCH_HALT, 1536 .clkr = { 1537 .enable_reg = 0x13020, 1538 .enable_mask = BIT(0), 1539 .hw.init = &(const struct clk_init_data) { 1540 .name = "cam_cc_cpas_ife_lite_clk", 1541 .parent_hws = (const struct clk_hw*[]) { 1542 &cam_cc_ife_lite_clk_src.clkr.hw, 1543 }, 1544 .num_parents = 1, 1545 .flags = CLK_SET_RATE_PARENT, 1546 .ops = &clk_branch2_ops, 1547 }, 1548 }, 1549 }; 1550 1551 static struct clk_branch cam_cc_cpas_ipe_nps_clk = { 1552 .halt_reg = 0x100ac, 1553 .halt_check = BRANCH_HALT, 1554 .clkr = { 1555 .enable_reg = 0x100ac, 1556 .enable_mask = BIT(0), 1557 .hw.init = &(const struct clk_init_data) { 1558 .name = "cam_cc_cpas_ipe_nps_clk", 1559 .parent_hws = (const struct clk_hw*[]) { 1560 &cam_cc_ipe_nps_clk_src.clkr.hw, 1561 }, 1562 .num_parents = 1, 1563 .flags = CLK_SET_RATE_PARENT, 1564 .ops = &clk_branch2_ops, 1565 }, 1566 }, 1567 }; 1568 1569 static struct clk_branch cam_cc_cpas_sbi_clk = { 1570 .halt_reg = 0x100ec, 1571 .halt_check = BRANCH_HALT, 1572 .clkr = { 1573 .enable_reg = 0x100ec, 1574 .enable_mask = BIT(0), 1575 .hw.init = &(const struct clk_init_data) { 1576 .name = "cam_cc_cpas_sbi_clk", 1577 .parent_hws = (const struct clk_hw*[]) { 1578 &cam_cc_ife_0_clk_src.clkr.hw, 1579 }, 1580 .num_parents = 1, 1581 .flags = CLK_SET_RATE_PARENT, 1582 .ops = &clk_branch2_ops, 1583 }, 1584 }, 1585 }; 1586 1587 static struct clk_branch cam_cc_cpas_sfe_0_clk = { 1588 .halt_reg = 0x13084, 1589 .halt_check = BRANCH_HALT, 1590 .clkr = { 1591 .enable_reg = 0x13084, 1592 .enable_mask = BIT(0), 1593 .hw.init = &(const struct clk_init_data) { 1594 .name = "cam_cc_cpas_sfe_0_clk", 1595 .parent_hws = (const struct clk_hw*[]) { 1596 &cam_cc_sfe_0_clk_src.clkr.hw, 1597 }, 1598 .num_parents = 1, 1599 .flags = CLK_SET_RATE_PARENT, 1600 .ops = &clk_branch2_ops, 1601 }, 1602 }, 1603 }; 1604 1605 static struct clk_branch cam_cc_cpas_sfe_1_clk = { 1606 .halt_reg = 0x130cc, 1607 .halt_check = BRANCH_HALT, 1608 .clkr = { 1609 .enable_reg = 0x130cc, 1610 .enable_mask = BIT(0), 1611 .hw.init = &(const struct clk_init_data) { 1612 .name = "cam_cc_cpas_sfe_1_clk", 1613 .parent_hws = (const struct clk_hw*[]) { 1614 &cam_cc_sfe_1_clk_src.clkr.hw, 1615 }, 1616 .num_parents = 1, 1617 .flags = CLK_SET_RATE_PARENT, 1618 .ops = &clk_branch2_ops, 1619 }, 1620 }, 1621 }; 1622 1623 static struct clk_branch cam_cc_csi0phytimer_clk = { 1624 .halt_reg = 0x150f8, 1625 .halt_check = BRANCH_HALT, 1626 .clkr = { 1627 .enable_reg = 0x150f8, 1628 .enable_mask = BIT(0), 1629 .hw.init = &(const struct clk_init_data) { 1630 .name = "cam_cc_csi0phytimer_clk", 1631 .parent_hws = (const struct clk_hw*[]) { 1632 &cam_cc_csi0phytimer_clk_src.clkr.hw, 1633 }, 1634 .num_parents = 1, 1635 .flags = CLK_SET_RATE_PARENT, 1636 .ops = &clk_branch2_ops, 1637 }, 1638 }, 1639 }; 1640 1641 static struct clk_branch cam_cc_csi1phytimer_clk = { 1642 .halt_reg = 0x1511c, 1643 .halt_check = BRANCH_HALT, 1644 .clkr = { 1645 .enable_reg = 0x1511c, 1646 .enable_mask = BIT(0), 1647 .hw.init = &(const struct clk_init_data) { 1648 .name = "cam_cc_csi1phytimer_clk", 1649 .parent_hws = (const struct clk_hw*[]) { 1650 &cam_cc_csi1phytimer_clk_src.clkr.hw, 1651 }, 1652 .num_parents = 1, 1653 .flags = CLK_SET_RATE_PARENT, 1654 .ops = &clk_branch2_ops, 1655 }, 1656 }, 1657 }; 1658 1659 static struct clk_branch cam_cc_csi2phytimer_clk = { 1660 .halt_reg = 0x1513c, 1661 .halt_check = BRANCH_HALT, 1662 .clkr = { 1663 .enable_reg = 0x1513c, 1664 .enable_mask = BIT(0), 1665 .hw.init = &(const struct clk_init_data) { 1666 .name = "cam_cc_csi2phytimer_clk", 1667 .parent_hws = (const struct clk_hw*[]) { 1668 &cam_cc_csi2phytimer_clk_src.clkr.hw, 1669 }, 1670 .num_parents = 1, 1671 .flags = CLK_SET_RATE_PARENT, 1672 .ops = &clk_branch2_ops, 1673 }, 1674 }, 1675 }; 1676 1677 static struct clk_branch cam_cc_csi3phytimer_clk = { 1678 .halt_reg = 0x15164, 1679 .halt_check = BRANCH_HALT, 1680 .clkr = { 1681 .enable_reg = 0x15164, 1682 .enable_mask = BIT(0), 1683 .hw.init = &(const struct clk_init_data) { 1684 .name = "cam_cc_csi3phytimer_clk", 1685 .parent_hws = (const struct clk_hw*[]) { 1686 &cam_cc_csi3phytimer_clk_src.clkr.hw, 1687 }, 1688 .num_parents = 1, 1689 .flags = CLK_SET_RATE_PARENT, 1690 .ops = &clk_branch2_ops, 1691 }, 1692 }, 1693 }; 1694 1695 static struct clk_branch cam_cc_csi4phytimer_clk = { 1696 .halt_reg = 0x15184, 1697 .halt_check = BRANCH_HALT, 1698 .clkr = { 1699 .enable_reg = 0x15184, 1700 .enable_mask = BIT(0), 1701 .hw.init = &(const struct clk_init_data) { 1702 .name = "cam_cc_csi4phytimer_clk", 1703 .parent_hws = (const struct clk_hw*[]) { 1704 &cam_cc_csi4phytimer_clk_src.clkr.hw, 1705 }, 1706 .num_parents = 1, 1707 .flags = CLK_SET_RATE_PARENT, 1708 .ops = &clk_branch2_ops, 1709 }, 1710 }, 1711 }; 1712 1713 static struct clk_branch cam_cc_csi5phytimer_clk = { 1714 .halt_reg = 0x151a4, 1715 .halt_check = BRANCH_HALT, 1716 .clkr = { 1717 .enable_reg = 0x151a4, 1718 .enable_mask = BIT(0), 1719 .hw.init = &(const struct clk_init_data) { 1720 .name = "cam_cc_csi5phytimer_clk", 1721 .parent_hws = (const struct clk_hw*[]) { 1722 &cam_cc_csi5phytimer_clk_src.clkr.hw, 1723 }, 1724 .num_parents = 1, 1725 .flags = CLK_SET_RATE_PARENT, 1726 .ops = &clk_branch2_ops, 1727 }, 1728 }, 1729 }; 1730 1731 static struct clk_branch cam_cc_csid_clk = { 1732 .halt_reg = 0x1318c, 1733 .halt_check = BRANCH_HALT, 1734 .clkr = { 1735 .enable_reg = 0x1318c, 1736 .enable_mask = BIT(0), 1737 .hw.init = &(const struct clk_init_data) { 1738 .name = "cam_cc_csid_clk", 1739 .parent_hws = (const struct clk_hw*[]) { 1740 &cam_cc_csid_clk_src.clkr.hw, 1741 }, 1742 .num_parents = 1, 1743 .flags = CLK_SET_RATE_PARENT, 1744 .ops = &clk_branch2_ops, 1745 }, 1746 }, 1747 }; 1748 1749 static struct clk_branch cam_cc_csid_csiphy_rx_clk = { 1750 .halt_reg = 0x15100, 1751 .halt_check = BRANCH_HALT, 1752 .clkr = { 1753 .enable_reg = 0x15100, 1754 .enable_mask = BIT(0), 1755 .hw.init = &(const struct clk_init_data) { 1756 .name = "cam_cc_csid_csiphy_rx_clk", 1757 .parent_hws = (const struct clk_hw*[]) { 1758 &cam_cc_cphy_rx_clk_src.clkr.hw, 1759 }, 1760 .num_parents = 1, 1761 .flags = CLK_SET_RATE_PARENT, 1762 .ops = &clk_branch2_ops, 1763 }, 1764 }, 1765 }; 1766 1767 static struct clk_branch cam_cc_csiphy0_clk = { 1768 .halt_reg = 0x150fc, 1769 .halt_check = BRANCH_HALT, 1770 .clkr = { 1771 .enable_reg = 0x150fc, 1772 .enable_mask = BIT(0), 1773 .hw.init = &(const struct clk_init_data) { 1774 .name = "cam_cc_csiphy0_clk", 1775 .parent_hws = (const struct clk_hw*[]) { 1776 &cam_cc_cphy_rx_clk_src.clkr.hw, 1777 }, 1778 .num_parents = 1, 1779 .flags = CLK_SET_RATE_PARENT, 1780 .ops = &clk_branch2_ops, 1781 }, 1782 }, 1783 }; 1784 1785 static struct clk_branch cam_cc_csiphy1_clk = { 1786 .halt_reg = 0x15120, 1787 .halt_check = BRANCH_HALT, 1788 .clkr = { 1789 .enable_reg = 0x15120, 1790 .enable_mask = BIT(0), 1791 .hw.init = &(const struct clk_init_data) { 1792 .name = "cam_cc_csiphy1_clk", 1793 .parent_hws = (const struct clk_hw*[]) { 1794 &cam_cc_cphy_rx_clk_src.clkr.hw, 1795 }, 1796 .num_parents = 1, 1797 .flags = CLK_SET_RATE_PARENT, 1798 .ops = &clk_branch2_ops, 1799 }, 1800 }, 1801 }; 1802 1803 static struct clk_branch cam_cc_csiphy2_clk = { 1804 .halt_reg = 0x15140, 1805 .halt_check = BRANCH_HALT, 1806 .clkr = { 1807 .enable_reg = 0x15140, 1808 .enable_mask = BIT(0), 1809 .hw.init = &(const struct clk_init_data) { 1810 .name = "cam_cc_csiphy2_clk", 1811 .parent_hws = (const struct clk_hw*[]) { 1812 &cam_cc_cphy_rx_clk_src.clkr.hw, 1813 }, 1814 .num_parents = 1, 1815 .flags = CLK_SET_RATE_PARENT, 1816 .ops = &clk_branch2_ops, 1817 }, 1818 }, 1819 }; 1820 1821 static struct clk_branch cam_cc_csiphy3_clk = { 1822 .halt_reg = 0x15168, 1823 .halt_check = BRANCH_HALT, 1824 .clkr = { 1825 .enable_reg = 0x15168, 1826 .enable_mask = BIT(0), 1827 .hw.init = &(const struct clk_init_data) { 1828 .name = "cam_cc_csiphy3_clk", 1829 .parent_hws = (const struct clk_hw*[]) { 1830 &cam_cc_cphy_rx_clk_src.clkr.hw, 1831 }, 1832 .num_parents = 1, 1833 .flags = CLK_SET_RATE_PARENT, 1834 .ops = &clk_branch2_ops, 1835 }, 1836 }, 1837 }; 1838 1839 static struct clk_branch cam_cc_csiphy4_clk = { 1840 .halt_reg = 0x15188, 1841 .halt_check = BRANCH_HALT, 1842 .clkr = { 1843 .enable_reg = 0x15188, 1844 .enable_mask = BIT(0), 1845 .hw.init = &(const struct clk_init_data) { 1846 .name = "cam_cc_csiphy4_clk", 1847 .parent_hws = (const struct clk_hw*[]) { 1848 &cam_cc_cphy_rx_clk_src.clkr.hw, 1849 }, 1850 .num_parents = 1, 1851 .flags = CLK_SET_RATE_PARENT, 1852 .ops = &clk_branch2_ops, 1853 }, 1854 }, 1855 }; 1856 1857 static struct clk_branch cam_cc_csiphy5_clk = { 1858 .halt_reg = 0x151a8, 1859 .halt_check = BRANCH_HALT, 1860 .clkr = { 1861 .enable_reg = 0x151a8, 1862 .enable_mask = BIT(0), 1863 .hw.init = &(const struct clk_init_data) { 1864 .name = "cam_cc_csiphy5_clk", 1865 .parent_hws = (const struct clk_hw*[]) { 1866 &cam_cc_cphy_rx_clk_src.clkr.hw, 1867 }, 1868 .num_parents = 1, 1869 .flags = CLK_SET_RATE_PARENT, 1870 .ops = &clk_branch2_ops, 1871 }, 1872 }, 1873 }; 1874 1875 static struct clk_branch cam_cc_icp_ahb_clk = { 1876 .halt_reg = 0x13128, 1877 .halt_check = BRANCH_HALT, 1878 .clkr = { 1879 .enable_reg = 0x13128, 1880 .enable_mask = BIT(0), 1881 .hw.init = &(const struct clk_init_data) { 1882 .name = "cam_cc_icp_ahb_clk", 1883 .parent_hws = (const struct clk_hw*[]) { 1884 &cam_cc_slow_ahb_clk_src.clkr.hw, 1885 }, 1886 .num_parents = 1, 1887 .flags = CLK_SET_RATE_PARENT, 1888 .ops = &clk_branch2_ops, 1889 }, 1890 }, 1891 }; 1892 1893 static struct clk_branch cam_cc_icp_clk = { 1894 .halt_reg = 0x13120, 1895 .halt_check = BRANCH_HALT, 1896 .clkr = { 1897 .enable_reg = 0x13120, 1898 .enable_mask = BIT(0), 1899 .hw.init = &(const struct clk_init_data) { 1900 .name = "cam_cc_icp_clk", 1901 .parent_hws = (const struct clk_hw*[]) { 1902 &cam_cc_icp_clk_src.clkr.hw, 1903 }, 1904 .num_parents = 1, 1905 .flags = CLK_SET_RATE_PARENT, 1906 .ops = &clk_branch2_ops, 1907 }, 1908 }, 1909 }; 1910 1911 static struct clk_branch cam_cc_ife_0_clk = { 1912 .halt_reg = 0x11030, 1913 .halt_check = BRANCH_HALT, 1914 .clkr = { 1915 .enable_reg = 0x11030, 1916 .enable_mask = BIT(0), 1917 .hw.init = &(const struct clk_init_data) { 1918 .name = "cam_cc_ife_0_clk", 1919 .parent_hws = (const struct clk_hw*[]) { 1920 &cam_cc_ife_0_clk_src.clkr.hw, 1921 }, 1922 .num_parents = 1, 1923 .flags = CLK_SET_RATE_PARENT, 1924 .ops = &clk_branch2_ops, 1925 }, 1926 }, 1927 }; 1928 1929 static struct clk_branch cam_cc_ife_0_dsp_clk = { 1930 .halt_reg = 0x1103c, 1931 .halt_check = BRANCH_HALT, 1932 .clkr = { 1933 .enable_reg = 0x1103c, 1934 .enable_mask = BIT(0), 1935 .hw.init = &(const struct clk_init_data) { 1936 .name = "cam_cc_ife_0_dsp_clk", 1937 .parent_hws = (const struct clk_hw*[]) { 1938 &cam_cc_ife_0_clk_src.clkr.hw, 1939 }, 1940 .num_parents = 1, 1941 .flags = CLK_SET_RATE_PARENT, 1942 .ops = &clk_branch2_ops, 1943 }, 1944 }, 1945 }; 1946 1947 static struct clk_branch cam_cc_ife_0_fast_ahb_clk = { 1948 .halt_reg = 0x11048, 1949 .halt_check = BRANCH_HALT, 1950 .clkr = { 1951 .enable_reg = 0x11048, 1952 .enable_mask = BIT(0), 1953 .hw.init = &(const struct clk_init_data) { 1954 .name = "cam_cc_ife_0_fast_ahb_clk", 1955 .parent_hws = (const struct clk_hw*[]) { 1956 &cam_cc_fast_ahb_clk_src.clkr.hw, 1957 }, 1958 .num_parents = 1, 1959 .flags = CLK_SET_RATE_PARENT, 1960 .ops = &clk_branch2_ops, 1961 }, 1962 }, 1963 }; 1964 1965 static struct clk_branch cam_cc_ife_1_clk = { 1966 .halt_reg = 0x12030, 1967 .halt_check = BRANCH_HALT, 1968 .clkr = { 1969 .enable_reg = 0x12030, 1970 .enable_mask = BIT(0), 1971 .hw.init = &(const struct clk_init_data) { 1972 .name = "cam_cc_ife_1_clk", 1973 .parent_hws = (const struct clk_hw*[]) { 1974 &cam_cc_ife_1_clk_src.clkr.hw, 1975 }, 1976 .num_parents = 1, 1977 .flags = CLK_SET_RATE_PARENT, 1978 .ops = &clk_branch2_ops, 1979 }, 1980 }, 1981 }; 1982 1983 static struct clk_branch cam_cc_ife_1_dsp_clk = { 1984 .halt_reg = 0x1203c, 1985 .halt_check = BRANCH_HALT, 1986 .clkr = { 1987 .enable_reg = 0x1203c, 1988 .enable_mask = BIT(0), 1989 .hw.init = &(const struct clk_init_data) { 1990 .name = "cam_cc_ife_1_dsp_clk", 1991 .parent_hws = (const struct clk_hw*[]) { 1992 &cam_cc_ife_1_clk_src.clkr.hw, 1993 }, 1994 .num_parents = 1, 1995 .flags = CLK_SET_RATE_PARENT, 1996 .ops = &clk_branch2_ops, 1997 }, 1998 }, 1999 }; 2000 2001 static struct clk_branch cam_cc_ife_1_fast_ahb_clk = { 2002 .halt_reg = 0x12048, 2003 .halt_check = BRANCH_HALT, 2004 .clkr = { 2005 .enable_reg = 0x12048, 2006 .enable_mask = BIT(0), 2007 .hw.init = &(const struct clk_init_data) { 2008 .name = "cam_cc_ife_1_fast_ahb_clk", 2009 .parent_hws = (const struct clk_hw*[]) { 2010 &cam_cc_fast_ahb_clk_src.clkr.hw, 2011 }, 2012 .num_parents = 1, 2013 .flags = CLK_SET_RATE_PARENT, 2014 .ops = &clk_branch2_ops, 2015 }, 2016 }, 2017 }; 2018 2019 static struct clk_branch cam_cc_ife_2_clk = { 2020 .halt_reg = 0x1207c, 2021 .halt_check = BRANCH_HALT, 2022 .clkr = { 2023 .enable_reg = 0x1207c, 2024 .enable_mask = BIT(0), 2025 .hw.init = &(const struct clk_init_data) { 2026 .name = "cam_cc_ife_2_clk", 2027 .parent_hws = (const struct clk_hw*[]) { 2028 &cam_cc_ife_2_clk_src.clkr.hw, 2029 }, 2030 .num_parents = 1, 2031 .flags = CLK_SET_RATE_PARENT, 2032 .ops = &clk_branch2_ops, 2033 }, 2034 }, 2035 }; 2036 2037 static struct clk_branch cam_cc_ife_2_dsp_clk = { 2038 .halt_reg = 0x12088, 2039 .halt_check = BRANCH_HALT, 2040 .clkr = { 2041 .enable_reg = 0x12088, 2042 .enable_mask = BIT(0), 2043 .hw.init = &(const struct clk_init_data) { 2044 .name = "cam_cc_ife_2_dsp_clk", 2045 .parent_hws = (const struct clk_hw*[]) { 2046 &cam_cc_ife_2_clk_src.clkr.hw, 2047 }, 2048 .num_parents = 1, 2049 .flags = CLK_SET_RATE_PARENT, 2050 .ops = &clk_branch2_ops, 2051 }, 2052 }, 2053 }; 2054 2055 static struct clk_branch cam_cc_ife_2_fast_ahb_clk = { 2056 .halt_reg = 0x12094, 2057 .halt_check = BRANCH_HALT, 2058 .clkr = { 2059 .enable_reg = 0x12094, 2060 .enable_mask = BIT(0), 2061 .hw.init = &(const struct clk_init_data) { 2062 .name = "cam_cc_ife_2_fast_ahb_clk", 2063 .parent_hws = (const struct clk_hw*[]) { 2064 &cam_cc_fast_ahb_clk_src.clkr.hw, 2065 }, 2066 .num_parents = 1, 2067 .flags = CLK_SET_RATE_PARENT, 2068 .ops = &clk_branch2_ops, 2069 }, 2070 }, 2071 }; 2072 2073 static struct clk_branch cam_cc_ife_lite_ahb_clk = { 2074 .halt_reg = 0x13048, 2075 .halt_check = BRANCH_HALT, 2076 .clkr = { 2077 .enable_reg = 0x13048, 2078 .enable_mask = BIT(0), 2079 .hw.init = &(const struct clk_init_data) { 2080 .name = "cam_cc_ife_lite_ahb_clk", 2081 .parent_hws = (const struct clk_hw*[]) { 2082 &cam_cc_slow_ahb_clk_src.clkr.hw, 2083 }, 2084 .num_parents = 1, 2085 .flags = CLK_SET_RATE_PARENT, 2086 .ops = &clk_branch2_ops, 2087 }, 2088 }, 2089 }; 2090 2091 static struct clk_branch cam_cc_ife_lite_clk = { 2092 .halt_reg = 0x13018, 2093 .halt_check = BRANCH_HALT, 2094 .clkr = { 2095 .enable_reg = 0x13018, 2096 .enable_mask = BIT(0), 2097 .hw.init = &(const struct clk_init_data) { 2098 .name = "cam_cc_ife_lite_clk", 2099 .parent_hws = (const struct clk_hw*[]) { 2100 &cam_cc_ife_lite_clk_src.clkr.hw, 2101 }, 2102 .num_parents = 1, 2103 .flags = CLK_SET_RATE_PARENT, 2104 .ops = &clk_branch2_ops, 2105 }, 2106 }, 2107 }; 2108 2109 static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = { 2110 .halt_reg = 0x13044, 2111 .halt_check = BRANCH_HALT, 2112 .clkr = { 2113 .enable_reg = 0x13044, 2114 .enable_mask = BIT(0), 2115 .hw.init = &(const struct clk_init_data) { 2116 .name = "cam_cc_ife_lite_cphy_rx_clk", 2117 .parent_hws = (const struct clk_hw*[]) { 2118 &cam_cc_cphy_rx_clk_src.clkr.hw, 2119 }, 2120 .num_parents = 1, 2121 .flags = CLK_SET_RATE_PARENT, 2122 .ops = &clk_branch2_ops, 2123 }, 2124 }, 2125 }; 2126 2127 static struct clk_branch cam_cc_ife_lite_csid_clk = { 2128 .halt_reg = 0x1303c, 2129 .halt_check = BRANCH_HALT, 2130 .clkr = { 2131 .enable_reg = 0x1303c, 2132 .enable_mask = BIT(0), 2133 .hw.init = &(const struct clk_init_data) { 2134 .name = "cam_cc_ife_lite_csid_clk", 2135 .parent_hws = (const struct clk_hw*[]) { 2136 &cam_cc_ife_lite_csid_clk_src.clkr.hw, 2137 }, 2138 .num_parents = 1, 2139 .flags = CLK_SET_RATE_PARENT, 2140 .ops = &clk_branch2_ops, 2141 }, 2142 }, 2143 }; 2144 2145 static struct clk_branch cam_cc_ipe_nps_ahb_clk = { 2146 .halt_reg = 0x100c0, 2147 .halt_check = BRANCH_HALT, 2148 .clkr = { 2149 .enable_reg = 0x100c0, 2150 .enable_mask = BIT(0), 2151 .hw.init = &(const struct clk_init_data) { 2152 .name = "cam_cc_ipe_nps_ahb_clk", 2153 .parent_hws = (const struct clk_hw*[]) { 2154 &cam_cc_slow_ahb_clk_src.clkr.hw, 2155 }, 2156 .num_parents = 1, 2157 .flags = CLK_SET_RATE_PARENT, 2158 .ops = &clk_branch2_ops, 2159 }, 2160 }, 2161 }; 2162 2163 static struct clk_branch cam_cc_ipe_nps_clk = { 2164 .halt_reg = 0x100a4, 2165 .halt_check = BRANCH_HALT, 2166 .clkr = { 2167 .enable_reg = 0x100a4, 2168 .enable_mask = BIT(0), 2169 .hw.init = &(const struct clk_init_data) { 2170 .name = "cam_cc_ipe_nps_clk", 2171 .parent_hws = (const struct clk_hw*[]) { 2172 &cam_cc_ipe_nps_clk_src.clkr.hw, 2173 }, 2174 .num_parents = 1, 2175 .flags = CLK_SET_RATE_PARENT, 2176 .ops = &clk_branch2_ops, 2177 }, 2178 }, 2179 }; 2180 2181 static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = { 2182 .halt_reg = 0x100c4, 2183 .halt_check = BRANCH_HALT, 2184 .clkr = { 2185 .enable_reg = 0x100c4, 2186 .enable_mask = BIT(0), 2187 .hw.init = &(const struct clk_init_data) { 2188 .name = "cam_cc_ipe_nps_fast_ahb_clk", 2189 .parent_hws = (const struct clk_hw*[]) { 2190 &cam_cc_fast_ahb_clk_src.clkr.hw, 2191 }, 2192 .num_parents = 1, 2193 .flags = CLK_SET_RATE_PARENT, 2194 .ops = &clk_branch2_ops, 2195 }, 2196 }, 2197 }; 2198 2199 static struct clk_branch cam_cc_ipe_pps_clk = { 2200 .halt_reg = 0x100b0, 2201 .halt_check = BRANCH_HALT, 2202 .clkr = { 2203 .enable_reg = 0x100b0, 2204 .enable_mask = BIT(0), 2205 .hw.init = &(const struct clk_init_data) { 2206 .name = "cam_cc_ipe_pps_clk", 2207 .parent_hws = (const struct clk_hw*[]) { 2208 &cam_cc_ipe_nps_clk_src.clkr.hw, 2209 }, 2210 .num_parents = 1, 2211 .flags = CLK_SET_RATE_PARENT, 2212 .ops = &clk_branch2_ops, 2213 }, 2214 }, 2215 }; 2216 2217 static struct clk_branch cam_cc_ipe_pps_fast_ahb_clk = { 2218 .halt_reg = 0x100c8, 2219 .halt_check = BRANCH_HALT, 2220 .clkr = { 2221 .enable_reg = 0x100c8, 2222 .enable_mask = BIT(0), 2223 .hw.init = &(const struct clk_init_data) { 2224 .name = "cam_cc_ipe_pps_fast_ahb_clk", 2225 .parent_hws = (const struct clk_hw*[]) { 2226 &cam_cc_fast_ahb_clk_src.clkr.hw, 2227 }, 2228 .num_parents = 1, 2229 .flags = CLK_SET_RATE_PARENT, 2230 .ops = &clk_branch2_ops, 2231 }, 2232 }, 2233 }; 2234 2235 static struct clk_branch cam_cc_jpeg_clk = { 2236 .halt_reg = 0x130f4, 2237 .halt_check = BRANCH_HALT, 2238 .clkr = { 2239 .enable_reg = 0x130f4, 2240 .enable_mask = BIT(0), 2241 .hw.init = &(const struct clk_init_data) { 2242 .name = "cam_cc_jpeg_clk", 2243 .parent_hws = (const struct clk_hw*[]) { 2244 &cam_cc_jpeg_clk_src.clkr.hw, 2245 }, 2246 .num_parents = 1, 2247 .flags = CLK_SET_RATE_PARENT, 2248 .ops = &clk_branch2_ops, 2249 }, 2250 }, 2251 }; 2252 2253 static struct clk_branch cam_cc_mclk0_clk = { 2254 .halt_reg = 0x15018, 2255 .halt_check = BRANCH_HALT, 2256 .clkr = { 2257 .enable_reg = 0x15018, 2258 .enable_mask = BIT(0), 2259 .hw.init = &(const struct clk_init_data) { 2260 .name = "cam_cc_mclk0_clk", 2261 .parent_hws = (const struct clk_hw*[]) { 2262 &cam_cc_mclk0_clk_src.clkr.hw, 2263 }, 2264 .num_parents = 1, 2265 .flags = CLK_SET_RATE_PARENT, 2266 .ops = &clk_branch2_ops, 2267 }, 2268 }, 2269 }; 2270 2271 static struct clk_branch cam_cc_mclk1_clk = { 2272 .halt_reg = 0x15034, 2273 .halt_check = BRANCH_HALT, 2274 .clkr = { 2275 .enable_reg = 0x15034, 2276 .enable_mask = BIT(0), 2277 .hw.init = &(const struct clk_init_data) { 2278 .name = "cam_cc_mclk1_clk", 2279 .parent_hws = (const struct clk_hw*[]) { 2280 &cam_cc_mclk1_clk_src.clkr.hw, 2281 }, 2282 .num_parents = 1, 2283 .flags = CLK_SET_RATE_PARENT, 2284 .ops = &clk_branch2_ops, 2285 }, 2286 }, 2287 }; 2288 2289 static struct clk_branch cam_cc_mclk2_clk = { 2290 .halt_reg = 0x15050, 2291 .halt_check = BRANCH_HALT, 2292 .clkr = { 2293 .enable_reg = 0x15050, 2294 .enable_mask = BIT(0), 2295 .hw.init = &(const struct clk_init_data) { 2296 .name = "cam_cc_mclk2_clk", 2297 .parent_hws = (const struct clk_hw*[]) { 2298 &cam_cc_mclk2_clk_src.clkr.hw, 2299 }, 2300 .num_parents = 1, 2301 .flags = CLK_SET_RATE_PARENT, 2302 .ops = &clk_branch2_ops, 2303 }, 2304 }, 2305 }; 2306 2307 static struct clk_branch cam_cc_mclk3_clk = { 2308 .halt_reg = 0x1506c, 2309 .halt_check = BRANCH_HALT, 2310 .clkr = { 2311 .enable_reg = 0x1506c, 2312 .enable_mask = BIT(0), 2313 .hw.init = &(const struct clk_init_data) { 2314 .name = "cam_cc_mclk3_clk", 2315 .parent_hws = (const struct clk_hw*[]) { 2316 &cam_cc_mclk3_clk_src.clkr.hw, 2317 }, 2318 .num_parents = 1, 2319 .flags = CLK_SET_RATE_PARENT, 2320 .ops = &clk_branch2_ops, 2321 }, 2322 }, 2323 }; 2324 2325 static struct clk_branch cam_cc_mclk4_clk = { 2326 .halt_reg = 0x15088, 2327 .halt_check = BRANCH_HALT, 2328 .clkr = { 2329 .enable_reg = 0x15088, 2330 .enable_mask = BIT(0), 2331 .hw.init = &(const struct clk_init_data) { 2332 .name = "cam_cc_mclk4_clk", 2333 .parent_hws = (const struct clk_hw*[]) { 2334 &cam_cc_mclk4_clk_src.clkr.hw, 2335 }, 2336 .num_parents = 1, 2337 .flags = CLK_SET_RATE_PARENT, 2338 .ops = &clk_branch2_ops, 2339 }, 2340 }, 2341 }; 2342 2343 static struct clk_branch cam_cc_mclk5_clk = { 2344 .halt_reg = 0x150a4, 2345 .halt_check = BRANCH_HALT, 2346 .clkr = { 2347 .enable_reg = 0x150a4, 2348 .enable_mask = BIT(0), 2349 .hw.init = &(const struct clk_init_data) { 2350 .name = "cam_cc_mclk5_clk", 2351 .parent_hws = (const struct clk_hw*[]) { 2352 &cam_cc_mclk5_clk_src.clkr.hw, 2353 }, 2354 .num_parents = 1, 2355 .flags = CLK_SET_RATE_PARENT, 2356 .ops = &clk_branch2_ops, 2357 }, 2358 }, 2359 }; 2360 2361 static struct clk_branch cam_cc_mclk6_clk = { 2362 .halt_reg = 0x150c0, 2363 .halt_check = BRANCH_HALT, 2364 .clkr = { 2365 .enable_reg = 0x150c0, 2366 .enable_mask = BIT(0), 2367 .hw.init = &(const struct clk_init_data) { 2368 .name = "cam_cc_mclk6_clk", 2369 .parent_hws = (const struct clk_hw*[]) { 2370 &cam_cc_mclk6_clk_src.clkr.hw, 2371 }, 2372 .num_parents = 1, 2373 .flags = CLK_SET_RATE_PARENT, 2374 .ops = &clk_branch2_ops, 2375 }, 2376 }, 2377 }; 2378 2379 static struct clk_branch cam_cc_mclk7_clk = { 2380 .halt_reg = 0x150dc, 2381 .halt_check = BRANCH_HALT, 2382 .clkr = { 2383 .enable_reg = 0x150dc, 2384 .enable_mask = BIT(0), 2385 .hw.init = &(const struct clk_init_data) { 2386 .name = "cam_cc_mclk7_clk", 2387 .parent_hws = (const struct clk_hw*[]) { 2388 &cam_cc_mclk7_clk_src.clkr.hw, 2389 }, 2390 .num_parents = 1, 2391 .flags = CLK_SET_RATE_PARENT, 2392 .ops = &clk_branch2_ops, 2393 }, 2394 }, 2395 }; 2396 2397 static struct clk_branch cam_cc_qdss_debug_clk = { 2398 .halt_reg = 0x131d4, 2399 .halt_check = BRANCH_HALT, 2400 .clkr = { 2401 .enable_reg = 0x131d4, 2402 .enable_mask = BIT(0), 2403 .hw.init = &(const struct clk_init_data) { 2404 .name = "cam_cc_qdss_debug_clk", 2405 .parent_hws = (const struct clk_hw*[]) { 2406 &cam_cc_qdss_debug_clk_src.clkr.hw, 2407 }, 2408 .num_parents = 1, 2409 .flags = CLK_SET_RATE_PARENT, 2410 .ops = &clk_branch2_ops, 2411 }, 2412 }, 2413 }; 2414 2415 static struct clk_branch cam_cc_qdss_debug_xo_clk = { 2416 .halt_reg = 0x131d8, 2417 .halt_check = BRANCH_HALT, 2418 .clkr = { 2419 .enable_reg = 0x131d8, 2420 .enable_mask = BIT(0), 2421 .hw.init = &(const struct clk_init_data) { 2422 .name = "cam_cc_qdss_debug_xo_clk", 2423 .parent_hws = (const struct clk_hw*[]) { 2424 &cam_cc_xo_clk_src.clkr.hw, 2425 }, 2426 .num_parents = 1, 2427 .flags = CLK_SET_RATE_PARENT, 2428 .ops = &clk_branch2_ops, 2429 }, 2430 }, 2431 }; 2432 2433 static struct clk_branch cam_cc_sbi_ahb_clk = { 2434 .halt_reg = 0x100f0, 2435 .halt_check = BRANCH_HALT, 2436 .clkr = { 2437 .enable_reg = 0x100f0, 2438 .enable_mask = BIT(0), 2439 .hw.init = &(const struct clk_init_data) { 2440 .name = "cam_cc_sbi_ahb_clk", 2441 .parent_hws = (const struct clk_hw*[]) { 2442 &cam_cc_slow_ahb_clk_src.clkr.hw, 2443 }, 2444 .num_parents = 1, 2445 .flags = CLK_SET_RATE_PARENT, 2446 .ops = &clk_branch2_ops, 2447 }, 2448 }, 2449 }; 2450 2451 static struct clk_branch cam_cc_sbi_clk = { 2452 .halt_reg = 0x100e4, 2453 .halt_check = BRANCH_HALT, 2454 .clkr = { 2455 .enable_reg = 0x100e4, 2456 .enable_mask = BIT(0), 2457 .hw.init = &(const struct clk_init_data) { 2458 .name = "cam_cc_sbi_clk", 2459 .parent_hws = (const struct clk_hw*[]) { 2460 &cam_cc_ife_0_clk_src.clkr.hw, 2461 }, 2462 .num_parents = 1, 2463 .flags = CLK_SET_RATE_PARENT, 2464 .ops = &clk_branch2_ops, 2465 }, 2466 }, 2467 }; 2468 2469 static struct clk_branch cam_cc_sfe_0_clk = { 2470 .halt_reg = 0x1307c, 2471 .halt_check = BRANCH_HALT, 2472 .clkr = { 2473 .enable_reg = 0x1307c, 2474 .enable_mask = BIT(0), 2475 .hw.init = &(const struct clk_init_data) { 2476 .name = "cam_cc_sfe_0_clk", 2477 .parent_hws = (const struct clk_hw*[]) { 2478 &cam_cc_sfe_0_clk_src.clkr.hw, 2479 }, 2480 .num_parents = 1, 2481 .flags = CLK_SET_RATE_PARENT, 2482 .ops = &clk_branch2_ops, 2483 }, 2484 }, 2485 }; 2486 2487 static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = { 2488 .halt_reg = 0x13090, 2489 .halt_check = BRANCH_HALT, 2490 .clkr = { 2491 .enable_reg = 0x13090, 2492 .enable_mask = BIT(0), 2493 .hw.init = &(const struct clk_init_data) { 2494 .name = "cam_cc_sfe_0_fast_ahb_clk", 2495 .parent_hws = (const struct clk_hw*[]) { 2496 &cam_cc_fast_ahb_clk_src.clkr.hw, 2497 }, 2498 .num_parents = 1, 2499 .flags = CLK_SET_RATE_PARENT, 2500 .ops = &clk_branch2_ops, 2501 }, 2502 }, 2503 }; 2504 2505 static struct clk_branch cam_cc_sfe_1_clk = { 2506 .halt_reg = 0x130c4, 2507 .halt_check = BRANCH_HALT, 2508 .clkr = { 2509 .enable_reg = 0x130c4, 2510 .enable_mask = BIT(0), 2511 .hw.init = &(const struct clk_init_data) { 2512 .name = "cam_cc_sfe_1_clk", 2513 .parent_hws = (const struct clk_hw*[]) { 2514 &cam_cc_sfe_1_clk_src.clkr.hw, 2515 }, 2516 .num_parents = 1, 2517 .flags = CLK_SET_RATE_PARENT, 2518 .ops = &clk_branch2_ops, 2519 }, 2520 }, 2521 }; 2522 2523 static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = { 2524 .halt_reg = 0x130d8, 2525 .halt_check = BRANCH_HALT, 2526 .clkr = { 2527 .enable_reg = 0x130d8, 2528 .enable_mask = BIT(0), 2529 .hw.init = &(const struct clk_init_data) { 2530 .name = "cam_cc_sfe_1_fast_ahb_clk", 2531 .parent_hws = (const struct clk_hw*[]) { 2532 &cam_cc_fast_ahb_clk_src.clkr.hw, 2533 }, 2534 .num_parents = 1, 2535 .flags = CLK_SET_RATE_PARENT, 2536 .ops = &clk_branch2_ops, 2537 }, 2538 }, 2539 }; 2540 2541 static struct clk_branch cam_cc_sleep_clk = { 2542 .halt_reg = 0x13228, 2543 .halt_check = BRANCH_HALT, 2544 .clkr = { 2545 .enable_reg = 0x13228, 2546 .enable_mask = BIT(0), 2547 .hw.init = &(const struct clk_init_data) { 2548 .name = "cam_cc_sleep_clk", 2549 .parent_hws = (const struct clk_hw*[]) { 2550 &cam_cc_sleep_clk_src.clkr.hw, 2551 }, 2552 .num_parents = 1, 2553 .flags = CLK_SET_RATE_PARENT, 2554 .ops = &clk_branch2_ops, 2555 }, 2556 }, 2557 }; 2558 2559 static struct clk_regmap *cam_cc_sm8450_clocks[] = { 2560 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr, 2561 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr, 2562 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr, 2563 [CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr, 2564 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr, 2565 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr, 2566 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr, 2567 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr, 2568 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr, 2569 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr, 2570 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr, 2571 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr, 2572 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr, 2573 [CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr, 2574 [CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr, 2575 [CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr, 2576 [CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr, 2577 [CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr, 2578 [CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr, 2579 [CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr, 2580 [CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr, 2581 [CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr, 2582 [CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr, 2583 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr, 2584 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr, 2585 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr, 2586 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr, 2587 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr, 2588 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr, 2589 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr, 2590 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr, 2591 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr, 2592 [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr, 2593 [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr, 2594 [CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr, 2595 [CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr, 2596 [CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr, 2597 [CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr, 2598 [CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr, 2599 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr, 2600 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr, 2601 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr, 2602 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr, 2603 [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr, 2604 [CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr, 2605 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr, 2606 [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr, 2607 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr, 2608 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr, 2609 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr, 2610 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr, 2611 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr, 2612 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr, 2613 [CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr, 2614 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr, 2615 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr, 2616 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr, 2617 [CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr, 2618 [CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr, 2619 [CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr, 2620 [CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr, 2621 [CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr, 2622 [CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr, 2623 [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr, 2624 [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr, 2625 [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr, 2626 [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr, 2627 [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr, 2628 [CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr, 2629 [CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr, 2630 [CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr, 2631 [CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr, 2632 [CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr, 2633 [CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr, 2634 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr, 2635 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr, 2636 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr, 2637 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr, 2638 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr, 2639 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr, 2640 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr, 2641 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr, 2642 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr, 2643 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr, 2644 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr, 2645 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr, 2646 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr, 2647 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr, 2648 [CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr, 2649 [CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr, 2650 [CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr, 2651 [CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr, 2652 [CAM_CC_PLL0] = &cam_cc_pll0.clkr, 2653 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr, 2654 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr, 2655 [CAM_CC_PLL1] = &cam_cc_pll1.clkr, 2656 [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr, 2657 [CAM_CC_PLL2] = &cam_cc_pll2.clkr, 2658 [CAM_CC_PLL3] = &cam_cc_pll3.clkr, 2659 [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr, 2660 [CAM_CC_PLL4] = &cam_cc_pll4.clkr, 2661 [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr, 2662 [CAM_CC_PLL5] = &cam_cc_pll5.clkr, 2663 [CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr, 2664 [CAM_CC_PLL6] = &cam_cc_pll6.clkr, 2665 [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr, 2666 [CAM_CC_PLL7] = &cam_cc_pll7.clkr, 2667 [CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr, 2668 [CAM_CC_PLL8] = &cam_cc_pll8.clkr, 2669 [CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr, 2670 [CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr, 2671 [CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr, 2672 [CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr, 2673 [CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr, 2674 [CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr, 2675 [CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr, 2676 [CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr, 2677 [CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr, 2678 [CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr, 2679 [CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr, 2680 [CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr, 2681 [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr, 2682 [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr, 2683 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr, 2684 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr, 2685 }; 2686 2687 static const struct qcom_reset_map cam_cc_sm8450_resets[] = { 2688 [CAM_CC_BPS_BCR] = { 0x10000 }, 2689 [CAM_CC_ICP_BCR] = { 0x13104 }, 2690 [CAM_CC_IFE_0_BCR] = { 0x11000 }, 2691 [CAM_CC_IFE_1_BCR] = { 0x12000 }, 2692 [CAM_CC_IFE_2_BCR] = { 0x1204c }, 2693 [CAM_CC_IPE_0_BCR] = { 0x10074 }, 2694 [CAM_CC_QDSS_DEBUG_BCR] = { 0x131b8 }, 2695 [CAM_CC_SBI_BCR] = { 0x100cc }, 2696 [CAM_CC_SFE_0_BCR] = { 0x1304c }, 2697 [CAM_CC_SFE_1_BCR] = { 0x13094 }, 2698 }; 2699 2700 static const struct regmap_config cam_cc_sm8450_regmap_config = { 2701 .reg_bits = 32, 2702 .reg_stride = 4, 2703 .val_bits = 32, 2704 .max_register = 0x1601c, 2705 .fast_io = true, 2706 }; 2707 2708 static struct gdsc titan_top_gdsc; 2709 2710 static struct gdsc bps_gdsc = { 2711 .gdscr = 0x10004, 2712 .pd = { 2713 .name = "bps_gdsc", 2714 }, 2715 .flags = HW_CTRL | POLL_CFG_GDSCR, 2716 .pwrsts = PWRSTS_OFF_ON, 2717 }; 2718 2719 static struct gdsc ipe_0_gdsc = { 2720 .gdscr = 0x10078, 2721 .pd = { 2722 .name = "ipe_0_gdsc", 2723 }, 2724 .flags = HW_CTRL | POLL_CFG_GDSCR, 2725 .pwrsts = PWRSTS_OFF_ON, 2726 }; 2727 2728 static struct gdsc sbi_gdsc = { 2729 .gdscr = 0x100d0, 2730 .pd = { 2731 .name = "sbi_gdsc", 2732 }, 2733 .flags = POLL_CFG_GDSCR, 2734 .pwrsts = PWRSTS_OFF_ON, 2735 }; 2736 2737 static struct gdsc ife_0_gdsc = { 2738 .gdscr = 0x11004, 2739 .pd = { 2740 .name = "ife_0_gdsc", 2741 }, 2742 .flags = POLL_CFG_GDSCR, 2743 .parent = &titan_top_gdsc.pd, 2744 .pwrsts = PWRSTS_OFF_ON, 2745 }; 2746 2747 static struct gdsc ife_1_gdsc = { 2748 .gdscr = 0x12004, 2749 .pd = { 2750 .name = "ife_1_gdsc", 2751 }, 2752 .flags = POLL_CFG_GDSCR, 2753 .parent = &titan_top_gdsc.pd, 2754 .pwrsts = PWRSTS_OFF_ON, 2755 }; 2756 2757 static struct gdsc ife_2_gdsc = { 2758 .gdscr = 0x12050, 2759 .pd = { 2760 .name = "ife_2_gdsc", 2761 }, 2762 .flags = POLL_CFG_GDSCR, 2763 .parent = &titan_top_gdsc.pd, 2764 .pwrsts = PWRSTS_OFF_ON, 2765 }; 2766 2767 static struct gdsc sfe_0_gdsc = { 2768 .gdscr = 0x13050, 2769 .pd = { 2770 .name = "sfe_0_gdsc", 2771 }, 2772 .flags = POLL_CFG_GDSCR, 2773 .parent = &titan_top_gdsc.pd, 2774 .pwrsts = PWRSTS_OFF_ON, 2775 }; 2776 2777 static struct gdsc sfe_1_gdsc = { 2778 .gdscr = 0x13098, 2779 .pd = { 2780 .name = "sfe_1_gdsc", 2781 }, 2782 .flags = POLL_CFG_GDSCR, 2783 .parent = &titan_top_gdsc.pd, 2784 .pwrsts = PWRSTS_OFF_ON, 2785 }; 2786 2787 static struct gdsc titan_top_gdsc = { 2788 .gdscr = 0x131dc, 2789 .pd = { 2790 .name = "titan_top_gdsc", 2791 }, 2792 .flags = POLL_CFG_GDSCR, 2793 .pwrsts = PWRSTS_OFF_ON, 2794 }; 2795 2796 static struct gdsc *cam_cc_sm8450_gdscs[] = { 2797 [BPS_GDSC] = &bps_gdsc, 2798 [IPE_0_GDSC] = &ipe_0_gdsc, 2799 [SBI_GDSC] = &sbi_gdsc, 2800 [IFE_0_GDSC] = &ife_0_gdsc, 2801 [IFE_1_GDSC] = &ife_1_gdsc, 2802 [IFE_2_GDSC] = &ife_2_gdsc, 2803 [SFE_0_GDSC] = &sfe_0_gdsc, 2804 [SFE_1_GDSC] = &sfe_1_gdsc, 2805 [TITAN_TOP_GDSC] = &titan_top_gdsc, 2806 }; 2807 2808 static const struct qcom_cc_desc cam_cc_sm8450_desc = { 2809 .config = &cam_cc_sm8450_regmap_config, 2810 .clks = cam_cc_sm8450_clocks, 2811 .num_clks = ARRAY_SIZE(cam_cc_sm8450_clocks), 2812 .resets = cam_cc_sm8450_resets, 2813 .num_resets = ARRAY_SIZE(cam_cc_sm8450_resets), 2814 .gdscs = cam_cc_sm8450_gdscs, 2815 .num_gdscs = ARRAY_SIZE(cam_cc_sm8450_gdscs), 2816 }; 2817 2818 static const struct of_device_id cam_cc_sm8450_match_table[] = { 2819 { .compatible = "qcom,sm8450-camcc" }, 2820 { } 2821 }; 2822 MODULE_DEVICE_TABLE(of, cam_cc_sm8450_match_table); 2823 2824 static int cam_cc_sm8450_probe(struct platform_device *pdev) 2825 { 2826 struct regmap *regmap; 2827 2828 regmap = qcom_cc_map(pdev, &cam_cc_sm8450_desc); 2829 if (IS_ERR(regmap)) 2830 return PTR_ERR(regmap); 2831 2832 clk_lucid_evo_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config); 2833 clk_lucid_evo_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config); 2834 clk_rivian_evo_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config); 2835 clk_lucid_evo_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config); 2836 clk_lucid_evo_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config); 2837 clk_lucid_evo_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config); 2838 clk_lucid_evo_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config); 2839 clk_lucid_evo_pll_configure(&cam_cc_pll7, regmap, &cam_cc_pll7_config); 2840 clk_lucid_evo_pll_configure(&cam_cc_pll8, regmap, &cam_cc_pll8_config); 2841 2842 return qcom_cc_really_probe(pdev, &cam_cc_sm8450_desc, regmap); 2843 } 2844 2845 static struct platform_driver cam_cc_sm8450_driver = { 2846 .probe = cam_cc_sm8450_probe, 2847 .driver = { 2848 .name = "camcc-sm8450", 2849 .of_match_table = cam_cc_sm8450_match_table, 2850 }, 2851 }; 2852 2853 module_platform_driver(cam_cc_sm8450_driver); 2854 2855 MODULE_DESCRIPTION("QCOM CAMCC SM8450 Driver"); 2856 MODULE_LICENSE("GPL"); 2857