File Index
Files and directories
Sign in
FILE

mmcc-apq8084.c

File preview with syntax highlighting.

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