linux/drivers/clk/qcom/gcc-msm8974.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
   3 *
   4 * This software is licensed under the terms of the GNU General Public
   5 * License version 2, as published by the Free Software Foundation, and
   6 * may be copied, distributed, and modified under those terms.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 */
  13
  14#include <linux/kernel.h>
  15#include <linux/bitops.h>
  16#include <linux/err.h>
  17#include <linux/platform_device.h>
  18#include <linux/module.h>
  19#include <linux/of.h>
  20#include <linux/of_device.h>
  21#include <linux/clk-provider.h>
  22#include <linux/regmap.h>
  23#include <linux/reset-controller.h>
  24
  25#include <dt-bindings/clock/qcom,gcc-msm8974.h>
  26#include <dt-bindings/reset/qcom,gcc-msm8974.h>
  27
  28#include "common.h"
  29#include "clk-regmap.h"
  30#include "clk-pll.h"
  31#include "clk-rcg.h"
  32#include "clk-branch.h"
  33#include "reset.h"
  34#include "gdsc.h"
  35
  36enum {
  37        P_XO,
  38        P_GPLL0,
  39        P_GPLL1,
  40        P_GPLL4,
  41};
  42
  43static const struct parent_map gcc_xo_gpll0_map[] = {
  44        { P_XO, 0 },
  45        { P_GPLL0, 1 }
  46};
  47
  48static const char * const gcc_xo_gpll0[] = {
  49        "xo",
  50        "gpll0_vote",
  51};
  52
  53static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  54        { P_XO, 0 },
  55        { P_GPLL0, 1 },
  56        { P_GPLL4, 5 }
  57};
  58
  59static const char * const gcc_xo_gpll0_gpll4[] = {
  60        "xo",
  61        "gpll0_vote",
  62        "gpll4_vote",
  63};
  64
  65static struct clk_pll gpll0 = {
  66        .l_reg = 0x0004,
  67        .m_reg = 0x0008,
  68        .n_reg = 0x000c,
  69        .config_reg = 0x0014,
  70        .mode_reg = 0x0000,
  71        .status_reg = 0x001c,
  72        .status_bit = 17,
  73        .clkr.hw.init = &(struct clk_init_data){
  74                .name = "gpll0",
  75                .parent_names = (const char *[]){ "xo" },
  76                .num_parents = 1,
  77                .ops = &clk_pll_ops,
  78        },
  79};
  80
  81static struct clk_regmap gpll0_vote = {
  82        .enable_reg = 0x1480,
  83        .enable_mask = BIT(0),
  84        .hw.init = &(struct clk_init_data){
  85                .name = "gpll0_vote",
  86                .parent_names = (const char *[]){ "gpll0" },
  87                .num_parents = 1,
  88                .ops = &clk_pll_vote_ops,
  89        },
  90};
  91
  92static struct clk_rcg2 config_noc_clk_src = {
  93        .cmd_rcgr = 0x0150,
  94        .hid_width = 5,
  95        .parent_map = gcc_xo_gpll0_map,
  96        .clkr.hw.init = &(struct clk_init_data){
  97                .name = "config_noc_clk_src",
  98                .parent_names = gcc_xo_gpll0,
  99                .num_parents = 2,
 100                .ops = &clk_rcg2_ops,
 101        },
 102};
 103
 104static struct clk_rcg2 periph_noc_clk_src = {
 105        .cmd_rcgr = 0x0190,
 106        .hid_width = 5,
 107        .parent_map = gcc_xo_gpll0_map,
 108        .clkr.hw.init = &(struct clk_init_data){
 109                .name = "periph_noc_clk_src",
 110                .parent_names = gcc_xo_gpll0,
 111                .num_parents = 2,
 112                .ops = &clk_rcg2_ops,
 113        },
 114};
 115
 116static struct clk_rcg2 system_noc_clk_src = {
 117        .cmd_rcgr = 0x0120,
 118        .hid_width = 5,
 119        .parent_map = gcc_xo_gpll0_map,
 120        .clkr.hw.init = &(struct clk_init_data){
 121                .name = "system_noc_clk_src",
 122                .parent_names = gcc_xo_gpll0,
 123                .num_parents = 2,
 124                .ops = &clk_rcg2_ops,
 125        },
 126};
 127
 128static struct clk_pll gpll1 = {
 129        .l_reg = 0x0044,
 130        .m_reg = 0x0048,
 131        .n_reg = 0x004c,
 132        .config_reg = 0x0054,
 133        .mode_reg = 0x0040,
 134        .status_reg = 0x005c,
 135        .status_bit = 17,
 136        .clkr.hw.init = &(struct clk_init_data){
 137                .name = "gpll1",
 138                .parent_names = (const char *[]){ "xo" },
 139                .num_parents = 1,
 140                .ops = &clk_pll_ops,
 141        },
 142};
 143
 144static struct clk_regmap gpll1_vote = {
 145        .enable_reg = 0x1480,
 146        .enable_mask = BIT(1),
 147        .hw.init = &(struct clk_init_data){
 148                .name = "gpll1_vote",
 149                .parent_names = (const char *[]){ "gpll1" },
 150                .num_parents = 1,
 151                .ops = &clk_pll_vote_ops,
 152        },
 153};
 154
 155static struct clk_pll gpll4 = {
 156        .l_reg = 0x1dc4,
 157        .m_reg = 0x1dc8,
 158        .n_reg = 0x1dcc,
 159        .config_reg = 0x1dd4,
 160        .mode_reg = 0x1dc0,
 161        .status_reg = 0x1ddc,
 162        .status_bit = 17,
 163        .clkr.hw.init = &(struct clk_init_data){
 164                .name = "gpll4",
 165                .parent_names = (const char *[]){ "xo" },
 166                .num_parents = 1,
 167                .ops = &clk_pll_ops,
 168        },
 169};
 170
 171static struct clk_regmap gpll4_vote = {
 172        .enable_reg = 0x1480,
 173        .enable_mask = BIT(4),
 174        .hw.init = &(struct clk_init_data){
 175                .name = "gpll4_vote",
 176                .parent_names = (const char *[]){ "gpll4" },
 177                .num_parents = 1,
 178                .ops = &clk_pll_vote_ops,
 179        },
 180};
 181
 182static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
 183        F(125000000, P_GPLL0, 1, 5, 24),
 184        { }
 185};
 186
 187static struct clk_rcg2 usb30_master_clk_src = {
 188        .cmd_rcgr = 0x03d4,
 189        .mnd_width = 8,
 190        .hid_width = 5,
 191        .parent_map = gcc_xo_gpll0_map,
 192        .freq_tbl = ftbl_gcc_usb30_master_clk,
 193        .clkr.hw.init = &(struct clk_init_data){
 194                .name = "usb30_master_clk_src",
 195                .parent_names = gcc_xo_gpll0,
 196                .num_parents = 2,
 197                .ops = &clk_rcg2_ops,
 198        },
 199};
 200
 201static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
 202        F(19200000, P_XO, 1, 0, 0),
 203        F(37500000, P_GPLL0, 16, 0, 0),
 204        F(50000000, P_GPLL0, 12, 0, 0),
 205        { }
 206};
 207
 208static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 209        .cmd_rcgr = 0x0660,
 210        .hid_width = 5,
 211        .parent_map = gcc_xo_gpll0_map,
 212        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 213        .clkr.hw.init = &(struct clk_init_data){
 214                .name = "blsp1_qup1_i2c_apps_clk_src",
 215                .parent_names = gcc_xo_gpll0,
 216                .num_parents = 2,
 217                .ops = &clk_rcg2_ops,
 218        },
 219};
 220
 221static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
 222        F(960000, P_XO, 10, 1, 2),
 223        F(4800000, P_XO, 4, 0, 0),
 224        F(9600000, P_XO, 2, 0, 0),
 225        F(15000000, P_GPLL0, 10, 1, 4),
 226        F(19200000, P_XO, 1, 0, 0),
 227        F(25000000, P_GPLL0, 12, 1, 2),
 228        F(50000000, P_GPLL0, 12, 0, 0),
 229        { }
 230};
 231
 232static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 233        .cmd_rcgr = 0x064c,
 234        .mnd_width = 8,
 235        .hid_width = 5,
 236        .parent_map = gcc_xo_gpll0_map,
 237        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 238        .clkr.hw.init = &(struct clk_init_data){
 239                .name = "blsp1_qup1_spi_apps_clk_src",
 240                .parent_names = gcc_xo_gpll0,
 241                .num_parents = 2,
 242                .ops = &clk_rcg2_ops,
 243        },
 244};
 245
 246static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 247        .cmd_rcgr = 0x06e0,
 248        .hid_width = 5,
 249        .parent_map = gcc_xo_gpll0_map,
 250        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 251        .clkr.hw.init = &(struct clk_init_data){
 252                .name = "blsp1_qup2_i2c_apps_clk_src",
 253                .parent_names = gcc_xo_gpll0,
 254                .num_parents = 2,
 255                .ops = &clk_rcg2_ops,
 256        },
 257};
 258
 259static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 260        .cmd_rcgr = 0x06cc,
 261        .mnd_width = 8,
 262        .hid_width = 5,
 263        .parent_map = gcc_xo_gpll0_map,
 264        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 265        .clkr.hw.init = &(struct clk_init_data){
 266                .name = "blsp1_qup2_spi_apps_clk_src",
 267                .parent_names = gcc_xo_gpll0,
 268                .num_parents = 2,
 269                .ops = &clk_rcg2_ops,
 270        },
 271};
 272
 273static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 274        .cmd_rcgr = 0x0760,
 275        .hid_width = 5,
 276        .parent_map = gcc_xo_gpll0_map,
 277        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 278        .clkr.hw.init = &(struct clk_init_data){
 279                .name = "blsp1_qup3_i2c_apps_clk_src",
 280                .parent_names = gcc_xo_gpll0,
 281                .num_parents = 2,
 282                .ops = &clk_rcg2_ops,
 283        },
 284};
 285
 286static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 287        .cmd_rcgr = 0x074c,
 288        .mnd_width = 8,
 289        .hid_width = 5,
 290        .parent_map = gcc_xo_gpll0_map,
 291        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 292        .clkr.hw.init = &(struct clk_init_data){
 293                .name = "blsp1_qup3_spi_apps_clk_src",
 294                .parent_names = gcc_xo_gpll0,
 295                .num_parents = 2,
 296                .ops = &clk_rcg2_ops,
 297        },
 298};
 299
 300static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 301        .cmd_rcgr = 0x07e0,
 302        .hid_width = 5,
 303        .parent_map = gcc_xo_gpll0_map,
 304        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 305        .clkr.hw.init = &(struct clk_init_data){
 306                .name = "blsp1_qup4_i2c_apps_clk_src",
 307                .parent_names = gcc_xo_gpll0,
 308                .num_parents = 2,
 309                .ops = &clk_rcg2_ops,
 310        },
 311};
 312
 313static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 314        .cmd_rcgr = 0x07cc,
 315        .mnd_width = 8,
 316        .hid_width = 5,
 317        .parent_map = gcc_xo_gpll0_map,
 318        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 319        .clkr.hw.init = &(struct clk_init_data){
 320                .name = "blsp1_qup4_spi_apps_clk_src",
 321                .parent_names = gcc_xo_gpll0,
 322                .num_parents = 2,
 323                .ops = &clk_rcg2_ops,
 324        },
 325};
 326
 327static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
 328        .cmd_rcgr = 0x0860,
 329        .hid_width = 5,
 330        .parent_map = gcc_xo_gpll0_map,
 331        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 332        .clkr.hw.init = &(struct clk_init_data){
 333                .name = "blsp1_qup5_i2c_apps_clk_src",
 334                .parent_names = gcc_xo_gpll0,
 335                .num_parents = 2,
 336                .ops = &clk_rcg2_ops,
 337        },
 338};
 339
 340static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
 341        .cmd_rcgr = 0x084c,
 342        .mnd_width = 8,
 343        .hid_width = 5,
 344        .parent_map = gcc_xo_gpll0_map,
 345        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 346        .clkr.hw.init = &(struct clk_init_data){
 347                .name = "blsp1_qup5_spi_apps_clk_src",
 348                .parent_names = gcc_xo_gpll0,
 349                .num_parents = 2,
 350                .ops = &clk_rcg2_ops,
 351        },
 352};
 353
 354static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
 355        .cmd_rcgr = 0x08e0,
 356        .hid_width = 5,
 357        .parent_map = gcc_xo_gpll0_map,
 358        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 359        .clkr.hw.init = &(struct clk_init_data){
 360                .name = "blsp1_qup6_i2c_apps_clk_src",
 361                .parent_names = gcc_xo_gpll0,
 362                .num_parents = 2,
 363                .ops = &clk_rcg2_ops,
 364        },
 365};
 366
 367static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
 368        .cmd_rcgr = 0x08cc,
 369        .mnd_width = 8,
 370        .hid_width = 5,
 371        .parent_map = gcc_xo_gpll0_map,
 372        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 373        .clkr.hw.init = &(struct clk_init_data){
 374                .name = "blsp1_qup6_spi_apps_clk_src",
 375                .parent_names = gcc_xo_gpll0,
 376                .num_parents = 2,
 377                .ops = &clk_rcg2_ops,
 378        },
 379};
 380
 381static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
 382        F(3686400, P_GPLL0, 1, 96, 15625),
 383        F(7372800, P_GPLL0, 1, 192, 15625),
 384        F(14745600, P_GPLL0, 1, 384, 15625),
 385        F(16000000, P_GPLL0, 5, 2, 15),
 386        F(19200000, P_XO, 1, 0, 0),
 387        F(24000000, P_GPLL0, 5, 1, 5),
 388        F(32000000, P_GPLL0, 1, 4, 75),
 389        F(40000000, P_GPLL0, 15, 0, 0),
 390        F(46400000, P_GPLL0, 1, 29, 375),
 391        F(48000000, P_GPLL0, 12.5, 0, 0),
 392        F(51200000, P_GPLL0, 1, 32, 375),
 393        F(56000000, P_GPLL0, 1, 7, 75),
 394        F(58982400, P_GPLL0, 1, 1536, 15625),
 395        F(60000000, P_GPLL0, 10, 0, 0),
 396        F(63160000, P_GPLL0, 9.5, 0, 0),
 397        { }
 398};
 399
 400static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 401        .cmd_rcgr = 0x068c,
 402        .mnd_width = 16,
 403        .hid_width = 5,
 404        .parent_map = gcc_xo_gpll0_map,
 405        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 406        .clkr.hw.init = &(struct clk_init_data){
 407                .name = "blsp1_uart1_apps_clk_src",
 408                .parent_names = gcc_xo_gpll0,
 409                .num_parents = 2,
 410                .ops = &clk_rcg2_ops,
 411        },
 412};
 413
 414static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 415        .cmd_rcgr = 0x070c,
 416        .mnd_width = 16,
 417        .hid_width = 5,
 418        .parent_map = gcc_xo_gpll0_map,
 419        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 420        .clkr.hw.init = &(struct clk_init_data){
 421                .name = "blsp1_uart2_apps_clk_src",
 422                .parent_names = gcc_xo_gpll0,
 423                .num_parents = 2,
 424                .ops = &clk_rcg2_ops,
 425        },
 426};
 427
 428static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 429        .cmd_rcgr = 0x078c,
 430        .mnd_width = 16,
 431        .hid_width = 5,
 432        .parent_map = gcc_xo_gpll0_map,
 433        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 434        .clkr.hw.init = &(struct clk_init_data){
 435                .name = "blsp1_uart3_apps_clk_src",
 436                .parent_names = gcc_xo_gpll0,
 437                .num_parents = 2,
 438                .ops = &clk_rcg2_ops,
 439        },
 440};
 441
 442static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
 443        .cmd_rcgr = 0x080c,
 444        .mnd_width = 16,
 445        .hid_width = 5,
 446        .parent_map = gcc_xo_gpll0_map,
 447        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 448        .clkr.hw.init = &(struct clk_init_data){
 449                .name = "blsp1_uart4_apps_clk_src",
 450                .parent_names = gcc_xo_gpll0,
 451                .num_parents = 2,
 452                .ops = &clk_rcg2_ops,
 453        },
 454};
 455
 456static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
 457        .cmd_rcgr = 0x088c,
 458        .mnd_width = 16,
 459        .hid_width = 5,
 460        .parent_map = gcc_xo_gpll0_map,
 461        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 462        .clkr.hw.init = &(struct clk_init_data){
 463                .name = "blsp1_uart5_apps_clk_src",
 464                .parent_names = gcc_xo_gpll0,
 465                .num_parents = 2,
 466                .ops = &clk_rcg2_ops,
 467        },
 468};
 469
 470static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
 471        .cmd_rcgr = 0x090c,
 472        .mnd_width = 16,
 473        .hid_width = 5,
 474        .parent_map = gcc_xo_gpll0_map,
 475        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 476        .clkr.hw.init = &(struct clk_init_data){
 477                .name = "blsp1_uart6_apps_clk_src",
 478                .parent_names = gcc_xo_gpll0,
 479                .num_parents = 2,
 480                .ops = &clk_rcg2_ops,
 481        },
 482};
 483
 484static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 485        .cmd_rcgr = 0x09a0,
 486        .hid_width = 5,
 487        .parent_map = gcc_xo_gpll0_map,
 488        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 489        .clkr.hw.init = &(struct clk_init_data){
 490                .name = "blsp2_qup1_i2c_apps_clk_src",
 491                .parent_names = gcc_xo_gpll0,
 492                .num_parents = 2,
 493                .ops = &clk_rcg2_ops,
 494        },
 495};
 496
 497static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 498        .cmd_rcgr = 0x098c,
 499        .mnd_width = 8,
 500        .hid_width = 5,
 501        .parent_map = gcc_xo_gpll0_map,
 502        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 503        .clkr.hw.init = &(struct clk_init_data){
 504                .name = "blsp2_qup1_spi_apps_clk_src",
 505                .parent_names = gcc_xo_gpll0,
 506                .num_parents = 2,
 507                .ops = &clk_rcg2_ops,
 508        },
 509};
 510
 511static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 512        .cmd_rcgr = 0x0a20,
 513        .hid_width = 5,
 514        .parent_map = gcc_xo_gpll0_map,
 515        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 516        .clkr.hw.init = &(struct clk_init_data){
 517                .name = "blsp2_qup2_i2c_apps_clk_src",
 518                .parent_names = gcc_xo_gpll0,
 519                .num_parents = 2,
 520                .ops = &clk_rcg2_ops,
 521        },
 522};
 523
 524static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 525        .cmd_rcgr = 0x0a0c,
 526        .mnd_width = 8,
 527        .hid_width = 5,
 528        .parent_map = gcc_xo_gpll0_map,
 529        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 530        .clkr.hw.init = &(struct clk_init_data){
 531                .name = "blsp2_qup2_spi_apps_clk_src",
 532                .parent_names = gcc_xo_gpll0,
 533                .num_parents = 2,
 534                .ops = &clk_rcg2_ops,
 535        },
 536};
 537
 538static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 539        .cmd_rcgr = 0x0aa0,
 540        .hid_width = 5,
 541        .parent_map = gcc_xo_gpll0_map,
 542        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 543        .clkr.hw.init = &(struct clk_init_data){
 544                .name = "blsp2_qup3_i2c_apps_clk_src",
 545                .parent_names = gcc_xo_gpll0,
 546                .num_parents = 2,
 547                .ops = &clk_rcg2_ops,
 548        },
 549};
 550
 551static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 552        .cmd_rcgr = 0x0a8c,
 553        .mnd_width = 8,
 554        .hid_width = 5,
 555        .parent_map = gcc_xo_gpll0_map,
 556        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 557        .clkr.hw.init = &(struct clk_init_data){
 558                .name = "blsp2_qup3_spi_apps_clk_src",
 559                .parent_names = gcc_xo_gpll0,
 560                .num_parents = 2,
 561                .ops = &clk_rcg2_ops,
 562        },
 563};
 564
 565static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 566        .cmd_rcgr = 0x0b20,
 567        .hid_width = 5,
 568        .parent_map = gcc_xo_gpll0_map,
 569        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 570        .clkr.hw.init = &(struct clk_init_data){
 571                .name = "blsp2_qup4_i2c_apps_clk_src",
 572                .parent_names = gcc_xo_gpll0,
 573                .num_parents = 2,
 574                .ops = &clk_rcg2_ops,
 575        },
 576};
 577
 578static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 579        .cmd_rcgr = 0x0b0c,
 580        .mnd_width = 8,
 581        .hid_width = 5,
 582        .parent_map = gcc_xo_gpll0_map,
 583        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 584        .clkr.hw.init = &(struct clk_init_data){
 585                .name = "blsp2_qup4_spi_apps_clk_src",
 586                .parent_names = gcc_xo_gpll0,
 587                .num_parents = 2,
 588                .ops = &clk_rcg2_ops,
 589        },
 590};
 591
 592static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
 593        .cmd_rcgr = 0x0ba0,
 594        .hid_width = 5,
 595        .parent_map = gcc_xo_gpll0_map,
 596        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 597        .clkr.hw.init = &(struct clk_init_data){
 598                .name = "blsp2_qup5_i2c_apps_clk_src",
 599                .parent_names = gcc_xo_gpll0,
 600                .num_parents = 2,
 601                .ops = &clk_rcg2_ops,
 602        },
 603};
 604
 605static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
 606        .cmd_rcgr = 0x0b8c,
 607        .mnd_width = 8,
 608        .hid_width = 5,
 609        .parent_map = gcc_xo_gpll0_map,
 610        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 611        .clkr.hw.init = &(struct clk_init_data){
 612                .name = "blsp2_qup5_spi_apps_clk_src",
 613                .parent_names = gcc_xo_gpll0,
 614                .num_parents = 2,
 615                .ops = &clk_rcg2_ops,
 616        },
 617};
 618
 619static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
 620        .cmd_rcgr = 0x0c20,
 621        .hid_width = 5,
 622        .parent_map = gcc_xo_gpll0_map,
 623        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 624        .clkr.hw.init = &(struct clk_init_data){
 625                .name = "blsp2_qup6_i2c_apps_clk_src",
 626                .parent_names = gcc_xo_gpll0,
 627                .num_parents = 2,
 628                .ops = &clk_rcg2_ops,
 629        },
 630};
 631
 632static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
 633        .cmd_rcgr = 0x0c0c,
 634        .mnd_width = 8,
 635        .hid_width = 5,
 636        .parent_map = gcc_xo_gpll0_map,
 637        .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 638        .clkr.hw.init = &(struct clk_init_data){
 639                .name = "blsp2_qup6_spi_apps_clk_src",
 640                .parent_names = gcc_xo_gpll0,
 641                .num_parents = 2,
 642                .ops = &clk_rcg2_ops,
 643        },
 644};
 645
 646static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 647        .cmd_rcgr = 0x09cc,
 648        .mnd_width = 16,
 649        .hid_width = 5,
 650        .parent_map = gcc_xo_gpll0_map,
 651        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 652        .clkr.hw.init = &(struct clk_init_data){
 653                .name = "blsp2_uart1_apps_clk_src",
 654                .parent_names = gcc_xo_gpll0,
 655                .num_parents = 2,
 656                .ops = &clk_rcg2_ops,
 657        },
 658};
 659
 660static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 661        .cmd_rcgr = 0x0a4c,
 662        .mnd_width = 16,
 663        .hid_width = 5,
 664        .parent_map = gcc_xo_gpll0_map,
 665        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 666        .clkr.hw.init = &(struct clk_init_data){
 667                .name = "blsp2_uart2_apps_clk_src",
 668                .parent_names = gcc_xo_gpll0,
 669                .num_parents = 2,
 670                .ops = &clk_rcg2_ops,
 671        },
 672};
 673
 674static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
 675        .cmd_rcgr = 0x0acc,
 676        .mnd_width = 16,
 677        .hid_width = 5,
 678        .parent_map = gcc_xo_gpll0_map,
 679        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 680        .clkr.hw.init = &(struct clk_init_data){
 681                .name = "blsp2_uart3_apps_clk_src",
 682                .parent_names = gcc_xo_gpll0,
 683                .num_parents = 2,
 684                .ops = &clk_rcg2_ops,
 685        },
 686};
 687
 688static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
 689        .cmd_rcgr = 0x0b4c,
 690        .mnd_width = 16,
 691        .hid_width = 5,
 692        .parent_map = gcc_xo_gpll0_map,
 693        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 694        .clkr.hw.init = &(struct clk_init_data){
 695                .name = "blsp2_uart4_apps_clk_src",
 696                .parent_names = gcc_xo_gpll0,
 697                .num_parents = 2,
 698                .ops = &clk_rcg2_ops,
 699        },
 700};
 701
 702static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
 703        .cmd_rcgr = 0x0bcc,
 704        .mnd_width = 16,
 705        .hid_width = 5,
 706        .parent_map = gcc_xo_gpll0_map,
 707        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 708        .clkr.hw.init = &(struct clk_init_data){
 709                .name = "blsp2_uart5_apps_clk_src",
 710                .parent_names = gcc_xo_gpll0,
 711                .num_parents = 2,
 712                .ops = &clk_rcg2_ops,
 713        },
 714};
 715
 716static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
 717        .cmd_rcgr = 0x0c4c,
 718        .mnd_width = 16,
 719        .hid_width = 5,
 720        .parent_map = gcc_xo_gpll0_map,
 721        .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 722        .clkr.hw.init = &(struct clk_init_data){
 723                .name = "blsp2_uart6_apps_clk_src",
 724                .parent_names = gcc_xo_gpll0,
 725                .num_parents = 2,
 726                .ops = &clk_rcg2_ops,
 727        },
 728};
 729
 730static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
 731        F(50000000, P_GPLL0, 12, 0, 0),
 732        F(75000000, P_GPLL0, 8, 0, 0),
 733        F(100000000, P_GPLL0, 6, 0, 0),
 734        F(150000000, P_GPLL0, 4, 0, 0),
 735        { }
 736};
 737
 738static struct clk_rcg2 ce1_clk_src = {
 739        .cmd_rcgr = 0x1050,
 740        .hid_width = 5,
 741        .parent_map = gcc_xo_gpll0_map,
 742        .freq_tbl = ftbl_gcc_ce1_clk,
 743        .clkr.hw.init = &(struct clk_init_data){
 744                .name = "ce1_clk_src",
 745                .parent_names = gcc_xo_gpll0,
 746                .num_parents = 2,
 747                .ops = &clk_rcg2_ops,
 748        },
 749};
 750
 751static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
 752        F(50000000, P_GPLL0, 12, 0, 0),
 753        F(75000000, P_GPLL0, 8, 0, 0),
 754        F(100000000, P_GPLL0, 6, 0, 0),
 755        F(150000000, P_GPLL0, 4, 0, 0),
 756        { }
 757};
 758
 759static struct clk_rcg2 ce2_clk_src = {
 760        .cmd_rcgr = 0x1090,
 761        .hid_width = 5,
 762        .parent_map = gcc_xo_gpll0_map,
 763        .freq_tbl = ftbl_gcc_ce2_clk,
 764        .clkr.hw.init = &(struct clk_init_data){
 765                .name = "ce2_clk_src",
 766                .parent_names = gcc_xo_gpll0,
 767                .num_parents = 2,
 768                .ops = &clk_rcg2_ops,
 769        },
 770};
 771
 772static const struct freq_tbl ftbl_gcc_gp_clk[] = {
 773        F(4800000, P_XO, 4, 0, 0),
 774        F(6000000, P_GPLL0, 10, 1, 10),
 775        F(6750000, P_GPLL0, 1, 1, 89),
 776        F(8000000, P_GPLL0, 15, 1, 5),
 777        F(9600000, P_XO, 2, 0, 0),
 778        F(16000000, P_GPLL0, 1, 2, 75),
 779        F(19200000, P_XO, 1, 0, 0),
 780        F(24000000, P_GPLL0, 5, 1, 5),
 781        { }
 782};
 783
 784
 785static struct clk_rcg2 gp1_clk_src = {
 786        .cmd_rcgr = 0x1904,
 787        .mnd_width = 8,
 788        .hid_width = 5,
 789        .parent_map = gcc_xo_gpll0_map,
 790        .freq_tbl = ftbl_gcc_gp_clk,
 791        .clkr.hw.init = &(struct clk_init_data){
 792                .name = "gp1_clk_src",
 793                .parent_names = gcc_xo_gpll0,
 794                .num_parents = 2,
 795                .ops = &clk_rcg2_ops,
 796        },
 797};
 798
 799static struct clk_rcg2 gp2_clk_src = {
 800        .cmd_rcgr = 0x1944,
 801        .mnd_width = 8,
 802        .hid_width = 5,
 803        .parent_map = gcc_xo_gpll0_map,
 804        .freq_tbl = ftbl_gcc_gp_clk,
 805        .clkr.hw.init = &(struct clk_init_data){
 806                .name = "gp2_clk_src",
 807                .parent_names = gcc_xo_gpll0,
 808                .num_parents = 2,
 809                .ops = &clk_rcg2_ops,
 810        },
 811};
 812
 813static struct clk_rcg2 gp3_clk_src = {
 814        .cmd_rcgr = 0x1984,
 815        .mnd_width = 8,
 816        .hid_width = 5,
 817        .parent_map = gcc_xo_gpll0_map,
 818        .freq_tbl = ftbl_gcc_gp_clk,
 819        .clkr.hw.init = &(struct clk_init_data){
 820                .name = "gp3_clk_src",
 821                .parent_names = gcc_xo_gpll0,
 822                .num_parents = 2,
 823                .ops = &clk_rcg2_ops,
 824        },
 825};
 826
 827static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
 828        F(60000000, P_GPLL0, 10, 0, 0),
 829        { }
 830};
 831
 832static struct clk_rcg2 pdm2_clk_src = {
 833        .cmd_rcgr = 0x0cd0,
 834        .hid_width = 5,
 835        .parent_map = gcc_xo_gpll0_map,
 836        .freq_tbl = ftbl_gcc_pdm2_clk,
 837        .clkr.hw.init = &(struct clk_init_data){
 838                .name = "pdm2_clk_src",
 839                .parent_names = gcc_xo_gpll0,
 840                .num_parents = 2,
 841                .ops = &clk_rcg2_ops,
 842        },
 843};
 844
 845static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
 846        F(144000, P_XO, 16, 3, 25),
 847        F(400000, P_XO, 12, 1, 4),
 848        F(20000000, P_GPLL0, 15, 1, 2),
 849        F(25000000, P_GPLL0, 12, 1, 2),
 850        F(50000000, P_GPLL0, 12, 0, 0),
 851        F(100000000, P_GPLL0, 6, 0, 0),
 852        F(200000000, P_GPLL0, 3, 0, 0),
 853        { }
 854};
 855
 856static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_pro[] = {
 857        F(144000, P_XO, 16, 3, 25),
 858        F(400000, P_XO, 12, 1, 4),
 859        F(20000000, P_GPLL0, 15, 1, 2),
 860        F(25000000, P_GPLL0, 12, 1, 2),
 861        F(50000000, P_GPLL0, 12, 0, 0),
 862        F(100000000, P_GPLL0, 6, 0, 0),
 863        F(192000000, P_GPLL4, 4, 0, 0),
 864        F(200000000, P_GPLL0, 3, 0, 0),
 865        F(384000000, P_GPLL4, 2, 0, 0),
 866        { }
 867};
 868
 869static struct clk_init_data sdcc1_apps_clk_src_init = {
 870        .name = "sdcc1_apps_clk_src",
 871        .parent_names = gcc_xo_gpll0,
 872        .num_parents = 2,
 873        .ops = &clk_rcg2_floor_ops,
 874};
 875
 876static struct clk_rcg2 sdcc1_apps_clk_src = {
 877        .cmd_rcgr = 0x04d0,
 878        .mnd_width = 8,
 879        .hid_width = 5,
 880        .parent_map = gcc_xo_gpll0_map,
 881        .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 882        .clkr.hw.init = &sdcc1_apps_clk_src_init,
 883};
 884
 885static struct clk_rcg2 sdcc2_apps_clk_src = {
 886        .cmd_rcgr = 0x0510,
 887        .mnd_width = 8,
 888        .hid_width = 5,
 889        .parent_map = gcc_xo_gpll0_map,
 890        .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 891        .clkr.hw.init = &(struct clk_init_data){
 892                .name = "sdcc2_apps_clk_src",
 893                .parent_names = gcc_xo_gpll0,
 894                .num_parents = 2,
 895                .ops = &clk_rcg2_floor_ops,
 896        },
 897};
 898
 899static struct clk_rcg2 sdcc3_apps_clk_src = {
 900        .cmd_rcgr = 0x0550,
 901        .mnd_width = 8,
 902        .hid_width = 5,
 903        .parent_map = gcc_xo_gpll0_map,
 904        .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 905        .clkr.hw.init = &(struct clk_init_data){
 906                .name = "sdcc3_apps_clk_src",
 907                .parent_names = gcc_xo_gpll0,
 908                .num_parents = 2,
 909                .ops = &clk_rcg2_floor_ops,
 910        },
 911};
 912
 913static struct clk_rcg2 sdcc4_apps_clk_src = {
 914        .cmd_rcgr = 0x0590,
 915        .mnd_width = 8,
 916        .hid_width = 5,
 917        .parent_map = gcc_xo_gpll0_map,
 918        .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 919        .clkr.hw.init = &(struct clk_init_data){
 920                .name = "sdcc4_apps_clk_src",
 921                .parent_names = gcc_xo_gpll0,
 922                .num_parents = 2,
 923                .ops = &clk_rcg2_floor_ops,
 924        },
 925};
 926
 927static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
 928        F(105000, P_XO, 2, 1, 91),
 929        { }
 930};
 931
 932static struct clk_rcg2 tsif_ref_clk_src = {
 933        .cmd_rcgr = 0x0d90,
 934        .mnd_width = 8,
 935        .hid_width = 5,
 936        .parent_map = gcc_xo_gpll0_map,
 937        .freq_tbl = ftbl_gcc_tsif_ref_clk,
 938        .clkr.hw.init = &(struct clk_init_data){
 939                .name = "tsif_ref_clk_src",
 940                .parent_names = gcc_xo_gpll0,
 941                .num_parents = 2,
 942                .ops = &clk_rcg2_ops,
 943        },
 944};
 945
 946static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
 947        F(60000000, P_GPLL0, 10, 0, 0),
 948        { }
 949};
 950
 951static struct clk_rcg2 usb30_mock_utmi_clk_src = {
 952        .cmd_rcgr = 0x03e8,
 953        .hid_width = 5,
 954        .parent_map = gcc_xo_gpll0_map,
 955        .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
 956        .clkr.hw.init = &(struct clk_init_data){
 957                .name = "usb30_mock_utmi_clk_src",
 958                .parent_names = gcc_xo_gpll0,
 959                .num_parents = 2,
 960                .ops = &clk_rcg2_ops,
 961        },
 962};
 963
 964static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
 965        F(60000000, P_GPLL0, 10, 0, 0),
 966        F(75000000, P_GPLL0, 8, 0, 0),
 967        { }
 968};
 969
 970static struct clk_rcg2 usb_hs_system_clk_src = {
 971        .cmd_rcgr = 0x0490,
 972        .hid_width = 5,
 973        .parent_map = gcc_xo_gpll0_map,
 974        .freq_tbl = ftbl_gcc_usb_hs_system_clk,
 975        .clkr.hw.init = &(struct clk_init_data){
 976                .name = "usb_hs_system_clk_src",
 977                .parent_names = gcc_xo_gpll0,
 978                .num_parents = 2,
 979                .ops = &clk_rcg2_ops,
 980        },
 981};
 982
 983static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
 984        F(480000000, P_GPLL1, 1, 0, 0),
 985        { }
 986};
 987
 988static const struct parent_map usb_hsic_clk_src_map[] = {
 989        { P_XO, 0 },
 990        { P_GPLL1, 4 }
 991};
 992
 993static struct clk_rcg2 usb_hsic_clk_src = {
 994        .cmd_rcgr = 0x0440,
 995        .hid_width = 5,
 996        .parent_map = usb_hsic_clk_src_map,
 997        .freq_tbl = ftbl_gcc_usb_hsic_clk,
 998        .clkr.hw.init = &(struct clk_init_data){
 999                .name = "usb_hsic_clk_src",
1000                .parent_names = (const char *[]){
1001                        "xo",
1002                        "gpll1_vote",
1003                },
1004                .num_parents = 2,
1005                .ops = &clk_rcg2_ops,
1006        },
1007};
1008
1009static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1010        F(9600000, P_XO, 2, 0, 0),
1011        { }
1012};
1013
1014static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
1015        .cmd_rcgr = 0x0458,
1016        .hid_width = 5,
1017        .parent_map = gcc_xo_gpll0_map,
1018        .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1019        .clkr.hw.init = &(struct clk_init_data){
1020                .name = "usb_hsic_io_cal_clk_src",
1021                .parent_names = gcc_xo_gpll0,
1022                .num_parents = 1,
1023                .ops = &clk_rcg2_ops,
1024        },
1025};
1026
1027static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1028        F(60000000, P_GPLL0, 10, 0, 0),
1029        F(75000000, P_GPLL0, 8, 0, 0),
1030        { }
1031};
1032
1033static struct clk_rcg2 usb_hsic_system_clk_src = {
1034        .cmd_rcgr = 0x041c,
1035        .hid_width = 5,
1036        .parent_map = gcc_xo_gpll0_map,
1037        .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1038        .clkr.hw.init = &(struct clk_init_data){
1039                .name = "usb_hsic_system_clk_src",
1040                .parent_names = gcc_xo_gpll0,
1041                .num_parents = 2,
1042                .ops = &clk_rcg2_ops,
1043        },
1044};
1045
1046static struct clk_regmap gcc_mmss_gpll0_clk_src = {
1047        .enable_reg = 0x1484,
1048        .enable_mask = BIT(26),
1049        .hw.init = &(struct clk_init_data){
1050                .name = "mmss_gpll0_vote",
1051                .parent_names = (const char *[]){
1052                        "gpll0_vote",
1053                },
1054                .num_parents = 1,
1055                .ops = &clk_branch_simple_ops,
1056        },
1057};
1058
1059static struct clk_branch gcc_bam_dma_ahb_clk = {
1060        .halt_reg = 0x0d44,
1061        .halt_check = BRANCH_HALT_VOTED,
1062        .clkr = {
1063                .enable_reg = 0x1484,
1064                .enable_mask = BIT(12),
1065                .hw.init = &(struct clk_init_data){
1066                        .name = "gcc_bam_dma_ahb_clk",
1067                        .parent_names = (const char *[]){
1068                                "periph_noc_clk_src",
1069                        },
1070                        .num_parents = 1,
1071                        .ops = &clk_branch2_ops,
1072                },
1073        },
1074};
1075
1076static struct clk_branch gcc_blsp1_ahb_clk = {
1077        .halt_reg = 0x05c4,
1078        .halt_check = BRANCH_HALT_VOTED,
1079        .clkr = {
1080                .enable_reg = 0x1484,
1081                .enable_mask = BIT(17),
1082                .hw.init = &(struct clk_init_data){
1083                        .name = "gcc_blsp1_ahb_clk",
1084                        .parent_names = (const char *[]){
1085                                "periph_noc_clk_src",
1086                        },
1087                        .num_parents = 1,
1088                        .ops = &clk_branch2_ops,
1089                },
1090        },
1091};
1092
1093static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1094        .halt_reg = 0x0648,
1095        .clkr = {
1096                .enable_reg = 0x0648,
1097                .enable_mask = BIT(0),
1098                .hw.init = &(struct clk_init_data){
1099                        .name = "gcc_blsp1_qup1_i2c_apps_clk",
1100                        .parent_names = (const char *[]){
1101                                "blsp1_qup1_i2c_apps_clk_src",
1102                        },
1103                        .num_parents = 1,
1104                        .flags = CLK_SET_RATE_PARENT,
1105                        .ops = &clk_branch2_ops,
1106                },
1107        },
1108};
1109
1110static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1111        .halt_reg = 0x0644,
1112        .clkr = {
1113                .enable_reg = 0x0644,
1114                .enable_mask = BIT(0),
1115                .hw.init = &(struct clk_init_data){
1116                        .name = "gcc_blsp1_qup1_spi_apps_clk",
1117                        .parent_names = (const char *[]){
1118                                "blsp1_qup1_spi_apps_clk_src",
1119                        },
1120                        .num_parents = 1,
1121                        .flags = CLK_SET_RATE_PARENT,
1122                        .ops = &clk_branch2_ops,
1123                },
1124        },
1125};
1126
1127static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1128        .halt_reg = 0x06c8,
1129        .clkr = {
1130                .enable_reg = 0x06c8,
1131                .enable_mask = BIT(0),
1132                .hw.init = &(struct clk_init_data){
1133                        .name = "gcc_blsp1_qup2_i2c_apps_clk",
1134                        .parent_names = (const char *[]){
1135                                "blsp1_qup2_i2c_apps_clk_src",
1136                        },
1137                        .num_parents = 1,
1138                        .flags = CLK_SET_RATE_PARENT,
1139                        .ops = &clk_branch2_ops,
1140                },
1141        },
1142};
1143
1144static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1145        .halt_reg = 0x06c4,
1146        .clkr = {
1147                .enable_reg = 0x06c4,
1148                .enable_mask = BIT(0),
1149                .hw.init = &(struct clk_init_data){
1150                        .name = "gcc_blsp1_qup2_spi_apps_clk",
1151                        .parent_names = (const char *[]){
1152                                "blsp1_qup2_spi_apps_clk_src",
1153                        },
1154                        .num_parents = 1,
1155                        .flags = CLK_SET_RATE_PARENT,
1156                        .ops = &clk_branch2_ops,
1157                },
1158        },
1159};
1160
1161static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1162        .halt_reg = 0x0748,
1163        .clkr = {
1164                .enable_reg = 0x0748,
1165                .enable_mask = BIT(0),
1166                .hw.init = &(struct clk_init_data){
1167                        .name = "gcc_blsp1_qup3_i2c_apps_clk",
1168                        .parent_names = (const char *[]){
1169                                "blsp1_qup3_i2c_apps_clk_src",
1170                        },
1171                        .num_parents = 1,
1172                        .flags = CLK_SET_RATE_PARENT,
1173                        .ops = &clk_branch2_ops,
1174                },
1175        },
1176};
1177
1178static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1179        .halt_reg = 0x0744,
1180        .clkr = {
1181                .enable_reg = 0x0744,
1182                .enable_mask = BIT(0),
1183                .hw.init = &(struct clk_init_data){
1184                        .name = "gcc_blsp1_qup3_spi_apps_clk",
1185                        .parent_names = (const char *[]){
1186                                "blsp1_qup3_spi_apps_clk_src",
1187                        },
1188                        .num_parents = 1,
1189                        .flags = CLK_SET_RATE_PARENT,
1190                        .ops = &clk_branch2_ops,
1191                },
1192        },
1193};
1194
1195static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1196        .halt_reg = 0x07c8,
1197        .clkr = {
1198                .enable_reg = 0x07c8,
1199                .enable_mask = BIT(0),
1200                .hw.init = &(struct clk_init_data){
1201                        .name = "gcc_blsp1_qup4_i2c_apps_clk",
1202                        .parent_names = (const char *[]){
1203                                "blsp1_qup4_i2c_apps_clk_src",
1204                        },
1205                        .num_parents = 1,
1206                        .flags = CLK_SET_RATE_PARENT,
1207                        .ops = &clk_branch2_ops,
1208                },
1209        },
1210};
1211
1212static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1213        .halt_reg = 0x07c4,
1214        .clkr = {
1215                .enable_reg = 0x07c4,
1216                .enable_mask = BIT(0),
1217                .hw.init = &(struct clk_init_data){
1218                        .name = "gcc_blsp1_qup4_spi_apps_clk",
1219                        .parent_names = (const char *[]){
1220                                "blsp1_qup4_spi_apps_clk_src",
1221                        },
1222                        .num_parents = 1,
1223                        .flags = CLK_SET_RATE_PARENT,
1224                        .ops = &clk_branch2_ops,
1225                },
1226        },
1227};
1228
1229static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1230        .halt_reg = 0x0848,
1231        .clkr = {
1232                .enable_reg = 0x0848,
1233                .enable_mask = BIT(0),
1234                .hw.init = &(struct clk_init_data){
1235                        .name = "gcc_blsp1_qup5_i2c_apps_clk",
1236                        .parent_names = (const char *[]){
1237                                "blsp1_qup5_i2c_apps_clk_src",
1238                        },
1239                        .num_parents = 1,
1240                        .flags = CLK_SET_RATE_PARENT,
1241                        .ops = &clk_branch2_ops,
1242                },
1243        },
1244};
1245
1246static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1247        .halt_reg = 0x0844,
1248        .clkr = {
1249                .enable_reg = 0x0844,
1250                .enable_mask = BIT(0),
1251                .hw.init = &(struct clk_init_data){
1252                        .name = "gcc_blsp1_qup5_spi_apps_clk",
1253                        .parent_names = (const char *[]){
1254                                "blsp1_qup5_spi_apps_clk_src",
1255                        },
1256                        .num_parents = 1,
1257                        .flags = CLK_SET_RATE_PARENT,
1258                        .ops = &clk_branch2_ops,
1259                },
1260        },
1261};
1262
1263static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1264        .halt_reg = 0x08c8,
1265        .clkr = {
1266                .enable_reg = 0x08c8,
1267                .enable_mask = BIT(0),
1268                .hw.init = &(struct clk_init_data){
1269                        .name = "gcc_blsp1_qup6_i2c_apps_clk",
1270                        .parent_names = (const char *[]){
1271                                "blsp1_qup6_i2c_apps_clk_src",
1272                        },
1273                        .num_parents = 1,
1274                        .flags = CLK_SET_RATE_PARENT,
1275                        .ops = &clk_branch2_ops,
1276                },
1277        },
1278};
1279
1280static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1281        .halt_reg = 0x08c4,
1282        .clkr = {
1283                .enable_reg = 0x08c4,
1284                .enable_mask = BIT(0),
1285                .hw.init = &(struct clk_init_data){
1286                        .name = "gcc_blsp1_qup6_spi_apps_clk",
1287                        .parent_names = (const char *[]){
1288                                "blsp1_qup6_spi_apps_clk_src",
1289                        },
1290                        .num_parents = 1,
1291                        .flags = CLK_SET_RATE_PARENT,
1292                        .ops = &clk_branch2_ops,
1293                },
1294        },
1295};
1296
1297static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1298        .halt_reg = 0x0684,
1299        .clkr = {
1300                .enable_reg = 0x0684,
1301                .enable_mask = BIT(0),
1302                .hw.init = &(struct clk_init_data){
1303                        .name = "gcc_blsp1_uart1_apps_clk",
1304                        .parent_names = (const char *[]){
1305                                "blsp1_uart1_apps_clk_src",
1306                        },
1307                        .num_parents = 1,
1308                        .flags = CLK_SET_RATE_PARENT,
1309                        .ops = &clk_branch2_ops,
1310                },
1311        },
1312};
1313
1314static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1315        .halt_reg = 0x0704,
1316        .clkr = {
1317                .enable_reg = 0x0704,
1318                .enable_mask = BIT(0),
1319                .hw.init = &(struct clk_init_data){
1320                        .name = "gcc_blsp1_uart2_apps_clk",
1321                        .parent_names = (const char *[]){
1322                                "blsp1_uart2_apps_clk_src",
1323                        },
1324                        .num_parents = 1,
1325                        .flags = CLK_SET_RATE_PARENT,
1326                        .ops = &clk_branch2_ops,
1327                },
1328        },
1329};
1330
1331static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1332        .halt_reg = 0x0784,
1333        .clkr = {
1334                .enable_reg = 0x0784,
1335                .enable_mask = BIT(0),
1336                .hw.init = &(struct clk_init_data){
1337                        .name = "gcc_blsp1_uart3_apps_clk",
1338                        .parent_names = (const char *[]){
1339                                "blsp1_uart3_apps_clk_src",
1340                        },
1341                        .num_parents = 1,
1342                        .flags = CLK_SET_RATE_PARENT,
1343                        .ops = &clk_branch2_ops,
1344                },
1345        },
1346};
1347
1348static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1349        .halt_reg = 0x0804,
1350        .clkr = {
1351                .enable_reg = 0x0804,
1352                .enable_mask = BIT(0),
1353                .hw.init = &(struct clk_init_data){
1354                        .name = "gcc_blsp1_uart4_apps_clk",
1355                        .parent_names = (const char *[]){
1356                                "blsp1_uart4_apps_clk_src",
1357                        },
1358                        .num_parents = 1,
1359                        .flags = CLK_SET_RATE_PARENT,
1360                        .ops = &clk_branch2_ops,
1361                },
1362        },
1363};
1364
1365static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1366        .halt_reg = 0x0884,
1367        .clkr = {
1368                .enable_reg = 0x0884,
1369                .enable_mask = BIT(0),
1370                .hw.init = &(struct clk_init_data){
1371                        .name = "gcc_blsp1_uart5_apps_clk",
1372                        .parent_names = (const char *[]){
1373                                "blsp1_uart5_apps_clk_src",
1374                        },
1375                        .num_parents = 1,
1376                        .flags = CLK_SET_RATE_PARENT,
1377                        .ops = &clk_branch2_ops,
1378                },
1379        },
1380};
1381
1382static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1383        .halt_reg = 0x0904,
1384        .clkr = {
1385                .enable_reg = 0x0904,
1386                .enable_mask = BIT(0),
1387                .hw.init = &(struct clk_init_data){
1388                        .name = "gcc_blsp1_uart6_apps_clk",
1389                        .parent_names = (const char *[]){
1390                                "blsp1_uart6_apps_clk_src",
1391                        },
1392                        .num_parents = 1,
1393                        .flags = CLK_SET_RATE_PARENT,
1394                        .ops = &clk_branch2_ops,
1395                },
1396        },
1397};
1398
1399static struct clk_branch gcc_blsp2_ahb_clk = {
1400        .halt_reg = 0x0944,
1401        .halt_check = BRANCH_HALT_VOTED,
1402        .clkr = {
1403                .enable_reg = 0x1484,
1404                .enable_mask = BIT(15),
1405                .hw.init = &(struct clk_init_data){
1406                        .name = "gcc_blsp2_ahb_clk",
1407                        .parent_names = (const char *[]){
1408                                "periph_noc_clk_src",
1409                        },
1410                        .num_parents = 1,
1411                        .ops = &clk_branch2_ops,
1412                },
1413        },
1414};
1415
1416static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1417        .halt_reg = 0x0988,
1418        .clkr = {
1419                .enable_reg = 0x0988,
1420                .enable_mask = BIT(0),
1421                .hw.init = &(struct clk_init_data){
1422                        .name = "gcc_blsp2_qup1_i2c_apps_clk",
1423                        .parent_names = (const char *[]){
1424                                "blsp2_qup1_i2c_apps_clk_src",
1425                        },
1426                        .num_parents = 1,
1427                        .flags = CLK_SET_RATE_PARENT,
1428                        .ops = &clk_branch2_ops,
1429                },
1430        },
1431};
1432
1433static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1434        .halt_reg = 0x0984,
1435        .clkr = {
1436                .enable_reg = 0x0984,
1437                .enable_mask = BIT(0),
1438                .hw.init = &(struct clk_init_data){
1439                        .name = "gcc_blsp2_qup1_spi_apps_clk",
1440                        .parent_names = (const char *[]){
1441                                "blsp2_qup1_spi_apps_clk_src",
1442                        },
1443                        .num_parents = 1,
1444                        .flags = CLK_SET_RATE_PARENT,
1445                        .ops = &clk_branch2_ops,
1446                },
1447        },
1448};
1449
1450static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1451        .halt_reg = 0x0a08,
1452        .clkr = {
1453                .enable_reg = 0x0a08,
1454                .enable_mask = BIT(0),
1455                .hw.init = &(struct clk_init_data){
1456                        .name = "gcc_blsp2_qup2_i2c_apps_clk",
1457                        .parent_names = (const char *[]){
1458                                "blsp2_qup2_i2c_apps_clk_src",
1459                        },
1460                        .num_parents = 1,
1461                        .flags = CLK_SET_RATE_PARENT,
1462                        .ops = &clk_branch2_ops,
1463                },
1464        },
1465};
1466
1467static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1468        .halt_reg = 0x0a04,
1469        .clkr = {
1470                .enable_reg = 0x0a04,
1471                .enable_mask = BIT(0),
1472                .hw.init = &(struct clk_init_data){
1473                        .name = "gcc_blsp2_qup2_spi_apps_clk",
1474                        .parent_names = (const char *[]){
1475                                "blsp2_qup2_spi_apps_clk_src",
1476                        },
1477                        .num_parents = 1,
1478                        .flags = CLK_SET_RATE_PARENT,
1479                        .ops = &clk_branch2_ops,
1480                },
1481        },
1482};
1483
1484static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1485        .halt_reg = 0x0a88,
1486        .clkr = {
1487                .enable_reg = 0x0a88,
1488                .enable_mask = BIT(0),
1489                .hw.init = &(struct clk_init_data){
1490                        .name = "gcc_blsp2_qup3_i2c_apps_clk",
1491                        .parent_names = (const char *[]){
1492                                "blsp2_qup3_i2c_apps_clk_src",
1493                        },
1494                        .num_parents = 1,
1495                        .flags = CLK_SET_RATE_PARENT,
1496                        .ops = &clk_branch2_ops,
1497                },
1498        },
1499};
1500
1501static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1502        .halt_reg = 0x0a84,
1503        .clkr = {
1504                .enable_reg = 0x0a84,
1505                .enable_mask = BIT(0),
1506                .hw.init = &(struct clk_init_data){
1507                        .name = "gcc_blsp2_qup3_spi_apps_clk",
1508                        .parent_names = (const char *[]){
1509                                "blsp2_qup3_spi_apps_clk_src",
1510                        },
1511                        .num_parents = 1,
1512                        .flags = CLK_SET_RATE_PARENT,
1513                        .ops = &clk_branch2_ops,
1514                },
1515        },
1516};
1517
1518static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1519        .halt_reg = 0x0b08,
1520        .clkr = {
1521                .enable_reg = 0x0b08,
1522                .enable_mask = BIT(0),
1523                .hw.init = &(struct clk_init_data){
1524                        .name = "gcc_blsp2_qup4_i2c_apps_clk",
1525                        .parent_names = (const char *[]){
1526                                "blsp2_qup4_i2c_apps_clk_src",
1527                        },
1528                        .num_parents = 1,
1529                        .flags = CLK_SET_RATE_PARENT,
1530                        .ops = &clk_branch2_ops,
1531                },
1532        },
1533};
1534
1535static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1536        .halt_reg = 0x0b04,
1537        .clkr = {
1538                .enable_reg = 0x0b04,
1539                .enable_mask = BIT(0),
1540                .hw.init = &(struct clk_init_data){
1541                        .name = "gcc_blsp2_qup4_spi_apps_clk",
1542                        .parent_names = (const char *[]){
1543                                "blsp2_qup4_spi_apps_clk_src",
1544                        },
1545                        .num_parents = 1,
1546                        .flags = CLK_SET_RATE_PARENT,
1547                        .ops = &clk_branch2_ops,
1548                },
1549        },
1550};
1551
1552static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1553        .halt_reg = 0x0b88,
1554        .clkr = {
1555                .enable_reg = 0x0b88,
1556                .enable_mask = BIT(0),
1557                .hw.init = &(struct clk_init_data){
1558                        .name = "gcc_blsp2_qup5_i2c_apps_clk",
1559                        .parent_names = (const char *[]){
1560                                "blsp2_qup5_i2c_apps_clk_src",
1561                        },
1562                        .num_parents = 1,
1563                        .flags = CLK_SET_RATE_PARENT,
1564                        .ops = &clk_branch2_ops,
1565                },
1566        },
1567};
1568
1569static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1570        .halt_reg = 0x0b84,
1571        .clkr = {
1572                .enable_reg = 0x0b84,
1573                .enable_mask = BIT(0),
1574                .hw.init = &(struct clk_init_data){
1575                        .name = "gcc_blsp2_qup5_spi_apps_clk",
1576                        .parent_names = (const char *[]){
1577                                "blsp2_qup5_spi_apps_clk_src",
1578                        },
1579                        .num_parents = 1,
1580                        .flags = CLK_SET_RATE_PARENT,
1581                        .ops = &clk_branch2_ops,
1582                },
1583        },
1584};
1585
1586static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1587        .halt_reg = 0x0c08,
1588        .clkr = {
1589                .enable_reg = 0x0c08,
1590                .enable_mask = BIT(0),
1591                .hw.init = &(struct clk_init_data){
1592                        .name = "gcc_blsp2_qup6_i2c_apps_clk",
1593                        .parent_names = (const char *[]){
1594                                "blsp2_qup6_i2c_apps_clk_src",
1595                        },
1596                        .num_parents = 1,
1597                        .flags = CLK_SET_RATE_PARENT,
1598                        .ops = &clk_branch2_ops,
1599                },
1600        },
1601};
1602
1603static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1604        .halt_reg = 0x0c04,
1605        .clkr = {
1606                .enable_reg = 0x0c04,
1607                .enable_mask = BIT(0),
1608                .hw.init = &(struct clk_init_data){
1609                        .name = "gcc_blsp2_qup6_spi_apps_clk",
1610                        .parent_names = (const char *[]){
1611                                "blsp2_qup6_spi_apps_clk_src",
1612                        },
1613                        .num_parents = 1,
1614                        .flags = CLK_SET_RATE_PARENT,
1615                        .ops = &clk_branch2_ops,
1616                },
1617        },
1618};
1619
1620static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1621        .halt_reg = 0x09c4,
1622        .clkr = {
1623                .enable_reg = 0x09c4,
1624                .enable_mask = BIT(0),
1625                .hw.init = &(struct clk_init_data){
1626                        .name = "gcc_blsp2_uart1_apps_clk",
1627                        .parent_names = (const char *[]){
1628                                "blsp2_uart1_apps_clk_src",
1629                        },
1630                        .num_parents = 1,
1631                        .flags = CLK_SET_RATE_PARENT,
1632                        .ops = &clk_branch2_ops,
1633                },
1634        },
1635};
1636
1637static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1638        .halt_reg = 0x0a44,
1639        .clkr = {
1640                .enable_reg = 0x0a44,
1641                .enable_mask = BIT(0),
1642                .hw.init = &(struct clk_init_data){
1643                        .name = "gcc_blsp2_uart2_apps_clk",
1644                        .parent_names = (const char *[]){
1645                                "blsp2_uart2_apps_clk_src",
1646                        },
1647                        .num_parents = 1,
1648                        .flags = CLK_SET_RATE_PARENT,
1649                        .ops = &clk_branch2_ops,
1650                },
1651        },
1652};
1653
1654static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1655        .halt_reg = 0x0ac4,
1656        .clkr = {
1657                .enable_reg = 0x0ac4,
1658                .enable_mask = BIT(0),
1659                .hw.init = &(struct clk_init_data){
1660                        .name = "gcc_blsp2_uart3_apps_clk",
1661                        .parent_names = (const char *[]){
1662                                "blsp2_uart3_apps_clk_src",
1663                        },
1664                        .num_parents = 1,
1665                        .flags = CLK_SET_RATE_PARENT,
1666                        .ops = &clk_branch2_ops,
1667                },
1668        },
1669};
1670
1671static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1672        .halt_reg = 0x0b44,
1673        .clkr = {
1674                .enable_reg = 0x0b44,
1675                .enable_mask = BIT(0),
1676                .hw.init = &(struct clk_init_data){
1677                        .name = "gcc_blsp2_uart4_apps_clk",
1678                        .parent_names = (const char *[]){
1679                                "blsp2_uart4_apps_clk_src",
1680                        },
1681                        .num_parents = 1,
1682                        .flags = CLK_SET_RATE_PARENT,
1683                        .ops = &clk_branch2_ops,
1684                },
1685        },
1686};
1687
1688static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1689        .halt_reg = 0x0bc4,
1690        .clkr = {
1691                .enable_reg = 0x0bc4,
1692                .enable_mask = BIT(0),
1693                .hw.init = &(struct clk_init_data){
1694                        .name = "gcc_blsp2_uart5_apps_clk",
1695                        .parent_names = (const char *[]){
1696                                "blsp2_uart5_apps_clk_src",
1697                        },
1698                        .num_parents = 1,
1699                        .flags = CLK_SET_RATE_PARENT,
1700                        .ops = &clk_branch2_ops,
1701                },
1702        },
1703};
1704
1705static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1706        .halt_reg = 0x0c44,
1707        .clkr = {
1708                .enable_reg = 0x0c44,
1709                .enable_mask = BIT(0),
1710                .hw.init = &(struct clk_init_data){
1711                        .name = "gcc_blsp2_uart6_apps_clk",
1712                        .parent_names = (const char *[]){
1713                                "blsp2_uart6_apps_clk_src",
1714                        },
1715                        .num_parents = 1,
1716                        .flags = CLK_SET_RATE_PARENT,
1717                        .ops = &clk_branch2_ops,
1718                },
1719        },
1720};
1721
1722static struct clk_branch gcc_boot_rom_ahb_clk = {
1723        .halt_reg = 0x0e04,
1724        .halt_check = BRANCH_HALT_VOTED,
1725        .clkr = {
1726                .enable_reg = 0x1484,
1727                .enable_mask = BIT(10),
1728                .hw.init = &(struct clk_init_data){
1729                        .name = "gcc_boot_rom_ahb_clk",
1730                        .parent_names = (const char *[]){
1731                                "config_noc_clk_src",
1732                        },
1733                        .num_parents = 1,
1734                        .ops = &clk_branch2_ops,
1735                },
1736        },
1737};
1738
1739static struct clk_branch gcc_ce1_ahb_clk = {
1740        .halt_reg = 0x104c,
1741        .halt_check = BRANCH_HALT_VOTED,
1742        .clkr = {
1743                .enable_reg = 0x1484,
1744                .enable_mask = BIT(3),
1745                .hw.init = &(struct clk_init_data){
1746                        .name = "gcc_ce1_ahb_clk",
1747                        .parent_names = (const char *[]){
1748                                "config_noc_clk_src",
1749                        },
1750                        .num_parents = 1,
1751                        .ops = &clk_branch2_ops,
1752                },
1753        },
1754};
1755
1756static struct clk_branch gcc_ce1_axi_clk = {
1757        .halt_reg = 0x1048,
1758        .halt_check = BRANCH_HALT_VOTED,
1759        .clkr = {
1760                .enable_reg = 0x1484,
1761                .enable_mask = BIT(4),
1762                .hw.init = &(struct clk_init_data){
1763                        .name = "gcc_ce1_axi_clk",
1764                        .parent_names = (const char *[]){
1765                                "system_noc_clk_src",
1766                        },
1767                        .num_parents = 1,
1768                        .ops = &clk_branch2_ops,
1769                },
1770        },
1771};
1772
1773static struct clk_branch gcc_ce1_clk = {
1774        .halt_reg = 0x1050,
1775        .halt_check = BRANCH_HALT_VOTED,
1776        .clkr = {
1777                .enable_reg = 0x1484,
1778                .enable_mask = BIT(5),
1779                .hw.init = &(struct clk_init_data){
1780                        .name = "gcc_ce1_clk",
1781                        .parent_names = (const char *[]){
1782                                "ce1_clk_src",
1783                        },
1784                        .num_parents = 1,
1785                        .flags = CLK_SET_RATE_PARENT,
1786                        .ops = &clk_branch2_ops,
1787                },
1788        },
1789};
1790
1791static struct clk_branch gcc_ce2_ahb_clk = {
1792        .halt_reg = 0x108c,
1793        .halt_check = BRANCH_HALT_VOTED,
1794        .clkr = {
1795                .enable_reg = 0x1484,
1796                .enable_mask = BIT(0),
1797                .hw.init = &(struct clk_init_data){
1798                        .name = "gcc_ce2_ahb_clk",
1799                        .parent_names = (const char *[]){
1800                                "config_noc_clk_src",
1801                        },
1802                        .num_parents = 1,
1803                        .ops = &clk_branch2_ops,
1804                },
1805        },
1806};
1807
1808static struct clk_branch gcc_ce2_axi_clk = {
1809        .halt_reg = 0x1088,
1810        .halt_check = BRANCH_HALT_VOTED,
1811        .clkr = {
1812                .enable_reg = 0x1484,
1813                .enable_mask = BIT(1),
1814                .hw.init = &(struct clk_init_data){
1815                        .name = "gcc_ce2_axi_clk",
1816                        .parent_names = (const char *[]){
1817                                "system_noc_clk_src",
1818                        },
1819                        .num_parents = 1,
1820                        .ops = &clk_branch2_ops,
1821                },
1822        },
1823};
1824
1825static struct clk_branch gcc_ce2_clk = {
1826        .halt_reg = 0x1090,
1827        .halt_check = BRANCH_HALT_VOTED,
1828        .clkr = {
1829                .enable_reg = 0x1484,
1830                .enable_mask = BIT(2),
1831                .hw.init = &(struct clk_init_data){
1832                        .name = "gcc_ce2_clk",
1833                        .parent_names = (const char *[]){
1834                                "ce2_clk_src",
1835                        },
1836                        .num_parents = 1,
1837                        .flags = CLK_SET_RATE_PARENT,
1838                        .ops = &clk_branch2_ops,
1839                },
1840        },
1841};
1842
1843static struct clk_branch gcc_gp1_clk = {
1844        .halt_reg = 0x1900,
1845        .clkr = {
1846                .enable_reg = 0x1900,
1847                .enable_mask = BIT(0),
1848                .hw.init = &(struct clk_init_data){
1849                        .name = "gcc_gp1_clk",
1850                        .parent_names = (const char *[]){
1851                                "gp1_clk_src",
1852                        },
1853                        .num_parents = 1,
1854                        .flags = CLK_SET_RATE_PARENT,
1855                        .ops = &clk_branch2_ops,
1856                },
1857        },
1858};
1859
1860static struct clk_branch gcc_gp2_clk = {
1861        .halt_reg = 0x1940,
1862        .clkr = {
1863                .enable_reg = 0x1940,
1864                .enable_mask = BIT(0),
1865                .hw.init = &(struct clk_init_data){
1866                        .name = "gcc_gp2_clk",
1867                        .parent_names = (const char *[]){
1868                                "gp2_clk_src",
1869                        },
1870                        .num_parents = 1,
1871                        .flags = CLK_SET_RATE_PARENT,
1872                        .ops = &clk_branch2_ops,
1873                },
1874        },
1875};
1876
1877static struct clk_branch gcc_gp3_clk = {
1878        .halt_reg = 0x1980,
1879        .clkr = {
1880                .enable_reg = 0x1980,
1881                .enable_mask = BIT(0),
1882                .hw.init = &(struct clk_init_data){
1883                        .name = "gcc_gp3_clk",
1884                        .parent_names = (const char *[]){
1885                                "gp3_clk_src",
1886                        },
1887                        .num_parents = 1,
1888                        .flags = CLK_SET_RATE_PARENT,
1889                        .ops = &clk_branch2_ops,
1890                },
1891        },
1892};
1893
1894static struct clk_branch gcc_lpass_q6_axi_clk = {
1895        .halt_reg = 0x11c0,
1896        .clkr = {
1897                .enable_reg = 0x11c0,
1898                .enable_mask = BIT(0),
1899                .hw.init = &(struct clk_init_data){
1900                        .name = "gcc_lpass_q6_axi_clk",
1901                        .parent_names = (const char *[]){
1902                                "system_noc_clk_src",
1903                        },
1904                        .num_parents = 1,
1905                        .ops = &clk_branch2_ops,
1906                },
1907        },
1908};
1909
1910static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1911        .halt_reg = 0x024c,
1912        .clkr = {
1913                .enable_reg = 0x024c,
1914                .enable_mask = BIT(0),
1915                .hw.init = &(struct clk_init_data){
1916                        .name = "gcc_mmss_noc_cfg_ahb_clk",
1917                        .parent_names = (const char *[]){
1918                                "config_noc_clk_src",
1919                        },
1920                        .num_parents = 1,
1921                        .ops = &clk_branch2_ops,
1922                        .flags = CLK_IGNORE_UNUSED,
1923                },
1924        },
1925};
1926
1927static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
1928        .halt_reg = 0x0248,
1929        .clkr = {
1930                .enable_reg = 0x0248,
1931                .enable_mask = BIT(0),
1932                .hw.init = &(struct clk_init_data){
1933                        .name = "gcc_ocmem_noc_cfg_ahb_clk",
1934                        .parent_names = (const char *[]){
1935                                "config_noc_clk_src",
1936                        },
1937                        .num_parents = 1,
1938                        .ops = &clk_branch2_ops,
1939                },
1940        },
1941};
1942
1943static struct clk_branch gcc_mss_cfg_ahb_clk = {
1944        .halt_reg = 0x0280,
1945        .clkr = {
1946                .enable_reg = 0x0280,
1947                .enable_mask = BIT(0),
1948                .hw.init = &(struct clk_init_data){
1949                        .name = "gcc_mss_cfg_ahb_clk",
1950                        .parent_names = (const char *[]){
1951                                "config_noc_clk_src",
1952                        },
1953                        .num_parents = 1,
1954                        .ops = &clk_branch2_ops,
1955                },
1956        },
1957};
1958
1959static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1960        .halt_reg = 0x0284,
1961        .clkr = {
1962                .enable_reg = 0x0284,
1963                .enable_mask = BIT(0),
1964                .hw.init = &(struct clk_init_data){
1965                        .name = "gcc_mss_q6_bimc_axi_clk",
1966                        .ops = &clk_branch2_ops,
1967                },
1968        },
1969};
1970
1971static struct clk_branch gcc_pdm2_clk = {
1972        .halt_reg = 0x0ccc,
1973        .clkr = {
1974                .enable_reg = 0x0ccc,
1975                .enable_mask = BIT(0),
1976                .hw.init = &(struct clk_init_data){
1977                        .name = "gcc_pdm2_clk",
1978                        .parent_names = (const char *[]){
1979                                "pdm2_clk_src",
1980                        },
1981                        .num_parents = 1,
1982                        .flags = CLK_SET_RATE_PARENT,
1983                        .ops = &clk_branch2_ops,
1984                },
1985        },
1986};
1987
1988static struct clk_branch gcc_pdm_ahb_clk = {
1989        .halt_reg = 0x0cc4,
1990        .clkr = {
1991                .enable_reg = 0x0cc4,
1992                .enable_mask = BIT(0),
1993                .hw.init = &(struct clk_init_data){
1994                        .name = "gcc_pdm_ahb_clk",
1995                        .parent_names = (const char *[]){
1996                                "periph_noc_clk_src",
1997                        },
1998                        .num_parents = 1,
1999                        .ops = &clk_branch2_ops,
2000                },
2001        },
2002};
2003
2004static struct clk_branch gcc_prng_ahb_clk = {
2005        .halt_reg = 0x0d04,
2006        .halt_check = BRANCH_HALT_VOTED,
2007        .clkr = {
2008                .enable_reg = 0x1484,
2009                .enable_mask = BIT(13),
2010                .hw.init = &(struct clk_init_data){
2011                        .name = "gcc_prng_ahb_clk",
2012                        .parent_names = (const char *[]){
2013                                "periph_noc_clk_src",
2014                        },
2015                        .num_parents = 1,
2016                        .ops = &clk_branch2_ops,
2017                },
2018        },
2019};
2020
2021static struct clk_branch gcc_sdcc1_ahb_clk = {
2022        .halt_reg = 0x04c8,
2023        .clkr = {
2024                .enable_reg = 0x04c8,
2025                .enable_mask = BIT(0),
2026                .hw.init = &(struct clk_init_data){
2027                        .name = "gcc_sdcc1_ahb_clk",
2028                        .parent_names = (const char *[]){
2029                                "periph_noc_clk_src",
2030                        },
2031                        .num_parents = 1,
2032                        .ops = &clk_branch2_ops,
2033                },
2034        },
2035};
2036
2037static struct clk_branch gcc_sdcc1_apps_clk = {
2038        .halt_reg = 0x04c4,
2039        .clkr = {
2040                .enable_reg = 0x04c4,
2041                .enable_mask = BIT(0),
2042                .hw.init = &(struct clk_init_data){
2043                        .name = "gcc_sdcc1_apps_clk",
2044                        .parent_names = (const char *[]){
2045                                "sdcc1_apps_clk_src",
2046                        },
2047                        .num_parents = 1,
2048                        .flags = CLK_SET_RATE_PARENT,
2049                        .ops = &clk_branch2_ops,
2050                },
2051        },
2052};
2053
2054static struct clk_branch gcc_sdcc1_cdccal_ff_clk = {
2055        .halt_reg = 0x04e8,
2056        .clkr = {
2057                .enable_reg = 0x04e8,
2058                .enable_mask = BIT(0),
2059                .hw.init = &(struct clk_init_data){
2060                        .name = "gcc_sdcc1_cdccal_ff_clk",
2061                        .parent_names = (const char *[]){
2062                                "xo"
2063                        },
2064                        .num_parents = 1,
2065                        .ops = &clk_branch2_ops,
2066                },
2067        },
2068};
2069
2070static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = {
2071        .halt_reg = 0x04e4,
2072        .clkr = {
2073                .enable_reg = 0x04e4,
2074                .enable_mask = BIT(0),
2075                .hw.init = &(struct clk_init_data){
2076                        .name = "gcc_sdcc1_cdccal_sleep_clk",
2077                        .parent_names = (const char *[]){
2078                                "sleep_clk_src"
2079                        },
2080                        .num_parents = 1,
2081                        .ops = &clk_branch2_ops,
2082                },
2083        },
2084};
2085
2086static struct clk_branch gcc_sdcc2_ahb_clk = {
2087        .halt_reg = 0x0508,
2088        .clkr = {
2089                .enable_reg = 0x0508,
2090                .enable_mask = BIT(0),
2091                .hw.init = &(struct clk_init_data){
2092                        .name = "gcc_sdcc2_ahb_clk",
2093                        .parent_names = (const char *[]){
2094                                "periph_noc_clk_src",
2095                        },
2096                        .num_parents = 1,
2097                        .ops = &clk_branch2_ops,
2098                },
2099        },
2100};
2101
2102static struct clk_branch gcc_sdcc2_apps_clk = {
2103        .halt_reg = 0x0504,
2104        .clkr = {
2105                .enable_reg = 0x0504,
2106                .enable_mask = BIT(0),
2107                .hw.init = &(struct clk_init_data){
2108                        .name = "gcc_sdcc2_apps_clk",
2109                        .parent_names = (const char *[]){
2110                                "sdcc2_apps_clk_src",
2111                        },
2112                        .num_parents = 1,
2113                        .flags = CLK_SET_RATE_PARENT,
2114                        .ops = &clk_branch2_ops,
2115                },
2116        },
2117};
2118
2119static struct clk_branch gcc_sdcc3_ahb_clk = {
2120        .halt_reg = 0x0548,
2121        .clkr = {
2122                .enable_reg = 0x0548,
2123                .enable_mask = BIT(0),
2124                .hw.init = &(struct clk_init_data){
2125                        .name = "gcc_sdcc3_ahb_clk",
2126                        .parent_names = (const char *[]){
2127                                "periph_noc_clk_src",
2128                        },
2129                        .num_parents = 1,
2130                        .ops = &clk_branch2_ops,
2131                },
2132        },
2133};
2134
2135static struct clk_branch gcc_sdcc3_apps_clk = {
2136        .halt_reg = 0x0544,
2137        .clkr = {
2138                .enable_reg = 0x0544,
2139                .enable_mask = BIT(0),
2140                .hw.init = &(struct clk_init_data){
2141                        .name = "gcc_sdcc3_apps_clk",
2142                        .parent_names = (const char *[]){
2143                                "sdcc3_apps_clk_src",
2144                        },
2145                        .num_parents = 1,
2146                        .flags = CLK_SET_RATE_PARENT,
2147                        .ops = &clk_branch2_ops,
2148                },
2149        },
2150};
2151
2152static struct clk_branch gcc_sdcc4_ahb_clk = {
2153        .halt_reg = 0x0588,
2154        .clkr = {
2155                .enable_reg = 0x0588,
2156                .enable_mask = BIT(0),
2157                .hw.init = &(struct clk_init_data){
2158                        .name = "gcc_sdcc4_ahb_clk",
2159                        .parent_names = (const char *[]){
2160                                "periph_noc_clk_src",
2161                        },
2162                        .num_parents = 1,
2163                        .ops = &clk_branch2_ops,
2164                },
2165        },
2166};
2167
2168static struct clk_branch gcc_sdcc4_apps_clk = {
2169        .halt_reg = 0x0584,
2170        .clkr = {
2171                .enable_reg = 0x0584,
2172                .enable_mask = BIT(0),
2173                .hw.init = &(struct clk_init_data){
2174                        .name = "gcc_sdcc4_apps_clk",
2175                        .parent_names = (const char *[]){
2176                                "sdcc4_apps_clk_src",
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_sys_noc_usb3_axi_clk = {
2186        .halt_reg = 0x0108,
2187        .clkr = {
2188                .enable_reg = 0x0108,
2189                .enable_mask = BIT(0),
2190                .hw.init = &(struct clk_init_data){
2191                        .name = "gcc_sys_noc_usb3_axi_clk",
2192                        .parent_names = (const char *[]){
2193                                "usb30_master_clk_src",
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_tsif_ahb_clk = {
2203        .halt_reg = 0x0d84,
2204        .clkr = {
2205                .enable_reg = 0x0d84,
2206                .enable_mask = BIT(0),
2207                .hw.init = &(struct clk_init_data){
2208                        .name = "gcc_tsif_ahb_clk",
2209                        .parent_names = (const char *[]){
2210                                "periph_noc_clk_src",
2211                        },
2212                        .num_parents = 1,
2213                        .ops = &clk_branch2_ops,
2214                },
2215        },
2216};
2217
2218static struct clk_branch gcc_tsif_ref_clk = {
2219        .halt_reg = 0x0d88,
2220        .clkr = {
2221                .enable_reg = 0x0d88,
2222                .enable_mask = BIT(0),
2223                .hw.init = &(struct clk_init_data){
2224                        .name = "gcc_tsif_ref_clk",
2225                        .parent_names = (const char *[]){
2226                                "tsif_ref_clk_src",
2227                        },
2228                        .num_parents = 1,
2229                        .flags = CLK_SET_RATE_PARENT,
2230                        .ops = &clk_branch2_ops,
2231                },
2232        },
2233};
2234
2235static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2236        .halt_reg = 0x04ac,
2237        .clkr = {
2238                .enable_reg = 0x04ac,
2239                .enable_mask = BIT(0),
2240                .hw.init = &(struct clk_init_data){
2241                        .name = "gcc_usb2a_phy_sleep_clk",
2242                        .parent_names = (const char *[]){
2243                                "sleep_clk_src",
2244                        },
2245                        .num_parents = 1,
2246                        .ops = &clk_branch2_ops,
2247                },
2248        },
2249};
2250
2251static struct clk_branch gcc_usb2b_phy_sleep_clk = {
2252        .halt_reg = 0x04b4,
2253        .clkr = {
2254                .enable_reg = 0x04b4,
2255                .enable_mask = BIT(0),
2256                .hw.init = &(struct clk_init_data){
2257                        .name = "gcc_usb2b_phy_sleep_clk",
2258                        .parent_names = (const char *[]){
2259                                "sleep_clk_src",
2260                        },
2261                        .num_parents = 1,
2262                        .ops = &clk_branch2_ops,
2263                },
2264        },
2265};
2266
2267static struct clk_branch gcc_usb30_master_clk = {
2268        .halt_reg = 0x03c8,
2269        .clkr = {
2270                .enable_reg = 0x03c8,
2271                .enable_mask = BIT(0),
2272                .hw.init = &(struct clk_init_data){
2273                        .name = "gcc_usb30_master_clk",
2274                        .parent_names = (const char *[]){
2275                                "usb30_master_clk_src",
2276                        },
2277                        .num_parents = 1,
2278                        .flags = CLK_SET_RATE_PARENT,
2279                        .ops = &clk_branch2_ops,
2280                },
2281        },
2282};
2283
2284static struct clk_branch gcc_usb30_mock_utmi_clk = {
2285        .halt_reg = 0x03d0,
2286        .clkr = {
2287                .enable_reg = 0x03d0,
2288                .enable_mask = BIT(0),
2289                .hw.init = &(struct clk_init_data){
2290                        .name = "gcc_usb30_mock_utmi_clk",
2291                        .parent_names = (const char *[]){
2292                                "usb30_mock_utmi_clk_src",
2293                        },
2294                        .num_parents = 1,
2295                        .flags = CLK_SET_RATE_PARENT,
2296                        .ops = &clk_branch2_ops,
2297                },
2298        },
2299};
2300
2301static struct clk_branch gcc_usb30_sleep_clk = {
2302        .halt_reg = 0x03cc,
2303        .clkr = {
2304                .enable_reg = 0x03cc,
2305                .enable_mask = BIT(0),
2306                .hw.init = &(struct clk_init_data){
2307                        .name = "gcc_usb30_sleep_clk",
2308                        .parent_names = (const char *[]){
2309                                "sleep_clk_src",
2310                        },
2311                        .num_parents = 1,
2312                        .ops = &clk_branch2_ops,
2313                },
2314        },
2315};
2316
2317static struct clk_branch gcc_usb_hs_ahb_clk = {
2318        .halt_reg = 0x0488,
2319        .clkr = {
2320                .enable_reg = 0x0488,
2321                .enable_mask = BIT(0),
2322                .hw.init = &(struct clk_init_data){
2323                        .name = "gcc_usb_hs_ahb_clk",
2324                        .parent_names = (const char *[]){
2325                                "periph_noc_clk_src",
2326                        },
2327                        .num_parents = 1,
2328                        .ops = &clk_branch2_ops,
2329                },
2330        },
2331};
2332
2333static struct clk_branch gcc_usb_hs_system_clk = {
2334        .halt_reg = 0x0484,
2335        .clkr = {
2336                .enable_reg = 0x0484,
2337                .enable_mask = BIT(0),
2338                .hw.init = &(struct clk_init_data){
2339                        .name = "gcc_usb_hs_system_clk",
2340                        .parent_names = (const char *[]){
2341                                "usb_hs_system_clk_src",
2342                        },
2343                        .num_parents = 1,
2344                        .flags = CLK_SET_RATE_PARENT,
2345                        .ops = &clk_branch2_ops,
2346                },
2347        },
2348};
2349
2350static struct clk_branch gcc_usb_hsic_ahb_clk = {
2351        .halt_reg = 0x0408,
2352        .clkr = {
2353                .enable_reg = 0x0408,
2354                .enable_mask = BIT(0),
2355                .hw.init = &(struct clk_init_data){
2356                        .name = "gcc_usb_hsic_ahb_clk",
2357                        .parent_names = (const char *[]){
2358                                "periph_noc_clk_src",
2359                        },
2360                        .num_parents = 1,
2361                        .ops = &clk_branch2_ops,
2362                },
2363        },
2364};
2365
2366static struct clk_branch gcc_usb_hsic_clk = {
2367        .halt_reg = 0x0410,
2368        .clkr = {
2369                .enable_reg = 0x0410,
2370                .enable_mask = BIT(0),
2371                .hw.init = &(struct clk_init_data){
2372                        .name = "gcc_usb_hsic_clk",
2373                        .parent_names = (const char *[]){
2374                                "usb_hsic_clk_src",
2375                        },
2376                        .num_parents = 1,
2377                        .flags = CLK_SET_RATE_PARENT,
2378                        .ops = &clk_branch2_ops,
2379                },
2380        },
2381};
2382
2383static struct clk_branch gcc_usb_hsic_io_cal_clk = {
2384        .halt_reg = 0x0414,
2385        .clkr = {
2386                .enable_reg = 0x0414,
2387                .enable_mask = BIT(0),
2388                .hw.init = &(struct clk_init_data){
2389                        .name = "gcc_usb_hsic_io_cal_clk",
2390                        .parent_names = (const char *[]){
2391                                "usb_hsic_io_cal_clk_src",
2392                        },
2393                        .num_parents = 1,
2394                        .flags = CLK_SET_RATE_PARENT,
2395                        .ops = &clk_branch2_ops,
2396                },
2397        },
2398};
2399
2400static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
2401        .halt_reg = 0x0418,
2402        .clkr = {
2403                .enable_reg = 0x0418,
2404                .enable_mask = BIT(0),
2405                .hw.init = &(struct clk_init_data){
2406                        .name = "gcc_usb_hsic_io_cal_sleep_clk",
2407                        .parent_names = (const char *[]){
2408                                "sleep_clk_src",
2409                        },
2410                        .num_parents = 1,
2411                        .ops = &clk_branch2_ops,
2412                },
2413        },
2414};
2415
2416static struct clk_branch gcc_usb_hsic_system_clk = {
2417        .halt_reg = 0x040c,
2418        .clkr = {
2419                .enable_reg = 0x040c,
2420                .enable_mask = BIT(0),
2421                .hw.init = &(struct clk_init_data){
2422                        .name = "gcc_usb_hsic_system_clk",
2423                        .parent_names = (const char *[]){
2424                                "usb_hsic_system_clk_src",
2425                        },
2426                        .num_parents = 1,
2427                        .flags = CLK_SET_RATE_PARENT,
2428                        .ops = &clk_branch2_ops,
2429                },
2430        },
2431};
2432
2433static struct gdsc usb_hs_hsic_gdsc = {
2434        .gdscr = 0x404,
2435        .pd = {
2436                .name = "usb_hs_hsic",
2437        },
2438        .pwrsts = PWRSTS_OFF_ON,
2439};
2440
2441static struct clk_regmap *gcc_msm8974_clocks[] = {
2442        [GPLL0] = &gpll0.clkr,
2443        [GPLL0_VOTE] = &gpll0_vote,
2444        [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2445        [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2446        [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2447        [GPLL1] = &gpll1.clkr,
2448        [GPLL1_VOTE] = &gpll1_vote,
2449        [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2450        [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2451        [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2452        [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2453        [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2454        [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2455        [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2456        [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2457        [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2458        [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2459        [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2460        [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2461        [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2462        [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2463        [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2464        [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2465        [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2466        [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2467        [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2468        [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2469        [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2470        [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2471        [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2472        [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2473        [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2474        [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2475        [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2476        [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2477        [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2478        [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2479        [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2480        [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2481        [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2482        [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2483        [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2484        [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2485        [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2486        [CE1_CLK_SRC] = &ce1_clk_src.clkr,
2487        [CE2_CLK_SRC] = &ce2_clk_src.clkr,
2488        [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2489        [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2490        [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2491        [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2492        [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2493        [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2494        [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2495        [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2496        [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2497        [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2498        [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2499        [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2500        [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2501        [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2502        [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2503        [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2504        [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2505        [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2506        [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2507        [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2508        [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2509        [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2510        [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2511        [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2512        [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2513        [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2514        [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2515        [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2516        [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2517        [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2518        [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2519        [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2520        [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2521        [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2522        [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2523        [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2524        [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2525        [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2526        [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2527        [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2528        [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2529        [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2530        [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2531        [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2532        [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2533        [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2534        [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2535        [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2536        [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2537        [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2538        [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2539        [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2540        [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2541        [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2542        [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2543        [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2544        [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2545        [GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
2546        [GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
2547        [GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
2548        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2549        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2550        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2551        [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2552        [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2553        [GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
2554        [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2555        [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2556        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2557        [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2558        [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2559        [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2560        [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2561        [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2562        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2563        [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2564        [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2565        [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2566        [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2567        [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2568        [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2569        [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2570        [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2571        [GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
2572        [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2573        [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2574        [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2575        [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2576        [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2577        [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2578        [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2579        [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2580        [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
2581        [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2582        [GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
2583        [GPLL4] = NULL,
2584        [GPLL4_VOTE] = NULL,
2585        [GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
2586        [GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
2587};
2588
2589static const struct qcom_reset_map gcc_msm8974_resets[] = {
2590        [GCC_SYSTEM_NOC_BCR] = { 0x0100 },
2591        [GCC_CONFIG_NOC_BCR] = { 0x0140 },
2592        [GCC_PERIPH_NOC_BCR] = { 0x0180 },
2593        [GCC_IMEM_BCR] = { 0x0200 },
2594        [GCC_MMSS_BCR] = { 0x0240 },
2595        [GCC_QDSS_BCR] = { 0x0300 },
2596        [GCC_USB_30_BCR] = { 0x03c0 },
2597        [GCC_USB3_PHY_BCR] = { 0x03fc },
2598        [GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2599        [GCC_USB_HS_BCR] = { 0x0480 },
2600        [GCC_USB2A_PHY_BCR] = { 0x04a8 },
2601        [GCC_USB2B_PHY_BCR] = { 0x04b0 },
2602        [GCC_SDCC1_BCR] = { 0x04c0 },
2603        [GCC_SDCC2_BCR] = { 0x0500 },
2604        [GCC_SDCC3_BCR] = { 0x0540 },
2605        [GCC_SDCC4_BCR] = { 0x0580 },
2606        [GCC_BLSP1_BCR] = { 0x05c0 },
2607        [GCC_BLSP1_QUP1_BCR] = { 0x0640 },
2608        [GCC_BLSP1_UART1_BCR] = { 0x0680 },
2609        [GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
2610        [GCC_BLSP1_UART2_BCR] = { 0x0700 },
2611        [GCC_BLSP1_QUP3_BCR] = { 0x0740 },
2612        [GCC_BLSP1_UART3_BCR] = { 0x0780 },
2613        [GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
2614        [GCC_BLSP1_UART4_BCR] = { 0x0800 },
2615        [GCC_BLSP1_QUP5_BCR] = { 0x0840 },
2616        [GCC_BLSP1_UART5_BCR] = { 0x0880 },
2617        [GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
2618        [GCC_BLSP1_UART6_BCR] = { 0x0900 },
2619        [GCC_BLSP2_BCR] = { 0x0940 },
2620        [GCC_BLSP2_QUP1_BCR] = { 0x0980 },
2621        [GCC_BLSP2_UART1_BCR] = { 0x09c0 },
2622        [GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
2623        [GCC_BLSP2_UART2_BCR] = { 0x0a40 },
2624        [GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
2625        [GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
2626        [GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
2627        [GCC_BLSP2_UART4_BCR] = { 0x0b40 },
2628        [GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
2629        [GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
2630        [GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
2631        [GCC_BLSP2_UART6_BCR] = { 0x0c40 },
2632        [GCC_PDM_BCR] = { 0x0cc0 },
2633        [GCC_BAM_DMA_BCR] = { 0x0d40 },
2634        [GCC_TSIF_BCR] = { 0x0d80 },
2635        [GCC_TCSR_BCR] = { 0x0dc0 },
2636        [GCC_BOOT_ROM_BCR] = { 0x0e00 },
2637        [GCC_MSG_RAM_BCR] = { 0x0e40 },
2638        [GCC_TLMM_BCR] = { 0x0e80 },
2639        [GCC_MPM_BCR] = { 0x0ec0 },
2640        [GCC_SEC_CTRL_BCR] = { 0x0f40 },
2641        [GCC_SPMI_BCR] = { 0x0fc0 },
2642        [GCC_SPDM_BCR] = { 0x1000 },
2643        [GCC_CE1_BCR] = { 0x1040 },
2644        [GCC_CE2_BCR] = { 0x1080 },
2645        [GCC_BIMC_BCR] = { 0x1100 },
2646        [GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
2647        [GCC_MPM_AHB_RESET] = { 0x0ec4, 1 },
2648        [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
2649        [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
2650        [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
2651        [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
2652        [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
2653        [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
2654        [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
2655        [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
2656        [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
2657        [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
2658        [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
2659        [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
2660        [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
2661        [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
2662        [GCC_DEHR_BCR] = { 0x1300 },
2663        [GCC_RBCPR_BCR] = { 0x1380 },
2664        [GCC_MSS_RESTART] = { 0x1680 },
2665        [GCC_LPASS_RESTART] = { 0x16c0 },
2666        [GCC_WCSS_RESTART] = { 0x1700 },
2667        [GCC_VENUS_RESTART] = { 0x1740 },
2668};
2669
2670static struct gdsc *gcc_msm8974_gdscs[] = {
2671        [USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2672};
2673
2674static const struct regmap_config gcc_msm8974_regmap_config = {
2675        .reg_bits       = 32,
2676        .reg_stride     = 4,
2677        .val_bits       = 32,
2678        .max_register   = 0x1fc0,
2679        .fast_io        = true,
2680};
2681
2682static const struct qcom_cc_desc gcc_msm8974_desc = {
2683        .config = &gcc_msm8974_regmap_config,
2684        .clks = gcc_msm8974_clocks,
2685        .num_clks = ARRAY_SIZE(gcc_msm8974_clocks),
2686        .resets = gcc_msm8974_resets,
2687        .num_resets = ARRAY_SIZE(gcc_msm8974_resets),
2688        .gdscs = gcc_msm8974_gdscs,
2689        .num_gdscs = ARRAY_SIZE(gcc_msm8974_gdscs),
2690};
2691
2692static const struct of_device_id gcc_msm8974_match_table[] = {
2693        { .compatible = "qcom,gcc-msm8974" },
2694        { .compatible = "qcom,gcc-msm8974pro" , .data = (void *)1UL },
2695        { .compatible = "qcom,gcc-msm8974pro-ac", .data = (void *)1UL },
2696        { }
2697};
2698MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
2699
2700static void msm8974_pro_clock_override(void)
2701{
2702        sdcc1_apps_clk_src_init.parent_names = gcc_xo_gpll0_gpll4;
2703        sdcc1_apps_clk_src_init.num_parents = 3;
2704        sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
2705        sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
2706
2707        gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
2708        gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
2709        gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
2710                &gcc_sdcc1_cdccal_sleep_clk.clkr;
2711        gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
2712                &gcc_sdcc1_cdccal_ff_clk.clkr;
2713}
2714
2715static int gcc_msm8974_probe(struct platform_device *pdev)
2716{
2717        int ret;
2718        struct device *dev = &pdev->dev;
2719        bool pro;
2720        const struct of_device_id *id;
2721
2722        id = of_match_device(gcc_msm8974_match_table, dev);
2723        if (!id)
2724                return -ENODEV;
2725        pro = !!(id->data);
2726
2727        if (pro)
2728                msm8974_pro_clock_override();
2729
2730        ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
2731        if (ret)
2732                return ret;
2733
2734        ret = qcom_cc_register_sleep_clk(dev);
2735        if (ret)
2736                return ret;
2737
2738        return qcom_cc_probe(pdev, &gcc_msm8974_desc);
2739}
2740
2741static struct platform_driver gcc_msm8974_driver = {
2742        .probe          = gcc_msm8974_probe,
2743        .driver         = {
2744                .name   = "gcc-msm8974",
2745                .of_match_table = gcc_msm8974_match_table,
2746        },
2747};
2748
2749static int __init gcc_msm8974_init(void)
2750{
2751        return platform_driver_register(&gcc_msm8974_driver);
2752}
2753core_initcall(gcc_msm8974_init);
2754
2755static void __exit gcc_msm8974_exit(void)
2756{
2757        platform_driver_unregister(&gcc_msm8974_driver);
2758}
2759module_exit(gcc_msm8974_exit);
2760
2761MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
2762MODULE_LICENSE("GPL v2");
2763MODULE_ALIAS("platform:gcc-msm8974");
2764