linux/drivers/clk/qcom/gcc-msm8994.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
   3 */
   4
   5#include <linux/kernel.h>
   6#include <linux/init.h>
   7#include <linux/err.h>
   8#include <linux/ctype.h>
   9#include <linux/io.h>
  10#include <linux/of.h>
  11#include <linux/platform_device.h>
  12#include <linux/module.h>
  13#include <linux/regmap.h>
  14
  15#include <dt-bindings/clock/qcom,gcc-msm8994.h>
  16
  17#include "common.h"
  18#include "clk-regmap.h"
  19#include "clk-alpha-pll.h"
  20#include "clk-rcg.h"
  21#include "clk-branch.h"
  22#include "reset.h"
  23
  24enum {
  25        P_XO,
  26        P_GPLL0,
  27        P_GPLL4,
  28};
  29
  30static const struct parent_map gcc_xo_gpll0_map[] = {
  31        { P_XO, 0 },
  32        { P_GPLL0, 1 },
  33};
  34
  35static const char * const gcc_xo_gpll0[] = {
  36        "xo",
  37        "gpll0",
  38};
  39
  40static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  41        { P_XO, 0 },
  42        { P_GPLL0, 1 },
  43        { P_GPLL4, 5 },
  44};
  45
  46static const char * const gcc_xo_gpll0_gpll4[] = {
  47        "xo",
  48        "gpll0",
  49        "gpll4",
  50};
  51
  52static struct clk_fixed_factor xo = {
  53        .mult = 1,
  54        .div = 1,
  55        .hw.init = &(struct clk_init_data)
  56        {
  57                .name = "xo",
  58                .parent_names = (const char *[]) { "xo_board" },
  59                .num_parents = 1,
  60                .ops = &clk_fixed_factor_ops,
  61        },
  62};
  63
  64static struct clk_alpha_pll gpll0_early = {
  65        .offset = 0x00000,
  66        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  67        .clkr = {
  68                .enable_reg = 0x1480,
  69                .enable_mask = BIT(0),
  70                .hw.init = &(struct clk_init_data)
  71                {
  72                        .name = "gpll0_early",
  73                        .parent_names = (const char *[]) { "xo" },
  74                        .num_parents = 1,
  75                        .ops = &clk_alpha_pll_ops,
  76                },
  77        },
  78};
  79
  80static struct clk_alpha_pll_postdiv gpll0 = {
  81        .offset = 0x00000,
  82        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  83        .clkr.hw.init = &(struct clk_init_data)
  84        {
  85                .name = "gpll0",
  86                .parent_names = (const char *[]) { "gpll0_early" },
  87                .num_parents = 1,
  88                .ops = &clk_alpha_pll_postdiv_ops,
  89        },
  90};
  91
  92static struct clk_alpha_pll gpll4_early = {
  93        .offset = 0x1dc0,
  94        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  95        .clkr = {
  96                .enable_reg = 0x1480,
  97                .enable_mask = BIT(4),
  98                .hw.init = &(struct clk_init_data)
  99                {
 100                        .name = "gpll4_early",
 101                        .parent_names = (const char *[]) { "xo" },
 102                        .num_parents = 1,
 103                        .ops = &clk_alpha_pll_ops,
 104                },
 105        },
 106};
 107
 108static struct clk_alpha_pll_postdiv gpll4 = {
 109        .offset = 0x1dc0,
 110        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 111        .clkr.hw.init = &(struct clk_init_data)
 112        {
 113                .name = "gpll4",
 114                .parent_names = (const char *[]) { "gpll4_early" },
 115                .num_parents = 1,
 116                .ops = &clk_alpha_pll_postdiv_ops,
 117        },
 118};
 119
 120static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
 121        F(50000000, P_GPLL0, 12, 0, 0),
 122        F(100000000, P_GPLL0, 6, 0, 0),
 123        F(150000000, P_GPLL0, 4, 0, 0),
 124        F(171430000, P_GPLL0, 3.5, 0, 0),
 125        F(200000000, P_GPLL0, 3, 0, 0),
 126        F(240000000, P_GPLL0, 2.5, 0, 0),
 127        { }
 128};
 129
 130static struct clk_rcg2 ufs_axi_clk_src = {
 131        .cmd_rcgr = 0x1d68,
 132        .mnd_width = 8,
 133        .hid_width = 5,
 134        .parent_map = gcc_xo_gpll0_map,
 135        .freq_tbl = ftbl_ufs_axi_clk_src,
 136        .clkr.hw.init = &(struct clk_init_data)
 137        {
 138                .name = "ufs_axi_clk_src",
 139                .parent_names = gcc_xo_gpll0,
 140                .num_parents = 2,
 141                .ops = &clk_rcg2_ops,
 142        },
 143};
 144
 145static struct freq_tbl ftbl_usb30_master_clk_src[] = {
 146        F(19200000, P_XO, 1, 0, 0),
 147        F(125000000, P_GPLL0, 1, 5, 24),
 148        { }
 149};
 150
 151static struct clk_rcg2 usb30_master_clk_src = {
 152        .cmd_rcgr = 0x03d4,
 153        .mnd_width = 8,
 154        .hid_width = 5,
 155        .parent_map = gcc_xo_gpll0_map,
 156        .freq_tbl = ftbl_usb30_master_clk_src,
 157        .clkr.hw.init = &(struct clk_init_data)
 158        {
 159                .name = "usb30_master_clk_src",
 160                .parent_names = gcc_xo_gpll0,
 161                .num_parents = 2,
 162                .ops = &clk_rcg2_ops,
 163        },
 164};
 165
 166static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
 167        F(19200000, P_XO, 1, 0, 0),
 168        F(50000000, P_GPLL0, 12, 0, 0),
 169        { }
 170};
 171
 172static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 173        .cmd_rcgr = 0x0660,
 174        .hid_width = 5,
 175        .parent_map = gcc_xo_gpll0_map,
 176        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 177        .clkr.hw.init = &(struct clk_init_data)
 178        {
 179                .name = "blsp1_qup1_i2c_apps_clk_src",
 180                .parent_names = gcc_xo_gpll0,
 181                .num_parents = 2,
 182                .ops = &clk_rcg2_ops,
 183        },
 184};
 185
 186static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = {
 187        F(960000, P_XO, 10, 1, 2),
 188        F(4800000, P_XO, 4, 0, 0),
 189        F(9600000, P_XO, 2, 0, 0),
 190        F(15000000, P_GPLL0, 10, 1, 4),
 191        F(19200000, P_XO, 1, 0, 0),
 192        F(24000000, P_GPLL0, 12.5, 1, 2),
 193        F(25000000, P_GPLL0, 12, 1, 2),
 194        F(48000000, P_GPLL0, 12.5, 0, 0),
 195        F(50000000, P_GPLL0, 12, 0, 0),
 196        { }
 197};
 198
 199static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 200        .cmd_rcgr = 0x064c,
 201        .mnd_width = 8,
 202        .hid_width = 5,
 203        .parent_map = gcc_xo_gpll0_map,
 204        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 205        .clkr.hw.init = &(struct clk_init_data)
 206        {
 207                .name = "blsp1_qup1_spi_apps_clk_src",
 208                .parent_names = gcc_xo_gpll0,
 209                .num_parents = 2,
 210                .ops = &clk_rcg2_ops,
 211        },
 212};
 213
 214static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 215        .cmd_rcgr = 0x06e0,
 216        .hid_width = 5,
 217        .parent_map = gcc_xo_gpll0_map,
 218        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 219        .clkr.hw.init = &(struct clk_init_data)
 220        {
 221                .name = "blsp1_qup2_i2c_apps_clk_src",
 222                .parent_names = gcc_xo_gpll0,
 223                .num_parents = 2,
 224                .ops = &clk_rcg2_ops,
 225        },
 226};
 227
 228static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 229        .cmd_rcgr = 0x06cc,
 230        .mnd_width = 8,
 231        .hid_width = 5,
 232        .parent_map = gcc_xo_gpll0_map,
 233        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 234        .clkr.hw.init = &(struct clk_init_data)
 235        {
 236                .name = "blsp1_qup2_spi_apps_clk_src",
 237                .parent_names = gcc_xo_gpll0,
 238                .num_parents = 2,
 239                .ops = &clk_rcg2_ops,
 240        },
 241};
 242
 243static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 244        .cmd_rcgr = 0x0760,
 245        .hid_width = 5,
 246        .parent_map = gcc_xo_gpll0_map,
 247        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 248        .clkr.hw.init = &(struct clk_init_data)
 249        {
 250                .name = "blsp1_qup3_i2c_apps_clk_src",
 251                .parent_names = gcc_xo_gpll0,
 252                .num_parents = 2,
 253                .ops = &clk_rcg2_ops,
 254        },
 255};
 256
 257static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 258        .cmd_rcgr = 0x074c,
 259        .mnd_width = 8,
 260        .hid_width = 5,
 261        .parent_map = gcc_xo_gpll0_map,
 262        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 263        .clkr.hw.init = &(struct clk_init_data)
 264        {
 265                .name = "blsp1_qup3_spi_apps_clk_src",
 266                .parent_names = gcc_xo_gpll0,
 267                .num_parents = 2,
 268                .ops = &clk_rcg2_ops,
 269        },
 270};
 271
 272static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 273        .cmd_rcgr = 0x07e0,
 274        .hid_width = 5,
 275        .parent_map = gcc_xo_gpll0_map,
 276        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 277        .clkr.hw.init = &(struct clk_init_data)
 278        {
 279                .name = "blsp1_qup4_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_qup4_spi_apps_clk_src = {
 287        .cmd_rcgr = 0x07cc,
 288        .mnd_width = 8,
 289        .hid_width = 5,
 290        .parent_map = gcc_xo_gpll0_map,
 291        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 292        .clkr.hw.init = &(struct clk_init_data)
 293        {
 294                .name = "blsp1_qup4_spi_apps_clk_src",
 295                .parent_names = gcc_xo_gpll0,
 296                .num_parents = 2,
 297                .ops = &clk_rcg2_ops,
 298        },
 299};
 300
 301static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
 302        .cmd_rcgr = 0x0860,
 303        .hid_width = 5,
 304        .parent_map = gcc_xo_gpll0_map,
 305        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 306        .clkr.hw.init = &(struct clk_init_data)
 307        {
 308                .name = "blsp1_qup5_i2c_apps_clk_src",
 309                .parent_names = gcc_xo_gpll0,
 310                .num_parents = 2,
 311                .ops = &clk_rcg2_ops,
 312        },
 313};
 314
 315static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
 316        .cmd_rcgr = 0x084c,
 317        .mnd_width = 8,
 318        .hid_width = 5,
 319        .parent_map = gcc_xo_gpll0_map,
 320        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 321        .clkr.hw.init = &(struct clk_init_data)
 322        {
 323                .name = "blsp1_qup5_spi_apps_clk_src",
 324                .parent_names = gcc_xo_gpll0,
 325                .num_parents = 2,
 326                .ops = &clk_rcg2_ops,
 327        },
 328};
 329
 330static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
 331        .cmd_rcgr = 0x08e0,
 332        .hid_width = 5,
 333        .parent_map = gcc_xo_gpll0_map,
 334        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 335        .clkr.hw.init = &(struct clk_init_data)
 336        {
 337                .name = "blsp1_qup6_i2c_apps_clk_src",
 338                .parent_names = gcc_xo_gpll0,
 339                .num_parents = 2,
 340                .ops = &clk_rcg2_ops,
 341        },
 342};
 343
 344static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
 345        .cmd_rcgr = 0x08cc,
 346        .mnd_width = 8,
 347        .hid_width = 5,
 348        .parent_map = gcc_xo_gpll0_map,
 349        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 350        .clkr.hw.init = &(struct clk_init_data)
 351        {
 352                .name = "blsp1_qup6_spi_apps_clk_src",
 353                .parent_names = gcc_xo_gpll0,
 354                .num_parents = 2,
 355                .ops = &clk_rcg2_ops,
 356        },
 357};
 358
 359static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
 360        F(3686400, P_GPLL0, 1, 96, 15625),
 361        F(7372800, P_GPLL0, 1, 192, 15625),
 362        F(14745600, P_GPLL0, 1, 384, 15625),
 363        F(16000000, P_GPLL0, 5, 2, 15),
 364        F(19200000, P_XO, 1, 0, 0),
 365        F(24000000, P_GPLL0, 5, 1, 5),
 366        F(32000000, P_GPLL0, 1, 4, 75),
 367        F(40000000, P_GPLL0, 15, 0, 0),
 368        F(46400000, P_GPLL0, 1, 29, 375),
 369        F(48000000, P_GPLL0, 12.5, 0, 0),
 370        F(51200000, P_GPLL0, 1, 32, 375),
 371        F(56000000, P_GPLL0, 1, 7, 75),
 372        F(58982400, P_GPLL0, 1, 1536, 15625),
 373        F(60000000, P_GPLL0, 10, 0, 0),
 374        F(63160000, P_GPLL0, 9.5, 0, 0),
 375        { }
 376};
 377
 378static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 379        .cmd_rcgr = 0x068c,
 380        .mnd_width = 16,
 381        .hid_width = 5,
 382        .parent_map = gcc_xo_gpll0_map,
 383        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 384        .clkr.hw.init = &(struct clk_init_data)
 385        {
 386                .name = "blsp1_uart1_apps_clk_src",
 387                .parent_names = gcc_xo_gpll0,
 388                .num_parents = 2,
 389                .ops = &clk_rcg2_ops,
 390        },
 391};
 392
 393static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 394        .cmd_rcgr = 0x070c,
 395        .mnd_width = 16,
 396        .hid_width = 5,
 397        .parent_map = gcc_xo_gpll0_map,
 398        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 399        .clkr.hw.init = &(struct clk_init_data)
 400        {
 401                .name = "blsp1_uart2_apps_clk_src",
 402                .parent_names = gcc_xo_gpll0,
 403                .num_parents = 2,
 404                .ops = &clk_rcg2_ops,
 405        },
 406};
 407
 408static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 409        .cmd_rcgr = 0x078c,
 410        .mnd_width = 16,
 411        .hid_width = 5,
 412        .parent_map = gcc_xo_gpll0_map,
 413        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 414        .clkr.hw.init = &(struct clk_init_data)
 415        {
 416                .name = "blsp1_uart3_apps_clk_src",
 417                .parent_names = gcc_xo_gpll0,
 418                .num_parents = 2,
 419                .ops = &clk_rcg2_ops,
 420        },
 421};
 422
 423static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
 424        .cmd_rcgr = 0x080c,
 425        .mnd_width = 16,
 426        .hid_width = 5,
 427        .parent_map = gcc_xo_gpll0_map,
 428        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 429        .clkr.hw.init = &(struct clk_init_data)
 430        {
 431                .name = "blsp1_uart4_apps_clk_src",
 432                .parent_names = gcc_xo_gpll0,
 433                .num_parents = 2,
 434                .ops = &clk_rcg2_ops,
 435        },
 436};
 437
 438static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
 439        .cmd_rcgr = 0x088c,
 440        .mnd_width = 16,
 441        .hid_width = 5,
 442        .parent_map = gcc_xo_gpll0_map,
 443        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 444        .clkr.hw.init = &(struct clk_init_data)
 445        {
 446                .name = "blsp1_uart5_apps_clk_src",
 447                .parent_names = gcc_xo_gpll0,
 448                .num_parents = 2,
 449                .ops = &clk_rcg2_ops,
 450        },
 451};
 452
 453static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
 454        .cmd_rcgr = 0x090c,
 455        .mnd_width = 16,
 456        .hid_width = 5,
 457        .parent_map = gcc_xo_gpll0_map,
 458        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 459        .clkr.hw.init = &(struct clk_init_data)
 460        {
 461                .name = "blsp1_uart6_apps_clk_src",
 462                .parent_names = gcc_xo_gpll0,
 463                .num_parents = 2,
 464                .ops = &clk_rcg2_ops,
 465        },
 466};
 467
 468static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 469        .cmd_rcgr = 0x09a0,
 470        .hid_width = 5,
 471        .parent_map = gcc_xo_gpll0_map,
 472        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 473        .clkr.hw.init = &(struct clk_init_data)
 474        {
 475                .name = "blsp2_qup1_i2c_apps_clk_src",
 476                .parent_names = gcc_xo_gpll0,
 477                .num_parents = 2,
 478                .ops = &clk_rcg2_ops,
 479        },
 480};
 481
 482static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 483        .cmd_rcgr = 0x098c,
 484        .mnd_width = 8,
 485        .hid_width = 5,
 486        .parent_map = gcc_xo_gpll0_map,
 487        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 488        .clkr.hw.init = &(struct clk_init_data)
 489        {
 490                .name = "blsp2_qup1_spi_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_qup2_i2c_apps_clk_src = {
 498        .cmd_rcgr = 0x0a20,
 499        .hid_width = 5,
 500        .parent_map = gcc_xo_gpll0_map,
 501        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 502        .clkr.hw.init = &(struct clk_init_data)
 503        {
 504                .name = "blsp2_qup2_i2c_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_spi_apps_clk_src = {
 512        .cmd_rcgr = 0x0a0c,
 513        .mnd_width = 8,
 514        .hid_width = 5,
 515        .parent_map = gcc_xo_gpll0_map,
 516        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 517        .clkr.hw.init = &(struct clk_init_data)
 518        {
 519                .name = "blsp2_qup2_spi_apps_clk_src",
 520                .parent_names = gcc_xo_gpll0,
 521                .num_parents = 2,
 522                .ops = &clk_rcg2_ops,
 523        },
 524};
 525
 526static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 527        .cmd_rcgr = 0x0aa0,
 528        .hid_width = 5,
 529        .parent_map = gcc_xo_gpll0_map,
 530        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 531        .clkr.hw.init = &(struct clk_init_data)
 532        {
 533                .name = "blsp2_qup3_i2c_apps_clk_src",
 534                .parent_names = gcc_xo_gpll0,
 535                .num_parents = 2,
 536                .ops = &clk_rcg2_ops,
 537        },
 538};
 539
 540static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 541        .cmd_rcgr = 0x0a8c,
 542        .mnd_width = 8,
 543        .hid_width = 5,
 544        .parent_map = gcc_xo_gpll0_map,
 545        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 546        .clkr.hw.init = &(struct clk_init_data)
 547        {
 548                .name = "blsp2_qup3_spi_apps_clk_src",
 549                .parent_names = gcc_xo_gpll0,
 550                .num_parents = 2,
 551                .ops = &clk_rcg2_ops,
 552        },
 553};
 554
 555static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 556        .cmd_rcgr = 0x0b20,
 557        .hid_width = 5,
 558        .parent_map = gcc_xo_gpll0_map,
 559        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 560        .clkr.hw.init = &(struct clk_init_data)
 561        {
 562                .name = "blsp2_qup4_i2c_apps_clk_src",
 563                .parent_names = gcc_xo_gpll0,
 564                .num_parents = 2,
 565                .ops = &clk_rcg2_ops,
 566        },
 567};
 568
 569static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 570        .cmd_rcgr = 0x0b0c,
 571        .mnd_width = 8,
 572        .hid_width = 5,
 573        .parent_map = gcc_xo_gpll0_map,
 574        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 575        .clkr.hw.init = &(struct clk_init_data)
 576        {
 577                .name = "blsp2_qup4_spi_apps_clk_src",
 578                .parent_names = gcc_xo_gpll0,
 579                .num_parents = 2,
 580                .ops = &clk_rcg2_ops,
 581        },
 582};
 583
 584static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
 585        .cmd_rcgr = 0x0ba0,
 586        .hid_width = 5,
 587        .parent_map = gcc_xo_gpll0_map,
 588        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 589        .clkr.hw.init = &(struct clk_init_data)
 590        {
 591                .name = "blsp2_qup5_i2c_apps_clk_src",
 592                .parent_names = gcc_xo_gpll0,
 593                .num_parents = 2,
 594                .ops = &clk_rcg2_ops,
 595        },
 596};
 597
 598static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
 599        .cmd_rcgr = 0x0b8c,
 600        .mnd_width = 8,
 601        .hid_width = 5,
 602        .parent_map = gcc_xo_gpll0_map,
 603        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 604        .clkr.hw.init = &(struct clk_init_data)
 605        {
 606                .name = "blsp2_qup5_spi_apps_clk_src",
 607                .parent_names = gcc_xo_gpll0,
 608                .num_parents = 2,
 609                .ops = &clk_rcg2_ops,
 610        },
 611};
 612
 613static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
 614        .cmd_rcgr = 0x0c20,
 615        .hid_width = 5,
 616        .parent_map = gcc_xo_gpll0_map,
 617        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 618        .clkr.hw.init = &(struct clk_init_data)
 619        {
 620                .name = "blsp2_qup6_i2c_apps_clk_src",
 621                .parent_names = gcc_xo_gpll0,
 622                .num_parents = 2,
 623                .ops = &clk_rcg2_ops,
 624        },
 625};
 626
 627static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
 628        .cmd_rcgr = 0x0c0c,
 629        .mnd_width = 8,
 630        .hid_width = 5,
 631        .parent_map = gcc_xo_gpll0_map,
 632        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 633        .clkr.hw.init = &(struct clk_init_data)
 634        {
 635                .name = "blsp2_qup6_spi_apps_clk_src",
 636                .parent_names = gcc_xo_gpll0,
 637                .num_parents = 2,
 638                .ops = &clk_rcg2_ops,
 639        },
 640};
 641
 642static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 643        .cmd_rcgr = 0x09cc,
 644        .mnd_width = 16,
 645        .hid_width = 5,
 646        .parent_map = gcc_xo_gpll0_map,
 647        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 648        .clkr.hw.init = &(struct clk_init_data)
 649        {
 650                .name = "blsp2_uart1_apps_clk_src",
 651                .parent_names = gcc_xo_gpll0,
 652                .num_parents = 2,
 653                .ops = &clk_rcg2_ops,
 654        },
 655};
 656
 657static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 658        .cmd_rcgr = 0x0a4c,
 659        .mnd_width = 16,
 660        .hid_width = 5,
 661        .parent_map = gcc_xo_gpll0_map,
 662        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 663        .clkr.hw.init = &(struct clk_init_data)
 664        {
 665                .name = "blsp2_uart2_apps_clk_src",
 666                .parent_names = gcc_xo_gpll0,
 667                .num_parents = 2,
 668                .ops = &clk_rcg2_ops,
 669        },
 670};
 671
 672static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
 673        .cmd_rcgr = 0x0acc,
 674        .mnd_width = 16,
 675        .hid_width = 5,
 676        .parent_map = gcc_xo_gpll0_map,
 677        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 678        .clkr.hw.init = &(struct clk_init_data)
 679        {
 680                .name = "blsp2_uart3_apps_clk_src",
 681                .parent_names = gcc_xo_gpll0,
 682                .num_parents = 2,
 683                .ops = &clk_rcg2_ops,
 684        },
 685};
 686
 687static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
 688        .cmd_rcgr = 0x0b4c,
 689        .mnd_width = 16,
 690        .hid_width = 5,
 691        .parent_map = gcc_xo_gpll0_map,
 692        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 693        .clkr.hw.init = &(struct clk_init_data)
 694        {
 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_blsp_uart_apps_clk_src,
 708        .clkr.hw.init = &(struct clk_init_data)
 709        {
 710                .name = "blsp2_uart5_apps_clk_src",
 711                .parent_names = gcc_xo_gpll0,
 712                .num_parents = 2,
 713                .ops = &clk_rcg2_ops,
 714        },
 715};
 716
 717static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
 718        .cmd_rcgr = 0x0c4c,
 719        .mnd_width = 16,
 720        .hid_width = 5,
 721        .parent_map = gcc_xo_gpll0_map,
 722        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 723        .clkr.hw.init = &(struct clk_init_data)
 724        {
 725                .name = "blsp2_uart6_apps_clk_src",
 726                .parent_names = gcc_xo_gpll0,
 727                .num_parents = 2,
 728                .ops = &clk_rcg2_ops,
 729        },
 730};
 731
 732static struct freq_tbl ftbl_gp1_clk_src[] = {
 733        F(19200000, P_XO, 1, 0, 0),
 734        F(100000000, P_GPLL0, 6, 0, 0),
 735        F(200000000, P_GPLL0, 3, 0, 0),
 736        { }
 737};
 738
 739static struct clk_rcg2 gp1_clk_src = {
 740        .cmd_rcgr = 0x1904,
 741        .mnd_width = 8,
 742        .hid_width = 5,
 743        .parent_map = gcc_xo_gpll0_map,
 744        .freq_tbl = ftbl_gp1_clk_src,
 745        .clkr.hw.init = &(struct clk_init_data)
 746        {
 747                .name = "gp1_clk_src",
 748                .parent_names = gcc_xo_gpll0,
 749                .num_parents = 2,
 750                .ops = &clk_rcg2_ops,
 751        },
 752};
 753
 754static struct freq_tbl ftbl_gp2_clk_src[] = {
 755        F(19200000, P_XO, 1, 0, 0),
 756        F(100000000, P_GPLL0, 6, 0, 0),
 757        F(200000000, P_GPLL0, 3, 0, 0),
 758        { }
 759};
 760
 761static struct clk_rcg2 gp2_clk_src = {
 762        .cmd_rcgr = 0x1944,
 763        .mnd_width = 8,
 764        .hid_width = 5,
 765        .parent_map = gcc_xo_gpll0_map,
 766        .freq_tbl = ftbl_gp2_clk_src,
 767        .clkr.hw.init = &(struct clk_init_data)
 768        {
 769                .name = "gp2_clk_src",
 770                .parent_names = gcc_xo_gpll0,
 771                .num_parents = 2,
 772                .ops = &clk_rcg2_ops,
 773        },
 774};
 775
 776static struct freq_tbl ftbl_gp3_clk_src[] = {
 777        F(19200000, P_XO, 1, 0, 0),
 778        F(100000000, P_GPLL0, 6, 0, 0),
 779        F(200000000, P_GPLL0, 3, 0, 0),
 780        { }
 781};
 782
 783static struct clk_rcg2 gp3_clk_src = {
 784        .cmd_rcgr = 0x1984,
 785        .mnd_width = 8,
 786        .hid_width = 5,
 787        .parent_map = gcc_xo_gpll0_map,
 788        .freq_tbl = ftbl_gp3_clk_src,
 789        .clkr.hw.init = &(struct clk_init_data)
 790        {
 791                .name = "gp3_clk_src",
 792                .parent_names = gcc_xo_gpll0,
 793                .num_parents = 2,
 794                .ops = &clk_rcg2_ops,
 795        },
 796};
 797
 798static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
 799        F(1011000, P_XO, 1, 1, 19),
 800        { }
 801};
 802
 803static struct clk_rcg2 pcie_0_aux_clk_src = {
 804        .cmd_rcgr = 0x1b00,
 805        .mnd_width = 8,
 806        .hid_width = 5,
 807        .freq_tbl = ftbl_pcie_0_aux_clk_src,
 808        .clkr.hw.init = &(struct clk_init_data)
 809        {
 810                .name = "pcie_0_aux_clk_src",
 811                .parent_names = (const char *[]) { "xo" },
 812                .num_parents = 1,
 813                .ops = &clk_rcg2_ops,
 814        },
 815};
 816
 817static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
 818        F(125000000, P_XO, 1, 0, 0),
 819        { }
 820};
 821
 822static struct clk_rcg2 pcie_0_pipe_clk_src = {
 823        .cmd_rcgr = 0x1adc,
 824        .hid_width = 5,
 825        .freq_tbl = ftbl_pcie_pipe_clk_src,
 826        .clkr.hw.init = &(struct clk_init_data)
 827        {
 828                .name = "pcie_0_pipe_clk_src",
 829                .parent_names = (const char *[]) { "xo" },
 830                .num_parents = 1,
 831                .ops = &clk_rcg2_ops,
 832        },
 833};
 834
 835static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
 836        F(1011000, P_XO, 1, 1, 19),
 837        { }
 838};
 839
 840static struct clk_rcg2 pcie_1_aux_clk_src = {
 841        .cmd_rcgr = 0x1b80,
 842        .mnd_width = 8,
 843        .hid_width = 5,
 844        .freq_tbl = ftbl_pcie_1_aux_clk_src,
 845        .clkr.hw.init = &(struct clk_init_data)
 846        {
 847                .name = "pcie_1_aux_clk_src",
 848                .parent_names = (const char *[]) { "xo" },
 849                .num_parents = 1,
 850                .ops = &clk_rcg2_ops,
 851        },
 852};
 853
 854static struct clk_rcg2 pcie_1_pipe_clk_src = {
 855        .cmd_rcgr = 0x1b5c,
 856        .hid_width = 5,
 857        .freq_tbl = ftbl_pcie_pipe_clk_src,
 858        .clkr.hw.init = &(struct clk_init_data)
 859        {
 860                .name = "pcie_1_pipe_clk_src",
 861                .parent_names = (const char *[]) { "xo" },
 862                .num_parents = 1,
 863                .ops = &clk_rcg2_ops,
 864        },
 865};
 866
 867static struct freq_tbl ftbl_pdm2_clk_src[] = {
 868        F(60000000, P_GPLL0, 10, 0, 0),
 869        { }
 870};
 871
 872static struct clk_rcg2 pdm2_clk_src = {
 873        .cmd_rcgr = 0x0cd0,
 874        .hid_width = 5,
 875        .parent_map = gcc_xo_gpll0_map,
 876        .freq_tbl = ftbl_pdm2_clk_src,
 877        .clkr.hw.init = &(struct clk_init_data)
 878        {
 879                .name = "pdm2_clk_src",
 880                .parent_names = gcc_xo_gpll0,
 881                .num_parents = 2,
 882                .ops = &clk_rcg2_ops,
 883        },
 884};
 885
 886static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
 887        F(144000, P_XO, 16, 3, 25),
 888        F(400000, P_XO, 12, 1, 4),
 889        F(20000000, P_GPLL0, 15, 1, 2),
 890        F(25000000, P_GPLL0, 12, 1, 2),
 891        F(50000000, P_GPLL0, 12, 0, 0),
 892        F(100000000, P_GPLL0, 6, 0, 0),
 893        F(192000000, P_GPLL4, 2, 0, 0),
 894        F(384000000, P_GPLL4, 1, 0, 0),
 895        { }
 896};
 897
 898static struct clk_rcg2 sdcc1_apps_clk_src = {
 899        .cmd_rcgr = 0x04d0,
 900        .mnd_width = 8,
 901        .hid_width = 5,
 902        .parent_map = gcc_xo_gpll0_gpll4_map,
 903        .freq_tbl = ftbl_sdcc1_apps_clk_src,
 904        .clkr.hw.init = &(struct clk_init_data)
 905        {
 906                .name = "sdcc1_apps_clk_src",
 907                .parent_names = gcc_xo_gpll0_gpll4,
 908                .num_parents = 3,
 909                .ops = &clk_rcg2_floor_ops,
 910        },
 911};
 912
 913static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
 914        F(144000, P_XO, 16, 3, 25),
 915        F(400000, P_XO, 12, 1, 4),
 916        F(20000000, P_GPLL0, 15, 1, 2),
 917        F(25000000, P_GPLL0, 12, 1, 2),
 918        F(50000000, P_GPLL0, 12, 0, 0),
 919        F(100000000, P_GPLL0, 6, 0, 0),
 920        F(200000000, P_GPLL0, 3, 0, 0),
 921        { }
 922};
 923
 924static struct clk_rcg2 sdcc2_apps_clk_src = {
 925        .cmd_rcgr = 0x0510,
 926        .mnd_width = 8,
 927        .hid_width = 5,
 928        .parent_map = gcc_xo_gpll0_map,
 929        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 930        .clkr.hw.init = &(struct clk_init_data)
 931        {
 932                .name = "sdcc2_apps_clk_src",
 933                .parent_names = gcc_xo_gpll0,
 934                .num_parents = 2,
 935                .ops = &clk_rcg2_floor_ops,
 936        },
 937};
 938
 939static struct clk_rcg2 sdcc3_apps_clk_src = {
 940        .cmd_rcgr = 0x0550,
 941        .mnd_width = 8,
 942        .hid_width = 5,
 943        .parent_map = gcc_xo_gpll0_map,
 944        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 945        .clkr.hw.init = &(struct clk_init_data)
 946        {
 947                .name = "sdcc3_apps_clk_src",
 948                .parent_names = gcc_xo_gpll0,
 949                .num_parents = 2,
 950                .ops = &clk_rcg2_floor_ops,
 951        },
 952};
 953
 954static struct clk_rcg2 sdcc4_apps_clk_src = {
 955        .cmd_rcgr = 0x0590,
 956        .mnd_width = 8,
 957        .hid_width = 5,
 958        .parent_map = gcc_xo_gpll0_map,
 959        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 960        .clkr.hw.init = &(struct clk_init_data)
 961        {
 962                .name = "sdcc4_apps_clk_src",
 963                .parent_names = gcc_xo_gpll0,
 964                .num_parents = 2,
 965                .ops = &clk_rcg2_floor_ops,
 966        },
 967};
 968
 969static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
 970        F(105500, P_XO, 1, 1, 182),
 971        { }
 972};
 973
 974static struct clk_rcg2 tsif_ref_clk_src = {
 975        .cmd_rcgr = 0x0d90,
 976        .mnd_width = 8,
 977        .hid_width = 5,
 978        .freq_tbl = ftbl_tsif_ref_clk_src,
 979        .clkr.hw.init = &(struct clk_init_data)
 980        {
 981                .name = "tsif_ref_clk_src",
 982                .parent_names = (const char *[]) { "xo" },
 983                .num_parents = 1,
 984                .ops = &clk_rcg2_ops,
 985        },
 986};
 987
 988static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
 989        F(19200000, P_XO, 1, 0, 0),
 990        F(60000000, P_GPLL0, 10, 0, 0),
 991        { }
 992};
 993
 994static struct clk_rcg2 usb30_mock_utmi_clk_src = {
 995        .cmd_rcgr = 0x03e8,
 996        .hid_width = 5,
 997        .parent_map = gcc_xo_gpll0_map,
 998        .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
 999        .clkr.hw.init = &(struct clk_init_data)
1000        {
1001                .name = "usb30_mock_utmi_clk_src",
1002                .parent_names = gcc_xo_gpll0,
1003                .num_parents = 2,
1004                .ops = &clk_rcg2_ops,
1005        },
1006};
1007
1008static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1009        F(1200000, P_XO, 16, 0, 0),
1010        { }
1011};
1012
1013static struct clk_rcg2 usb3_phy_aux_clk_src = {
1014        .cmd_rcgr = 0x1414,
1015        .hid_width = 5,
1016        .freq_tbl = ftbl_usb3_phy_aux_clk_src,
1017        .clkr.hw.init = &(struct clk_init_data)
1018        {
1019                .name = "usb3_phy_aux_clk_src",
1020                .parent_names = (const char *[]) { "xo" },
1021                .num_parents = 1,
1022                .ops = &clk_rcg2_ops,
1023        },
1024};
1025
1026static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1027        F(75000000, P_GPLL0, 8, 0, 0),
1028        { }
1029};
1030
1031static struct clk_rcg2 usb_hs_system_clk_src = {
1032        .cmd_rcgr = 0x0490,
1033        .hid_width = 5,
1034        .parent_map = gcc_xo_gpll0_map,
1035        .freq_tbl = ftbl_usb_hs_system_clk_src,
1036        .clkr.hw.init = &(struct clk_init_data)
1037        {
1038                .name = "usb_hs_system_clk_src",
1039                .parent_names = gcc_xo_gpll0,
1040                .num_parents = 2,
1041                .ops = &clk_rcg2_ops,
1042        },
1043};
1044
1045static struct clk_branch gcc_blsp1_ahb_clk = {
1046        .halt_reg = 0x05c4,
1047        .halt_check = BRANCH_HALT_VOTED,
1048        .clkr = {
1049                .enable_reg = 0x1484,
1050                .enable_mask = BIT(17),
1051                .hw.init = &(struct clk_init_data)
1052                {
1053                        .name = "gcc_blsp1_ahb_clk",
1054                        .ops = &clk_branch2_ops,
1055                },
1056        },
1057};
1058
1059static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1060        .halt_reg = 0x0648,
1061        .clkr = {
1062                .enable_reg = 0x0648,
1063                .enable_mask = BIT(0),
1064                .hw.init = &(struct clk_init_data)
1065                {
1066                        .name = "gcc_blsp1_qup1_i2c_apps_clk",
1067                        .parent_names = (const char *[]) {
1068                                "blsp1_qup1_i2c_apps_clk_src",
1069                        },
1070                        .num_parents = 1,
1071                        .flags = CLK_SET_RATE_PARENT,
1072                        .ops = &clk_branch2_ops,
1073                },
1074        },
1075};
1076
1077static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1078        .halt_reg = 0x0644,
1079        .clkr = {
1080                .enable_reg = 0x0644,
1081                .enable_mask = BIT(0),
1082                .hw.init = &(struct clk_init_data)
1083                {
1084                        .name = "gcc_blsp1_qup1_spi_apps_clk",
1085                        .parent_names = (const char *[]) {
1086                                "blsp1_qup1_spi_apps_clk_src",
1087                        },
1088                        .num_parents = 1,
1089                        .flags = CLK_SET_RATE_PARENT,
1090                        .ops = &clk_branch2_ops,
1091                },
1092        },
1093};
1094
1095static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1096        .halt_reg = 0x06c8,
1097        .clkr = {
1098                .enable_reg = 0x06c8,
1099                .enable_mask = BIT(0),
1100                .hw.init = &(struct clk_init_data)
1101                {
1102                        .name = "gcc_blsp1_qup2_i2c_apps_clk",
1103                        .parent_names = (const char *[]) {
1104                                "blsp1_qup2_i2c_apps_clk_src",
1105                        },
1106                        .num_parents = 1,
1107                        .flags = CLK_SET_RATE_PARENT,
1108                        .ops = &clk_branch2_ops,
1109                },
1110        },
1111};
1112
1113static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1114        .halt_reg = 0x06c4,
1115        .clkr = {
1116                .enable_reg = 0x06c4,
1117                .enable_mask = BIT(0),
1118                .hw.init = &(struct clk_init_data)
1119                {
1120                        .name = "gcc_blsp1_qup2_spi_apps_clk",
1121                        .parent_names = (const char *[]) {
1122                                "blsp1_qup2_spi_apps_clk_src",
1123                        },
1124                        .num_parents = 1,
1125                        .flags = CLK_SET_RATE_PARENT,
1126                        .ops = &clk_branch2_ops,
1127                },
1128        },
1129};
1130
1131static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1132        .halt_reg = 0x0748,
1133        .clkr = {
1134                .enable_reg = 0x0748,
1135                .enable_mask = BIT(0),
1136                .hw.init = &(struct clk_init_data)
1137                {
1138                        .name = "gcc_blsp1_qup3_i2c_apps_clk",
1139                        .parent_names = (const char *[]) {
1140                                "blsp1_qup3_i2c_apps_clk_src",
1141                        },
1142                        .num_parents = 1,
1143                        .flags = CLK_SET_RATE_PARENT,
1144                        .ops = &clk_branch2_ops,
1145                },
1146        },
1147};
1148
1149static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1150        .halt_reg = 0x0744,
1151        .clkr = {
1152                .enable_reg = 0x0744,
1153                .enable_mask = BIT(0),
1154                .hw.init = &(struct clk_init_data)
1155                {
1156                        .name = "gcc_blsp1_qup3_spi_apps_clk",
1157                        .parent_names = (const char *[]) {
1158                                "blsp1_qup3_spi_apps_clk_src",
1159                        },
1160                        .num_parents = 1,
1161                        .flags = CLK_SET_RATE_PARENT,
1162                        .ops = &clk_branch2_ops,
1163                },
1164        },
1165};
1166
1167static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1168        .halt_reg = 0x07c8,
1169        .clkr = {
1170                .enable_reg = 0x07c8,
1171                .enable_mask = BIT(0),
1172                .hw.init = &(struct clk_init_data)
1173                {
1174                        .name = "gcc_blsp1_qup4_i2c_apps_clk",
1175                        .parent_names = (const char *[]) {
1176                                "blsp1_qup4_i2c_apps_clk_src",
1177                        },
1178                        .num_parents = 1,
1179                        .flags = CLK_SET_RATE_PARENT,
1180                        .ops = &clk_branch2_ops,
1181                },
1182        },
1183};
1184
1185static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1186        .halt_reg = 0x07c4,
1187        .clkr = {
1188                .enable_reg = 0x07c4,
1189                .enable_mask = BIT(0),
1190                .hw.init = &(struct clk_init_data)
1191                {
1192                        .name = "gcc_blsp1_qup4_spi_apps_clk",
1193                        .parent_names = (const char *[]) {
1194                                "blsp1_qup4_spi_apps_clk_src",
1195                        },
1196                        .num_parents = 1,
1197                        .flags = CLK_SET_RATE_PARENT,
1198                        .ops = &clk_branch2_ops,
1199                },
1200        },
1201};
1202
1203static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1204        .halt_reg = 0x0848,
1205        .clkr = {
1206                .enable_reg = 0x0848,
1207                .enable_mask = BIT(0),
1208                .hw.init = &(struct clk_init_data)
1209                {
1210                        .name = "gcc_blsp1_qup5_i2c_apps_clk",
1211                        .parent_names = (const char *[]) {
1212                                "blsp1_qup5_i2c_apps_clk_src",
1213                        },
1214                        .num_parents = 1,
1215                        .flags = CLK_SET_RATE_PARENT,
1216                        .ops = &clk_branch2_ops,
1217                },
1218        },
1219};
1220
1221static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1222        .halt_reg = 0x0844,
1223        .clkr = {
1224                .enable_reg = 0x0844,
1225                .enable_mask = BIT(0),
1226                .hw.init = &(struct clk_init_data)
1227                {
1228                        .name = "gcc_blsp1_qup5_spi_apps_clk",
1229                        .parent_names = (const char *[]) {
1230                                "blsp1_qup5_spi_apps_clk_src",
1231                        },
1232                        .num_parents = 1,
1233                        .flags = CLK_SET_RATE_PARENT,
1234                        .ops = &clk_branch2_ops,
1235                },
1236        },
1237};
1238
1239static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1240        .halt_reg = 0x08c8,
1241        .clkr = {
1242                .enable_reg = 0x08c8,
1243                .enable_mask = BIT(0),
1244                .hw.init = &(struct clk_init_data)
1245                {
1246                        .name = "gcc_blsp1_qup6_i2c_apps_clk",
1247                        .parent_names = (const char *[]) {
1248                                "blsp1_qup6_i2c_apps_clk_src",
1249                        },
1250                        .num_parents = 1,
1251                        .flags = CLK_SET_RATE_PARENT,
1252                        .ops = &clk_branch2_ops,
1253                },
1254        },
1255};
1256
1257static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1258        .halt_reg = 0x08c4,
1259        .clkr = {
1260                .enable_reg = 0x08c4,
1261                .enable_mask = BIT(0),
1262                .hw.init = &(struct clk_init_data)
1263                {
1264                        .name = "gcc_blsp1_qup6_spi_apps_clk",
1265                        .parent_names = (const char *[]) {
1266                                "blsp1_qup6_spi_apps_clk_src",
1267                        },
1268                        .num_parents = 1,
1269                        .flags = CLK_SET_RATE_PARENT,
1270                        .ops = &clk_branch2_ops,
1271                },
1272        },
1273};
1274
1275static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1276        .halt_reg = 0x0684,
1277        .clkr = {
1278                .enable_reg = 0x0684,
1279                .enable_mask = BIT(0),
1280                .hw.init = &(struct clk_init_data)
1281                {
1282                        .name = "gcc_blsp1_uart1_apps_clk",
1283                        .parent_names = (const char *[]) {
1284                                "blsp1_uart1_apps_clk_src",
1285                        },
1286                        .num_parents = 1,
1287                        .flags = CLK_SET_RATE_PARENT,
1288                        .ops = &clk_branch2_ops,
1289                },
1290        },
1291};
1292
1293static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1294        .halt_reg = 0x0704,
1295        .clkr = {
1296                .enable_reg = 0x0704,
1297                .enable_mask = BIT(0),
1298                .hw.init = &(struct clk_init_data)
1299                {
1300                        .name = "gcc_blsp1_uart2_apps_clk",
1301                        .parent_names = (const char *[]) {
1302                                "blsp1_uart2_apps_clk_src",
1303                        },
1304                        .num_parents = 1,
1305                        .flags = CLK_SET_RATE_PARENT,
1306                        .ops = &clk_branch2_ops,
1307                },
1308        },
1309};
1310
1311static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1312        .halt_reg = 0x0784,
1313        .clkr = {
1314                .enable_reg = 0x0784,
1315                .enable_mask = BIT(0),
1316                .hw.init = &(struct clk_init_data)
1317                {
1318                        .name = "gcc_blsp1_uart3_apps_clk",
1319                        .parent_names = (const char *[]) {
1320                                "blsp1_uart3_apps_clk_src",
1321                        },
1322                        .num_parents = 1,
1323                        .flags = CLK_SET_RATE_PARENT,
1324                        .ops = &clk_branch2_ops,
1325                },
1326        },
1327};
1328
1329static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1330        .halt_reg = 0x0804,
1331        .clkr = {
1332                .enable_reg = 0x0804,
1333                .enable_mask = BIT(0),
1334                .hw.init = &(struct clk_init_data)
1335                {
1336                        .name = "gcc_blsp1_uart4_apps_clk",
1337                        .parent_names = (const char *[]) {
1338                                "blsp1_uart4_apps_clk_src",
1339                        },
1340                        .num_parents = 1,
1341                        .flags = CLK_SET_RATE_PARENT,
1342                        .ops = &clk_branch2_ops,
1343                },
1344        },
1345};
1346
1347static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1348        .halt_reg = 0x0884,
1349        .clkr = {
1350                .enable_reg = 0x0884,
1351                .enable_mask = BIT(0),
1352                .hw.init = &(struct clk_init_data)
1353                {
1354                        .name = "gcc_blsp1_uart5_apps_clk",
1355                        .parent_names = (const char *[]) {
1356                                "blsp1_uart5_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_uart6_apps_clk = {
1366        .halt_reg = 0x0904,
1367        .clkr = {
1368                .enable_reg = 0x0904,
1369                .enable_mask = BIT(0),
1370                .hw.init = &(struct clk_init_data)
1371                {
1372                        .name = "gcc_blsp1_uart6_apps_clk",
1373                        .parent_names = (const char *[]) {
1374                                "blsp1_uart6_apps_clk_src",
1375                        },
1376                        .num_parents = 1,
1377                        .flags = CLK_SET_RATE_PARENT,
1378                        .ops = &clk_branch2_ops,
1379                },
1380        },
1381};
1382
1383static struct clk_branch gcc_blsp2_ahb_clk = {
1384        .halt_reg = 0x0944,
1385        .halt_check = BRANCH_HALT_VOTED,
1386        .clkr = {
1387                .enable_reg = 0x1484,
1388                .enable_mask = BIT(15),
1389                .hw.init = &(struct clk_init_data)
1390                {
1391                        .name = "gcc_blsp2_ahb_clk",
1392                        .ops = &clk_branch2_ops,
1393                },
1394        },
1395};
1396
1397static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1398        .halt_reg = 0x0988,
1399        .clkr = {
1400                .enable_reg = 0x0988,
1401                .enable_mask = BIT(0),
1402                .hw.init = &(struct clk_init_data)
1403                {
1404                        .name = "gcc_blsp2_qup1_i2c_apps_clk",
1405                        .parent_names = (const char *[]) {
1406                                "blsp2_qup1_i2c_apps_clk_src",
1407                        },
1408                        .num_parents = 1,
1409                        .flags = CLK_SET_RATE_PARENT,
1410                        .ops = &clk_branch2_ops,
1411                },
1412        },
1413};
1414
1415static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1416        .halt_reg = 0x0984,
1417        .clkr = {
1418                .enable_reg = 0x0984,
1419                .enable_mask = BIT(0),
1420                .hw.init = &(struct clk_init_data)
1421                {
1422                        .name = "gcc_blsp2_qup1_spi_apps_clk",
1423                        .parent_names = (const char *[]) {
1424                                "blsp2_qup1_spi_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_qup2_i2c_apps_clk = {
1434        .halt_reg = 0x0a08,
1435        .clkr = {
1436                .enable_reg = 0x0a08,
1437                .enable_mask = BIT(0),
1438                .hw.init = &(struct clk_init_data)
1439                {
1440                        .name = "gcc_blsp2_qup2_i2c_apps_clk",
1441                        .parent_names = (const char *[]) {
1442                                "blsp2_qup2_i2c_apps_clk_src",
1443                        },
1444                        .num_parents = 1,
1445                        .flags = CLK_SET_RATE_PARENT,
1446                        .ops = &clk_branch2_ops,
1447                },
1448        },
1449};
1450
1451static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1452        .halt_reg = 0x0a04,
1453        .clkr = {
1454                .enable_reg = 0x0a04,
1455                .enable_mask = BIT(0),
1456                .hw.init = &(struct clk_init_data)
1457                {
1458                        .name = "gcc_blsp2_qup2_spi_apps_clk",
1459                        .parent_names = (const char *[]) {
1460                                "blsp2_qup2_spi_apps_clk_src",
1461                        },
1462                        .num_parents = 1,
1463                        .flags = CLK_SET_RATE_PARENT,
1464                        .ops = &clk_branch2_ops,
1465                },
1466        },
1467};
1468
1469static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1470        .halt_reg = 0x0a88,
1471        .clkr = {
1472                .enable_reg = 0x0a88,
1473                .enable_mask = BIT(0),
1474                .hw.init = &(struct clk_init_data)
1475                {
1476                        .name = "gcc_blsp2_qup3_i2c_apps_clk",
1477                        .parent_names = (const char *[]) {
1478                                "blsp2_qup3_i2c_apps_clk_src",
1479                        },
1480                        .num_parents = 1,
1481                        .flags = CLK_SET_RATE_PARENT,
1482                        .ops = &clk_branch2_ops,
1483                },
1484        },
1485};
1486
1487static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1488        .halt_reg = 0x0a84,
1489        .clkr = {
1490                .enable_reg = 0x0a84,
1491                .enable_mask = BIT(0),
1492                .hw.init = &(struct clk_init_data)
1493                {
1494                        .name = "gcc_blsp2_qup3_spi_apps_clk",
1495                        .parent_names = (const char *[]) {
1496                                "blsp2_qup3_spi_apps_clk_src",
1497                        },
1498                        .num_parents = 1,
1499                        .flags = CLK_SET_RATE_PARENT,
1500                        .ops = &clk_branch2_ops,
1501                },
1502        },
1503};
1504
1505static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1506        .halt_reg = 0x0b08,
1507        .clkr = {
1508                .enable_reg = 0x0b08,
1509                .enable_mask = BIT(0),
1510                .hw.init = &(struct clk_init_data)
1511                {
1512                        .name = "gcc_blsp2_qup4_i2c_apps_clk",
1513                        .parent_names = (const char *[]) {
1514                                "blsp2_qup4_i2c_apps_clk_src",
1515                        },
1516                        .num_parents = 1,
1517                        .flags = CLK_SET_RATE_PARENT,
1518                        .ops = &clk_branch2_ops,
1519                },
1520        },
1521};
1522
1523static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1524        .halt_reg = 0x0b04,
1525        .clkr = {
1526                .enable_reg = 0x0b04,
1527                .enable_mask = BIT(0),
1528                .hw.init = &(struct clk_init_data)
1529                {
1530                        .name = "gcc_blsp2_qup4_spi_apps_clk",
1531                        .parent_names = (const char *[]) {
1532                                "blsp2_qup4_spi_apps_clk_src",
1533                        },
1534                        .num_parents = 1,
1535                        .flags = CLK_SET_RATE_PARENT,
1536                        .ops = &clk_branch2_ops,
1537                },
1538        },
1539};
1540
1541static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1542        .halt_reg = 0x0b88,
1543        .clkr = {
1544                .enable_reg = 0x0b88,
1545                .enable_mask = BIT(0),
1546                .hw.init = &(struct clk_init_data)
1547                {
1548                        .name = "gcc_blsp2_qup5_i2c_apps_clk",
1549                        .parent_names = (const char *[]) {
1550                                "blsp2_qup5_i2c_apps_clk_src",
1551                        },
1552                        .num_parents = 1,
1553                        .flags = CLK_SET_RATE_PARENT,
1554                        .ops = &clk_branch2_ops,
1555                },
1556        },
1557};
1558
1559static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1560        .halt_reg = 0x0b84,
1561        .clkr = {
1562                .enable_reg = 0x0b84,
1563                .enable_mask = BIT(0),
1564                .hw.init = &(struct clk_init_data)
1565                {
1566                        .name = "gcc_blsp2_qup5_spi_apps_clk",
1567                        .parent_names = (const char *[]) {
1568                                "blsp2_qup5_spi_apps_clk_src",
1569                        },
1570                        .num_parents = 1,
1571                        .flags = CLK_SET_RATE_PARENT,
1572                        .ops = &clk_branch2_ops,
1573                },
1574        },
1575};
1576
1577static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1578        .halt_reg = 0x0c08,
1579        .clkr = {
1580                .enable_reg = 0x0c08,
1581                .enable_mask = BIT(0),
1582                .hw.init = &(struct clk_init_data)
1583                {
1584                        .name = "gcc_blsp2_qup6_i2c_apps_clk",
1585                        .parent_names = (const char *[]) {
1586                                "blsp2_qup6_i2c_apps_clk_src",
1587                        },
1588                        .num_parents = 1,
1589                        .flags = CLK_SET_RATE_PARENT,
1590                        .ops = &clk_branch2_ops,
1591                },
1592        },
1593};
1594
1595static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1596        .halt_reg = 0x0c04,
1597        .clkr = {
1598                .enable_reg = 0x0c04,
1599                .enable_mask = BIT(0),
1600                .hw.init = &(struct clk_init_data)
1601                {
1602                        .name = "gcc_blsp2_qup6_spi_apps_clk",
1603                        .parent_names = (const char *[]) {
1604                                "blsp2_qup6_spi_apps_clk_src",
1605                        },
1606                        .num_parents = 1,
1607                        .flags = CLK_SET_RATE_PARENT,
1608                        .ops = &clk_branch2_ops,
1609                },
1610        },
1611};
1612
1613static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1614        .halt_reg = 0x09c4,
1615        .clkr = {
1616                .enable_reg = 0x09c4,
1617                .enable_mask = BIT(0),
1618                .hw.init = &(struct clk_init_data)
1619                {
1620                        .name = "gcc_blsp2_uart1_apps_clk",
1621                        .parent_names = (const char *[]) {
1622                                "blsp2_uart1_apps_clk_src",
1623                        },
1624                        .num_parents = 1,
1625                        .flags = CLK_SET_RATE_PARENT,
1626                        .ops = &clk_branch2_ops,
1627                },
1628        },
1629};
1630
1631static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1632        .halt_reg = 0x0a44,
1633        .clkr = {
1634                .enable_reg = 0x0a44,
1635                .enable_mask = BIT(0),
1636                .hw.init = &(struct clk_init_data)
1637                {
1638                        .name = "gcc_blsp2_uart2_apps_clk",
1639                        .parent_names = (const char *[]) {
1640                                "blsp2_uart2_apps_clk_src",
1641                        },
1642                        .num_parents = 1,
1643                        .flags = CLK_SET_RATE_PARENT,
1644                        .ops = &clk_branch2_ops,
1645                },
1646        },
1647};
1648
1649static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1650        .halt_reg = 0x0ac4,
1651        .clkr = {
1652                .enable_reg = 0x0ac4,
1653                .enable_mask = BIT(0),
1654                .hw.init = &(struct clk_init_data)
1655                {
1656                        .name = "gcc_blsp2_uart3_apps_clk",
1657                        .parent_names = (const char *[]) {
1658                                "blsp2_uart3_apps_clk_src",
1659                        },
1660                        .num_parents = 1,
1661                        .flags = CLK_SET_RATE_PARENT,
1662                        .ops = &clk_branch2_ops,
1663                },
1664        },
1665};
1666
1667static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1668        .halt_reg = 0x0b44,
1669        .clkr = {
1670                .enable_reg = 0x0b44,
1671                .enable_mask = BIT(0),
1672                .hw.init = &(struct clk_init_data)
1673                {
1674                        .name = "gcc_blsp2_uart4_apps_clk",
1675                        .parent_names = (const char *[]) {
1676                                "blsp2_uart4_apps_clk_src",
1677                        },
1678                        .num_parents = 1,
1679                        .flags = CLK_SET_RATE_PARENT,
1680                        .ops = &clk_branch2_ops,
1681                },
1682        },
1683};
1684
1685static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1686        .halt_reg = 0x0bc4,
1687        .clkr = {
1688                .enable_reg = 0x0bc4,
1689                .enable_mask = BIT(0),
1690                .hw.init = &(struct clk_init_data)
1691                {
1692                        .name = "gcc_blsp2_uart5_apps_clk",
1693                        .parent_names = (const char *[]) {
1694                                "blsp2_uart5_apps_clk_src",
1695                        },
1696                        .num_parents = 1,
1697                        .flags = CLK_SET_RATE_PARENT,
1698                        .ops = &clk_branch2_ops,
1699                },
1700        },
1701};
1702
1703static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1704        .halt_reg = 0x0c44,
1705        .clkr = {
1706                .enable_reg = 0x0c44,
1707                .enable_mask = BIT(0),
1708                .hw.init = &(struct clk_init_data)
1709                {
1710                        .name = "gcc_blsp2_uart6_apps_clk",
1711                        .parent_names = (const char *[]) {
1712                                "blsp2_uart6_apps_clk_src",
1713                        },
1714                        .num_parents = 1,
1715                        .flags = CLK_SET_RATE_PARENT,
1716                        .ops = &clk_branch2_ops,
1717                },
1718        },
1719};
1720
1721static struct clk_branch gcc_gp1_clk = {
1722        .halt_reg = 0x1900,
1723        .clkr = {
1724                .enable_reg = 0x1900,
1725                .enable_mask = BIT(0),
1726                .hw.init = &(struct clk_init_data)
1727                {
1728                        .name = "gcc_gp1_clk",
1729                        .parent_names = (const char *[]) {
1730                                "gp1_clk_src",
1731                        },
1732                        .num_parents = 1,
1733                        .flags = CLK_SET_RATE_PARENT,
1734                        .ops = &clk_branch2_ops,
1735                },
1736        },
1737};
1738
1739static struct clk_branch gcc_gp2_clk = {
1740        .halt_reg = 0x1940,
1741        .clkr = {
1742                .enable_reg = 0x1940,
1743                .enable_mask = BIT(0),
1744                .hw.init = &(struct clk_init_data)
1745                {
1746                        .name = "gcc_gp2_clk",
1747                        .parent_names = (const char *[]) {
1748                                "gp2_clk_src",
1749                        },
1750                        .num_parents = 1,
1751                        .flags = CLK_SET_RATE_PARENT,
1752                        .ops = &clk_branch2_ops,
1753                },
1754        },
1755};
1756
1757static struct clk_branch gcc_gp3_clk = {
1758        .halt_reg = 0x1980,
1759        .clkr = {
1760                .enable_reg = 0x1980,
1761                .enable_mask = BIT(0),
1762                .hw.init = &(struct clk_init_data)
1763                {
1764                        .name = "gcc_gp3_clk",
1765                        .parent_names = (const char *[]) {
1766                                "gp3_clk_src",
1767                        },
1768                        .num_parents = 1,
1769                        .flags = CLK_SET_RATE_PARENT,
1770                        .ops = &clk_branch2_ops,
1771                },
1772        },
1773};
1774
1775static struct clk_branch gcc_pcie_0_aux_clk = {
1776        .halt_reg = 0x1ad4,
1777        .clkr = {
1778                .enable_reg = 0x1ad4,
1779                .enable_mask = BIT(0),
1780                .hw.init = &(struct clk_init_data)
1781                {
1782                        .name = "gcc_pcie_0_aux_clk",
1783                        .parent_names = (const char *[]) {
1784                                "pcie_0_aux_clk_src",
1785                        },
1786                        .num_parents = 1,
1787                        .flags = CLK_SET_RATE_PARENT,
1788                        .ops = &clk_branch2_ops,
1789                },
1790        },
1791};
1792
1793static struct clk_branch gcc_pcie_0_pipe_clk = {
1794        .halt_reg = 0x1ad8,
1795        .halt_check = BRANCH_HALT_DELAY,
1796        .clkr = {
1797                .enable_reg = 0x1ad8,
1798                .enable_mask = BIT(0),
1799                .hw.init = &(struct clk_init_data)
1800                {
1801                        .name = "gcc_pcie_0_pipe_clk",
1802                        .parent_names = (const char *[]) {
1803                                "pcie_0_pipe_clk_src",
1804                        },
1805                        .num_parents = 1,
1806                        .flags = CLK_SET_RATE_PARENT,
1807                        .ops = &clk_branch2_ops,
1808                },
1809        },
1810};
1811
1812static struct clk_branch gcc_pcie_1_aux_clk = {
1813        .halt_reg = 0x1b54,
1814        .clkr = {
1815                .enable_reg = 0x1b54,
1816                .enable_mask = BIT(0),
1817                .hw.init = &(struct clk_init_data)
1818                {
1819                        .name = "gcc_pcie_1_aux_clk",
1820                        .parent_names = (const char *[]) {
1821                                "pcie_1_aux_clk_src",
1822                        },
1823                        .num_parents = 1,
1824                        .flags = CLK_SET_RATE_PARENT,
1825                        .ops = &clk_branch2_ops,
1826                },
1827        },
1828};
1829
1830static struct clk_branch gcc_pcie_1_pipe_clk = {
1831        .halt_reg = 0x1b58,
1832        .halt_check = BRANCH_HALT_DELAY,
1833        .clkr = {
1834                .enable_reg = 0x1b58,
1835                .enable_mask = BIT(0),
1836                .hw.init = &(struct clk_init_data)
1837                {
1838                        .name = "gcc_pcie_1_pipe_clk",
1839                        .parent_names = (const char *[]) {
1840                                "pcie_1_pipe_clk_src",
1841                        },
1842                        .num_parents = 1,
1843                        .flags = CLK_SET_RATE_PARENT,
1844                        .ops = &clk_branch2_ops,
1845                },
1846        },
1847};
1848
1849static struct clk_branch gcc_pdm2_clk = {
1850        .halt_reg = 0x0ccc,
1851        .clkr = {
1852                .enable_reg = 0x0ccc,
1853                .enable_mask = BIT(0),
1854                .hw.init = &(struct clk_init_data)
1855                {
1856                        .name = "gcc_pdm2_clk",
1857                        .parent_names = (const char *[]) {
1858                                "pdm2_clk_src",
1859                        },
1860                        .num_parents = 1,
1861                        .flags = CLK_SET_RATE_PARENT,
1862                        .ops = &clk_branch2_ops,
1863                },
1864        },
1865};
1866
1867static struct clk_branch gcc_sdcc1_apps_clk = {
1868        .halt_reg = 0x04c4,
1869        .clkr = {
1870                .enable_reg = 0x04c4,
1871                .enable_mask = BIT(0),
1872                .hw.init = &(struct clk_init_data)
1873                {
1874                        .name = "gcc_sdcc1_apps_clk",
1875                        .parent_names = (const char *[]) {
1876                                "sdcc1_apps_clk_src",
1877                        },
1878                        .num_parents = 1,
1879                        .flags = CLK_SET_RATE_PARENT,
1880                        .ops = &clk_branch2_ops,
1881                },
1882        },
1883};
1884
1885static struct clk_branch gcc_sdcc1_ahb_clk = {
1886        .halt_reg = 0x04c8,
1887        .clkr = {
1888                .enable_reg = 0x04c8,
1889                .enable_mask = BIT(0),
1890                .hw.init = &(struct clk_init_data)
1891                {
1892                        .name = "gcc_sdcc1_ahb_clk",
1893                        .parent_names = (const char *[]){
1894                                "periph_noc_clk_src",
1895                        },
1896                        .num_parents = 1,
1897                        .ops = &clk_branch2_ops,
1898                },
1899        },
1900};
1901
1902static struct clk_branch gcc_sdcc2_apps_clk = {
1903        .halt_reg = 0x0504,
1904        .clkr = {
1905                .enable_reg = 0x0504,
1906                .enable_mask = BIT(0),
1907                .hw.init = &(struct clk_init_data)
1908                {
1909                        .name = "gcc_sdcc2_apps_clk",
1910                        .parent_names = (const char *[]) {
1911                                "sdcc2_apps_clk_src",
1912                        },
1913                        .num_parents = 1,
1914                        .flags = CLK_SET_RATE_PARENT,
1915                        .ops = &clk_branch2_ops,
1916                },
1917        },
1918};
1919
1920static struct clk_branch gcc_sdcc3_apps_clk = {
1921        .halt_reg = 0x0544,
1922        .clkr = {
1923                .enable_reg = 0x0544,
1924                .enable_mask = BIT(0),
1925                .hw.init = &(struct clk_init_data)
1926                {
1927                        .name = "gcc_sdcc3_apps_clk",
1928                        .parent_names = (const char *[]) {
1929                                "sdcc3_apps_clk_src",
1930                        },
1931                        .num_parents = 1,
1932                        .flags = CLK_SET_RATE_PARENT,
1933                        .ops = &clk_branch2_ops,
1934                },
1935        },
1936};
1937
1938static struct clk_branch gcc_sdcc4_apps_clk = {
1939        .halt_reg = 0x0584,
1940        .clkr = {
1941                .enable_reg = 0x0584,
1942                .enable_mask = BIT(0),
1943                .hw.init = &(struct clk_init_data)
1944                {
1945                        .name = "gcc_sdcc4_apps_clk",
1946                        .parent_names = (const char *[]) {
1947                                "sdcc4_apps_clk_src",
1948                        },
1949                        .num_parents = 1,
1950                        .flags = CLK_SET_RATE_PARENT,
1951                        .ops = &clk_branch2_ops,
1952                },
1953        },
1954};
1955
1956static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1957        .halt_reg = 0x1d7c,
1958        .clkr = {
1959                .enable_reg = 0x1d7c,
1960                .enable_mask = BIT(0),
1961                .hw.init = &(struct clk_init_data)
1962                {
1963                        .name = "gcc_sys_noc_ufs_axi_clk",
1964                        .parent_names = (const char *[]) {
1965                                "ufs_axi_clk_src",
1966                        },
1967                        .num_parents = 1,
1968                        .flags = CLK_SET_RATE_PARENT,
1969                        .ops = &clk_branch2_ops,
1970                },
1971        },
1972};
1973
1974static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1975        .halt_reg = 0x03fc,
1976        .clkr = {
1977                .enable_reg = 0x03fc,
1978                .enable_mask = BIT(0),
1979                .hw.init = &(struct clk_init_data)
1980                {
1981                        .name = "gcc_sys_noc_usb3_axi_clk",
1982                        .parent_names = (const char *[]) {
1983                                "usb30_master_clk_src",
1984                        },
1985                        .num_parents = 1,
1986                        .flags = CLK_SET_RATE_PARENT,
1987                        .ops = &clk_branch2_ops,
1988                },
1989        },
1990};
1991
1992static struct clk_branch gcc_tsif_ref_clk = {
1993        .halt_reg = 0x0d88,
1994        .clkr = {
1995                .enable_reg = 0x0d88,
1996                .enable_mask = BIT(0),
1997                .hw.init = &(struct clk_init_data)
1998                {
1999                        .name = "gcc_tsif_ref_clk",
2000                        .parent_names = (const char *[]) {
2001                                "tsif_ref_clk_src",
2002                        },
2003                        .num_parents = 1,
2004                        .flags = CLK_SET_RATE_PARENT,
2005                        .ops = &clk_branch2_ops,
2006                },
2007        },
2008};
2009
2010static struct clk_branch gcc_ufs_axi_clk = {
2011        .halt_reg = 0x1d48,
2012        .clkr = {
2013                .enable_reg = 0x1d48,
2014                .enable_mask = BIT(0),
2015                .hw.init = &(struct clk_init_data)
2016                {
2017                        .name = "gcc_ufs_axi_clk",
2018                        .parent_names = (const char *[]) {
2019                                "ufs_axi_clk_src",
2020                        },
2021                        .num_parents = 1,
2022                        .flags = CLK_SET_RATE_PARENT,
2023                        .ops = &clk_branch2_ops,
2024                },
2025        },
2026};
2027
2028static struct clk_branch gcc_ufs_rx_cfg_clk = {
2029        .halt_reg = 0x1d54,
2030        .clkr = {
2031                .enable_reg = 0x1d54,
2032                .enable_mask = BIT(0),
2033                .hw.init = &(struct clk_init_data)
2034                {
2035                        .name = "gcc_ufs_rx_cfg_clk",
2036                        .parent_names = (const char *[]) {
2037                                "ufs_axi_clk_src",
2038                        },
2039                        .num_parents = 1,
2040                        .flags = CLK_SET_RATE_PARENT,
2041                        .ops = &clk_branch2_ops,
2042                },
2043        },
2044};
2045
2046static struct clk_branch gcc_ufs_tx_cfg_clk = {
2047        .halt_reg = 0x1d50,
2048        .clkr = {
2049                .enable_reg = 0x1d50,
2050                .enable_mask = BIT(0),
2051                .hw.init = &(struct clk_init_data)
2052                {
2053                        .name = "gcc_ufs_tx_cfg_clk",
2054                        .parent_names = (const char *[]) {
2055                                "ufs_axi_clk_src",
2056                        },
2057                        .num_parents = 1,
2058                        .flags = CLK_SET_RATE_PARENT,
2059                        .ops = &clk_branch2_ops,
2060                },
2061        },
2062};
2063
2064static struct clk_branch gcc_usb30_master_clk = {
2065        .halt_reg = 0x03c8,
2066        .clkr = {
2067                .enable_reg = 0x03c8,
2068                .enable_mask = BIT(0),
2069                .hw.init = &(struct clk_init_data)
2070                {
2071                        .name = "gcc_usb30_master_clk",
2072                        .parent_names = (const char *[]) {
2073                                "usb30_master_clk_src",
2074                        },
2075                        .num_parents = 1,
2076                        .flags = CLK_SET_RATE_PARENT,
2077                        .ops = &clk_branch2_ops,
2078                },
2079        },
2080};
2081
2082static struct clk_branch gcc_usb30_mock_utmi_clk = {
2083        .halt_reg = 0x03d0,
2084        .clkr = {
2085                .enable_reg = 0x03d0,
2086                .enable_mask = BIT(0),
2087                .hw.init = &(struct clk_init_data)
2088                {
2089                        .name = "gcc_usb30_mock_utmi_clk",
2090                        .parent_names = (const char *[]) {
2091                                "usb30_mock_utmi_clk_src",
2092                        },
2093                        .num_parents = 1,
2094                        .flags = CLK_SET_RATE_PARENT,
2095                        .ops = &clk_branch2_ops,
2096                },
2097        },
2098};
2099
2100static struct clk_branch gcc_usb3_phy_aux_clk = {
2101        .halt_reg = 0x1408,
2102        .clkr = {
2103                .enable_reg = 0x1408,
2104                .enable_mask = BIT(0),
2105                .hw.init = &(struct clk_init_data)
2106                {
2107                        .name = "gcc_usb3_phy_aux_clk",
2108                        .parent_names = (const char *[]) {
2109                                "usb3_phy_aux_clk_src",
2110                        },
2111                        .num_parents = 1,
2112                        .flags = CLK_SET_RATE_PARENT,
2113                        .ops = &clk_branch2_ops,
2114                },
2115        },
2116};
2117
2118static struct clk_branch gcc_usb_hs_system_clk = {
2119        .halt_reg = 0x0484,
2120        .clkr = {
2121                .enable_reg = 0x0484,
2122                .enable_mask = BIT(0),
2123                .hw.init = &(struct clk_init_data)
2124                {
2125                        .name = "gcc_usb_hs_system_clk",
2126                        .parent_names = (const char *[]) {
2127                                "usb_hs_system_clk_src",
2128                        },
2129                        .num_parents = 1,
2130                        .flags = CLK_SET_RATE_PARENT,
2131                        .ops = &clk_branch2_ops,
2132                },
2133        },
2134};
2135
2136static struct clk_regmap *gcc_msm8994_clocks[] = {
2137        [GPLL0_EARLY] = &gpll0_early.clkr,
2138        [GPLL0] = &gpll0.clkr,
2139        [GPLL4_EARLY] = &gpll4_early.clkr,
2140        [GPLL4] = &gpll4.clkr,
2141        [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2142        [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2143        [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2144        [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2145        [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2146        [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2147        [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2148        [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2149        [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2150        [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2151        [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2152        [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2153        [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2154        [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2155        [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2156        [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2157        [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2158        [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2159        [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2160        [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2161        [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2162        [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2163        [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2164        [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2165        [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2166        [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2167        [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2168        [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2169        [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2170        [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2171        [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2172        [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2173        [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2174        [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2175        [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2176        [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2177        [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2178        [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2179        [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2180        [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2181        [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2182        [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2183        [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2184        [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2185        [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2186        [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2187        [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2188        [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2189        [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2190        [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2191        [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2192        [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2193        [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2194        [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2195        [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2196        [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2197        [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2198        [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2199        [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2200        [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2201        [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2202        [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2203        [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2204        [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2205        [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2206        [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2207        [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2208        [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2209        [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2210        [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2211        [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2212        [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2213        [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2214        [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2215        [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2216        [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2217        [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2218        [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2219        [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2220        [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2221        [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2222        [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2223        [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2224        [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2225        [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2226        [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2227        [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2228        [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2229        [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2230        [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2231        [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2232        [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2233        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2234        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2235        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2236        [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2237        [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2238        [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2239        [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2240        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2241        [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2242        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2243        [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2244        [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2245        [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2246        [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2247        [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2248        [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2249        [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2250        [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2251        [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2252        [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2253        [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2254        [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2255        [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2256};
2257
2258static const struct regmap_config gcc_msm8994_regmap_config = {
2259        .reg_bits       = 32,
2260        .reg_stride     = 4,
2261        .val_bits       = 32,
2262        .max_register   = 0x2000,
2263        .fast_io        = true,
2264};
2265
2266static const struct qcom_cc_desc gcc_msm8994_desc = {
2267        .config = &gcc_msm8994_regmap_config,
2268        .clks = gcc_msm8994_clocks,
2269        .num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2270};
2271
2272static const struct of_device_id gcc_msm8994_match_table[] = {
2273        { .compatible = "qcom,gcc-msm8994" },
2274        {}
2275};
2276MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2277
2278static int gcc_msm8994_probe(struct platform_device *pdev)
2279{
2280        struct device *dev = &pdev->dev;
2281        struct clk *clk;
2282
2283        clk = devm_clk_register(dev, &xo.hw);
2284        if (IS_ERR(clk))
2285                return PTR_ERR(clk);
2286
2287        return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2288}
2289
2290static struct platform_driver gcc_msm8994_driver = {
2291        .probe          = gcc_msm8994_probe,
2292        .driver         = {
2293                .name   = "gcc-msm8994",
2294                .of_match_table = gcc_msm8994_match_table,
2295        },
2296};
2297
2298static int __init gcc_msm8994_init(void)
2299{
2300        return platform_driver_register(&gcc_msm8994_driver);
2301}
2302core_initcall(gcc_msm8994_init);
2303
2304static void __exit gcc_msm8994_exit(void)
2305{
2306        platform_driver_unregister(&gcc_msm8994_driver);
2307}
2308module_exit(gcc_msm8994_exit);
2309
2310MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2311MODULE_LICENSE("GPL v2");
2312MODULE_ALIAS("platform:gcc-msm8994");
2313