Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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