3468 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright 2015 Linaro Limited4 */5 6#include <linux/kernel.h>7#include <linux/bitops.h>8#include <linux/err.h>9#include <linux/platform_device.h>10#include <linux/module.h>11#include <linux/of.h>12#include <linux/clk-provider.h>13#include <linux/regmap.h>14#include <linux/reset-controller.h>15 16#include <dt-bindings/clock/qcom,gcc-msm8916.h>17#include <dt-bindings/reset/qcom,gcc-msm8916.h>18 19#include "common.h"20#include "clk-regmap.h"21#include "clk-pll.h"22#include "clk-rcg.h"23#include "clk-branch.h"24#include "reset.h"25#include "gdsc.h"26 27enum {28 P_XO,29 P_GPLL0,30 P_GPLL0_AUX,31 P_BIMC,32 P_GPLL1,33 P_GPLL1_AUX,34 P_GPLL2,35 P_GPLL2_AUX,36 P_SLEEP_CLK,37 P_DSI0_PHYPLL_BYTE,38 P_DSI0_PHYPLL_DSI,39 P_EXT_PRI_I2S,40 P_EXT_SEC_I2S,41 P_EXT_MCLK,42};43 44static struct clk_pll gpll0 = {45 .l_reg = 0x21004,46 .m_reg = 0x21008,47 .n_reg = 0x2100c,48 .config_reg = 0x21010,49 .mode_reg = 0x21000,50 .status_reg = 0x2101c,51 .status_bit = 17,52 .clkr.hw.init = &(struct clk_init_data){53 .name = "gpll0",54 .parent_data = &(const struct clk_parent_data){55 .fw_name = "xo", .name = "xo_board",56 },57 .num_parents = 1,58 .ops = &clk_pll_ops,59 },60};61 62static struct clk_regmap gpll0_vote = {63 .enable_reg = 0x45000,64 .enable_mask = BIT(0),65 .hw.init = &(struct clk_init_data){66 .name = "gpll0_vote",67 .parent_hws = (const struct clk_hw*[]){68 &gpll0.clkr.hw,69 },70 .num_parents = 1,71 .ops = &clk_pll_vote_ops,72 },73};74 75static struct clk_pll gpll1 = {76 .l_reg = 0x20004,77 .m_reg = 0x20008,78 .n_reg = 0x2000c,79 .config_reg = 0x20010,80 .mode_reg = 0x20000,81 .status_reg = 0x2001c,82 .status_bit = 17,83 .clkr.hw.init = &(struct clk_init_data){84 .name = "gpll1",85 .parent_data = &(const struct clk_parent_data){86 .fw_name = "xo", .name = "xo_board",87 },88 .num_parents = 1,89 .ops = &clk_pll_ops,90 },91};92 93static struct clk_regmap gpll1_vote = {94 .enable_reg = 0x45000,95 .enable_mask = BIT(1),96 .hw.init = &(struct clk_init_data){97 .name = "gpll1_vote",98 .parent_hws = (const struct clk_hw*[]){99 &gpll1.clkr.hw,100 },101 .num_parents = 1,102 .ops = &clk_pll_vote_ops,103 },104};105 106static struct clk_pll gpll2 = {107 .l_reg = 0x4a004,108 .m_reg = 0x4a008,109 .n_reg = 0x4a00c,110 .config_reg = 0x4a010,111 .mode_reg = 0x4a000,112 .status_reg = 0x4a01c,113 .status_bit = 17,114 .clkr.hw.init = &(struct clk_init_data){115 .name = "gpll2",116 .parent_data = &(const struct clk_parent_data){117 .fw_name = "xo", .name = "xo_board",118 },119 .num_parents = 1,120 .ops = &clk_pll_ops,121 },122};123 124static struct clk_regmap gpll2_vote = {125 .enable_reg = 0x45000,126 .enable_mask = BIT(2),127 .hw.init = &(struct clk_init_data){128 .name = "gpll2_vote",129 .parent_hws = (const struct clk_hw*[]){130 &gpll2.clkr.hw,131 },132 .num_parents = 1,133 .ops = &clk_pll_vote_ops,134 },135};136 137static struct clk_pll bimc_pll = {138 .l_reg = 0x23004,139 .m_reg = 0x23008,140 .n_reg = 0x2300c,141 .config_reg = 0x23010,142 .mode_reg = 0x23000,143 .status_reg = 0x2301c,144 .status_bit = 17,145 .clkr.hw.init = &(struct clk_init_data){146 .name = "bimc_pll",147 .parent_data = &(const struct clk_parent_data){148 .fw_name = "xo", .name = "xo_board",149 },150 .num_parents = 1,151 .ops = &clk_pll_ops,152 },153};154 155static struct clk_regmap bimc_pll_vote = {156 .enable_reg = 0x45000,157 .enable_mask = BIT(3),158 .hw.init = &(struct clk_init_data){159 .name = "bimc_pll_vote",160 .parent_hws = (const struct clk_hw*[]){161 &bimc_pll.clkr.hw,162 },163 .num_parents = 1,164 .ops = &clk_pll_vote_ops,165 },166};167 168static const struct parent_map gcc_xo_gpll0_map[] = {169 { P_XO, 0 },170 { P_GPLL0, 1 },171};172 173static const struct clk_parent_data gcc_xo_gpll0[] = {174 { .fw_name = "xo", .name = "xo_board" },175 { .hw = &gpll0_vote.hw },176};177 178static const struct parent_map gcc_xo_gpll0_bimc_map[] = {179 { P_XO, 0 },180 { P_GPLL0, 1 },181 { P_BIMC, 2 },182};183 184static const struct clk_parent_data gcc_xo_gpll0_bimc[] = {185 { .fw_name = "xo", .name = "xo_board" },186 { .hw = &gpll0_vote.hw },187 { .hw = &bimc_pll_vote.hw },188};189 190static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2a_map[] = {191 { P_XO, 0 },192 { P_GPLL0_AUX, 3 },193 { P_GPLL1, 1 },194 { P_GPLL2_AUX, 2 },195};196 197static const struct clk_parent_data gcc_xo_gpll0a_gpll1_gpll2a[] = {198 { .fw_name = "xo", .name = "xo_board" },199 { .hw = &gpll0_vote.hw },200 { .hw = &gpll1_vote.hw },201 { .hw = &gpll2_vote.hw },202};203 204static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {205 { P_XO, 0 },206 { P_GPLL0, 1 },207 { P_GPLL2, 2 },208};209 210static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {211 { .fw_name = "xo", .name = "xo_board" },212 { .hw = &gpll0_vote.hw },213 { .hw = &gpll2_vote.hw },214};215 216static const struct parent_map gcc_xo_gpll0a_map[] = {217 { P_XO, 0 },218 { P_GPLL0_AUX, 2 },219};220 221static const struct clk_parent_data gcc_xo_gpll0a[] = {222 { .fw_name = "xo", .name = "xo_board" },223 { .hw = &gpll0_vote.hw },224};225 226static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {227 { P_XO, 0 },228 { P_GPLL0, 1 },229 { P_GPLL1_AUX, 2 },230 { P_SLEEP_CLK, 6 },231};232 233static const struct clk_parent_data gcc_xo_gpll0_gpll1a_sleep[] = {234 { .fw_name = "xo", .name = "xo_board" },235 { .hw = &gpll0_vote.hw },236 { .hw = &gpll1_vote.hw },237 { .fw_name = "sleep_clk", .name = "sleep_clk" },238};239 240static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {241 { P_XO, 0 },242 { P_GPLL0, 1 },243 { P_GPLL1_AUX, 2 },244};245 246static const struct clk_parent_data gcc_xo_gpll0_gpll1a[] = {247 { .fw_name = "xo", .name = "xo_board" },248 { .hw = &gpll0_vote.hw },249 { .hw = &gpll1_vote.hw },250};251 252static const struct parent_map gcc_xo_dsibyte_map[] = {253 { P_XO, 0, },254 { P_DSI0_PHYPLL_BYTE, 2 },255};256 257static const struct clk_parent_data gcc_xo_dsibyte[] = {258 { .fw_name = "xo", .name = "xo_board" },259 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },260};261 262static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {263 { P_XO, 0 },264 { P_GPLL0_AUX, 2 },265 { P_DSI0_PHYPLL_BYTE, 1 },266};267 268static const struct clk_parent_data gcc_xo_gpll0a_dsibyte[] = {269 { .fw_name = "xo", .name = "xo_board" },270 { .hw = &gpll0_vote.hw },271 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },272};273 274static const struct parent_map gcc_xo_gpll0_dsiphy_map[] = {275 { P_XO, 0 },276 { P_GPLL0, 1 },277 { P_DSI0_PHYPLL_DSI, 2 },278};279 280static const struct clk_parent_data gcc_xo_gpll0_dsiphy[] = {281 { .fw_name = "xo", .name = "xo_board" },282 { .hw = &gpll0_vote.hw },283 { .fw_name = "dsi0pll", .name = "dsi0pll" },284};285 286static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {287 { P_XO, 0 },288 { P_GPLL0_AUX, 2 },289 { P_DSI0_PHYPLL_DSI, 1 },290};291 292static const struct clk_parent_data gcc_xo_gpll0a_dsiphy[] = {293 { .fw_name = "xo", .name = "xo_board" },294 { .hw = &gpll0_vote.hw },295 { .fw_name = "dsi0pll", .name = "dsi0pll" },296};297 298static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2_map[] = {299 { P_XO, 0 },300 { P_GPLL0_AUX, 1 },301 { P_GPLL1, 3 },302 { P_GPLL2, 2 },303};304 305static const struct clk_parent_data gcc_xo_gpll0a_gpll1_gpll2[] = {306 { .fw_name = "xo", .name = "xo_board" },307 { .hw = &gpll0_vote.hw },308 { .hw = &gpll1_vote.hw },309 { .hw = &gpll2_vote.hw },310};311 312static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {313 { P_XO, 0 },314 { P_GPLL0, 1 },315 { P_GPLL1, 2 },316 { P_SLEEP_CLK, 6 }317};318 319static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep[] = {320 { .fw_name = "xo", .name = "xo_board" },321 { .hw = &gpll0_vote.hw },322 { .hw = &gpll1_vote.hw },323 { .fw_name = "sleep_clk", .name = "sleep_clk" },324};325 326static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {327 { P_XO, 0 },328 { P_GPLL1, 1 },329 { P_EXT_PRI_I2S, 2 },330 { P_EXT_MCLK, 3 },331 { P_SLEEP_CLK, 6 }332};333 334static const struct clk_parent_data gcc_xo_gpll1_epi2s_emclk_sleep[] = {335 { .fw_name = "xo", .name = "xo_board" },336 { .hw = &gpll1_vote.hw },337 { .fw_name = "ext_pri_i2s", .name = "ext_pri_i2s" },338 { .fw_name = "ext_mclk", .name = "ext_mclk" },339 { .fw_name = "sleep_clk", .name = "sleep_clk" },340};341 342static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {343 { P_XO, 0 },344 { P_GPLL1, 1 },345 { P_EXT_SEC_I2S, 2 },346 { P_EXT_MCLK, 3 },347 { P_SLEEP_CLK, 6 }348};349 350static const struct clk_parent_data gcc_xo_gpll1_esi2s_emclk_sleep[] = {351 { .fw_name = "xo", .name = "xo_board" },352 { .hw = &gpll1_vote.hw },353 { .fw_name = "ext_sec_i2s", .name = "ext_sec_i2s" },354 { .fw_name = "ext_mclk", .name = "ext_mclk" },355 { .fw_name = "sleep_clk", .name = "sleep_clk" },356};357 358static const struct parent_map gcc_xo_sleep_map[] = {359 { P_XO, 0 },360 { P_SLEEP_CLK, 6 }361};362 363static const struct clk_parent_data gcc_xo_sleep[] = {364 { .fw_name = "xo", .name = "xo_board" },365 { .fw_name = "sleep_clk", .name = "sleep_clk" },366};367 368static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {369 { P_XO, 0 },370 { P_GPLL1, 1 },371 { P_EXT_MCLK, 2 },372 { P_SLEEP_CLK, 6 }373};374 375static const struct clk_parent_data gcc_xo_gpll1_emclk_sleep[] = {376 { .fw_name = "xo", .name = "xo_board" },377 { .hw = &gpll1_vote.hw },378 { .fw_name = "ext_mclk", .name = "ext_mclk" },379 { .fw_name = "sleep_clk", .name = "sleep_clk" },380};381 382static struct clk_rcg2 pcnoc_bfdcd_clk_src = {383 .cmd_rcgr = 0x27000,384 .hid_width = 5,385 .parent_map = gcc_xo_gpll0_bimc_map,386 .clkr.hw.init = &(struct clk_init_data){387 .name = "pcnoc_bfdcd_clk_src",388 .parent_data = gcc_xo_gpll0_bimc,389 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),390 .ops = &clk_rcg2_ops,391 },392};393 394static struct clk_rcg2 system_noc_bfdcd_clk_src = {395 .cmd_rcgr = 0x26004,396 .hid_width = 5,397 .parent_map = gcc_xo_gpll0_bimc_map,398 .clkr.hw.init = &(struct clk_init_data){399 .name = "system_noc_bfdcd_clk_src",400 .parent_data = gcc_xo_gpll0_bimc,401 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),402 .ops = &clk_rcg2_ops,403 },404};405 406static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {407 F(40000000, P_GPLL0, 10, 1, 2),408 F(80000000, P_GPLL0, 10, 0, 0),409 { }410};411 412static struct clk_rcg2 camss_ahb_clk_src = {413 .cmd_rcgr = 0x5a000,414 .mnd_width = 8,415 .hid_width = 5,416 .parent_map = gcc_xo_gpll0_map,417 .freq_tbl = ftbl_gcc_camss_ahb_clk,418 .clkr.hw.init = &(struct clk_init_data){419 .name = "camss_ahb_clk_src",420 .parent_data = gcc_xo_gpll0,421 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),422 .ops = &clk_rcg2_ops,423 },424};425 426static const struct freq_tbl ftbl_apss_ahb_clk[] = {427 F(19200000, P_XO, 1, 0, 0),428 F(50000000, P_GPLL0, 16, 0, 0),429 F(100000000, P_GPLL0, 8, 0, 0),430 F(133330000, P_GPLL0, 6, 0, 0),431 { }432};433 434static struct clk_rcg2 apss_ahb_clk_src = {435 .cmd_rcgr = 0x46000,436 .hid_width = 5,437 .parent_map = gcc_xo_gpll0_map,438 .freq_tbl = ftbl_apss_ahb_clk,439 .clkr.hw.init = &(struct clk_init_data){440 .name = "apss_ahb_clk_src",441 .parent_data = gcc_xo_gpll0,442 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),443 .ops = &clk_rcg2_ops,444 },445};446 447static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = {448 F(100000000, P_GPLL0, 8, 0, 0),449 F(200000000, P_GPLL0, 4, 0, 0),450 { }451};452 453static struct clk_rcg2 csi0_clk_src = {454 .cmd_rcgr = 0x4e020,455 .hid_width = 5,456 .parent_map = gcc_xo_gpll0_map,457 .freq_tbl = ftbl_gcc_camss_csi0_1_clk,458 .clkr.hw.init = &(struct clk_init_data){459 .name = "csi0_clk_src",460 .parent_data = gcc_xo_gpll0,461 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),462 .ops = &clk_rcg2_ops,463 },464};465 466static struct clk_rcg2 csi1_clk_src = {467 .cmd_rcgr = 0x4f020,468 .hid_width = 5,469 .parent_map = gcc_xo_gpll0_map,470 .freq_tbl = ftbl_gcc_camss_csi0_1_clk,471 .clkr.hw.init = &(struct clk_init_data){472 .name = "csi1_clk_src",473 .parent_data = gcc_xo_gpll0,474 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),475 .ops = &clk_rcg2_ops,476 },477};478 479static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {480 F(19200000, P_XO, 1, 0, 0),481 F(50000000, P_GPLL0_AUX, 16, 0, 0),482 F(80000000, P_GPLL0_AUX, 10, 0, 0),483 F(100000000, P_GPLL0_AUX, 8, 0, 0),484 F(160000000, P_GPLL0_AUX, 5, 0, 0),485 F(177780000, P_GPLL0_AUX, 4.5, 0, 0),486 F(200000000, P_GPLL0_AUX, 4, 0, 0),487 F(266670000, P_GPLL0_AUX, 3, 0, 0),488 F(294912000, P_GPLL1, 3, 0, 0),489 F(310000000, P_GPLL2, 3, 0, 0),490 F(400000000, P_GPLL0_AUX, 2, 0, 0),491 { }492};493 494static struct clk_rcg2 gfx3d_clk_src = {495 .cmd_rcgr = 0x59000,496 .hid_width = 5,497 .parent_map = gcc_xo_gpll0a_gpll1_gpll2a_map,498 .freq_tbl = ftbl_gcc_oxili_gfx3d_clk,499 .clkr.hw.init = &(struct clk_init_data){500 .name = "gfx3d_clk_src",501 .parent_data = gcc_xo_gpll0a_gpll1_gpll2a,502 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_gpll1_gpll2a),503 .ops = &clk_rcg2_ops,504 },505};506 507static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {508 F(50000000, P_GPLL0, 16, 0, 0),509 F(80000000, P_GPLL0, 10, 0, 0),510 F(100000000, P_GPLL0, 8, 0, 0),511 F(160000000, P_GPLL0, 5, 0, 0),512 F(177780000, P_GPLL0, 4.5, 0, 0),513 F(200000000, P_GPLL0, 4, 0, 0),514 F(266670000, P_GPLL0, 3, 0, 0),515 F(320000000, P_GPLL0, 2.5, 0, 0),516 F(400000000, P_GPLL0, 2, 0, 0),517 F(465000000, P_GPLL2, 2, 0, 0),518 { }519};520 521static struct clk_rcg2 vfe0_clk_src = {522 .cmd_rcgr = 0x58000,523 .hid_width = 5,524 .parent_map = gcc_xo_gpll0_gpll2_map,525 .freq_tbl = ftbl_gcc_camss_vfe0_clk,526 .clkr.hw.init = &(struct clk_init_data){527 .name = "vfe0_clk_src",528 .parent_data = gcc_xo_gpll0_gpll2,529 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),530 .ops = &clk_rcg2_ops,531 },532};533 534static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {535 F(19200000, P_XO, 1, 0, 0),536 F(50000000, P_GPLL0, 16, 0, 0),537 { }538};539 540static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {541 .cmd_rcgr = 0x0200c,542 .hid_width = 5,543 .parent_map = gcc_xo_gpll0_map,544 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,545 .clkr.hw.init = &(struct clk_init_data){546 .name = "blsp1_qup1_i2c_apps_clk_src",547 .parent_data = gcc_xo_gpll0,548 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),549 .ops = &clk_rcg2_ops,550 },551};552 553static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {554 F(100000, P_XO, 16, 2, 24),555 F(250000, P_XO, 16, 5, 24),556 F(500000, P_XO, 8, 5, 24),557 F(960000, P_XO, 10, 1, 2),558 F(1000000, P_XO, 4, 5, 24),559 F(4800000, P_XO, 4, 0, 0),560 F(9600000, P_XO, 2, 0, 0),561 F(16000000, P_GPLL0, 10, 1, 5),562 F(19200000, P_XO, 1, 0, 0),563 F(25000000, P_GPLL0, 16, 1, 2),564 F(50000000, P_GPLL0, 16, 0, 0),565 { }566};567 568static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {569 .cmd_rcgr = 0x02024,570 .mnd_width = 8,571 .hid_width = 5,572 .parent_map = gcc_xo_gpll0_map,573 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,574 .clkr.hw.init = &(struct clk_init_data){575 .name = "blsp1_qup1_spi_apps_clk_src",576 .parent_data = gcc_xo_gpll0,577 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),578 .ops = &clk_rcg2_ops,579 },580};581 582static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {583 .cmd_rcgr = 0x03000,584 .hid_width = 5,585 .parent_map = gcc_xo_gpll0_map,586 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,587 .clkr.hw.init = &(struct clk_init_data){588 .name = "blsp1_qup2_i2c_apps_clk_src",589 .parent_data = gcc_xo_gpll0,590 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),591 .ops = &clk_rcg2_ops,592 },593};594 595static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {596 .cmd_rcgr = 0x03014,597 .mnd_width = 8,598 .hid_width = 5,599 .parent_map = gcc_xo_gpll0_map,600 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,601 .clkr.hw.init = &(struct clk_init_data){602 .name = "blsp1_qup2_spi_apps_clk_src",603 .parent_data = gcc_xo_gpll0,604 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),605 .ops = &clk_rcg2_ops,606 },607};608 609static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {610 .cmd_rcgr = 0x04000,611 .hid_width = 5,612 .parent_map = gcc_xo_gpll0_map,613 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,614 .clkr.hw.init = &(struct clk_init_data){615 .name = "blsp1_qup3_i2c_apps_clk_src",616 .parent_data = gcc_xo_gpll0,617 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),618 .ops = &clk_rcg2_ops,619 },620};621 622static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {623 .cmd_rcgr = 0x04024,624 .mnd_width = 8,625 .hid_width = 5,626 .parent_map = gcc_xo_gpll0_map,627 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,628 .clkr.hw.init = &(struct clk_init_data){629 .name = "blsp1_qup3_spi_apps_clk_src",630 .parent_data = gcc_xo_gpll0,631 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),632 .ops = &clk_rcg2_ops,633 },634};635 636static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {637 .cmd_rcgr = 0x05000,638 .hid_width = 5,639 .parent_map = gcc_xo_gpll0_map,640 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,641 .clkr.hw.init = &(struct clk_init_data){642 .name = "blsp1_qup4_i2c_apps_clk_src",643 .parent_data = gcc_xo_gpll0,644 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),645 .ops = &clk_rcg2_ops,646 },647};648 649static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {650 .cmd_rcgr = 0x05024,651 .mnd_width = 8,652 .hid_width = 5,653 .parent_map = gcc_xo_gpll0_map,654 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,655 .clkr.hw.init = &(struct clk_init_data){656 .name = "blsp1_qup4_spi_apps_clk_src",657 .parent_data = gcc_xo_gpll0,658 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),659 .ops = &clk_rcg2_ops,660 },661};662 663static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {664 .cmd_rcgr = 0x06000,665 .hid_width = 5,666 .parent_map = gcc_xo_gpll0_map,667 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,668 .clkr.hw.init = &(struct clk_init_data){669 .name = "blsp1_qup5_i2c_apps_clk_src",670 .parent_data = gcc_xo_gpll0,671 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),672 .ops = &clk_rcg2_ops,673 },674};675 676static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {677 .cmd_rcgr = 0x06024,678 .mnd_width = 8,679 .hid_width = 5,680 .parent_map = gcc_xo_gpll0_map,681 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,682 .clkr.hw.init = &(struct clk_init_data){683 .name = "blsp1_qup5_spi_apps_clk_src",684 .parent_data = gcc_xo_gpll0,685 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),686 .ops = &clk_rcg2_ops,687 },688};689 690static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {691 .cmd_rcgr = 0x07000,692 .hid_width = 5,693 .parent_map = gcc_xo_gpll0_map,694 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,695 .clkr.hw.init = &(struct clk_init_data){696 .name = "blsp1_qup6_i2c_apps_clk_src",697 .parent_data = gcc_xo_gpll0,698 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),699 .ops = &clk_rcg2_ops,700 },701};702 703static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {704 .cmd_rcgr = 0x07024,705 .mnd_width = 8,706 .hid_width = 5,707 .parent_map = gcc_xo_gpll0_map,708 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,709 .clkr.hw.init = &(struct clk_init_data){710 .name = "blsp1_qup6_spi_apps_clk_src",711 .parent_data = gcc_xo_gpll0,712 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),713 .ops = &clk_rcg2_ops,714 },715};716 717static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {718 F(3686400, P_GPLL0, 1, 72, 15625),719 F(7372800, P_GPLL0, 1, 144, 15625),720 F(14745600, P_GPLL0, 1, 288, 15625),721 F(16000000, P_GPLL0, 10, 1, 5),722 F(19200000, P_XO, 1, 0, 0),723 F(24000000, P_GPLL0, 1, 3, 100),724 F(25000000, P_GPLL0, 16, 1, 2),725 F(32000000, P_GPLL0, 1, 1, 25),726 F(40000000, P_GPLL0, 1, 1, 20),727 F(46400000, P_GPLL0, 1, 29, 500),728 F(48000000, P_GPLL0, 1, 3, 50),729 F(51200000, P_GPLL0, 1, 8, 125),730 F(56000000, P_GPLL0, 1, 7, 100),731 F(58982400, P_GPLL0, 1, 1152, 15625),732 F(60000000, P_GPLL0, 1, 3, 40),733 { }734};735 736static struct clk_rcg2 blsp1_uart1_apps_clk_src = {737 .cmd_rcgr = 0x02044,738 .mnd_width = 16,739 .hid_width = 5,740 .parent_map = gcc_xo_gpll0_map,741 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,742 .clkr.hw.init = &(struct clk_init_data){743 .name = "blsp1_uart1_apps_clk_src",744 .parent_data = gcc_xo_gpll0,745 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),746 .ops = &clk_rcg2_ops,747 },748};749 750static struct clk_rcg2 blsp1_uart2_apps_clk_src = {751 .cmd_rcgr = 0x03034,752 .mnd_width = 16,753 .hid_width = 5,754 .parent_map = gcc_xo_gpll0_map,755 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,756 .clkr.hw.init = &(struct clk_init_data){757 .name = "blsp1_uart2_apps_clk_src",758 .parent_data = gcc_xo_gpll0,759 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),760 .ops = &clk_rcg2_ops,761 },762};763 764static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {765 F(19200000, P_XO, 1, 0, 0),766 { }767};768 769static struct clk_rcg2 cci_clk_src = {770 .cmd_rcgr = 0x51000,771 .mnd_width = 8,772 .hid_width = 5,773 .parent_map = gcc_xo_gpll0a_map,774 .freq_tbl = ftbl_gcc_camss_cci_clk,775 .clkr.hw.init = &(struct clk_init_data){776 .name = "cci_clk_src",777 .parent_data = gcc_xo_gpll0a,778 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a),779 .ops = &clk_rcg2_ops,780 },781};782 783/*784 * This is a frequency table for "General Purpose" clocks.785 * These clocks can be muxed to the SoC pins and may be used by786 * external devices. They're often used as PWM source.787 *788 * See comment at ftbl_gcc_gp1_3_clk.789 */790static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {791 F(10000, P_XO, 16, 1, 120),792 F(100000, P_XO, 16, 1, 12),793 F(500000, P_GPLL0, 16, 1, 100),794 F(1000000, P_GPLL0, 16, 1, 50),795 F(2500000, P_GPLL0, 16, 1, 20),796 F(5000000, P_GPLL0, 16, 1, 10),797 F(100000000, P_GPLL0, 8, 0, 0),798 F(200000000, P_GPLL0, 4, 0, 0),799 { }800};801 802static struct clk_rcg2 camss_gp0_clk_src = {803 .cmd_rcgr = 0x54000,804 .mnd_width = 8,805 .hid_width = 5,806 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,807 .freq_tbl = ftbl_gcc_camss_gp0_1_clk,808 .clkr.hw.init = &(struct clk_init_data){809 .name = "camss_gp0_clk_src",810 .parent_data = gcc_xo_gpll0_gpll1a_sleep,811 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),812 .ops = &clk_rcg2_ops,813 },814};815 816static struct clk_rcg2 camss_gp1_clk_src = {817 .cmd_rcgr = 0x55000,818 .mnd_width = 8,819 .hid_width = 5,820 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,821 .freq_tbl = ftbl_gcc_camss_gp0_1_clk,822 .clkr.hw.init = &(struct clk_init_data){823 .name = "camss_gp1_clk_src",824 .parent_data = gcc_xo_gpll0_gpll1a_sleep,825 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),826 .ops = &clk_rcg2_ops,827 },828};829 830static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {831 F(133330000, P_GPLL0, 6, 0, 0),832 F(266670000, P_GPLL0, 3, 0, 0),833 F(320000000, P_GPLL0, 2.5, 0, 0),834 { }835};836 837static struct clk_rcg2 jpeg0_clk_src = {838 .cmd_rcgr = 0x57000,839 .hid_width = 5,840 .parent_map = gcc_xo_gpll0_map,841 .freq_tbl = ftbl_gcc_camss_jpeg0_clk,842 .clkr.hw.init = &(struct clk_init_data){843 .name = "jpeg0_clk_src",844 .parent_data = gcc_xo_gpll0,845 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),846 .ops = &clk_rcg2_ops,847 },848};849 850static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {851 F(9600000, P_XO, 2, 0, 0),852 F(23880000, P_GPLL0, 1, 2, 67),853 F(66670000, P_GPLL0, 12, 0, 0),854 { }855};856 857static struct clk_rcg2 mclk0_clk_src = {858 .cmd_rcgr = 0x52000,859 .mnd_width = 8,860 .hid_width = 5,861 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,862 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,863 .clkr.hw.init = &(struct clk_init_data){864 .name = "mclk0_clk_src",865 .parent_data = gcc_xo_gpll0_gpll1a_sleep,866 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),867 .ops = &clk_rcg2_ops,868 },869};870 871static struct clk_rcg2 mclk1_clk_src = {872 .cmd_rcgr = 0x53000,873 .mnd_width = 8,874 .hid_width = 5,875 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,876 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,877 .clkr.hw.init = &(struct clk_init_data){878 .name = "mclk1_clk_src",879 .parent_data = gcc_xo_gpll0_gpll1a_sleep,880 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),881 .ops = &clk_rcg2_ops,882 },883};884 885static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {886 F(100000000, P_GPLL0, 8, 0, 0),887 F(200000000, P_GPLL0, 4, 0, 0),888 { }889};890 891static struct clk_rcg2 csi0phytimer_clk_src = {892 .cmd_rcgr = 0x4e000,893 .hid_width = 5,894 .parent_map = gcc_xo_gpll0_gpll1a_map,895 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,896 .clkr.hw.init = &(struct clk_init_data){897 .name = "csi0phytimer_clk_src",898 .parent_data = gcc_xo_gpll0_gpll1a,899 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a),900 .ops = &clk_rcg2_ops,901 },902};903 904static struct clk_rcg2 csi1phytimer_clk_src = {905 .cmd_rcgr = 0x4f000,906 .hid_width = 5,907 .parent_map = gcc_xo_gpll0_gpll1a_map,908 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,909 .clkr.hw.init = &(struct clk_init_data){910 .name = "csi1phytimer_clk_src",911 .parent_data = gcc_xo_gpll0_gpll1a,912 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a),913 .ops = &clk_rcg2_ops,914 },915};916 917static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {918 F(160000000, P_GPLL0, 5, 0, 0),919 F(320000000, P_GPLL0, 2.5, 0, 0),920 F(465000000, P_GPLL2, 2, 0, 0),921 { }922};923 924static struct clk_rcg2 cpp_clk_src = {925 .cmd_rcgr = 0x58018,926 .hid_width = 5,927 .parent_map = gcc_xo_gpll0_gpll2_map,928 .freq_tbl = ftbl_gcc_camss_cpp_clk,929 .clkr.hw.init = &(struct clk_init_data){930 .name = "cpp_clk_src",931 .parent_data = gcc_xo_gpll0_gpll2,932 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),933 .ops = &clk_rcg2_ops,934 },935};936 937static const struct freq_tbl ftbl_gcc_crypto_clk[] = {938 F(50000000, P_GPLL0, 16, 0, 0),939 F(80000000, P_GPLL0, 10, 0, 0),940 F(100000000, P_GPLL0, 8, 0, 0),941 F(160000000, P_GPLL0, 5, 0, 0),942 { }943};944 945static struct clk_rcg2 crypto_clk_src = {946 .cmd_rcgr = 0x16004,947 .hid_width = 5,948 .parent_map = gcc_xo_gpll0_map,949 .freq_tbl = ftbl_gcc_crypto_clk,950 .clkr.hw.init = &(struct clk_init_data){951 .name = "crypto_clk_src",952 .parent_data = gcc_xo_gpll0,953 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),954 .ops = &clk_rcg2_ops,955 },956};957 958/*959 * This is a frequency table for "General Purpose" clocks.960 * These clocks can be muxed to the SoC pins and may be used by961 * external devices. They're often used as PWM source.962 *963 * Please note that MND divider must be enabled for duty-cycle964 * control to be possible. (M != N) Also since D register is configured965 * with a value multiplied by 2, and duty cycle is calculated as966 * (2 * D) % 2^W967 * DutyCycle = ----------------968 * 2 * (N % 2^W)969 * (where W = .mnd_width)970 * N must be half or less than maximum value for the register.971 * Otherwise duty-cycle control would be limited.972 * (e.g. for 8-bit NMD N should be less than 128)973 */974static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {975 F(10000, P_XO, 16, 1, 120),976 F(100000, P_XO, 16, 1, 12),977 F(500000, P_GPLL0, 16, 1, 100),978 F(1000000, P_GPLL0, 16, 1, 50),979 F(2500000, P_GPLL0, 16, 1, 20),980 F(5000000, P_GPLL0, 16, 1, 10),981 F(19200000, P_XO, 1, 0, 0),982 { }983};984 985static struct clk_rcg2 gp1_clk_src = {986 .cmd_rcgr = 0x08004,987 .mnd_width = 8,988 .hid_width = 5,989 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,990 .freq_tbl = ftbl_gcc_gp1_3_clk,991 .clkr.hw.init = &(struct clk_init_data){992 .name = "gp1_clk_src",993 .parent_data = gcc_xo_gpll0_gpll1a_sleep,994 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),995 .ops = &clk_rcg2_ops,996 },997};998 999static struct clk_rcg2 gp2_clk_src = {1000 .cmd_rcgr = 0x09004,1001 .mnd_width = 8,1002 .hid_width = 5,1003 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1004 .freq_tbl = ftbl_gcc_gp1_3_clk,1005 .clkr.hw.init = &(struct clk_init_data){1006 .name = "gp2_clk_src",1007 .parent_data = gcc_xo_gpll0_gpll1a_sleep,1008 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),1009 .ops = &clk_rcg2_ops,1010 },1011};1012 1013static struct clk_rcg2 gp3_clk_src = {1014 .cmd_rcgr = 0x0a004,1015 .mnd_width = 8,1016 .hid_width = 5,1017 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1018 .freq_tbl = ftbl_gcc_gp1_3_clk,1019 .clkr.hw.init = &(struct clk_init_data){1020 .name = "gp3_clk_src",1021 .parent_data = gcc_xo_gpll0_gpll1a_sleep,1022 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep),1023 .ops = &clk_rcg2_ops,1024 },1025};1026 1027static struct clk_rcg2 byte0_clk_src = {1028 .cmd_rcgr = 0x4d044,1029 .hid_width = 5,1030 .parent_map = gcc_xo_gpll0a_dsibyte_map,1031 .clkr.hw.init = &(struct clk_init_data){1032 .name = "byte0_clk_src",1033 .parent_data = gcc_xo_gpll0a_dsibyte,1034 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte),1035 .ops = &clk_byte2_ops,1036 .flags = CLK_SET_RATE_PARENT,1037 },1038};1039 1040static const struct freq_tbl ftbl_gcc_mdss_esc0_clk[] = {1041 F(19200000, P_XO, 1, 0, 0),1042 { }1043};1044 1045static struct clk_rcg2 esc0_clk_src = {1046 .cmd_rcgr = 0x4d05c,1047 .hid_width = 5,1048 .parent_map = gcc_xo_dsibyte_map,1049 .freq_tbl = ftbl_gcc_mdss_esc0_clk,1050 .clkr.hw.init = &(struct clk_init_data){1051 .name = "esc0_clk_src",1052 .parent_data = gcc_xo_dsibyte,1053 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte),1054 .ops = &clk_rcg2_ops,1055 },1056};1057 1058static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {1059 F(50000000, P_GPLL0, 16, 0, 0),1060 F(80000000, P_GPLL0, 10, 0, 0),1061 F(100000000, P_GPLL0, 8, 0, 0),1062 F(160000000, P_GPLL0, 5, 0, 0),1063 F(177780000, P_GPLL0, 4.5, 0, 0),1064 F(200000000, P_GPLL0, 4, 0, 0),1065 F(266670000, P_GPLL0, 3, 0, 0),1066 F(320000000, P_GPLL0, 2.5, 0, 0),1067 { }1068};1069 1070static struct clk_rcg2 mdp_clk_src = {1071 .cmd_rcgr = 0x4d014,1072 .hid_width = 5,1073 .parent_map = gcc_xo_gpll0_dsiphy_map,1074 .freq_tbl = ftbl_gcc_mdss_mdp_clk,1075 .clkr.hw.init = &(struct clk_init_data){1076 .name = "mdp_clk_src",1077 .parent_data = gcc_xo_gpll0_dsiphy,1078 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_dsiphy),1079 .ops = &clk_rcg2_ops,1080 },1081};1082 1083static struct clk_rcg2 pclk0_clk_src = {1084 .cmd_rcgr = 0x4d000,1085 .mnd_width = 8,1086 .hid_width = 5,1087 .parent_map = gcc_xo_gpll0a_dsiphy_map,1088 .clkr.hw.init = &(struct clk_init_data){1089 .name = "pclk0_clk_src",1090 .parent_data = gcc_xo_gpll0a_dsiphy,1091 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy),1092 .ops = &clk_pixel_ops,1093 .flags = CLK_SET_RATE_PARENT,1094 },1095};1096 1097static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {1098 F(19200000, P_XO, 1, 0, 0),1099 { }1100};1101 1102static struct clk_rcg2 vsync_clk_src = {1103 .cmd_rcgr = 0x4d02c,1104 .hid_width = 5,1105 .parent_map = gcc_xo_gpll0a_map,1106 .freq_tbl = ftbl_gcc_mdss_vsync_clk,1107 .clkr.hw.init = &(struct clk_init_data){1108 .name = "vsync_clk_src",1109 .parent_data = gcc_xo_gpll0a,1110 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a),1111 .ops = &clk_rcg2_ops,1112 },1113};1114 1115static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {1116 F(64000000, P_GPLL0, 12.5, 0, 0),1117 { }1118};1119 1120static struct clk_rcg2 pdm2_clk_src = {1121 .cmd_rcgr = 0x44010,1122 .hid_width = 5,1123 .parent_map = gcc_xo_gpll0_map,1124 .freq_tbl = ftbl_gcc_pdm2_clk,1125 .clkr.hw.init = &(struct clk_init_data){1126 .name = "pdm2_clk_src",1127 .parent_data = gcc_xo_gpll0,1128 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1129 .ops = &clk_rcg2_ops,1130 },1131};1132 1133static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk[] = {1134 F(144000, P_XO, 16, 3, 25),1135 F(400000, P_XO, 12, 1, 4),1136 F(20000000, P_GPLL0, 10, 1, 4),1137 F(25000000, P_GPLL0, 16, 1, 2),1138 F(50000000, P_GPLL0, 16, 0, 0),1139 F(100000000, P_GPLL0, 8, 0, 0),1140 F(177770000, P_GPLL0, 4.5, 0, 0),1141 { }1142};1143 1144static struct clk_rcg2 sdcc1_apps_clk_src = {1145 .cmd_rcgr = 0x42004,1146 .mnd_width = 8,1147 .hid_width = 5,1148 .parent_map = gcc_xo_gpll0_map,1149 .freq_tbl = ftbl_gcc_sdcc1_apps_clk,1150 .clkr.hw.init = &(struct clk_init_data){1151 .name = "sdcc1_apps_clk_src",1152 .parent_data = gcc_xo_gpll0,1153 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1154 .ops = &clk_rcg2_floor_ops,1155 },1156};1157 1158static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk[] = {1159 F(144000, P_XO, 16, 3, 25),1160 F(400000, P_XO, 12, 1, 4),1161 F(20000000, P_GPLL0, 10, 1, 4),1162 F(25000000, P_GPLL0, 16, 1, 2),1163 F(50000000, P_GPLL0, 16, 0, 0),1164 F(100000000, P_GPLL0, 8, 0, 0),1165 F(200000000, P_GPLL0, 4, 0, 0),1166 { }1167};1168 1169static struct clk_rcg2 sdcc2_apps_clk_src = {1170 .cmd_rcgr = 0x43004,1171 .mnd_width = 8,1172 .hid_width = 5,1173 .parent_map = gcc_xo_gpll0_map,1174 .freq_tbl = ftbl_gcc_sdcc2_apps_clk,1175 .clkr.hw.init = &(struct clk_init_data){1176 .name = "sdcc2_apps_clk_src",1177 .parent_data = gcc_xo_gpll0,1178 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1179 .ops = &clk_rcg2_floor_ops,1180 },1181};1182 1183static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {1184 F(155000000, P_GPLL2, 6, 0, 0),1185 F(310000000, P_GPLL2, 3, 0, 0),1186 F(400000000, P_GPLL0, 2, 0, 0),1187 { }1188};1189 1190static struct clk_rcg2 apss_tcu_clk_src = {1191 .cmd_rcgr = 0x1207c,1192 .hid_width = 5,1193 .parent_map = gcc_xo_gpll0a_gpll1_gpll2_map,1194 .freq_tbl = ftbl_gcc_apss_tcu_clk,1195 .clkr.hw.init = &(struct clk_init_data){1196 .name = "apss_tcu_clk_src",1197 .parent_data = gcc_xo_gpll0a_gpll1_gpll2,1198 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_gpll1_gpll2),1199 .ops = &clk_rcg2_ops,1200 },1201};1202 1203static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {1204 F(19200000, P_XO, 1, 0, 0),1205 F(100000000, P_GPLL0, 8, 0, 0),1206 F(200000000, P_GPLL0, 4, 0, 0),1207 F(266500000, P_BIMC, 4, 0, 0),1208 F(400000000, P_GPLL0, 2, 0, 0),1209 F(533000000, P_BIMC, 2, 0, 0),1210 { }1211};1212 1213static struct clk_rcg2 bimc_gpu_clk_src = {1214 .cmd_rcgr = 0x31028,1215 .hid_width = 5,1216 .parent_map = gcc_xo_gpll0_bimc_map,1217 .freq_tbl = ftbl_gcc_bimc_gpu_clk,1218 .clkr.hw.init = &(struct clk_init_data){1219 .name = "bimc_gpu_clk_src",1220 .parent_data = gcc_xo_gpll0_bimc,1221 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),1222 .flags = CLK_GET_RATE_NOCACHE,1223 .ops = &clk_rcg2_ops,1224 },1225};1226 1227static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {1228 F(80000000, P_GPLL0, 10, 0, 0),1229 { }1230};1231 1232static struct clk_rcg2 usb_hs_system_clk_src = {1233 .cmd_rcgr = 0x41010,1234 .hid_width = 5,1235 .parent_map = gcc_xo_gpll0_map,1236 .freq_tbl = ftbl_gcc_usb_hs_system_clk,1237 .clkr.hw.init = &(struct clk_init_data){1238 .name = "usb_hs_system_clk_src",1239 .parent_data = gcc_xo_gpll0,1240 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1241 .ops = &clk_rcg2_ops,1242 },1243};1244 1245static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {1246 F(3200000, P_XO, 6, 0, 0),1247 F(6400000, P_XO, 3, 0, 0),1248 F(9600000, P_XO, 2, 0, 0),1249 F(19200000, P_XO, 1, 0, 0),1250 F(40000000, P_GPLL0, 10, 1, 2),1251 F(66670000, P_GPLL0, 12, 0, 0),1252 F(80000000, P_GPLL0, 10, 0, 0),1253 F(100000000, P_GPLL0, 8, 0, 0),1254 { }1255};1256 1257static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {1258 .cmd_rcgr = 0x1c010,1259 .hid_width = 5,1260 .mnd_width = 8,1261 .parent_map = gcc_xo_gpll0_gpll1_sleep_map,1262 .freq_tbl = ftbl_gcc_ultaudio_ahb_clk,1263 .clkr.hw.init = &(struct clk_init_data){1264 .name = "ultaudio_ahbfabric_clk_src",1265 .parent_data = gcc_xo_gpll0_gpll1_sleep,1266 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),1267 .ops = &clk_rcg2_ops,1268 },1269};1270 1271static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {1272 .halt_reg = 0x1c028,1273 .clkr = {1274 .enable_reg = 0x1c028,1275 .enable_mask = BIT(0),1276 .hw.init = &(struct clk_init_data){1277 .name = "gcc_ultaudio_ahbfabric_ixfabric_clk",1278 .parent_hws = (const struct clk_hw*[]){1279 &ultaudio_ahbfabric_clk_src.clkr.hw,1280 },1281 .num_parents = 1,1282 .flags = CLK_SET_RATE_PARENT,1283 .ops = &clk_branch2_ops,1284 },1285 },1286};1287 1288static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {1289 .halt_reg = 0x1c024,1290 .clkr = {1291 .enable_reg = 0x1c024,1292 .enable_mask = BIT(0),1293 .hw.init = &(struct clk_init_data){1294 .name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",1295 .parent_hws = (const struct clk_hw*[]){1296 &ultaudio_ahbfabric_clk_src.clkr.hw,1297 },1298 .num_parents = 1,1299 .flags = CLK_SET_RATE_PARENT,1300 .ops = &clk_branch2_ops,1301 },1302 },1303};1304 1305static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {1306 F(128000, P_XO, 10, 1, 15),1307 F(256000, P_XO, 5, 1, 15),1308 F(384000, P_XO, 5, 1, 10),1309 F(512000, P_XO, 5, 2, 15),1310 F(576000, P_XO, 5, 3, 20),1311 F(705600, P_GPLL1, 16, 1, 80),1312 F(768000, P_XO, 5, 1, 5),1313 F(800000, P_XO, 5, 5, 24),1314 F(1024000, P_XO, 5, 4, 15),1315 F(1152000, P_XO, 1, 3, 50),1316 F(1411200, P_GPLL1, 16, 1, 40),1317 F(1536000, P_XO, 1, 2, 25),1318 F(1600000, P_XO, 12, 0, 0),1319 F(1728000, P_XO, 5, 9, 20),1320 F(2048000, P_XO, 5, 8, 15),1321 F(2304000, P_XO, 5, 3, 5),1322 F(2400000, P_XO, 8, 0, 0),1323 F(2822400, P_GPLL1, 16, 1, 20),1324 F(3072000, P_XO, 5, 4, 5),1325 F(4096000, P_GPLL1, 9, 2, 49),1326 F(4800000, P_XO, 4, 0, 0),1327 F(5644800, P_GPLL1, 16, 1, 10),1328 F(6144000, P_GPLL1, 7, 1, 21),1329 F(8192000, P_GPLL1, 9, 4, 49),1330 F(9600000, P_XO, 2, 0, 0),1331 F(11289600, P_GPLL1, 16, 1, 5),1332 F(12288000, P_GPLL1, 7, 2, 21),1333 { }1334};1335 1336static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {1337 .cmd_rcgr = 0x1c054,1338 .hid_width = 5,1339 .mnd_width = 8,1340 .parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,1341 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1342 .clkr.hw.init = &(struct clk_init_data){1343 .name = "ultaudio_lpaif_pri_i2s_clk_src",1344 .parent_data = gcc_xo_gpll1_epi2s_emclk_sleep,1345 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep),1346 .ops = &clk_rcg2_ops,1347 },1348};1349 1350static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {1351 .halt_reg = 0x1c068,1352 .clkr = {1353 .enable_reg = 0x1c068,1354 .enable_mask = BIT(0),1355 .hw.init = &(struct clk_init_data){1356 .name = "gcc_ultaudio_lpaif_pri_i2s_clk",1357 .parent_hws = (const struct clk_hw*[]){1358 &ultaudio_lpaif_pri_i2s_clk_src.clkr.hw,1359 },1360 .num_parents = 1,1361 .flags = CLK_SET_RATE_PARENT,1362 .ops = &clk_branch2_ops,1363 },1364 },1365};1366 1367static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {1368 .cmd_rcgr = 0x1c06c,1369 .hid_width = 5,1370 .mnd_width = 8,1371 .parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,1372 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1373 .clkr.hw.init = &(struct clk_init_data){1374 .name = "ultaudio_lpaif_sec_i2s_clk_src",1375 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep,1376 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep),1377 .ops = &clk_rcg2_ops,1378 },1379};1380 1381static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {1382 .halt_reg = 0x1c080,1383 .clkr = {1384 .enable_reg = 0x1c080,1385 .enable_mask = BIT(0),1386 .hw.init = &(struct clk_init_data){1387 .name = "gcc_ultaudio_lpaif_sec_i2s_clk",1388 .parent_hws = (const struct clk_hw*[]){1389 &ultaudio_lpaif_sec_i2s_clk_src.clkr.hw,1390 },1391 .num_parents = 1,1392 .flags = CLK_SET_RATE_PARENT,1393 .ops = &clk_branch2_ops,1394 },1395 },1396};1397 1398static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {1399 .cmd_rcgr = 0x1c084,1400 .hid_width = 5,1401 .mnd_width = 8,1402 .parent_map = gcc_xo_gpll1_emclk_sleep_map,1403 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1404 .clkr.hw.init = &(struct clk_init_data){1405 .name = "ultaudio_lpaif_aux_i2s_clk_src",1406 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep,1407 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep),1408 .ops = &clk_rcg2_ops,1409 },1410};1411 1412static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {1413 .halt_reg = 0x1c098,1414 .clkr = {1415 .enable_reg = 0x1c098,1416 .enable_mask = BIT(0),1417 .hw.init = &(struct clk_init_data){1418 .name = "gcc_ultaudio_lpaif_aux_i2s_clk",1419 .parent_hws = (const struct clk_hw*[]){1420 &ultaudio_lpaif_aux_i2s_clk_src.clkr.hw,1421 },1422 .num_parents = 1,1423 .flags = CLK_SET_RATE_PARENT,1424 .ops = &clk_branch2_ops,1425 },1426 },1427};1428 1429static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {1430 F(19200000, P_XO, 1, 0, 0),1431 { }1432};1433 1434static struct clk_rcg2 ultaudio_xo_clk_src = {1435 .cmd_rcgr = 0x1c034,1436 .hid_width = 5,1437 .parent_map = gcc_xo_sleep_map,1438 .freq_tbl = ftbl_gcc_ultaudio_xo_clk,1439 .clkr.hw.init = &(struct clk_init_data){1440 .name = "ultaudio_xo_clk_src",1441 .parent_data = gcc_xo_sleep,1442 .num_parents = ARRAY_SIZE(gcc_xo_sleep),1443 .ops = &clk_rcg2_ops,1444 },1445};1446 1447static struct clk_branch gcc_ultaudio_avsync_xo_clk = {1448 .halt_reg = 0x1c04c,1449 .clkr = {1450 .enable_reg = 0x1c04c,1451 .enable_mask = BIT(0),1452 .hw.init = &(struct clk_init_data){1453 .name = "gcc_ultaudio_avsync_xo_clk",1454 .parent_hws = (const struct clk_hw*[]){1455 &ultaudio_xo_clk_src.clkr.hw,1456 },1457 .num_parents = 1,1458 .flags = CLK_SET_RATE_PARENT,1459 .ops = &clk_branch2_ops,1460 },1461 },1462};1463 1464static struct clk_branch gcc_ultaudio_stc_xo_clk = {1465 .halt_reg = 0x1c050,1466 .clkr = {1467 .enable_reg = 0x1c050,1468 .enable_mask = BIT(0),1469 .hw.init = &(struct clk_init_data){1470 .name = "gcc_ultaudio_stc_xo_clk",1471 .parent_hws = (const struct clk_hw*[]){1472 &ultaudio_xo_clk_src.clkr.hw,1473 },1474 .num_parents = 1,1475 .flags = CLK_SET_RATE_PARENT,1476 .ops = &clk_branch2_ops,1477 },1478 },1479};1480 1481static const struct freq_tbl ftbl_codec_clk[] = {1482 F(9600000, P_XO, 2, 0, 0),1483 F(12288000, P_XO, 1, 16, 25),1484 F(19200000, P_XO, 1, 0, 0),1485 F(11289600, P_EXT_MCLK, 1, 0, 0),1486 { }1487};1488 1489static struct clk_rcg2 codec_digcodec_clk_src = {1490 .cmd_rcgr = 0x1c09c,1491 .mnd_width = 8,1492 .hid_width = 5,1493 .parent_map = gcc_xo_gpll1_emclk_sleep_map,1494 .freq_tbl = ftbl_codec_clk,1495 .clkr.hw.init = &(struct clk_init_data){1496 .name = "codec_digcodec_clk_src",1497 .parent_data = gcc_xo_gpll1_emclk_sleep,1498 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep),1499 .ops = &clk_rcg2_ops,1500 },1501};1502 1503static struct clk_branch gcc_codec_digcodec_clk = {1504 .halt_reg = 0x1c0b0,1505 .clkr = {1506 .enable_reg = 0x1c0b0,1507 .enable_mask = BIT(0),1508 .hw.init = &(struct clk_init_data){1509 .name = "gcc_ultaudio_codec_digcodec_clk",1510 .parent_hws = (const struct clk_hw*[]){1511 &codec_digcodec_clk_src.clkr.hw,1512 },1513 .num_parents = 1,1514 .flags = CLK_SET_RATE_PARENT,1515 .ops = &clk_branch2_ops,1516 },1517 },1518};1519 1520static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {1521 .halt_reg = 0x1c000,1522 .clkr = {1523 .enable_reg = 0x1c000,1524 .enable_mask = BIT(0),1525 .hw.init = &(struct clk_init_data){1526 .name = "gcc_ultaudio_pcnoc_mport_clk",1527 .parent_hws = (const struct clk_hw*[]){1528 &pcnoc_bfdcd_clk_src.clkr.hw,1529 },1530 .num_parents = 1,1531 .ops = &clk_branch2_ops,1532 },1533 },1534};1535 1536static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {1537 .halt_reg = 0x1c004,1538 .clkr = {1539 .enable_reg = 0x1c004,1540 .enable_mask = BIT(0),1541 .hw.init = &(struct clk_init_data){1542 .name = "gcc_ultaudio_pcnoc_sway_clk",1543 .parent_hws = (const struct clk_hw*[]){1544 &pcnoc_bfdcd_clk_src.clkr.hw,1545 },1546 .num_parents = 1,1547 .ops = &clk_branch2_ops,1548 },1549 },1550};1551 1552static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {1553 F(100000000, P_GPLL0, 8, 0, 0),1554 F(160000000, P_GPLL0, 5, 0, 0),1555 F(228570000, P_GPLL0, 3.5, 0, 0),1556 { }1557};1558 1559static struct clk_rcg2 vcodec0_clk_src = {1560 .cmd_rcgr = 0x4C000,1561 .mnd_width = 8,1562 .hid_width = 5,1563 .parent_map = gcc_xo_gpll0_map,1564 .freq_tbl = ftbl_gcc_venus0_vcodec0_clk,1565 .clkr.hw.init = &(struct clk_init_data){1566 .name = "vcodec0_clk_src",1567 .parent_data = gcc_xo_gpll0,1568 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1569 .ops = &clk_rcg2_ops,1570 },1571};1572 1573static struct clk_branch gcc_blsp1_ahb_clk = {1574 .halt_reg = 0x01008,1575 .halt_check = BRANCH_HALT_VOTED,1576 .clkr = {1577 .enable_reg = 0x45004,1578 .enable_mask = BIT(10),1579 .hw.init = &(struct clk_init_data){1580 .name = "gcc_blsp1_ahb_clk",1581 .parent_hws = (const struct clk_hw*[]){1582 &pcnoc_bfdcd_clk_src.clkr.hw,1583 },1584 .num_parents = 1,1585 .ops = &clk_branch2_ops,1586 },1587 },1588};1589 1590static struct clk_branch gcc_blsp1_sleep_clk = {1591 .halt_reg = 0x01004,1592 .clkr = {1593 .enable_reg = 0x01004,1594 .enable_mask = BIT(0),1595 .hw.init = &(struct clk_init_data){1596 .name = "gcc_blsp1_sleep_clk",1597 .parent_data = &(const struct clk_parent_data){1598 .fw_name = "sleep_clk", .name = "sleep_clk_src",1599 },1600 .num_parents = 1,1601 .flags = CLK_SET_RATE_PARENT,1602 .ops = &clk_branch2_ops,1603 },1604 },1605};1606 1607static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {1608 .halt_reg = 0x02008,1609 .clkr = {1610 .enable_reg = 0x02008,1611 .enable_mask = BIT(0),1612 .hw.init = &(struct clk_init_data){1613 .name = "gcc_blsp1_qup1_i2c_apps_clk",1614 .parent_hws = (const struct clk_hw*[]){1615 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,1616 },1617 .num_parents = 1,1618 .flags = CLK_SET_RATE_PARENT,1619 .ops = &clk_branch2_ops,1620 },1621 },1622};1623 1624static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {1625 .halt_reg = 0x02004,1626 .clkr = {1627 .enable_reg = 0x02004,1628 .enable_mask = BIT(0),1629 .hw.init = &(struct clk_init_data){1630 .name = "gcc_blsp1_qup1_spi_apps_clk",1631 .parent_hws = (const struct clk_hw*[]){1632 &blsp1_qup1_spi_apps_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 gcc_blsp1_qup2_i2c_apps_clk = {1642 .halt_reg = 0x03010,1643 .clkr = {1644 .enable_reg = 0x03010,1645 .enable_mask = BIT(0),1646 .hw.init = &(struct clk_init_data){1647 .name = "gcc_blsp1_qup2_i2c_apps_clk",1648 .parent_hws = (const struct clk_hw*[]){1649 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,1650 },1651 .num_parents = 1,1652 .flags = CLK_SET_RATE_PARENT,1653 .ops = &clk_branch2_ops,1654 },1655 },1656};1657 1658static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {1659 .halt_reg = 0x0300c,1660 .clkr = {1661 .enable_reg = 0x0300c,1662 .enable_mask = BIT(0),1663 .hw.init = &(struct clk_init_data){1664 .name = "gcc_blsp1_qup2_spi_apps_clk",1665 .parent_hws = (const struct clk_hw*[]){1666 &blsp1_qup2_spi_apps_clk_src.clkr.hw,1667 },1668 .num_parents = 1,1669 .flags = CLK_SET_RATE_PARENT,1670 .ops = &clk_branch2_ops,1671 },1672 },1673};1674 1675static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {1676 .halt_reg = 0x04020,1677 .clkr = {1678 .enable_reg = 0x04020,1679 .enable_mask = BIT(0),1680 .hw.init = &(struct clk_init_data){1681 .name = "gcc_blsp1_qup3_i2c_apps_clk",1682 .parent_hws = (const struct clk_hw*[]){1683 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,1684 },1685 .num_parents = 1,1686 .flags = CLK_SET_RATE_PARENT,1687 .ops = &clk_branch2_ops,1688 },1689 },1690};1691 1692static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {1693 .halt_reg = 0x0401c,1694 .clkr = {1695 .enable_reg = 0x0401c,1696 .enable_mask = BIT(0),1697 .hw.init = &(struct clk_init_data){1698 .name = "gcc_blsp1_qup3_spi_apps_clk",1699 .parent_hws = (const struct clk_hw*[]){1700 &blsp1_qup3_spi_apps_clk_src.clkr.hw,1701 },1702 .num_parents = 1,1703 .flags = CLK_SET_RATE_PARENT,1704 .ops = &clk_branch2_ops,1705 },1706 },1707};1708 1709static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {1710 .halt_reg = 0x05020,1711 .clkr = {1712 .enable_reg = 0x05020,1713 .enable_mask = BIT(0),1714 .hw.init = &(struct clk_init_data){1715 .name = "gcc_blsp1_qup4_i2c_apps_clk",1716 .parent_hws = (const struct clk_hw*[]){1717 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,1718 },1719 .num_parents = 1,1720 .flags = CLK_SET_RATE_PARENT,1721 .ops = &clk_branch2_ops,1722 },1723 },1724};1725 1726static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {1727 .halt_reg = 0x0501c,1728 .clkr = {1729 .enable_reg = 0x0501c,1730 .enable_mask = BIT(0),1731 .hw.init = &(struct clk_init_data){1732 .name = "gcc_blsp1_qup4_spi_apps_clk",1733 .parent_hws = (const struct clk_hw*[]){1734 &blsp1_qup4_spi_apps_clk_src.clkr.hw,1735 },1736 .num_parents = 1,1737 .flags = CLK_SET_RATE_PARENT,1738 .ops = &clk_branch2_ops,1739 },1740 },1741};1742 1743static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {1744 .halt_reg = 0x06020,1745 .clkr = {1746 .enable_reg = 0x06020,1747 .enable_mask = BIT(0),1748 .hw.init = &(struct clk_init_data){1749 .name = "gcc_blsp1_qup5_i2c_apps_clk",1750 .parent_hws = (const struct clk_hw*[]){1751 &blsp1_qup5_i2c_apps_clk_src.clkr.hw,1752 },1753 .num_parents = 1,1754 .flags = CLK_SET_RATE_PARENT,1755 .ops = &clk_branch2_ops,1756 },1757 },1758};1759 1760static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {1761 .halt_reg = 0x0601c,1762 .clkr = {1763 .enable_reg = 0x0601c,1764 .enable_mask = BIT(0),1765 .hw.init = &(struct clk_init_data){1766 .name = "gcc_blsp1_qup5_spi_apps_clk",1767 .parent_hws = (const struct clk_hw*[]){1768 &blsp1_qup5_spi_apps_clk_src.clkr.hw,1769 },1770 .num_parents = 1,1771 .flags = CLK_SET_RATE_PARENT,1772 .ops = &clk_branch2_ops,1773 },1774 },1775};1776 1777static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {1778 .halt_reg = 0x07020,1779 .clkr = {1780 .enable_reg = 0x07020,1781 .enable_mask = BIT(0),1782 .hw.init = &(struct clk_init_data){1783 .name = "gcc_blsp1_qup6_i2c_apps_clk",1784 .parent_hws = (const struct clk_hw*[]){1785 &blsp1_qup6_i2c_apps_clk_src.clkr.hw,1786 },1787 .num_parents = 1,1788 .flags = CLK_SET_RATE_PARENT,1789 .ops = &clk_branch2_ops,1790 },1791 },1792};1793 1794static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {1795 .halt_reg = 0x0701c,1796 .clkr = {1797 .enable_reg = 0x0701c,1798 .enable_mask = BIT(0),1799 .hw.init = &(struct clk_init_data){1800 .name = "gcc_blsp1_qup6_spi_apps_clk",1801 .parent_hws = (const struct clk_hw*[]){1802 &blsp1_qup6_spi_apps_clk_src.clkr.hw,1803 },1804 .num_parents = 1,1805 .flags = CLK_SET_RATE_PARENT,1806 .ops = &clk_branch2_ops,1807 },1808 },1809};1810 1811static struct clk_branch gcc_blsp1_uart1_apps_clk = {1812 .halt_reg = 0x0203c,1813 .clkr = {1814 .enable_reg = 0x0203c,1815 .enable_mask = BIT(0),1816 .hw.init = &(struct clk_init_data){1817 .name = "gcc_blsp1_uart1_apps_clk",1818 .parent_hws = (const struct clk_hw*[]){1819 &blsp1_uart1_apps_clk_src.clkr.hw,1820 },1821 .num_parents = 1,1822 .flags = CLK_SET_RATE_PARENT,1823 .ops = &clk_branch2_ops,1824 },1825 },1826};1827 1828static struct clk_branch gcc_blsp1_uart2_apps_clk = {1829 .halt_reg = 0x0302c,1830 .clkr = {1831 .enable_reg = 0x0302c,1832 .enable_mask = BIT(0),1833 .hw.init = &(struct clk_init_data){1834 .name = "gcc_blsp1_uart2_apps_clk",1835 .parent_hws = (const struct clk_hw*[]){1836 &blsp1_uart2_apps_clk_src.clkr.hw,1837 },1838 .num_parents = 1,1839 .flags = CLK_SET_RATE_PARENT,1840 .ops = &clk_branch2_ops,1841 },1842 },1843};1844 1845static struct clk_branch gcc_boot_rom_ahb_clk = {1846 .halt_reg = 0x1300c,1847 .halt_check = BRANCH_HALT_VOTED,1848 .clkr = {1849 .enable_reg = 0x45004,1850 .enable_mask = BIT(7),1851 .hw.init = &(struct clk_init_data){1852 .name = "gcc_boot_rom_ahb_clk",1853 .parent_hws = (const struct clk_hw*[]){1854 &pcnoc_bfdcd_clk_src.clkr.hw,1855 },1856 .num_parents = 1,1857 .ops = &clk_branch2_ops,1858 },1859 },1860};1861 1862static struct clk_branch gcc_camss_cci_ahb_clk = {1863 .halt_reg = 0x5101c,1864 .clkr = {1865 .enable_reg = 0x5101c,1866 .enable_mask = BIT(0),1867 .hw.init = &(struct clk_init_data){1868 .name = "gcc_camss_cci_ahb_clk",1869 .parent_hws = (const struct clk_hw*[]){1870 &camss_ahb_clk_src.clkr.hw,1871 },1872 .num_parents = 1,1873 .flags = CLK_SET_RATE_PARENT,1874 .ops = &clk_branch2_ops,1875 },1876 },1877};1878 1879static struct clk_branch gcc_camss_cci_clk = {1880 .halt_reg = 0x51018,1881 .clkr = {1882 .enable_reg = 0x51018,1883 .enable_mask = BIT(0),1884 .hw.init = &(struct clk_init_data){1885 .name = "gcc_camss_cci_clk",1886 .parent_hws = (const struct clk_hw*[]){1887 &cci_clk_src.clkr.hw,1888 },1889 .num_parents = 1,1890 .flags = CLK_SET_RATE_PARENT,1891 .ops = &clk_branch2_ops,1892 },1893 },1894};1895 1896static struct clk_branch gcc_camss_csi0_ahb_clk = {1897 .halt_reg = 0x4e040,1898 .clkr = {1899 .enable_reg = 0x4e040,1900 .enable_mask = BIT(0),1901 .hw.init = &(struct clk_init_data){1902 .name = "gcc_camss_csi0_ahb_clk",1903 .parent_hws = (const struct clk_hw*[]){1904 &camss_ahb_clk_src.clkr.hw,1905 },1906 .num_parents = 1,1907 .flags = CLK_SET_RATE_PARENT,1908 .ops = &clk_branch2_ops,1909 },1910 },1911};1912 1913static struct clk_branch gcc_camss_csi0_clk = {1914 .halt_reg = 0x4e03c,1915 .clkr = {1916 .enable_reg = 0x4e03c,1917 .enable_mask = BIT(0),1918 .hw.init = &(struct clk_init_data){1919 .name = "gcc_camss_csi0_clk",1920 .parent_hws = (const struct clk_hw*[]){1921 &csi0_clk_src.clkr.hw,1922 },1923 .num_parents = 1,1924 .flags = CLK_SET_RATE_PARENT,1925 .ops = &clk_branch2_ops,1926 },1927 },1928};1929 1930static struct clk_branch gcc_camss_csi0phy_clk = {1931 .halt_reg = 0x4e048,1932 .clkr = {1933 .enable_reg = 0x4e048,1934 .enable_mask = BIT(0),1935 .hw.init = &(struct clk_init_data){1936 .name = "gcc_camss_csi0phy_clk",1937 .parent_hws = (const struct clk_hw*[]){1938 &csi0_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 gcc_camss_csi0pix_clk = {1948 .halt_reg = 0x4e058,1949 .clkr = {1950 .enable_reg = 0x4e058,1951 .enable_mask = BIT(0),1952 .hw.init = &(struct clk_init_data){1953 .name = "gcc_camss_csi0pix_clk",1954 .parent_hws = (const struct clk_hw*[]){1955 &csi0_clk_src.clkr.hw,1956 },1957 .num_parents = 1,1958 .flags = CLK_SET_RATE_PARENT,1959 .ops = &clk_branch2_ops,1960 },1961 },1962};1963 1964static struct clk_branch gcc_camss_csi0rdi_clk = {1965 .halt_reg = 0x4e050,1966 .clkr = {1967 .enable_reg = 0x4e050,1968 .enable_mask = BIT(0),1969 .hw.init = &(struct clk_init_data){1970 .name = "gcc_camss_csi0rdi_clk",1971 .parent_hws = (const struct clk_hw*[]){1972 &csi0_clk_src.clkr.hw,1973 },1974 .num_parents = 1,1975 .flags = CLK_SET_RATE_PARENT,1976 .ops = &clk_branch2_ops,1977 },1978 },1979};1980 1981static struct clk_branch gcc_camss_csi1_ahb_clk = {1982 .halt_reg = 0x4f040,1983 .clkr = {1984 .enable_reg = 0x4f040,1985 .enable_mask = BIT(0),1986 .hw.init = &(struct clk_init_data){1987 .name = "gcc_camss_csi1_ahb_clk",1988 .parent_hws = (const struct clk_hw*[]){1989 &camss_ahb_clk_src.clkr.hw,1990 },1991 .num_parents = 1,1992 .flags = CLK_SET_RATE_PARENT,1993 .ops = &clk_branch2_ops,1994 },1995 },1996};1997 1998static struct clk_branch gcc_camss_csi1_clk = {1999 .halt_reg = 0x4f03c,2000 .clkr = {2001 .enable_reg = 0x4f03c,2002 .enable_mask = BIT(0),2003 .hw.init = &(struct clk_init_data){2004 .name = "gcc_camss_csi1_clk",2005 .parent_hws = (const struct clk_hw*[]){2006 &csi1_clk_src.clkr.hw,2007 },2008 .num_parents = 1,2009 .flags = CLK_SET_RATE_PARENT,2010 .ops = &clk_branch2_ops,2011 },2012 },2013};2014 2015static struct clk_branch gcc_camss_csi1phy_clk = {2016 .halt_reg = 0x4f048,2017 .clkr = {2018 .enable_reg = 0x4f048,2019 .enable_mask = BIT(0),2020 .hw.init = &(struct clk_init_data){2021 .name = "gcc_camss_csi1phy_clk",2022 .parent_hws = (const struct clk_hw*[]){2023 &csi1_clk_src.clkr.hw,2024 },2025 .num_parents = 1,2026 .flags = CLK_SET_RATE_PARENT,2027 .ops = &clk_branch2_ops,2028 },2029 },2030};2031 2032static struct clk_branch gcc_camss_csi1pix_clk = {2033 .halt_reg = 0x4f058,2034 .clkr = {2035 .enable_reg = 0x4f058,2036 .enable_mask = BIT(0),2037 .hw.init = &(struct clk_init_data){2038 .name = "gcc_camss_csi1pix_clk",2039 .parent_hws = (const struct clk_hw*[]){2040 &csi1_clk_src.clkr.hw,2041 },2042 .num_parents = 1,2043 .flags = CLK_SET_RATE_PARENT,2044 .ops = &clk_branch2_ops,2045 },2046 },2047};2048 2049static struct clk_branch gcc_camss_csi1rdi_clk = {2050 .halt_reg = 0x4f050,2051 .clkr = {2052 .enable_reg = 0x4f050,2053 .enable_mask = BIT(0),2054 .hw.init = &(struct clk_init_data){2055 .name = "gcc_camss_csi1rdi_clk",2056 .parent_hws = (const struct clk_hw*[]){2057 &csi1_clk_src.clkr.hw,2058 },2059 .num_parents = 1,2060 .flags = CLK_SET_RATE_PARENT,2061 .ops = &clk_branch2_ops,2062 },2063 },2064};2065 2066static struct clk_branch gcc_camss_csi_vfe0_clk = {2067 .halt_reg = 0x58050,2068 .clkr = {2069 .enable_reg = 0x58050,2070 .enable_mask = BIT(0),2071 .hw.init = &(struct clk_init_data){2072 .name = "gcc_camss_csi_vfe0_clk",2073 .parent_hws = (const struct clk_hw*[]){2074 &vfe0_clk_src.clkr.hw,2075 },2076 .num_parents = 1,2077 .flags = CLK_SET_RATE_PARENT,2078 .ops = &clk_branch2_ops,2079 },2080 },2081};2082 2083static struct clk_branch gcc_camss_gp0_clk = {2084 .halt_reg = 0x54018,2085 .clkr = {2086 .enable_reg = 0x54018,2087 .enable_mask = BIT(0),2088 .hw.init = &(struct clk_init_data){2089 .name = "gcc_camss_gp0_clk",2090 .parent_hws = (const struct clk_hw*[]){2091 &camss_gp0_clk_src.clkr.hw,2092 },2093 .num_parents = 1,2094 .flags = CLK_SET_RATE_PARENT,2095 .ops = &clk_branch2_ops,2096 },2097 },2098};2099 2100static struct clk_branch gcc_camss_gp1_clk = {2101 .halt_reg = 0x55018,2102 .clkr = {2103 .enable_reg = 0x55018,2104 .enable_mask = BIT(0),2105 .hw.init = &(struct clk_init_data){2106 .name = "gcc_camss_gp1_clk",2107 .parent_hws = (const struct clk_hw*[]){2108 &camss_gp1_clk_src.clkr.hw,2109 },2110 .num_parents = 1,2111 .flags = CLK_SET_RATE_PARENT,2112 .ops = &clk_branch2_ops,2113 },2114 },2115};2116 2117static struct clk_branch gcc_camss_ispif_ahb_clk = {2118 .halt_reg = 0x50004,2119 .clkr = {2120 .enable_reg = 0x50004,2121 .enable_mask = BIT(0),2122 .hw.init = &(struct clk_init_data){2123 .name = "gcc_camss_ispif_ahb_clk",2124 .parent_hws = (const struct clk_hw*[]){2125 &camss_ahb_clk_src.clkr.hw,2126 },2127 .num_parents = 1,2128 .flags = CLK_SET_RATE_PARENT,2129 .ops = &clk_branch2_ops,2130 },2131 },2132};2133 2134static struct clk_branch gcc_camss_jpeg0_clk = {2135 .halt_reg = 0x57020,2136 .clkr = {2137 .enable_reg = 0x57020,2138 .enable_mask = BIT(0),2139 .hw.init = &(struct clk_init_data){2140 .name = "gcc_camss_jpeg0_clk",2141 .parent_hws = (const struct clk_hw*[]){2142 &jpeg0_clk_src.clkr.hw,2143 },2144 .num_parents = 1,2145 .flags = CLK_SET_RATE_PARENT,2146 .ops = &clk_branch2_ops,2147 },2148 },2149};2150 2151static struct clk_branch gcc_camss_jpeg_ahb_clk = {2152 .halt_reg = 0x57024,2153 .clkr = {2154 .enable_reg = 0x57024,2155 .enable_mask = BIT(0),2156 .hw.init = &(struct clk_init_data){2157 .name = "gcc_camss_jpeg_ahb_clk",2158 .parent_hws = (const struct clk_hw*[]){2159 &camss_ahb_clk_src.clkr.hw,2160 },2161 .num_parents = 1,2162 .flags = CLK_SET_RATE_PARENT,2163 .ops = &clk_branch2_ops,2164 },2165 },2166};2167 2168static struct clk_branch gcc_camss_jpeg_axi_clk = {2169 .halt_reg = 0x57028,2170 .clkr = {2171 .enable_reg = 0x57028,2172 .enable_mask = BIT(0),2173 .hw.init = &(struct clk_init_data){2174 .name = "gcc_camss_jpeg_axi_clk",2175 .parent_hws = (const struct clk_hw*[]){2176 &system_noc_bfdcd_clk_src.clkr.hw,2177 },2178 .num_parents = 1,2179 .flags = CLK_SET_RATE_PARENT,2180 .ops = &clk_branch2_ops,2181 },2182 },2183};2184 2185static struct clk_branch gcc_camss_mclk0_clk = {2186 .halt_reg = 0x52018,2187 .clkr = {2188 .enable_reg = 0x52018,2189 .enable_mask = BIT(0),2190 .hw.init = &(struct clk_init_data){2191 .name = "gcc_camss_mclk0_clk",2192 .parent_hws = (const struct clk_hw*[]){2193 &mclk0_clk_src.clkr.hw,2194 },2195 .num_parents = 1,2196 .flags = CLK_SET_RATE_PARENT,2197 .ops = &clk_branch2_ops,2198 },2199 },2200};2201 2202static struct clk_branch gcc_camss_mclk1_clk = {2203 .halt_reg = 0x53018,2204 .clkr = {2205 .enable_reg = 0x53018,2206 .enable_mask = BIT(0),2207 .hw.init = &(struct clk_init_data){2208 .name = "gcc_camss_mclk1_clk",2209 .parent_hws = (const struct clk_hw*[]){2210 &mclk1_clk_src.clkr.hw,2211 },2212 .num_parents = 1,2213 .flags = CLK_SET_RATE_PARENT,2214 .ops = &clk_branch2_ops,2215 },2216 },2217};2218 2219static struct clk_branch gcc_camss_micro_ahb_clk = {2220 .halt_reg = 0x5600c,2221 .clkr = {2222 .enable_reg = 0x5600c,2223 .enable_mask = BIT(0),2224 .hw.init = &(struct clk_init_data){2225 .name = "gcc_camss_micro_ahb_clk",2226 .parent_hws = (const struct clk_hw*[]){2227 &camss_ahb_clk_src.clkr.hw,2228 },2229 .num_parents = 1,2230 .flags = CLK_SET_RATE_PARENT,2231 .ops = &clk_branch2_ops,2232 },2233 },2234};2235 2236static struct clk_branch gcc_camss_csi0phytimer_clk = {2237 .halt_reg = 0x4e01c,2238 .clkr = {2239 .enable_reg = 0x4e01c,2240 .enable_mask = BIT(0),2241 .hw.init = &(struct clk_init_data){2242 .name = "gcc_camss_csi0phytimer_clk",2243 .parent_hws = (const struct clk_hw*[]){2244 &csi0phytimer_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 gcc_camss_csi1phytimer_clk = {2254 .halt_reg = 0x4f01c,2255 .clkr = {2256 .enable_reg = 0x4f01c,2257 .enable_mask = BIT(0),2258 .hw.init = &(struct clk_init_data){2259 .name = "gcc_camss_csi1phytimer_clk",2260 .parent_hws = (const struct clk_hw*[]){2261 &csi1phytimer_clk_src.clkr.hw,2262 },2263 .num_parents = 1,2264 .flags = CLK_SET_RATE_PARENT,2265 .ops = &clk_branch2_ops,2266 },2267 },2268};2269 2270static struct clk_branch gcc_camss_ahb_clk = {2271 .halt_reg = 0x5a014,2272 .clkr = {2273 .enable_reg = 0x5a014,2274 .enable_mask = BIT(0),2275 .hw.init = &(struct clk_init_data){2276 .name = "gcc_camss_ahb_clk",2277 .parent_hws = (const struct clk_hw*[]){2278 &camss_ahb_clk_src.clkr.hw,2279 },2280 .num_parents = 1,2281 .flags = CLK_SET_RATE_PARENT,2282 .ops = &clk_branch2_ops,2283 },2284 },2285};2286 2287static struct clk_branch gcc_camss_top_ahb_clk = {2288 .halt_reg = 0x56004,2289 .clkr = {2290 .enable_reg = 0x56004,2291 .enable_mask = BIT(0),2292 .hw.init = &(struct clk_init_data){2293 .name = "gcc_camss_top_ahb_clk",2294 .parent_hws = (const struct clk_hw*[]){2295 &pcnoc_bfdcd_clk_src.clkr.hw,2296 },2297 .num_parents = 1,2298 .flags = CLK_SET_RATE_PARENT,2299 .ops = &clk_branch2_ops,2300 },2301 },2302};2303 2304static struct clk_branch gcc_camss_cpp_ahb_clk = {2305 .halt_reg = 0x58040,2306 .clkr = {2307 .enable_reg = 0x58040,2308 .enable_mask = BIT(0),2309 .hw.init = &(struct clk_init_data){2310 .name = "gcc_camss_cpp_ahb_clk",2311 .parent_hws = (const struct clk_hw*[]){2312 &camss_ahb_clk_src.clkr.hw,2313 },2314 .num_parents = 1,2315 .flags = CLK_SET_RATE_PARENT,2316 .ops = &clk_branch2_ops,2317 },2318 },2319};2320 2321static struct clk_branch gcc_camss_cpp_clk = {2322 .halt_reg = 0x5803c,2323 .clkr = {2324 .enable_reg = 0x5803c,2325 .enable_mask = BIT(0),2326 .hw.init = &(struct clk_init_data){2327 .name = "gcc_camss_cpp_clk",2328 .parent_hws = (const struct clk_hw*[]){2329 &cpp_clk_src.clkr.hw,2330 },2331 .num_parents = 1,2332 .flags = CLK_SET_RATE_PARENT,2333 .ops = &clk_branch2_ops,2334 },2335 },2336};2337 2338static struct clk_branch gcc_camss_vfe0_clk = {2339 .halt_reg = 0x58038,2340 .clkr = {2341 .enable_reg = 0x58038,2342 .enable_mask = BIT(0),2343 .hw.init = &(struct clk_init_data){2344 .name = "gcc_camss_vfe0_clk",2345 .parent_hws = (const struct clk_hw*[]){2346 &vfe0_clk_src.clkr.hw,2347 },2348 .num_parents = 1,2349 .flags = CLK_SET_RATE_PARENT,2350 .ops = &clk_branch2_ops,2351 },2352 },2353};2354 2355static struct clk_branch gcc_camss_vfe_ahb_clk = {2356 .halt_reg = 0x58044,2357 .clkr = {2358 .enable_reg = 0x58044,2359 .enable_mask = BIT(0),2360 .hw.init = &(struct clk_init_data){2361 .name = "gcc_camss_vfe_ahb_clk",2362 .parent_hws = (const struct clk_hw*[]){2363 &camss_ahb_clk_src.clkr.hw,2364 },2365 .num_parents = 1,2366 .flags = CLK_SET_RATE_PARENT,2367 .ops = &clk_branch2_ops,2368 },2369 },2370};2371 2372static struct clk_branch gcc_camss_vfe_axi_clk = {2373 .halt_reg = 0x58048,2374 .clkr = {2375 .enable_reg = 0x58048,2376 .enable_mask = BIT(0),2377 .hw.init = &(struct clk_init_data){2378 .name = "gcc_camss_vfe_axi_clk",2379 .parent_hws = (const struct clk_hw*[]){2380 &system_noc_bfdcd_clk_src.clkr.hw,2381 },2382 .num_parents = 1,2383 .flags = CLK_SET_RATE_PARENT,2384 .ops = &clk_branch2_ops,2385 },2386 },2387};2388 2389static struct clk_branch gcc_crypto_ahb_clk = {2390 .halt_reg = 0x16024,2391 .halt_check = BRANCH_HALT_VOTED,2392 .clkr = {2393 .enable_reg = 0x45004,2394 .enable_mask = BIT(0),2395 .hw.init = &(struct clk_init_data){2396 .name = "gcc_crypto_ahb_clk",2397 .parent_hws = (const struct clk_hw*[]){2398 &pcnoc_bfdcd_clk_src.clkr.hw,2399 },2400 .num_parents = 1,2401 .flags = CLK_SET_RATE_PARENT,2402 .ops = &clk_branch2_ops,2403 },2404 },2405};2406 2407static struct clk_branch gcc_crypto_axi_clk = {2408 .halt_reg = 0x16020,2409 .halt_check = BRANCH_HALT_VOTED,2410 .clkr = {2411 .enable_reg = 0x45004,2412 .enable_mask = BIT(1),2413 .hw.init = &(struct clk_init_data){2414 .name = "gcc_crypto_axi_clk",2415 .parent_hws = (const struct clk_hw*[]){2416 &pcnoc_bfdcd_clk_src.clkr.hw,2417 },2418 .num_parents = 1,2419 .flags = CLK_SET_RATE_PARENT,2420 .ops = &clk_branch2_ops,2421 },2422 },2423};2424 2425static struct clk_branch gcc_crypto_clk = {2426 .halt_reg = 0x1601c,2427 .halt_check = BRANCH_HALT_VOTED,2428 .clkr = {2429 .enable_reg = 0x45004,2430 .enable_mask = BIT(2),2431 .hw.init = &(struct clk_init_data){2432 .name = "gcc_crypto_clk",2433 .parent_hws = (const struct clk_hw*[]){2434 &crypto_clk_src.clkr.hw,2435 },2436 .num_parents = 1,2437 .flags = CLK_SET_RATE_PARENT,2438 .ops = &clk_branch2_ops,2439 },2440 },2441};2442 2443static struct clk_branch gcc_oxili_gmem_clk = {2444 .halt_reg = 0x59024,2445 .clkr = {2446 .enable_reg = 0x59024,2447 .enable_mask = BIT(0),2448 .hw.init = &(struct clk_init_data){2449 .name = "gcc_oxili_gmem_clk",2450 .parent_hws = (const struct clk_hw*[]){2451 &gfx3d_clk_src.clkr.hw,2452 },2453 .num_parents = 1,2454 .flags = CLK_SET_RATE_PARENT,2455 .ops = &clk_branch2_ops,2456 },2457 },2458};2459 2460static struct clk_branch gcc_gp1_clk = {2461 .halt_reg = 0x08000,2462 .clkr = {2463 .enable_reg = 0x08000,2464 .enable_mask = BIT(0),2465 .hw.init = &(struct clk_init_data){2466 .name = "gcc_gp1_clk",2467 .parent_hws = (const struct clk_hw*[]){2468 &gp1_clk_src.clkr.hw,2469 },2470 .num_parents = 1,2471 .flags = CLK_SET_RATE_PARENT,2472 .ops = &clk_branch2_ops,2473 },2474 },2475};2476 2477static struct clk_branch gcc_gp2_clk = {2478 .halt_reg = 0x09000,2479 .clkr = {2480 .enable_reg = 0x09000,2481 .enable_mask = BIT(0),2482 .hw.init = &(struct clk_init_data){2483 .name = "gcc_gp2_clk",2484 .parent_hws = (const struct clk_hw*[]){2485 &gp2_clk_src.clkr.hw,2486 },2487 .num_parents = 1,2488 .flags = CLK_SET_RATE_PARENT,2489 .ops = &clk_branch2_ops,2490 },2491 },2492};2493 2494static struct clk_branch gcc_gp3_clk = {2495 .halt_reg = 0x0a000,2496 .clkr = {2497 .enable_reg = 0x0a000,2498 .enable_mask = BIT(0),2499 .hw.init = &(struct clk_init_data){2500 .name = "gcc_gp3_clk",2501 .parent_hws = (const struct clk_hw*[]){2502 &gp3_clk_src.clkr.hw,2503 },2504 .num_parents = 1,2505 .flags = CLK_SET_RATE_PARENT,2506 .ops = &clk_branch2_ops,2507 },2508 },2509};2510 2511static struct clk_branch gcc_mdss_ahb_clk = {2512 .halt_reg = 0x4d07c,2513 .clkr = {2514 .enable_reg = 0x4d07c,2515 .enable_mask = BIT(0),2516 .hw.init = &(struct clk_init_data){2517 .name = "gcc_mdss_ahb_clk",2518 .parent_hws = (const struct clk_hw*[]){2519 &pcnoc_bfdcd_clk_src.clkr.hw,2520 },2521 .num_parents = 1,2522 .flags = CLK_SET_RATE_PARENT,2523 .ops = &clk_branch2_ops,2524 },2525 },2526};2527 2528static struct clk_branch gcc_mdss_axi_clk = {2529 .halt_reg = 0x4d080,2530 .clkr = {2531 .enable_reg = 0x4d080,2532 .enable_mask = BIT(0),2533 .hw.init = &(struct clk_init_data){2534 .name = "gcc_mdss_axi_clk",2535 .parent_hws = (const struct clk_hw*[]){2536 &system_noc_bfdcd_clk_src.clkr.hw,2537 },2538 .num_parents = 1,2539 .flags = CLK_SET_RATE_PARENT,2540 .ops = &clk_branch2_ops,2541 },2542 },2543};2544 2545static struct clk_branch gcc_mdss_byte0_clk = {2546 .halt_reg = 0x4d094,2547 .clkr = {2548 .enable_reg = 0x4d094,2549 .enable_mask = BIT(0),2550 .hw.init = &(struct clk_init_data){2551 .name = "gcc_mdss_byte0_clk",2552 .parent_hws = (const struct clk_hw*[]){2553 &byte0_clk_src.clkr.hw,2554 },2555 .num_parents = 1,2556 .flags = CLK_SET_RATE_PARENT,2557 .ops = &clk_branch2_ops,2558 },2559 },2560};2561 2562static struct clk_branch gcc_mdss_esc0_clk = {2563 .halt_reg = 0x4d098,2564 .clkr = {2565 .enable_reg = 0x4d098,2566 .enable_mask = BIT(0),2567 .hw.init = &(struct clk_init_data){2568 .name = "gcc_mdss_esc0_clk",2569 .parent_hws = (const struct clk_hw*[]){2570 &esc0_clk_src.clkr.hw,2571 },2572 .num_parents = 1,2573 .flags = CLK_SET_RATE_PARENT,2574 .ops = &clk_branch2_ops,2575 },2576 },2577};2578 2579static struct clk_branch gcc_mdss_mdp_clk = {2580 .halt_reg = 0x4D088,2581 .clkr = {2582 .enable_reg = 0x4D088,2583 .enable_mask = BIT(0),2584 .hw.init = &(struct clk_init_data){2585 .name = "gcc_mdss_mdp_clk",2586 .parent_hws = (const struct clk_hw*[]){2587 &mdp_clk_src.clkr.hw,2588 },2589 .num_parents = 1,2590 .flags = CLK_SET_RATE_PARENT,2591 .ops = &clk_branch2_ops,2592 },2593 },2594};2595 2596static struct clk_branch gcc_mdss_pclk0_clk = {2597 .halt_reg = 0x4d084,2598 .clkr = {2599 .enable_reg = 0x4d084,2600 .enable_mask = BIT(0),2601 .hw.init = &(struct clk_init_data){2602 .name = "gcc_mdss_pclk0_clk",2603 .parent_hws = (const struct clk_hw*[]){2604 &pclk0_clk_src.clkr.hw,2605 },2606 .num_parents = 1,2607 .flags = CLK_SET_RATE_PARENT,2608 .ops = &clk_branch2_ops,2609 },2610 },2611};2612 2613static struct clk_branch gcc_mdss_vsync_clk = {2614 .halt_reg = 0x4d090,2615 .clkr = {2616 .enable_reg = 0x4d090,2617 .enable_mask = BIT(0),2618 .hw.init = &(struct clk_init_data){2619 .name = "gcc_mdss_vsync_clk",2620 .parent_hws = (const struct clk_hw*[]){2621 &vsync_clk_src.clkr.hw,2622 },2623 .num_parents = 1,2624 .flags = CLK_SET_RATE_PARENT,2625 .ops = &clk_branch2_ops,2626 },2627 },2628};2629 2630static struct clk_branch gcc_mss_cfg_ahb_clk = {2631 .halt_reg = 0x49000,2632 .clkr = {2633 .enable_reg = 0x49000,2634 .enable_mask = BIT(0),2635 .hw.init = &(struct clk_init_data){2636 .name = "gcc_mss_cfg_ahb_clk",2637 .parent_hws = (const struct clk_hw*[]){2638 &pcnoc_bfdcd_clk_src.clkr.hw,2639 },2640 .num_parents = 1,2641 .flags = CLK_SET_RATE_PARENT,2642 .ops = &clk_branch2_ops,2643 },2644 },2645};2646 2647static struct clk_branch gcc_oxili_ahb_clk = {2648 .halt_reg = 0x59028,2649 .clkr = {2650 .enable_reg = 0x59028,2651 .enable_mask = BIT(0),2652 .hw.init = &(struct clk_init_data){2653 .name = "gcc_oxili_ahb_clk",2654 .parent_hws = (const struct clk_hw*[]){2655 &pcnoc_bfdcd_clk_src.clkr.hw,2656 },2657 .num_parents = 1,2658 .flags = CLK_SET_RATE_PARENT,2659 .ops = &clk_branch2_ops,2660 },2661 },2662};2663 2664static struct clk_branch gcc_oxili_gfx3d_clk = {2665 .halt_reg = 0x59020,2666 .clkr = {2667 .enable_reg = 0x59020,2668 .enable_mask = BIT(0),2669 .hw.init = &(struct clk_init_data){2670 .name = "gcc_oxili_gfx3d_clk",2671 .parent_hws = (const struct clk_hw*[]){2672 &gfx3d_clk_src.clkr.hw,2673 },2674 .num_parents = 1,2675 .flags = CLK_SET_RATE_PARENT,2676 .ops = &clk_branch2_ops,2677 },2678 },2679};2680 2681static struct clk_branch gcc_pdm2_clk = {2682 .halt_reg = 0x4400c,2683 .clkr = {2684 .enable_reg = 0x4400c,2685 .enable_mask = BIT(0),2686 .hw.init = &(struct clk_init_data){2687 .name = "gcc_pdm2_clk",2688 .parent_hws = (const struct clk_hw*[]){2689 &pdm2_clk_src.clkr.hw,2690 },2691 .num_parents = 1,2692 .flags = CLK_SET_RATE_PARENT,2693 .ops = &clk_branch2_ops,2694 },2695 },2696};2697 2698static struct clk_branch gcc_pdm_ahb_clk = {2699 .halt_reg = 0x44004,2700 .clkr = {2701 .enable_reg = 0x44004,2702 .enable_mask = BIT(0),2703 .hw.init = &(struct clk_init_data){2704 .name = "gcc_pdm_ahb_clk",2705 .parent_hws = (const struct clk_hw*[]){2706 &pcnoc_bfdcd_clk_src.clkr.hw,2707 },2708 .num_parents = 1,2709 .flags = CLK_SET_RATE_PARENT,2710 .ops = &clk_branch2_ops,2711 },2712 },2713};2714 2715static struct clk_branch gcc_prng_ahb_clk = {2716 .halt_reg = 0x13004,2717 .halt_check = BRANCH_HALT_VOTED,2718 .clkr = {2719 .enable_reg = 0x45004,2720 .enable_mask = BIT(8),2721 .hw.init = &(struct clk_init_data){2722 .name = "gcc_prng_ahb_clk",2723 .parent_hws = (const struct clk_hw*[]){2724 &pcnoc_bfdcd_clk_src.clkr.hw,2725 },2726 .num_parents = 1,2727 .ops = &clk_branch2_ops,2728 },2729 },2730};2731 2732static struct clk_branch gcc_sdcc1_ahb_clk = {2733 .halt_reg = 0x4201c,2734 .clkr = {2735 .enable_reg = 0x4201c,2736 .enable_mask = BIT(0),2737 .hw.init = &(struct clk_init_data){2738 .name = "gcc_sdcc1_ahb_clk",2739 .parent_hws = (const struct clk_hw*[]){2740 &pcnoc_bfdcd_clk_src.clkr.hw,2741 },2742 .num_parents = 1,2743 .flags = CLK_SET_RATE_PARENT,2744 .ops = &clk_branch2_ops,2745 },2746 },2747};2748 2749static struct clk_branch gcc_sdcc1_apps_clk = {2750 .halt_reg = 0x42018,2751 .clkr = {2752 .enable_reg = 0x42018,2753 .enable_mask = BIT(0),2754 .hw.init = &(struct clk_init_data){2755 .name = "gcc_sdcc1_apps_clk",2756 .parent_hws = (const struct clk_hw*[]){2757 &sdcc1_apps_clk_src.clkr.hw,2758 },2759 .num_parents = 1,2760 .flags = CLK_SET_RATE_PARENT,2761 .ops = &clk_branch2_ops,2762 },2763 },2764};2765 2766static struct clk_branch gcc_sdcc2_ahb_clk = {2767 .halt_reg = 0x4301c,2768 .clkr = {2769 .enable_reg = 0x4301c,2770 .enable_mask = BIT(0),2771 .hw.init = &(struct clk_init_data){2772 .name = "gcc_sdcc2_ahb_clk",2773 .parent_hws = (const struct clk_hw*[]){2774 &pcnoc_bfdcd_clk_src.clkr.hw,2775 },2776 .num_parents = 1,2777 .flags = CLK_SET_RATE_PARENT,2778 .ops = &clk_branch2_ops,2779 },2780 },2781};2782 2783static struct clk_branch gcc_sdcc2_apps_clk = {2784 .halt_reg = 0x43018,2785 .clkr = {2786 .enable_reg = 0x43018,2787 .enable_mask = BIT(0),2788 .hw.init = &(struct clk_init_data){2789 .name = "gcc_sdcc2_apps_clk",2790 .parent_hws = (const struct clk_hw*[]){2791 &sdcc2_apps_clk_src.clkr.hw,2792 },2793 .num_parents = 1,2794 .flags = CLK_SET_RATE_PARENT,2795 .ops = &clk_branch2_ops,2796 },2797 },2798};2799 2800static struct clk_rcg2 bimc_ddr_clk_src = {2801 .cmd_rcgr = 0x32004,2802 .hid_width = 5,2803 .parent_map = gcc_xo_gpll0_bimc_map,2804 .clkr.hw.init = &(struct clk_init_data){2805 .name = "bimc_ddr_clk_src",2806 .parent_data = gcc_xo_gpll0_bimc,2807 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),2808 .ops = &clk_rcg2_ops,2809 .flags = CLK_GET_RATE_NOCACHE,2810 },2811};2812 2813static struct clk_branch gcc_mss_q6_bimc_axi_clk = {2814 .halt_reg = 0x49004,2815 .clkr = {2816 .enable_reg = 0x49004,2817 .enable_mask = BIT(0),2818 .hw.init = &(struct clk_init_data){2819 .name = "gcc_mss_q6_bimc_axi_clk",2820 .parent_hws = (const struct clk_hw*[]){2821 &bimc_ddr_clk_src.clkr.hw,2822 },2823 .num_parents = 1,2824 .flags = CLK_SET_RATE_PARENT,2825 .ops = &clk_branch2_ops,2826 },2827 },2828};2829 2830static struct clk_branch gcc_apss_tcu_clk = {2831 .halt_reg = 0x12018,2832 .clkr = {2833 .enable_reg = 0x4500c,2834 .enable_mask = BIT(1),2835 .hw.init = &(struct clk_init_data){2836 .name = "gcc_apss_tcu_clk",2837 .parent_hws = (const struct clk_hw*[]){2838 &bimc_ddr_clk_src.clkr.hw,2839 },2840 .num_parents = 1,2841 .ops = &clk_branch2_ops,2842 },2843 },2844};2845 2846static struct clk_branch gcc_gfx_tcu_clk = {2847 .halt_reg = 0x12020,2848 .clkr = {2849 .enable_reg = 0x4500c,2850 .enable_mask = BIT(2),2851 .hw.init = &(struct clk_init_data){2852 .name = "gcc_gfx_tcu_clk",2853 .parent_hws = (const struct clk_hw*[]){2854 &bimc_ddr_clk_src.clkr.hw,2855 },2856 .num_parents = 1,2857 .ops = &clk_branch2_ops,2858 },2859 },2860};2861 2862static struct clk_branch gcc_gtcu_ahb_clk = {2863 .halt_reg = 0x12044,2864 .clkr = {2865 .enable_reg = 0x4500c,2866 .enable_mask = BIT(13),2867 .hw.init = &(struct clk_init_data){2868 .name = "gcc_gtcu_ahb_clk",2869 .parent_hws = (const struct clk_hw*[]){2870 &pcnoc_bfdcd_clk_src.clkr.hw,2871 },2872 .num_parents = 1,2873 .flags = CLK_SET_RATE_PARENT,2874 .ops = &clk_branch2_ops,2875 },2876 },2877};2878 2879static struct clk_branch gcc_bimc_gfx_clk = {2880 .halt_reg = 0x31024,2881 .clkr = {2882 .enable_reg = 0x31024,2883 .enable_mask = BIT(0),2884 .hw.init = &(struct clk_init_data){2885 .name = "gcc_bimc_gfx_clk",2886 .parent_hws = (const struct clk_hw*[]){2887 &bimc_gpu_clk_src.clkr.hw,2888 },2889 .num_parents = 1,2890 .flags = CLK_SET_RATE_PARENT,2891 .ops = &clk_branch2_ops,2892 },2893 },2894};2895 2896static struct clk_branch gcc_bimc_gpu_clk = {2897 .halt_reg = 0x31040,2898 .clkr = {2899 .enable_reg = 0x31040,2900 .enable_mask = BIT(0),2901 .hw.init = &(struct clk_init_data){2902 .name = "gcc_bimc_gpu_clk",2903 .parent_hws = (const struct clk_hw*[]){2904 &bimc_gpu_clk_src.clkr.hw,2905 },2906 .num_parents = 1,2907 .flags = CLK_SET_RATE_PARENT,2908 .ops = &clk_branch2_ops,2909 },2910 },2911};2912 2913static struct clk_branch gcc_jpeg_tbu_clk = {2914 .halt_reg = 0x12034,2915 .clkr = {2916 .enable_reg = 0x4500c,2917 .enable_mask = BIT(10),2918 .hw.init = &(struct clk_init_data){2919 .name = "gcc_jpeg_tbu_clk",2920 .parent_hws = (const struct clk_hw*[]){2921 &system_noc_bfdcd_clk_src.clkr.hw,2922 },2923 .num_parents = 1,2924 .flags = CLK_SET_RATE_PARENT,2925 .ops = &clk_branch2_ops,2926 },2927 },2928};2929 2930static struct clk_branch gcc_mdp_tbu_clk = {2931 .halt_reg = 0x1201c,2932 .clkr = {2933 .enable_reg = 0x4500c,2934 .enable_mask = BIT(4),2935 .hw.init = &(struct clk_init_data){2936 .name = "gcc_mdp_tbu_clk",2937 .parent_hws = (const struct clk_hw*[]){2938 &system_noc_bfdcd_clk_src.clkr.hw,2939 },2940 .num_parents = 1,2941 .flags = CLK_SET_RATE_PARENT,2942 .ops = &clk_branch2_ops,2943 },2944 },2945};2946 2947static struct clk_branch gcc_smmu_cfg_clk = {2948 .halt_reg = 0x12038,2949 .clkr = {2950 .enable_reg = 0x4500c,2951 .enable_mask = BIT(12),2952 .hw.init = &(struct clk_init_data){2953 .name = "gcc_smmu_cfg_clk",2954 .parent_hws = (const struct clk_hw*[]){2955 &pcnoc_bfdcd_clk_src.clkr.hw,2956 },2957 .num_parents = 1,2958 .flags = CLK_SET_RATE_PARENT,2959 .ops = &clk_branch2_ops,2960 },2961 },2962};2963 2964static struct clk_branch gcc_venus_tbu_clk = {2965 .halt_reg = 0x12014,2966 .clkr = {2967 .enable_reg = 0x4500c,2968 .enable_mask = BIT(5),2969 .hw.init = &(struct clk_init_data){2970 .name = "gcc_venus_tbu_clk",2971 .parent_hws = (const struct clk_hw*[]){2972 &system_noc_bfdcd_clk_src.clkr.hw,2973 },2974 .num_parents = 1,2975 .flags = CLK_SET_RATE_PARENT,2976 .ops = &clk_branch2_ops,2977 },2978 },2979};2980 2981static struct clk_branch gcc_vfe_tbu_clk = {2982 .halt_reg = 0x1203c,2983 .clkr = {2984 .enable_reg = 0x4500c,2985 .enable_mask = BIT(9),2986 .hw.init = &(struct clk_init_data){2987 .name = "gcc_vfe_tbu_clk",2988 .parent_hws = (const struct clk_hw*[]){2989 &system_noc_bfdcd_clk_src.clkr.hw,2990 },2991 .num_parents = 1,2992 .flags = CLK_SET_RATE_PARENT,2993 .ops = &clk_branch2_ops,2994 },2995 },2996};2997 2998static struct clk_branch gcc_usb2a_phy_sleep_clk = {2999 .halt_reg = 0x4102c,3000 .clkr = {3001 .enable_reg = 0x4102c,3002 .enable_mask = BIT(0),3003 .hw.init = &(struct clk_init_data){3004 .name = "gcc_usb2a_phy_sleep_clk",3005 .parent_data = &(const struct clk_parent_data){3006 .fw_name = "sleep_clk", .name = "sleep_clk_src",3007 },3008 .num_parents = 1,3009 .flags = CLK_SET_RATE_PARENT,3010 .ops = &clk_branch2_ops,3011 },3012 },3013};3014 3015static struct clk_branch gcc_usb_hs_ahb_clk = {3016 .halt_reg = 0x41008,3017 .clkr = {3018 .enable_reg = 0x41008,3019 .enable_mask = BIT(0),3020 .hw.init = &(struct clk_init_data){3021 .name = "gcc_usb_hs_ahb_clk",3022 .parent_hws = (const struct clk_hw*[]){3023 &pcnoc_bfdcd_clk_src.clkr.hw,3024 },3025 .num_parents = 1,3026 .flags = CLK_SET_RATE_PARENT,3027 .ops = &clk_branch2_ops,3028 },3029 },3030};3031 3032static struct clk_branch gcc_usb_hs_system_clk = {3033 .halt_reg = 0x41004,3034 .clkr = {3035 .enable_reg = 0x41004,3036 .enable_mask = BIT(0),3037 .hw.init = &(struct clk_init_data){3038 .name = "gcc_usb_hs_system_clk",3039 .parent_hws = (const struct clk_hw*[]){3040 &usb_hs_system_clk_src.clkr.hw,3041 },3042 .num_parents = 1,3043 .flags = CLK_SET_RATE_PARENT,3044 .ops = &clk_branch2_ops,3045 },3046 },3047};3048 3049static struct clk_branch gcc_venus0_ahb_clk = {3050 .halt_reg = 0x4c020,3051 .clkr = {3052 .enable_reg = 0x4c020,3053 .enable_mask = BIT(0),3054 .hw.init = &(struct clk_init_data){3055 .name = "gcc_venus0_ahb_clk",3056 .parent_hws = (const struct clk_hw*[]){3057 &pcnoc_bfdcd_clk_src.clkr.hw,3058 },3059 .num_parents = 1,3060 .flags = CLK_SET_RATE_PARENT,3061 .ops = &clk_branch2_ops,3062 },3063 },3064};3065 3066static struct clk_branch gcc_venus0_axi_clk = {3067 .halt_reg = 0x4c024,3068 .clkr = {3069 .enable_reg = 0x4c024,3070 .enable_mask = BIT(0),3071 .hw.init = &(struct clk_init_data){3072 .name = "gcc_venus0_axi_clk",3073 .parent_hws = (const struct clk_hw*[]){3074 &system_noc_bfdcd_clk_src.clkr.hw,3075 },3076 .num_parents = 1,3077 .flags = CLK_SET_RATE_PARENT,3078 .ops = &clk_branch2_ops,3079 },3080 },3081};3082 3083static struct clk_branch gcc_venus0_vcodec0_clk = {3084 .halt_reg = 0x4c01c,3085 .clkr = {3086 .enable_reg = 0x4c01c,3087 .enable_mask = BIT(0),3088 .hw.init = &(struct clk_init_data){3089 .name = "gcc_venus0_vcodec0_clk",3090 .parent_hws = (const struct clk_hw*[]){3091 &vcodec0_clk_src.clkr.hw,3092 },3093 .num_parents = 1,3094 .flags = CLK_SET_RATE_PARENT,3095 .ops = &clk_branch2_ops,3096 },3097 },3098};3099 3100static struct gdsc venus_gdsc = {3101 .gdscr = 0x4c018,3102 .pd = {3103 .name = "venus",3104 },3105 .pwrsts = PWRSTS_OFF_ON,3106};3107 3108static struct gdsc mdss_gdsc = {3109 .gdscr = 0x4d078,3110 .pd = {3111 .name = "mdss",3112 },3113 .pwrsts = PWRSTS_OFF_ON,3114};3115 3116static struct gdsc jpeg_gdsc = {3117 .gdscr = 0x5701c,3118 .pd = {3119 .name = "jpeg",3120 },3121 .pwrsts = PWRSTS_OFF_ON,3122};3123 3124static struct gdsc vfe_gdsc = {3125 .gdscr = 0x58034,3126 .pd = {3127 .name = "vfe",3128 },3129 .pwrsts = PWRSTS_OFF_ON,3130};3131 3132static struct gdsc oxili_gdsc = {3133 .gdscr = 0x5901c,3134 .pd = {3135 .name = "oxili",3136 },3137 .pwrsts = PWRSTS_OFF_ON,3138};3139 3140static struct clk_regmap *gcc_msm8916_clocks[] = {3141 [GPLL0] = &gpll0.clkr,3142 [GPLL0_VOTE] = &gpll0_vote,3143 [BIMC_PLL] = &bimc_pll.clkr,3144 [BIMC_PLL_VOTE] = &bimc_pll_vote,3145 [GPLL1] = &gpll1.clkr,3146 [GPLL1_VOTE] = &gpll1_vote,3147 [GPLL2] = &gpll2.clkr,3148 [GPLL2_VOTE] = &gpll2_vote,3149 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,3150 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,3151 [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,3152 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,3153 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,3154 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,3155 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,3156 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,3157 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,3158 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,3159 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,3160 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,3161 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,3162 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,3163 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,3164 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,3165 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,3166 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,3167 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,3168 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,3169 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,3170 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,3171 [CCI_CLK_SRC] = &cci_clk_src.clkr,3172 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,3173 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,3174 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,3175 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,3176 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,3177 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,3178 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,3179 [CPP_CLK_SRC] = &cpp_clk_src.clkr,3180 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,3181 [GP1_CLK_SRC] = &gp1_clk_src.clkr,3182 [GP2_CLK_SRC] = &gp2_clk_src.clkr,3183 [GP3_CLK_SRC] = &gp3_clk_src.clkr,3184 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,3185 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,3186 [MDP_CLK_SRC] = &mdp_clk_src.clkr,3187 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,3188 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,3189 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,3190 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,3191 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,3192 [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,3193 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,3194 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,3195 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,3196 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,3197 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,3198 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,3199 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,3200 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,3201 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,3202 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,3203 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,3204 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,3205 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,3206 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,3207 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,3208 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,3209 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,3210 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,3211 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3212 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,3213 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,3214 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,3215 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,3216 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,3217 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,3218 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,3219 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,3220 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,3221 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,3222 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,3223 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,3224 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,3225 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,3226 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,3227 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,3228 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,3229 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,3230 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,3231 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,3232 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,3233 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,3234 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,3235 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,3236 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,3237 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,3238 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,3239 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,3240 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,3241 [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,3242 [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,3243 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,3244 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,3245 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,3246 [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,3247 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3248 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3249 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3250 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,3251 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,3252 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,3253 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,3254 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,3255 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,3256 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,3257 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,3258 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,3259 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,3260 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3261 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3262 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,3263 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,3264 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,3265 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3266 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3267 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,3268 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,3269 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,3270 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,3271 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,3272 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,3273 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,3274 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,3275 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,3276 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,3277 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,3278 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,3279 [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,3280 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,3281 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,3282 [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,3283 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,3284 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,3285 [ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,3286 [ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,3287 [ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,3288 [ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,3289 [ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,3290 [CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,3291 [GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,3292 [GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,3293 [GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,3294 [GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,3295 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,3296 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,3297 [GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,3298 [GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,3299 [GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,3300 [GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,3301 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,3302};3303 3304static struct gdsc *gcc_msm8916_gdscs[] = {3305 [VENUS_GDSC] = &venus_gdsc,3306 [MDSS_GDSC] = &mdss_gdsc,3307 [JPEG_GDSC] = &jpeg_gdsc,3308 [VFE_GDSC] = &vfe_gdsc,3309 [OXILI_GDSC] = &oxili_gdsc,3310};3311 3312static const struct qcom_reset_map gcc_msm8916_resets[] = {3313 [GCC_BLSP1_BCR] = { 0x01000 },3314 [GCC_BLSP1_QUP1_BCR] = { 0x02000 },3315 [GCC_BLSP1_UART1_BCR] = { 0x02038 },3316 [GCC_BLSP1_QUP2_BCR] = { 0x03008 },3317 [GCC_BLSP1_UART2_BCR] = { 0x03028 },3318 [GCC_BLSP1_QUP3_BCR] = { 0x04018 },3319 [GCC_BLSP1_QUP4_BCR] = { 0x05018 },3320 [GCC_BLSP1_QUP5_BCR] = { 0x06018 },3321 [GCC_BLSP1_QUP6_BCR] = { 0x07018 },3322 [GCC_IMEM_BCR] = { 0x0e000 },3323 [GCC_SMMU_BCR] = { 0x12000 },3324 [GCC_APSS_TCU_BCR] = { 0x12050 },3325 [GCC_SMMU_XPU_BCR] = { 0x12054 },3326 [GCC_PCNOC_TBU_BCR] = { 0x12058 },3327 [GCC_PRNG_BCR] = { 0x13000 },3328 [GCC_BOOT_ROM_BCR] = { 0x13008 },3329 [GCC_CRYPTO_BCR] = { 0x16000 },3330 [GCC_SEC_CTRL_BCR] = { 0x1a000 },3331 [GCC_AUDIO_CORE_BCR] = { 0x1c008 },3332 [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },3333 [GCC_DEHR_BCR] = { 0x1f000 },3334 [GCC_SYSTEM_NOC_BCR] = { 0x26000 },3335 [GCC_PCNOC_BCR] = { 0x27018 },3336 [GCC_TCSR_BCR] = { 0x28000 },3337 [GCC_QDSS_BCR] = { 0x29000 },3338 [GCC_DCD_BCR] = { 0x2a000 },3339 [GCC_MSG_RAM_BCR] = { 0x2b000 },3340 [GCC_MPM_BCR] = { 0x2c000 },3341 [GCC_SPMI_BCR] = { 0x2e000 },3342 [GCC_SPDM_BCR] = { 0x2f000 },3343 [GCC_MM_SPDM_BCR] = { 0x2f024 },3344 [GCC_BIMC_BCR] = { 0x31000 },3345 [GCC_RBCPR_BCR] = { 0x33000 },3346 [GCC_TLMM_BCR] = { 0x34000 },3347 [GCC_USB_HS_BCR] = { 0x41000 },3348 [GCC_USB2A_PHY_BCR] = { 0x41028 },3349 [GCC_SDCC1_BCR] = { 0x42000 },3350 [GCC_SDCC2_BCR] = { 0x43000 },3351 [GCC_PDM_BCR] = { 0x44000 },3352 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },3353 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },3354 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },3355 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },3356 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },3357 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },3358 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },3359 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },3360 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },3361 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },3362 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },3363 [GCC_MMSS_BCR] = { 0x4b000 },3364 [GCC_VENUS0_BCR] = { 0x4c014 },3365 [GCC_MDSS_BCR] = { 0x4d074 },3366 [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },3367 [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },3368 [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },3369 [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },3370 [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },3371 [GCC_CAMSS_PHY1_BCR] = { 0x4f018 },3372 [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },3373 [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },3374 [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },3375 [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },3376 [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },3377 [GCC_CAMSS_CCI_BCR] = { 0x51014 },3378 [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },3379 [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },3380 [GCC_CAMSS_GP0_BCR] = { 0x54014 },3381 [GCC_CAMSS_GP1_BCR] = { 0x55014 },3382 [GCC_CAMSS_TOP_BCR] = { 0x56000 },3383 [GCC_CAMSS_MICRO_BCR] = { 0x56008 },3384 [GCC_CAMSS_JPEG_BCR] = { 0x57018 },3385 [GCC_CAMSS_VFE_BCR] = { 0x58030 },3386 [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },3387 [GCC_OXILI_BCR] = { 0x59018 },3388 [GCC_GMEM_BCR] = { 0x5902c },3389 [GCC_CAMSS_AHB_BCR] = { 0x5a018 },3390 [GCC_MDP_TBU_BCR] = { 0x62000 },3391 [GCC_GFX_TBU_BCR] = { 0x63000 },3392 [GCC_GFX_TCU_BCR] = { 0x64000 },3393 [GCC_MSS_TBU_AXI_BCR] = { 0x65000 },3394 [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },3395 [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },3396 [GCC_GTCU_AHB_BCR] = { 0x68000 },3397 [GCC_SMMU_CFG_BCR] = { 0x69000 },3398 [GCC_VFE_TBU_BCR] = { 0x6a000 },3399 [GCC_VENUS_TBU_BCR] = { 0x6b000 },3400 [GCC_JPEG_TBU_BCR] = { 0x6c000 },3401 [GCC_PRONTO_TBU_BCR] = { 0x6d000 },3402 [GCC_SMMU_CATS_BCR] = { 0x7c000 },3403};3404 3405static const struct regmap_config gcc_msm8916_regmap_config = {3406 .reg_bits = 32,3407 .reg_stride = 4,3408 .val_bits = 32,3409 .max_register = 0x80000,3410 .fast_io = true,3411};3412 3413static const struct qcom_cc_desc gcc_msm8916_desc = {3414 .config = &gcc_msm8916_regmap_config,3415 .clks = gcc_msm8916_clocks,3416 .num_clks = ARRAY_SIZE(gcc_msm8916_clocks),3417 .resets = gcc_msm8916_resets,3418 .num_resets = ARRAY_SIZE(gcc_msm8916_resets),3419 .gdscs = gcc_msm8916_gdscs,3420 .num_gdscs = ARRAY_SIZE(gcc_msm8916_gdscs),3421};3422 3423static const struct of_device_id gcc_msm8916_match_table[] = {3424 { .compatible = "qcom,gcc-msm8916" },3425 { }3426};3427MODULE_DEVICE_TABLE(of, gcc_msm8916_match_table);3428 3429static int gcc_msm8916_probe(struct platform_device *pdev)3430{3431 int ret;3432 struct device *dev = &pdev->dev;3433 3434 ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);3435 if (ret)3436 return ret;3437 3438 ret = qcom_cc_register_sleep_clk(dev);3439 if (ret)3440 return ret;3441 3442 return qcom_cc_probe(pdev, &gcc_msm8916_desc);3443}3444 3445static struct platform_driver gcc_msm8916_driver = {3446 .probe = gcc_msm8916_probe,3447 .driver = {3448 .name = "gcc-msm8916",3449 .of_match_table = gcc_msm8916_match_table,3450 },3451};3452 3453static int __init gcc_msm8916_init(void)3454{3455 return platform_driver_register(&gcc_msm8916_driver);3456}3457core_initcall(gcc_msm8916_init);3458 3459static void __exit gcc_msm8916_exit(void)3460{3461 platform_driver_unregister(&gcc_msm8916_driver);3462}3463module_exit(gcc_msm8916_exit);3464 3465MODULE_DESCRIPTION("Qualcomm GCC MSM8916 Driver");3466MODULE_LICENSE("GPL v2");3467MODULE_ALIAS("platform:gcc-msm8916");3468