Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/clk-provider.h>
   7#include <linux/module.h>
   8#include <linux/platform_device.h>
   9#include <linux/regmap.h>
  10
  11#include <dt-bindings/clock/qcom,camcc-sdm845.h>
  12
  13#include "common.h"
  14#include "clk-alpha-pll.h"
  15#include "clk-branch.h"
  16#include "clk-rcg.h"
  17#include "clk-regmap.h"
  18#include "gdsc.h"
  19
  20enum {
  21	P_BI_TCXO,
  22	P_CAM_CC_PLL0_OUT_EVEN,
  23	P_CAM_CC_PLL1_OUT_EVEN,
  24	P_CAM_CC_PLL2_OUT_EVEN,
  25	P_CAM_CC_PLL3_OUT_EVEN,
  26};
  27
  28static struct clk_alpha_pll cam_cc_pll0 = {
  29	.offset = 0x0,
  30	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  31	.clkr = {
  32		.hw.init = &(struct clk_init_data){
  33			.name = "cam_cc_pll0",
  34			.parent_data = &(const struct clk_parent_data){
  35				.fw_name = "bi_tcxo", .name = "bi_tcxo",
  36			},
  37			.num_parents = 1,
  38			.ops = &clk_alpha_pll_fabia_ops,
  39		},
  40	},
  41};
  42
  43static const struct clk_div_table post_div_table_fabia_even[] = {
  44	{ 0x0, 1 },
  45	{ 0x1, 2 },
  46	{ }
  47};
  48
  49static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
  50	.offset = 0x0,
  51	.post_div_shift = 8,
  52	.post_div_table = post_div_table_fabia_even,
  53	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  54	.width = 4,
  55	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  56	.clkr.hw.init = &(struct clk_init_data){
  57		.name = "cam_cc_pll0_out_even",
  58		.parent_hws = (const struct clk_hw*[]){
  59			&cam_cc_pll0.clkr.hw,
  60		},
  61		.num_parents = 1,
  62		.ops = &clk_alpha_pll_postdiv_fabia_ops,
  63	},
  64};
  65
  66static struct clk_alpha_pll cam_cc_pll1 = {
  67	.offset = 0x1000,
  68	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  69	.clkr = {
  70		.hw.init = &(struct clk_init_data){
  71			.name = "cam_cc_pll1",
  72			.parent_data = &(const struct clk_parent_data){
  73				.fw_name = "bi_tcxo", .name = "bi_tcxo",
  74			},
  75			.num_parents = 1,
  76			.ops = &clk_alpha_pll_fabia_ops,
  77		},
  78	},
  79};
  80
  81static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
  82	.offset = 0x1000,
  83	.post_div_shift = 8,
  84	.post_div_table = post_div_table_fabia_even,
  85	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  86	.width = 4,
  87	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  88	.clkr.hw.init = &(struct clk_init_data){
  89		.name = "cam_cc_pll1_out_even",
  90		.parent_hws = (const struct clk_hw*[]){
  91			&cam_cc_pll1.clkr.hw,
  92		},
  93		.num_parents = 1,
  94		.ops = &clk_alpha_pll_postdiv_fabia_ops,
  95	},
  96};
  97
  98static struct clk_alpha_pll cam_cc_pll2 = {
  99	.offset = 0x2000,
 100	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 101	.clkr = {
 102		.hw.init = &(struct clk_init_data){
 103			.name = "cam_cc_pll2",
 104			.parent_data = &(const struct clk_parent_data){
 105				.fw_name = "bi_tcxo", .name = "bi_tcxo",
 106			},
 107			.num_parents = 1,
 108			.ops = &clk_alpha_pll_fabia_ops,
 109		},
 110	},
 111};
 112
 113static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
 114	.offset = 0x2000,
 115	.post_div_shift = 8,
 116	.post_div_table = post_div_table_fabia_even,
 117	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
 118	.width = 4,
 119	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 120	.clkr.hw.init = &(struct clk_init_data){
 121		.name = "cam_cc_pll2_out_even",
 122		.parent_hws = (const struct clk_hw*[]){
 123			&cam_cc_pll2.clkr.hw,
 124		},
 125		.num_parents = 1,
 126		.ops = &clk_alpha_pll_postdiv_fabia_ops,
 127	},
 128};
 129
 130static struct clk_alpha_pll cam_cc_pll3 = {
 131	.offset = 0x3000,
 132	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 133	.clkr = {
 134		.hw.init = &(struct clk_init_data){
 135			.name = "cam_cc_pll3",
 136			.parent_data = &(const struct clk_parent_data){
 137				.fw_name = "bi_tcxo", .name = "bi_tcxo",
 138			},
 139			.num_parents = 1,
 140			.ops = &clk_alpha_pll_fabia_ops,
 141		},
 142	},
 143};
 144
 145static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
 146	.offset = 0x3000,
 147	.post_div_shift = 8,
 148	.post_div_table = post_div_table_fabia_even,
 149	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
 150	.width = 4,
 151	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 152	.clkr.hw.init = &(struct clk_init_data){
 153		.name = "cam_cc_pll3_out_even",
 154		.parent_hws = (const struct clk_hw*[]){
 155			&cam_cc_pll3.clkr.hw,
 156		},
 157		.num_parents = 1,
 158		.ops = &clk_alpha_pll_postdiv_fabia_ops,
 159	},
 160};
 161
 162static const struct parent_map cam_cc_parent_map_0[] = {
 163	{ P_BI_TCXO, 0 },
 164	{ P_CAM_CC_PLL2_OUT_EVEN, 1 },
 165	{ P_CAM_CC_PLL1_OUT_EVEN, 2 },
 166	{ P_CAM_CC_PLL3_OUT_EVEN, 5 },
 167	{ P_CAM_CC_PLL0_OUT_EVEN, 6 },
 168};
 169
 170static const struct clk_parent_data cam_cc_parent_data_0[] = {
 171	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 172	{ .hw = &cam_cc_pll2_out_even.clkr.hw },
 173	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
 174	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
 175	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
 176};
 177
 178static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
 179	F(19200000, P_BI_TCXO, 1, 0, 0),
 180	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 181	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
 182	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
 183	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
 184	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 185	{ }
 186};
 187
 188/*
 189 * As per HW design, some of the CAMCC RCGs needs to
 190 * move to XO clock during their clock disable so using
 191 * clk_rcg2_shared_ops for such RCGs. This is required
 192 * to power down the camera memories gracefully.
 193 * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
 194 * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
 195 * table and requires reconfiguration of the PLL frequency.
 196 */
 197static struct clk_rcg2 cam_cc_bps_clk_src = {
 198	.cmd_rcgr = 0x600c,
 199	.mnd_width = 0,
 200	.hid_width = 5,
 201	.parent_map = cam_cc_parent_map_0,
 202	.freq_tbl = ftbl_cam_cc_bps_clk_src,
 203	.clkr.hw.init = &(struct clk_init_data){
 204		.name = "cam_cc_bps_clk_src",
 205		.parent_data = cam_cc_parent_data_0,
 206		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 207		.flags = CLK_SET_RATE_PARENT,
 208		.ops = &clk_rcg2_shared_ops,
 209	},
 210};
 211
 212static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
 213	F(19200000, P_BI_TCXO, 1, 0, 0),
 214	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
 215	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
 216	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 217	{ }
 218};
 219
 220static struct clk_rcg2 cam_cc_cci_clk_src = {
 221	.cmd_rcgr = 0xb0d8,
 222	.mnd_width = 8,
 223	.hid_width = 5,
 224	.parent_map = cam_cc_parent_map_0,
 225	.freq_tbl = ftbl_cam_cc_cci_clk_src,
 226	.clkr.hw.init = &(struct clk_init_data){
 227		.name = "cam_cc_cci_clk_src",
 228		.parent_data = cam_cc_parent_data_0,
 229		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 230		.ops = &clk_rcg2_ops,
 231	},
 232};
 233
 234static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
 235	F(19200000, P_BI_TCXO, 1, 0, 0),
 236	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
 237	{ }
 238};
 239
 240static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
 241	.cmd_rcgr = 0x9060,
 242	.mnd_width = 0,
 243	.hid_width = 5,
 244	.parent_map = cam_cc_parent_map_0,
 245	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
 246	.clkr.hw.init = &(struct clk_init_data){
 247		.name = "cam_cc_cphy_rx_clk_src",
 248		.parent_data = cam_cc_parent_data_0,
 249		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 250		.ops = &clk_rcg2_ops,
 251	},
 252};
 253
 254static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
 255	F(19200000, P_BI_TCXO, 1, 0, 0),
 256	F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
 257	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
 258	{ }
 259};
 260
 261static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
 262	.cmd_rcgr = 0x5004,
 263	.mnd_width = 0,
 264	.hid_width = 5,
 265	.parent_map = cam_cc_parent_map_0,
 266	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 267	.clkr.hw.init = &(struct clk_init_data){
 268		.name = "cam_cc_csi0phytimer_clk_src",
 269		.parent_data = cam_cc_parent_data_0,
 270		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 271		.flags = CLK_SET_RATE_PARENT,
 272		.ops = &clk_rcg2_ops,
 273	},
 274};
 275
 276static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
 277	.cmd_rcgr = 0x5028,
 278	.mnd_width = 0,
 279	.hid_width = 5,
 280	.parent_map = cam_cc_parent_map_0,
 281	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 282	.clkr.hw.init = &(struct clk_init_data){
 283		.name = "cam_cc_csi1phytimer_clk_src",
 284		.parent_data = cam_cc_parent_data_0,
 285		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 286		.flags = CLK_SET_RATE_PARENT,
 287		.ops = &clk_rcg2_ops,
 288	},
 289};
 290
 291static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
 292	.cmd_rcgr = 0x504c,
 293	.mnd_width = 0,
 294	.hid_width = 5,
 295	.parent_map = cam_cc_parent_map_0,
 296	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 297	.clkr.hw.init = &(struct clk_init_data){
 298		.name = "cam_cc_csi2phytimer_clk_src",
 299		.parent_data = cam_cc_parent_data_0,
 300		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 301		.flags = CLK_SET_RATE_PARENT,
 302		.ops = &clk_rcg2_ops,
 303	},
 304};
 305
 306static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
 307	.cmd_rcgr = 0x5070,
 308	.mnd_width = 0,
 309	.hid_width = 5,
 310	.parent_map = cam_cc_parent_map_0,
 311	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 312	.clkr.hw.init = &(struct clk_init_data){
 313		.name = "cam_cc_csi3phytimer_clk_src",
 314		.parent_data = cam_cc_parent_data_0,
 315		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 316		.flags = CLK_SET_RATE_PARENT,
 317		.ops = &clk_rcg2_ops,
 318	},
 319};
 320
 321static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
 322	F(19200000, P_BI_TCXO, 1, 0, 0),
 323	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
 324	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 325	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
 326	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
 327	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
 328	{ }
 329};
 330
 331static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
 332	.cmd_rcgr = 0x6038,
 333	.mnd_width = 0,
 334	.hid_width = 5,
 335	.parent_map = cam_cc_parent_map_0,
 336	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
 337	.clkr.hw.init = &(struct clk_init_data){
 338		.name = "cam_cc_fast_ahb_clk_src",
 339		.parent_data = cam_cc_parent_data_0,
 340		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 341		.ops = &clk_rcg2_ops,
 342	},
 343};
 344
 345static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
 346	F(19200000, P_BI_TCXO, 1, 0, 0),
 347	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
 348	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
 349	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
 350	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 351	{ }
 352};
 353
 354static struct clk_rcg2 cam_cc_fd_core_clk_src = {
 355	.cmd_rcgr = 0xb0b0,
 356	.mnd_width = 0,
 357	.hid_width = 5,
 358	.parent_map = cam_cc_parent_map_0,
 359	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
 360	.clkr.hw.init = &(struct clk_init_data){
 361		.name = "cam_cc_fd_core_clk_src",
 362		.parent_data = cam_cc_parent_data_0,
 363		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 364		.ops = &clk_rcg2_shared_ops,
 365	},
 366};
 367
 368static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
 369	F(19200000, P_BI_TCXO, 1, 0, 0),
 370	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
 371	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
 372	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
 373	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 374	{ }
 375};
 376
 377static struct clk_rcg2 cam_cc_icp_clk_src = {
 378	.cmd_rcgr = 0xb088,
 379	.mnd_width = 0,
 380	.hid_width = 5,
 381	.parent_map = cam_cc_parent_map_0,
 382	.freq_tbl = ftbl_cam_cc_icp_clk_src,
 383	.clkr.hw.init = &(struct clk_init_data){
 384		.name = "cam_cc_icp_clk_src",
 385		.parent_data = cam_cc_parent_data_0,
 386		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 387		.ops = &clk_rcg2_shared_ops,
 388	},
 389};
 390
 391static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
 392	F(19200000, P_BI_TCXO, 1, 0, 0),
 393	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 394	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
 395	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
 396	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
 397	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 398	{ }
 399};
 400
 401static struct clk_rcg2 cam_cc_ife_0_clk_src = {
 402	.cmd_rcgr = 0x900c,
 403	.mnd_width = 0,
 404	.hid_width = 5,
 405	.parent_map = cam_cc_parent_map_0,
 406	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
 407	.clkr.hw.init = &(struct clk_init_data){
 408		.name = "cam_cc_ife_0_clk_src",
 409		.parent_data = cam_cc_parent_data_0,
 410		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 411		.flags = CLK_SET_RATE_PARENT,
 412		.ops = &clk_rcg2_shared_ops,
 413	},
 414};
 415
 416static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
 417	F(19200000, P_BI_TCXO, 1, 0, 0),
 418	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
 419	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
 420	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
 421	{ }
 422};
 423
 424static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
 425	.cmd_rcgr = 0x9038,
 426	.mnd_width = 0,
 427	.hid_width = 5,
 428	.parent_map = cam_cc_parent_map_0,
 429	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
 430	.clkr.hw.init = &(struct clk_init_data){
 431		.name = "cam_cc_ife_0_csid_clk_src",
 432		.parent_data = cam_cc_parent_data_0,
 433		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 434		.ops = &clk_rcg2_shared_ops,
 435	},
 436};
 437
 438static struct clk_rcg2 cam_cc_ife_1_clk_src = {
 439	.cmd_rcgr = 0xa00c,
 440	.mnd_width = 0,
 441	.hid_width = 5,
 442	.parent_map = cam_cc_parent_map_0,
 443	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
 444	.clkr.hw.init = &(struct clk_init_data){
 445		.name = "cam_cc_ife_1_clk_src",
 446		.parent_data = cam_cc_parent_data_0,
 447		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 448		.flags = CLK_SET_RATE_PARENT,
 449		.ops = &clk_rcg2_shared_ops,
 450	},
 451};
 452
 453static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
 454	.cmd_rcgr = 0xa030,
 455	.mnd_width = 0,
 456	.hid_width = 5,
 457	.parent_map = cam_cc_parent_map_0,
 458	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
 459	.clkr.hw.init = &(struct clk_init_data){
 460		.name = "cam_cc_ife_1_csid_clk_src",
 461		.parent_data = cam_cc_parent_data_0,
 462		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 463		.ops = &clk_rcg2_shared_ops,
 464	},
 465};
 466
 467static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
 468	.cmd_rcgr = 0xb004,
 469	.mnd_width = 0,
 470	.hid_width = 5,
 471	.parent_map = cam_cc_parent_map_0,
 472	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
 473	.clkr.hw.init = &(struct clk_init_data){
 474		.name = "cam_cc_ife_lite_clk_src",
 475		.parent_data = cam_cc_parent_data_0,
 476		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 477		.flags = CLK_SET_RATE_PARENT,
 478		.ops = &clk_rcg2_shared_ops,
 479	},
 480};
 481
 482static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
 483	.cmd_rcgr = 0xb024,
 484	.mnd_width = 0,
 485	.hid_width = 5,
 486	.parent_map = cam_cc_parent_map_0,
 487	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
 488	.clkr.hw.init = &(struct clk_init_data){
 489		.name = "cam_cc_ife_lite_csid_clk_src",
 490		.parent_data = cam_cc_parent_data_0,
 491		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 492		.ops = &clk_rcg2_shared_ops,
 493	},
 494};
 495
 496static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
 497	F(19200000, P_BI_TCXO, 1, 0, 0),
 498	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 499	F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
 500	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
 501	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
 502	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
 503	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 504	{ }
 505};
 506
 507static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
 508	.cmd_rcgr = 0x700c,
 509	.mnd_width = 0,
 510	.hid_width = 5,
 511	.parent_map = cam_cc_parent_map_0,
 512	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
 513	.clkr.hw.init = &(struct clk_init_data){
 514		.name = "cam_cc_ipe_0_clk_src",
 515		.parent_data = cam_cc_parent_data_0,
 516		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 517		.flags = CLK_SET_RATE_PARENT,
 518		.ops = &clk_rcg2_shared_ops,
 519	},
 520};
 521
 522static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
 523	.cmd_rcgr = 0x800c,
 524	.mnd_width = 0,
 525	.hid_width = 5,
 526	.parent_map = cam_cc_parent_map_0,
 527	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
 528	.clkr.hw.init = &(struct clk_init_data){
 529		.name = "cam_cc_ipe_1_clk_src",
 530		.parent_data = cam_cc_parent_data_0,
 531		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 532		.flags = CLK_SET_RATE_PARENT,
 533		.ops = &clk_rcg2_shared_ops,
 534	},
 535};
 536
 537static struct clk_rcg2 cam_cc_jpeg_clk_src = {
 538	.cmd_rcgr = 0xb04c,
 539	.mnd_width = 0,
 540	.hid_width = 5,
 541	.parent_map = cam_cc_parent_map_0,
 542	.freq_tbl = ftbl_cam_cc_bps_clk_src,
 543	.clkr.hw.init = &(struct clk_init_data){
 544		.name = "cam_cc_jpeg_clk_src",
 545		.parent_data = cam_cc_parent_data_0,
 546		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 547		.flags = CLK_SET_RATE_PARENT,
 548		.ops = &clk_rcg2_shared_ops,
 549	},
 550};
 551
 552static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
 553	F(19200000, P_BI_TCXO, 1, 0, 0),
 554	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
 555	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
 556	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
 557	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
 558	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
 559	{ }
 560};
 561
 562static struct clk_rcg2 cam_cc_lrme_clk_src = {
 563	.cmd_rcgr = 0xb0f8,
 564	.mnd_width = 0,
 565	.hid_width = 5,
 566	.parent_map = cam_cc_parent_map_0,
 567	.freq_tbl = ftbl_cam_cc_lrme_clk_src,
 568	.clkr.hw.init = &(struct clk_init_data){
 569		.name = "cam_cc_lrme_clk_src",
 570		.parent_data = cam_cc_parent_data_0,
 571		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 572		.flags = CLK_SET_RATE_PARENT,
 573		.ops = &clk_rcg2_shared_ops,
 574	},
 575};
 576
 577static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
 578	F(19200000, P_BI_TCXO, 1, 0, 0),
 579	F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
 580	F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
 581	F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
 582	{ }
 583};
 584
 585static struct clk_rcg2 cam_cc_mclk0_clk_src = {
 586	.cmd_rcgr = 0x4004,
 587	.mnd_width = 8,
 588	.hid_width = 5,
 589	.parent_map = cam_cc_parent_map_0,
 590	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
 591	.clkr.hw.init = &(struct clk_init_data){
 592		.name = "cam_cc_mclk0_clk_src",
 593		.parent_data = cam_cc_parent_data_0,
 594		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 595		.flags = CLK_SET_RATE_PARENT,
 596		.ops = &clk_rcg2_ops,
 597	},
 598};
 599
 600static struct clk_rcg2 cam_cc_mclk1_clk_src = {
 601	.cmd_rcgr = 0x4024,
 602	.mnd_width = 8,
 603	.hid_width = 5,
 604	.parent_map = cam_cc_parent_map_0,
 605	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
 606	.clkr.hw.init = &(struct clk_init_data){
 607		.name = "cam_cc_mclk1_clk_src",
 608		.parent_data = cam_cc_parent_data_0,
 609		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 610		.flags = CLK_SET_RATE_PARENT,
 611		.ops = &clk_rcg2_ops,
 612	},
 613};
 614
 615static struct clk_rcg2 cam_cc_mclk2_clk_src = {
 616	.cmd_rcgr = 0x4044,
 617	.mnd_width = 8,
 618	.hid_width = 5,
 619	.parent_map = cam_cc_parent_map_0,
 620	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
 621	.clkr.hw.init = &(struct clk_init_data){
 622		.name = "cam_cc_mclk2_clk_src",
 623		.parent_data = cam_cc_parent_data_0,
 624		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 625		.flags = CLK_SET_RATE_PARENT,
 626		.ops = &clk_rcg2_ops,
 627	},
 628};
 629
 630static struct clk_rcg2 cam_cc_mclk3_clk_src = {
 631	.cmd_rcgr = 0x4064,
 632	.mnd_width = 8,
 633	.hid_width = 5,
 634	.parent_map = cam_cc_parent_map_0,
 635	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
 636	.clkr.hw.init = &(struct clk_init_data){
 637		.name = "cam_cc_mclk3_clk_src",
 638		.parent_data = cam_cc_parent_data_0,
 639		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 640		.flags = CLK_SET_RATE_PARENT,
 641		.ops = &clk_rcg2_ops,
 642	},
 643};
 644
 645static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
 646	F(19200000, P_BI_TCXO, 1, 0, 0),
 647	F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
 648	F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
 649	F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
 650	F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
 651	{ }
 652};
 653
 654static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
 655	.cmd_rcgr = 0x6054,
 656	.mnd_width = 0,
 657	.hid_width = 5,
 658	.parent_map = cam_cc_parent_map_0,
 659	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
 660	.clkr.hw.init = &(struct clk_init_data){
 661		.name = "cam_cc_slow_ahb_clk_src",
 662		.parent_data = cam_cc_parent_data_0,
 663		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 664		.flags = CLK_SET_RATE_PARENT,
 665		.ops = &clk_rcg2_ops,
 666	},
 667};
 668
 669static struct clk_branch cam_cc_bps_ahb_clk = {
 670	.halt_reg = 0x606c,
 671	.halt_check = BRANCH_HALT,
 672	.clkr = {
 673		.enable_reg = 0x606c,
 674		.enable_mask = BIT(0),
 675		.hw.init = &(struct clk_init_data){
 676			.name = "cam_cc_bps_ahb_clk",
 677			.parent_hws = (const struct clk_hw*[]){
 678				&cam_cc_slow_ahb_clk_src.clkr.hw,
 679			},
 680			.num_parents = 1,
 681			.flags = CLK_SET_RATE_PARENT,
 682			.ops = &clk_branch2_ops,
 683		},
 684	},
 685};
 686
 687static struct clk_branch cam_cc_bps_areg_clk = {
 688	.halt_reg = 0x6050,
 689	.halt_check = BRANCH_HALT,
 690	.clkr = {
 691		.enable_reg = 0x6050,
 692		.enable_mask = BIT(0),
 693		.hw.init = &(struct clk_init_data){
 694			.name = "cam_cc_bps_areg_clk",
 695			.parent_hws = (const struct clk_hw*[]){
 696				&cam_cc_fast_ahb_clk_src.clkr.hw,
 697			},
 698			.num_parents = 1,
 699			.flags = CLK_SET_RATE_PARENT,
 700			.ops = &clk_branch2_ops,
 701		},
 702	},
 703};
 704
 705static struct clk_branch cam_cc_bps_axi_clk = {
 706	.halt_reg = 0x6034,
 707	.halt_check = BRANCH_HALT,
 708	.clkr = {
 709		.enable_reg = 0x6034,
 710		.enable_mask = BIT(0),
 711		.hw.init = &(struct clk_init_data){
 712			.name = "cam_cc_bps_axi_clk",
 713			.ops = &clk_branch2_ops,
 714		},
 715	},
 716};
 717
 718static struct clk_branch cam_cc_bps_clk = {
 719	.halt_reg = 0x6024,
 720	.halt_check = BRANCH_HALT,
 721	.clkr = {
 722		.enable_reg = 0x6024,
 723		.enable_mask = BIT(0),
 724		.hw.init = &(struct clk_init_data){
 725			.name = "cam_cc_bps_clk",
 726			.parent_hws = (const struct clk_hw*[]){
 727				&cam_cc_bps_clk_src.clkr.hw,
 728			},
 729			.num_parents = 1,
 730			.flags = CLK_SET_RATE_PARENT,
 731			.ops = &clk_branch2_ops,
 732		},
 733	},
 734};
 735
 736static struct clk_branch cam_cc_camnoc_atb_clk = {
 737	.halt_reg = 0xb12c,
 738	.halt_check = BRANCH_HALT,
 739	.clkr = {
 740		.enable_reg = 0xb12c,
 741		.enable_mask = BIT(0),
 742		.hw.init = &(struct clk_init_data){
 743			.name = "cam_cc_camnoc_atb_clk",
 744			.ops = &clk_branch2_ops,
 745		},
 746	},
 747};
 748
 749static struct clk_branch cam_cc_camnoc_axi_clk = {
 750	.halt_reg = 0xb124,
 751	.halt_check = BRANCH_HALT,
 752	.clkr = {
 753		.enable_reg = 0xb124,
 754		.enable_mask = BIT(0),
 755		.hw.init = &(struct clk_init_data){
 756			.name = "cam_cc_camnoc_axi_clk",
 757			.ops = &clk_branch2_ops,
 758		},
 759	},
 760};
 761
 762static struct clk_branch cam_cc_cci_clk = {
 763	.halt_reg = 0xb0f0,
 764	.halt_check = BRANCH_HALT,
 765	.clkr = {
 766		.enable_reg = 0xb0f0,
 767		.enable_mask = BIT(0),
 768		.hw.init = &(struct clk_init_data){
 769			.name = "cam_cc_cci_clk",
 770			.parent_hws = (const struct clk_hw*[]){
 771				&cam_cc_cci_clk_src.clkr.hw,
 772			},
 773			.num_parents = 1,
 774			.flags = CLK_SET_RATE_PARENT,
 775			.ops = &clk_branch2_ops,
 776		},
 777	},
 778};
 779
 780static struct clk_branch cam_cc_cpas_ahb_clk = {
 781	.halt_reg = 0xb11c,
 782	.halt_check = BRANCH_HALT,
 783	.clkr = {
 784		.enable_reg = 0xb11c,
 785		.enable_mask = BIT(0),
 786		.hw.init = &(struct clk_init_data){
 787			.name = "cam_cc_cpas_ahb_clk",
 788			.parent_hws = (const struct clk_hw*[]){
 789				&cam_cc_slow_ahb_clk_src.clkr.hw,
 790			},
 791			.num_parents = 1,
 792			.flags = CLK_SET_RATE_PARENT,
 793			.ops = &clk_branch2_ops,
 794		},
 795	},
 796};
 797
 798static struct clk_branch cam_cc_csi0phytimer_clk = {
 799	.halt_reg = 0x501c,
 800	.halt_check = BRANCH_HALT,
 801	.clkr = {
 802		.enable_reg = 0x501c,
 803		.enable_mask = BIT(0),
 804		.hw.init = &(struct clk_init_data){
 805			.name = "cam_cc_csi0phytimer_clk",
 806			.parent_hws = (const struct clk_hw*[]){
 807				&cam_cc_csi0phytimer_clk_src.clkr.hw,
 808			},
 809			.num_parents = 1,
 810			.flags = CLK_SET_RATE_PARENT,
 811			.ops = &clk_branch2_ops,
 812		},
 813	},
 814};
 815
 816static struct clk_branch cam_cc_csi1phytimer_clk = {
 817	.halt_reg = 0x5040,
 818	.halt_check = BRANCH_HALT,
 819	.clkr = {
 820		.enable_reg = 0x5040,
 821		.enable_mask = BIT(0),
 822		.hw.init = &(struct clk_init_data){
 823			.name = "cam_cc_csi1phytimer_clk",
 824			.parent_hws = (const struct clk_hw*[]){
 825				&cam_cc_csi1phytimer_clk_src.clkr.hw,
 826			},
 827			.num_parents = 1,
 828			.flags = CLK_SET_RATE_PARENT,
 829			.ops = &clk_branch2_ops,
 830		},
 831	},
 832};
 833
 834static struct clk_branch cam_cc_csi2phytimer_clk = {
 835	.halt_reg = 0x5064,
 836	.halt_check = BRANCH_HALT,
 837	.clkr = {
 838		.enable_reg = 0x5064,
 839		.enable_mask = BIT(0),
 840		.hw.init = &(struct clk_init_data){
 841			.name = "cam_cc_csi2phytimer_clk",
 842			.parent_hws = (const struct clk_hw*[]){
 843				&cam_cc_csi2phytimer_clk_src.clkr.hw,
 844			},
 845			.num_parents = 1,
 846			.flags = CLK_SET_RATE_PARENT,
 847			.ops = &clk_branch2_ops,
 848		},
 849	},
 850};
 851
 852static struct clk_branch cam_cc_csi3phytimer_clk = {
 853	.halt_reg = 0x5088,
 854	.halt_check = BRANCH_HALT,
 855	.clkr = {
 856		.enable_reg = 0x5088,
 857		.enable_mask = BIT(0),
 858		.hw.init = &(struct clk_init_data){
 859			.name = "cam_cc_csi3phytimer_clk",
 860			.parent_hws = (const struct clk_hw*[]){
 861				&cam_cc_csi3phytimer_clk_src.clkr.hw,
 862			},
 863			.num_parents = 1,
 864			.flags = CLK_SET_RATE_PARENT,
 865			.ops = &clk_branch2_ops,
 866		},
 867	},
 868};
 869
 870static struct clk_branch cam_cc_csiphy0_clk = {
 871	.halt_reg = 0x5020,
 872	.halt_check = BRANCH_HALT,
 873	.clkr = {
 874		.enable_reg = 0x5020,
 875		.enable_mask = BIT(0),
 876		.hw.init = &(struct clk_init_data){
 877			.name = "cam_cc_csiphy0_clk",
 878			.parent_hws = (const struct clk_hw*[]){
 879				&cam_cc_cphy_rx_clk_src.clkr.hw,
 880			},
 881			.num_parents = 1,
 882			.flags = CLK_SET_RATE_PARENT,
 883			.ops = &clk_branch2_ops,
 884		},
 885	},
 886};
 887
 888static struct clk_branch cam_cc_csiphy1_clk = {
 889	.halt_reg = 0x5044,
 890	.halt_check = BRANCH_HALT,
 891	.clkr = {
 892		.enable_reg = 0x5044,
 893		.enable_mask = BIT(0),
 894		.hw.init = &(struct clk_init_data){
 895			.name = "cam_cc_csiphy1_clk",
 896			.parent_hws = (const struct clk_hw*[]){
 897				&cam_cc_cphy_rx_clk_src.clkr.hw,
 898			},
 899			.num_parents = 1,
 900			.flags = CLK_SET_RATE_PARENT,
 901			.ops = &clk_branch2_ops,
 902		},
 903	},
 904};
 905
 906static struct clk_branch cam_cc_csiphy2_clk = {
 907	.halt_reg = 0x5068,
 908	.halt_check = BRANCH_HALT,
 909	.clkr = {
 910		.enable_reg = 0x5068,
 911		.enable_mask = BIT(0),
 912		.hw.init = &(struct clk_init_data){
 913			.name = "cam_cc_csiphy2_clk",
 914			.parent_hws = (const struct clk_hw*[]){
 915				&cam_cc_cphy_rx_clk_src.clkr.hw,
 916			},
 917			.num_parents = 1,
 918			.flags = CLK_SET_RATE_PARENT,
 919			.ops = &clk_branch2_ops,
 920		},
 921	},
 922};
 923
 924static struct clk_branch cam_cc_csiphy3_clk = {
 925	.halt_reg = 0x508c,
 926	.halt_check = BRANCH_HALT,
 927	.clkr = {
 928		.enable_reg = 0x508c,
 929		.enable_mask = BIT(0),
 930		.hw.init = &(struct clk_init_data){
 931			.name = "cam_cc_csiphy3_clk",
 932			.parent_hws = (const struct clk_hw*[]){
 933				&cam_cc_cphy_rx_clk_src.clkr.hw,
 934			},
 935			.num_parents = 1,
 936			.flags = CLK_SET_RATE_PARENT,
 937			.ops = &clk_branch2_ops,
 938		},
 939	},
 940};
 941
 942static struct clk_branch cam_cc_fd_core_clk = {
 943	.halt_reg = 0xb0c8,
 944	.halt_check = BRANCH_HALT,
 945	.clkr = {
 946		.enable_reg = 0xb0c8,
 947		.enable_mask = BIT(0),
 948		.hw.init = &(struct clk_init_data){
 949			.name = "cam_cc_fd_core_clk",
 950			.parent_hws = (const struct clk_hw*[]){
 951				&cam_cc_fd_core_clk_src.clkr.hw,
 952			},
 953			.num_parents = 1,
 954			.flags = CLK_SET_RATE_PARENT,
 955			.ops = &clk_branch2_ops,
 956		},
 957	},
 958};
 959
 960static struct clk_branch cam_cc_fd_core_uar_clk = {
 961	.halt_reg = 0xb0d0,
 962	.halt_check = BRANCH_HALT,
 963	.clkr = {
 964		.enable_reg = 0xb0d0,
 965		.enable_mask = BIT(0),
 966		.hw.init = &(struct clk_init_data){
 967			.name = "cam_cc_fd_core_uar_clk",
 968			.parent_hws = (const struct clk_hw*[]){
 969				&cam_cc_fd_core_clk_src.clkr.hw,
 970			},
 971			.num_parents = 1,
 972			.ops = &clk_branch2_ops,
 973		},
 974	},
 975};
 976
 977static struct clk_branch cam_cc_icp_apb_clk = {
 978	.halt_reg = 0xb084,
 979	.halt_check = BRANCH_HALT,
 980	.clkr = {
 981		.enable_reg = 0xb084,
 982		.enable_mask = BIT(0),
 983		.hw.init = &(struct clk_init_data){
 984			.name = "cam_cc_icp_apb_clk",
 985			.ops = &clk_branch2_ops,
 986		},
 987	},
 988};
 989
 990static struct clk_branch cam_cc_icp_atb_clk = {
 991	.halt_reg = 0xb078,
 992	.halt_check = BRANCH_HALT,
 993	.clkr = {
 994		.enable_reg = 0xb078,
 995		.enable_mask = BIT(0),
 996		.hw.init = &(struct clk_init_data){
 997			.name = "cam_cc_icp_atb_clk",
 998			.ops = &clk_branch2_ops,
 999		},
1000	},
1001};
1002
1003static struct clk_branch cam_cc_icp_clk = {
1004	.halt_reg = 0xb0a0,
1005	.halt_check = BRANCH_HALT,
1006	.clkr = {
1007		.enable_reg = 0xb0a0,
1008		.enable_mask = BIT(0),
1009		.hw.init = &(struct clk_init_data){
1010			.name = "cam_cc_icp_clk",
1011			.parent_hws = (const struct clk_hw*[]){
1012				&cam_cc_icp_clk_src.clkr.hw,
1013			},
1014			.num_parents = 1,
1015			.flags = CLK_SET_RATE_PARENT,
1016			.ops = &clk_branch2_ops,
1017		},
1018	},
1019};
1020
1021static struct clk_branch cam_cc_icp_cti_clk = {
1022	.halt_reg = 0xb07c,
1023	.halt_check = BRANCH_HALT,
1024	.clkr = {
1025		.enable_reg = 0xb07c,
1026		.enable_mask = BIT(0),
1027		.hw.init = &(struct clk_init_data){
1028			.name = "cam_cc_icp_cti_clk",
1029			.ops = &clk_branch2_ops,
1030		},
1031	},
1032};
1033
1034static struct clk_branch cam_cc_icp_ts_clk = {
1035	.halt_reg = 0xb080,
1036	.halt_check = BRANCH_HALT,
1037	.clkr = {
1038		.enable_reg = 0xb080,
1039		.enable_mask = BIT(0),
1040		.hw.init = &(struct clk_init_data){
1041			.name = "cam_cc_icp_ts_clk",
1042			.ops = &clk_branch2_ops,
1043		},
1044	},
1045};
1046
1047static struct clk_branch cam_cc_ife_0_axi_clk = {
1048	.halt_reg = 0x907c,
1049	.halt_check = BRANCH_HALT,
1050	.clkr = {
1051		.enable_reg = 0x907c,
1052		.enable_mask = BIT(0),
1053		.hw.init = &(struct clk_init_data){
1054			.name = "cam_cc_ife_0_axi_clk",
1055			.ops = &clk_branch2_ops,
1056		},
1057	},
1058};
1059
1060static struct clk_branch cam_cc_ife_0_clk = {
1061	.halt_reg = 0x9024,
1062	.halt_check = BRANCH_HALT,
1063	.clkr = {
1064		.enable_reg = 0x9024,
1065		.enable_mask = BIT(0),
1066		.hw.init = &(struct clk_init_data){
1067			.name = "cam_cc_ife_0_clk",
1068			.parent_hws = (const struct clk_hw*[]){
1069				&cam_cc_ife_0_clk_src.clkr.hw,
1070			},
1071			.num_parents = 1,
1072			.flags = CLK_SET_RATE_PARENT,
1073			.ops = &clk_branch2_ops,
1074		},
1075	},
1076};
1077
1078static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
1079	.halt_reg = 0x9078,
1080	.halt_check = BRANCH_HALT,
1081	.clkr = {
1082		.enable_reg = 0x9078,
1083		.enable_mask = BIT(0),
1084		.hw.init = &(struct clk_init_data){
1085			.name = "cam_cc_ife_0_cphy_rx_clk",
1086			.parent_hws = (const struct clk_hw*[]){
1087				&cam_cc_cphy_rx_clk_src.clkr.hw,
1088			},
1089			.num_parents = 1,
1090			.flags = CLK_SET_RATE_PARENT,
1091			.ops = &clk_branch2_ops,
1092		},
1093	},
1094};
1095
1096static struct clk_branch cam_cc_ife_0_csid_clk = {
1097	.halt_reg = 0x9050,
1098	.halt_check = BRANCH_HALT,
1099	.clkr = {
1100		.enable_reg = 0x9050,
1101		.enable_mask = BIT(0),
1102		.hw.init = &(struct clk_init_data){
1103			.name = "cam_cc_ife_0_csid_clk",
1104			.parent_hws = (const struct clk_hw*[]){
1105				&cam_cc_ife_0_csid_clk_src.clkr.hw,
1106			},
1107			.num_parents = 1,
1108			.flags = CLK_SET_RATE_PARENT,
1109			.ops = &clk_branch2_ops,
1110		},
1111	},
1112};
1113
1114static struct clk_branch cam_cc_ife_0_dsp_clk = {
1115	.halt_reg = 0x9034,
1116	.halt_check = BRANCH_HALT,
1117	.clkr = {
1118		.enable_reg = 0x9034,
1119		.enable_mask = BIT(0),
1120		.hw.init = &(struct clk_init_data){
1121			.name = "cam_cc_ife_0_dsp_clk",
1122			.parent_hws = (const struct clk_hw*[]){
1123				&cam_cc_ife_0_clk_src.clkr.hw,
1124			},
1125			.num_parents = 1,
1126			.ops = &clk_branch2_ops,
1127		},
1128	},
1129};
1130
1131static struct clk_branch cam_cc_ife_1_axi_clk = {
1132	.halt_reg = 0xa054,
1133	.halt_check = BRANCH_HALT,
1134	.clkr = {
1135		.enable_reg = 0xa054,
1136		.enable_mask = BIT(0),
1137		.hw.init = &(struct clk_init_data){
1138			.name = "cam_cc_ife_1_axi_clk",
1139			.ops = &clk_branch2_ops,
1140		},
1141	},
1142};
1143
1144static struct clk_branch cam_cc_ife_1_clk = {
1145	.halt_reg = 0xa024,
1146	.halt_check = BRANCH_HALT,
1147	.clkr = {
1148		.enable_reg = 0xa024,
1149		.enable_mask = BIT(0),
1150		.hw.init = &(struct clk_init_data){
1151			.name = "cam_cc_ife_1_clk",
1152			.parent_hws = (const struct clk_hw*[]){
1153				&cam_cc_ife_1_clk_src.clkr.hw,
1154			},
1155			.num_parents = 1,
1156			.flags = CLK_SET_RATE_PARENT,
1157			.ops = &clk_branch2_ops,
1158		},
1159	},
1160};
1161
1162static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
1163	.halt_reg = 0xa050,
1164	.halt_check = BRANCH_HALT,
1165	.clkr = {
1166		.enable_reg = 0xa050,
1167		.enable_mask = BIT(0),
1168		.hw.init = &(struct clk_init_data){
1169			.name = "cam_cc_ife_1_cphy_rx_clk",
1170			.parent_hws = (const struct clk_hw*[]){
1171				&cam_cc_cphy_rx_clk_src.clkr.hw,
1172			},
1173			.num_parents = 1,
1174			.flags = CLK_SET_RATE_PARENT,
1175			.ops = &clk_branch2_ops,
1176		},
1177	},
1178};
1179
1180static struct clk_branch cam_cc_ife_1_csid_clk = {
1181	.halt_reg = 0xa048,
1182	.halt_check = BRANCH_HALT,
1183	.clkr = {
1184		.enable_reg = 0xa048,
1185		.enable_mask = BIT(0),
1186		.hw.init = &(struct clk_init_data){
1187			.name = "cam_cc_ife_1_csid_clk",
1188			.parent_hws = (const struct clk_hw*[]){
1189				&cam_cc_ife_1_csid_clk_src.clkr.hw,
1190			},
1191			.num_parents = 1,
1192			.flags = CLK_SET_RATE_PARENT,
1193			.ops = &clk_branch2_ops,
1194		},
1195	},
1196};
1197
1198static struct clk_branch cam_cc_ife_1_dsp_clk = {
1199	.halt_reg = 0xa02c,
1200	.halt_check = BRANCH_HALT,
1201	.clkr = {
1202		.enable_reg = 0xa02c,
1203		.enable_mask = BIT(0),
1204		.hw.init = &(struct clk_init_data){
1205			.name = "cam_cc_ife_1_dsp_clk",
1206			.parent_hws = (const struct clk_hw*[]){
1207				&cam_cc_ife_1_clk_src.clkr.hw,
1208			},
1209			.num_parents = 1,
1210			.ops = &clk_branch2_ops,
1211		},
1212	},
1213};
1214
1215static struct clk_branch cam_cc_ife_lite_clk = {
1216	.halt_reg = 0xb01c,
1217	.halt_check = BRANCH_HALT,
1218	.clkr = {
1219		.enable_reg = 0xb01c,
1220		.enable_mask = BIT(0),
1221		.hw.init = &(struct clk_init_data){
1222			.name = "cam_cc_ife_lite_clk",
1223			.parent_hws = (const struct clk_hw*[]){
1224				&cam_cc_ife_lite_clk_src.clkr.hw,
1225			},
1226			.num_parents = 1,
1227			.flags = CLK_SET_RATE_PARENT,
1228			.ops = &clk_branch2_ops,
1229		},
1230	},
1231};
1232
1233static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
1234	.halt_reg = 0xb044,
1235	.halt_check = BRANCH_HALT,
1236	.clkr = {
1237		.enable_reg = 0xb044,
1238		.enable_mask = BIT(0),
1239		.hw.init = &(struct clk_init_data){
1240			.name = "cam_cc_ife_lite_cphy_rx_clk",
1241			.parent_hws = (const struct clk_hw*[]){
1242				&cam_cc_cphy_rx_clk_src.clkr.hw,
1243			},
1244			.num_parents = 1,
1245			.flags = CLK_SET_RATE_PARENT,
1246			.ops = &clk_branch2_ops,
1247		},
1248	},
1249};
1250
1251static struct clk_branch cam_cc_ife_lite_csid_clk = {
1252	.halt_reg = 0xb03c,
1253	.halt_check = BRANCH_HALT,
1254	.clkr = {
1255		.enable_reg = 0xb03c,
1256		.enable_mask = BIT(0),
1257		.hw.init = &(struct clk_init_data){
1258			.name = "cam_cc_ife_lite_csid_clk",
1259			.parent_hws = (const struct clk_hw*[]){
1260				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
1261			},
1262			.num_parents = 1,
1263			.flags = CLK_SET_RATE_PARENT,
1264			.ops = &clk_branch2_ops,
1265		},
1266	},
1267};
1268
1269static struct clk_branch cam_cc_ipe_0_ahb_clk = {
1270	.halt_reg = 0x703c,
1271	.halt_check = BRANCH_HALT,
1272	.clkr = {
1273		.enable_reg = 0x703c,
1274		.enable_mask = BIT(0),
1275		.hw.init = &(struct clk_init_data){
1276			.name = "cam_cc_ipe_0_ahb_clk",
1277			.parent_hws = (const struct clk_hw*[]){
1278				&cam_cc_slow_ahb_clk_src.clkr.hw,
1279			},
1280			.num_parents = 1,
1281			.flags = CLK_SET_RATE_PARENT,
1282			.ops = &clk_branch2_ops,
1283		},
1284	},
1285};
1286
1287static struct clk_branch cam_cc_ipe_0_areg_clk = {
1288	.halt_reg = 0x7038,
1289	.halt_check = BRANCH_HALT,
1290	.clkr = {
1291		.enable_reg = 0x7038,
1292		.enable_mask = BIT(0),
1293		.hw.init = &(struct clk_init_data){
1294			.name = "cam_cc_ipe_0_areg_clk",
1295			.parent_hws = (const struct clk_hw*[]){
1296				&cam_cc_fast_ahb_clk_src.clkr.hw,
1297			},
1298			.num_parents = 1,
1299			.flags = CLK_SET_RATE_PARENT,
1300			.ops = &clk_branch2_ops,
1301		},
1302	},
1303};
1304
1305static struct clk_branch cam_cc_ipe_0_axi_clk = {
1306	.halt_reg = 0x7034,
1307	.halt_check = BRANCH_HALT,
1308	.clkr = {
1309		.enable_reg = 0x7034,
1310		.enable_mask = BIT(0),
1311		.hw.init = &(struct clk_init_data){
1312			.name = "cam_cc_ipe_0_axi_clk",
1313			.ops = &clk_branch2_ops,
1314		},
1315	},
1316};
1317
1318static struct clk_branch cam_cc_ipe_0_clk = {
1319	.halt_reg = 0x7024,
1320	.halt_check = BRANCH_HALT,
1321	.clkr = {
1322		.enable_reg = 0x7024,
1323		.enable_mask = BIT(0),
1324		.hw.init = &(struct clk_init_data){
1325			.name = "cam_cc_ipe_0_clk",
1326			.parent_hws = (const struct clk_hw*[]){
1327				&cam_cc_ipe_0_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 cam_cc_ipe_1_ahb_clk = {
1337	.halt_reg = 0x803c,
1338	.halt_check = BRANCH_HALT,
1339	.clkr = {
1340		.enable_reg = 0x803c,
1341		.enable_mask = BIT(0),
1342		.hw.init = &(struct clk_init_data){
1343			.name = "cam_cc_ipe_1_ahb_clk",
1344			.parent_hws = (const struct clk_hw*[]){
1345				&cam_cc_slow_ahb_clk_src.clkr.hw,
1346			},
1347			.num_parents = 1,
1348			.flags = CLK_SET_RATE_PARENT,
1349			.ops = &clk_branch2_ops,
1350		},
1351	},
1352};
1353
1354static struct clk_branch cam_cc_ipe_1_areg_clk = {
1355	.halt_reg = 0x8038,
1356	.halt_check = BRANCH_HALT,
1357	.clkr = {
1358		.enable_reg = 0x8038,
1359		.enable_mask = BIT(0),
1360		.hw.init = &(struct clk_init_data){
1361			.name = "cam_cc_ipe_1_areg_clk",
1362			.parent_hws = (const struct clk_hw*[]){
1363				&cam_cc_fast_ahb_clk_src.clkr.hw,
1364			},
1365			.num_parents = 1,
1366			.flags = CLK_SET_RATE_PARENT,
1367			.ops = &clk_branch2_ops,
1368		},
1369	},
1370};
1371
1372static struct clk_branch cam_cc_ipe_1_axi_clk = {
1373	.halt_reg = 0x8034,
1374	.halt_check = BRANCH_HALT,
1375	.clkr = {
1376		.enable_reg = 0x8034,
1377		.enable_mask = BIT(0),
1378		.hw.init = &(struct clk_init_data){
1379			.name = "cam_cc_ipe_1_axi_clk",
1380			.ops = &clk_branch2_ops,
1381		},
1382	},
1383};
1384
1385static struct clk_branch cam_cc_ipe_1_clk = {
1386	.halt_reg = 0x8024,
1387	.halt_check = BRANCH_HALT,
1388	.clkr = {
1389		.enable_reg = 0x8024,
1390		.enable_mask = BIT(0),
1391		.hw.init = &(struct clk_init_data){
1392			.name = "cam_cc_ipe_1_clk",
1393			.parent_hws = (const struct clk_hw*[]){
1394				&cam_cc_ipe_1_clk_src.clkr.hw,
1395			},
1396			.num_parents = 1,
1397			.flags = CLK_SET_RATE_PARENT,
1398			.ops = &clk_branch2_ops,
1399		},
1400	},
1401};
1402
1403static struct clk_branch cam_cc_jpeg_clk = {
1404	.halt_reg = 0xb064,
1405	.halt_check = BRANCH_HALT,
1406	.clkr = {
1407		.enable_reg = 0xb064,
1408		.enable_mask = BIT(0),
1409		.hw.init = &(struct clk_init_data){
1410			.name = "cam_cc_jpeg_clk",
1411			.parent_hws = (const struct clk_hw*[]){
1412				&cam_cc_jpeg_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 cam_cc_lrme_clk = {
1422	.halt_reg = 0xb110,
1423	.halt_check = BRANCH_HALT,
1424	.clkr = {
1425		.enable_reg = 0xb110,
1426		.enable_mask = BIT(0),
1427		.hw.init = &(struct clk_init_data){
1428			.name = "cam_cc_lrme_clk",
1429			.parent_hws = (const struct clk_hw*[]){
1430				&cam_cc_lrme_clk_src.clkr.hw,
1431			},
1432			.num_parents = 1,
1433			.flags = CLK_SET_RATE_PARENT,
1434			.ops = &clk_branch2_ops,
1435		},
1436	},
1437};
1438
1439static struct clk_branch cam_cc_mclk0_clk = {
1440	.halt_reg = 0x401c,
1441	.halt_check = BRANCH_HALT,
1442	.clkr = {
1443		.enable_reg = 0x401c,
1444		.enable_mask = BIT(0),
1445		.hw.init = &(struct clk_init_data){
1446			.name = "cam_cc_mclk0_clk",
1447			.parent_hws = (const struct clk_hw*[]){
1448				&cam_cc_mclk0_clk_src.clkr.hw,
1449			},
1450			.num_parents = 1,
1451			.flags = CLK_SET_RATE_PARENT,
1452			.ops = &clk_branch2_ops,
1453		},
1454	},
1455};
1456
1457static struct clk_branch cam_cc_mclk1_clk = {
1458	.halt_reg = 0x403c,
1459	.halt_check = BRANCH_HALT,
1460	.clkr = {
1461		.enable_reg = 0x403c,
1462		.enable_mask = BIT(0),
1463		.hw.init = &(struct clk_init_data){
1464			.name = "cam_cc_mclk1_clk",
1465			.parent_hws = (const struct clk_hw*[]){
1466				&cam_cc_mclk1_clk_src.clkr.hw,
1467			},
1468			.num_parents = 1,
1469			.flags = CLK_SET_RATE_PARENT,
1470			.ops = &clk_branch2_ops,
1471		},
1472	},
1473};
1474
1475static struct clk_branch cam_cc_mclk2_clk = {
1476	.halt_reg = 0x405c,
1477	.halt_check = BRANCH_HALT,
1478	.clkr = {
1479		.enable_reg = 0x405c,
1480		.enable_mask = BIT(0),
1481		.hw.init = &(struct clk_init_data){
1482			.name = "cam_cc_mclk2_clk",
1483			.parent_hws = (const struct clk_hw*[]){
1484				&cam_cc_mclk2_clk_src.clkr.hw,
1485			},
1486			.num_parents = 1,
1487			.flags = CLK_SET_RATE_PARENT,
1488			.ops = &clk_branch2_ops,
1489		},
1490	},
1491};
1492
1493static struct clk_branch cam_cc_mclk3_clk = {
1494	.halt_reg = 0x407c,
1495	.halt_check = BRANCH_HALT,
1496	.clkr = {
1497		.enable_reg = 0x407c,
1498		.enable_mask = BIT(0),
1499		.hw.init = &(struct clk_init_data){
1500			.name = "cam_cc_mclk3_clk",
1501			.parent_hws = (const struct clk_hw*[]){
1502				&cam_cc_mclk3_clk_src.clkr.hw,
1503			},
1504			.num_parents = 1,
1505			.flags = CLK_SET_RATE_PARENT,
1506			.ops = &clk_branch2_ops,
1507		},
1508	},
1509};
1510
1511static struct clk_branch cam_cc_soc_ahb_clk = {
1512	.halt_reg = 0xb13c,
1513	.halt_check = BRANCH_HALT,
1514	.clkr = {
1515		.enable_reg = 0xb13c,
1516		.enable_mask = BIT(0),
1517		.hw.init = &(struct clk_init_data){
1518			.name = "cam_cc_soc_ahb_clk",
1519			.ops = &clk_branch2_ops,
1520		},
1521	},
1522};
1523
1524static struct clk_branch cam_cc_sys_tmr_clk = {
1525	.halt_reg = 0xb0a8,
1526	.halt_check = BRANCH_HALT,
1527	.clkr = {
1528		.enable_reg = 0xb0a8,
1529		.enable_mask = BIT(0),
1530		.hw.init = &(struct clk_init_data){
1531			.name = "cam_cc_sys_tmr_clk",
1532			.ops = &clk_branch2_ops,
1533		},
1534	},
1535};
1536
1537static struct gdsc titan_top_gdsc;
1538
1539static struct gdsc bps_gdsc = {
1540	.gdscr = 0x6004,
1541	.pd = {
1542		.name = "bps_gdsc",
1543	},
1544	.flags = HW_CTRL | POLL_CFG_GDSCR,
1545	.pwrsts = PWRSTS_OFF_ON,
1546};
1547
1548static struct gdsc ipe_0_gdsc = {
1549	.gdscr = 0x7004,
1550	.pd = {
1551		.name = "ipe_0_gdsc",
1552	},
1553	.flags = HW_CTRL | POLL_CFG_GDSCR,
1554	.pwrsts = PWRSTS_OFF_ON,
1555};
1556
1557static struct gdsc ipe_1_gdsc = {
1558	.gdscr = 0x8004,
1559	.pd = {
1560		.name = "ipe_1_gdsc",
1561	},
1562	.flags = HW_CTRL | POLL_CFG_GDSCR,
1563	.pwrsts = PWRSTS_OFF_ON,
1564};
1565
1566static struct gdsc ife_0_gdsc = {
1567	.gdscr = 0x9004,
1568	.pd = {
1569		.name = "ife_0_gdsc",
1570	},
1571	.flags = POLL_CFG_GDSCR,
1572	.parent = &titan_top_gdsc.pd,
1573	.pwrsts = PWRSTS_OFF_ON,
1574};
1575
1576static struct gdsc ife_1_gdsc = {
1577	.gdscr = 0xa004,
1578	.pd = {
1579		.name = "ife_1_gdsc",
1580	},
1581	.flags = POLL_CFG_GDSCR,
1582	.parent = &titan_top_gdsc.pd,
1583	.pwrsts = PWRSTS_OFF_ON,
1584};
1585
1586static struct gdsc titan_top_gdsc = {
1587	.gdscr = 0xb134,
1588	.pd = {
1589		.name = "titan_top_gdsc",
1590	},
1591	.flags = POLL_CFG_GDSCR,
1592	.pwrsts = PWRSTS_OFF_ON,
1593};
1594
1595static struct clk_regmap *cam_cc_sdm845_clocks[] = {
1596	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
1597	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
1598	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
1599	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
1600	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
1601	[CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
1602	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
1603	[CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
1604	[CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
1605	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
1606	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
1607	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
1608	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
1609	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
1610	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
1611	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
1612	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
1613	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
1614	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
1615	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
1616	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
1617	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
1618	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
1619	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
1620	[CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
1621	[CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
1622	[CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
1623	[CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
1624	[CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
1625	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
1626	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
1627	[CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
1628	[CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
1629	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
1630	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
1631	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
1632	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
1633	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
1634	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
1635	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
1636	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
1637	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
1638	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
1639	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
1640	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
1641	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
1642	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
1643	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
1644	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
1645	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
1646	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
1647	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
1648	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
1649	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
1650	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
1651	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
1652	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
1653	[CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
1654	[CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
1655	[CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
1656	[CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
1657	[CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
1658	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
1659	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
1660	[CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
1661	[CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
1662	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
1663	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
1664	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
1665	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
1666	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
1667	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
1668	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
1669	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
1670	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
1671	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
1672	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
1673	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
1674	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
1675	[CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
1676	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
1677	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
1678	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
1679	[CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
1680	[CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
1681};
1682
1683static struct gdsc *cam_cc_sdm845_gdscs[] = {
1684	[BPS_GDSC] = &bps_gdsc,
1685	[IPE_0_GDSC] = &ipe_0_gdsc,
1686	[IPE_1_GDSC] = &ipe_1_gdsc,
1687	[IFE_0_GDSC] = &ife_0_gdsc,
1688	[IFE_1_GDSC] = &ife_1_gdsc,
1689	[TITAN_TOP_GDSC] = &titan_top_gdsc,
1690};
1691
1692static const struct regmap_config cam_cc_sdm845_regmap_config = {
1693	.reg_bits	= 32,
1694	.reg_stride	= 4,
1695	.val_bits	= 32,
1696	.max_register	= 0xd004,
1697	.fast_io	= true,
1698};
1699
1700static const struct qcom_cc_desc cam_cc_sdm845_desc = {
1701	.config = &cam_cc_sdm845_regmap_config,
1702	.clks = cam_cc_sdm845_clocks,
1703	.num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
1704	.gdscs = cam_cc_sdm845_gdscs,
1705	.num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
1706};
1707
1708static const struct of_device_id cam_cc_sdm845_match_table[] = {
1709	{ .compatible = "qcom,sdm845-camcc" },
1710	{ }
1711};
1712MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
1713
1714static int cam_cc_sdm845_probe(struct platform_device *pdev)
1715{
1716	struct regmap *regmap;
1717	struct alpha_pll_config cam_cc_pll_config = { };
1718
1719	regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
1720	if (IS_ERR(regmap))
1721		return PTR_ERR(regmap);
1722
1723	cam_cc_pll_config.l = 0x1f;
1724	cam_cc_pll_config.alpha = 0x4000;
1725	clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
1726
1727	cam_cc_pll_config.l = 0x2a;
1728	cam_cc_pll_config.alpha = 0x1556;
1729	clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
1730
1731	cam_cc_pll_config.l = 0x32;
1732	cam_cc_pll_config.alpha = 0x0;
1733	clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
1734
1735	cam_cc_pll_config.l = 0x14;
1736	clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
1737
1738	return qcom_cc_really_probe(pdev, &cam_cc_sdm845_desc, regmap);
1739}
1740
1741static struct platform_driver cam_cc_sdm845_driver = {
1742	.probe	= cam_cc_sdm845_probe,
1743	.driver	= {
1744		.name = "sdm845-camcc",
1745		.of_match_table = cam_cc_sdm845_match_table,
1746	},
1747};
1748
1749static int __init cam_cc_sdm845_init(void)
1750{
1751	return platform_driver_register(&cam_cc_sdm845_driver);
1752}
1753subsys_initcall(cam_cc_sdm845_init);
1754
1755static void __exit cam_cc_sdm845_exit(void)
1756{
1757	platform_driver_unregister(&cam_cc_sdm845_driver);
1758}
1759module_exit(cam_cc_sdm845_exit);
1760
1761MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
1762MODULE_LICENSE("GPL v2");