1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/err.h> 8 #include <linux/kernel.h> 9 #include <linux/module.h> 10 #include <linux/of_device.h> 11 #include <linux/of.h> 12 #include <linux/regmap.h> 13 14 #include <dt-bindings/clock/qcom,camcc-sc7280.h> 15 16 #include "clk-alpha-pll.h" 17 #include "clk-branch.h" 18 #include "clk-rcg.h" 19 #include "common.h" 20 #include "gdsc.h" 21 #include "reset.h" 22 23 enum { 24 P_BI_TCXO, 25 P_CAM_CC_PLL0_OUT_EVEN, 26 P_CAM_CC_PLL0_OUT_MAIN, 27 P_CAM_CC_PLL0_OUT_ODD, 28 P_CAM_CC_PLL1_OUT_EVEN, 29 P_CAM_CC_PLL2_OUT_AUX2, 30 P_CAM_CC_PLL2_OUT_EARLY, 31 P_CAM_CC_PLL3_OUT_EVEN, 32 P_CAM_CC_PLL4_OUT_EVEN, 33 P_CAM_CC_PLL5_OUT_EVEN, 34 P_CAM_CC_PLL6_OUT_EVEN, 35 P_CAM_CC_PLL6_OUT_MAIN, 36 P_CAM_CC_PLL6_OUT_ODD, 37 P_SLEEP_CLK, 38 }; 39 40 static struct pll_vco lucid_vco[] = { 41 { 249600000, 2000000000, 0 }, 42 }; 43 44 static struct pll_vco zonda_vco[] = { 45 { 595200000UL, 3600000000UL, 0 }, 46 }; 47 48 /* 1200MHz Configuration */ 49 static const struct alpha_pll_config cam_cc_pll0_config = { 50 .l = 0x3E, 51 .alpha = 0x8000, 52 .config_ctl_val = 0x20485699, 53 .config_ctl_hi_val = 0x00002261, 54 .config_ctl_hi1_val = 0x329A299C, 55 .user_ctl_val = 0x00003101, 56 .user_ctl_hi_val = 0x00000805, 57 .user_ctl_hi1_val = 0x00000000, 58 }; 59 60 static struct clk_alpha_pll cam_cc_pll0 = { 61 .offset = 0x0, 62 .vco_table = lucid_vco, 63 .num_vco = ARRAY_SIZE(lucid_vco), 64 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 65 .clkr = { 66 .hw.init = &(struct clk_init_data){ 67 .name = "cam_cc_pll0", 68 .parent_data = &(const struct clk_parent_data){ 69 .fw_name = "bi_tcxo", 70 }, 71 .num_parents = 1, 72 .ops = &clk_alpha_pll_lucid_ops, 73 }, 74 }, 75 }; 76 77 static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = { 78 { 0x1, 2 }, 79 { } 80 }; 81 82 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = { 83 .offset = 0x0, 84 .post_div_shift = 8, 85 .post_div_table = post_div_table_cam_cc_pll0_out_even, 86 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even), 87 .width = 4, 88 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 89 .clkr.hw.init = &(struct clk_init_data){ 90 .name = "cam_cc_pll0_out_even", 91 .parent_data = &(const struct clk_parent_data){ 92 .hw = &cam_cc_pll0.clkr.hw, 93 }, 94 .num_parents = 1, 95 .flags = CLK_SET_RATE_PARENT, 96 .ops = &clk_alpha_pll_postdiv_lucid_ops, 97 }, 98 }; 99 100 static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = { 101 { 0x3, 3 }, 102 { } 103 }; 104 105 static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = { 106 .offset = 0x0, 107 .post_div_shift = 12, 108 .post_div_table = post_div_table_cam_cc_pll0_out_odd, 109 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd), 110 .width = 4, 111 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 112 .clkr.hw.init = &(struct clk_init_data){ 113 .name = "cam_cc_pll0_out_odd", 114 .parent_data = &(const struct clk_parent_data){ 115 .hw = &cam_cc_pll0.clkr.hw, 116 }, 117 .num_parents = 1, 118 .flags = CLK_SET_RATE_PARENT, 119 .ops = &clk_alpha_pll_postdiv_lucid_ops, 120 }, 121 }; 122 123 /* 600MHz Configuration */ 124 static const struct alpha_pll_config cam_cc_pll1_config = { 125 .l = 0x1F, 126 .alpha = 0x4000, 127 .config_ctl_val = 0x20485699, 128 .config_ctl_hi_val = 0x00002261, 129 .config_ctl_hi1_val = 0x329A299C, 130 .user_ctl_val = 0x00000101, 131 .user_ctl_hi_val = 0x00000805, 132 .user_ctl_hi1_val = 0x00000000, 133 }; 134 135 static struct clk_alpha_pll cam_cc_pll1 = { 136 .offset = 0x1000, 137 .vco_table = lucid_vco, 138 .num_vco = ARRAY_SIZE(lucid_vco), 139 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 140 .clkr = { 141 .hw.init = &(struct clk_init_data){ 142 .name = "cam_cc_pll1", 143 .parent_data = &(const struct clk_parent_data){ 144 .fw_name = "bi_tcxo", 145 }, 146 .num_parents = 1, 147 .ops = &clk_alpha_pll_lucid_ops, 148 }, 149 }, 150 }; 151 152 static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = { 153 { 0x1, 2 }, 154 { } 155 }; 156 157 static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = { 158 .offset = 0x1000, 159 .post_div_shift = 8, 160 .post_div_table = post_div_table_cam_cc_pll1_out_even, 161 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even), 162 .width = 4, 163 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 164 .clkr.hw.init = &(struct clk_init_data){ 165 .name = "cam_cc_pll1_out_even", 166 .parent_data = &(const struct clk_parent_data){ 167 .hw = &cam_cc_pll1.clkr.hw, 168 }, 169 .num_parents = 1, 170 .flags = CLK_SET_RATE_PARENT, 171 .ops = &clk_alpha_pll_postdiv_lucid_ops, 172 }, 173 }; 174 175 /* 1440MHz Configuration */ 176 static const struct alpha_pll_config cam_cc_pll2_config = { 177 .l = 0x4B, 178 .alpha = 0x0, 179 .config_ctl_val = 0x08200800, 180 .config_ctl_hi_val = 0x05022011, 181 .config_ctl_hi1_val = 0x08000000, 182 .user_ctl_val = 0x00000301, 183 }; 184 185 static struct clk_alpha_pll cam_cc_pll2 = { 186 .offset = 0x2000, 187 .vco_table = zonda_vco, 188 .num_vco = ARRAY_SIZE(zonda_vco), 189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA], 190 .clkr = { 191 .hw.init = &(struct clk_init_data){ 192 .name = "cam_cc_pll2", 193 .parent_data = &(const struct clk_parent_data){ 194 .fw_name = "bi_tcxo", 195 }, 196 .num_parents = 1, 197 .ops = &clk_alpha_pll_zonda_ops, 198 }, 199 }, 200 }; 201 202 static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux[] = { 203 { 0x3, 4 }, 204 { } 205 }; 206 207 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux = { 208 .offset = 0x2000, 209 .post_div_shift = 8, 210 .post_div_table = post_div_table_cam_cc_pll2_out_aux, 211 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux), 212 .width = 2, 213 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA], 214 .clkr.hw.init = &(struct clk_init_data){ 215 .name = "cam_cc_pll2_out_aux", 216 .parent_data = &(const struct clk_parent_data){ 217 .hw = &cam_cc_pll2.clkr.hw, 218 }, 219 .num_parents = 1, 220 .flags = CLK_SET_RATE_PARENT, 221 .ops = &clk_alpha_pll_postdiv_zonda_ops, 222 }, 223 }; 224 225 static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux2[] = { 226 { 0x3, 4 }, 227 { } 228 }; 229 230 static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux2 = { 231 .offset = 0x2000, 232 .post_div_shift = 8, 233 .post_div_table = post_div_table_cam_cc_pll2_out_aux2, 234 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux2), 235 .width = 2, 236 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA], 237 .clkr.hw.init = &(struct clk_init_data){ 238 .name = "cam_cc_pll2_out_aux2", 239 .parent_data = &(const struct clk_parent_data){ 240 .hw = &cam_cc_pll2.clkr.hw, 241 }, 242 .num_parents = 1, 243 .flags = CLK_SET_RATE_PARENT, 244 .ops = &clk_alpha_pll_postdiv_zonda_ops, 245 }, 246 }; 247 248 /* 760MHz Configuration */ 249 static const struct alpha_pll_config cam_cc_pll3_config = { 250 .l = 0x27, 251 .alpha = 0x9555, 252 .config_ctl_val = 0x20485699, 253 .config_ctl_hi_val = 0x00002261, 254 .config_ctl_hi1_val = 0x329A299C, 255 .user_ctl_val = 0x00000101, 256 .user_ctl_hi_val = 0x00000805, 257 .user_ctl_hi1_val = 0x00000000, 258 }; 259 260 static struct clk_alpha_pll cam_cc_pll3 = { 261 .offset = 0x3000, 262 .vco_table = lucid_vco, 263 .num_vco = ARRAY_SIZE(lucid_vco), 264 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 265 .clkr = { 266 .hw.init = &(struct clk_init_data){ 267 .name = "cam_cc_pll3", 268 .parent_data = &(const struct clk_parent_data){ 269 .fw_name = "bi_tcxo", 270 }, 271 .num_parents = 1, 272 .ops = &clk_alpha_pll_lucid_ops, 273 }, 274 }, 275 }; 276 277 static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = { 278 { 0x1, 2 }, 279 { } 280 }; 281 282 static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = { 283 .offset = 0x3000, 284 .post_div_shift = 8, 285 .post_div_table = post_div_table_cam_cc_pll3_out_even, 286 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even), 287 .width = 4, 288 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 289 .clkr.hw.init = &(struct clk_init_data){ 290 .name = "cam_cc_pll3_out_even", 291 .parent_data = &(const struct clk_parent_data){ 292 .hw = &cam_cc_pll3.clkr.hw, 293 }, 294 .num_parents = 1, 295 .flags = CLK_SET_RATE_PARENT, 296 .ops = &clk_alpha_pll_postdiv_lucid_ops, 297 }, 298 }; 299 300 /* 760MHz Configuration */ 301 static const struct alpha_pll_config cam_cc_pll4_config = { 302 .l = 0x27, 303 .alpha = 0x9555, 304 .config_ctl_val = 0x20485699, 305 .config_ctl_hi_val = 0x00002261, 306 .config_ctl_hi1_val = 0x329A299C, 307 .user_ctl_val = 0x00000101, 308 .user_ctl_hi_val = 0x00000805, 309 .user_ctl_hi1_val = 0x00000000, 310 }; 311 312 static struct clk_alpha_pll cam_cc_pll4 = { 313 .offset = 0x4000, 314 .vco_table = lucid_vco, 315 .num_vco = ARRAY_SIZE(lucid_vco), 316 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 317 .clkr = { 318 .hw.init = &(struct clk_init_data){ 319 .name = "cam_cc_pll4", 320 .parent_data = &(const struct clk_parent_data){ 321 .fw_name = "bi_tcxo", 322 }, 323 .num_parents = 1, 324 .ops = &clk_alpha_pll_lucid_ops, 325 }, 326 }, 327 }; 328 329 static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = { 330 { 0x1, 2 }, 331 { } 332 }; 333 334 static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = { 335 .offset = 0x4000, 336 .post_div_shift = 8, 337 .post_div_table = post_div_table_cam_cc_pll4_out_even, 338 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even), 339 .width = 4, 340 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 341 .clkr.hw.init = &(struct clk_init_data){ 342 .name = "cam_cc_pll4_out_even", 343 .parent_data = &(const struct clk_parent_data){ 344 .hw = &cam_cc_pll4.clkr.hw, 345 }, 346 .num_parents = 1, 347 .flags = CLK_SET_RATE_PARENT, 348 .ops = &clk_alpha_pll_postdiv_lucid_ops, 349 }, 350 }; 351 352 /* 760MHz Configuration */ 353 static const struct alpha_pll_config cam_cc_pll5_config = { 354 .l = 0x27, 355 .alpha = 0x9555, 356 .config_ctl_val = 0x20485699, 357 .config_ctl_hi_val = 0x00002261, 358 .config_ctl_hi1_val = 0x329A299C, 359 .user_ctl_val = 0x00000101, 360 .user_ctl_hi_val = 0x00000805, 361 .user_ctl_hi1_val = 0x00000000, 362 }; 363 364 static struct clk_alpha_pll cam_cc_pll5 = { 365 .offset = 0x5000, 366 .vco_table = lucid_vco, 367 .num_vco = ARRAY_SIZE(lucid_vco), 368 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 369 .clkr = { 370 .hw.init = &(struct clk_init_data){ 371 .name = "cam_cc_pll5", 372 .parent_data = &(const struct clk_parent_data){ 373 .fw_name = "bi_tcxo", 374 }, 375 .num_parents = 1, 376 .ops = &clk_alpha_pll_lucid_ops, 377 }, 378 }, 379 }; 380 381 static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = { 382 { 0x1, 2 }, 383 { } 384 }; 385 386 static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = { 387 .offset = 0x5000, 388 .post_div_shift = 8, 389 .post_div_table = post_div_table_cam_cc_pll5_out_even, 390 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even), 391 .width = 4, 392 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 393 .clkr.hw.init = &(struct clk_init_data){ 394 .name = "cam_cc_pll5_out_even", 395 .parent_data = &(const struct clk_parent_data){ 396 .hw = &cam_cc_pll5.clkr.hw, 397 }, 398 .num_parents = 1, 399 .flags = CLK_SET_RATE_PARENT, 400 .ops = &clk_alpha_pll_postdiv_lucid_ops, 401 }, 402 }; 403 404 /* 960MHz Configuration */ 405 static const struct alpha_pll_config cam_cc_pll6_config = { 406 .l = 0x32, 407 .alpha = 0x0, 408 .config_ctl_val = 0x20485699, 409 .config_ctl_hi_val = 0x00002261, 410 .config_ctl_hi1_val = 0x329A299C, 411 .user_ctl_val = 0x00003101, 412 .user_ctl_hi_val = 0x00000805, 413 .user_ctl_hi1_val = 0x00000000, 414 }; 415 416 static struct clk_alpha_pll cam_cc_pll6 = { 417 .offset = 0x6000, 418 .vco_table = lucid_vco, 419 .num_vco = ARRAY_SIZE(lucid_vco), 420 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 421 .clkr = { 422 .hw.init = &(struct clk_init_data){ 423 .name = "cam_cc_pll6", 424 .parent_data = &(const struct clk_parent_data){ 425 .fw_name = "bi_tcxo", 426 }, 427 .num_parents = 1, 428 .ops = &clk_alpha_pll_lucid_ops, 429 }, 430 }, 431 }; 432 433 static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = { 434 { 0x1, 2 }, 435 { } 436 }; 437 438 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = { 439 .offset = 0x6000, 440 .post_div_shift = 8, 441 .post_div_table = post_div_table_cam_cc_pll6_out_even, 442 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even), 443 .width = 4, 444 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 445 .clkr.hw.init = &(struct clk_init_data){ 446 .name = "cam_cc_pll6_out_even", 447 .parent_data = &(const struct clk_parent_data){ 448 .hw = &cam_cc_pll6.clkr.hw, 449 }, 450 .num_parents = 1, 451 .flags = CLK_SET_RATE_PARENT, 452 .ops = &clk_alpha_pll_postdiv_lucid_ops, 453 }, 454 }; 455 456 static const struct clk_div_table post_div_table_cam_cc_pll6_out_odd[] = { 457 { 0x3, 3 }, 458 { } 459 }; 460 461 static struct clk_alpha_pll_postdiv cam_cc_pll6_out_odd = { 462 .offset = 0x6000, 463 .post_div_shift = 12, 464 .post_div_table = post_div_table_cam_cc_pll6_out_odd, 465 .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_odd), 466 .width = 4, 467 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 468 .clkr.hw.init = &(struct clk_init_data){ 469 .name = "cam_cc_pll6_out_odd", 470 .parent_data = &(const struct clk_parent_data){ 471 .hw = &cam_cc_pll6.clkr.hw, 472 }, 473 .num_parents = 1, 474 .flags = CLK_SET_RATE_PARENT, 475 .ops = &clk_alpha_pll_postdiv_lucid_ops, 476 }, 477 }; 478 479 static const struct parent_map cam_cc_parent_map_0[] = { 480 { P_BI_TCXO, 0 }, 481 { P_CAM_CC_PLL0_OUT_MAIN, 1 }, 482 { P_CAM_CC_PLL0_OUT_EVEN, 2 }, 483 { P_CAM_CC_PLL0_OUT_ODD, 3 }, 484 { P_CAM_CC_PLL6_OUT_EVEN, 5 }, 485 }; 486 487 static const struct clk_parent_data cam_cc_parent_data_0[] = { 488 { .fw_name = "bi_tcxo" }, 489 { .hw = &cam_cc_pll0.clkr.hw }, 490 { .hw = &cam_cc_pll0_out_even.clkr.hw }, 491 { .hw = &cam_cc_pll0_out_odd.clkr.hw }, 492 { .hw = &cam_cc_pll6_out_even.clkr.hw }, 493 }; 494 495 static const struct parent_map cam_cc_parent_map_1[] = { 496 { P_BI_TCXO, 0 }, 497 { P_CAM_CC_PLL0_OUT_MAIN, 1 }, 498 { P_CAM_CC_PLL0_OUT_EVEN, 2 }, 499 { P_CAM_CC_PLL0_OUT_ODD, 3 }, 500 { P_CAM_CC_PLL6_OUT_MAIN, 4 }, 501 { P_CAM_CC_PLL6_OUT_EVEN, 5 }, 502 }; 503 504 static const struct clk_parent_data cam_cc_parent_data_1[] = { 505 { .fw_name = "bi_tcxo" }, 506 { .hw = &cam_cc_pll0.clkr.hw }, 507 { .hw = &cam_cc_pll0_out_even.clkr.hw }, 508 { .hw = &cam_cc_pll0_out_odd.clkr.hw }, 509 { .hw = &cam_cc_pll6.clkr.hw }, 510 { .hw = &cam_cc_pll6_out_even.clkr.hw }, 511 }; 512 513 static const struct parent_map cam_cc_parent_map_2[] = { 514 { P_BI_TCXO, 0 }, 515 { P_CAM_CC_PLL2_OUT_AUX2, 3 }, 516 { P_CAM_CC_PLL2_OUT_EARLY, 5 }, 517 }; 518 519 static const struct clk_parent_data cam_cc_parent_data_2[] = { 520 { .fw_name = "bi_tcxo" }, 521 { .hw = &cam_cc_pll2_out_aux2.clkr.hw }, 522 { .hw = &cam_cc_pll2.clkr.hw }, 523 }; 524 525 static const struct parent_map cam_cc_parent_map_3[] = { 526 { P_BI_TCXO, 0 }, 527 { P_CAM_CC_PLL0_OUT_MAIN, 1 }, 528 { P_CAM_CC_PLL0_OUT_EVEN, 2 }, 529 { P_CAM_CC_PLL0_OUT_ODD, 3 }, 530 { P_CAM_CC_PLL6_OUT_EVEN, 5 }, 531 { P_CAM_CC_PLL6_OUT_ODD, 6 }, 532 }; 533 534 static const struct clk_parent_data cam_cc_parent_data_3[] = { 535 { .fw_name = "bi_tcxo" }, 536 { .hw = &cam_cc_pll0.clkr.hw }, 537 { .hw = &cam_cc_pll0_out_even.clkr.hw }, 538 { .hw = &cam_cc_pll0_out_odd.clkr.hw }, 539 { .hw = &cam_cc_pll6_out_even.clkr.hw }, 540 { .hw = &cam_cc_pll6_out_odd.clkr.hw }, 541 }; 542 543 static const struct parent_map cam_cc_parent_map_4[] = { 544 { P_BI_TCXO, 0 }, 545 { P_CAM_CC_PLL3_OUT_EVEN, 6 }, 546 }; 547 548 static const struct clk_parent_data cam_cc_parent_data_4[] = { 549 { .fw_name = "bi_tcxo" }, 550 { .hw = &cam_cc_pll3_out_even.clkr.hw }, 551 }; 552 553 static const struct parent_map cam_cc_parent_map_5[] = { 554 { P_BI_TCXO, 0 }, 555 { P_CAM_CC_PLL4_OUT_EVEN, 6 }, 556 }; 557 558 static const struct clk_parent_data cam_cc_parent_data_5[] = { 559 { .fw_name = "bi_tcxo" }, 560 { .hw = &cam_cc_pll4_out_even.clkr.hw }, 561 }; 562 563 static const struct parent_map cam_cc_parent_map_6[] = { 564 { P_BI_TCXO, 0 }, 565 { P_CAM_CC_PLL5_OUT_EVEN, 6 }, 566 }; 567 568 static const struct clk_parent_data cam_cc_parent_data_6[] = { 569 { .fw_name = "bi_tcxo" }, 570 { .hw = &cam_cc_pll5_out_even.clkr.hw }, 571 }; 572 573 static const struct parent_map cam_cc_parent_map_7[] = { 574 { P_BI_TCXO, 0 }, 575 { P_CAM_CC_PLL1_OUT_EVEN, 4 }, 576 }; 577 578 static const struct clk_parent_data cam_cc_parent_data_7[] = { 579 { .fw_name = "bi_tcxo" }, 580 { .hw = &cam_cc_pll1_out_even.clkr.hw }, 581 }; 582 583 static const struct parent_map cam_cc_parent_map_8[] = { 584 { P_SLEEP_CLK, 0 }, 585 }; 586 587 static const struct clk_parent_data cam_cc_parent_data_8[] = { 588 { .fw_name = "sleep_clk" }, 589 }; 590 591 static const struct parent_map cam_cc_parent_map_9[] = { 592 { P_BI_TCXO, 0 }, 593 }; 594 595 static const struct clk_parent_data cam_cc_parent_data_9_ao[] = { 596 { .fw_name = "bi_tcxo_ao" }, 597 }; 598 599 static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = { 600 F(19200000, P_BI_TCXO, 1, 0, 0), 601 F(100000000, P_CAM_CC_PLL0_OUT_ODD, 4, 0, 0), 602 F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0), 603 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 604 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 605 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0), 606 { } 607 }; 608 609 static struct clk_rcg2 cam_cc_bps_clk_src = { 610 .cmd_rcgr = 0x7010, 611 .mnd_width = 0, 612 .hid_width = 5, 613 .parent_map = cam_cc_parent_map_0, 614 .freq_tbl = ftbl_cam_cc_bps_clk_src, 615 .clkr.hw.init = &(struct clk_init_data){ 616 .name = "cam_cc_bps_clk_src", 617 .parent_data = cam_cc_parent_data_0, 618 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 619 .ops = &clk_rcg2_shared_ops, 620 }, 621 }; 622 623 static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = { 624 F(19200000, P_BI_TCXO, 1, 0, 0), 625 F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0), 626 F(240000000, P_CAM_CC_PLL6_OUT_EVEN, 2, 0, 0), 627 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0), 628 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 629 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 630 { } 631 }; 632 633 static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = { 634 .cmd_rcgr = 0xc124, 635 .mnd_width = 0, 636 .hid_width = 5, 637 .parent_map = cam_cc_parent_map_3, 638 .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src, 639 .clkr.hw.init = &(struct clk_init_data){ 640 .name = "cam_cc_camnoc_axi_clk_src", 641 .parent_data = cam_cc_parent_data_3, 642 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 643 .ops = &clk_rcg2_shared_ops, 644 }, 645 }; 646 647 static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = { 648 F(19200000, P_BI_TCXO, 1, 0, 0), 649 F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0), 650 { } 651 }; 652 653 static struct clk_rcg2 cam_cc_cci_0_clk_src = { 654 .cmd_rcgr = 0xc0e0, 655 .mnd_width = 8, 656 .hid_width = 5, 657 .parent_map = cam_cc_parent_map_0, 658 .freq_tbl = ftbl_cam_cc_cci_0_clk_src, 659 .clkr.hw.init = &(struct clk_init_data){ 660 .name = "cam_cc_cci_0_clk_src", 661 .parent_data = cam_cc_parent_data_0, 662 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 663 .ops = &clk_rcg2_shared_ops, 664 }, 665 }; 666 667 static struct clk_rcg2 cam_cc_cci_1_clk_src = { 668 .cmd_rcgr = 0xc0fc, 669 .mnd_width = 8, 670 .hid_width = 5, 671 .parent_map = cam_cc_parent_map_0, 672 .freq_tbl = ftbl_cam_cc_cci_0_clk_src, 673 .clkr.hw.init = &(struct clk_init_data){ 674 .name = "cam_cc_cci_1_clk_src", 675 .parent_data = cam_cc_parent_data_0, 676 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 677 .ops = &clk_rcg2_shared_ops, 678 }, 679 }; 680 681 static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = { 682 F(19200000, P_BI_TCXO, 1, 0, 0), 683 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0), 684 F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0), 685 { } 686 }; 687 688 static struct clk_rcg2 cam_cc_cphy_rx_clk_src = { 689 .cmd_rcgr = 0xa064, 690 .mnd_width = 0, 691 .hid_width = 5, 692 .parent_map = cam_cc_parent_map_1, 693 .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src, 694 .clkr.hw.init = &(struct clk_init_data){ 695 .name = "cam_cc_cphy_rx_clk_src", 696 .parent_data = cam_cc_parent_data_1, 697 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 698 .ops = &clk_rcg2_shared_ops, 699 }, 700 }; 701 702 static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = { 703 F(19200000, P_BI_TCXO, 1, 0, 0), 704 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0), 705 { } 706 }; 707 708 static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = { 709 .cmd_rcgr = 0xe0ac, 710 .mnd_width = 0, 711 .hid_width = 5, 712 .parent_map = cam_cc_parent_map_0, 713 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 714 .clkr.hw.init = &(struct clk_init_data){ 715 .name = "cam_cc_csi0phytimer_clk_src", 716 .parent_data = cam_cc_parent_data_0, 717 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 718 .ops = &clk_rcg2_shared_ops, 719 }, 720 }; 721 722 static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = { 723 .cmd_rcgr = 0xe0d0, 724 .mnd_width = 0, 725 .hid_width = 5, 726 .parent_map = cam_cc_parent_map_0, 727 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 728 .clkr.hw.init = &(struct clk_init_data){ 729 .name = "cam_cc_csi1phytimer_clk_src", 730 .parent_data = cam_cc_parent_data_0, 731 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 732 .ops = &clk_rcg2_shared_ops, 733 }, 734 }; 735 736 static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = { 737 .cmd_rcgr = 0xe0f4, 738 .mnd_width = 0, 739 .hid_width = 5, 740 .parent_map = cam_cc_parent_map_0, 741 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 742 .clkr.hw.init = &(struct clk_init_data){ 743 .name = "cam_cc_csi2phytimer_clk_src", 744 .parent_data = cam_cc_parent_data_0, 745 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 746 .ops = &clk_rcg2_shared_ops, 747 }, 748 }; 749 750 static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = { 751 .cmd_rcgr = 0xe11c, 752 .mnd_width = 0, 753 .hid_width = 5, 754 .parent_map = cam_cc_parent_map_0, 755 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 756 .clkr.hw.init = &(struct clk_init_data){ 757 .name = "cam_cc_csi3phytimer_clk_src", 758 .parent_data = cam_cc_parent_data_0, 759 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 760 .ops = &clk_rcg2_shared_ops, 761 }, 762 }; 763 764 static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = { 765 .cmd_rcgr = 0xe140, 766 .mnd_width = 0, 767 .hid_width = 5, 768 .parent_map = cam_cc_parent_map_0, 769 .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src, 770 .clkr.hw.init = &(struct clk_init_data){ 771 .name = "cam_cc_csi4phytimer_clk_src", 772 .parent_data = cam_cc_parent_data_0, 773 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 774 .ops = &clk_rcg2_shared_ops, 775 }, 776 }; 777 778 static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = { 779 F(19200000, P_BI_TCXO, 1, 0, 0), 780 F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0), 781 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0), 782 F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0), 783 F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0), 784 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 785 { } 786 }; 787 788 static struct clk_rcg2 cam_cc_fast_ahb_clk_src = { 789 .cmd_rcgr = 0x703c, 790 .mnd_width = 0, 791 .hid_width = 5, 792 .parent_map = cam_cc_parent_map_0, 793 .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src, 794 .clkr.hw.init = &(struct clk_init_data){ 795 .name = "cam_cc_fast_ahb_clk_src", 796 .parent_data = cam_cc_parent_data_0, 797 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 798 .ops = &clk_rcg2_shared_ops, 799 }, 800 }; 801 802 static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = { 803 F(19200000, P_BI_TCXO, 1, 0, 0), 804 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 805 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 806 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0), 807 { } 808 }; 809 810 static struct clk_rcg2 cam_cc_icp_clk_src = { 811 .cmd_rcgr = 0xc0b8, 812 .mnd_width = 0, 813 .hid_width = 5, 814 .parent_map = cam_cc_parent_map_0, 815 .freq_tbl = ftbl_cam_cc_icp_clk_src, 816 .clkr.hw.init = &(struct clk_init_data){ 817 .name = "cam_cc_icp_clk_src", 818 .parent_data = cam_cc_parent_data_0, 819 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 820 .ops = &clk_rcg2_shared_ops, 821 }, 822 }; 823 824 static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = { 825 F(19200000, P_BI_TCXO, 1, 0, 0), 826 F(380000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 827 F(510000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 828 F(637000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 829 F(760000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0), 830 { } 831 }; 832 833 static struct clk_rcg2 cam_cc_ife_0_clk_src = { 834 .cmd_rcgr = 0xa010, 835 .mnd_width = 0, 836 .hid_width = 5, 837 .parent_map = cam_cc_parent_map_4, 838 .freq_tbl = ftbl_cam_cc_ife_0_clk_src, 839 .clkr.hw.init = &(struct clk_init_data){ 840 .name = "cam_cc_ife_0_clk_src", 841 .parent_data = cam_cc_parent_data_4, 842 .num_parents = ARRAY_SIZE(cam_cc_parent_data_4), 843 .flags = CLK_SET_RATE_PARENT, 844 .ops = &clk_rcg2_shared_ops, 845 }, 846 }; 847 848 static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = { 849 F(19200000, P_BI_TCXO, 1, 0, 0), 850 F(380000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 851 F(510000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 852 F(637000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 853 F(760000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0), 854 { } 855 }; 856 857 static struct clk_rcg2 cam_cc_ife_1_clk_src = { 858 .cmd_rcgr = 0xb010, 859 .mnd_width = 0, 860 .hid_width = 5, 861 .parent_map = cam_cc_parent_map_5, 862 .freq_tbl = ftbl_cam_cc_ife_1_clk_src, 863 .clkr.hw.init = &(struct clk_init_data){ 864 .name = "cam_cc_ife_1_clk_src", 865 .parent_data = cam_cc_parent_data_5, 866 .num_parents = ARRAY_SIZE(cam_cc_parent_data_5), 867 .flags = CLK_SET_RATE_PARENT, 868 .ops = &clk_rcg2_shared_ops, 869 }, 870 }; 871 872 static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = { 873 F(19200000, P_BI_TCXO, 1, 0, 0), 874 F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0), 875 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0), 876 F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0), 877 { } 878 }; 879 880 static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = { 881 .cmd_rcgr = 0xa03c, 882 .mnd_width = 0, 883 .hid_width = 5, 884 .parent_map = cam_cc_parent_map_1, 885 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 886 .clkr.hw.init = &(struct clk_init_data){ 887 .name = "cam_cc_ife_0_csid_clk_src", 888 .parent_data = cam_cc_parent_data_1, 889 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 890 .ops = &clk_rcg2_shared_ops, 891 }, 892 }; 893 894 static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = { 895 .cmd_rcgr = 0xb03c, 896 .mnd_width = 0, 897 .hid_width = 5, 898 .parent_map = cam_cc_parent_map_1, 899 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 900 .clkr.hw.init = &(struct clk_init_data){ 901 .name = "cam_cc_ife_1_csid_clk_src", 902 .parent_data = cam_cc_parent_data_1, 903 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 904 .ops = &clk_rcg2_shared_ops, 905 }, 906 }; 907 908 static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = { 909 F(19200000, P_BI_TCXO, 1, 0, 0), 910 F(380000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 911 F(510000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 912 F(637000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 913 F(760000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0), 914 { } 915 }; 916 917 static struct clk_rcg2 cam_cc_ife_2_clk_src = { 918 .cmd_rcgr = 0xb07c, 919 .mnd_width = 0, 920 .hid_width = 5, 921 .parent_map = cam_cc_parent_map_6, 922 .freq_tbl = ftbl_cam_cc_ife_2_clk_src, 923 .clkr.hw.init = &(struct clk_init_data){ 924 .name = "cam_cc_ife_2_clk_src", 925 .parent_data = cam_cc_parent_data_6, 926 .num_parents = ARRAY_SIZE(cam_cc_parent_data_6), 927 .flags = CLK_SET_RATE_PARENT, 928 .ops = &clk_rcg2_shared_ops, 929 }, 930 }; 931 932 static struct clk_rcg2 cam_cc_ife_2_csid_clk_src = { 933 .cmd_rcgr = 0xb0a8, 934 .mnd_width = 0, 935 .hid_width = 5, 936 .parent_map = cam_cc_parent_map_1, 937 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 938 .clkr.hw.init = &(struct clk_init_data){ 939 .name = "cam_cc_ife_2_csid_clk_src", 940 .parent_data = cam_cc_parent_data_1, 941 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 942 .ops = &clk_rcg2_shared_ops, 943 }, 944 }; 945 946 static const struct freq_tbl ftbl_cam_cc_ife_lite_0_clk_src[] = { 947 F(19200000, P_BI_TCXO, 1, 0, 0), 948 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0), 949 F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0), 950 F(480000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0), 951 F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0), 952 { } 953 }; 954 955 static struct clk_rcg2 cam_cc_ife_lite_0_clk_src = { 956 .cmd_rcgr = 0xc004, 957 .mnd_width = 0, 958 .hid_width = 5, 959 .parent_map = cam_cc_parent_map_3, 960 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src, 961 .clkr.hw.init = &(struct clk_init_data){ 962 .name = "cam_cc_ife_lite_0_clk_src", 963 .parent_data = cam_cc_parent_data_3, 964 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 965 .ops = &clk_rcg2_shared_ops, 966 }, 967 }; 968 969 static struct clk_rcg2 cam_cc_ife_lite_0_csid_clk_src = { 970 .cmd_rcgr = 0xc020, 971 .mnd_width = 0, 972 .hid_width = 5, 973 .parent_map = cam_cc_parent_map_1, 974 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 975 .clkr.hw.init = &(struct clk_init_data){ 976 .name = "cam_cc_ife_lite_0_csid_clk_src", 977 .parent_data = cam_cc_parent_data_1, 978 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 979 .ops = &clk_rcg2_shared_ops, 980 }, 981 }; 982 983 static struct clk_rcg2 cam_cc_ife_lite_1_clk_src = { 984 .cmd_rcgr = 0xc048, 985 .mnd_width = 0, 986 .hid_width = 5, 987 .parent_map = cam_cc_parent_map_3, 988 .freq_tbl = ftbl_cam_cc_ife_lite_0_clk_src, 989 .clkr.hw.init = &(struct clk_init_data){ 990 .name = "cam_cc_ife_lite_1_clk_src", 991 .parent_data = cam_cc_parent_data_3, 992 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 993 .ops = &clk_rcg2_shared_ops, 994 }, 995 }; 996 997 static struct clk_rcg2 cam_cc_ife_lite_1_csid_clk_src = { 998 .cmd_rcgr = 0xc064, 999 .mnd_width = 0, 1000 .hid_width = 5, 1001 .parent_map = cam_cc_parent_map_1, 1002 .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src, 1003 .clkr.hw.init = &(struct clk_init_data){ 1004 .name = "cam_cc_ife_lite_1_csid_clk_src", 1005 .parent_data = cam_cc_parent_data_1, 1006 .num_parents = ARRAY_SIZE(cam_cc_parent_data_1), 1007 .ops = &clk_rcg2_shared_ops, 1008 }, 1009 }; 1010 1011 static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = { 1012 F(19200000, P_BI_TCXO, 1, 0, 0), 1013 F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 1014 F(430000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 1015 F(520000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 1016 F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0), 1017 { } 1018 }; 1019 1020 static struct clk_rcg2 cam_cc_ipe_0_clk_src = { 1021 .cmd_rcgr = 0x8010, 1022 .mnd_width = 0, 1023 .hid_width = 5, 1024 .parent_map = cam_cc_parent_map_7, 1025 .freq_tbl = ftbl_cam_cc_ipe_0_clk_src, 1026 .clkr.hw.init = &(struct clk_init_data){ 1027 .name = "cam_cc_ipe_0_clk_src", 1028 .parent_data = cam_cc_parent_data_7, 1029 .num_parents = ARRAY_SIZE(cam_cc_parent_data_7), 1030 .flags = CLK_SET_RATE_PARENT, 1031 .ops = &clk_rcg2_shared_ops, 1032 }, 1033 }; 1034 1035 static struct clk_rcg2 cam_cc_jpeg_clk_src = { 1036 .cmd_rcgr = 0xc08c, 1037 .mnd_width = 0, 1038 .hid_width = 5, 1039 .parent_map = cam_cc_parent_map_0, 1040 .freq_tbl = ftbl_cam_cc_bps_clk_src, 1041 .clkr.hw.init = &(struct clk_init_data){ 1042 .name = "cam_cc_jpeg_clk_src", 1043 .parent_data = cam_cc_parent_data_0, 1044 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 1045 .ops = &clk_rcg2_shared_ops, 1046 }, 1047 }; 1048 1049 static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = { 1050 F(19200000, P_BI_TCXO, 1, 0, 0), 1051 F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0), 1052 F(240000000, P_CAM_CC_PLL6_OUT_EVEN, 2, 0, 0), 1053 F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0), 1054 F(320000000, P_CAM_CC_PLL6_OUT_ODD, 1, 0, 0), 1055 F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0), 1056 { } 1057 }; 1058 1059 static struct clk_rcg2 cam_cc_lrme_clk_src = { 1060 .cmd_rcgr = 0xc150, 1061 .mnd_width = 0, 1062 .hid_width = 5, 1063 .parent_map = cam_cc_parent_map_3, 1064 .freq_tbl = ftbl_cam_cc_lrme_clk_src, 1065 .clkr.hw.init = &(struct clk_init_data){ 1066 .name = "cam_cc_lrme_clk_src", 1067 .parent_data = cam_cc_parent_data_3, 1068 .num_parents = ARRAY_SIZE(cam_cc_parent_data_3), 1069 .ops = &clk_rcg2_shared_ops, 1070 }, 1071 }; 1072 1073 static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = { 1074 F(19200000, P_CAM_CC_PLL2_OUT_EARLY, 1, 1, 75), 1075 F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 6), 1076 F(34285714, P_CAM_CC_PLL2_OUT_EARLY, 2, 1, 21), 1077 { } 1078 }; 1079 1080 static struct clk_rcg2 cam_cc_mclk0_clk_src = { 1081 .cmd_rcgr = 0xe000, 1082 .mnd_width = 8, 1083 .hid_width = 5, 1084 .parent_map = cam_cc_parent_map_2, 1085 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1086 .clkr.hw.init = &(struct clk_init_data){ 1087 .name = "cam_cc_mclk0_clk_src", 1088 .parent_data = cam_cc_parent_data_2, 1089 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1090 .ops = &clk_rcg2_shared_ops, 1091 }, 1092 }; 1093 1094 static struct clk_rcg2 cam_cc_mclk1_clk_src = { 1095 .cmd_rcgr = 0xe01c, 1096 .mnd_width = 8, 1097 .hid_width = 5, 1098 .parent_map = cam_cc_parent_map_2, 1099 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1100 .clkr.hw.init = &(struct clk_init_data){ 1101 .name = "cam_cc_mclk1_clk_src", 1102 .parent_data = cam_cc_parent_data_2, 1103 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1104 .ops = &clk_rcg2_shared_ops, 1105 }, 1106 }; 1107 1108 static struct clk_rcg2 cam_cc_mclk2_clk_src = { 1109 .cmd_rcgr = 0xe038, 1110 .mnd_width = 8, 1111 .hid_width = 5, 1112 .parent_map = cam_cc_parent_map_2, 1113 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1114 .clkr.hw.init = &(struct clk_init_data){ 1115 .name = "cam_cc_mclk2_clk_src", 1116 .parent_data = cam_cc_parent_data_2, 1117 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1118 .ops = &clk_rcg2_shared_ops, 1119 }, 1120 }; 1121 1122 static struct clk_rcg2 cam_cc_mclk3_clk_src = { 1123 .cmd_rcgr = 0xe054, 1124 .mnd_width = 8, 1125 .hid_width = 5, 1126 .parent_map = cam_cc_parent_map_2, 1127 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1128 .clkr.hw.init = &(struct clk_init_data){ 1129 .name = "cam_cc_mclk3_clk_src", 1130 .parent_data = cam_cc_parent_data_2, 1131 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1132 .ops = &clk_rcg2_shared_ops, 1133 }, 1134 }; 1135 1136 static struct clk_rcg2 cam_cc_mclk4_clk_src = { 1137 .cmd_rcgr = 0xe070, 1138 .mnd_width = 8, 1139 .hid_width = 5, 1140 .parent_map = cam_cc_parent_map_2, 1141 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1142 .clkr.hw.init = &(struct clk_init_data){ 1143 .name = "cam_cc_mclk4_clk_src", 1144 .parent_data = cam_cc_parent_data_2, 1145 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1146 .ops = &clk_rcg2_shared_ops, 1147 }, 1148 }; 1149 1150 static struct clk_rcg2 cam_cc_mclk5_clk_src = { 1151 .cmd_rcgr = 0xe08c, 1152 .mnd_width = 8, 1153 .hid_width = 5, 1154 .parent_map = cam_cc_parent_map_2, 1155 .freq_tbl = ftbl_cam_cc_mclk0_clk_src, 1156 .clkr.hw.init = &(struct clk_init_data){ 1157 .name = "cam_cc_mclk5_clk_src", 1158 .parent_data = cam_cc_parent_data_2, 1159 .num_parents = ARRAY_SIZE(cam_cc_parent_data_2), 1160 .ops = &clk_rcg2_shared_ops, 1161 }, 1162 }; 1163 1164 static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = { 1165 F(32000, P_SLEEP_CLK, 1, 0, 0), 1166 { } 1167 }; 1168 1169 static struct clk_rcg2 cam_cc_sleep_clk_src = { 1170 .cmd_rcgr = 0xc1c0, 1171 .mnd_width = 0, 1172 .hid_width = 5, 1173 .parent_map = cam_cc_parent_map_8, 1174 .freq_tbl = ftbl_cam_cc_sleep_clk_src, 1175 .clkr.hw.init = &(struct clk_init_data){ 1176 .name = "cam_cc_sleep_clk_src", 1177 .parent_data = cam_cc_parent_data_8, 1178 .num_parents = ARRAY_SIZE(cam_cc_parent_data_8), 1179 .ops = &clk_rcg2_ops, 1180 }, 1181 }; 1182 1183 static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = { 1184 F(19200000, P_BI_TCXO, 1, 0, 0), 1185 F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0), 1186 { } 1187 }; 1188 1189 static struct clk_rcg2 cam_cc_slow_ahb_clk_src = { 1190 .cmd_rcgr = 0x7058, 1191 .mnd_width = 8, 1192 .hid_width = 5, 1193 .parent_map = cam_cc_parent_map_0, 1194 .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src, 1195 .clkr.hw.init = &(struct clk_init_data){ 1196 .name = "cam_cc_slow_ahb_clk_src", 1197 .parent_data = cam_cc_parent_data_0, 1198 .num_parents = ARRAY_SIZE(cam_cc_parent_data_0), 1199 .ops = &clk_rcg2_shared_ops, 1200 }, 1201 }; 1202 1203 static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = { 1204 F(19200000, P_BI_TCXO, 1, 0, 0), 1205 { } 1206 }; 1207 1208 static struct clk_rcg2 cam_cc_xo_clk_src = { 1209 .cmd_rcgr = 0xc1a4, 1210 .mnd_width = 0, 1211 .hid_width = 5, 1212 .parent_map = cam_cc_parent_map_9, 1213 .freq_tbl = ftbl_cam_cc_xo_clk_src, 1214 .clkr.hw.init = &(struct clk_init_data){ 1215 .name = "cam_cc_xo_clk_src", 1216 .parent_data = cam_cc_parent_data_9_ao, 1217 .num_parents = ARRAY_SIZE(cam_cc_parent_data_9_ao), 1218 .ops = &clk_rcg2_ops, 1219 }, 1220 }; 1221 1222 static struct clk_branch cam_cc_bps_ahb_clk = { 1223 .halt_reg = 0x7070, 1224 .halt_check = BRANCH_HALT, 1225 .clkr = { 1226 .enable_reg = 0x7070, 1227 .enable_mask = BIT(0), 1228 .hw.init = &(struct clk_init_data){ 1229 .name = "cam_cc_bps_ahb_clk", 1230 .parent_data = &(const struct clk_parent_data){ 1231 .hw = &cam_cc_slow_ahb_clk_src.clkr.hw, 1232 }, 1233 .num_parents = 1, 1234 .flags = CLK_SET_RATE_PARENT, 1235 .ops = &clk_branch2_ops, 1236 }, 1237 }, 1238 }; 1239 1240 static struct clk_branch cam_cc_bps_areg_clk = { 1241 .halt_reg = 0x7054, 1242 .halt_check = BRANCH_HALT, 1243 .clkr = { 1244 .enable_reg = 0x7054, 1245 .enable_mask = BIT(0), 1246 .hw.init = &(struct clk_init_data){ 1247 .name = "cam_cc_bps_areg_clk", 1248 .parent_data = &(const struct clk_parent_data){ 1249 .hw = &cam_cc_fast_ahb_clk_src.clkr.hw, 1250 }, 1251 .num_parents = 1, 1252 .flags = CLK_SET_RATE_PARENT, 1253 .ops = &clk_branch2_ops, 1254 }, 1255 }, 1256 }; 1257 1258 static struct clk_branch cam_cc_bps_axi_clk = { 1259 .halt_reg = 0x7038, 1260 .halt_check = BRANCH_HALT, 1261 .clkr = { 1262 .enable_reg = 0x7038, 1263 .enable_mask = BIT(0), 1264 .hw.init = &(struct clk_init_data){ 1265 .name = "cam_cc_bps_axi_clk", 1266 .parent_data = &(const struct clk_parent_data){ 1267 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 1268 }, 1269 .num_parents = 1, 1270 .flags = CLK_SET_RATE_PARENT, 1271 .ops = &clk_branch2_ops, 1272 }, 1273 }, 1274 }; 1275 1276 static struct clk_branch cam_cc_bps_clk = { 1277 .halt_reg = 0x7028, 1278 .halt_check = BRANCH_HALT, 1279 .clkr = { 1280 .enable_reg = 0x7028, 1281 .enable_mask = BIT(0), 1282 .hw.init = &(struct clk_init_data){ 1283 .name = "cam_cc_bps_clk", 1284 .parent_data = &(const struct clk_parent_data){ 1285 .hw = &cam_cc_bps_clk_src.clkr.hw, 1286 }, 1287 .num_parents = 1, 1288 .flags = CLK_SET_RATE_PARENT, 1289 .ops = &clk_branch2_ops, 1290 }, 1291 }, 1292 }; 1293 1294 static struct clk_branch cam_cc_camnoc_axi_clk = { 1295 .halt_reg = 0xc140, 1296 .halt_check = BRANCH_HALT, 1297 .clkr = { 1298 .enable_reg = 0xc140, 1299 .enable_mask = BIT(0), 1300 .hw.init = &(struct clk_init_data){ 1301 .name = "cam_cc_camnoc_axi_clk", 1302 .parent_data = &(const struct clk_parent_data){ 1303 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 1304 }, 1305 .num_parents = 1, 1306 .flags = CLK_SET_RATE_PARENT, 1307 .ops = &clk_branch2_ops, 1308 }, 1309 }, 1310 }; 1311 1312 static struct clk_branch cam_cc_camnoc_dcd_xo_clk = { 1313 .halt_reg = 0xc148, 1314 .halt_check = BRANCH_HALT, 1315 .clkr = { 1316 .enable_reg = 0xc148, 1317 .enable_mask = BIT(0), 1318 .hw.init = &(struct clk_init_data){ 1319 .name = "cam_cc_camnoc_dcd_xo_clk", 1320 .parent_data = &(const struct clk_parent_data){ 1321 .hw = &cam_cc_xo_clk_src.clkr.hw, 1322 }, 1323 .num_parents = 1, 1324 .flags = CLK_SET_RATE_PARENT, 1325 .ops = &clk_branch2_ops, 1326 }, 1327 }, 1328 }; 1329 1330 static struct clk_branch cam_cc_cci_0_clk = { 1331 .halt_reg = 0xc0f8, 1332 .halt_check = BRANCH_HALT, 1333 .clkr = { 1334 .enable_reg = 0xc0f8, 1335 .enable_mask = BIT(0), 1336 .hw.init = &(struct clk_init_data){ 1337 .name = "cam_cc_cci_0_clk", 1338 .parent_data = &(const struct clk_parent_data){ 1339 .hw = &cam_cc_cci_0_clk_src.clkr.hw, 1340 }, 1341 .num_parents = 1, 1342 .flags = CLK_SET_RATE_PARENT, 1343 .ops = &clk_branch2_ops, 1344 }, 1345 }, 1346 }; 1347 1348 static struct clk_branch cam_cc_cci_1_clk = { 1349 .halt_reg = 0xc114, 1350 .halt_check = BRANCH_HALT, 1351 .clkr = { 1352 .enable_reg = 0xc114, 1353 .enable_mask = BIT(0), 1354 .hw.init = &(struct clk_init_data){ 1355 .name = "cam_cc_cci_1_clk", 1356 .parent_data = &(const struct clk_parent_data){ 1357 .hw = &cam_cc_cci_1_clk_src.clkr.hw, 1358 }, 1359 .num_parents = 1, 1360 .flags = CLK_SET_RATE_PARENT, 1361 .ops = &clk_branch2_ops, 1362 }, 1363 }, 1364 }; 1365 1366 static struct clk_branch cam_cc_core_ahb_clk = { 1367 .halt_reg = 0xc1a0, 1368 .halt_check = BRANCH_HALT_DELAY, 1369 .clkr = { 1370 .enable_reg = 0xc1a0, 1371 .enable_mask = BIT(0), 1372 .hw.init = &(struct clk_init_data){ 1373 .name = "cam_cc_core_ahb_clk", 1374 .parent_data = &(const struct clk_parent_data){ 1375 .hw = &cam_cc_slow_ahb_clk_src.clkr.hw, 1376 }, 1377 .num_parents = 1, 1378 .flags = CLK_SET_RATE_PARENT, 1379 .ops = &clk_branch2_ops, 1380 }, 1381 }, 1382 }; 1383 1384 static struct clk_branch cam_cc_cpas_ahb_clk = { 1385 .halt_reg = 0xc11c, 1386 .halt_check = BRANCH_HALT, 1387 .clkr = { 1388 .enable_reg = 0xc11c, 1389 .enable_mask = BIT(0), 1390 .hw.init = &(struct clk_init_data){ 1391 .name = "cam_cc_cpas_ahb_clk", 1392 .parent_data = &(const struct clk_parent_data){ 1393 .hw = &cam_cc_slow_ahb_clk_src.clkr.hw, 1394 }, 1395 .num_parents = 1, 1396 .flags = CLK_SET_RATE_PARENT, 1397 .ops = &clk_branch2_ops, 1398 }, 1399 }, 1400 }; 1401 1402 static struct clk_branch cam_cc_csi0phytimer_clk = { 1403 .halt_reg = 0xe0c4, 1404 .halt_check = BRANCH_HALT, 1405 .clkr = { 1406 .enable_reg = 0xe0c4, 1407 .enable_mask = BIT(0), 1408 .hw.init = &(struct clk_init_data){ 1409 .name = "cam_cc_csi0phytimer_clk", 1410 .parent_data = &(const struct clk_parent_data){ 1411 .hw = &cam_cc_csi0phytimer_clk_src.clkr.hw, 1412 }, 1413 .num_parents = 1, 1414 .flags = CLK_SET_RATE_PARENT, 1415 .ops = &clk_branch2_ops, 1416 }, 1417 }, 1418 }; 1419 1420 static struct clk_branch cam_cc_csi1phytimer_clk = { 1421 .halt_reg = 0xe0e8, 1422 .halt_check = BRANCH_HALT, 1423 .clkr = { 1424 .enable_reg = 0xe0e8, 1425 .enable_mask = BIT(0), 1426 .hw.init = &(struct clk_init_data){ 1427 .name = "cam_cc_csi1phytimer_clk", 1428 .parent_data = &(const struct clk_parent_data){ 1429 .hw = &cam_cc_csi1phytimer_clk_src.clkr.hw, 1430 }, 1431 .num_parents = 1, 1432 .flags = CLK_SET_RATE_PARENT, 1433 .ops = &clk_branch2_ops, 1434 }, 1435 }, 1436 }; 1437 1438 static struct clk_branch cam_cc_csi2phytimer_clk = { 1439 .halt_reg = 0xe10c, 1440 .halt_check = BRANCH_HALT, 1441 .clkr = { 1442 .enable_reg = 0xe10c, 1443 .enable_mask = BIT(0), 1444 .hw.init = &(struct clk_init_data){ 1445 .name = "cam_cc_csi2phytimer_clk", 1446 .parent_data = &(const struct clk_parent_data){ 1447 .hw = &cam_cc_csi2phytimer_clk_src.clkr.hw, 1448 }, 1449 .num_parents = 1, 1450 .flags = CLK_SET_RATE_PARENT, 1451 .ops = &clk_branch2_ops, 1452 }, 1453 }, 1454 }; 1455 1456 static struct clk_branch cam_cc_csi3phytimer_clk = { 1457 .halt_reg = 0xe134, 1458 .halt_check = BRANCH_HALT, 1459 .clkr = { 1460 .enable_reg = 0xe134, 1461 .enable_mask = BIT(0), 1462 .hw.init = &(struct clk_init_data){ 1463 .name = "cam_cc_csi3phytimer_clk", 1464 .parent_data = &(const struct clk_parent_data){ 1465 .hw = &cam_cc_csi3phytimer_clk_src.clkr.hw, 1466 }, 1467 .num_parents = 1, 1468 .flags = CLK_SET_RATE_PARENT, 1469 .ops = &clk_branch2_ops, 1470 }, 1471 }, 1472 }; 1473 1474 static struct clk_branch cam_cc_csi4phytimer_clk = { 1475 .halt_reg = 0xe158, 1476 .halt_check = BRANCH_HALT, 1477 .clkr = { 1478 .enable_reg = 0xe158, 1479 .enable_mask = BIT(0), 1480 .hw.init = &(struct clk_init_data){ 1481 .name = "cam_cc_csi4phytimer_clk", 1482 .parent_data = &(const struct clk_parent_data){ 1483 .hw = &cam_cc_csi4phytimer_clk_src.clkr.hw, 1484 }, 1485 .num_parents = 1, 1486 .flags = CLK_SET_RATE_PARENT, 1487 .ops = &clk_branch2_ops, 1488 }, 1489 }, 1490 }; 1491 1492 static struct clk_branch cam_cc_csiphy0_clk = { 1493 .halt_reg = 0xe0c8, 1494 .halt_check = BRANCH_HALT, 1495 .clkr = { 1496 .enable_reg = 0xe0c8, 1497 .enable_mask = BIT(0), 1498 .hw.init = &(struct clk_init_data){ 1499 .name = "cam_cc_csiphy0_clk", 1500 .parent_data = &(const struct clk_parent_data){ 1501 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1502 }, 1503 .num_parents = 1, 1504 .flags = CLK_SET_RATE_PARENT, 1505 .ops = &clk_branch2_ops, 1506 }, 1507 }, 1508 }; 1509 1510 static struct clk_branch cam_cc_csiphy1_clk = { 1511 .halt_reg = 0xe0ec, 1512 .halt_check = BRANCH_HALT, 1513 .clkr = { 1514 .enable_reg = 0xe0ec, 1515 .enable_mask = BIT(0), 1516 .hw.init = &(struct clk_init_data){ 1517 .name = "cam_cc_csiphy1_clk", 1518 .parent_data = &(const struct clk_parent_data){ 1519 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1520 }, 1521 .num_parents = 1, 1522 .flags = CLK_SET_RATE_PARENT, 1523 .ops = &clk_branch2_ops, 1524 }, 1525 }, 1526 }; 1527 1528 static struct clk_branch cam_cc_csiphy2_clk = { 1529 .halt_reg = 0xe110, 1530 .halt_check = BRANCH_HALT, 1531 .clkr = { 1532 .enable_reg = 0xe110, 1533 .enable_mask = BIT(0), 1534 .hw.init = &(struct clk_init_data){ 1535 .name = "cam_cc_csiphy2_clk", 1536 .parent_data = &(const struct clk_parent_data){ 1537 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1538 }, 1539 .num_parents = 1, 1540 .flags = CLK_SET_RATE_PARENT, 1541 .ops = &clk_branch2_ops, 1542 }, 1543 }, 1544 }; 1545 1546 static struct clk_branch cam_cc_csiphy3_clk = { 1547 .halt_reg = 0xe138, 1548 .halt_check = BRANCH_HALT, 1549 .clkr = { 1550 .enable_reg = 0xe138, 1551 .enable_mask = BIT(0), 1552 .hw.init = &(struct clk_init_data){ 1553 .name = "cam_cc_csiphy3_clk", 1554 .parent_data = &(const struct clk_parent_data){ 1555 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1556 }, 1557 .num_parents = 1, 1558 .flags = CLK_SET_RATE_PARENT, 1559 .ops = &clk_branch2_ops, 1560 }, 1561 }, 1562 }; 1563 1564 static struct clk_branch cam_cc_csiphy4_clk = { 1565 .halt_reg = 0xe15c, 1566 .halt_check = BRANCH_HALT, 1567 .clkr = { 1568 .enable_reg = 0xe15c, 1569 .enable_mask = BIT(0), 1570 .hw.init = &(struct clk_init_data){ 1571 .name = "cam_cc_csiphy4_clk", 1572 .parent_data = &(const struct clk_parent_data){ 1573 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1574 }, 1575 .num_parents = 1, 1576 .flags = CLK_SET_RATE_PARENT, 1577 .ops = &clk_branch2_ops, 1578 }, 1579 }, 1580 }; 1581 1582 static struct clk_branch cam_cc_gdsc_clk = { 1583 .halt_reg = 0xc1bc, 1584 .halt_check = BRANCH_HALT, 1585 .clkr = { 1586 .enable_reg = 0xc1bc, 1587 .enable_mask = BIT(0), 1588 .hw.init = &(struct clk_init_data){ 1589 .name = "cam_cc_gdsc_clk", 1590 .parent_data = &(const struct clk_parent_data){ 1591 .hw = &cam_cc_xo_clk_src.clkr.hw, 1592 }, 1593 .num_parents = 1, 1594 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1595 .ops = &clk_branch2_ops, 1596 }, 1597 }, 1598 }; 1599 1600 static struct clk_branch cam_cc_icp_ahb_clk = { 1601 .halt_reg = 0xc0d8, 1602 .halt_check = BRANCH_HALT, 1603 .clkr = { 1604 .enable_reg = 0xc0d8, 1605 .enable_mask = BIT(0), 1606 .hw.init = &(struct clk_init_data){ 1607 .name = "cam_cc_icp_ahb_clk", 1608 .parent_data = &(const struct clk_parent_data){ 1609 .hw = &cam_cc_slow_ahb_clk_src.clkr.hw, 1610 }, 1611 .num_parents = 1, 1612 .flags = CLK_SET_RATE_PARENT, 1613 .ops = &clk_branch2_ops, 1614 }, 1615 }, 1616 }; 1617 1618 static struct clk_branch cam_cc_icp_clk = { 1619 .halt_reg = 0xc0d0, 1620 .halt_check = BRANCH_HALT, 1621 .clkr = { 1622 .enable_reg = 0xc0d0, 1623 .enable_mask = BIT(0), 1624 .hw.init = &(struct clk_init_data){ 1625 .name = "cam_cc_icp_clk", 1626 .parent_data = &(const struct clk_parent_data){ 1627 .hw = &cam_cc_icp_clk_src.clkr.hw, 1628 }, 1629 .num_parents = 1, 1630 .flags = CLK_SET_RATE_PARENT, 1631 .ops = &clk_branch2_ops, 1632 }, 1633 }, 1634 }; 1635 1636 static struct clk_branch cam_cc_ife_0_axi_clk = { 1637 .halt_reg = 0xa080, 1638 .halt_check = BRANCH_HALT, 1639 .clkr = { 1640 .enable_reg = 0xa080, 1641 .enable_mask = BIT(0), 1642 .hw.init = &(struct clk_init_data){ 1643 .name = "cam_cc_ife_0_axi_clk", 1644 .parent_data = &(const struct clk_parent_data){ 1645 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 1646 }, 1647 .num_parents = 1, 1648 .flags = CLK_SET_RATE_PARENT, 1649 .ops = &clk_branch2_ops, 1650 }, 1651 }, 1652 }; 1653 1654 static struct clk_branch cam_cc_ife_0_clk = { 1655 .halt_reg = 0xa028, 1656 .halt_check = BRANCH_HALT, 1657 .clkr = { 1658 .enable_reg = 0xa028, 1659 .enable_mask = BIT(0), 1660 .hw.init = &(struct clk_init_data){ 1661 .name = "cam_cc_ife_0_clk", 1662 .parent_data = &(const struct clk_parent_data){ 1663 .hw = &cam_cc_ife_0_clk_src.clkr.hw, 1664 }, 1665 .num_parents = 1, 1666 .flags = CLK_SET_RATE_PARENT, 1667 .ops = &clk_branch2_ops, 1668 }, 1669 }, 1670 }; 1671 1672 static struct clk_branch cam_cc_ife_0_cphy_rx_clk = { 1673 .halt_reg = 0xa07c, 1674 .halt_check = BRANCH_HALT, 1675 .clkr = { 1676 .enable_reg = 0xa07c, 1677 .enable_mask = BIT(0), 1678 .hw.init = &(struct clk_init_data){ 1679 .name = "cam_cc_ife_0_cphy_rx_clk", 1680 .parent_data = &(const struct clk_parent_data){ 1681 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1682 }, 1683 .num_parents = 1, 1684 .flags = CLK_SET_RATE_PARENT, 1685 .ops = &clk_branch2_ops, 1686 }, 1687 }, 1688 }; 1689 1690 static struct clk_branch cam_cc_ife_0_csid_clk = { 1691 .halt_reg = 0xa054, 1692 .halt_check = BRANCH_HALT, 1693 .clkr = { 1694 .enable_reg = 0xa054, 1695 .enable_mask = BIT(0), 1696 .hw.init = &(struct clk_init_data){ 1697 .name = "cam_cc_ife_0_csid_clk", 1698 .parent_data = &(const struct clk_parent_data){ 1699 .hw = &cam_cc_ife_0_csid_clk_src.clkr.hw, 1700 }, 1701 .num_parents = 1, 1702 .flags = CLK_SET_RATE_PARENT, 1703 .ops = &clk_branch2_ops, 1704 }, 1705 }, 1706 }; 1707 1708 static struct clk_branch cam_cc_ife_0_dsp_clk = { 1709 .halt_reg = 0xa038, 1710 .halt_check = BRANCH_HALT, 1711 .clkr = { 1712 .enable_reg = 0xa038, 1713 .enable_mask = BIT(0), 1714 .hw.init = &(struct clk_init_data){ 1715 .name = "cam_cc_ife_0_dsp_clk", 1716 .parent_data = &(const struct clk_parent_data){ 1717 .hw = &cam_cc_ife_0_clk_src.clkr.hw, 1718 }, 1719 .num_parents = 1, 1720 .flags = CLK_SET_RATE_PARENT, 1721 .ops = &clk_branch2_ops, 1722 }, 1723 }, 1724 }; 1725 1726 static struct clk_branch cam_cc_ife_1_axi_clk = { 1727 .halt_reg = 0xb068, 1728 .halt_check = BRANCH_HALT, 1729 .clkr = { 1730 .enable_reg = 0xb068, 1731 .enable_mask = BIT(0), 1732 .hw.init = &(struct clk_init_data){ 1733 .name = "cam_cc_ife_1_axi_clk", 1734 .parent_data = &(const struct clk_parent_data){ 1735 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 1736 }, 1737 .num_parents = 1, 1738 .flags = CLK_SET_RATE_PARENT, 1739 .ops = &clk_branch2_ops, 1740 }, 1741 }, 1742 }; 1743 1744 static struct clk_branch cam_cc_ife_1_clk = { 1745 .halt_reg = 0xb028, 1746 .halt_check = BRANCH_HALT, 1747 .clkr = { 1748 .enable_reg = 0xb028, 1749 .enable_mask = BIT(0), 1750 .hw.init = &(struct clk_init_data){ 1751 .name = "cam_cc_ife_1_clk", 1752 .parent_data = &(const struct clk_parent_data){ 1753 .hw = &cam_cc_ife_1_clk_src.clkr.hw, 1754 }, 1755 .num_parents = 1, 1756 .flags = CLK_SET_RATE_PARENT, 1757 .ops = &clk_branch2_ops, 1758 }, 1759 }, 1760 }; 1761 1762 static struct clk_branch cam_cc_ife_1_cphy_rx_clk = { 1763 .halt_reg = 0xb064, 1764 .halt_check = BRANCH_HALT, 1765 .clkr = { 1766 .enable_reg = 0xb064, 1767 .enable_mask = BIT(0), 1768 .hw.init = &(struct clk_init_data){ 1769 .name = "cam_cc_ife_1_cphy_rx_clk", 1770 .parent_data = &(const struct clk_parent_data){ 1771 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1772 }, 1773 .num_parents = 1, 1774 .flags = CLK_SET_RATE_PARENT, 1775 .ops = &clk_branch2_ops, 1776 }, 1777 }, 1778 }; 1779 1780 static struct clk_branch cam_cc_ife_1_csid_clk = { 1781 .halt_reg = 0xb054, 1782 .halt_check = BRANCH_HALT, 1783 .clkr = { 1784 .enable_reg = 0xb054, 1785 .enable_mask = BIT(0), 1786 .hw.init = &(struct clk_init_data){ 1787 .name = "cam_cc_ife_1_csid_clk", 1788 .parent_data = &(const struct clk_parent_data){ 1789 .hw = &cam_cc_ife_1_csid_clk_src.clkr.hw, 1790 }, 1791 .num_parents = 1, 1792 .flags = CLK_SET_RATE_PARENT, 1793 .ops = &clk_branch2_ops, 1794 }, 1795 }, 1796 }; 1797 1798 static struct clk_branch cam_cc_ife_1_dsp_clk = { 1799 .halt_reg = 0xb038, 1800 .halt_check = BRANCH_HALT, 1801 .clkr = { 1802 .enable_reg = 0xb038, 1803 .enable_mask = BIT(0), 1804 .hw.init = &(struct clk_init_data){ 1805 .name = "cam_cc_ife_1_dsp_clk", 1806 .parent_data = &(const struct clk_parent_data){ 1807 .hw = &cam_cc_ife_1_clk_src.clkr.hw, 1808 }, 1809 .num_parents = 1, 1810 .flags = CLK_SET_RATE_PARENT, 1811 .ops = &clk_branch2_ops, 1812 }, 1813 }, 1814 }; 1815 1816 static struct clk_branch cam_cc_ife_2_axi_clk = { 1817 .halt_reg = 0xb0d4, 1818 .halt_check = BRANCH_HALT, 1819 .clkr = { 1820 .enable_reg = 0xb0d4, 1821 .enable_mask = BIT(0), 1822 .hw.init = &(struct clk_init_data){ 1823 .name = "cam_cc_ife_2_axi_clk", 1824 .parent_data = &(const struct clk_parent_data){ 1825 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 1826 }, 1827 .num_parents = 1, 1828 .flags = CLK_SET_RATE_PARENT, 1829 .ops = &clk_branch2_ops, 1830 }, 1831 }, 1832 }; 1833 1834 static struct clk_branch cam_cc_ife_2_clk = { 1835 .halt_reg = 0xb094, 1836 .halt_check = BRANCH_HALT, 1837 .clkr = { 1838 .enable_reg = 0xb094, 1839 .enable_mask = BIT(0), 1840 .hw.init = &(struct clk_init_data){ 1841 .name = "cam_cc_ife_2_clk", 1842 .parent_data = &(const struct clk_parent_data){ 1843 .hw = &cam_cc_ife_2_clk_src.clkr.hw, 1844 }, 1845 .num_parents = 1, 1846 .flags = CLK_SET_RATE_PARENT, 1847 .ops = &clk_branch2_ops, 1848 }, 1849 }, 1850 }; 1851 1852 static struct clk_branch cam_cc_ife_2_cphy_rx_clk = { 1853 .halt_reg = 0xb0d0, 1854 .halt_check = BRANCH_HALT, 1855 .clkr = { 1856 .enable_reg = 0xb0d0, 1857 .enable_mask = BIT(0), 1858 .hw.init = &(struct clk_init_data){ 1859 .name = "cam_cc_ife_2_cphy_rx_clk", 1860 .parent_data = &(const struct clk_parent_data){ 1861 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1862 }, 1863 .num_parents = 1, 1864 .flags = CLK_SET_RATE_PARENT, 1865 .ops = &clk_branch2_ops, 1866 }, 1867 }, 1868 }; 1869 1870 static struct clk_branch cam_cc_ife_2_csid_clk = { 1871 .halt_reg = 0xb0c0, 1872 .halt_check = BRANCH_HALT, 1873 .clkr = { 1874 .enable_reg = 0xb0c0, 1875 .enable_mask = BIT(0), 1876 .hw.init = &(struct clk_init_data){ 1877 .name = "cam_cc_ife_2_csid_clk", 1878 .parent_data = &(const struct clk_parent_data){ 1879 .hw = &cam_cc_ife_2_csid_clk_src.clkr.hw, 1880 }, 1881 .num_parents = 1, 1882 .flags = CLK_SET_RATE_PARENT, 1883 .ops = &clk_branch2_ops, 1884 }, 1885 }, 1886 }; 1887 1888 static struct clk_branch cam_cc_ife_2_dsp_clk = { 1889 .halt_reg = 0xb0a4, 1890 .halt_check = BRANCH_HALT, 1891 .clkr = { 1892 .enable_reg = 0xb0a4, 1893 .enable_mask = BIT(0), 1894 .hw.init = &(struct clk_init_data){ 1895 .name = "cam_cc_ife_2_dsp_clk", 1896 .parent_data = &(const struct clk_parent_data){ 1897 .hw = &cam_cc_ife_2_clk_src.clkr.hw, 1898 }, 1899 .num_parents = 1, 1900 .flags = CLK_SET_RATE_PARENT, 1901 .ops = &clk_branch2_ops, 1902 }, 1903 }, 1904 }; 1905 1906 static struct clk_branch cam_cc_ife_lite_0_clk = { 1907 .halt_reg = 0xc01c, 1908 .halt_check = BRANCH_HALT, 1909 .clkr = { 1910 .enable_reg = 0xc01c, 1911 .enable_mask = BIT(0), 1912 .hw.init = &(struct clk_init_data){ 1913 .name = "cam_cc_ife_lite_0_clk", 1914 .parent_data = &(const struct clk_parent_data){ 1915 .hw = &cam_cc_ife_lite_0_clk_src.clkr.hw, 1916 }, 1917 .num_parents = 1, 1918 .flags = CLK_SET_RATE_PARENT, 1919 .ops = &clk_branch2_ops, 1920 }, 1921 }, 1922 }; 1923 1924 static struct clk_branch cam_cc_ife_lite_0_cphy_rx_clk = { 1925 .halt_reg = 0xc040, 1926 .halt_check = BRANCH_HALT, 1927 .clkr = { 1928 .enable_reg = 0xc040, 1929 .enable_mask = BIT(0), 1930 .hw.init = &(struct clk_init_data){ 1931 .name = "cam_cc_ife_lite_0_cphy_rx_clk", 1932 .parent_data = &(const struct clk_parent_data){ 1933 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1934 }, 1935 .num_parents = 1, 1936 .flags = CLK_SET_RATE_PARENT, 1937 .ops = &clk_branch2_ops, 1938 }, 1939 }, 1940 }; 1941 1942 static struct clk_branch cam_cc_ife_lite_0_csid_clk = { 1943 .halt_reg = 0xc038, 1944 .halt_check = BRANCH_HALT, 1945 .clkr = { 1946 .enable_reg = 0xc038, 1947 .enable_mask = BIT(0), 1948 .hw.init = &(struct clk_init_data){ 1949 .name = "cam_cc_ife_lite_0_csid_clk", 1950 .parent_data = &(const struct clk_parent_data){ 1951 .hw = &cam_cc_ife_lite_0_csid_clk_src.clkr.hw, 1952 }, 1953 .num_parents = 1, 1954 .flags = CLK_SET_RATE_PARENT, 1955 .ops = &clk_branch2_ops, 1956 }, 1957 }, 1958 }; 1959 1960 static struct clk_branch cam_cc_ife_lite_1_clk = { 1961 .halt_reg = 0xc060, 1962 .halt_check = BRANCH_HALT, 1963 .clkr = { 1964 .enable_reg = 0xc060, 1965 .enable_mask = BIT(0), 1966 .hw.init = &(struct clk_init_data){ 1967 .name = "cam_cc_ife_lite_1_clk", 1968 .parent_data = &(const struct clk_parent_data){ 1969 .hw = &cam_cc_ife_lite_1_clk_src.clkr.hw, 1970 }, 1971 .num_parents = 1, 1972 .flags = CLK_SET_RATE_PARENT, 1973 .ops = &clk_branch2_ops, 1974 }, 1975 }, 1976 }; 1977 1978 static struct clk_branch cam_cc_ife_lite_1_cphy_rx_clk = { 1979 .halt_reg = 0xc084, 1980 .halt_check = BRANCH_HALT, 1981 .clkr = { 1982 .enable_reg = 0xc084, 1983 .enable_mask = BIT(0), 1984 .hw.init = &(struct clk_init_data){ 1985 .name = "cam_cc_ife_lite_1_cphy_rx_clk", 1986 .parent_data = &(const struct clk_parent_data){ 1987 .hw = &cam_cc_cphy_rx_clk_src.clkr.hw, 1988 }, 1989 .num_parents = 1, 1990 .flags = CLK_SET_RATE_PARENT, 1991 .ops = &clk_branch2_ops, 1992 }, 1993 }, 1994 }; 1995 1996 static struct clk_branch cam_cc_ife_lite_1_csid_clk = { 1997 .halt_reg = 0xc07c, 1998 .halt_check = BRANCH_HALT, 1999 .clkr = { 2000 .enable_reg = 0xc07c, 2001 .enable_mask = BIT(0), 2002 .hw.init = &(struct clk_init_data){ 2003 .name = "cam_cc_ife_lite_1_csid_clk", 2004 .parent_data = &(const struct clk_parent_data){ 2005 .hw = &cam_cc_ife_lite_1_csid_clk_src.clkr.hw, 2006 }, 2007 .num_parents = 1, 2008 .flags = CLK_SET_RATE_PARENT, 2009 .ops = &clk_branch2_ops, 2010 }, 2011 }, 2012 }; 2013 2014 static struct clk_branch cam_cc_ipe_0_ahb_clk = { 2015 .halt_reg = 0x8040, 2016 .halt_check = BRANCH_HALT, 2017 .clkr = { 2018 .enable_reg = 0x8040, 2019 .enable_mask = BIT(0), 2020 .hw.init = &(struct clk_init_data){ 2021 .name = "cam_cc_ipe_0_ahb_clk", 2022 .parent_data = &(const struct clk_parent_data){ 2023 .hw = &cam_cc_slow_ahb_clk_src.clkr.hw, 2024 }, 2025 .num_parents = 1, 2026 .flags = CLK_SET_RATE_PARENT, 2027 .ops = &clk_branch2_ops, 2028 }, 2029 }, 2030 }; 2031 2032 static struct clk_branch cam_cc_ipe_0_areg_clk = { 2033 .halt_reg = 0x803c, 2034 .halt_check = BRANCH_HALT, 2035 .clkr = { 2036 .enable_reg = 0x803c, 2037 .enable_mask = BIT(0), 2038 .hw.init = &(struct clk_init_data){ 2039 .name = "cam_cc_ipe_0_areg_clk", 2040 .parent_data = &(const struct clk_parent_data){ 2041 .hw = &cam_cc_fast_ahb_clk_src.clkr.hw, 2042 }, 2043 .num_parents = 1, 2044 .flags = CLK_SET_RATE_PARENT, 2045 .ops = &clk_branch2_ops, 2046 }, 2047 }, 2048 }; 2049 2050 static struct clk_branch cam_cc_ipe_0_axi_clk = { 2051 .halt_reg = 0x8038, 2052 .halt_check = BRANCH_HALT, 2053 .clkr = { 2054 .enable_reg = 0x8038, 2055 .enable_mask = BIT(0), 2056 .hw.init = &(struct clk_init_data){ 2057 .name = "cam_cc_ipe_0_axi_clk", 2058 .parent_data = &(const struct clk_parent_data){ 2059 .hw = &cam_cc_camnoc_axi_clk_src.clkr.hw, 2060 }, 2061 .num_parents = 1, 2062 .flags = CLK_SET_RATE_PARENT, 2063 .ops = &clk_branch2_ops, 2064 }, 2065 }, 2066 }; 2067 2068 static struct clk_branch cam_cc_ipe_0_clk = { 2069 .halt_reg = 0x8028, 2070 .halt_check = BRANCH_HALT, 2071 .clkr = { 2072 .enable_reg = 0x8028, 2073 .enable_mask = BIT(0), 2074 .hw.init = &(struct clk_init_data){ 2075 .name = "cam_cc_ipe_0_clk", 2076 .parent_data = &(const struct clk_parent_data){ 2077 .hw = &cam_cc_ipe_0_clk_src.clkr.hw, 2078 }, 2079 .num_parents = 1, 2080 .flags = CLK_SET_RATE_PARENT, 2081 .ops = &clk_branch2_ops, 2082 }, 2083 }, 2084 }; 2085 2086 static struct clk_branch cam_cc_jpeg_clk = { 2087 .halt_reg = 0xc0a4, 2088 .halt_check = BRANCH_HALT, 2089 .clkr = { 2090 .enable_reg = 0xc0a4, 2091 .enable_mask = BIT(0), 2092 .hw.init = &(struct clk_init_data){ 2093 .name = "cam_cc_jpeg_clk", 2094 .parent_data = &(const struct clk_parent_data){ 2095 .hw = &cam_cc_jpeg_clk_src.clkr.hw, 2096 }, 2097 .num_parents = 1, 2098 .flags = CLK_SET_RATE_PARENT, 2099 .ops = &clk_branch2_ops, 2100 }, 2101 }, 2102 }; 2103 2104 static struct clk_branch cam_cc_lrme_clk = { 2105 .halt_reg = 0xc168, 2106 .halt_check = BRANCH_HALT, 2107 .clkr = { 2108 .enable_reg = 0xc168, 2109 .enable_mask = BIT(0), 2110 .hw.init = &(struct clk_init_data){ 2111 .name = "cam_cc_lrme_clk", 2112 .parent_data = &(const struct clk_parent_data){ 2113 .hw = &cam_cc_lrme_clk_src.clkr.hw, 2114 }, 2115 .num_parents = 1, 2116 .flags = CLK_SET_RATE_PARENT, 2117 .ops = &clk_branch2_ops, 2118 }, 2119 }, 2120 }; 2121 2122 static struct clk_branch cam_cc_mclk0_clk = { 2123 .halt_reg = 0xe018, 2124 .halt_check = BRANCH_HALT, 2125 .clkr = { 2126 .enable_reg = 0xe018, 2127 .enable_mask = BIT(0), 2128 .hw.init = &(struct clk_init_data){ 2129 .name = "cam_cc_mclk0_clk", 2130 .parent_data = &(const struct clk_parent_data){ 2131 .hw = &cam_cc_mclk0_clk_src.clkr.hw, 2132 }, 2133 .num_parents = 1, 2134 .flags = CLK_SET_RATE_PARENT, 2135 .ops = &clk_branch2_ops, 2136 }, 2137 }, 2138 }; 2139 2140 static struct clk_branch cam_cc_mclk1_clk = { 2141 .halt_reg = 0xe034, 2142 .halt_check = BRANCH_HALT, 2143 .clkr = { 2144 .enable_reg = 0xe034, 2145 .enable_mask = BIT(0), 2146 .hw.init = &(struct clk_init_data){ 2147 .name = "cam_cc_mclk1_clk", 2148 .parent_data = &(const struct clk_parent_data){ 2149 .hw = &cam_cc_mclk1_clk_src.clkr.hw, 2150 }, 2151 .num_parents = 1, 2152 .flags = CLK_SET_RATE_PARENT, 2153 .ops = &clk_branch2_ops, 2154 }, 2155 }, 2156 }; 2157 2158 static struct clk_branch cam_cc_mclk2_clk = { 2159 .halt_reg = 0xe050, 2160 .halt_check = BRANCH_HALT, 2161 .clkr = { 2162 .enable_reg = 0xe050, 2163 .enable_mask = BIT(0), 2164 .hw.init = &(struct clk_init_data){ 2165 .name = "cam_cc_mclk2_clk", 2166 .parent_data = &(const struct clk_parent_data){ 2167 .hw = &cam_cc_mclk2_clk_src.clkr.hw, 2168 }, 2169 .num_parents = 1, 2170 .flags = CLK_SET_RATE_PARENT, 2171 .ops = &clk_branch2_ops, 2172 }, 2173 }, 2174 }; 2175 2176 static struct clk_branch cam_cc_mclk3_clk = { 2177 .halt_reg = 0xe06c, 2178 .halt_check = BRANCH_HALT, 2179 .clkr = { 2180 .enable_reg = 0xe06c, 2181 .enable_mask = BIT(0), 2182 .hw.init = &(struct clk_init_data){ 2183 .name = "cam_cc_mclk3_clk", 2184 .parent_data = &(const struct clk_parent_data){ 2185 .hw = &cam_cc_mclk3_clk_src.clkr.hw, 2186 }, 2187 .num_parents = 1, 2188 .flags = CLK_SET_RATE_PARENT, 2189 .ops = &clk_branch2_ops, 2190 }, 2191 }, 2192 }; 2193 2194 static struct clk_branch cam_cc_mclk4_clk = { 2195 .halt_reg = 0xe088, 2196 .halt_check = BRANCH_HALT, 2197 .clkr = { 2198 .enable_reg = 0xe088, 2199 .enable_mask = BIT(0), 2200 .hw.init = &(struct clk_init_data){ 2201 .name = "cam_cc_mclk4_clk", 2202 .parent_data = &(const struct clk_parent_data){ 2203 .hw = &cam_cc_mclk4_clk_src.clkr.hw, 2204 }, 2205 .num_parents = 1, 2206 .flags = CLK_SET_RATE_PARENT, 2207 .ops = &clk_branch2_ops, 2208 }, 2209 }, 2210 }; 2211 2212 static struct clk_branch cam_cc_mclk5_clk = { 2213 .halt_reg = 0xe0a4, 2214 .halt_check = BRANCH_HALT, 2215 .clkr = { 2216 .enable_reg = 0xe0a4, 2217 .enable_mask = BIT(0), 2218 .hw.init = &(struct clk_init_data){ 2219 .name = "cam_cc_mclk5_clk", 2220 .parent_data = &(const struct clk_parent_data){ 2221 .hw = &cam_cc_mclk5_clk_src.clkr.hw, 2222 }, 2223 .num_parents = 1, 2224 .flags = CLK_SET_RATE_PARENT, 2225 .ops = &clk_branch2_ops, 2226 }, 2227 }, 2228 }; 2229 2230 static struct clk_branch cam_cc_sleep_clk = { 2231 .halt_reg = 0xc1d8, 2232 .halt_check = BRANCH_HALT, 2233 .clkr = { 2234 .enable_reg = 0xc1d8, 2235 .enable_mask = BIT(0), 2236 .hw.init = &(struct clk_init_data){ 2237 .name = "cam_cc_sleep_clk", 2238 .parent_data = &(const struct clk_parent_data){ 2239 .hw = &cam_cc_sleep_clk_src.clkr.hw, 2240 }, 2241 .num_parents = 1, 2242 .flags = CLK_SET_RATE_PARENT, 2243 .ops = &clk_branch2_ops, 2244 }, 2245 }, 2246 }; 2247 2248 static struct gdsc cam_cc_titan_top_gdsc = { 2249 .gdscr = 0xc194, 2250 .pd = { 2251 .name = "cam_cc_titan_top_gdsc", 2252 }, 2253 .pwrsts = PWRSTS_OFF_ON, 2254 .flags = RETAIN_FF_ENABLE, 2255 }; 2256 2257 static struct gdsc cam_cc_bps_gdsc = { 2258 .gdscr = 0x7004, 2259 .pd = { 2260 .name = "cam_cc_bps_gdsc", 2261 }, 2262 .pwrsts = PWRSTS_OFF_ON, 2263 .flags = HW_CTRL | RETAIN_FF_ENABLE, 2264 }; 2265 2266 static struct gdsc cam_cc_ife_0_gdsc = { 2267 .gdscr = 0xa004, 2268 .pd = { 2269 .name = "cam_cc_ife_0_gdsc", 2270 }, 2271 .pwrsts = PWRSTS_OFF_ON, 2272 .flags = RETAIN_FF_ENABLE, 2273 }; 2274 2275 static struct gdsc cam_cc_ife_1_gdsc = { 2276 .gdscr = 0xb004, 2277 .pd = { 2278 .name = "cam_cc_ife_1_gdsc", 2279 }, 2280 .pwrsts = PWRSTS_OFF_ON, 2281 .flags = RETAIN_FF_ENABLE, 2282 }; 2283 2284 static struct gdsc cam_cc_ife_2_gdsc = { 2285 .gdscr = 0xb070, 2286 .pd = { 2287 .name = "cam_cc_ife_2_gdsc", 2288 }, 2289 .pwrsts = PWRSTS_OFF_ON, 2290 .flags = RETAIN_FF_ENABLE, 2291 }; 2292 2293 static struct gdsc cam_cc_ipe_0_gdsc = { 2294 .gdscr = 0x8004, 2295 .pd = { 2296 .name = "cam_cc_ipe_0_gdsc", 2297 }, 2298 .pwrsts = PWRSTS_OFF_ON, 2299 .flags = HW_CTRL | RETAIN_FF_ENABLE, 2300 }; 2301 2302 static struct clk_regmap *cam_cc_sc7280_clocks[] = { 2303 [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr, 2304 [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr, 2305 [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr, 2306 [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr, 2307 [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr, 2308 [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr, 2309 [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr, 2310 [CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr, 2311 [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr, 2312 [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr, 2313 [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr, 2314 [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr, 2315 [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr, 2316 [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr, 2317 [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr, 2318 [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr, 2319 [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr, 2320 [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr, 2321 [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr, 2322 [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr, 2323 [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr, 2324 [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr, 2325 [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr, 2326 [CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr, 2327 [CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr, 2328 [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr, 2329 [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr, 2330 [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr, 2331 [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr, 2332 [CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr, 2333 [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr, 2334 [CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr, 2335 [CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr, 2336 [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr, 2337 [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr, 2338 [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr, 2339 [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr, 2340 [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr, 2341 [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr, 2342 [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr, 2343 [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr, 2344 [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr, 2345 [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr, 2346 [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr, 2347 [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr, 2348 [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr, 2349 [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr, 2350 [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr, 2351 [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr, 2352 [CAM_CC_IFE_2_AXI_CLK] = &cam_cc_ife_2_axi_clk.clkr, 2353 [CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr, 2354 [CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr, 2355 [CAM_CC_IFE_2_CPHY_RX_CLK] = &cam_cc_ife_2_cphy_rx_clk.clkr, 2356 [CAM_CC_IFE_2_CSID_CLK] = &cam_cc_ife_2_csid_clk.clkr, 2357 [CAM_CC_IFE_2_CSID_CLK_SRC] = &cam_cc_ife_2_csid_clk_src.clkr, 2358 [CAM_CC_IFE_2_DSP_CLK] = &cam_cc_ife_2_dsp_clk.clkr, 2359 [CAM_CC_IFE_LITE_0_CLK] = &cam_cc_ife_lite_0_clk.clkr, 2360 [CAM_CC_IFE_LITE_0_CLK_SRC] = &cam_cc_ife_lite_0_clk_src.clkr, 2361 [CAM_CC_IFE_LITE_0_CPHY_RX_CLK] = &cam_cc_ife_lite_0_cphy_rx_clk.clkr, 2362 [CAM_CC_IFE_LITE_0_CSID_CLK] = &cam_cc_ife_lite_0_csid_clk.clkr, 2363 [CAM_CC_IFE_LITE_0_CSID_CLK_SRC] = &cam_cc_ife_lite_0_csid_clk_src.clkr, 2364 [CAM_CC_IFE_LITE_1_CLK] = &cam_cc_ife_lite_1_clk.clkr, 2365 [CAM_CC_IFE_LITE_1_CLK_SRC] = &cam_cc_ife_lite_1_clk_src.clkr, 2366 [CAM_CC_IFE_LITE_1_CPHY_RX_CLK] = &cam_cc_ife_lite_1_cphy_rx_clk.clkr, 2367 [CAM_CC_IFE_LITE_1_CSID_CLK] = &cam_cc_ife_lite_1_csid_clk.clkr, 2368 [CAM_CC_IFE_LITE_1_CSID_CLK_SRC] = &cam_cc_ife_lite_1_csid_clk_src.clkr, 2369 [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr, 2370 [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr, 2371 [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr, 2372 [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr, 2373 [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr, 2374 [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr, 2375 [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr, 2376 [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr, 2377 [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr, 2378 [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr, 2379 [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr, 2380 [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr, 2381 [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr, 2382 [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr, 2383 [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr, 2384 [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr, 2385 [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr, 2386 [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr, 2387 [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr, 2388 [CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr, 2389 [CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr, 2390 [CAM_CC_PLL0] = &cam_cc_pll0.clkr, 2391 [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr, 2392 [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr, 2393 [CAM_CC_PLL1] = &cam_cc_pll1.clkr, 2394 [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr, 2395 [CAM_CC_PLL2] = &cam_cc_pll2.clkr, 2396 [CAM_CC_PLL2_OUT_AUX] = &cam_cc_pll2_out_aux.clkr, 2397 [CAM_CC_PLL2_OUT_AUX2] = &cam_cc_pll2_out_aux2.clkr, 2398 [CAM_CC_PLL3] = &cam_cc_pll3.clkr, 2399 [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr, 2400 [CAM_CC_PLL4] = &cam_cc_pll4.clkr, 2401 [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr, 2402 [CAM_CC_PLL5] = &cam_cc_pll5.clkr, 2403 [CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr, 2404 [CAM_CC_PLL6] = &cam_cc_pll6.clkr, 2405 [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr, 2406 [CAM_CC_PLL6_OUT_ODD] = &cam_cc_pll6_out_odd.clkr, 2407 [CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr, 2408 [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr, 2409 [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr, 2410 [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr, 2411 }; 2412 2413 static struct gdsc *cam_cc_sc7280_gdscs[] = { 2414 [CAM_CC_TITAN_TOP_GDSC] = &cam_cc_titan_top_gdsc, 2415 [CAM_CC_BPS_GDSC] = &cam_cc_bps_gdsc, 2416 [CAM_CC_IFE_0_GDSC] = &cam_cc_ife_0_gdsc, 2417 [CAM_CC_IFE_1_GDSC] = &cam_cc_ife_1_gdsc, 2418 [CAM_CC_IFE_2_GDSC] = &cam_cc_ife_2_gdsc, 2419 [CAM_CC_IPE_0_GDSC] = &cam_cc_ipe_0_gdsc, 2420 }; 2421 2422 static const struct regmap_config cam_cc_sc7280_regmap_config = { 2423 .reg_bits = 32, 2424 .reg_stride = 4, 2425 .val_bits = 32, 2426 .max_register = 0xf00c, 2427 .fast_io = true, 2428 }; 2429 2430 static const struct qcom_cc_desc cam_cc_sc7280_desc = { 2431 .config = &cam_cc_sc7280_regmap_config, 2432 .clks = cam_cc_sc7280_clocks, 2433 .num_clks = ARRAY_SIZE(cam_cc_sc7280_clocks), 2434 .gdscs = cam_cc_sc7280_gdscs, 2435 .num_gdscs = ARRAY_SIZE(cam_cc_sc7280_gdscs), 2436 }; 2437 2438 static const struct of_device_id cam_cc_sc7280_match_table[] = { 2439 { .compatible = "qcom,sc7280-camcc" }, 2440 { } 2441 }; 2442 MODULE_DEVICE_TABLE(of, cam_cc_sc7280_match_table); 2443 2444 static int cam_cc_sc7280_probe(struct platform_device *pdev) 2445 { 2446 struct regmap *regmap; 2447 2448 regmap = qcom_cc_map(pdev, &cam_cc_sc7280_desc); 2449 if (IS_ERR(regmap)) 2450 return PTR_ERR(regmap); 2451 2452 clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config); 2453 clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config); 2454 clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config); 2455 clk_lucid_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config); 2456 clk_lucid_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config); 2457 clk_lucid_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config); 2458 clk_lucid_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config); 2459 2460 return qcom_cc_really_probe(pdev, &cam_cc_sc7280_desc, regmap); 2461 } 2462 2463 static struct platform_driver cam_cc_sc7280_driver = { 2464 .probe = cam_cc_sc7280_probe, 2465 .driver = { 2466 .name = "cam_cc-sc7280", 2467 .of_match_table = cam_cc_sc7280_match_table, 2468 }, 2469 }; 2470 2471 static int __init cam_cc_sc7280_init(void) 2472 { 2473 return platform_driver_register(&cam_cc_sc7280_driver); 2474 } 2475 subsys_initcall(cam_cc_sc7280_init); 2476 2477 static void __exit cam_cc_sc7280_exit(void) 2478 { 2479 platform_driver_unregister(&cam_cc_sc7280_driver); 2480 } 2481 module_exit(cam_cc_sc7280_exit); 2482 2483 MODULE_DESCRIPTION("QTI CAM_CC SC7280 Driver"); 2484 MODULE_LICENSE("GPL v2"); 2485