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