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