1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/kernel.h> 8 #include <linux/platform_device.h> 9 #include <linux/module.h> 10 #include <linux/regmap.h> 11 #include <linux/reset-controller.h> 12 13 #include <dt-bindings/clock/qcom,mmcc-apq8084.h> 14 #include <dt-bindings/reset/qcom,mmcc-apq8084.h> 15 16 #include "common.h" 17 #include "clk-regmap.h" 18 #include "clk-pll.h" 19 #include "clk-rcg.h" 20 #include "clk-branch.h" 21 #include "reset.h" 22 #include "gdsc.h" 23 24 enum { 25 P_XO, 26 P_MMPLL0, 27 P_EDPLINK, 28 P_MMPLL1, 29 P_HDMIPLL, 30 P_GPLL0, 31 P_EDPVCO, 32 P_MMPLL4, 33 P_DSI0PLL, 34 P_DSI0PLL_BYTE, 35 P_MMPLL2, 36 P_MMPLL3, 37 P_GPLL1, 38 P_DSI1PLL, 39 P_DSI1PLL_BYTE, 40 P_MMSLEEP, 41 }; 42 43 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = { 44 { P_XO, 0 }, 45 { P_MMPLL0, 1 }, 46 { P_MMPLL1, 2 }, 47 { P_GPLL0, 5 } 48 }; 49 50 static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = { 51 "xo", 52 "mmpll0_vote", 53 "mmpll1_vote", 54 "mmss_gpll0_vote", 55 }; 56 57 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = { 58 { P_XO, 0 }, 59 { P_MMPLL0, 1 }, 60 { P_HDMIPLL, 4 }, 61 { P_GPLL0, 5 }, 62 { P_DSI0PLL, 2 }, 63 { P_DSI1PLL, 3 } 64 }; 65 66 static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = { 67 "xo", 68 "mmpll0_vote", 69 "hdmipll", 70 "mmss_gpll0_vote", 71 "dsi0pll", 72 "dsi1pll", 73 }; 74 75 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = { 76 { P_XO, 0 }, 77 { P_MMPLL0, 1 }, 78 { P_MMPLL1, 2 }, 79 { P_GPLL0, 5 }, 80 { P_MMPLL2, 3 } 81 }; 82 83 static const char * const mmcc_xo_mmpll0_1_2_gpll0[] = { 84 "xo", 85 "mmpll0_vote", 86 "mmpll1_vote", 87 "mmss_gpll0_vote", 88 "mmpll2", 89 }; 90 91 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = { 92 { P_XO, 0 }, 93 { P_MMPLL0, 1 }, 94 { P_MMPLL1, 2 }, 95 { P_GPLL0, 5 }, 96 { P_MMPLL3, 3 } 97 }; 98 99 static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = { 100 "xo", 101 "mmpll0_vote", 102 "mmpll1_vote", 103 "mmss_gpll0_vote", 104 "mmpll3", 105 }; 106 107 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = { 108 { P_XO, 0 }, 109 { P_EDPLINK, 4 }, 110 { P_HDMIPLL, 3 }, 111 { P_EDPVCO, 5 }, 112 { P_DSI0PLL, 1 }, 113 { P_DSI1PLL, 2 } 114 }; 115 116 static const char * const mmcc_xo_dsi_hdmi_edp[] = { 117 "xo", 118 "edp_link_clk", 119 "hdmipll", 120 "edp_vco_div", 121 "dsi0pll", 122 "dsi1pll", 123 }; 124 125 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = { 126 { P_XO, 0 }, 127 { P_EDPLINK, 4 }, 128 { P_HDMIPLL, 3 }, 129 { P_GPLL0, 5 }, 130 { P_DSI0PLL, 1 }, 131 { P_DSI1PLL, 2 } 132 }; 133 134 static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = { 135 "xo", 136 "edp_link_clk", 137 "hdmipll", 138 "gpll0_vote", 139 "dsi0pll", 140 "dsi1pll", 141 }; 142 143 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = { 144 { P_XO, 0 }, 145 { P_EDPLINK, 4 }, 146 { P_HDMIPLL, 3 }, 147 { P_GPLL0, 5 }, 148 { P_DSI0PLL_BYTE, 1 }, 149 { P_DSI1PLL_BYTE, 2 } 150 }; 151 152 static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = { 153 "xo", 154 "edp_link_clk", 155 "hdmipll", 156 "gpll0_vote", 157 "dsi0pllbyte", 158 "dsi1pllbyte", 159 }; 160 161 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = { 162 { P_XO, 0 }, 163 { P_MMPLL0, 1 }, 164 { P_MMPLL1, 2 }, 165 { P_GPLL0, 5 }, 166 { P_MMPLL4, 3 } 167 }; 168 169 static const char * const mmcc_xo_mmpll0_1_4_gpll0[] = { 170 "xo", 171 "mmpll0", 172 "mmpll1", 173 "mmpll4", 174 "gpll0", 175 }; 176 177 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = { 178 { P_XO, 0 }, 179 { P_MMPLL0, 1 }, 180 { P_MMPLL1, 2 }, 181 { P_MMPLL4, 3 }, 182 { P_GPLL0, 5 }, 183 { P_GPLL1, 4 } 184 }; 185 186 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0[] = { 187 "xo", 188 "mmpll0", 189 "mmpll1", 190 "mmpll4", 191 "gpll1", 192 "gpll0", 193 }; 194 195 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = { 196 { P_XO, 0 }, 197 { P_MMPLL0, 1 }, 198 { P_MMPLL1, 2 }, 199 { P_MMPLL4, 3 }, 200 { P_GPLL0, 5 }, 201 { P_GPLL1, 4 }, 202 { P_MMSLEEP, 6 } 203 }; 204 205 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = { 206 "xo", 207 "mmpll0", 208 "mmpll1", 209 "mmpll4", 210 "gpll1", 211 "gpll0", 212 "sleep_clk_src", 213 }; 214 215 static struct clk_pll mmpll0 = { 216 .l_reg = 0x0004, 217 .m_reg = 0x0008, 218 .n_reg = 0x000c, 219 .config_reg = 0x0014, 220 .mode_reg = 0x0000, 221 .status_reg = 0x001c, 222 .status_bit = 17, 223 .clkr.hw.init = &(struct clk_init_data){ 224 .name = "mmpll0", 225 .parent_names = (const char *[]){ "xo" }, 226 .num_parents = 1, 227 .ops = &clk_pll_ops, 228 }, 229 }; 230 231 static struct clk_regmap mmpll0_vote = { 232 .enable_reg = 0x0100, 233 .enable_mask = BIT(0), 234 .hw.init = &(struct clk_init_data){ 235 .name = "mmpll0_vote", 236 .parent_names = (const char *[]){ "mmpll0" }, 237 .num_parents = 1, 238 .ops = &clk_pll_vote_ops, 239 }, 240 }; 241 242 static struct clk_pll mmpll1 = { 243 .l_reg = 0x0044, 244 .m_reg = 0x0048, 245 .n_reg = 0x004c, 246 .config_reg = 0x0050, 247 .mode_reg = 0x0040, 248 .status_reg = 0x005c, 249 .status_bit = 17, 250 .clkr.hw.init = &(struct clk_init_data){ 251 .name = "mmpll1", 252 .parent_names = (const char *[]){ "xo" }, 253 .num_parents = 1, 254 .ops = &clk_pll_ops, 255 }, 256 }; 257 258 static struct clk_regmap mmpll1_vote = { 259 .enable_reg = 0x0100, 260 .enable_mask = BIT(1), 261 .hw.init = &(struct clk_init_data){ 262 .name = "mmpll1_vote", 263 .parent_names = (const char *[]){ "mmpll1" }, 264 .num_parents = 1, 265 .ops = &clk_pll_vote_ops, 266 }, 267 }; 268 269 static struct clk_pll mmpll2 = { 270 .l_reg = 0x4104, 271 .m_reg = 0x4108, 272 .n_reg = 0x410c, 273 .config_reg = 0x4110, 274 .mode_reg = 0x4100, 275 .status_reg = 0x411c, 276 .clkr.hw.init = &(struct clk_init_data){ 277 .name = "mmpll2", 278 .parent_names = (const char *[]){ "xo" }, 279 .num_parents = 1, 280 .ops = &clk_pll_ops, 281 }, 282 }; 283 284 static struct clk_pll mmpll3 = { 285 .l_reg = 0x0084, 286 .m_reg = 0x0088, 287 .n_reg = 0x008c, 288 .config_reg = 0x0090, 289 .mode_reg = 0x0080, 290 .status_reg = 0x009c, 291 .status_bit = 17, 292 .clkr.hw.init = &(struct clk_init_data){ 293 .name = "mmpll3", 294 .parent_names = (const char *[]){ "xo" }, 295 .num_parents = 1, 296 .ops = &clk_pll_ops, 297 }, 298 }; 299 300 static struct clk_pll mmpll4 = { 301 .l_reg = 0x00a4, 302 .m_reg = 0x00a8, 303 .n_reg = 0x00ac, 304 .config_reg = 0x00b0, 305 .mode_reg = 0x0080, 306 .status_reg = 0x00bc, 307 .clkr.hw.init = &(struct clk_init_data){ 308 .name = "mmpll4", 309 .parent_names = (const char *[]){ "xo" }, 310 .num_parents = 1, 311 .ops = &clk_pll_ops, 312 }, 313 }; 314 315 static struct clk_rcg2 mmss_ahb_clk_src = { 316 .cmd_rcgr = 0x5000, 317 .hid_width = 5, 318 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 319 .clkr.hw.init = &(struct clk_init_data){ 320 .name = "mmss_ahb_clk_src", 321 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 322 .num_parents = 4, 323 .ops = &clk_rcg2_ops, 324 }, 325 }; 326 327 static struct freq_tbl ftbl_mmss_axi_clk[] = { 328 F(19200000, P_XO, 1, 0, 0), 329 F(37500000, P_GPLL0, 16, 0, 0), 330 F(50000000, P_GPLL0, 12, 0, 0), 331 F(75000000, P_GPLL0, 8, 0, 0), 332 F(100000000, P_GPLL0, 6, 0, 0), 333 F(150000000, P_GPLL0, 4, 0, 0), 334 F(333430000, P_MMPLL1, 3.5, 0, 0), 335 F(400000000, P_MMPLL0, 2, 0, 0), 336 F(466800000, P_MMPLL1, 2.5, 0, 0), 337 }; 338 339 static struct clk_rcg2 mmss_axi_clk_src = { 340 .cmd_rcgr = 0x5040, 341 .hid_width = 5, 342 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 343 .freq_tbl = ftbl_mmss_axi_clk, 344 .clkr.hw.init = &(struct clk_init_data){ 345 .name = "mmss_axi_clk_src", 346 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 347 .num_parents = 4, 348 .ops = &clk_rcg2_ops, 349 }, 350 }; 351 352 static struct freq_tbl ftbl_ocmemnoc_clk[] = { 353 F(19200000, P_XO, 1, 0, 0), 354 F(37500000, P_GPLL0, 16, 0, 0), 355 F(50000000, P_GPLL0, 12, 0, 0), 356 F(75000000, P_GPLL0, 8, 0, 0), 357 F(109090000, P_GPLL0, 5.5, 0, 0), 358 F(150000000, P_GPLL0, 4, 0, 0), 359 F(228570000, P_MMPLL0, 3.5, 0, 0), 360 F(320000000, P_MMPLL0, 2.5, 0, 0), 361 }; 362 363 static struct clk_rcg2 ocmemnoc_clk_src = { 364 .cmd_rcgr = 0x5090, 365 .hid_width = 5, 366 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 367 .freq_tbl = ftbl_ocmemnoc_clk, 368 .clkr.hw.init = &(struct clk_init_data){ 369 .name = "ocmemnoc_clk_src", 370 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 371 .num_parents = 4, 372 .ops = &clk_rcg2_ops, 373 }, 374 }; 375 376 static struct freq_tbl ftbl_camss_csi0_3_clk[] = { 377 F(100000000, P_GPLL0, 6, 0, 0), 378 F(200000000, P_MMPLL0, 4, 0, 0), 379 { } 380 }; 381 382 static struct clk_rcg2 csi0_clk_src = { 383 .cmd_rcgr = 0x3090, 384 .hid_width = 5, 385 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 386 .freq_tbl = ftbl_camss_csi0_3_clk, 387 .clkr.hw.init = &(struct clk_init_data){ 388 .name = "csi0_clk_src", 389 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 390 .num_parents = 5, 391 .ops = &clk_rcg2_ops, 392 }, 393 }; 394 395 static struct clk_rcg2 csi1_clk_src = { 396 .cmd_rcgr = 0x3100, 397 .hid_width = 5, 398 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 399 .freq_tbl = ftbl_camss_csi0_3_clk, 400 .clkr.hw.init = &(struct clk_init_data){ 401 .name = "csi1_clk_src", 402 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 403 .num_parents = 5, 404 .ops = &clk_rcg2_ops, 405 }, 406 }; 407 408 static struct clk_rcg2 csi2_clk_src = { 409 .cmd_rcgr = 0x3160, 410 .hid_width = 5, 411 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 412 .freq_tbl = ftbl_camss_csi0_3_clk, 413 .clkr.hw.init = &(struct clk_init_data){ 414 .name = "csi2_clk_src", 415 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 416 .num_parents = 5, 417 .ops = &clk_rcg2_ops, 418 }, 419 }; 420 421 static struct clk_rcg2 csi3_clk_src = { 422 .cmd_rcgr = 0x31c0, 423 .hid_width = 5, 424 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 425 .freq_tbl = ftbl_camss_csi0_3_clk, 426 .clkr.hw.init = &(struct clk_init_data){ 427 .name = "csi3_clk_src", 428 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 429 .num_parents = 5, 430 .ops = &clk_rcg2_ops, 431 }, 432 }; 433 434 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = { 435 F(37500000, P_GPLL0, 16, 0, 0), 436 F(50000000, P_GPLL0, 12, 0, 0), 437 F(60000000, P_GPLL0, 10, 0, 0), 438 F(80000000, P_GPLL0, 7.5, 0, 0), 439 F(100000000, P_GPLL0, 6, 0, 0), 440 F(109090000, P_GPLL0, 5.5, 0, 0), 441 F(133330000, P_GPLL0, 4.5, 0, 0), 442 F(200000000, P_GPLL0, 3, 0, 0), 443 F(228570000, P_MMPLL0, 3.5, 0, 0), 444 F(266670000, P_MMPLL0, 3, 0, 0), 445 F(320000000, P_MMPLL0, 2.5, 0, 0), 446 F(465000000, P_MMPLL4, 2, 0, 0), 447 F(600000000, P_GPLL0, 1, 0, 0), 448 { } 449 }; 450 451 static struct clk_rcg2 vfe0_clk_src = { 452 .cmd_rcgr = 0x3600, 453 .hid_width = 5, 454 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 455 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk, 456 .clkr.hw.init = &(struct clk_init_data){ 457 .name = "vfe0_clk_src", 458 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 459 .num_parents = 5, 460 .ops = &clk_rcg2_ops, 461 }, 462 }; 463 464 static struct clk_rcg2 vfe1_clk_src = { 465 .cmd_rcgr = 0x3620, 466 .hid_width = 5, 467 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 468 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk, 469 .clkr.hw.init = &(struct clk_init_data){ 470 .name = "vfe1_clk_src", 471 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 472 .num_parents = 5, 473 .ops = &clk_rcg2_ops, 474 }, 475 }; 476 477 static struct freq_tbl ftbl_mdss_mdp_clk[] = { 478 F(37500000, P_GPLL0, 16, 0, 0), 479 F(60000000, P_GPLL0, 10, 0, 0), 480 F(75000000, P_GPLL0, 8, 0, 0), 481 F(85710000, P_GPLL0, 7, 0, 0), 482 F(100000000, P_GPLL0, 6, 0, 0), 483 F(150000000, P_GPLL0, 4, 0, 0), 484 F(160000000, P_MMPLL0, 5, 0, 0), 485 F(200000000, P_MMPLL0, 4, 0, 0), 486 F(228570000, P_MMPLL0, 3.5, 0, 0), 487 F(300000000, P_GPLL0, 2, 0, 0), 488 F(320000000, P_MMPLL0, 2.5, 0, 0), 489 { } 490 }; 491 492 static struct clk_rcg2 mdp_clk_src = { 493 .cmd_rcgr = 0x2040, 494 .hid_width = 5, 495 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map, 496 .freq_tbl = ftbl_mdss_mdp_clk, 497 .clkr.hw.init = &(struct clk_init_data){ 498 .name = "mdp_clk_src", 499 .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0, 500 .num_parents = 6, 501 .ops = &clk_rcg2_ops, 502 }, 503 }; 504 505 static struct clk_rcg2 gfx3d_clk_src = { 506 .cmd_rcgr = 0x4000, 507 .hid_width = 5, 508 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map, 509 .clkr.hw.init = &(struct clk_init_data){ 510 .name = "gfx3d_clk_src", 511 .parent_names = mmcc_xo_mmpll0_1_2_gpll0, 512 .num_parents = 5, 513 .ops = &clk_rcg2_ops, 514 }, 515 }; 516 517 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = { 518 F(75000000, P_GPLL0, 8, 0, 0), 519 F(133330000, P_GPLL0, 4.5, 0, 0), 520 F(200000000, P_GPLL0, 3, 0, 0), 521 F(228570000, P_MMPLL0, 3.5, 0, 0), 522 F(266670000, P_MMPLL0, 3, 0, 0), 523 F(320000000, P_MMPLL0, 2.5, 0, 0), 524 { } 525 }; 526 527 static struct clk_rcg2 jpeg0_clk_src = { 528 .cmd_rcgr = 0x3500, 529 .hid_width = 5, 530 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 531 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 532 .clkr.hw.init = &(struct clk_init_data){ 533 .name = "jpeg0_clk_src", 534 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 535 .num_parents = 5, 536 .ops = &clk_rcg2_ops, 537 }, 538 }; 539 540 static struct clk_rcg2 jpeg1_clk_src = { 541 .cmd_rcgr = 0x3520, 542 .hid_width = 5, 543 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 544 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 545 .clkr.hw.init = &(struct clk_init_data){ 546 .name = "jpeg1_clk_src", 547 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 548 .num_parents = 5, 549 .ops = &clk_rcg2_ops, 550 }, 551 }; 552 553 static struct clk_rcg2 jpeg2_clk_src = { 554 .cmd_rcgr = 0x3540, 555 .hid_width = 5, 556 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 557 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 558 .clkr.hw.init = &(struct clk_init_data){ 559 .name = "jpeg2_clk_src", 560 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 561 .num_parents = 5, 562 .ops = &clk_rcg2_ops, 563 }, 564 }; 565 566 static struct clk_rcg2 pclk0_clk_src = { 567 .cmd_rcgr = 0x2000, 568 .mnd_width = 8, 569 .hid_width = 5, 570 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 571 .clkr.hw.init = &(struct clk_init_data){ 572 .name = "pclk0_clk_src", 573 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 574 .num_parents = 6, 575 .ops = &clk_pixel_ops, 576 .flags = CLK_SET_RATE_PARENT, 577 }, 578 }; 579 580 static struct clk_rcg2 pclk1_clk_src = { 581 .cmd_rcgr = 0x2020, 582 .mnd_width = 8, 583 .hid_width = 5, 584 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 585 .clkr.hw.init = &(struct clk_init_data){ 586 .name = "pclk1_clk_src", 587 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 588 .num_parents = 6, 589 .ops = &clk_pixel_ops, 590 .flags = CLK_SET_RATE_PARENT, 591 }, 592 }; 593 594 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = { 595 F(50000000, P_GPLL0, 12, 0, 0), 596 F(100000000, P_GPLL0, 6, 0, 0), 597 F(133330000, P_GPLL0, 4.5, 0, 0), 598 F(200000000, P_MMPLL0, 4, 0, 0), 599 F(266670000, P_MMPLL0, 3, 0, 0), 600 F(465000000, P_MMPLL3, 2, 0, 0), 601 { } 602 }; 603 604 static struct clk_rcg2 vcodec0_clk_src = { 605 .cmd_rcgr = 0x1000, 606 .mnd_width = 8, 607 .hid_width = 5, 608 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map, 609 .freq_tbl = ftbl_venus0_vcodec0_clk, 610 .clkr.hw.init = &(struct clk_init_data){ 611 .name = "vcodec0_clk_src", 612 .parent_names = mmcc_xo_mmpll0_1_3_gpll0, 613 .num_parents = 5, 614 .ops = &clk_rcg2_ops, 615 }, 616 }; 617 618 static struct freq_tbl ftbl_avsync_vp_clk[] = { 619 F(150000000, P_GPLL0, 4, 0, 0), 620 F(320000000, P_MMPLL0, 2.5, 0, 0), 621 { } 622 }; 623 624 static struct clk_rcg2 vp_clk_src = { 625 .cmd_rcgr = 0x2430, 626 .hid_width = 5, 627 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 628 .freq_tbl = ftbl_avsync_vp_clk, 629 .clkr.hw.init = &(struct clk_init_data){ 630 .name = "vp_clk_src", 631 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 632 .num_parents = 4, 633 .ops = &clk_rcg2_ops, 634 }, 635 }; 636 637 static struct freq_tbl ftbl_camss_cci_cci_clk[] = { 638 F(19200000, P_XO, 1, 0, 0), 639 { } 640 }; 641 642 static struct clk_rcg2 cci_clk_src = { 643 .cmd_rcgr = 0x3300, 644 .mnd_width = 8, 645 .hid_width = 5, 646 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 647 .freq_tbl = ftbl_camss_cci_cci_clk, 648 .clkr.hw.init = &(struct clk_init_data){ 649 .name = "cci_clk_src", 650 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 651 .num_parents = 6, 652 .ops = &clk_rcg2_ops, 653 }, 654 }; 655 656 static struct freq_tbl ftbl_camss_gp0_1_clk[] = { 657 F(10000, P_XO, 16, 1, 120), 658 F(24000, P_XO, 16, 1, 50), 659 F(6000000, P_GPLL0, 10, 1, 10), 660 F(12000000, P_GPLL0, 10, 1, 5), 661 F(13000000, P_GPLL0, 4, 13, 150), 662 F(24000000, P_GPLL0, 5, 1, 5), 663 { } 664 }; 665 666 static struct clk_rcg2 camss_gp0_clk_src = { 667 .cmd_rcgr = 0x3420, 668 .mnd_width = 8, 669 .hid_width = 5, 670 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map, 671 .freq_tbl = ftbl_camss_gp0_1_clk, 672 .clkr.hw.init = &(struct clk_init_data){ 673 .name = "camss_gp0_clk_src", 674 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep, 675 .num_parents = 7, 676 .ops = &clk_rcg2_ops, 677 }, 678 }; 679 680 static struct clk_rcg2 camss_gp1_clk_src = { 681 .cmd_rcgr = 0x3450, 682 .mnd_width = 8, 683 .hid_width = 5, 684 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map, 685 .freq_tbl = ftbl_camss_gp0_1_clk, 686 .clkr.hw.init = &(struct clk_init_data){ 687 .name = "camss_gp1_clk_src", 688 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep, 689 .num_parents = 7, 690 .ops = &clk_rcg2_ops, 691 }, 692 }; 693 694 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = { 695 F(4800000, P_XO, 4, 0, 0), 696 F(6000000, P_GPLL0, 10, 1, 10), 697 F(8000000, P_GPLL0, 15, 1, 5), 698 F(9600000, P_XO, 2, 0, 0), 699 F(16000000, P_MMPLL0, 10, 1, 5), 700 F(19200000, P_XO, 1, 0, 0), 701 F(24000000, P_GPLL0, 5, 1, 5), 702 F(32000000, P_MMPLL0, 5, 1, 5), 703 F(48000000, P_GPLL0, 12.5, 0, 0), 704 F(64000000, P_MMPLL0, 12.5, 0, 0), 705 { } 706 }; 707 708 static struct clk_rcg2 mclk0_clk_src = { 709 .cmd_rcgr = 0x3360, 710 .mnd_width = 8, 711 .hid_width = 5, 712 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 713 .freq_tbl = ftbl_camss_mclk0_3_clk, 714 .clkr.hw.init = &(struct clk_init_data){ 715 .name = "mclk0_clk_src", 716 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 717 .num_parents = 6, 718 .ops = &clk_rcg2_ops, 719 }, 720 }; 721 722 static struct clk_rcg2 mclk1_clk_src = { 723 .cmd_rcgr = 0x3390, 724 .mnd_width = 8, 725 .hid_width = 5, 726 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 727 .freq_tbl = ftbl_camss_mclk0_3_clk, 728 .clkr.hw.init = &(struct clk_init_data){ 729 .name = "mclk1_clk_src", 730 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 731 .num_parents = 6, 732 .ops = &clk_rcg2_ops, 733 }, 734 }; 735 736 static struct clk_rcg2 mclk2_clk_src = { 737 .cmd_rcgr = 0x33c0, 738 .mnd_width = 8, 739 .hid_width = 5, 740 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 741 .freq_tbl = ftbl_camss_mclk0_3_clk, 742 .clkr.hw.init = &(struct clk_init_data){ 743 .name = "mclk2_clk_src", 744 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 745 .num_parents = 6, 746 .ops = &clk_rcg2_ops, 747 }, 748 }; 749 750 static struct clk_rcg2 mclk3_clk_src = { 751 .cmd_rcgr = 0x33f0, 752 .mnd_width = 8, 753 .hid_width = 5, 754 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 755 .freq_tbl = ftbl_camss_mclk0_3_clk, 756 .clkr.hw.init = &(struct clk_init_data){ 757 .name = "mclk3_clk_src", 758 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 759 .num_parents = 6, 760 .ops = &clk_rcg2_ops, 761 }, 762 }; 763 764 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = { 765 F(100000000, P_GPLL0, 6, 0, 0), 766 F(200000000, P_MMPLL0, 4, 0, 0), 767 { } 768 }; 769 770 static struct clk_rcg2 csi0phytimer_clk_src = { 771 .cmd_rcgr = 0x3000, 772 .hid_width = 5, 773 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 774 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 775 .clkr.hw.init = &(struct clk_init_data){ 776 .name = "csi0phytimer_clk_src", 777 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 778 .num_parents = 5, 779 .ops = &clk_rcg2_ops, 780 }, 781 }; 782 783 static struct clk_rcg2 csi1phytimer_clk_src = { 784 .cmd_rcgr = 0x3030, 785 .hid_width = 5, 786 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 787 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 788 .clkr.hw.init = &(struct clk_init_data){ 789 .name = "csi1phytimer_clk_src", 790 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 791 .num_parents = 5, 792 .ops = &clk_rcg2_ops, 793 }, 794 }; 795 796 static struct clk_rcg2 csi2phytimer_clk_src = { 797 .cmd_rcgr = 0x3060, 798 .hid_width = 5, 799 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 800 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 801 .clkr.hw.init = &(struct clk_init_data){ 802 .name = "csi2phytimer_clk_src", 803 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 804 .num_parents = 5, 805 .ops = &clk_rcg2_ops, 806 }, 807 }; 808 809 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = { 810 F(133330000, P_GPLL0, 4.5, 0, 0), 811 F(266670000, P_MMPLL0, 3, 0, 0), 812 F(320000000, P_MMPLL0, 2.5, 0, 0), 813 F(372000000, P_MMPLL4, 2.5, 0, 0), 814 F(465000000, P_MMPLL4, 2, 0, 0), 815 F(600000000, P_GPLL0, 1, 0, 0), 816 { } 817 }; 818 819 static struct clk_rcg2 cpp_clk_src = { 820 .cmd_rcgr = 0x3640, 821 .hid_width = 5, 822 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 823 .freq_tbl = ftbl_camss_vfe_cpp_clk, 824 .clkr.hw.init = &(struct clk_init_data){ 825 .name = "cpp_clk_src", 826 .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 827 .num_parents = 5, 828 .ops = &clk_rcg2_ops, 829 }, 830 }; 831 832 static struct clk_rcg2 byte0_clk_src = { 833 .cmd_rcgr = 0x2120, 834 .hid_width = 5, 835 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 836 .clkr.hw.init = &(struct clk_init_data){ 837 .name = "byte0_clk_src", 838 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 839 .num_parents = 6, 840 .ops = &clk_byte2_ops, 841 .flags = CLK_SET_RATE_PARENT, 842 }, 843 }; 844 845 static struct clk_rcg2 byte1_clk_src = { 846 .cmd_rcgr = 0x2140, 847 .hid_width = 5, 848 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 849 .clkr.hw.init = &(struct clk_init_data){ 850 .name = "byte1_clk_src", 851 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 852 .num_parents = 6, 853 .ops = &clk_byte2_ops, 854 .flags = CLK_SET_RATE_PARENT, 855 }, 856 }; 857 858 static struct freq_tbl ftbl_mdss_edpaux_clk[] = { 859 F(19200000, P_XO, 1, 0, 0), 860 { } 861 }; 862 863 static struct clk_rcg2 edpaux_clk_src = { 864 .cmd_rcgr = 0x20e0, 865 .hid_width = 5, 866 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 867 .freq_tbl = ftbl_mdss_edpaux_clk, 868 .clkr.hw.init = &(struct clk_init_data){ 869 .name = "edpaux_clk_src", 870 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 871 .num_parents = 4, 872 .ops = &clk_rcg2_ops, 873 }, 874 }; 875 876 static struct freq_tbl ftbl_mdss_edplink_clk[] = { 877 F(135000000, P_EDPLINK, 2, 0, 0), 878 F(270000000, P_EDPLINK, 11, 0, 0), 879 { } 880 }; 881 882 static struct clk_rcg2 edplink_clk_src = { 883 .cmd_rcgr = 0x20c0, 884 .hid_width = 5, 885 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 886 .freq_tbl = ftbl_mdss_edplink_clk, 887 .clkr.hw.init = &(struct clk_init_data){ 888 .name = "edplink_clk_src", 889 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 890 .num_parents = 6, 891 .ops = &clk_rcg2_ops, 892 .flags = CLK_SET_RATE_PARENT, 893 }, 894 }; 895 896 static struct freq_tbl edp_pixel_freq_tbl[] = { 897 { .src = P_EDPVCO }, 898 { } 899 }; 900 901 static struct clk_rcg2 edppixel_clk_src = { 902 .cmd_rcgr = 0x20a0, 903 .mnd_width = 8, 904 .hid_width = 5, 905 .parent_map = mmcc_xo_dsi_hdmi_edp_map, 906 .freq_tbl = edp_pixel_freq_tbl, 907 .clkr.hw.init = &(struct clk_init_data){ 908 .name = "edppixel_clk_src", 909 .parent_names = mmcc_xo_dsi_hdmi_edp, 910 .num_parents = 6, 911 .ops = &clk_edp_pixel_ops, 912 }, 913 }; 914 915 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { 916 F(19200000, P_XO, 1, 0, 0), 917 { } 918 }; 919 920 static struct clk_rcg2 esc0_clk_src = { 921 .cmd_rcgr = 0x2160, 922 .hid_width = 5, 923 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 924 .freq_tbl = ftbl_mdss_esc0_1_clk, 925 .clkr.hw.init = &(struct clk_init_data){ 926 .name = "esc0_clk_src", 927 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 928 .num_parents = 6, 929 .ops = &clk_rcg2_ops, 930 }, 931 }; 932 933 static struct clk_rcg2 esc1_clk_src = { 934 .cmd_rcgr = 0x2180, 935 .hid_width = 5, 936 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 937 .freq_tbl = ftbl_mdss_esc0_1_clk, 938 .clkr.hw.init = &(struct clk_init_data){ 939 .name = "esc1_clk_src", 940 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 941 .num_parents = 6, 942 .ops = &clk_rcg2_ops, 943 }, 944 }; 945 946 static struct freq_tbl extpclk_freq_tbl[] = { 947 { .src = P_HDMIPLL }, 948 { } 949 }; 950 951 static struct clk_rcg2 extpclk_clk_src = { 952 .cmd_rcgr = 0x2060, 953 .hid_width = 5, 954 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 955 .freq_tbl = extpclk_freq_tbl, 956 .clkr.hw.init = &(struct clk_init_data){ 957 .name = "extpclk_clk_src", 958 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 959 .num_parents = 6, 960 .ops = &clk_byte_ops, 961 .flags = CLK_SET_RATE_PARENT, 962 }, 963 }; 964 965 static struct freq_tbl ftbl_mdss_hdmi_clk[] = { 966 F(19200000, P_XO, 1, 0, 0), 967 { } 968 }; 969 970 static struct clk_rcg2 hdmi_clk_src = { 971 .cmd_rcgr = 0x2100, 972 .hid_width = 5, 973 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 974 .freq_tbl = ftbl_mdss_hdmi_clk, 975 .clkr.hw.init = &(struct clk_init_data){ 976 .name = "hdmi_clk_src", 977 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 978 .num_parents = 4, 979 .ops = &clk_rcg2_ops, 980 }, 981 }; 982 983 static struct freq_tbl ftbl_mdss_vsync_clk[] = { 984 F(19200000, P_XO, 1, 0, 0), 985 { } 986 }; 987 988 static struct clk_rcg2 vsync_clk_src = { 989 .cmd_rcgr = 0x2080, 990 .hid_width = 5, 991 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 992 .freq_tbl = ftbl_mdss_vsync_clk, 993 .clkr.hw.init = &(struct clk_init_data){ 994 .name = "vsync_clk_src", 995 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 996 .num_parents = 4, 997 .ops = &clk_rcg2_ops, 998 }, 999 }; 1000 1001 static struct freq_tbl ftbl_mmss_rbcpr_clk[] = { 1002 F(50000000, P_GPLL0, 12, 0, 0), 1003 { } 1004 }; 1005 1006 static struct clk_rcg2 rbcpr_clk_src = { 1007 .cmd_rcgr = 0x4060, 1008 .hid_width = 5, 1009 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1010 .freq_tbl = ftbl_mmss_rbcpr_clk, 1011 .clkr.hw.init = &(struct clk_init_data){ 1012 .name = "rbcpr_clk_src", 1013 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1014 .num_parents = 4, 1015 .ops = &clk_rcg2_ops, 1016 }, 1017 }; 1018 1019 static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = { 1020 F(19200000, P_XO, 1, 0, 0), 1021 { } 1022 }; 1023 1024 static struct clk_rcg2 rbbmtimer_clk_src = { 1025 .cmd_rcgr = 0x4090, 1026 .hid_width = 5, 1027 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1028 .freq_tbl = ftbl_oxili_rbbmtimer_clk, 1029 .clkr.hw.init = &(struct clk_init_data){ 1030 .name = "rbbmtimer_clk_src", 1031 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1032 .num_parents = 4, 1033 .ops = &clk_rcg2_ops, 1034 }, 1035 }; 1036 1037 static struct freq_tbl ftbl_vpu_maple_clk[] = { 1038 F(50000000, P_GPLL0, 12, 0, 0), 1039 F(100000000, P_GPLL0, 6, 0, 0), 1040 F(133330000, P_GPLL0, 4.5, 0, 0), 1041 F(200000000, P_MMPLL0, 4, 0, 0), 1042 F(266670000, P_MMPLL0, 3, 0, 0), 1043 F(465000000, P_MMPLL3, 2, 0, 0), 1044 { } 1045 }; 1046 1047 static struct clk_rcg2 maple_clk_src = { 1048 .cmd_rcgr = 0x1320, 1049 .hid_width = 5, 1050 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1051 .freq_tbl = ftbl_vpu_maple_clk, 1052 .clkr.hw.init = &(struct clk_init_data){ 1053 .name = "maple_clk_src", 1054 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1055 .num_parents = 4, 1056 .ops = &clk_rcg2_ops, 1057 }, 1058 }; 1059 1060 static struct freq_tbl ftbl_vpu_vdp_clk[] = { 1061 F(50000000, P_GPLL0, 12, 0, 0), 1062 F(100000000, P_GPLL0, 6, 0, 0), 1063 F(200000000, P_MMPLL0, 4, 0, 0), 1064 F(320000000, P_MMPLL0, 2.5, 0, 0), 1065 F(400000000, P_MMPLL0, 2, 0, 0), 1066 { } 1067 }; 1068 1069 static struct clk_rcg2 vdp_clk_src = { 1070 .cmd_rcgr = 0x1300, 1071 .hid_width = 5, 1072 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1073 .freq_tbl = ftbl_vpu_vdp_clk, 1074 .clkr.hw.init = &(struct clk_init_data){ 1075 .name = "vdp_clk_src", 1076 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1077 .num_parents = 4, 1078 .ops = &clk_rcg2_ops, 1079 }, 1080 }; 1081 1082 static struct freq_tbl ftbl_vpu_bus_clk[] = { 1083 F(40000000, P_GPLL0, 15, 0, 0), 1084 F(80000000, P_MMPLL0, 10, 0, 0), 1085 { } 1086 }; 1087 1088 static struct clk_rcg2 vpu_bus_clk_src = { 1089 .cmd_rcgr = 0x1340, 1090 .hid_width = 5, 1091 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1092 .freq_tbl = ftbl_vpu_bus_clk, 1093 .clkr.hw.init = &(struct clk_init_data){ 1094 .name = "vpu_bus_clk_src", 1095 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1096 .num_parents = 4, 1097 .ops = &clk_rcg2_ops, 1098 }, 1099 }; 1100 1101 static struct clk_branch mmss_cxo_clk = { 1102 .halt_reg = 0x5104, 1103 .clkr = { 1104 .enable_reg = 0x5104, 1105 .enable_mask = BIT(0), 1106 .hw.init = &(struct clk_init_data){ 1107 .name = "mmss_cxo_clk", 1108 .parent_names = (const char *[]){ "xo" }, 1109 .num_parents = 1, 1110 .flags = CLK_SET_RATE_PARENT, 1111 .ops = &clk_branch2_ops, 1112 }, 1113 }, 1114 }; 1115 1116 static struct clk_branch mmss_sleepclk_clk = { 1117 .halt_reg = 0x5100, 1118 .clkr = { 1119 .enable_reg = 0x5100, 1120 .enable_mask = BIT(0), 1121 .hw.init = &(struct clk_init_data){ 1122 .name = "mmss_sleepclk_clk", 1123 .parent_names = (const char *[]){ 1124 "sleep_clk_src", 1125 }, 1126 .num_parents = 1, 1127 .flags = CLK_SET_RATE_PARENT, 1128 .ops = &clk_branch2_ops, 1129 }, 1130 }, 1131 }; 1132 1133 static struct clk_branch avsync_ahb_clk = { 1134 .halt_reg = 0x2414, 1135 .clkr = { 1136 .enable_reg = 0x2414, 1137 .enable_mask = BIT(0), 1138 .hw.init = &(struct clk_init_data){ 1139 .name = "avsync_ahb_clk", 1140 .parent_names = (const char *[]){ 1141 "mmss_ahb_clk_src", 1142 }, 1143 .num_parents = 1, 1144 .flags = CLK_SET_RATE_PARENT, 1145 .ops = &clk_branch2_ops, 1146 }, 1147 }, 1148 }; 1149 1150 static struct clk_branch avsync_edppixel_clk = { 1151 .halt_reg = 0x2418, 1152 .clkr = { 1153 .enable_reg = 0x2418, 1154 .enable_mask = BIT(0), 1155 .hw.init = &(struct clk_init_data){ 1156 .name = "avsync_edppixel_clk", 1157 .parent_names = (const char *[]){ 1158 "edppixel_clk_src", 1159 }, 1160 .num_parents = 1, 1161 .flags = CLK_SET_RATE_PARENT, 1162 .ops = &clk_branch2_ops, 1163 }, 1164 }, 1165 }; 1166 1167 static struct clk_branch avsync_extpclk_clk = { 1168 .halt_reg = 0x2410, 1169 .clkr = { 1170 .enable_reg = 0x2410, 1171 .enable_mask = BIT(0), 1172 .hw.init = &(struct clk_init_data){ 1173 .name = "avsync_extpclk_clk", 1174 .parent_names = (const char *[]){ 1175 "extpclk_clk_src", 1176 }, 1177 .num_parents = 1, 1178 .flags = CLK_SET_RATE_PARENT, 1179 .ops = &clk_branch2_ops, 1180 }, 1181 }, 1182 }; 1183 1184 static struct clk_branch avsync_pclk0_clk = { 1185 .halt_reg = 0x241c, 1186 .clkr = { 1187 .enable_reg = 0x241c, 1188 .enable_mask = BIT(0), 1189 .hw.init = &(struct clk_init_data){ 1190 .name = "avsync_pclk0_clk", 1191 .parent_names = (const char *[]){ 1192 "pclk0_clk_src", 1193 }, 1194 .num_parents = 1, 1195 .flags = CLK_SET_RATE_PARENT, 1196 .ops = &clk_branch2_ops, 1197 }, 1198 }, 1199 }; 1200 1201 static struct clk_branch avsync_pclk1_clk = { 1202 .halt_reg = 0x2420, 1203 .clkr = { 1204 .enable_reg = 0x2420, 1205 .enable_mask = BIT(0), 1206 .hw.init = &(struct clk_init_data){ 1207 .name = "avsync_pclk1_clk", 1208 .parent_names = (const char *[]){ 1209 "pclk1_clk_src", 1210 }, 1211 .num_parents = 1, 1212 .flags = CLK_SET_RATE_PARENT, 1213 .ops = &clk_branch2_ops, 1214 }, 1215 }, 1216 }; 1217 1218 static struct clk_branch avsync_vp_clk = { 1219 .halt_reg = 0x2404, 1220 .clkr = { 1221 .enable_reg = 0x2404, 1222 .enable_mask = BIT(0), 1223 .hw.init = &(struct clk_init_data){ 1224 .name = "avsync_vp_clk", 1225 .parent_names = (const char *[]){ 1226 "vp_clk_src", 1227 }, 1228 .num_parents = 1, 1229 .flags = CLK_SET_RATE_PARENT, 1230 .ops = &clk_branch2_ops, 1231 }, 1232 }, 1233 }; 1234 1235 static struct clk_branch camss_ahb_clk = { 1236 .halt_reg = 0x348c, 1237 .clkr = { 1238 .enable_reg = 0x348c, 1239 .enable_mask = BIT(0), 1240 .hw.init = &(struct clk_init_data){ 1241 .name = "camss_ahb_clk", 1242 .parent_names = (const char *[]){ 1243 "mmss_ahb_clk_src", 1244 }, 1245 .num_parents = 1, 1246 .flags = CLK_SET_RATE_PARENT, 1247 .ops = &clk_branch2_ops, 1248 }, 1249 }, 1250 }; 1251 1252 static struct clk_branch camss_cci_cci_ahb_clk = { 1253 .halt_reg = 0x3348, 1254 .clkr = { 1255 .enable_reg = 0x3348, 1256 .enable_mask = BIT(0), 1257 .hw.init = &(struct clk_init_data){ 1258 .name = "camss_cci_cci_ahb_clk", 1259 .parent_names = (const char *[]){ 1260 "mmss_ahb_clk_src", 1261 }, 1262 .num_parents = 1, 1263 .ops = &clk_branch2_ops, 1264 }, 1265 }, 1266 }; 1267 1268 static struct clk_branch camss_cci_cci_clk = { 1269 .halt_reg = 0x3344, 1270 .clkr = { 1271 .enable_reg = 0x3344, 1272 .enable_mask = BIT(0), 1273 .hw.init = &(struct clk_init_data){ 1274 .name = "camss_cci_cci_clk", 1275 .parent_names = (const char *[]){ 1276 "cci_clk_src", 1277 }, 1278 .num_parents = 1, 1279 .flags = CLK_SET_RATE_PARENT, 1280 .ops = &clk_branch2_ops, 1281 }, 1282 }, 1283 }; 1284 1285 static struct clk_branch camss_csi0_ahb_clk = { 1286 .halt_reg = 0x30bc, 1287 .clkr = { 1288 .enable_reg = 0x30bc, 1289 .enable_mask = BIT(0), 1290 .hw.init = &(struct clk_init_data){ 1291 .name = "camss_csi0_ahb_clk", 1292 .parent_names = (const char *[]){ 1293 "mmss_ahb_clk_src", 1294 }, 1295 .num_parents = 1, 1296 .ops = &clk_branch2_ops, 1297 }, 1298 }, 1299 }; 1300 1301 static struct clk_branch camss_csi0_clk = { 1302 .halt_reg = 0x30b4, 1303 .clkr = { 1304 .enable_reg = 0x30b4, 1305 .enable_mask = BIT(0), 1306 .hw.init = &(struct clk_init_data){ 1307 .name = "camss_csi0_clk", 1308 .parent_names = (const char *[]){ 1309 "csi0_clk_src", 1310 }, 1311 .num_parents = 1, 1312 .flags = CLK_SET_RATE_PARENT, 1313 .ops = &clk_branch2_ops, 1314 }, 1315 }, 1316 }; 1317 1318 static struct clk_branch camss_csi0phy_clk = { 1319 .halt_reg = 0x30c4, 1320 .clkr = { 1321 .enable_reg = 0x30c4, 1322 .enable_mask = BIT(0), 1323 .hw.init = &(struct clk_init_data){ 1324 .name = "camss_csi0phy_clk", 1325 .parent_names = (const char *[]){ 1326 "csi0_clk_src", 1327 }, 1328 .num_parents = 1, 1329 .flags = CLK_SET_RATE_PARENT, 1330 .ops = &clk_branch2_ops, 1331 }, 1332 }, 1333 }; 1334 1335 static struct clk_branch camss_csi0pix_clk = { 1336 .halt_reg = 0x30e4, 1337 .clkr = { 1338 .enable_reg = 0x30e4, 1339 .enable_mask = BIT(0), 1340 .hw.init = &(struct clk_init_data){ 1341 .name = "camss_csi0pix_clk", 1342 .parent_names = (const char *[]){ 1343 "csi0_clk_src", 1344 }, 1345 .num_parents = 1, 1346 .flags = CLK_SET_RATE_PARENT, 1347 .ops = &clk_branch2_ops, 1348 }, 1349 }, 1350 }; 1351 1352 static struct clk_branch camss_csi0rdi_clk = { 1353 .halt_reg = 0x30d4, 1354 .clkr = { 1355 .enable_reg = 0x30d4, 1356 .enable_mask = BIT(0), 1357 .hw.init = &(struct clk_init_data){ 1358 .name = "camss_csi0rdi_clk", 1359 .parent_names = (const char *[]){ 1360 "csi0_clk_src", 1361 }, 1362 .num_parents = 1, 1363 .flags = CLK_SET_RATE_PARENT, 1364 .ops = &clk_branch2_ops, 1365 }, 1366 }, 1367 }; 1368 1369 static struct clk_branch camss_csi1_ahb_clk = { 1370 .halt_reg = 0x3128, 1371 .clkr = { 1372 .enable_reg = 0x3128, 1373 .enable_mask = BIT(0), 1374 .hw.init = &(struct clk_init_data){ 1375 .name = "camss_csi1_ahb_clk", 1376 .parent_names = (const char *[]){ 1377 "mmss_ahb_clk_src", 1378 }, 1379 .num_parents = 1, 1380 .flags = CLK_SET_RATE_PARENT, 1381 .ops = &clk_branch2_ops, 1382 }, 1383 }, 1384 }; 1385 1386 static struct clk_branch camss_csi1_clk = { 1387 .halt_reg = 0x3124, 1388 .clkr = { 1389 .enable_reg = 0x3124, 1390 .enable_mask = BIT(0), 1391 .hw.init = &(struct clk_init_data){ 1392 .name = "camss_csi1_clk", 1393 .parent_names = (const char *[]){ 1394 "csi1_clk_src", 1395 }, 1396 .num_parents = 1, 1397 .flags = CLK_SET_RATE_PARENT, 1398 .ops = &clk_branch2_ops, 1399 }, 1400 }, 1401 }; 1402 1403 static struct clk_branch camss_csi1phy_clk = { 1404 .halt_reg = 0x3134, 1405 .clkr = { 1406 .enable_reg = 0x3134, 1407 .enable_mask = BIT(0), 1408 .hw.init = &(struct clk_init_data){ 1409 .name = "camss_csi1phy_clk", 1410 .parent_names = (const char *[]){ 1411 "csi1_clk_src", 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 camss_csi1pix_clk = { 1421 .halt_reg = 0x3154, 1422 .clkr = { 1423 .enable_reg = 0x3154, 1424 .enable_mask = BIT(0), 1425 .hw.init = &(struct clk_init_data){ 1426 .name = "camss_csi1pix_clk", 1427 .parent_names = (const char *[]){ 1428 "csi1_clk_src", 1429 }, 1430 .num_parents = 1, 1431 .flags = CLK_SET_RATE_PARENT, 1432 .ops = &clk_branch2_ops, 1433 }, 1434 }, 1435 }; 1436 1437 static struct clk_branch camss_csi1rdi_clk = { 1438 .halt_reg = 0x3144, 1439 .clkr = { 1440 .enable_reg = 0x3144, 1441 .enable_mask = BIT(0), 1442 .hw.init = &(struct clk_init_data){ 1443 .name = "camss_csi1rdi_clk", 1444 .parent_names = (const char *[]){ 1445 "csi1_clk_src", 1446 }, 1447 .num_parents = 1, 1448 .flags = CLK_SET_RATE_PARENT, 1449 .ops = &clk_branch2_ops, 1450 }, 1451 }, 1452 }; 1453 1454 static struct clk_branch camss_csi2_ahb_clk = { 1455 .halt_reg = 0x3188, 1456 .clkr = { 1457 .enable_reg = 0x3188, 1458 .enable_mask = BIT(0), 1459 .hw.init = &(struct clk_init_data){ 1460 .name = "camss_csi2_ahb_clk", 1461 .parent_names = (const char *[]){ 1462 "mmss_ahb_clk_src", 1463 }, 1464 .num_parents = 1, 1465 .ops = &clk_branch2_ops, 1466 }, 1467 }, 1468 }; 1469 1470 static struct clk_branch camss_csi2_clk = { 1471 .halt_reg = 0x3184, 1472 .clkr = { 1473 .enable_reg = 0x3184, 1474 .enable_mask = BIT(0), 1475 .hw.init = &(struct clk_init_data){ 1476 .name = "camss_csi2_clk", 1477 .parent_names = (const char *[]){ 1478 "csi2_clk_src", 1479 }, 1480 .num_parents = 1, 1481 .flags = CLK_SET_RATE_PARENT, 1482 .ops = &clk_branch2_ops, 1483 }, 1484 }, 1485 }; 1486 1487 static struct clk_branch camss_csi2phy_clk = { 1488 .halt_reg = 0x3194, 1489 .clkr = { 1490 .enable_reg = 0x3194, 1491 .enable_mask = BIT(0), 1492 .hw.init = &(struct clk_init_data){ 1493 .name = "camss_csi2phy_clk", 1494 .parent_names = (const char *[]){ 1495 "csi2_clk_src", 1496 }, 1497 .num_parents = 1, 1498 .flags = CLK_SET_RATE_PARENT, 1499 .ops = &clk_branch2_ops, 1500 }, 1501 }, 1502 }; 1503 1504 static struct clk_branch camss_csi2pix_clk = { 1505 .halt_reg = 0x31b4, 1506 .clkr = { 1507 .enable_reg = 0x31b4, 1508 .enable_mask = BIT(0), 1509 .hw.init = &(struct clk_init_data){ 1510 .name = "camss_csi2pix_clk", 1511 .parent_names = (const char *[]){ 1512 "csi2_clk_src", 1513 }, 1514 .num_parents = 1, 1515 .flags = CLK_SET_RATE_PARENT, 1516 .ops = &clk_branch2_ops, 1517 }, 1518 }, 1519 }; 1520 1521 static struct clk_branch camss_csi2rdi_clk = { 1522 .halt_reg = 0x31a4, 1523 .clkr = { 1524 .enable_reg = 0x31a4, 1525 .enable_mask = BIT(0), 1526 .hw.init = &(struct clk_init_data){ 1527 .name = "camss_csi2rdi_clk", 1528 .parent_names = (const char *[]){ 1529 "csi2_clk_src", 1530 }, 1531 .num_parents = 1, 1532 .flags = CLK_SET_RATE_PARENT, 1533 .ops = &clk_branch2_ops, 1534 }, 1535 }, 1536 }; 1537 1538 static struct clk_branch camss_csi3_ahb_clk = { 1539 .halt_reg = 0x31e8, 1540 .clkr = { 1541 .enable_reg = 0x31e8, 1542 .enable_mask = BIT(0), 1543 .hw.init = &(struct clk_init_data){ 1544 .name = "camss_csi3_ahb_clk", 1545 .parent_names = (const char *[]){ 1546 "mmss_ahb_clk_src", 1547 }, 1548 .num_parents = 1, 1549 .ops = &clk_branch2_ops, 1550 }, 1551 }, 1552 }; 1553 1554 static struct clk_branch camss_csi3_clk = { 1555 .halt_reg = 0x31e4, 1556 .clkr = { 1557 .enable_reg = 0x31e4, 1558 .enable_mask = BIT(0), 1559 .hw.init = &(struct clk_init_data){ 1560 .name = "camss_csi3_clk", 1561 .parent_names = (const char *[]){ 1562 "csi3_clk_src", 1563 }, 1564 .num_parents = 1, 1565 .flags = CLK_SET_RATE_PARENT, 1566 .ops = &clk_branch2_ops, 1567 }, 1568 }, 1569 }; 1570 1571 static struct clk_branch camss_csi3phy_clk = { 1572 .halt_reg = 0x31f4, 1573 .clkr = { 1574 .enable_reg = 0x31f4, 1575 .enable_mask = BIT(0), 1576 .hw.init = &(struct clk_init_data){ 1577 .name = "camss_csi3phy_clk", 1578 .parent_names = (const char *[]){ 1579 "csi3_clk_src", 1580 }, 1581 .num_parents = 1, 1582 .flags = CLK_SET_RATE_PARENT, 1583 .ops = &clk_branch2_ops, 1584 }, 1585 }, 1586 }; 1587 1588 static struct clk_branch camss_csi3pix_clk = { 1589 .halt_reg = 0x3214, 1590 .clkr = { 1591 .enable_reg = 0x3214, 1592 .enable_mask = BIT(0), 1593 .hw.init = &(struct clk_init_data){ 1594 .name = "camss_csi3pix_clk", 1595 .parent_names = (const char *[]){ 1596 "csi3_clk_src", 1597 }, 1598 .num_parents = 1, 1599 .flags = CLK_SET_RATE_PARENT, 1600 .ops = &clk_branch2_ops, 1601 }, 1602 }, 1603 }; 1604 1605 static struct clk_branch camss_csi3rdi_clk = { 1606 .halt_reg = 0x3204, 1607 .clkr = { 1608 .enable_reg = 0x3204, 1609 .enable_mask = BIT(0), 1610 .hw.init = &(struct clk_init_data){ 1611 .name = "camss_csi3rdi_clk", 1612 .parent_names = (const char *[]){ 1613 "csi3_clk_src", 1614 }, 1615 .num_parents = 1, 1616 .flags = CLK_SET_RATE_PARENT, 1617 .ops = &clk_branch2_ops, 1618 }, 1619 }, 1620 }; 1621 1622 static struct clk_branch camss_csi_vfe0_clk = { 1623 .halt_reg = 0x3704, 1624 .clkr = { 1625 .enable_reg = 0x3704, 1626 .enable_mask = BIT(0), 1627 .hw.init = &(struct clk_init_data){ 1628 .name = "camss_csi_vfe0_clk", 1629 .parent_names = (const char *[]){ 1630 "vfe0_clk_src", 1631 }, 1632 .num_parents = 1, 1633 .flags = CLK_SET_RATE_PARENT, 1634 .ops = &clk_branch2_ops, 1635 }, 1636 }, 1637 }; 1638 1639 static struct clk_branch camss_csi_vfe1_clk = { 1640 .halt_reg = 0x3714, 1641 .clkr = { 1642 .enable_reg = 0x3714, 1643 .enable_mask = BIT(0), 1644 .hw.init = &(struct clk_init_data){ 1645 .name = "camss_csi_vfe1_clk", 1646 .parent_names = (const char *[]){ 1647 "vfe1_clk_src", 1648 }, 1649 .num_parents = 1, 1650 .flags = CLK_SET_RATE_PARENT, 1651 .ops = &clk_branch2_ops, 1652 }, 1653 }, 1654 }; 1655 1656 static struct clk_branch camss_gp0_clk = { 1657 .halt_reg = 0x3444, 1658 .clkr = { 1659 .enable_reg = 0x3444, 1660 .enable_mask = BIT(0), 1661 .hw.init = &(struct clk_init_data){ 1662 .name = "camss_gp0_clk", 1663 .parent_names = (const char *[]){ 1664 "camss_gp0_clk_src", 1665 }, 1666 .num_parents = 1, 1667 .flags = CLK_SET_RATE_PARENT, 1668 .ops = &clk_branch2_ops, 1669 }, 1670 }, 1671 }; 1672 1673 static struct clk_branch camss_gp1_clk = { 1674 .halt_reg = 0x3474, 1675 .clkr = { 1676 .enable_reg = 0x3474, 1677 .enable_mask = BIT(0), 1678 .hw.init = &(struct clk_init_data){ 1679 .name = "camss_gp1_clk", 1680 .parent_names = (const char *[]){ 1681 "camss_gp1_clk_src", 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 camss_ispif_ahb_clk = { 1691 .halt_reg = 0x3224, 1692 .clkr = { 1693 .enable_reg = 0x3224, 1694 .enable_mask = BIT(0), 1695 .hw.init = &(struct clk_init_data){ 1696 .name = "camss_ispif_ahb_clk", 1697 .parent_names = (const char *[]){ 1698 "mmss_ahb_clk_src", 1699 }, 1700 .num_parents = 1, 1701 .flags = CLK_SET_RATE_PARENT, 1702 .ops = &clk_branch2_ops, 1703 }, 1704 }, 1705 }; 1706 1707 static struct clk_branch camss_jpeg_jpeg0_clk = { 1708 .halt_reg = 0x35a8, 1709 .clkr = { 1710 .enable_reg = 0x35a8, 1711 .enable_mask = BIT(0), 1712 .hw.init = &(struct clk_init_data){ 1713 .name = "camss_jpeg_jpeg0_clk", 1714 .parent_names = (const char *[]){ 1715 "jpeg0_clk_src", 1716 }, 1717 .num_parents = 1, 1718 .flags = CLK_SET_RATE_PARENT, 1719 .ops = &clk_branch2_ops, 1720 }, 1721 }, 1722 }; 1723 1724 static struct clk_branch camss_jpeg_jpeg1_clk = { 1725 .halt_reg = 0x35ac, 1726 .clkr = { 1727 .enable_reg = 0x35ac, 1728 .enable_mask = BIT(0), 1729 .hw.init = &(struct clk_init_data){ 1730 .name = "camss_jpeg_jpeg1_clk", 1731 .parent_names = (const char *[]){ 1732 "jpeg1_clk_src", 1733 }, 1734 .num_parents = 1, 1735 .flags = CLK_SET_RATE_PARENT, 1736 .ops = &clk_branch2_ops, 1737 }, 1738 }, 1739 }; 1740 1741 static struct clk_branch camss_jpeg_jpeg2_clk = { 1742 .halt_reg = 0x35b0, 1743 .clkr = { 1744 .enable_reg = 0x35b0, 1745 .enable_mask = BIT(0), 1746 .hw.init = &(struct clk_init_data){ 1747 .name = "camss_jpeg_jpeg2_clk", 1748 .parent_names = (const char *[]){ 1749 "jpeg2_clk_src", 1750 }, 1751 .num_parents = 1, 1752 .flags = CLK_SET_RATE_PARENT, 1753 .ops = &clk_branch2_ops, 1754 }, 1755 }, 1756 }; 1757 1758 static struct clk_branch camss_jpeg_jpeg_ahb_clk = { 1759 .halt_reg = 0x35b4, 1760 .clkr = { 1761 .enable_reg = 0x35b4, 1762 .enable_mask = BIT(0), 1763 .hw.init = &(struct clk_init_data){ 1764 .name = "camss_jpeg_jpeg_ahb_clk", 1765 .parent_names = (const char *[]){ 1766 "mmss_ahb_clk_src", 1767 }, 1768 .num_parents = 1, 1769 .ops = &clk_branch2_ops, 1770 }, 1771 }, 1772 }; 1773 1774 static struct clk_branch camss_jpeg_jpeg_axi_clk = { 1775 .halt_reg = 0x35b8, 1776 .clkr = { 1777 .enable_reg = 0x35b8, 1778 .enable_mask = BIT(0), 1779 .hw.init = &(struct clk_init_data){ 1780 .name = "camss_jpeg_jpeg_axi_clk", 1781 .parent_names = (const char *[]){ 1782 "mmss_axi_clk_src", 1783 }, 1784 .num_parents = 1, 1785 .ops = &clk_branch2_ops, 1786 }, 1787 }, 1788 }; 1789 1790 static struct clk_branch camss_mclk0_clk = { 1791 .halt_reg = 0x3384, 1792 .clkr = { 1793 .enable_reg = 0x3384, 1794 .enable_mask = BIT(0), 1795 .hw.init = &(struct clk_init_data){ 1796 .name = "camss_mclk0_clk", 1797 .parent_names = (const char *[]){ 1798 "mclk0_clk_src", 1799 }, 1800 .num_parents = 1, 1801 .flags = CLK_SET_RATE_PARENT, 1802 .ops = &clk_branch2_ops, 1803 }, 1804 }, 1805 }; 1806 1807 static struct clk_branch camss_mclk1_clk = { 1808 .halt_reg = 0x33b4, 1809 .clkr = { 1810 .enable_reg = 0x33b4, 1811 .enable_mask = BIT(0), 1812 .hw.init = &(struct clk_init_data){ 1813 .name = "camss_mclk1_clk", 1814 .parent_names = (const char *[]){ 1815 "mclk1_clk_src", 1816 }, 1817 .num_parents = 1, 1818 .flags = CLK_SET_RATE_PARENT, 1819 .ops = &clk_branch2_ops, 1820 }, 1821 }, 1822 }; 1823 1824 static struct clk_branch camss_mclk2_clk = { 1825 .halt_reg = 0x33e4, 1826 .clkr = { 1827 .enable_reg = 0x33e4, 1828 .enable_mask = BIT(0), 1829 .hw.init = &(struct clk_init_data){ 1830 .name = "camss_mclk2_clk", 1831 .parent_names = (const char *[]){ 1832 "mclk2_clk_src", 1833 }, 1834 .num_parents = 1, 1835 .flags = CLK_SET_RATE_PARENT, 1836 .ops = &clk_branch2_ops, 1837 }, 1838 }, 1839 }; 1840 1841 static struct clk_branch camss_mclk3_clk = { 1842 .halt_reg = 0x3414, 1843 .clkr = { 1844 .enable_reg = 0x3414, 1845 .enable_mask = BIT(0), 1846 .hw.init = &(struct clk_init_data){ 1847 .name = "camss_mclk3_clk", 1848 .parent_names = (const char *[]){ 1849 "mclk3_clk_src", 1850 }, 1851 .num_parents = 1, 1852 .flags = CLK_SET_RATE_PARENT, 1853 .ops = &clk_branch2_ops, 1854 }, 1855 }, 1856 }; 1857 1858 static struct clk_branch camss_micro_ahb_clk = { 1859 .halt_reg = 0x3494, 1860 .clkr = { 1861 .enable_reg = 0x3494, 1862 .enable_mask = BIT(0), 1863 .hw.init = &(struct clk_init_data){ 1864 .name = "camss_micro_ahb_clk", 1865 .parent_names = (const char *[]){ 1866 "mmss_ahb_clk_src", 1867 }, 1868 .num_parents = 1, 1869 .ops = &clk_branch2_ops, 1870 }, 1871 }, 1872 }; 1873 1874 static struct clk_branch camss_phy0_csi0phytimer_clk = { 1875 .halt_reg = 0x3024, 1876 .clkr = { 1877 .enable_reg = 0x3024, 1878 .enable_mask = BIT(0), 1879 .hw.init = &(struct clk_init_data){ 1880 .name = "camss_phy0_csi0phytimer_clk", 1881 .parent_names = (const char *[]){ 1882 "csi0phytimer_clk_src", 1883 }, 1884 .num_parents = 1, 1885 .flags = CLK_SET_RATE_PARENT, 1886 .ops = &clk_branch2_ops, 1887 }, 1888 }, 1889 }; 1890 1891 static struct clk_branch camss_phy1_csi1phytimer_clk = { 1892 .halt_reg = 0x3054, 1893 .clkr = { 1894 .enable_reg = 0x3054, 1895 .enable_mask = BIT(0), 1896 .hw.init = &(struct clk_init_data){ 1897 .name = "camss_phy1_csi1phytimer_clk", 1898 .parent_names = (const char *[]){ 1899 "csi1phytimer_clk_src", 1900 }, 1901 .num_parents = 1, 1902 .flags = CLK_SET_RATE_PARENT, 1903 .ops = &clk_branch2_ops, 1904 }, 1905 }, 1906 }; 1907 1908 static struct clk_branch camss_phy2_csi2phytimer_clk = { 1909 .halt_reg = 0x3084, 1910 .clkr = { 1911 .enable_reg = 0x3084, 1912 .enable_mask = BIT(0), 1913 .hw.init = &(struct clk_init_data){ 1914 .name = "camss_phy2_csi2phytimer_clk", 1915 .parent_names = (const char *[]){ 1916 "csi2phytimer_clk_src", 1917 }, 1918 .num_parents = 1, 1919 .flags = CLK_SET_RATE_PARENT, 1920 .ops = &clk_branch2_ops, 1921 }, 1922 }, 1923 }; 1924 1925 static struct clk_branch camss_top_ahb_clk = { 1926 .halt_reg = 0x3484, 1927 .clkr = { 1928 .enable_reg = 0x3484, 1929 .enable_mask = BIT(0), 1930 .hw.init = &(struct clk_init_data){ 1931 .name = "camss_top_ahb_clk", 1932 .parent_names = (const char *[]){ 1933 "mmss_ahb_clk_src", 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 camss_vfe_cpp_ahb_clk = { 1943 .halt_reg = 0x36b4, 1944 .clkr = { 1945 .enable_reg = 0x36b4, 1946 .enable_mask = BIT(0), 1947 .hw.init = &(struct clk_init_data){ 1948 .name = "camss_vfe_cpp_ahb_clk", 1949 .parent_names = (const char *[]){ 1950 "mmss_ahb_clk_src", 1951 }, 1952 .num_parents = 1, 1953 .flags = CLK_SET_RATE_PARENT, 1954 .ops = &clk_branch2_ops, 1955 }, 1956 }, 1957 }; 1958 1959 static struct clk_branch camss_vfe_cpp_clk = { 1960 .halt_reg = 0x36b0, 1961 .clkr = { 1962 .enable_reg = 0x36b0, 1963 .enable_mask = BIT(0), 1964 .hw.init = &(struct clk_init_data){ 1965 .name = "camss_vfe_cpp_clk", 1966 .parent_names = (const char *[]){ 1967 "cpp_clk_src", 1968 }, 1969 .num_parents = 1, 1970 .flags = CLK_SET_RATE_PARENT, 1971 .ops = &clk_branch2_ops, 1972 }, 1973 }, 1974 }; 1975 1976 static struct clk_branch camss_vfe_vfe0_clk = { 1977 .halt_reg = 0x36a8, 1978 .clkr = { 1979 .enable_reg = 0x36a8, 1980 .enable_mask = BIT(0), 1981 .hw.init = &(struct clk_init_data){ 1982 .name = "camss_vfe_vfe0_clk", 1983 .parent_names = (const char *[]){ 1984 "vfe0_clk_src", 1985 }, 1986 .num_parents = 1, 1987 .flags = CLK_SET_RATE_PARENT, 1988 .ops = &clk_branch2_ops, 1989 }, 1990 }, 1991 }; 1992 1993 static struct clk_branch camss_vfe_vfe1_clk = { 1994 .halt_reg = 0x36ac, 1995 .clkr = { 1996 .enable_reg = 0x36ac, 1997 .enable_mask = BIT(0), 1998 .hw.init = &(struct clk_init_data){ 1999 .name = "camss_vfe_vfe1_clk", 2000 .parent_names = (const char *[]){ 2001 "vfe1_clk_src", 2002 }, 2003 .num_parents = 1, 2004 .flags = CLK_SET_RATE_PARENT, 2005 .ops = &clk_branch2_ops, 2006 }, 2007 }, 2008 }; 2009 2010 static struct clk_branch camss_vfe_vfe_ahb_clk = { 2011 .halt_reg = 0x36b8, 2012 .clkr = { 2013 .enable_reg = 0x36b8, 2014 .enable_mask = BIT(0), 2015 .hw.init = &(struct clk_init_data){ 2016 .name = "camss_vfe_vfe_ahb_clk", 2017 .parent_names = (const char *[]){ 2018 "mmss_ahb_clk_src", 2019 }, 2020 .num_parents = 1, 2021 .flags = CLK_SET_RATE_PARENT, 2022 .ops = &clk_branch2_ops, 2023 }, 2024 }, 2025 }; 2026 2027 static struct clk_branch camss_vfe_vfe_axi_clk = { 2028 .halt_reg = 0x36bc, 2029 .clkr = { 2030 .enable_reg = 0x36bc, 2031 .enable_mask = BIT(0), 2032 .hw.init = &(struct clk_init_data){ 2033 .name = "camss_vfe_vfe_axi_clk", 2034 .parent_names = (const char *[]){ 2035 "mmss_axi_clk_src", 2036 }, 2037 .num_parents = 1, 2038 .flags = CLK_SET_RATE_PARENT, 2039 .ops = &clk_branch2_ops, 2040 }, 2041 }, 2042 }; 2043 2044 static struct clk_branch mdss_ahb_clk = { 2045 .halt_reg = 0x2308, 2046 .clkr = { 2047 .enable_reg = 0x2308, 2048 .enable_mask = BIT(0), 2049 .hw.init = &(struct clk_init_data){ 2050 .name = "mdss_ahb_clk", 2051 .parent_names = (const char *[]){ 2052 "mmss_ahb_clk_src", 2053 }, 2054 .num_parents = 1, 2055 .flags = CLK_SET_RATE_PARENT, 2056 .ops = &clk_branch2_ops, 2057 }, 2058 }, 2059 }; 2060 2061 static struct clk_branch mdss_axi_clk = { 2062 .halt_reg = 0x2310, 2063 .clkr = { 2064 .enable_reg = 0x2310, 2065 .enable_mask = BIT(0), 2066 .hw.init = &(struct clk_init_data){ 2067 .name = "mdss_axi_clk", 2068 .parent_names = (const char *[]){ 2069 "mmss_axi_clk_src", 2070 }, 2071 .num_parents = 1, 2072 .flags = CLK_SET_RATE_PARENT, 2073 .ops = &clk_branch2_ops, 2074 }, 2075 }, 2076 }; 2077 2078 static struct clk_branch mdss_byte0_clk = { 2079 .halt_reg = 0x233c, 2080 .clkr = { 2081 .enable_reg = 0x233c, 2082 .enable_mask = BIT(0), 2083 .hw.init = &(struct clk_init_data){ 2084 .name = "mdss_byte0_clk", 2085 .parent_names = (const char *[]){ 2086 "byte0_clk_src", 2087 }, 2088 .num_parents = 1, 2089 .flags = CLK_SET_RATE_PARENT, 2090 .ops = &clk_branch2_ops, 2091 }, 2092 }, 2093 }; 2094 2095 static struct clk_branch mdss_byte1_clk = { 2096 .halt_reg = 0x2340, 2097 .clkr = { 2098 .enable_reg = 0x2340, 2099 .enable_mask = BIT(0), 2100 .hw.init = &(struct clk_init_data){ 2101 .name = "mdss_byte1_clk", 2102 .parent_names = (const char *[]){ 2103 "byte1_clk_src", 2104 }, 2105 .num_parents = 1, 2106 .flags = CLK_SET_RATE_PARENT, 2107 .ops = &clk_branch2_ops, 2108 }, 2109 }, 2110 }; 2111 2112 static struct clk_branch mdss_edpaux_clk = { 2113 .halt_reg = 0x2334, 2114 .clkr = { 2115 .enable_reg = 0x2334, 2116 .enable_mask = BIT(0), 2117 .hw.init = &(struct clk_init_data){ 2118 .name = "mdss_edpaux_clk", 2119 .parent_names = (const char *[]){ 2120 "edpaux_clk_src", 2121 }, 2122 .num_parents = 1, 2123 .flags = CLK_SET_RATE_PARENT, 2124 .ops = &clk_branch2_ops, 2125 }, 2126 }, 2127 }; 2128 2129 static struct clk_branch mdss_edplink_clk = { 2130 .halt_reg = 0x2330, 2131 .clkr = { 2132 .enable_reg = 0x2330, 2133 .enable_mask = BIT(0), 2134 .hw.init = &(struct clk_init_data){ 2135 .name = "mdss_edplink_clk", 2136 .parent_names = (const char *[]){ 2137 "edplink_clk_src", 2138 }, 2139 .num_parents = 1, 2140 .flags = CLK_SET_RATE_PARENT, 2141 .ops = &clk_branch2_ops, 2142 }, 2143 }, 2144 }; 2145 2146 static struct clk_branch mdss_edppixel_clk = { 2147 .halt_reg = 0x232c, 2148 .clkr = { 2149 .enable_reg = 0x232c, 2150 .enable_mask = BIT(0), 2151 .hw.init = &(struct clk_init_data){ 2152 .name = "mdss_edppixel_clk", 2153 .parent_names = (const char *[]){ 2154 "edppixel_clk_src", 2155 }, 2156 .num_parents = 1, 2157 .flags = CLK_SET_RATE_PARENT, 2158 .ops = &clk_branch2_ops, 2159 }, 2160 }, 2161 }; 2162 2163 static struct clk_branch mdss_esc0_clk = { 2164 .halt_reg = 0x2344, 2165 .clkr = { 2166 .enable_reg = 0x2344, 2167 .enable_mask = BIT(0), 2168 .hw.init = &(struct clk_init_data){ 2169 .name = "mdss_esc0_clk", 2170 .parent_names = (const char *[]){ 2171 "esc0_clk_src", 2172 }, 2173 .num_parents = 1, 2174 .flags = CLK_SET_RATE_PARENT, 2175 .ops = &clk_branch2_ops, 2176 }, 2177 }, 2178 }; 2179 2180 static struct clk_branch mdss_esc1_clk = { 2181 .halt_reg = 0x2348, 2182 .clkr = { 2183 .enable_reg = 0x2348, 2184 .enable_mask = BIT(0), 2185 .hw.init = &(struct clk_init_data){ 2186 .name = "mdss_esc1_clk", 2187 .parent_names = (const char *[]){ 2188 "esc1_clk_src", 2189 }, 2190 .num_parents = 1, 2191 .flags = CLK_SET_RATE_PARENT, 2192 .ops = &clk_branch2_ops, 2193 }, 2194 }, 2195 }; 2196 2197 static struct clk_branch mdss_extpclk_clk = { 2198 .halt_reg = 0x2324, 2199 .clkr = { 2200 .enable_reg = 0x2324, 2201 .enable_mask = BIT(0), 2202 .hw.init = &(struct clk_init_data){ 2203 .name = "mdss_extpclk_clk", 2204 .parent_names = (const char *[]){ 2205 "extpclk_clk_src", 2206 }, 2207 .num_parents = 1, 2208 .flags = CLK_SET_RATE_PARENT, 2209 .ops = &clk_branch2_ops, 2210 }, 2211 }, 2212 }; 2213 2214 static struct clk_branch mdss_hdmi_ahb_clk = { 2215 .halt_reg = 0x230c, 2216 .clkr = { 2217 .enable_reg = 0x230c, 2218 .enable_mask = BIT(0), 2219 .hw.init = &(struct clk_init_data){ 2220 .name = "mdss_hdmi_ahb_clk", 2221 .parent_names = (const char *[]){ 2222 "mmss_ahb_clk_src", 2223 }, 2224 .num_parents = 1, 2225 .flags = CLK_SET_RATE_PARENT, 2226 .ops = &clk_branch2_ops, 2227 }, 2228 }, 2229 }; 2230 2231 static struct clk_branch mdss_hdmi_clk = { 2232 .halt_reg = 0x2338, 2233 .clkr = { 2234 .enable_reg = 0x2338, 2235 .enable_mask = BIT(0), 2236 .hw.init = &(struct clk_init_data){ 2237 .name = "mdss_hdmi_clk", 2238 .parent_names = (const char *[]){ 2239 "hdmi_clk_src", 2240 }, 2241 .num_parents = 1, 2242 .flags = CLK_SET_RATE_PARENT, 2243 .ops = &clk_branch2_ops, 2244 }, 2245 }, 2246 }; 2247 2248 static struct clk_branch mdss_mdp_clk = { 2249 .halt_reg = 0x231c, 2250 .clkr = { 2251 .enable_reg = 0x231c, 2252 .enable_mask = BIT(0), 2253 .hw.init = &(struct clk_init_data){ 2254 .name = "mdss_mdp_clk", 2255 .parent_names = (const char *[]){ 2256 "mdp_clk_src", 2257 }, 2258 .num_parents = 1, 2259 .flags = CLK_SET_RATE_PARENT, 2260 .ops = &clk_branch2_ops, 2261 }, 2262 }, 2263 }; 2264 2265 static struct clk_branch mdss_mdp_lut_clk = { 2266 .halt_reg = 0x2320, 2267 .clkr = { 2268 .enable_reg = 0x2320, 2269 .enable_mask = BIT(0), 2270 .hw.init = &(struct clk_init_data){ 2271 .name = "mdss_mdp_lut_clk", 2272 .parent_names = (const char *[]){ 2273 "mdp_clk_src", 2274 }, 2275 .num_parents = 1, 2276 .flags = CLK_SET_RATE_PARENT, 2277 .ops = &clk_branch2_ops, 2278 }, 2279 }, 2280 }; 2281 2282 static struct clk_branch mdss_pclk0_clk = { 2283 .halt_reg = 0x2314, 2284 .clkr = { 2285 .enable_reg = 0x2314, 2286 .enable_mask = BIT(0), 2287 .hw.init = &(struct clk_init_data){ 2288 .name = "mdss_pclk0_clk", 2289 .parent_names = (const char *[]){ 2290 "pclk0_clk_src", 2291 }, 2292 .num_parents = 1, 2293 .flags = CLK_SET_RATE_PARENT, 2294 .ops = &clk_branch2_ops, 2295 }, 2296 }, 2297 }; 2298 2299 static struct clk_branch mdss_pclk1_clk = { 2300 .halt_reg = 0x2318, 2301 .clkr = { 2302 .enable_reg = 0x2318, 2303 .enable_mask = BIT(0), 2304 .hw.init = &(struct clk_init_data){ 2305 .name = "mdss_pclk1_clk", 2306 .parent_names = (const char *[]){ 2307 "pclk1_clk_src", 2308 }, 2309 .num_parents = 1, 2310 .flags = CLK_SET_RATE_PARENT, 2311 .ops = &clk_branch2_ops, 2312 }, 2313 }, 2314 }; 2315 2316 static struct clk_branch mdss_vsync_clk = { 2317 .halt_reg = 0x2328, 2318 .clkr = { 2319 .enable_reg = 0x2328, 2320 .enable_mask = BIT(0), 2321 .hw.init = &(struct clk_init_data){ 2322 .name = "mdss_vsync_clk", 2323 .parent_names = (const char *[]){ 2324 "vsync_clk_src", 2325 }, 2326 .num_parents = 1, 2327 .flags = CLK_SET_RATE_PARENT, 2328 .ops = &clk_branch2_ops, 2329 }, 2330 }, 2331 }; 2332 2333 static struct clk_branch mmss_rbcpr_ahb_clk = { 2334 .halt_reg = 0x4088, 2335 .clkr = { 2336 .enable_reg = 0x4088, 2337 .enable_mask = BIT(0), 2338 .hw.init = &(struct clk_init_data){ 2339 .name = "mmss_rbcpr_ahb_clk", 2340 .parent_names = (const char *[]){ 2341 "mmss_ahb_clk_src", 2342 }, 2343 .num_parents = 1, 2344 .flags = CLK_SET_RATE_PARENT, 2345 .ops = &clk_branch2_ops, 2346 }, 2347 }, 2348 }; 2349 2350 static struct clk_branch mmss_rbcpr_clk = { 2351 .halt_reg = 0x4084, 2352 .clkr = { 2353 .enable_reg = 0x4084, 2354 .enable_mask = BIT(0), 2355 .hw.init = &(struct clk_init_data){ 2356 .name = "mmss_rbcpr_clk", 2357 .parent_names = (const char *[]){ 2358 "rbcpr_clk_src", 2359 }, 2360 .num_parents = 1, 2361 .flags = CLK_SET_RATE_PARENT, 2362 .ops = &clk_branch2_ops, 2363 }, 2364 }, 2365 }; 2366 2367 static struct clk_branch mmss_spdm_ahb_clk = { 2368 .halt_reg = 0x0230, 2369 .clkr = { 2370 .enable_reg = 0x0230, 2371 .enable_mask = BIT(0), 2372 .hw.init = &(struct clk_init_data){ 2373 .name = "mmss_spdm_ahb_clk", 2374 .parent_names = (const char *[]){ 2375 "mmss_spdm_ahb_div_clk", 2376 }, 2377 .num_parents = 1, 2378 .flags = CLK_SET_RATE_PARENT, 2379 .ops = &clk_branch2_ops, 2380 }, 2381 }, 2382 }; 2383 2384 static struct clk_branch mmss_spdm_axi_clk = { 2385 .halt_reg = 0x0210, 2386 .clkr = { 2387 .enable_reg = 0x0210, 2388 .enable_mask = BIT(0), 2389 .hw.init = &(struct clk_init_data){ 2390 .name = "mmss_spdm_axi_clk", 2391 .parent_names = (const char *[]){ 2392 "mmss_spdm_axi_div_clk", 2393 }, 2394 .num_parents = 1, 2395 .flags = CLK_SET_RATE_PARENT, 2396 .ops = &clk_branch2_ops, 2397 }, 2398 }, 2399 }; 2400 2401 static struct clk_branch mmss_spdm_csi0_clk = { 2402 .halt_reg = 0x023c, 2403 .clkr = { 2404 .enable_reg = 0x023c, 2405 .enable_mask = BIT(0), 2406 .hw.init = &(struct clk_init_data){ 2407 .name = "mmss_spdm_csi0_clk", 2408 .parent_names = (const char *[]){ 2409 "mmss_spdm_csi0_div_clk", 2410 }, 2411 .num_parents = 1, 2412 .flags = CLK_SET_RATE_PARENT, 2413 .ops = &clk_branch2_ops, 2414 }, 2415 }, 2416 }; 2417 2418 static struct clk_branch mmss_spdm_gfx3d_clk = { 2419 .halt_reg = 0x022c, 2420 .clkr = { 2421 .enable_reg = 0x022c, 2422 .enable_mask = BIT(0), 2423 .hw.init = &(struct clk_init_data){ 2424 .name = "mmss_spdm_gfx3d_clk", 2425 .parent_names = (const char *[]){ 2426 "mmss_spdm_gfx3d_div_clk", 2427 }, 2428 .num_parents = 1, 2429 .flags = CLK_SET_RATE_PARENT, 2430 .ops = &clk_branch2_ops, 2431 }, 2432 }, 2433 }; 2434 2435 static struct clk_branch mmss_spdm_jpeg0_clk = { 2436 .halt_reg = 0x0204, 2437 .clkr = { 2438 .enable_reg = 0x0204, 2439 .enable_mask = BIT(0), 2440 .hw.init = &(struct clk_init_data){ 2441 .name = "mmss_spdm_jpeg0_clk", 2442 .parent_names = (const char *[]){ 2443 "mmss_spdm_jpeg0_div_clk", 2444 }, 2445 .num_parents = 1, 2446 .flags = CLK_SET_RATE_PARENT, 2447 .ops = &clk_branch2_ops, 2448 }, 2449 }, 2450 }; 2451 2452 static struct clk_branch mmss_spdm_jpeg1_clk = { 2453 .halt_reg = 0x0208, 2454 .clkr = { 2455 .enable_reg = 0x0208, 2456 .enable_mask = BIT(0), 2457 .hw.init = &(struct clk_init_data){ 2458 .name = "mmss_spdm_jpeg1_clk", 2459 .parent_names = (const char *[]){ 2460 "mmss_spdm_jpeg1_div_clk", 2461 }, 2462 .num_parents = 1, 2463 .flags = CLK_SET_RATE_PARENT, 2464 .ops = &clk_branch2_ops, 2465 }, 2466 }, 2467 }; 2468 2469 static struct clk_branch mmss_spdm_jpeg2_clk = { 2470 .halt_reg = 0x0224, 2471 .clkr = { 2472 .enable_reg = 0x0224, 2473 .enable_mask = BIT(0), 2474 .hw.init = &(struct clk_init_data){ 2475 .name = "mmss_spdm_jpeg2_clk", 2476 .parent_names = (const char *[]){ 2477 "mmss_spdm_jpeg2_div_clk", 2478 }, 2479 .num_parents = 1, 2480 .flags = CLK_SET_RATE_PARENT, 2481 .ops = &clk_branch2_ops, 2482 }, 2483 }, 2484 }; 2485 2486 static struct clk_branch mmss_spdm_mdp_clk = { 2487 .halt_reg = 0x020c, 2488 .clkr = { 2489 .enable_reg = 0x020c, 2490 .enable_mask = BIT(0), 2491 .hw.init = &(struct clk_init_data){ 2492 .name = "mmss_spdm_mdp_clk", 2493 .parent_names = (const char *[]){ 2494 "mmss_spdm_mdp_div_clk", 2495 }, 2496 .num_parents = 1, 2497 .flags = CLK_SET_RATE_PARENT, 2498 .ops = &clk_branch2_ops, 2499 }, 2500 }, 2501 }; 2502 2503 static struct clk_branch mmss_spdm_pclk0_clk = { 2504 .halt_reg = 0x0234, 2505 .clkr = { 2506 .enable_reg = 0x0234, 2507 .enable_mask = BIT(0), 2508 .hw.init = &(struct clk_init_data){ 2509 .name = "mmss_spdm_pclk0_clk", 2510 .parent_names = (const char *[]){ 2511 "mmss_spdm_pclk0_div_clk", 2512 }, 2513 .num_parents = 1, 2514 .flags = CLK_SET_RATE_PARENT, 2515 .ops = &clk_branch2_ops, 2516 }, 2517 }, 2518 }; 2519 2520 static struct clk_branch mmss_spdm_pclk1_clk = { 2521 .halt_reg = 0x0228, 2522 .clkr = { 2523 .enable_reg = 0x0228, 2524 .enable_mask = BIT(0), 2525 .hw.init = &(struct clk_init_data){ 2526 .name = "mmss_spdm_pclk1_clk", 2527 .parent_names = (const char *[]){ 2528 "mmss_spdm_pclk1_div_clk", 2529 }, 2530 .num_parents = 1, 2531 .flags = CLK_SET_RATE_PARENT, 2532 .ops = &clk_branch2_ops, 2533 }, 2534 }, 2535 }; 2536 2537 static struct clk_branch mmss_spdm_vcodec0_clk = { 2538 .halt_reg = 0x0214, 2539 .clkr = { 2540 .enable_reg = 0x0214, 2541 .enable_mask = BIT(0), 2542 .hw.init = &(struct clk_init_data){ 2543 .name = "mmss_spdm_vcodec0_clk", 2544 .parent_names = (const char *[]){ 2545 "mmss_spdm_vcodec0_div_clk", 2546 }, 2547 .num_parents = 1, 2548 .flags = CLK_SET_RATE_PARENT, 2549 .ops = &clk_branch2_ops, 2550 }, 2551 }, 2552 }; 2553 2554 static struct clk_branch mmss_spdm_vfe0_clk = { 2555 .halt_reg = 0x0218, 2556 .clkr = { 2557 .enable_reg = 0x0218, 2558 .enable_mask = BIT(0), 2559 .hw.init = &(struct clk_init_data){ 2560 .name = "mmss_spdm_vfe0_clk", 2561 .parent_names = (const char *[]){ 2562 "mmss_spdm_vfe0_div_clk", 2563 }, 2564 .num_parents = 1, 2565 .flags = CLK_SET_RATE_PARENT, 2566 .ops = &clk_branch2_ops, 2567 }, 2568 }, 2569 }; 2570 2571 static struct clk_branch mmss_spdm_vfe1_clk = { 2572 .halt_reg = 0x021c, 2573 .clkr = { 2574 .enable_reg = 0x021c, 2575 .enable_mask = BIT(0), 2576 .hw.init = &(struct clk_init_data){ 2577 .name = "mmss_spdm_vfe1_clk", 2578 .parent_names = (const char *[]){ 2579 "mmss_spdm_vfe1_div_clk", 2580 }, 2581 .num_parents = 1, 2582 .flags = CLK_SET_RATE_PARENT, 2583 .ops = &clk_branch2_ops, 2584 }, 2585 }, 2586 }; 2587 2588 static struct clk_branch mmss_spdm_rm_axi_clk = { 2589 .halt_reg = 0x0304, 2590 .clkr = { 2591 .enable_reg = 0x0304, 2592 .enable_mask = BIT(0), 2593 .hw.init = &(struct clk_init_data){ 2594 .name = "mmss_spdm_rm_axi_clk", 2595 .parent_names = (const char *[]){ 2596 "mmss_axi_clk_src", 2597 }, 2598 .num_parents = 1, 2599 .flags = CLK_SET_RATE_PARENT, 2600 .ops = &clk_branch2_ops, 2601 }, 2602 }, 2603 }; 2604 2605 static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = { 2606 .halt_reg = 0x0308, 2607 .clkr = { 2608 .enable_reg = 0x0308, 2609 .enable_mask = BIT(0), 2610 .hw.init = &(struct clk_init_data){ 2611 .name = "mmss_spdm_rm_ocmemnoc_clk", 2612 .parent_names = (const char *[]){ 2613 "ocmemnoc_clk_src", 2614 }, 2615 .num_parents = 1, 2616 .flags = CLK_SET_RATE_PARENT, 2617 .ops = &clk_branch2_ops, 2618 }, 2619 }, 2620 }; 2621 2622 2623 static struct clk_branch mmss_misc_ahb_clk = { 2624 .halt_reg = 0x502c, 2625 .clkr = { 2626 .enable_reg = 0x502c, 2627 .enable_mask = BIT(0), 2628 .hw.init = &(struct clk_init_data){ 2629 .name = "mmss_misc_ahb_clk", 2630 .parent_names = (const char *[]){ 2631 "mmss_ahb_clk_src", 2632 }, 2633 .num_parents = 1, 2634 .flags = CLK_SET_RATE_PARENT, 2635 .ops = &clk_branch2_ops, 2636 }, 2637 }, 2638 }; 2639 2640 static struct clk_branch mmss_mmssnoc_ahb_clk = { 2641 .halt_reg = 0x5024, 2642 .clkr = { 2643 .enable_reg = 0x5024, 2644 .enable_mask = BIT(0), 2645 .hw.init = &(struct clk_init_data){ 2646 .name = "mmss_mmssnoc_ahb_clk", 2647 .parent_names = (const char *[]){ 2648 "mmss_ahb_clk_src", 2649 }, 2650 .num_parents = 1, 2651 .ops = &clk_branch2_ops, 2652 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2653 }, 2654 }, 2655 }; 2656 2657 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = { 2658 .halt_reg = 0x5028, 2659 .clkr = { 2660 .enable_reg = 0x5028, 2661 .enable_mask = BIT(0), 2662 .hw.init = &(struct clk_init_data){ 2663 .name = "mmss_mmssnoc_bto_ahb_clk", 2664 .parent_names = (const char *[]){ 2665 "mmss_ahb_clk_src", 2666 }, 2667 .num_parents = 1, 2668 .ops = &clk_branch2_ops, 2669 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2670 }, 2671 }, 2672 }; 2673 2674 static struct clk_branch mmss_mmssnoc_axi_clk = { 2675 .halt_reg = 0x506c, 2676 .clkr = { 2677 .enable_reg = 0x506c, 2678 .enable_mask = BIT(0), 2679 .hw.init = &(struct clk_init_data){ 2680 .name = "mmss_mmssnoc_axi_clk", 2681 .parent_names = (const char *[]){ 2682 "mmss_axi_clk_src", 2683 }, 2684 .num_parents = 1, 2685 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2686 .ops = &clk_branch2_ops, 2687 }, 2688 }, 2689 }; 2690 2691 static struct clk_branch mmss_s0_axi_clk = { 2692 .halt_reg = 0x5064, 2693 .clkr = { 2694 .enable_reg = 0x5064, 2695 .enable_mask = BIT(0), 2696 .hw.init = &(struct clk_init_data){ 2697 .name = "mmss_s0_axi_clk", 2698 .parent_names = (const char *[]){ 2699 "mmss_axi_clk_src", 2700 }, 2701 .num_parents = 1, 2702 .ops = &clk_branch2_ops, 2703 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2704 }, 2705 }, 2706 }; 2707 2708 static struct clk_branch ocmemcx_ahb_clk = { 2709 .halt_reg = 0x405c, 2710 .clkr = { 2711 .enable_reg = 0x405c, 2712 .enable_mask = BIT(0), 2713 .hw.init = &(struct clk_init_data){ 2714 .name = "ocmemcx_ahb_clk", 2715 .parent_names = (const char *[]){ 2716 "mmss_ahb_clk_src", 2717 }, 2718 .num_parents = 1, 2719 .flags = CLK_SET_RATE_PARENT, 2720 .ops = &clk_branch2_ops, 2721 }, 2722 }, 2723 }; 2724 2725 static struct clk_branch ocmemcx_ocmemnoc_clk = { 2726 .halt_reg = 0x4058, 2727 .clkr = { 2728 .enable_reg = 0x4058, 2729 .enable_mask = BIT(0), 2730 .hw.init = &(struct clk_init_data){ 2731 .name = "ocmemcx_ocmemnoc_clk", 2732 .parent_names = (const char *[]){ 2733 "ocmemnoc_clk_src", 2734 }, 2735 .num_parents = 1, 2736 .flags = CLK_SET_RATE_PARENT, 2737 .ops = &clk_branch2_ops, 2738 }, 2739 }, 2740 }; 2741 2742 static struct clk_branch oxili_ocmemgx_clk = { 2743 .halt_reg = 0x402c, 2744 .clkr = { 2745 .enable_reg = 0x402c, 2746 .enable_mask = BIT(0), 2747 .hw.init = &(struct clk_init_data){ 2748 .name = "oxili_ocmemgx_clk", 2749 .parent_names = (const char *[]){ 2750 "gfx3d_clk_src", 2751 }, 2752 .num_parents = 1, 2753 .flags = CLK_SET_RATE_PARENT, 2754 .ops = &clk_branch2_ops, 2755 }, 2756 }, 2757 }; 2758 2759 static struct clk_branch oxili_gfx3d_clk = { 2760 .halt_reg = 0x4028, 2761 .clkr = { 2762 .enable_reg = 0x4028, 2763 .enable_mask = BIT(0), 2764 .hw.init = &(struct clk_init_data){ 2765 .name = "oxili_gfx3d_clk", 2766 .parent_names = (const char *[]){ 2767 "gfx3d_clk_src", 2768 }, 2769 .num_parents = 1, 2770 .flags = CLK_SET_RATE_PARENT, 2771 .ops = &clk_branch2_ops, 2772 }, 2773 }, 2774 }; 2775 2776 static struct clk_branch oxili_rbbmtimer_clk = { 2777 .halt_reg = 0x40b0, 2778 .clkr = { 2779 .enable_reg = 0x40b0, 2780 .enable_mask = BIT(0), 2781 .hw.init = &(struct clk_init_data){ 2782 .name = "oxili_rbbmtimer_clk", 2783 .parent_names = (const char *[]){ 2784 "rbbmtimer_clk_src", 2785 }, 2786 .num_parents = 1, 2787 .flags = CLK_SET_RATE_PARENT, 2788 .ops = &clk_branch2_ops, 2789 }, 2790 }, 2791 }; 2792 2793 static struct clk_branch oxilicx_ahb_clk = { 2794 .halt_reg = 0x403c, 2795 .clkr = { 2796 .enable_reg = 0x403c, 2797 .enable_mask = BIT(0), 2798 .hw.init = &(struct clk_init_data){ 2799 .name = "oxilicx_ahb_clk", 2800 .parent_names = (const char *[]){ 2801 "mmss_ahb_clk_src", 2802 }, 2803 .num_parents = 1, 2804 .flags = CLK_SET_RATE_PARENT, 2805 .ops = &clk_branch2_ops, 2806 }, 2807 }, 2808 }; 2809 2810 static struct clk_branch venus0_ahb_clk = { 2811 .halt_reg = 0x1030, 2812 .clkr = { 2813 .enable_reg = 0x1030, 2814 .enable_mask = BIT(0), 2815 .hw.init = &(struct clk_init_data){ 2816 .name = "venus0_ahb_clk", 2817 .parent_names = (const char *[]){ 2818 "mmss_ahb_clk_src", 2819 }, 2820 .num_parents = 1, 2821 .flags = CLK_SET_RATE_PARENT, 2822 .ops = &clk_branch2_ops, 2823 }, 2824 }, 2825 }; 2826 2827 static struct clk_branch venus0_axi_clk = { 2828 .halt_reg = 0x1034, 2829 .clkr = { 2830 .enable_reg = 0x1034, 2831 .enable_mask = BIT(0), 2832 .hw.init = &(struct clk_init_data){ 2833 .name = "venus0_axi_clk", 2834 .parent_names = (const char *[]){ 2835 "mmss_axi_clk_src", 2836 }, 2837 .num_parents = 1, 2838 .flags = CLK_SET_RATE_PARENT, 2839 .ops = &clk_branch2_ops, 2840 }, 2841 }, 2842 }; 2843 2844 static struct clk_branch venus0_core0_vcodec_clk = { 2845 .halt_reg = 0x1048, 2846 .clkr = { 2847 .enable_reg = 0x1048, 2848 .enable_mask = BIT(0), 2849 .hw.init = &(struct clk_init_data){ 2850 .name = "venus0_core0_vcodec_clk", 2851 .parent_names = (const char *[]){ 2852 "vcodec0_clk_src", 2853 }, 2854 .num_parents = 1, 2855 .flags = CLK_SET_RATE_PARENT, 2856 .ops = &clk_branch2_ops, 2857 }, 2858 }, 2859 }; 2860 2861 static struct clk_branch venus0_core1_vcodec_clk = { 2862 .halt_reg = 0x104c, 2863 .clkr = { 2864 .enable_reg = 0x104c, 2865 .enable_mask = BIT(0), 2866 .hw.init = &(struct clk_init_data){ 2867 .name = "venus0_core1_vcodec_clk", 2868 .parent_names = (const char *[]){ 2869 "vcodec0_clk_src", 2870 }, 2871 .num_parents = 1, 2872 .flags = CLK_SET_RATE_PARENT, 2873 .ops = &clk_branch2_ops, 2874 }, 2875 }, 2876 }; 2877 2878 static struct clk_branch venus0_ocmemnoc_clk = { 2879 .halt_reg = 0x1038, 2880 .clkr = { 2881 .enable_reg = 0x1038, 2882 .enable_mask = BIT(0), 2883 .hw.init = &(struct clk_init_data){ 2884 .name = "venus0_ocmemnoc_clk", 2885 .parent_names = (const char *[]){ 2886 "ocmemnoc_clk_src", 2887 }, 2888 .num_parents = 1, 2889 .flags = CLK_SET_RATE_PARENT, 2890 .ops = &clk_branch2_ops, 2891 }, 2892 }, 2893 }; 2894 2895 static struct clk_branch venus0_vcodec0_clk = { 2896 .halt_reg = 0x1028, 2897 .clkr = { 2898 .enable_reg = 0x1028, 2899 .enable_mask = BIT(0), 2900 .hw.init = &(struct clk_init_data){ 2901 .name = "venus0_vcodec0_clk", 2902 .parent_names = (const char *[]){ 2903 "vcodec0_clk_src", 2904 }, 2905 .num_parents = 1, 2906 .flags = CLK_SET_RATE_PARENT, 2907 .ops = &clk_branch2_ops, 2908 }, 2909 }, 2910 }; 2911 2912 static struct clk_branch vpu_ahb_clk = { 2913 .halt_reg = 0x1430, 2914 .clkr = { 2915 .enable_reg = 0x1430, 2916 .enable_mask = BIT(0), 2917 .hw.init = &(struct clk_init_data){ 2918 .name = "vpu_ahb_clk", 2919 .parent_names = (const char *[]){ 2920 "mmss_ahb_clk_src", 2921 }, 2922 .num_parents = 1, 2923 .flags = CLK_SET_RATE_PARENT, 2924 .ops = &clk_branch2_ops, 2925 }, 2926 }, 2927 }; 2928 2929 static struct clk_branch vpu_axi_clk = { 2930 .halt_reg = 0x143c, 2931 .clkr = { 2932 .enable_reg = 0x143c, 2933 .enable_mask = BIT(0), 2934 .hw.init = &(struct clk_init_data){ 2935 .name = "vpu_axi_clk", 2936 .parent_names = (const char *[]){ 2937 "mmss_axi_clk_src", 2938 }, 2939 .num_parents = 1, 2940 .flags = CLK_SET_RATE_PARENT, 2941 .ops = &clk_branch2_ops, 2942 }, 2943 }, 2944 }; 2945 2946 static struct clk_branch vpu_bus_clk = { 2947 .halt_reg = 0x1440, 2948 .clkr = { 2949 .enable_reg = 0x1440, 2950 .enable_mask = BIT(0), 2951 .hw.init = &(struct clk_init_data){ 2952 .name = "vpu_bus_clk", 2953 .parent_names = (const char *[]){ 2954 "vpu_bus_clk_src", 2955 }, 2956 .num_parents = 1, 2957 .flags = CLK_SET_RATE_PARENT, 2958 .ops = &clk_branch2_ops, 2959 }, 2960 }, 2961 }; 2962 2963 static struct clk_branch vpu_cxo_clk = { 2964 .halt_reg = 0x1434, 2965 .clkr = { 2966 .enable_reg = 0x1434, 2967 .enable_mask = BIT(0), 2968 .hw.init = &(struct clk_init_data){ 2969 .name = "vpu_cxo_clk", 2970 .parent_names = (const char *[]){ "xo" }, 2971 .num_parents = 1, 2972 .flags = CLK_SET_RATE_PARENT, 2973 .ops = &clk_branch2_ops, 2974 }, 2975 }, 2976 }; 2977 2978 static struct clk_branch vpu_maple_clk = { 2979 .halt_reg = 0x142c, 2980 .clkr = { 2981 .enable_reg = 0x142c, 2982 .enable_mask = BIT(0), 2983 .hw.init = &(struct clk_init_data){ 2984 .name = "vpu_maple_clk", 2985 .parent_names = (const char *[]){ 2986 "maple_clk_src", 2987 }, 2988 .num_parents = 1, 2989 .flags = CLK_SET_RATE_PARENT, 2990 .ops = &clk_branch2_ops, 2991 }, 2992 }, 2993 }; 2994 2995 static struct clk_branch vpu_sleep_clk = { 2996 .halt_reg = 0x1438, 2997 .clkr = { 2998 .enable_reg = 0x1438, 2999 .enable_mask = BIT(0), 3000 .hw.init = &(struct clk_init_data){ 3001 .name = "vpu_sleep_clk", 3002 .parent_names = (const char *[]){ 3003 "sleep_clk_src", 3004 }, 3005 .num_parents = 1, 3006 .flags = CLK_SET_RATE_PARENT, 3007 .ops = &clk_branch2_ops, 3008 }, 3009 }, 3010 }; 3011 3012 static struct clk_branch vpu_vdp_clk = { 3013 .halt_reg = 0x1428, 3014 .clkr = { 3015 .enable_reg = 0x1428, 3016 .enable_mask = BIT(0), 3017 .hw.init = &(struct clk_init_data){ 3018 .name = "vpu_vdp_clk", 3019 .parent_names = (const char *[]){ 3020 "vdp_clk_src", 3021 }, 3022 .num_parents = 1, 3023 .flags = CLK_SET_RATE_PARENT, 3024 .ops = &clk_branch2_ops, 3025 }, 3026 }, 3027 }; 3028 3029 static const struct pll_config mmpll1_config = { 3030 .l = 60, 3031 .m = 25, 3032 .n = 32, 3033 .vco_val = 0x0, 3034 .vco_mask = 0x3 << 20, 3035 .pre_div_val = 0x0, 3036 .pre_div_mask = 0x7 << 12, 3037 .post_div_val = 0x0, 3038 .post_div_mask = 0x3 << 8, 3039 .mn_ena_mask = BIT(24), 3040 .main_output_mask = BIT(0), 3041 }; 3042 3043 static const struct pll_config mmpll3_config = { 3044 .l = 48, 3045 .m = 7, 3046 .n = 16, 3047 .vco_val = 0x0, 3048 .vco_mask = 0x3 << 20, 3049 .pre_div_val = 0x0, 3050 .pre_div_mask = 0x7 << 12, 3051 .post_div_val = 0x0, 3052 .post_div_mask = 0x3 << 8, 3053 .mn_ena_mask = BIT(24), 3054 .main_output_mask = BIT(0), 3055 .aux_output_mask = BIT(1), 3056 }; 3057 3058 static struct gdsc venus0_gdsc = { 3059 .gdscr = 0x1024, 3060 .pd = { 3061 .name = "venus0", 3062 }, 3063 .pwrsts = PWRSTS_OFF_ON, 3064 }; 3065 3066 static struct gdsc venus0_core0_gdsc = { 3067 .gdscr = 0x1040, 3068 .pd = { 3069 .name = "venus0_core0", 3070 }, 3071 .pwrsts = PWRSTS_OFF_ON, 3072 }; 3073 3074 static struct gdsc venus0_core1_gdsc = { 3075 .gdscr = 0x1044, 3076 .pd = { 3077 .name = "venus0_core1", 3078 }, 3079 .pwrsts = PWRSTS_OFF_ON, 3080 }; 3081 3082 static struct gdsc mdss_gdsc = { 3083 .gdscr = 0x2304, 3084 .cxcs = (unsigned int []){ 0x231c, 0x2320 }, 3085 .cxc_count = 2, 3086 .pd = { 3087 .name = "mdss", 3088 }, 3089 .pwrsts = PWRSTS_OFF_ON, 3090 }; 3091 3092 static struct gdsc camss_jpeg_gdsc = { 3093 .gdscr = 0x35a4, 3094 .pd = { 3095 .name = "camss_jpeg", 3096 }, 3097 .pwrsts = PWRSTS_OFF_ON, 3098 }; 3099 3100 static struct gdsc camss_vfe_gdsc = { 3101 .gdscr = 0x36a4, 3102 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 }, 3103 .cxc_count = 3, 3104 .pd = { 3105 .name = "camss_vfe", 3106 }, 3107 .pwrsts = PWRSTS_OFF_ON, 3108 }; 3109 3110 static struct gdsc oxili_gdsc = { 3111 .gdscr = 0x4024, 3112 .cxcs = (unsigned int []){ 0x4028 }, 3113 .cxc_count = 1, 3114 .pd = { 3115 .name = "oxili", 3116 }, 3117 .pwrsts = PWRSTS_OFF_ON, 3118 }; 3119 3120 static struct gdsc oxilicx_gdsc = { 3121 .gdscr = 0x4034, 3122 .pd = { 3123 .name = "oxilicx", 3124 }, 3125 .pwrsts = PWRSTS_OFF_ON, 3126 }; 3127 3128 static struct clk_regmap *mmcc_apq8084_clocks[] = { 3129 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr, 3130 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr, 3131 [MMPLL0] = &mmpll0.clkr, 3132 [MMPLL0_VOTE] = &mmpll0_vote, 3133 [MMPLL1] = &mmpll1.clkr, 3134 [MMPLL1_VOTE] = &mmpll1_vote, 3135 [MMPLL2] = &mmpll2.clkr, 3136 [MMPLL3] = &mmpll3.clkr, 3137 [MMPLL4] = &mmpll4.clkr, 3138 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3139 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3140 [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3141 [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 3142 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3143 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3144 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3145 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3146 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3147 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3148 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr, 3149 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 3150 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3151 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr, 3152 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr, 3153 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr, 3154 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 3155 [VP_CLK_SRC] = &vp_clk_src.clkr, 3156 [CCI_CLK_SRC] = &cci_clk_src.clkr, 3157 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3158 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3159 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3160 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3161 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 3162 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 3163 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3164 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3165 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 3166 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3167 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3168 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3169 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr, 3170 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr, 3171 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3172 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3173 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 3174 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3175 [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr, 3176 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr, 3177 [MAPLE_CLK_SRC] = &maple_clk_src.clkr, 3178 [VDP_CLK_SRC] = &vdp_clk_src.clkr, 3179 [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr, 3180 [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr, 3181 [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr, 3182 [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr, 3183 [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr, 3184 [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr, 3185 [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr, 3186 [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr, 3187 [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr, 3188 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 3189 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr, 3190 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr, 3191 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 3192 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 3193 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr, 3194 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 3195 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 3196 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 3197 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 3198 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr, 3199 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 3200 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 3201 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 3202 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 3203 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr, 3204 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 3205 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 3206 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 3207 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 3208 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr, 3209 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 3210 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 3211 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 3212 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 3213 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr, 3214 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr, 3215 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 3216 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr, 3217 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr, 3218 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr, 3219 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr, 3220 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr, 3221 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 3222 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 3223 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 3224 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 3225 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 3226 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr, 3227 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr, 3228 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr, 3229 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 3230 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr, 3231 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr, 3232 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr, 3233 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr, 3234 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr, 3235 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr, 3236 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 3237 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 3238 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 3239 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 3240 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr, 3241 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr, 3242 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr, 3243 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 3244 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 3245 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 3246 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr, 3247 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 3248 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 3249 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr, 3250 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 3251 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 3252 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 3253 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr, 3254 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr, 3255 [MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr, 3256 [MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr, 3257 [MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr, 3258 [MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr, 3259 [MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr, 3260 [MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr, 3261 [MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr, 3262 [MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr, 3263 [MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr, 3264 [MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr, 3265 [MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr, 3266 [MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr, 3267 [MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr, 3268 [MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr, 3269 [MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr, 3270 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr, 3271 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr, 3272 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr, 3273 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr, 3274 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr, 3275 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr, 3276 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr, 3277 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr, 3278 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr, 3279 [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr, 3280 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr, 3281 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr, 3282 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr, 3283 [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr, 3284 [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr, 3285 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr, 3286 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr, 3287 [VPU_AHB_CLK] = &vpu_ahb_clk.clkr, 3288 [VPU_AXI_CLK] = &vpu_axi_clk.clkr, 3289 [VPU_BUS_CLK] = &vpu_bus_clk.clkr, 3290 [VPU_CXO_CLK] = &vpu_cxo_clk.clkr, 3291 [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr, 3292 [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr, 3293 [VPU_VDP_CLK] = &vpu_vdp_clk.clkr, 3294 }; 3295 3296 static const struct qcom_reset_map mmcc_apq8084_resets[] = { 3297 [MMSS_SPDM_RESET] = { 0x0200 }, 3298 [MMSS_SPDM_RM_RESET] = { 0x0300 }, 3299 [VENUS0_RESET] = { 0x1020 }, 3300 [VPU_RESET] = { 0x1400 }, 3301 [MDSS_RESET] = { 0x2300 }, 3302 [AVSYNC_RESET] = { 0x2400 }, 3303 [CAMSS_PHY0_RESET] = { 0x3020 }, 3304 [CAMSS_PHY1_RESET] = { 0x3050 }, 3305 [CAMSS_PHY2_RESET] = { 0x3080 }, 3306 [CAMSS_CSI0_RESET] = { 0x30b0 }, 3307 [CAMSS_CSI0PHY_RESET] = { 0x30c0 }, 3308 [CAMSS_CSI0RDI_RESET] = { 0x30d0 }, 3309 [CAMSS_CSI0PIX_RESET] = { 0x30e0 }, 3310 [CAMSS_CSI1_RESET] = { 0x3120 }, 3311 [CAMSS_CSI1PHY_RESET] = { 0x3130 }, 3312 [CAMSS_CSI1RDI_RESET] = { 0x3140 }, 3313 [CAMSS_CSI1PIX_RESET] = { 0x3150 }, 3314 [CAMSS_CSI2_RESET] = { 0x3180 }, 3315 [CAMSS_CSI2PHY_RESET] = { 0x3190 }, 3316 [CAMSS_CSI2RDI_RESET] = { 0x31a0 }, 3317 [CAMSS_CSI2PIX_RESET] = { 0x31b0 }, 3318 [CAMSS_CSI3_RESET] = { 0x31e0 }, 3319 [CAMSS_CSI3PHY_RESET] = { 0x31f0 }, 3320 [CAMSS_CSI3RDI_RESET] = { 0x3200 }, 3321 [CAMSS_CSI3PIX_RESET] = { 0x3210 }, 3322 [CAMSS_ISPIF_RESET] = { 0x3220 }, 3323 [CAMSS_CCI_RESET] = { 0x3340 }, 3324 [CAMSS_MCLK0_RESET] = { 0x3380 }, 3325 [CAMSS_MCLK1_RESET] = { 0x33b0 }, 3326 [CAMSS_MCLK2_RESET] = { 0x33e0 }, 3327 [CAMSS_MCLK3_RESET] = { 0x3410 }, 3328 [CAMSS_GP0_RESET] = { 0x3440 }, 3329 [CAMSS_GP1_RESET] = { 0x3470 }, 3330 [CAMSS_TOP_RESET] = { 0x3480 }, 3331 [CAMSS_AHB_RESET] = { 0x3488 }, 3332 [CAMSS_MICRO_RESET] = { 0x3490 }, 3333 [CAMSS_JPEG_RESET] = { 0x35a0 }, 3334 [CAMSS_VFE_RESET] = { 0x36a0 }, 3335 [CAMSS_CSI_VFE0_RESET] = { 0x3700 }, 3336 [CAMSS_CSI_VFE1_RESET] = { 0x3710 }, 3337 [OXILI_RESET] = { 0x4020 }, 3338 [OXILICX_RESET] = { 0x4030 }, 3339 [OCMEMCX_RESET] = { 0x4050 }, 3340 [MMSS_RBCRP_RESET] = { 0x4080 }, 3341 [MMSSNOCAHB_RESET] = { 0x5020 }, 3342 [MMSSNOCAXI_RESET] = { 0x5060 }, 3343 }; 3344 3345 static struct gdsc *mmcc_apq8084_gdscs[] = { 3346 [VENUS0_GDSC] = &venus0_gdsc, 3347 [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc, 3348 [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc, 3349 [MDSS_GDSC] = &mdss_gdsc, 3350 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc, 3351 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc, 3352 [OXILI_GDSC] = &oxili_gdsc, 3353 [OXILICX_GDSC] = &oxilicx_gdsc, 3354 }; 3355 3356 static const struct regmap_config mmcc_apq8084_regmap_config = { 3357 .reg_bits = 32, 3358 .reg_stride = 4, 3359 .val_bits = 32, 3360 .max_register = 0x5104, 3361 .fast_io = true, 3362 }; 3363 3364 static const struct qcom_cc_desc mmcc_apq8084_desc = { 3365 .config = &mmcc_apq8084_regmap_config, 3366 .clks = mmcc_apq8084_clocks, 3367 .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks), 3368 .resets = mmcc_apq8084_resets, 3369 .num_resets = ARRAY_SIZE(mmcc_apq8084_resets), 3370 .gdscs = mmcc_apq8084_gdscs, 3371 .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs), 3372 }; 3373 3374 static const struct of_device_id mmcc_apq8084_match_table[] = { 3375 { .compatible = "qcom,mmcc-apq8084" }, 3376 { } 3377 }; 3378 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table); 3379 3380 static int mmcc_apq8084_probe(struct platform_device *pdev) 3381 { 3382 int ret; 3383 struct regmap *regmap; 3384 3385 ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc); 3386 if (ret) 3387 return ret; 3388 3389 regmap = dev_get_regmap(&pdev->dev, NULL); 3390 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true); 3391 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false); 3392 3393 return 0; 3394 } 3395 3396 static struct platform_driver mmcc_apq8084_driver = { 3397 .probe = mmcc_apq8084_probe, 3398 .driver = { 3399 .name = "mmcc-apq8084", 3400 .of_match_table = mmcc_apq8084_match_table, 3401 }, 3402 }; 3403 module_platform_driver(mmcc_apq8084_driver); 3404 3405 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver"); 3406 MODULE_LICENSE("GPL v2"); 3407 MODULE_ALIAS("platform:mmcc-apq8084"); 3408