Linux Audio

Check our new training course

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