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