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