Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
   4 */
   5
   6#include <linux/clk-provider.h>
   7#include <linux/mod_devicetable.h>
   8#include <linux/module.h>
   9#include <linux/platform_device.h>
  10#include <linux/pm_runtime.h>
  11#include <linux/regmap.h>
  12
  13#include <dt-bindings/clock/qcom,sm8650-camcc.h>
  14
  15#include "clk-alpha-pll.h"
  16#include "clk-branch.h"
  17#include "clk-rcg.h"
  18#include "clk-regmap.h"
  19#include "common.h"
  20#include "gdsc.h"
  21#include "reset.h"
  22
  23enum {
  24	DT_IFACE,
  25	DT_BI_TCXO,
  26	DT_BI_TCXO_AO,
  27	DT_SLEEP_CLK,
  28};
  29
  30enum {
  31	P_BI_TCXO,
  32	P_BI_TCXO_AO,
  33	P_CAM_CC_PLL0_OUT_EVEN,
  34	P_CAM_CC_PLL0_OUT_MAIN,
  35	P_CAM_CC_PLL0_OUT_ODD,
  36	P_CAM_CC_PLL1_OUT_EVEN,
  37	P_CAM_CC_PLL2_OUT_EVEN,
  38	P_CAM_CC_PLL2_OUT_MAIN,
  39	P_CAM_CC_PLL3_OUT_EVEN,
  40	P_CAM_CC_PLL4_OUT_EVEN,
  41	P_CAM_CC_PLL5_OUT_EVEN,
  42	P_CAM_CC_PLL6_OUT_EVEN,
  43	P_CAM_CC_PLL7_OUT_EVEN,
  44	P_CAM_CC_PLL8_OUT_EVEN,
  45	P_CAM_CC_PLL9_OUT_EVEN,
  46	P_CAM_CC_PLL9_OUT_ODD,
  47	P_CAM_CC_PLL10_OUT_EVEN,
  48	P_SLEEP_CLK,
  49};
  50
  51static const struct pll_vco lucid_ole_vco[] = {
  52	{ 249600000, 2300000000, 0 },
  53};
  54
  55static const struct pll_vco rivian_ole_vco[] = {
  56	{ 777000000, 1285000000, 0 },
  57};
  58
  59static const struct alpha_pll_config cam_cc_pll0_config = {
  60	.l = 0x3e,
  61	.alpha = 0x8000,
  62	.config_ctl_val = 0x20485699,
  63	.config_ctl_hi_val = 0x00182261,
  64	.config_ctl_hi1_val = 0x82aa299c,
  65	.test_ctl_val = 0x00000000,
  66	.test_ctl_hi_val = 0x00000003,
  67	.test_ctl_hi1_val = 0x00009000,
  68	.test_ctl_hi2_val = 0x00000034,
  69	.user_ctl_val = 0x00008400,
  70	.user_ctl_hi_val = 0x00000005,
  71};
  72
  73static struct clk_alpha_pll cam_cc_pll0 = {
  74	.offset = 0x0,
  75	.vco_table = lucid_ole_vco,
  76	.num_vco = ARRAY_SIZE(lucid_ole_vco),
  77	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  78	.clkr = {
  79		.hw.init = &(const struct clk_init_data) {
  80			.name = "cam_cc_pll0",
  81			.parent_data = &(const struct clk_parent_data) {
  82				.index = DT_BI_TCXO,
  83			},
  84			.num_parents = 1,
  85			.ops = &clk_alpha_pll_lucid_evo_ops,
  86		},
  87	},
  88};
  89
  90static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
  91	{ 0x1, 2 },
  92	{ }
  93};
  94
  95static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
  96	.offset = 0x0,
  97	.post_div_shift = 10,
  98	.post_div_table = post_div_table_cam_cc_pll0_out_even,
  99	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
 100	.width = 4,
 101	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 102	.clkr.hw.init = &(const struct clk_init_data) {
 103		.name = "cam_cc_pll0_out_even",
 104		.parent_hws = (const struct clk_hw*[]) {
 105			&cam_cc_pll0.clkr.hw,
 106		},
 107		.num_parents = 1,
 108		.flags = CLK_SET_RATE_PARENT,
 109		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 110	},
 111};
 112
 113static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
 114	{ 0x2, 3 },
 115	{ }
 116};
 117
 118static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
 119	.offset = 0x0,
 120	.post_div_shift = 14,
 121	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
 122	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
 123	.width = 4,
 124	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 125	.clkr.hw.init = &(const struct clk_init_data) {
 126		.name = "cam_cc_pll0_out_odd",
 127		.parent_hws = (const struct clk_hw*[]) {
 128			&cam_cc_pll0.clkr.hw,
 129		},
 130		.num_parents = 1,
 131		.flags = CLK_SET_RATE_PARENT,
 132		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 133	},
 134};
 135
 136static const struct alpha_pll_config cam_cc_pll1_config = {
 137	.l = 0x31,
 138	.alpha = 0x7aaa,
 139	.config_ctl_val = 0x20485699,
 140	.config_ctl_hi_val = 0x00182261,
 141	.config_ctl_hi1_val = 0x82aa299c,
 142	.test_ctl_val = 0x00000000,
 143	.test_ctl_hi_val = 0x00000003,
 144	.test_ctl_hi1_val = 0x00009000,
 145	.test_ctl_hi2_val = 0x00000034,
 146	.user_ctl_val = 0x00000400,
 147	.user_ctl_hi_val = 0x00000005,
 148};
 149
 150static struct clk_alpha_pll cam_cc_pll1 = {
 151	.offset = 0x1000,
 152	.vco_table = lucid_ole_vco,
 153	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 154	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 155	.clkr = {
 156		.hw.init = &(const struct clk_init_data) {
 157			.name = "cam_cc_pll1",
 158			.parent_data = &(const struct clk_parent_data) {
 159				.index = DT_BI_TCXO,
 160			},
 161			.num_parents = 1,
 162			.ops = &clk_alpha_pll_lucid_evo_ops,
 163		},
 164	},
 165};
 166
 167static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
 168	{ 0x1, 2 },
 169	{ }
 170};
 171
 172static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
 173	.offset = 0x1000,
 174	.post_div_shift = 10,
 175	.post_div_table = post_div_table_cam_cc_pll1_out_even,
 176	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
 177	.width = 4,
 178	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 179	.clkr.hw.init = &(const struct clk_init_data) {
 180		.name = "cam_cc_pll1_out_even",
 181		.parent_hws = (const struct clk_hw*[]) {
 182			&cam_cc_pll1.clkr.hw,
 183		},
 184		.num_parents = 1,
 185		.flags = CLK_SET_RATE_PARENT,
 186		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 187	},
 188};
 189
 190static const struct alpha_pll_config cam_cc_pll2_config = {
 191	.l = 0x32,
 192	.alpha = 0x0,
 193	.config_ctl_val = 0x10000030,
 194	.config_ctl_hi_val = 0x80890263,
 195	.config_ctl_hi1_val = 0x00000217,
 196	.user_ctl_val = 0x00000001,
 197	.user_ctl_hi_val = 0x00000000,
 198};
 199
 200static struct clk_alpha_pll cam_cc_pll2 = {
 201	.offset = 0x2000,
 202	.vco_table = rivian_ole_vco,
 203	.num_vco = ARRAY_SIZE(rivian_ole_vco),
 204	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
 205	.clkr = {
 206		.hw.init = &(const struct clk_init_data) {
 207			.name = "cam_cc_pll2",
 208			.parent_data = &(const struct clk_parent_data) {
 209				.index = DT_BI_TCXO,
 210			},
 211			.num_parents = 1,
 212			.ops = &clk_alpha_pll_rivian_evo_ops,
 213		},
 214	},
 215};
 216
 217static const struct alpha_pll_config cam_cc_pll3_config = {
 218	.l = 0x30,
 219	.alpha = 0x8aaa,
 220	.config_ctl_val = 0x20485699,
 221	.config_ctl_hi_val = 0x00182261,
 222	.config_ctl_hi1_val = 0x82aa299c,
 223	.test_ctl_val = 0x00000000,
 224	.test_ctl_hi_val = 0x00000003,
 225	.test_ctl_hi1_val = 0x00009000,
 226	.test_ctl_hi2_val = 0x00000034,
 227	.user_ctl_val = 0x00000400,
 228	.user_ctl_hi_val = 0x00000005,
 229};
 230
 231static struct clk_alpha_pll cam_cc_pll3 = {
 232	.offset = 0x3000,
 233	.vco_table = lucid_ole_vco,
 234	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 235	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 236	.clkr = {
 237		.hw.init = &(const struct clk_init_data) {
 238			.name = "cam_cc_pll3",
 239			.parent_data = &(const struct clk_parent_data) {
 240				.index = DT_BI_TCXO,
 241			},
 242			.num_parents = 1,
 243			.ops = &clk_alpha_pll_lucid_evo_ops,
 244		},
 245	},
 246};
 247
 248static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
 249	{ 0x1, 2 },
 250	{ }
 251};
 252
 253static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
 254	.offset = 0x3000,
 255	.post_div_shift = 10,
 256	.post_div_table = post_div_table_cam_cc_pll3_out_even,
 257	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
 258	.width = 4,
 259	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 260	.clkr.hw.init = &(const struct clk_init_data) {
 261		.name = "cam_cc_pll3_out_even",
 262		.parent_hws = (const struct clk_hw*[]) {
 263			&cam_cc_pll3.clkr.hw,
 264		},
 265		.num_parents = 1,
 266		.flags = CLK_SET_RATE_PARENT,
 267		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 268	},
 269};
 270
 271static const struct alpha_pll_config cam_cc_pll4_config = {
 272	.l = 0x30,
 273	.alpha = 0x8aaa,
 274	.config_ctl_val = 0x20485699,
 275	.config_ctl_hi_val = 0x00182261,
 276	.config_ctl_hi1_val = 0x82aa299c,
 277	.test_ctl_val = 0x00000000,
 278	.test_ctl_hi_val = 0x00000003,
 279	.test_ctl_hi1_val = 0x00009000,
 280	.test_ctl_hi2_val = 0x00000034,
 281	.user_ctl_val = 0x00000400,
 282	.user_ctl_hi_val = 0x00000005,
 283};
 284
 285static struct clk_alpha_pll cam_cc_pll4 = {
 286	.offset = 0x4000,
 287	.vco_table = lucid_ole_vco,
 288	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 289	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 290	.clkr = {
 291		.hw.init = &(const struct clk_init_data) {
 292			.name = "cam_cc_pll4",
 293			.parent_data = &(const struct clk_parent_data) {
 294				.index = DT_BI_TCXO,
 295			},
 296			.num_parents = 1,
 297			.ops = &clk_alpha_pll_lucid_evo_ops,
 298		},
 299	},
 300};
 301
 302static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
 303	{ 0x1, 2 },
 304	{ }
 305};
 306
 307static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
 308	.offset = 0x4000,
 309	.post_div_shift = 10,
 310	.post_div_table = post_div_table_cam_cc_pll4_out_even,
 311	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
 312	.width = 4,
 313	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 314	.clkr.hw.init = &(const struct clk_init_data) {
 315		.name = "cam_cc_pll4_out_even",
 316		.parent_hws = (const struct clk_hw*[]) {
 317			&cam_cc_pll4.clkr.hw,
 318		},
 319		.num_parents = 1,
 320		.flags = CLK_SET_RATE_PARENT,
 321		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 322	},
 323};
 324
 325static const struct alpha_pll_config cam_cc_pll5_config = {
 326	.l = 0x30,
 327	.alpha = 0x8aaa,
 328	.config_ctl_val = 0x20485699,
 329	.config_ctl_hi_val = 0x00182261,
 330	.config_ctl_hi1_val = 0x82aa299c,
 331	.test_ctl_val = 0x00000000,
 332	.test_ctl_hi_val = 0x00000003,
 333	.test_ctl_hi1_val = 0x00009000,
 334	.test_ctl_hi2_val = 0x00000034,
 335	.user_ctl_val = 0x00000400,
 336	.user_ctl_hi_val = 0x00000005,
 337};
 338
 339static struct clk_alpha_pll cam_cc_pll5 = {
 340	.offset = 0x5000,
 341	.vco_table = lucid_ole_vco,
 342	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 343	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 344	.clkr = {
 345		.hw.init = &(const struct clk_init_data) {
 346			.name = "cam_cc_pll5",
 347			.parent_data = &(const struct clk_parent_data) {
 348				.index = DT_BI_TCXO,
 349			},
 350			.num_parents = 1,
 351			.ops = &clk_alpha_pll_lucid_evo_ops,
 352		},
 353	},
 354};
 355
 356static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
 357	{ 0x1, 2 },
 358	{ }
 359};
 360
 361static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
 362	.offset = 0x5000,
 363	.post_div_shift = 10,
 364	.post_div_table = post_div_table_cam_cc_pll5_out_even,
 365	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
 366	.width = 4,
 367	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 368	.clkr.hw.init = &(const struct clk_init_data) {
 369		.name = "cam_cc_pll5_out_even",
 370		.parent_hws = (const struct clk_hw*[]) {
 371			&cam_cc_pll5.clkr.hw,
 372		},
 373		.num_parents = 1,
 374		.flags = CLK_SET_RATE_PARENT,
 375		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 376	},
 377};
 378
 379static const struct alpha_pll_config cam_cc_pll6_config = {
 380	.l = 0x30,
 381	.alpha = 0x8aaa,
 382	.config_ctl_val = 0x20485699,
 383	.config_ctl_hi_val = 0x00182261,
 384	.config_ctl_hi1_val = 0x82aa299c,
 385	.test_ctl_val = 0x00000000,
 386	.test_ctl_hi_val = 0x00000003,
 387	.test_ctl_hi1_val = 0x00009000,
 388	.test_ctl_hi2_val = 0x00000034,
 389	.user_ctl_val = 0x00000400,
 390	.user_ctl_hi_val = 0x00000005,
 391};
 392
 393static struct clk_alpha_pll cam_cc_pll6 = {
 394	.offset = 0x6000,
 395	.vco_table = lucid_ole_vco,
 396	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 397	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 398	.clkr = {
 399		.hw.init = &(const struct clk_init_data) {
 400			.name = "cam_cc_pll6",
 401			.parent_data = &(const struct clk_parent_data) {
 402				.index = DT_BI_TCXO,
 403			},
 404			.num_parents = 1,
 405			.ops = &clk_alpha_pll_lucid_evo_ops,
 406		},
 407	},
 408};
 409
 410static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
 411	{ 0x1, 2 },
 412	{ }
 413};
 414
 415static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
 416	.offset = 0x6000,
 417	.post_div_shift = 10,
 418	.post_div_table = post_div_table_cam_cc_pll6_out_even,
 419	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
 420	.width = 4,
 421	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 422	.clkr.hw.init = &(const struct clk_init_data) {
 423		.name = "cam_cc_pll6_out_even",
 424		.parent_hws = (const struct clk_hw*[]) {
 425			&cam_cc_pll6.clkr.hw,
 426		},
 427		.num_parents = 1,
 428		.flags = CLK_SET_RATE_PARENT,
 429		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 430	},
 431};
 432
 433static const struct alpha_pll_config cam_cc_pll7_config = {
 434	.l = 0x30,
 435	.alpha = 0x8aaa,
 436	.config_ctl_val = 0x20485699,
 437	.config_ctl_hi_val = 0x00182261,
 438	.config_ctl_hi1_val = 0x82aa299c,
 439	.test_ctl_val = 0x00000000,
 440	.test_ctl_hi_val = 0x00000003,
 441	.test_ctl_hi1_val = 0x00009000,
 442	.test_ctl_hi2_val = 0x00000034,
 443	.user_ctl_val = 0x00000400,
 444	.user_ctl_hi_val = 0x00000005,
 445};
 446
 447static struct clk_alpha_pll cam_cc_pll7 = {
 448	.offset = 0x7000,
 449	.vco_table = lucid_ole_vco,
 450	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 451	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 452	.clkr = {
 453		.hw.init = &(const struct clk_init_data) {
 454			.name = "cam_cc_pll7",
 455			.parent_data = &(const struct clk_parent_data) {
 456				.index = DT_BI_TCXO,
 457			},
 458			.num_parents = 1,
 459			.ops = &clk_alpha_pll_lucid_evo_ops,
 460		},
 461	},
 462};
 463
 464static const struct clk_div_table post_div_table_cam_cc_pll7_out_even[] = {
 465	{ 0x1, 2 },
 466	{ }
 467};
 468
 469static struct clk_alpha_pll_postdiv cam_cc_pll7_out_even = {
 470	.offset = 0x7000,
 471	.post_div_shift = 10,
 472	.post_div_table = post_div_table_cam_cc_pll7_out_even,
 473	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll7_out_even),
 474	.width = 4,
 475	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 476	.clkr.hw.init = &(const struct clk_init_data) {
 477		.name = "cam_cc_pll7_out_even",
 478		.parent_hws = (const struct clk_hw*[]) {
 479			&cam_cc_pll7.clkr.hw,
 480		},
 481		.num_parents = 1,
 482		.flags = CLK_SET_RATE_PARENT,
 483		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 484	},
 485};
 486
 487static const struct alpha_pll_config cam_cc_pll8_config = {
 488	.l = 0x14,
 489	.alpha = 0xd555,
 490	.config_ctl_val = 0x20485699,
 491	.config_ctl_hi_val = 0x00182261,
 492	.config_ctl_hi1_val = 0x82aa299c,
 493	.test_ctl_val = 0x00000000,
 494	.test_ctl_hi_val = 0x00000003,
 495	.test_ctl_hi1_val = 0x00009000,
 496	.test_ctl_hi2_val = 0x00000034,
 497	.user_ctl_val = 0x00000400,
 498	.user_ctl_hi_val = 0x00000005,
 499};
 500
 501static struct clk_alpha_pll cam_cc_pll8 = {
 502	.offset = 0x8000,
 503	.vco_table = lucid_ole_vco,
 504	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 505	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 506	.clkr = {
 507		.hw.init = &(const struct clk_init_data) {
 508			.name = "cam_cc_pll8",
 509			.parent_data = &(const struct clk_parent_data) {
 510				.index = DT_BI_TCXO,
 511			},
 512			.num_parents = 1,
 513			.ops = &clk_alpha_pll_lucid_evo_ops,
 514		},
 515	},
 516};
 517
 518static const struct clk_div_table post_div_table_cam_cc_pll8_out_even[] = {
 519	{ 0x1, 2 },
 520	{ }
 521};
 522
 523static struct clk_alpha_pll_postdiv cam_cc_pll8_out_even = {
 524	.offset = 0x8000,
 525	.post_div_shift = 10,
 526	.post_div_table = post_div_table_cam_cc_pll8_out_even,
 527	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll8_out_even),
 528	.width = 4,
 529	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 530	.clkr.hw.init = &(const struct clk_init_data) {
 531		.name = "cam_cc_pll8_out_even",
 532		.parent_hws = (const struct clk_hw*[]) {
 533			&cam_cc_pll8.clkr.hw,
 534		},
 535		.num_parents = 1,
 536		.flags = CLK_SET_RATE_PARENT,
 537		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 538	},
 539};
 540
 541static const struct alpha_pll_config cam_cc_pll9_config = {
 542	.l = 0x32,
 543	.alpha = 0x0,
 544	.config_ctl_val = 0x20485699,
 545	.config_ctl_hi_val = 0x00182261,
 546	.config_ctl_hi1_val = 0x82aa299c,
 547	.test_ctl_val = 0x00000000,
 548	.test_ctl_hi_val = 0x00000003,
 549	.test_ctl_hi1_val = 0x00009000,
 550	.test_ctl_hi2_val = 0x00000034,
 551	.user_ctl_val = 0x00008400,
 552	.user_ctl_hi_val = 0x00000005,
 553};
 554
 555static struct clk_alpha_pll cam_cc_pll9 = {
 556	.offset = 0x9000,
 557	.vco_table = lucid_ole_vco,
 558	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 559	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 560	.clkr = {
 561		.hw.init = &(const struct clk_init_data) {
 562			.name = "cam_cc_pll9",
 563			.parent_data = &(const struct clk_parent_data) {
 564				.index = DT_BI_TCXO,
 565			},
 566			.num_parents = 1,
 567			.ops = &clk_alpha_pll_lucid_evo_ops,
 568		},
 569	},
 570};
 571
 572static const struct clk_div_table post_div_table_cam_cc_pll9_out_even[] = {
 573	{ 0x1, 2 },
 574	{ }
 575};
 576
 577static struct clk_alpha_pll_postdiv cam_cc_pll9_out_even = {
 578	.offset = 0x9000,
 579	.post_div_shift = 10,
 580	.post_div_table = post_div_table_cam_cc_pll9_out_even,
 581	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll9_out_even),
 582	.width = 4,
 583	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 584	.clkr.hw.init = &(const struct clk_init_data) {
 585		.name = "cam_cc_pll9_out_even",
 586		.parent_hws = (const struct clk_hw*[]) {
 587			&cam_cc_pll9.clkr.hw,
 588		},
 589		.num_parents = 1,
 590		.flags = CLK_SET_RATE_PARENT,
 591		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 592	},
 593};
 594
 595static const struct clk_div_table post_div_table_cam_cc_pll9_out_odd[] = {
 596	{ 0x2, 3 },
 597	{ }
 598};
 599
 600static struct clk_alpha_pll_postdiv cam_cc_pll9_out_odd = {
 601	.offset = 0x9000,
 602	.post_div_shift = 14,
 603	.post_div_table = post_div_table_cam_cc_pll9_out_odd,
 604	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll9_out_odd),
 605	.width = 4,
 606	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 607	.clkr.hw.init = &(const struct clk_init_data) {
 608		.name = "cam_cc_pll9_out_odd",
 609		.parent_hws = (const struct clk_hw*[]) {
 610			&cam_cc_pll9.clkr.hw,
 611		},
 612		.num_parents = 1,
 613		.flags = CLK_SET_RATE_PARENT,
 614		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 615	},
 616};
 617
 618static const struct alpha_pll_config cam_cc_pll10_config = {
 619	.l = 0x30,
 620	.alpha = 0x8aaa,
 621	.config_ctl_val = 0x20485699,
 622	.config_ctl_hi_val = 0x00182261,
 623	.config_ctl_hi1_val = 0x82aa299c,
 624	.test_ctl_val = 0x00000000,
 625	.test_ctl_hi_val = 0x00000003,
 626	.test_ctl_hi1_val = 0x00009000,
 627	.test_ctl_hi2_val = 0x00000034,
 628	.user_ctl_val = 0x00000400,
 629	.user_ctl_hi_val = 0x00000005,
 630};
 631
 632static struct clk_alpha_pll cam_cc_pll10 = {
 633	.offset = 0xa000,
 634	.vco_table = lucid_ole_vco,
 635	.num_vco = ARRAY_SIZE(lucid_ole_vco),
 636	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 637	.clkr = {
 638		.hw.init = &(const struct clk_init_data) {
 639			.name = "cam_cc_pll10",
 640			.parent_data = &(const struct clk_parent_data) {
 641				.index = DT_BI_TCXO,
 642			},
 643			.num_parents = 1,
 644			.ops = &clk_alpha_pll_lucid_evo_ops,
 645		},
 646	},
 647};
 648
 649static const struct clk_div_table post_div_table_cam_cc_pll10_out_even[] = {
 650	{ 0x1, 2 },
 651	{ }
 652};
 653
 654static struct clk_alpha_pll_postdiv cam_cc_pll10_out_even = {
 655	.offset = 0xa000,
 656	.post_div_shift = 10,
 657	.post_div_table = post_div_table_cam_cc_pll10_out_even,
 658	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll10_out_even),
 659	.width = 4,
 660	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
 661	.clkr.hw.init = &(const struct clk_init_data) {
 662		.name = "cam_cc_pll10_out_even",
 663		.parent_hws = (const struct clk_hw*[]) {
 664			&cam_cc_pll10.clkr.hw,
 665		},
 666		.num_parents = 1,
 667		.flags = CLK_SET_RATE_PARENT,
 668		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
 669	},
 670};
 671
 672static const struct parent_map cam_cc_parent_map_0[] = {
 673	{ P_BI_TCXO, 0 },
 674	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
 675	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
 676	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
 677	{ P_CAM_CC_PLL9_OUT_ODD, 4 },
 678	{ P_CAM_CC_PLL9_OUT_EVEN, 5 },
 679};
 680
 681static const struct clk_parent_data cam_cc_parent_data_0[] = {
 682	{ .index = DT_BI_TCXO },
 683	{ .hw = &cam_cc_pll0.clkr.hw },
 684	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
 685	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
 686	{ .hw = &cam_cc_pll9_out_odd.clkr.hw },
 687	{ .hw = &cam_cc_pll9_out_even.clkr.hw },
 688};
 689
 690static const struct parent_map cam_cc_parent_map_1[] = {
 691	{ P_BI_TCXO, 0 },
 692	{ P_CAM_CC_PLL2_OUT_EVEN, 3 },
 693	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
 694};
 695
 696static const struct clk_parent_data cam_cc_parent_data_1[] = {
 697	{ .index = DT_BI_TCXO },
 698	{ .hw = &cam_cc_pll2.clkr.hw },
 699	{ .hw = &cam_cc_pll2.clkr.hw },
 700};
 701
 702static const struct parent_map cam_cc_parent_map_2[] = {
 703	{ P_BI_TCXO, 0 },
 704	{ P_CAM_CC_PLL8_OUT_EVEN, 6 },
 705};
 706
 707static const struct clk_parent_data cam_cc_parent_data_2[] = {
 708	{ .index = DT_BI_TCXO },
 709	{ .hw = &cam_cc_pll8_out_even.clkr.hw },
 710};
 711
 712static const struct parent_map cam_cc_parent_map_3[] = {
 713	{ P_BI_TCXO, 0 },
 714	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
 715};
 716
 717static const struct clk_parent_data cam_cc_parent_data_3[] = {
 718	{ .index = DT_BI_TCXO },
 719	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
 720};
 721
 722static const struct parent_map cam_cc_parent_map_4[] = {
 723	{ P_BI_TCXO, 0 },
 724	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
 725};
 726
 727static const struct clk_parent_data cam_cc_parent_data_4[] = {
 728	{ .index = DT_BI_TCXO },
 729	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
 730};
 731
 732static const struct parent_map cam_cc_parent_map_5[] = {
 733	{ P_BI_TCXO, 0 },
 734	{ P_CAM_CC_PLL5_OUT_EVEN, 6 },
 735};
 736
 737static const struct clk_parent_data cam_cc_parent_data_5[] = {
 738	{ .index = DT_BI_TCXO },
 739	{ .hw = &cam_cc_pll5_out_even.clkr.hw },
 740};
 741
 742static const struct parent_map cam_cc_parent_map_6[] = {
 743	{ P_BI_TCXO, 0 },
 744	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
 745};
 746
 747static const struct clk_parent_data cam_cc_parent_data_6[] = {
 748	{ .index = DT_BI_TCXO },
 749	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
 750};
 751
 752static const struct parent_map cam_cc_parent_map_7[] = {
 753	{ P_BI_TCXO, 0 },
 754	{ P_CAM_CC_PLL6_OUT_EVEN, 6 },
 755};
 756
 757static const struct clk_parent_data cam_cc_parent_data_7[] = {
 758	{ .index = DT_BI_TCXO },
 759	{ .hw = &cam_cc_pll6_out_even.clkr.hw },
 760};
 761
 762static const struct parent_map cam_cc_parent_map_8[] = {
 763	{ P_BI_TCXO, 0 },
 764	{ P_CAM_CC_PLL7_OUT_EVEN, 6 },
 765};
 766
 767static const struct clk_parent_data cam_cc_parent_data_8[] = {
 768	{ .index = DT_BI_TCXO },
 769	{ .hw = &cam_cc_pll7_out_even.clkr.hw },
 770};
 771
 772static const struct parent_map cam_cc_parent_map_9[] = {
 773	{ P_BI_TCXO, 0 },
 774	{ P_CAM_CC_PLL10_OUT_EVEN, 6 },
 775};
 776
 777static const struct clk_parent_data cam_cc_parent_data_9[] = {
 778	{ .index = DT_BI_TCXO },
 779	{ .hw = &cam_cc_pll10_out_even.clkr.hw },
 780};
 781
 782static const struct parent_map cam_cc_parent_map_10[] = {
 783	{ P_SLEEP_CLK, 0 },
 784};
 785
 786static const struct clk_parent_data cam_cc_parent_data_10[] = {
 787	{ .index = DT_SLEEP_CLK },
 788};
 789
 790static const struct parent_map cam_cc_parent_map_11_ao[] = {
 791	{ P_BI_TCXO_AO, 0 },
 792};
 793
 794static const struct clk_parent_data cam_cc_parent_data_11_ao[] = {
 795	{ .index = DT_BI_TCXO_AO },
 796};
 797
 798static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
 799	F(19200000, P_BI_TCXO, 1, 0, 0),
 800	F(200000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
 801	F(400000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
 802	F(480000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
 803	F(785000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
 804	{ }
 805};
 806
 807static struct clk_rcg2 cam_cc_bps_clk_src = {
 808	.cmd_rcgr = 0x10050,
 809	.mnd_width = 0,
 810	.hid_width = 5,
 811	.parent_map = cam_cc_parent_map_2,
 812	.freq_tbl = ftbl_cam_cc_bps_clk_src,
 813	.clkr.hw.init = &(const struct clk_init_data) {
 814		.name = "cam_cc_bps_clk_src",
 815		.parent_data = cam_cc_parent_data_2,
 816		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
 817		.flags = CLK_SET_RATE_PARENT,
 818		.ops = &clk_rcg2_shared_ops,
 819	},
 820};
 821
 822static const struct freq_tbl ftbl_cam_cc_camnoc_axi_rt_clk_src[] = {
 823	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
 824	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
 825	{ }
 826};
 827
 828static struct clk_rcg2 cam_cc_camnoc_axi_rt_clk_src = {
 829	.cmd_rcgr = 0x1325c,
 830	.mnd_width = 0,
 831	.hid_width = 5,
 832	.parent_map = cam_cc_parent_map_0,
 833	.freq_tbl = ftbl_cam_cc_camnoc_axi_rt_clk_src,
 834	.clkr.hw.init = &(const struct clk_init_data) {
 835		.name = "cam_cc_camnoc_axi_rt_clk_src",
 836		.parent_data = cam_cc_parent_data_0,
 837		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 838		.flags = CLK_SET_RATE_PARENT,
 839		.ops = &clk_rcg2_shared_ops,
 840	},
 841};
 842
 843static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
 844	F(19200000, P_BI_TCXO, 1, 0, 0),
 845	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
 846	{ }
 847};
 848
 849static struct clk_rcg2 cam_cc_cci_0_clk_src = {
 850	.cmd_rcgr = 0x131cc,
 851	.mnd_width = 8,
 852	.hid_width = 5,
 853	.parent_map = cam_cc_parent_map_0,
 854	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
 855	.clkr.hw.init = &(const struct clk_init_data) {
 856		.name = "cam_cc_cci_0_clk_src",
 857		.parent_data = cam_cc_parent_data_0,
 858		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 859		.flags = CLK_SET_RATE_PARENT,
 860		.ops = &clk_rcg2_shared_ops,
 861	},
 862};
 863
 864static struct clk_rcg2 cam_cc_cci_1_clk_src = {
 865	.cmd_rcgr = 0x131e8,
 866	.mnd_width = 8,
 867	.hid_width = 5,
 868	.parent_map = cam_cc_parent_map_0,
 869	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
 870	.clkr.hw.init = &(const struct clk_init_data) {
 871		.name = "cam_cc_cci_1_clk_src",
 872		.parent_data = cam_cc_parent_data_0,
 873		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 874		.flags = CLK_SET_RATE_PARENT,
 875		.ops = &clk_rcg2_shared_ops,
 876	},
 877};
 878
 879static struct clk_rcg2 cam_cc_cci_2_clk_src = {
 880	.cmd_rcgr = 0x13204,
 881	.mnd_width = 8,
 882	.hid_width = 5,
 883	.parent_map = cam_cc_parent_map_0,
 884	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
 885	.clkr.hw.init = &(const struct clk_init_data) {
 886		.name = "cam_cc_cci_2_clk_src",
 887		.parent_data = cam_cc_parent_data_0,
 888		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 889		.flags = CLK_SET_RATE_PARENT,
 890		.ops = &clk_rcg2_shared_ops,
 891	},
 892};
 893
 894static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
 895	F(19200000, P_BI_TCXO, 1, 0, 0),
 896	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
 897	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
 898	{ }
 899};
 900
 901static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
 902	.cmd_rcgr = 0x1104c,
 903	.mnd_width = 0,
 904	.hid_width = 5,
 905	.parent_map = cam_cc_parent_map_0,
 906	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
 907	.clkr.hw.init = &(const struct clk_init_data) {
 908		.name = "cam_cc_cphy_rx_clk_src",
 909		.parent_data = cam_cc_parent_data_0,
 910		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 911		.flags = CLK_SET_RATE_PARENT,
 912		.ops = &clk_rcg2_shared_ops,
 913	},
 914};
 915
 916static const struct freq_tbl ftbl_cam_cc_cre_clk_src[] = {
 917	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
 918	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
 919	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
 920	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
 921	{ }
 922};
 923
 924static struct clk_rcg2 cam_cc_cre_clk_src = {
 925	.cmd_rcgr = 0x13144,
 926	.mnd_width = 0,
 927	.hid_width = 5,
 928	.parent_map = cam_cc_parent_map_0,
 929	.freq_tbl = ftbl_cam_cc_cre_clk_src,
 930	.clkr.hw.init = &(const struct clk_init_data) {
 931		.name = "cam_cc_cre_clk_src",
 932		.parent_data = cam_cc_parent_data_0,
 933		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 934		.flags = CLK_SET_RATE_PARENT,
 935		.ops = &clk_rcg2_shared_ops,
 936	},
 937};
 938
 939static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
 940	F(19200000, P_BI_TCXO, 1, 0, 0),
 941	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
 942	{ }
 943};
 944
 945static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
 946	.cmd_rcgr = 0x150e0,
 947	.mnd_width = 0,
 948	.hid_width = 5,
 949	.parent_map = cam_cc_parent_map_0,
 950	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 951	.clkr.hw.init = &(const struct clk_init_data) {
 952		.name = "cam_cc_csi0phytimer_clk_src",
 953		.parent_data = cam_cc_parent_data_0,
 954		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 955		.flags = CLK_SET_RATE_PARENT,
 956		.ops = &clk_rcg2_shared_ops,
 957	},
 958};
 959
 960static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
 961	.cmd_rcgr = 0x15104,
 962	.mnd_width = 0,
 963	.hid_width = 5,
 964	.parent_map = cam_cc_parent_map_0,
 965	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 966	.clkr.hw.init = &(const struct clk_init_data) {
 967		.name = "cam_cc_csi1phytimer_clk_src",
 968		.parent_data = cam_cc_parent_data_0,
 969		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 970		.flags = CLK_SET_RATE_PARENT,
 971		.ops = &clk_rcg2_shared_ops,
 972	},
 973};
 974
 975static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
 976	.cmd_rcgr = 0x15124,
 977	.mnd_width = 0,
 978	.hid_width = 5,
 979	.parent_map = cam_cc_parent_map_0,
 980	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 981	.clkr.hw.init = &(const struct clk_init_data) {
 982		.name = "cam_cc_csi2phytimer_clk_src",
 983		.parent_data = cam_cc_parent_data_0,
 984		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
 985		.flags = CLK_SET_RATE_PARENT,
 986		.ops = &clk_rcg2_shared_ops,
 987	},
 988};
 989
 990static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
 991	.cmd_rcgr = 0x15144,
 992	.mnd_width = 0,
 993	.hid_width = 5,
 994	.parent_map = cam_cc_parent_map_0,
 995	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
 996	.clkr.hw.init = &(const struct clk_init_data) {
 997		.name = "cam_cc_csi3phytimer_clk_src",
 998		.parent_data = cam_cc_parent_data_0,
 999		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1000		.flags = CLK_SET_RATE_PARENT,
1001		.ops = &clk_rcg2_shared_ops,
1002	},
1003};
1004
1005static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
1006	.cmd_rcgr = 0x15164,
1007	.mnd_width = 0,
1008	.hid_width = 5,
1009	.parent_map = cam_cc_parent_map_0,
1010	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1011	.clkr.hw.init = &(const struct clk_init_data) {
1012		.name = "cam_cc_csi4phytimer_clk_src",
1013		.parent_data = cam_cc_parent_data_0,
1014		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1015		.flags = CLK_SET_RATE_PARENT,
1016		.ops = &clk_rcg2_shared_ops,
1017	},
1018};
1019
1020static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
1021	.cmd_rcgr = 0x15184,
1022	.mnd_width = 0,
1023	.hid_width = 5,
1024	.parent_map = cam_cc_parent_map_0,
1025	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1026	.clkr.hw.init = &(const struct clk_init_data) {
1027		.name = "cam_cc_csi5phytimer_clk_src",
1028		.parent_data = cam_cc_parent_data_0,
1029		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1030		.flags = CLK_SET_RATE_PARENT,
1031		.ops = &clk_rcg2_shared_ops,
1032	},
1033};
1034
1035static struct clk_rcg2 cam_cc_csi6phytimer_clk_src = {
1036	.cmd_rcgr = 0x151a4,
1037	.mnd_width = 0,
1038	.hid_width = 5,
1039	.parent_map = cam_cc_parent_map_0,
1040	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1041	.clkr.hw.init = &(const struct clk_init_data) {
1042		.name = "cam_cc_csi6phytimer_clk_src",
1043		.parent_data = cam_cc_parent_data_0,
1044		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1045		.flags = CLK_SET_RATE_PARENT,
1046		.ops = &clk_rcg2_shared_ops,
1047	},
1048};
1049
1050static struct clk_rcg2 cam_cc_csi7phytimer_clk_src = {
1051	.cmd_rcgr = 0x151c4,
1052	.mnd_width = 0,
1053	.hid_width = 5,
1054	.parent_map = cam_cc_parent_map_0,
1055	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
1056	.clkr.hw.init = &(const struct clk_init_data) {
1057		.name = "cam_cc_csi7phytimer_clk_src",
1058		.parent_data = cam_cc_parent_data_0,
1059		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1060		.flags = CLK_SET_RATE_PARENT,
1061		.ops = &clk_rcg2_shared_ops,
1062	},
1063};
1064
1065static const struct freq_tbl ftbl_cam_cc_csid_clk_src[] = {
1066	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1067	F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
1068	{ }
1069};
1070
1071static struct clk_rcg2 cam_cc_csid_clk_src = {
1072	.cmd_rcgr = 0x13238,
1073	.mnd_width = 0,
1074	.hid_width = 5,
1075	.parent_map = cam_cc_parent_map_0,
1076	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1077	.clkr.hw.init = &(const struct clk_init_data) {
1078		.name = "cam_cc_csid_clk_src",
1079		.parent_data = cam_cc_parent_data_0,
1080		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1081		.flags = CLK_SET_RATE_PARENT,
1082		.ops = &clk_rcg2_shared_ops,
1083	},
1084};
1085
1086static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
1087	F(19200000, P_BI_TCXO, 1, 0, 0),
1088	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
1089	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
1090	{ }
1091};
1092
1093static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
1094	.cmd_rcgr = 0x10018,
1095	.mnd_width = 0,
1096	.hid_width = 5,
1097	.parent_map = cam_cc_parent_map_0,
1098	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
1099	.clkr.hw.init = &(const struct clk_init_data) {
1100		.name = "cam_cc_fast_ahb_clk_src",
1101		.parent_data = cam_cc_parent_data_0,
1102		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1103		.flags = CLK_SET_RATE_PARENT,
1104		.ops = &clk_rcg2_shared_ops,
1105	},
1106};
1107
1108static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
1109	F(19200000, P_BI_TCXO, 1, 0, 0),
1110	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1111	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1112	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
1113	{ }
1114};
1115
1116static struct clk_rcg2 cam_cc_icp_clk_src = {
1117	.cmd_rcgr = 0x131a4,
1118	.mnd_width = 0,
1119	.hid_width = 5,
1120	.parent_map = cam_cc_parent_map_0,
1121	.freq_tbl = ftbl_cam_cc_icp_clk_src,
1122	.clkr.hw.init = &(const struct clk_init_data) {
1123		.name = "cam_cc_icp_clk_src",
1124		.parent_data = cam_cc_parent_data_0,
1125		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1126		.flags = CLK_SET_RATE_PARENT,
1127		.ops = &clk_rcg2_shared_ops,
1128	},
1129};
1130
1131static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
1132	F(19200000, P_BI_TCXO, 1, 0, 0),
1133	F(466000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1134	F(594000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1135	F(675000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1136	F(785000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
1137	{ }
1138};
1139
1140static struct clk_rcg2 cam_cc_ife_0_clk_src = {
1141	.cmd_rcgr = 0x11018,
1142	.mnd_width = 0,
1143	.hid_width = 5,
1144	.parent_map = cam_cc_parent_map_3,
1145	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
1146	.clkr.hw.init = &(const struct clk_init_data) {
1147		.name = "cam_cc_ife_0_clk_src",
1148		.parent_data = cam_cc_parent_data_3,
1149		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
1150		.flags = CLK_SET_RATE_PARENT,
1151		.ops = &clk_rcg2_shared_ops,
1152	},
1153};
1154
1155static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
1156	F(19200000, P_BI_TCXO, 1, 0, 0),
1157	F(466000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1158	F(594000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1159	F(675000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1160	F(785000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
1161	{ }
1162};
1163
1164static struct clk_rcg2 cam_cc_ife_1_clk_src = {
1165	.cmd_rcgr = 0x12018,
1166	.mnd_width = 0,
1167	.hid_width = 5,
1168	.parent_map = cam_cc_parent_map_4,
1169	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
1170	.clkr.hw.init = &(const struct clk_init_data) {
1171		.name = "cam_cc_ife_1_clk_src",
1172		.parent_data = cam_cc_parent_data_4,
1173		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
1174		.flags = CLK_SET_RATE_PARENT,
1175		.ops = &clk_rcg2_shared_ops,
1176	},
1177};
1178
1179static const struct freq_tbl ftbl_cam_cc_ife_2_clk_src[] = {
1180	F(19200000, P_BI_TCXO, 1, 0, 0),
1181	F(466000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1182	F(594000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1183	F(675000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1184	F(785000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
1185	{ }
1186};
1187
1188static struct clk_rcg2 cam_cc_ife_2_clk_src = {
1189	.cmd_rcgr = 0x12068,
1190	.mnd_width = 0,
1191	.hid_width = 5,
1192	.parent_map = cam_cc_parent_map_5,
1193	.freq_tbl = ftbl_cam_cc_ife_2_clk_src,
1194	.clkr.hw.init = &(const struct clk_init_data) {
1195		.name = "cam_cc_ife_2_clk_src",
1196		.parent_data = cam_cc_parent_data_5,
1197		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
1198		.flags = CLK_SET_RATE_PARENT,
1199		.ops = &clk_rcg2_shared_ops,
1200	},
1201};
1202
1203static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
1204	.cmd_rcgr = 0x13000,
1205	.mnd_width = 0,
1206	.hid_width = 5,
1207	.parent_map = cam_cc_parent_map_0,
1208	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1209	.clkr.hw.init = &(const struct clk_init_data) {
1210		.name = "cam_cc_ife_lite_clk_src",
1211		.parent_data = cam_cc_parent_data_0,
1212		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1213		.flags = CLK_SET_RATE_PARENT,
1214		.ops = &clk_rcg2_shared_ops,
1215	},
1216};
1217
1218static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
1219	.cmd_rcgr = 0x13028,
1220	.mnd_width = 0,
1221	.hid_width = 5,
1222	.parent_map = cam_cc_parent_map_0,
1223	.freq_tbl = ftbl_cam_cc_csid_clk_src,
1224	.clkr.hw.init = &(const struct clk_init_data) {
1225		.name = "cam_cc_ife_lite_csid_clk_src",
1226		.parent_data = cam_cc_parent_data_0,
1227		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1228		.flags = CLK_SET_RATE_PARENT,
1229		.ops = &clk_rcg2_shared_ops,
1230	},
1231};
1232
1233static const struct freq_tbl ftbl_cam_cc_ipe_nps_clk_src[] = {
1234	F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1235	F(575000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1236	F(675000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1237	F(825000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
1238	{ }
1239};
1240
1241static struct clk_rcg2 cam_cc_ipe_nps_clk_src = {
1242	.cmd_rcgr = 0x10094,
1243	.mnd_width = 0,
1244	.hid_width = 5,
1245	.parent_map = cam_cc_parent_map_6,
1246	.freq_tbl = ftbl_cam_cc_ipe_nps_clk_src,
1247	.clkr.hw.init = &(const struct clk_init_data) {
1248		.name = "cam_cc_ipe_nps_clk_src",
1249		.parent_data = cam_cc_parent_data_6,
1250		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
1251		.flags = CLK_SET_RATE_PARENT,
1252		.ops = &clk_rcg2_shared_ops,
1253	},
1254};
1255
1256static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = {
1257	F(19200000, P_BI_TCXO, 1, 0, 0),
1258	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
1259	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
1260	F(480000000, P_CAM_CC_PLL9_OUT_EVEN, 1, 0, 0),
1261	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
1262	{ }
1263};
1264
1265static struct clk_rcg2 cam_cc_jpeg_clk_src = {
1266	.cmd_rcgr = 0x13168,
1267	.mnd_width = 0,
1268	.hid_width = 5,
1269	.parent_map = cam_cc_parent_map_0,
1270	.freq_tbl = ftbl_cam_cc_jpeg_clk_src,
1271	.clkr.hw.init = &(const struct clk_init_data) {
1272		.name = "cam_cc_jpeg_clk_src",
1273		.parent_data = cam_cc_parent_data_0,
1274		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1275		.flags = CLK_SET_RATE_PARENT,
1276		.ops = &clk_rcg2_shared_ops,
1277	},
1278};
1279
1280static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
1281	F(19200000, P_BI_TCXO, 1, 0, 0),
1282	F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 4),
1283	F(68571429, P_CAM_CC_PLL2_OUT_MAIN, 14, 0, 0),
1284	{ }
1285};
1286
1287static struct clk_rcg2 cam_cc_mclk0_clk_src = {
1288	.cmd_rcgr = 0x15000,
1289	.mnd_width = 8,
1290	.hid_width = 5,
1291	.parent_map = cam_cc_parent_map_1,
1292	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1293	.clkr.hw.init = &(const struct clk_init_data) {
1294		.name = "cam_cc_mclk0_clk_src",
1295		.parent_data = cam_cc_parent_data_1,
1296		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1297		.flags = CLK_SET_RATE_PARENT,
1298		.ops = &clk_rcg2_shared_ops,
1299	},
1300};
1301
1302static struct clk_rcg2 cam_cc_mclk1_clk_src = {
1303	.cmd_rcgr = 0x1501c,
1304	.mnd_width = 8,
1305	.hid_width = 5,
1306	.parent_map = cam_cc_parent_map_1,
1307	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1308	.clkr.hw.init = &(const struct clk_init_data) {
1309		.name = "cam_cc_mclk1_clk_src",
1310		.parent_data = cam_cc_parent_data_1,
1311		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1312		.flags = CLK_SET_RATE_PARENT,
1313		.ops = &clk_rcg2_shared_ops,
1314	},
1315};
1316
1317static struct clk_rcg2 cam_cc_mclk2_clk_src = {
1318	.cmd_rcgr = 0x15038,
1319	.mnd_width = 8,
1320	.hid_width = 5,
1321	.parent_map = cam_cc_parent_map_1,
1322	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1323	.clkr.hw.init = &(const struct clk_init_data) {
1324		.name = "cam_cc_mclk2_clk_src",
1325		.parent_data = cam_cc_parent_data_1,
1326		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1327		.flags = CLK_SET_RATE_PARENT,
1328		.ops = &clk_rcg2_shared_ops,
1329	},
1330};
1331
1332static struct clk_rcg2 cam_cc_mclk3_clk_src = {
1333	.cmd_rcgr = 0x15054,
1334	.mnd_width = 8,
1335	.hid_width = 5,
1336	.parent_map = cam_cc_parent_map_1,
1337	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1338	.clkr.hw.init = &(const struct clk_init_data) {
1339		.name = "cam_cc_mclk3_clk_src",
1340		.parent_data = cam_cc_parent_data_1,
1341		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1342		.flags = CLK_SET_RATE_PARENT,
1343		.ops = &clk_rcg2_shared_ops,
1344	},
1345};
1346
1347static struct clk_rcg2 cam_cc_mclk4_clk_src = {
1348	.cmd_rcgr = 0x15070,
1349	.mnd_width = 8,
1350	.hid_width = 5,
1351	.parent_map = cam_cc_parent_map_1,
1352	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1353	.clkr.hw.init = &(const struct clk_init_data) {
1354		.name = "cam_cc_mclk4_clk_src",
1355		.parent_data = cam_cc_parent_data_1,
1356		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1357		.flags = CLK_SET_RATE_PARENT,
1358		.ops = &clk_rcg2_shared_ops,
1359	},
1360};
1361
1362static struct clk_rcg2 cam_cc_mclk5_clk_src = {
1363	.cmd_rcgr = 0x1508c,
1364	.mnd_width = 8,
1365	.hid_width = 5,
1366	.parent_map = cam_cc_parent_map_1,
1367	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1368	.clkr.hw.init = &(const struct clk_init_data) {
1369		.name = "cam_cc_mclk5_clk_src",
1370		.parent_data = cam_cc_parent_data_1,
1371		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1372		.flags = CLK_SET_RATE_PARENT,
1373		.ops = &clk_rcg2_shared_ops,
1374	},
1375};
1376
1377static struct clk_rcg2 cam_cc_mclk6_clk_src = {
1378	.cmd_rcgr = 0x150a8,
1379	.mnd_width = 8,
1380	.hid_width = 5,
1381	.parent_map = cam_cc_parent_map_1,
1382	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1383	.clkr.hw.init = &(const struct clk_init_data) {
1384		.name = "cam_cc_mclk6_clk_src",
1385		.parent_data = cam_cc_parent_data_1,
1386		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1387		.flags = CLK_SET_RATE_PARENT,
1388		.ops = &clk_rcg2_shared_ops,
1389	},
1390};
1391
1392static struct clk_rcg2 cam_cc_mclk7_clk_src = {
1393	.cmd_rcgr = 0x150c4,
1394	.mnd_width = 8,
1395	.hid_width = 5,
1396	.parent_map = cam_cc_parent_map_1,
1397	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
1398	.clkr.hw.init = &(const struct clk_init_data) {
1399		.name = "cam_cc_mclk7_clk_src",
1400		.parent_data = cam_cc_parent_data_1,
1401		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
1402		.flags = CLK_SET_RATE_PARENT,
1403		.ops = &clk_rcg2_shared_ops,
1404	},
1405};
1406
1407static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1408	F(19200000, P_BI_TCXO, 1, 0, 0),
1409	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1410	F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1411	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1412	{ }
1413};
1414
1415static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1416	.cmd_rcgr = 0x1329c,
1417	.mnd_width = 0,
1418	.hid_width = 5,
1419	.parent_map = cam_cc_parent_map_0,
1420	.freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1421	.clkr.hw.init = &(const struct clk_init_data) {
1422		.name = "cam_cc_qdss_debug_clk_src",
1423		.parent_data = cam_cc_parent_data_0,
1424		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1425		.flags = CLK_SET_RATE_PARENT,
1426		.ops = &clk_rcg2_shared_ops,
1427	},
1428};
1429
1430static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
1431	F(466000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1432	F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1433	F(675000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1434	F(785000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
1435	{ }
1436};
1437
1438static struct clk_rcg2 cam_cc_sfe_0_clk_src = {
1439	.cmd_rcgr = 0x1306c,
1440	.mnd_width = 0,
1441	.hid_width = 5,
1442	.parent_map = cam_cc_parent_map_7,
1443	.freq_tbl = ftbl_cam_cc_sfe_0_clk_src,
1444	.clkr.hw.init = &(const struct clk_init_data) {
1445		.name = "cam_cc_sfe_0_clk_src",
1446		.parent_data = cam_cc_parent_data_7,
1447		.num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
1448		.flags = CLK_SET_RATE_PARENT,
1449		.ops = &clk_rcg2_shared_ops,
1450	},
1451};
1452
1453static const struct freq_tbl ftbl_cam_cc_sfe_1_clk_src[] = {
1454	F(466000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1455	F(594000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1456	F(675000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1457	F(785000000, P_CAM_CC_PLL7_OUT_EVEN, 1, 0, 0),
1458	{ }
1459};
1460
1461static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
1462	.cmd_rcgr = 0x130bc,
1463	.mnd_width = 0,
1464	.hid_width = 5,
1465	.parent_map = cam_cc_parent_map_8,
1466	.freq_tbl = ftbl_cam_cc_sfe_1_clk_src,
1467	.clkr.hw.init = &(const struct clk_init_data) {
1468		.name = "cam_cc_sfe_1_clk_src",
1469		.parent_data = cam_cc_parent_data_8,
1470		.num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
1471		.flags = CLK_SET_RATE_PARENT,
1472		.ops = &clk_rcg2_shared_ops,
1473	},
1474};
1475
1476static const struct freq_tbl ftbl_cam_cc_sfe_2_clk_src[] = {
1477	F(466000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1478	F(594000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1479	F(675000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1480	F(785000000, P_CAM_CC_PLL10_OUT_EVEN, 1, 0, 0),
1481	{ }
1482};
1483
1484static struct clk_rcg2 cam_cc_sfe_2_clk_src = {
1485	.cmd_rcgr = 0x1310c,
1486	.mnd_width = 0,
1487	.hid_width = 5,
1488	.parent_map = cam_cc_parent_map_9,
1489	.freq_tbl = ftbl_cam_cc_sfe_2_clk_src,
1490	.clkr.hw.init = &(const struct clk_init_data) {
1491		.name = "cam_cc_sfe_2_clk_src",
1492		.parent_data = cam_cc_parent_data_9,
1493		.num_parents = ARRAY_SIZE(cam_cc_parent_data_9),
1494		.flags = CLK_SET_RATE_PARENT,
1495		.ops = &clk_rcg2_shared_ops,
1496	},
1497};
1498
1499static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1500	F(32000, P_SLEEP_CLK, 1, 0, 0),
1501	{ }
1502};
1503
1504static struct clk_rcg2 cam_cc_sleep_clk_src = {
1505	.cmd_rcgr = 0x132f0,
1506	.mnd_width = 0,
1507	.hid_width = 5,
1508	.parent_map = cam_cc_parent_map_10,
1509	.freq_tbl = ftbl_cam_cc_sleep_clk_src,
1510	.clkr.hw.init = &(const struct clk_init_data) {
1511		.name = "cam_cc_sleep_clk_src",
1512		.parent_data = cam_cc_parent_data_10,
1513		.num_parents = ARRAY_SIZE(cam_cc_parent_data_10),
1514		.flags = CLK_SET_RATE_PARENT,
1515		.ops = &clk_rcg2_shared_ops,
1516	},
1517};
1518
1519static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
1520	F(19200000, P_BI_TCXO, 1, 0, 0),
1521	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
1522	{ }
1523};
1524
1525static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
1526	.cmd_rcgr = 0x10034,
1527	.mnd_width = 0,
1528	.hid_width = 5,
1529	.parent_map = cam_cc_parent_map_0,
1530	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
1531	.clkr.hw.init = &(const struct clk_init_data) {
1532		.name = "cam_cc_slow_ahb_clk_src",
1533		.parent_data = cam_cc_parent_data_0,
1534		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1535		.flags = CLK_SET_RATE_PARENT,
1536		.ops = &clk_rcg2_shared_ops,
1537	},
1538};
1539
1540static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1541	F(19200000, P_BI_TCXO_AO, 1, 0, 0),
1542	{ }
1543};
1544
1545static struct clk_rcg2 cam_cc_xo_clk_src = {
1546	.cmd_rcgr = 0x132d4,
1547	.mnd_width = 0,
1548	.hid_width = 5,
1549	.parent_map = cam_cc_parent_map_11_ao,
1550	.freq_tbl = ftbl_cam_cc_xo_clk_src,
1551	.clkr.hw.init = &(const struct clk_init_data) {
1552		.name = "cam_cc_xo_clk_src",
1553		.parent_data = cam_cc_parent_data_11_ao,
1554		.num_parents = ARRAY_SIZE(cam_cc_parent_data_11_ao),
1555		.flags = CLK_SET_RATE_PARENT,
1556		.ops = &clk_rcg2_shared_ops,
1557	},
1558};
1559
1560static struct clk_branch cam_cc_bps_ahb_clk = {
1561	.halt_reg = 0x1004c,
1562	.halt_check = BRANCH_HALT,
1563	.clkr = {
1564		.enable_reg = 0x1004c,
1565		.enable_mask = BIT(0),
1566		.hw.init = &(const struct clk_init_data) {
1567			.name = "cam_cc_bps_ahb_clk",
1568			.parent_hws = (const struct clk_hw*[]) {
1569				&cam_cc_slow_ahb_clk_src.clkr.hw,
1570			},
1571			.num_parents = 1,
1572			.flags = CLK_SET_RATE_PARENT,
1573			.ops = &clk_branch2_ops,
1574		},
1575	},
1576};
1577
1578static struct clk_branch cam_cc_bps_clk = {
1579	.halt_reg = 0x10068,
1580	.halt_check = BRANCH_HALT,
1581	.clkr = {
1582		.enable_reg = 0x10068,
1583		.enable_mask = BIT(0),
1584		.hw.init = &(const struct clk_init_data) {
1585			.name = "cam_cc_bps_clk",
1586			.parent_hws = (const struct clk_hw*[]) {
1587				&cam_cc_bps_clk_src.clkr.hw,
1588			},
1589			.num_parents = 1,
1590			.flags = CLK_SET_RATE_PARENT,
1591			.ops = &clk_branch2_ops,
1592		},
1593	},
1594};
1595
1596static struct clk_branch cam_cc_bps_fast_ahb_clk = {
1597	.halt_reg = 0x10030,
1598	.halt_check = BRANCH_HALT,
1599	.clkr = {
1600		.enable_reg = 0x10030,
1601		.enable_mask = BIT(0),
1602		.hw.init = &(const struct clk_init_data) {
1603			.name = "cam_cc_bps_fast_ahb_clk",
1604			.parent_hws = (const struct clk_hw*[]) {
1605				&cam_cc_fast_ahb_clk_src.clkr.hw,
1606			},
1607			.num_parents = 1,
1608			.flags = CLK_SET_RATE_PARENT,
1609			.ops = &clk_branch2_ops,
1610		},
1611	},
1612};
1613
1614static struct clk_branch cam_cc_bps_shift_clk = {
1615	.halt_reg = 0x10078,
1616	.halt_check = BRANCH_HALT_VOTED,
1617	.clkr = {
1618		.enable_reg = 0x10078,
1619		.enable_mask = BIT(0),
1620		.hw.init = &(const struct clk_init_data) {
1621			.name = "cam_cc_bps_shift_clk",
1622			.parent_hws = (const struct clk_hw*[]) {
1623				&cam_cc_xo_clk_src.clkr.hw,
1624			},
1625			.num_parents = 1,
1626			.flags = CLK_SET_RATE_PARENT,
1627			.ops = &clk_branch2_ops,
1628		},
1629	},
1630};
1631
1632static struct clk_branch cam_cc_camnoc_axi_nrt_clk = {
1633	.halt_reg = 0x13284,
1634	.halt_check = BRANCH_HALT,
1635	.clkr = {
1636		.enable_reg = 0x13284,
1637		.enable_mask = BIT(0),
1638		.hw.init = &(const struct clk_init_data) {
1639			.name = "cam_cc_camnoc_axi_nrt_clk",
1640			.parent_hws = (const struct clk_hw*[]) {
1641				&cam_cc_camnoc_axi_rt_clk_src.clkr.hw,
1642			},
1643			.num_parents = 1,
1644			.flags = CLK_SET_RATE_PARENT,
1645			.ops = &clk_branch2_ops,
1646		},
1647	},
1648};
1649
1650static struct clk_branch cam_cc_camnoc_axi_rt_clk = {
1651	.halt_reg = 0x13274,
1652	.halt_check = BRANCH_HALT,
1653	.clkr = {
1654		.enable_reg = 0x13274,
1655		.enable_mask = BIT(0),
1656		.hw.init = &(const struct clk_init_data) {
1657			.name = "cam_cc_camnoc_axi_rt_clk",
1658			.parent_hws = (const struct clk_hw*[]) {
1659				&cam_cc_camnoc_axi_rt_clk_src.clkr.hw,
1660			},
1661			.num_parents = 1,
1662			.flags = CLK_SET_RATE_PARENT,
1663			.ops = &clk_branch2_ops,
1664		},
1665	},
1666};
1667
1668static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1669	.halt_reg = 0x13290,
1670	.halt_check = BRANCH_HALT,
1671	.clkr = {
1672		.enable_reg = 0x13290,
1673		.enable_mask = BIT(0),
1674		.hw.init = &(const struct clk_init_data) {
1675			.name = "cam_cc_camnoc_dcd_xo_clk",
1676			.parent_hws = (const struct clk_hw*[]) {
1677				&cam_cc_xo_clk_src.clkr.hw,
1678			},
1679			.num_parents = 1,
1680			.flags = CLK_SET_RATE_PARENT,
1681			.ops = &clk_branch2_ops,
1682		},
1683	},
1684};
1685
1686static struct clk_branch cam_cc_camnoc_xo_clk = {
1687	.halt_reg = 0x13294,
1688	.halt_check = BRANCH_HALT,
1689	.clkr = {
1690		.enable_reg = 0x13294,
1691		.enable_mask = BIT(0),
1692		.hw.init = &(const struct clk_init_data) {
1693			.name = "cam_cc_camnoc_xo_clk",
1694			.parent_hws = (const struct clk_hw*[]) {
1695				&cam_cc_xo_clk_src.clkr.hw,
1696			},
1697			.num_parents = 1,
1698			.flags = CLK_SET_RATE_PARENT,
1699			.ops = &clk_branch2_ops,
1700		},
1701	},
1702};
1703
1704static struct clk_branch cam_cc_cci_0_clk = {
1705	.halt_reg = 0x131e4,
1706	.halt_check = BRANCH_HALT,
1707	.clkr = {
1708		.enable_reg = 0x131e4,
1709		.enable_mask = BIT(0),
1710		.hw.init = &(const struct clk_init_data) {
1711			.name = "cam_cc_cci_0_clk",
1712			.parent_hws = (const struct clk_hw*[]) {
1713				&cam_cc_cci_0_clk_src.clkr.hw,
1714			},
1715			.num_parents = 1,
1716			.flags = CLK_SET_RATE_PARENT,
1717			.ops = &clk_branch2_ops,
1718		},
1719	},
1720};
1721
1722static struct clk_branch cam_cc_cci_1_clk = {
1723	.halt_reg = 0x13200,
1724	.halt_check = BRANCH_HALT,
1725	.clkr = {
1726		.enable_reg = 0x13200,
1727		.enable_mask = BIT(0),
1728		.hw.init = &(const struct clk_init_data) {
1729			.name = "cam_cc_cci_1_clk",
1730			.parent_hws = (const struct clk_hw*[]) {
1731				&cam_cc_cci_1_clk_src.clkr.hw,
1732			},
1733			.num_parents = 1,
1734			.flags = CLK_SET_RATE_PARENT,
1735			.ops = &clk_branch2_ops,
1736		},
1737	},
1738};
1739
1740static struct clk_branch cam_cc_cci_2_clk = {
1741	.halt_reg = 0x1321c,
1742	.halt_check = BRANCH_HALT,
1743	.clkr = {
1744		.enable_reg = 0x1321c,
1745		.enable_mask = BIT(0),
1746		.hw.init = &(const struct clk_init_data) {
1747			.name = "cam_cc_cci_2_clk",
1748			.parent_hws = (const struct clk_hw*[]) {
1749				&cam_cc_cci_2_clk_src.clkr.hw,
1750			},
1751			.num_parents = 1,
1752			.flags = CLK_SET_RATE_PARENT,
1753			.ops = &clk_branch2_ops,
1754		},
1755	},
1756};
1757
1758static struct clk_branch cam_cc_core_ahb_clk = {
1759	.halt_reg = 0x132d0,
1760	.halt_check = BRANCH_HALT_DELAY,
1761	.clkr = {
1762		.enable_reg = 0x132d0,
1763		.enable_mask = BIT(0),
1764		.hw.init = &(const struct clk_init_data) {
1765			.name = "cam_cc_core_ahb_clk",
1766			.parent_hws = (const struct clk_hw*[]) {
1767				&cam_cc_slow_ahb_clk_src.clkr.hw,
1768			},
1769			.num_parents = 1,
1770			.flags = CLK_SET_RATE_PARENT,
1771			.ops = &clk_branch2_ops,
1772		},
1773	},
1774};
1775
1776static struct clk_branch cam_cc_cpas_ahb_clk = {
1777	.halt_reg = 0x13220,
1778	.halt_check = BRANCH_HALT,
1779	.clkr = {
1780		.enable_reg = 0x13220,
1781		.enable_mask = BIT(0),
1782		.hw.init = &(const struct clk_init_data) {
1783			.name = "cam_cc_cpas_ahb_clk",
1784			.parent_hws = (const struct clk_hw*[]) {
1785				&cam_cc_slow_ahb_clk_src.clkr.hw,
1786			},
1787			.num_parents = 1,
1788			.flags = CLK_SET_RATE_PARENT,
1789			.ops = &clk_branch2_ops,
1790		},
1791	},
1792};
1793
1794static struct clk_branch cam_cc_cpas_bps_clk = {
1795	.halt_reg = 0x10074,
1796	.halt_check = BRANCH_HALT,
1797	.clkr = {
1798		.enable_reg = 0x10074,
1799		.enable_mask = BIT(0),
1800		.hw.init = &(const struct clk_init_data) {
1801			.name = "cam_cc_cpas_bps_clk",
1802			.parent_hws = (const struct clk_hw*[]) {
1803				&cam_cc_bps_clk_src.clkr.hw,
1804			},
1805			.num_parents = 1,
1806			.flags = CLK_SET_RATE_PARENT,
1807			.ops = &clk_branch2_ops,
1808		},
1809	},
1810};
1811
1812static struct clk_branch cam_cc_cpas_cre_clk = {
1813	.halt_reg = 0x13160,
1814	.halt_check = BRANCH_HALT,
1815	.clkr = {
1816		.enable_reg = 0x13160,
1817		.enable_mask = BIT(0),
1818		.hw.init = &(const struct clk_init_data) {
1819			.name = "cam_cc_cpas_cre_clk",
1820			.parent_hws = (const struct clk_hw*[]) {
1821				&cam_cc_cre_clk_src.clkr.hw,
1822			},
1823			.num_parents = 1,
1824			.flags = CLK_SET_RATE_PARENT,
1825			.ops = &clk_branch2_ops,
1826		},
1827	},
1828};
1829
1830static struct clk_branch cam_cc_cpas_fast_ahb_clk = {
1831	.halt_reg = 0x1322c,
1832	.halt_check = BRANCH_HALT,
1833	.clkr = {
1834		.enable_reg = 0x1322c,
1835		.enable_mask = BIT(0),
1836		.hw.init = &(const struct clk_init_data) {
1837			.name = "cam_cc_cpas_fast_ahb_clk",
1838			.parent_hws = (const struct clk_hw*[]) {
1839				&cam_cc_fast_ahb_clk_src.clkr.hw,
1840			},
1841			.num_parents = 1,
1842			.flags = CLK_SET_RATE_PARENT,
1843			.ops = &clk_branch2_ops,
1844		},
1845	},
1846};
1847
1848static struct clk_branch cam_cc_cpas_ife_0_clk = {
1849	.halt_reg = 0x1103c,
1850	.halt_check = BRANCH_HALT,
1851	.clkr = {
1852		.enable_reg = 0x1103c,
1853		.enable_mask = BIT(0),
1854		.hw.init = &(const struct clk_init_data) {
1855			.name = "cam_cc_cpas_ife_0_clk",
1856			.parent_hws = (const struct clk_hw*[]) {
1857				&cam_cc_ife_0_clk_src.clkr.hw,
1858			},
1859			.num_parents = 1,
1860			.flags = CLK_SET_RATE_PARENT,
1861			.ops = &clk_branch2_ops,
1862		},
1863	},
1864};
1865
1866static struct clk_branch cam_cc_cpas_ife_1_clk = {
1867	.halt_reg = 0x1203c,
1868	.halt_check = BRANCH_HALT,
1869	.clkr = {
1870		.enable_reg = 0x1203c,
1871		.enable_mask = BIT(0),
1872		.hw.init = &(const struct clk_init_data) {
1873			.name = "cam_cc_cpas_ife_1_clk",
1874			.parent_hws = (const struct clk_hw*[]) {
1875				&cam_cc_ife_1_clk_src.clkr.hw,
1876			},
1877			.num_parents = 1,
1878			.flags = CLK_SET_RATE_PARENT,
1879			.ops = &clk_branch2_ops,
1880		},
1881	},
1882};
1883
1884static struct clk_branch cam_cc_cpas_ife_2_clk = {
1885	.halt_reg = 0x1208c,
1886	.halt_check = BRANCH_HALT,
1887	.clkr = {
1888		.enable_reg = 0x1208c,
1889		.enable_mask = BIT(0),
1890		.hw.init = &(const struct clk_init_data) {
1891			.name = "cam_cc_cpas_ife_2_clk",
1892			.parent_hws = (const struct clk_hw*[]) {
1893				&cam_cc_ife_2_clk_src.clkr.hw,
1894			},
1895			.num_parents = 1,
1896			.flags = CLK_SET_RATE_PARENT,
1897			.ops = &clk_branch2_ops,
1898		},
1899	},
1900};
1901
1902static struct clk_branch cam_cc_cpas_ife_lite_clk = {
1903	.halt_reg = 0x13024,
1904	.halt_check = BRANCH_HALT,
1905	.clkr = {
1906		.enable_reg = 0x13024,
1907		.enable_mask = BIT(0),
1908		.hw.init = &(const struct clk_init_data) {
1909			.name = "cam_cc_cpas_ife_lite_clk",
1910			.parent_hws = (const struct clk_hw*[]) {
1911				&cam_cc_ife_lite_clk_src.clkr.hw,
1912			},
1913			.num_parents = 1,
1914			.flags = CLK_SET_RATE_PARENT,
1915			.ops = &clk_branch2_ops,
1916		},
1917	},
1918};
1919
1920static struct clk_branch cam_cc_cpas_ipe_nps_clk = {
1921	.halt_reg = 0x100b8,
1922	.halt_check = BRANCH_HALT,
1923	.clkr = {
1924		.enable_reg = 0x100b8,
1925		.enable_mask = BIT(0),
1926		.hw.init = &(const struct clk_init_data) {
1927			.name = "cam_cc_cpas_ipe_nps_clk",
1928			.parent_hws = (const struct clk_hw*[]) {
1929				&cam_cc_ipe_nps_clk_src.clkr.hw,
1930			},
1931			.num_parents = 1,
1932			.flags = CLK_SET_RATE_PARENT,
1933			.ops = &clk_branch2_ops,
1934		},
1935	},
1936};
1937
1938static struct clk_branch cam_cc_cpas_sbi_clk = {
1939	.halt_reg = 0x10104,
1940	.halt_check = BRANCH_HALT,
1941	.clkr = {
1942		.enable_reg = 0x10104,
1943		.enable_mask = BIT(0),
1944		.hw.init = &(const struct clk_init_data) {
1945			.name = "cam_cc_cpas_sbi_clk",
1946			.parent_hws = (const struct clk_hw*[]) {
1947				&cam_cc_ife_0_clk_src.clkr.hw,
1948			},
1949			.num_parents = 1,
1950			.flags = CLK_SET_RATE_PARENT,
1951			.ops = &clk_branch2_ops,
1952		},
1953	},
1954};
1955
1956static struct clk_branch cam_cc_cpas_sfe_0_clk = {
1957	.halt_reg = 0x13090,
1958	.halt_check = BRANCH_HALT,
1959	.clkr = {
1960		.enable_reg = 0x13090,
1961		.enable_mask = BIT(0),
1962		.hw.init = &(const struct clk_init_data) {
1963			.name = "cam_cc_cpas_sfe_0_clk",
1964			.parent_hws = (const struct clk_hw*[]) {
1965				&cam_cc_sfe_0_clk_src.clkr.hw,
1966			},
1967			.num_parents = 1,
1968			.flags = CLK_SET_RATE_PARENT,
1969			.ops = &clk_branch2_ops,
1970		},
1971	},
1972};
1973
1974static struct clk_branch cam_cc_cpas_sfe_1_clk = {
1975	.halt_reg = 0x130e0,
1976	.halt_check = BRANCH_HALT,
1977	.clkr = {
1978		.enable_reg = 0x130e0,
1979		.enable_mask = BIT(0),
1980		.hw.init = &(const struct clk_init_data) {
1981			.name = "cam_cc_cpas_sfe_1_clk",
1982			.parent_hws = (const struct clk_hw*[]) {
1983				&cam_cc_sfe_1_clk_src.clkr.hw,
1984			},
1985			.num_parents = 1,
1986			.flags = CLK_SET_RATE_PARENT,
1987			.ops = &clk_branch2_ops,
1988		},
1989	},
1990};
1991
1992static struct clk_branch cam_cc_cpas_sfe_2_clk = {
1993	.halt_reg = 0x13130,
1994	.halt_check = BRANCH_HALT,
1995	.clkr = {
1996		.enable_reg = 0x13130,
1997		.enable_mask = BIT(0),
1998		.hw.init = &(const struct clk_init_data) {
1999			.name = "cam_cc_cpas_sfe_2_clk",
2000			.parent_hws = (const struct clk_hw*[]) {
2001				&cam_cc_sfe_2_clk_src.clkr.hw,
2002			},
2003			.num_parents = 1,
2004			.flags = CLK_SET_RATE_PARENT,
2005			.ops = &clk_branch2_ops,
2006		},
2007	},
2008};
2009
2010static struct clk_branch cam_cc_cre_ahb_clk = {
2011	.halt_reg = 0x13164,
2012	.halt_check = BRANCH_HALT,
2013	.clkr = {
2014		.enable_reg = 0x13164,
2015		.enable_mask = BIT(0),
2016		.hw.init = &(const struct clk_init_data) {
2017			.name = "cam_cc_cre_ahb_clk",
2018			.parent_hws = (const struct clk_hw*[]) {
2019				&cam_cc_slow_ahb_clk_src.clkr.hw,
2020			},
2021			.num_parents = 1,
2022			.flags = CLK_SET_RATE_PARENT,
2023			.ops = &clk_branch2_ops,
2024		},
2025	},
2026};
2027
2028static struct clk_branch cam_cc_cre_clk = {
2029	.halt_reg = 0x1315c,
2030	.halt_check = BRANCH_HALT,
2031	.clkr = {
2032		.enable_reg = 0x1315c,
2033		.enable_mask = BIT(0),
2034		.hw.init = &(const struct clk_init_data) {
2035			.name = "cam_cc_cre_clk",
2036			.parent_hws = (const struct clk_hw*[]) {
2037				&cam_cc_cre_clk_src.clkr.hw,
2038			},
2039			.num_parents = 1,
2040			.flags = CLK_SET_RATE_PARENT,
2041			.ops = &clk_branch2_ops,
2042		},
2043	},
2044};
2045
2046static struct clk_branch cam_cc_csi0phytimer_clk = {
2047	.halt_reg = 0x150f8,
2048	.halt_check = BRANCH_HALT,
2049	.clkr = {
2050		.enable_reg = 0x150f8,
2051		.enable_mask = BIT(0),
2052		.hw.init = &(const struct clk_init_data) {
2053			.name = "cam_cc_csi0phytimer_clk",
2054			.parent_hws = (const struct clk_hw*[]) {
2055				&cam_cc_csi0phytimer_clk_src.clkr.hw,
2056			},
2057			.num_parents = 1,
2058			.flags = CLK_SET_RATE_PARENT,
2059			.ops = &clk_branch2_ops,
2060		},
2061	},
2062};
2063
2064static struct clk_branch cam_cc_csi1phytimer_clk = {
2065	.halt_reg = 0x1511c,
2066	.halt_check = BRANCH_HALT,
2067	.clkr = {
2068		.enable_reg = 0x1511c,
2069		.enable_mask = BIT(0),
2070		.hw.init = &(const struct clk_init_data) {
2071			.name = "cam_cc_csi1phytimer_clk",
2072			.parent_hws = (const struct clk_hw*[]) {
2073				&cam_cc_csi1phytimer_clk_src.clkr.hw,
2074			},
2075			.num_parents = 1,
2076			.flags = CLK_SET_RATE_PARENT,
2077			.ops = &clk_branch2_ops,
2078		},
2079	},
2080};
2081
2082static struct clk_branch cam_cc_csi2phytimer_clk = {
2083	.halt_reg = 0x1513c,
2084	.halt_check = BRANCH_HALT,
2085	.clkr = {
2086		.enable_reg = 0x1513c,
2087		.enable_mask = BIT(0),
2088		.hw.init = &(const struct clk_init_data) {
2089			.name = "cam_cc_csi2phytimer_clk",
2090			.parent_hws = (const struct clk_hw*[]) {
2091				&cam_cc_csi2phytimer_clk_src.clkr.hw,
2092			},
2093			.num_parents = 1,
2094			.flags = CLK_SET_RATE_PARENT,
2095			.ops = &clk_branch2_ops,
2096		},
2097	},
2098};
2099
2100static struct clk_branch cam_cc_csi3phytimer_clk = {
2101	.halt_reg = 0x1515c,
2102	.halt_check = BRANCH_HALT,
2103	.clkr = {
2104		.enable_reg = 0x1515c,
2105		.enable_mask = BIT(0),
2106		.hw.init = &(const struct clk_init_data) {
2107			.name = "cam_cc_csi3phytimer_clk",
2108			.parent_hws = (const struct clk_hw*[]) {
2109				&cam_cc_csi3phytimer_clk_src.clkr.hw,
2110			},
2111			.num_parents = 1,
2112			.flags = CLK_SET_RATE_PARENT,
2113			.ops = &clk_branch2_ops,
2114		},
2115	},
2116};
2117
2118static struct clk_branch cam_cc_csi4phytimer_clk = {
2119	.halt_reg = 0x1517c,
2120	.halt_check = BRANCH_HALT,
2121	.clkr = {
2122		.enable_reg = 0x1517c,
2123		.enable_mask = BIT(0),
2124		.hw.init = &(const struct clk_init_data) {
2125			.name = "cam_cc_csi4phytimer_clk",
2126			.parent_hws = (const struct clk_hw*[]) {
2127				&cam_cc_csi4phytimer_clk_src.clkr.hw,
2128			},
2129			.num_parents = 1,
2130			.flags = CLK_SET_RATE_PARENT,
2131			.ops = &clk_branch2_ops,
2132		},
2133	},
2134};
2135
2136static struct clk_branch cam_cc_csi5phytimer_clk = {
2137	.halt_reg = 0x1519c,
2138	.halt_check = BRANCH_HALT,
2139	.clkr = {
2140		.enable_reg = 0x1519c,
2141		.enable_mask = BIT(0),
2142		.hw.init = &(const struct clk_init_data) {
2143			.name = "cam_cc_csi5phytimer_clk",
2144			.parent_hws = (const struct clk_hw*[]) {
2145				&cam_cc_csi5phytimer_clk_src.clkr.hw,
2146			},
2147			.num_parents = 1,
2148			.flags = CLK_SET_RATE_PARENT,
2149			.ops = &clk_branch2_ops,
2150		},
2151	},
2152};
2153
2154static struct clk_branch cam_cc_csi6phytimer_clk = {
2155	.halt_reg = 0x151bc,
2156	.halt_check = BRANCH_HALT,
2157	.clkr = {
2158		.enable_reg = 0x151bc,
2159		.enable_mask = BIT(0),
2160		.hw.init = &(const struct clk_init_data) {
2161			.name = "cam_cc_csi6phytimer_clk",
2162			.parent_hws = (const struct clk_hw*[]) {
2163				&cam_cc_csi6phytimer_clk_src.clkr.hw,
2164			},
2165			.num_parents = 1,
2166			.flags = CLK_SET_RATE_PARENT,
2167			.ops = &clk_branch2_ops,
2168		},
2169	},
2170};
2171
2172static struct clk_branch cam_cc_csi7phytimer_clk = {
2173	.halt_reg = 0x151dc,
2174	.halt_check = BRANCH_HALT,
2175	.clkr = {
2176		.enable_reg = 0x151dc,
2177		.enable_mask = BIT(0),
2178		.hw.init = &(const struct clk_init_data) {
2179			.name = "cam_cc_csi7phytimer_clk",
2180			.parent_hws = (const struct clk_hw*[]) {
2181				&cam_cc_csi7phytimer_clk_src.clkr.hw,
2182			},
2183			.num_parents = 1,
2184			.flags = CLK_SET_RATE_PARENT,
2185			.ops = &clk_branch2_ops,
2186		},
2187	},
2188};
2189
2190static struct clk_branch cam_cc_csid_clk = {
2191	.halt_reg = 0x13250,
2192	.halt_check = BRANCH_HALT,
2193	.clkr = {
2194		.enable_reg = 0x13250,
2195		.enable_mask = BIT(0),
2196		.hw.init = &(const struct clk_init_data) {
2197			.name = "cam_cc_csid_clk",
2198			.parent_hws = (const struct clk_hw*[]) {
2199				&cam_cc_csid_clk_src.clkr.hw,
2200			},
2201			.num_parents = 1,
2202			.flags = CLK_SET_RATE_PARENT,
2203			.ops = &clk_branch2_ops,
2204		},
2205	},
2206};
2207
2208static struct clk_branch cam_cc_csid_csiphy_rx_clk = {
2209	.halt_reg = 0x15100,
2210	.halt_check = BRANCH_HALT,
2211	.clkr = {
2212		.enable_reg = 0x15100,
2213		.enable_mask = BIT(0),
2214		.hw.init = &(const struct clk_init_data) {
2215			.name = "cam_cc_csid_csiphy_rx_clk",
2216			.parent_hws = (const struct clk_hw*[]) {
2217				&cam_cc_cphy_rx_clk_src.clkr.hw,
2218			},
2219			.num_parents = 1,
2220			.flags = CLK_SET_RATE_PARENT,
2221			.ops = &clk_branch2_ops,
2222		},
2223	},
2224};
2225
2226static struct clk_branch cam_cc_csiphy0_clk = {
2227	.halt_reg = 0x150fc,
2228	.halt_check = BRANCH_HALT,
2229	.clkr = {
2230		.enable_reg = 0x150fc,
2231		.enable_mask = BIT(0),
2232		.hw.init = &(const struct clk_init_data) {
2233			.name = "cam_cc_csiphy0_clk",
2234			.parent_hws = (const struct clk_hw*[]) {
2235				&cam_cc_cphy_rx_clk_src.clkr.hw,
2236			},
2237			.num_parents = 1,
2238			.flags = CLK_SET_RATE_PARENT,
2239			.ops = &clk_branch2_ops,
2240		},
2241	},
2242};
2243
2244static struct clk_branch cam_cc_csiphy1_clk = {
2245	.halt_reg = 0x15120,
2246	.halt_check = BRANCH_HALT,
2247	.clkr = {
2248		.enable_reg = 0x15120,
2249		.enable_mask = BIT(0),
2250		.hw.init = &(const struct clk_init_data) {
2251			.name = "cam_cc_csiphy1_clk",
2252			.parent_hws = (const struct clk_hw*[]) {
2253				&cam_cc_cphy_rx_clk_src.clkr.hw,
2254			},
2255			.num_parents = 1,
2256			.flags = CLK_SET_RATE_PARENT,
2257			.ops = &clk_branch2_ops,
2258		},
2259	},
2260};
2261
2262static struct clk_branch cam_cc_csiphy2_clk = {
2263	.halt_reg = 0x15140,
2264	.halt_check = BRANCH_HALT,
2265	.clkr = {
2266		.enable_reg = 0x15140,
2267		.enable_mask = BIT(0),
2268		.hw.init = &(const struct clk_init_data) {
2269			.name = "cam_cc_csiphy2_clk",
2270			.parent_hws = (const struct clk_hw*[]) {
2271				&cam_cc_cphy_rx_clk_src.clkr.hw,
2272			},
2273			.num_parents = 1,
2274			.flags = CLK_SET_RATE_PARENT,
2275			.ops = &clk_branch2_ops,
2276		},
2277	},
2278};
2279
2280static struct clk_branch cam_cc_csiphy3_clk = {
2281	.halt_reg = 0x15160,
2282	.halt_check = BRANCH_HALT,
2283	.clkr = {
2284		.enable_reg = 0x15160,
2285		.enable_mask = BIT(0),
2286		.hw.init = &(const struct clk_init_data) {
2287			.name = "cam_cc_csiphy3_clk",
2288			.parent_hws = (const struct clk_hw*[]) {
2289				&cam_cc_cphy_rx_clk_src.clkr.hw,
2290			},
2291			.num_parents = 1,
2292			.flags = CLK_SET_RATE_PARENT,
2293			.ops = &clk_branch2_ops,
2294		},
2295	},
2296};
2297
2298static struct clk_branch cam_cc_csiphy4_clk = {
2299	.halt_reg = 0x15180,
2300	.halt_check = BRANCH_HALT,
2301	.clkr = {
2302		.enable_reg = 0x15180,
2303		.enable_mask = BIT(0),
2304		.hw.init = &(const struct clk_init_data) {
2305			.name = "cam_cc_csiphy4_clk",
2306			.parent_hws = (const struct clk_hw*[]) {
2307				&cam_cc_cphy_rx_clk_src.clkr.hw,
2308			},
2309			.num_parents = 1,
2310			.flags = CLK_SET_RATE_PARENT,
2311			.ops = &clk_branch2_ops,
2312		},
2313	},
2314};
2315
2316static struct clk_branch cam_cc_csiphy5_clk = {
2317	.halt_reg = 0x151a0,
2318	.halt_check = BRANCH_HALT,
2319	.clkr = {
2320		.enable_reg = 0x151a0,
2321		.enable_mask = BIT(0),
2322		.hw.init = &(const struct clk_init_data) {
2323			.name = "cam_cc_csiphy5_clk",
2324			.parent_hws = (const struct clk_hw*[]) {
2325				&cam_cc_cphy_rx_clk_src.clkr.hw,
2326			},
2327			.num_parents = 1,
2328			.flags = CLK_SET_RATE_PARENT,
2329			.ops = &clk_branch2_ops,
2330		},
2331	},
2332};
2333
2334static struct clk_branch cam_cc_csiphy6_clk = {
2335	.halt_reg = 0x151c0,
2336	.halt_check = BRANCH_HALT,
2337	.clkr = {
2338		.enable_reg = 0x151c0,
2339		.enable_mask = BIT(0),
2340		.hw.init = &(const struct clk_init_data) {
2341			.name = "cam_cc_csiphy6_clk",
2342			.parent_hws = (const struct clk_hw*[]) {
2343				&cam_cc_cphy_rx_clk_src.clkr.hw,
2344			},
2345			.num_parents = 1,
2346			.flags = CLK_SET_RATE_PARENT,
2347			.ops = &clk_branch2_ops,
2348		},
2349	},
2350};
2351
2352static struct clk_branch cam_cc_csiphy7_clk = {
2353	.halt_reg = 0x151e0,
2354	.halt_check = BRANCH_HALT,
2355	.clkr = {
2356		.enable_reg = 0x151e0,
2357		.enable_mask = BIT(0),
2358		.hw.init = &(const struct clk_init_data) {
2359			.name = "cam_cc_csiphy7_clk",
2360			.parent_hws = (const struct clk_hw*[]) {
2361				&cam_cc_cphy_rx_clk_src.clkr.hw,
2362			},
2363			.num_parents = 1,
2364			.flags = CLK_SET_RATE_PARENT,
2365			.ops = &clk_branch2_ops,
2366		},
2367	},
2368};
2369
2370static struct clk_branch cam_cc_icp_ahb_clk = {
2371	.halt_reg = 0x131c8,
2372	.halt_check = BRANCH_HALT,
2373	.clkr = {
2374		.enable_reg = 0x131c8,
2375		.enable_mask = BIT(0),
2376		.hw.init = &(const struct clk_init_data) {
2377			.name = "cam_cc_icp_ahb_clk",
2378			.parent_hws = (const struct clk_hw*[]) {
2379				&cam_cc_slow_ahb_clk_src.clkr.hw,
2380			},
2381			.num_parents = 1,
2382			.flags = CLK_SET_RATE_PARENT,
2383			.ops = &clk_branch2_ops,
2384		},
2385	},
2386};
2387
2388static struct clk_branch cam_cc_icp_clk = {
2389	.halt_reg = 0x131bc,
2390	.halt_check = BRANCH_HALT,
2391	.clkr = {
2392		.enable_reg = 0x131bc,
2393		.enable_mask = BIT(0),
2394		.hw.init = &(const struct clk_init_data) {
2395			.name = "cam_cc_icp_clk",
2396			.parent_hws = (const struct clk_hw*[]) {
2397				&cam_cc_icp_clk_src.clkr.hw,
2398			},
2399			.num_parents = 1,
2400			.flags = CLK_SET_RATE_PARENT,
2401			.ops = &clk_branch2_ops,
2402		},
2403	},
2404};
2405
2406static struct clk_branch cam_cc_ife_0_clk = {
2407	.halt_reg = 0x11030,
2408	.halt_check = BRANCH_HALT,
2409	.clkr = {
2410		.enable_reg = 0x11030,
2411		.enable_mask = BIT(0),
2412		.hw.init = &(const struct clk_init_data) {
2413			.name = "cam_cc_ife_0_clk",
2414			.parent_hws = (const struct clk_hw*[]) {
2415				&cam_cc_ife_0_clk_src.clkr.hw,
2416			},
2417			.num_parents = 1,
2418			.flags = CLK_SET_RATE_PARENT,
2419			.ops = &clk_branch2_ops,
2420		},
2421	},
2422};
2423
2424static struct clk_branch cam_cc_ife_0_fast_ahb_clk = {
2425	.halt_reg = 0x11048,
2426	.halt_check = BRANCH_HALT,
2427	.clkr = {
2428		.enable_reg = 0x11048,
2429		.enable_mask = BIT(0),
2430		.hw.init = &(const struct clk_init_data) {
2431			.name = "cam_cc_ife_0_fast_ahb_clk",
2432			.parent_hws = (const struct clk_hw*[]) {
2433				&cam_cc_fast_ahb_clk_src.clkr.hw,
2434			},
2435			.num_parents = 1,
2436			.flags = CLK_SET_RATE_PARENT,
2437			.ops = &clk_branch2_ops,
2438		},
2439	},
2440};
2441
2442static struct clk_branch cam_cc_ife_0_shift_clk = {
2443	.halt_reg = 0x11064,
2444	.halt_check = BRANCH_HALT_VOTED,
2445	.clkr = {
2446		.enable_reg = 0x11064,
2447		.enable_mask = BIT(0),
2448		.hw.init = &(const struct clk_init_data) {
2449			.name = "cam_cc_ife_0_shift_clk",
2450			.parent_hws = (const struct clk_hw*[]) {
2451				&cam_cc_xo_clk_src.clkr.hw,
2452			},
2453			.num_parents = 1,
2454			.flags = CLK_SET_RATE_PARENT,
2455			.ops = &clk_branch2_ops,
2456		},
2457	},
2458};
2459
2460static struct clk_branch cam_cc_ife_1_clk = {
2461	.halt_reg = 0x12030,
2462	.halt_check = BRANCH_HALT,
2463	.clkr = {
2464		.enable_reg = 0x12030,
2465		.enable_mask = BIT(0),
2466		.hw.init = &(const struct clk_init_data) {
2467			.name = "cam_cc_ife_1_clk",
2468			.parent_hws = (const struct clk_hw*[]) {
2469				&cam_cc_ife_1_clk_src.clkr.hw,
2470			},
2471			.num_parents = 1,
2472			.flags = CLK_SET_RATE_PARENT,
2473			.ops = &clk_branch2_ops,
2474		},
2475	},
2476};
2477
2478static struct clk_branch cam_cc_ife_1_fast_ahb_clk = {
2479	.halt_reg = 0x12048,
2480	.halt_check = BRANCH_HALT,
2481	.clkr = {
2482		.enable_reg = 0x12048,
2483		.enable_mask = BIT(0),
2484		.hw.init = &(const struct clk_init_data) {
2485			.name = "cam_cc_ife_1_fast_ahb_clk",
2486			.parent_hws = (const struct clk_hw*[]) {
2487				&cam_cc_fast_ahb_clk_src.clkr.hw,
2488			},
2489			.num_parents = 1,
2490			.flags = CLK_SET_RATE_PARENT,
2491			.ops = &clk_branch2_ops,
2492		},
2493	},
2494};
2495
2496static struct clk_branch cam_cc_ife_1_shift_clk = {
2497	.halt_reg = 0x1204c,
2498	.halt_check = BRANCH_HALT_VOTED,
2499	.clkr = {
2500		.enable_reg = 0x1204c,
2501		.enable_mask = BIT(0),
2502		.hw.init = &(const struct clk_init_data) {
2503			.name = "cam_cc_ife_1_shift_clk",
2504			.parent_hws = (const struct clk_hw*[]) {
2505				&cam_cc_xo_clk_src.clkr.hw,
2506			},
2507			.num_parents = 1,
2508			.flags = CLK_SET_RATE_PARENT,
2509			.ops = &clk_branch2_ops,
2510		},
2511	},
2512};
2513
2514static struct clk_branch cam_cc_ife_2_clk = {
2515	.halt_reg = 0x12080,
2516	.halt_check = BRANCH_HALT,
2517	.clkr = {
2518		.enable_reg = 0x12080,
2519		.enable_mask = BIT(0),
2520		.hw.init = &(const struct clk_init_data) {
2521			.name = "cam_cc_ife_2_clk",
2522			.parent_hws = (const struct clk_hw*[]) {
2523				&cam_cc_ife_2_clk_src.clkr.hw,
2524			},
2525			.num_parents = 1,
2526			.flags = CLK_SET_RATE_PARENT,
2527			.ops = &clk_branch2_ops,
2528		},
2529	},
2530};
2531
2532static struct clk_branch cam_cc_ife_2_fast_ahb_clk = {
2533	.halt_reg = 0x12098,
2534	.halt_check = BRANCH_HALT,
2535	.clkr = {
2536		.enable_reg = 0x12098,
2537		.enable_mask = BIT(0),
2538		.hw.init = &(const struct clk_init_data) {
2539			.name = "cam_cc_ife_2_fast_ahb_clk",
2540			.parent_hws = (const struct clk_hw*[]) {
2541				&cam_cc_fast_ahb_clk_src.clkr.hw,
2542			},
2543			.num_parents = 1,
2544			.flags = CLK_SET_RATE_PARENT,
2545			.ops = &clk_branch2_ops,
2546		},
2547	},
2548};
2549
2550static struct clk_branch cam_cc_ife_2_shift_clk = {
2551	.halt_reg = 0x1209c,
2552	.halt_check = BRANCH_HALT_VOTED,
2553	.clkr = {
2554		.enable_reg = 0x1209c,
2555		.enable_mask = BIT(0),
2556		.hw.init = &(const struct clk_init_data) {
2557			.name = "cam_cc_ife_2_shift_clk",
2558			.parent_hws = (const struct clk_hw*[]) {
2559				&cam_cc_xo_clk_src.clkr.hw,
2560			},
2561			.num_parents = 1,
2562			.flags = CLK_SET_RATE_PARENT,
2563			.ops = &clk_branch2_ops,
2564		},
2565	},
2566};
2567
2568static struct clk_branch cam_cc_ife_lite_ahb_clk = {
2569	.halt_reg = 0x13050,
2570	.halt_check = BRANCH_HALT,
2571	.clkr = {
2572		.enable_reg = 0x13050,
2573		.enable_mask = BIT(0),
2574		.hw.init = &(const struct clk_init_data) {
2575			.name = "cam_cc_ife_lite_ahb_clk",
2576			.parent_hws = (const struct clk_hw*[]) {
2577				&cam_cc_slow_ahb_clk_src.clkr.hw,
2578			},
2579			.num_parents = 1,
2580			.flags = CLK_SET_RATE_PARENT,
2581			.ops = &clk_branch2_ops,
2582		},
2583	},
2584};
2585
2586static struct clk_branch cam_cc_ife_lite_clk = {
2587	.halt_reg = 0x13018,
2588	.halt_check = BRANCH_HALT,
2589	.clkr = {
2590		.enable_reg = 0x13018,
2591		.enable_mask = BIT(0),
2592		.hw.init = &(const struct clk_init_data) {
2593			.name = "cam_cc_ife_lite_clk",
2594			.parent_hws = (const struct clk_hw*[]) {
2595				&cam_cc_ife_lite_clk_src.clkr.hw,
2596			},
2597			.num_parents = 1,
2598			.flags = CLK_SET_RATE_PARENT,
2599			.ops = &clk_branch2_ops,
2600		},
2601	},
2602};
2603
2604static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
2605	.halt_reg = 0x1304c,
2606	.halt_check = BRANCH_HALT,
2607	.clkr = {
2608		.enable_reg = 0x1304c,
2609		.enable_mask = BIT(0),
2610		.hw.init = &(const struct clk_init_data) {
2611			.name = "cam_cc_ife_lite_cphy_rx_clk",
2612			.parent_hws = (const struct clk_hw*[]) {
2613				&cam_cc_cphy_rx_clk_src.clkr.hw,
2614			},
2615			.num_parents = 1,
2616			.flags = CLK_SET_RATE_PARENT,
2617			.ops = &clk_branch2_ops,
2618		},
2619	},
2620};
2621
2622static struct clk_branch cam_cc_ife_lite_csid_clk = {
2623	.halt_reg = 0x13040,
2624	.halt_check = BRANCH_HALT,
2625	.clkr = {
2626		.enable_reg = 0x13040,
2627		.enable_mask = BIT(0),
2628		.hw.init = &(const struct clk_init_data) {
2629			.name = "cam_cc_ife_lite_csid_clk",
2630			.parent_hws = (const struct clk_hw*[]) {
2631				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
2632			},
2633			.num_parents = 1,
2634			.flags = CLK_SET_RATE_PARENT,
2635			.ops = &clk_branch2_ops,
2636		},
2637	},
2638};
2639
2640static struct clk_branch cam_cc_ipe_nps_ahb_clk = {
2641	.halt_reg = 0x100d0,
2642	.halt_check = BRANCH_HALT,
2643	.clkr = {
2644		.enable_reg = 0x100d0,
2645		.enable_mask = BIT(0),
2646		.hw.init = &(const struct clk_init_data) {
2647			.name = "cam_cc_ipe_nps_ahb_clk",
2648			.parent_hws = (const struct clk_hw*[]) {
2649				&cam_cc_slow_ahb_clk_src.clkr.hw,
2650			},
2651			.num_parents = 1,
2652			.flags = CLK_SET_RATE_PARENT,
2653			.ops = &clk_branch2_ops,
2654		},
2655	},
2656};
2657
2658static struct clk_branch cam_cc_ipe_nps_clk = {
2659	.halt_reg = 0x100ac,
2660	.halt_check = BRANCH_HALT,
2661	.clkr = {
2662		.enable_reg = 0x100ac,
2663		.enable_mask = BIT(0),
2664		.hw.init = &(const struct clk_init_data) {
2665			.name = "cam_cc_ipe_nps_clk",
2666			.parent_hws = (const struct clk_hw*[]) {
2667				&cam_cc_ipe_nps_clk_src.clkr.hw,
2668			},
2669			.num_parents = 1,
2670			.flags = CLK_SET_RATE_PARENT,
2671			.ops = &clk_branch2_ops,
2672		},
2673	},
2674};
2675
2676static struct clk_branch cam_cc_ipe_nps_fast_ahb_clk = {
2677	.halt_reg = 0x100d4,
2678	.halt_check = BRANCH_HALT,
2679	.clkr = {
2680		.enable_reg = 0x100d4,
2681		.enable_mask = BIT(0),
2682		.hw.init = &(const struct clk_init_data) {
2683			.name = "cam_cc_ipe_nps_fast_ahb_clk",
2684			.parent_hws = (const struct clk_hw*[]) {
2685				&cam_cc_fast_ahb_clk_src.clkr.hw,
2686			},
2687			.num_parents = 1,
2688			.flags = CLK_SET_RATE_PARENT,
2689			.ops = &clk_branch2_ops,
2690		},
2691	},
2692};
2693
2694static struct clk_branch cam_cc_ipe_pps_clk = {
2695	.halt_reg = 0x100bc,
2696	.halt_check = BRANCH_HALT,
2697	.clkr = {
2698		.enable_reg = 0x100bc,
2699		.enable_mask = BIT(0),
2700		.hw.init = &(const struct clk_init_data) {
2701			.name = "cam_cc_ipe_pps_clk",
2702			.parent_hws = (const struct clk_hw*[]) {
2703				&cam_cc_ipe_nps_clk_src.clkr.hw,
2704			},
2705			.num_parents = 1,
2706			.flags = CLK_SET_RATE_PARENT,
2707			.ops = &clk_branch2_ops,
2708		},
2709	},
2710};
2711
2712static struct clk_branch cam_cc_ipe_pps_fast_ahb_clk = {
2713	.halt_reg = 0x100d8,
2714	.halt_check = BRANCH_HALT,
2715	.clkr = {
2716		.enable_reg = 0x100d8,
2717		.enable_mask = BIT(0),
2718		.hw.init = &(const struct clk_init_data) {
2719			.name = "cam_cc_ipe_pps_fast_ahb_clk",
2720			.parent_hws = (const struct clk_hw*[]) {
2721				&cam_cc_fast_ahb_clk_src.clkr.hw,
2722			},
2723			.num_parents = 1,
2724			.flags = CLK_SET_RATE_PARENT,
2725			.ops = &clk_branch2_ops,
2726		},
2727	},
2728};
2729
2730static struct clk_branch cam_cc_ipe_shift_clk = {
2731	.halt_reg = 0x100dc,
2732	.halt_check = BRANCH_HALT_VOTED,
2733	.clkr = {
2734		.enable_reg = 0x100dc,
2735		.enable_mask = BIT(0),
2736		.hw.init = &(const struct clk_init_data) {
2737			.name = "cam_cc_ipe_shift_clk",
2738			.parent_hws = (const struct clk_hw*[]) {
2739				&cam_cc_xo_clk_src.clkr.hw,
2740			},
2741			.num_parents = 1,
2742			.flags = CLK_SET_RATE_PARENT,
2743			.ops = &clk_branch2_ops,
2744		},
2745	},
2746};
2747
2748static struct clk_branch cam_cc_jpeg_1_clk = {
2749	.halt_reg = 0x1318c,
2750	.halt_check = BRANCH_HALT,
2751	.clkr = {
2752		.enable_reg = 0x1318c,
2753		.enable_mask = BIT(0),
2754		.hw.init = &(const struct clk_init_data) {
2755			.name = "cam_cc_jpeg_1_clk",
2756			.parent_hws = (const struct clk_hw*[]) {
2757				&cam_cc_jpeg_clk_src.clkr.hw,
2758			},
2759			.num_parents = 1,
2760			.flags = CLK_SET_RATE_PARENT,
2761			.ops = &clk_branch2_ops,
2762		},
2763	},
2764};
2765
2766static struct clk_branch cam_cc_jpeg_clk = {
2767	.halt_reg = 0x13180,
2768	.halt_check = BRANCH_HALT,
2769	.clkr = {
2770		.enable_reg = 0x13180,
2771		.enable_mask = BIT(0),
2772		.hw.init = &(const struct clk_init_data) {
2773			.name = "cam_cc_jpeg_clk",
2774			.parent_hws = (const struct clk_hw*[]) {
2775				&cam_cc_jpeg_clk_src.clkr.hw,
2776			},
2777			.num_parents = 1,
2778			.flags = CLK_SET_RATE_PARENT,
2779			.ops = &clk_branch2_ops,
2780		},
2781	},
2782};
2783
2784static struct clk_branch cam_cc_mclk0_clk = {
2785	.halt_reg = 0x15018,
2786	.halt_check = BRANCH_HALT,
2787	.clkr = {
2788		.enable_reg = 0x15018,
2789		.enable_mask = BIT(0),
2790		.hw.init = &(const struct clk_init_data) {
2791			.name = "cam_cc_mclk0_clk",
2792			.parent_hws = (const struct clk_hw*[]) {
2793				&cam_cc_mclk0_clk_src.clkr.hw,
2794			},
2795			.num_parents = 1,
2796			.flags = CLK_SET_RATE_PARENT,
2797			.ops = &clk_branch2_ops,
2798		},
2799	},
2800};
2801
2802static struct clk_branch cam_cc_mclk1_clk = {
2803	.halt_reg = 0x15034,
2804	.halt_check = BRANCH_HALT,
2805	.clkr = {
2806		.enable_reg = 0x15034,
2807		.enable_mask = BIT(0),
2808		.hw.init = &(const struct clk_init_data) {
2809			.name = "cam_cc_mclk1_clk",
2810			.parent_hws = (const struct clk_hw*[]) {
2811				&cam_cc_mclk1_clk_src.clkr.hw,
2812			},
2813			.num_parents = 1,
2814			.flags = CLK_SET_RATE_PARENT,
2815			.ops = &clk_branch2_ops,
2816		},
2817	},
2818};
2819
2820static struct clk_branch cam_cc_mclk2_clk = {
2821	.halt_reg = 0x15050,
2822	.halt_check = BRANCH_HALT,
2823	.clkr = {
2824		.enable_reg = 0x15050,
2825		.enable_mask = BIT(0),
2826		.hw.init = &(const struct clk_init_data) {
2827			.name = "cam_cc_mclk2_clk",
2828			.parent_hws = (const struct clk_hw*[]) {
2829				&cam_cc_mclk2_clk_src.clkr.hw,
2830			},
2831			.num_parents = 1,
2832			.flags = CLK_SET_RATE_PARENT,
2833			.ops = &clk_branch2_ops,
2834		},
2835	},
2836};
2837
2838static struct clk_branch cam_cc_mclk3_clk = {
2839	.halt_reg = 0x1506c,
2840	.halt_check = BRANCH_HALT,
2841	.clkr = {
2842		.enable_reg = 0x1506c,
2843		.enable_mask = BIT(0),
2844		.hw.init = &(const struct clk_init_data) {
2845			.name = "cam_cc_mclk3_clk",
2846			.parent_hws = (const struct clk_hw*[]) {
2847				&cam_cc_mclk3_clk_src.clkr.hw,
2848			},
2849			.num_parents = 1,
2850			.flags = CLK_SET_RATE_PARENT,
2851			.ops = &clk_branch2_ops,
2852		},
2853	},
2854};
2855
2856static struct clk_branch cam_cc_mclk4_clk = {
2857	.halt_reg = 0x15088,
2858	.halt_check = BRANCH_HALT,
2859	.clkr = {
2860		.enable_reg = 0x15088,
2861		.enable_mask = BIT(0),
2862		.hw.init = &(const struct clk_init_data) {
2863			.name = "cam_cc_mclk4_clk",
2864			.parent_hws = (const struct clk_hw*[]) {
2865				&cam_cc_mclk4_clk_src.clkr.hw,
2866			},
2867			.num_parents = 1,
2868			.flags = CLK_SET_RATE_PARENT,
2869			.ops = &clk_branch2_ops,
2870		},
2871	},
2872};
2873
2874static struct clk_branch cam_cc_mclk5_clk = {
2875	.halt_reg = 0x150a4,
2876	.halt_check = BRANCH_HALT,
2877	.clkr = {
2878		.enable_reg = 0x150a4,
2879		.enable_mask = BIT(0),
2880		.hw.init = &(const struct clk_init_data) {
2881			.name = "cam_cc_mclk5_clk",
2882			.parent_hws = (const struct clk_hw*[]) {
2883				&cam_cc_mclk5_clk_src.clkr.hw,
2884			},
2885			.num_parents = 1,
2886			.flags = CLK_SET_RATE_PARENT,
2887			.ops = &clk_branch2_ops,
2888		},
2889	},
2890};
2891
2892static struct clk_branch cam_cc_mclk6_clk = {
2893	.halt_reg = 0x150c0,
2894	.halt_check = BRANCH_HALT,
2895	.clkr = {
2896		.enable_reg = 0x150c0,
2897		.enable_mask = BIT(0),
2898		.hw.init = &(const struct clk_init_data) {
2899			.name = "cam_cc_mclk6_clk",
2900			.parent_hws = (const struct clk_hw*[]) {
2901				&cam_cc_mclk6_clk_src.clkr.hw,
2902			},
2903			.num_parents = 1,
2904			.flags = CLK_SET_RATE_PARENT,
2905			.ops = &clk_branch2_ops,
2906		},
2907	},
2908};
2909
2910static struct clk_branch cam_cc_mclk7_clk = {
2911	.halt_reg = 0x150dc,
2912	.halt_check = BRANCH_HALT,
2913	.clkr = {
2914		.enable_reg = 0x150dc,
2915		.enable_mask = BIT(0),
2916		.hw.init = &(const struct clk_init_data) {
2917			.name = "cam_cc_mclk7_clk",
2918			.parent_hws = (const struct clk_hw*[]) {
2919				&cam_cc_mclk7_clk_src.clkr.hw,
2920			},
2921			.num_parents = 1,
2922			.flags = CLK_SET_RATE_PARENT,
2923			.ops = &clk_branch2_ops,
2924		},
2925	},
2926};
2927
2928static struct clk_branch cam_cc_qdss_debug_clk = {
2929	.halt_reg = 0x132b4,
2930	.halt_check = BRANCH_HALT,
2931	.clkr = {
2932		.enable_reg = 0x132b4,
2933		.enable_mask = BIT(0),
2934		.hw.init = &(const struct clk_init_data) {
2935			.name = "cam_cc_qdss_debug_clk",
2936			.parent_hws = (const struct clk_hw*[]) {
2937				&cam_cc_qdss_debug_clk_src.clkr.hw,
2938			},
2939			.num_parents = 1,
2940			.flags = CLK_SET_RATE_PARENT,
2941			.ops = &clk_branch2_ops,
2942		},
2943	},
2944};
2945
2946static struct clk_branch cam_cc_qdss_debug_xo_clk = {
2947	.halt_reg = 0x132b8,
2948	.halt_check = BRANCH_HALT,
2949	.clkr = {
2950		.enable_reg = 0x132b8,
2951		.enable_mask = BIT(0),
2952		.hw.init = &(const struct clk_init_data) {
2953			.name = "cam_cc_qdss_debug_xo_clk",
2954			.parent_hws = (const struct clk_hw*[]) {
2955				&cam_cc_xo_clk_src.clkr.hw,
2956			},
2957			.num_parents = 1,
2958			.flags = CLK_SET_RATE_PARENT,
2959			.ops = &clk_branch2_ops,
2960		},
2961	},
2962};
2963
2964static struct clk_branch cam_cc_sbi_clk = {
2965	.halt_reg = 0x100f8,
2966	.halt_check = BRANCH_HALT,
2967	.clkr = {
2968		.enable_reg = 0x100f8,
2969		.enable_mask = BIT(0),
2970		.hw.init = &(const struct clk_init_data) {
2971			.name = "cam_cc_sbi_clk",
2972			.parent_hws = (const struct clk_hw*[]) {
2973				&cam_cc_ife_0_clk_src.clkr.hw,
2974			},
2975			.num_parents = 1,
2976			.flags = CLK_SET_RATE_PARENT,
2977			.ops = &clk_branch2_ops,
2978		},
2979	},
2980};
2981
2982static struct clk_branch cam_cc_sbi_fast_ahb_clk = {
2983	.halt_reg = 0x10108,
2984	.halt_check = BRANCH_HALT,
2985	.clkr = {
2986		.enable_reg = 0x10108,
2987		.enable_mask = BIT(0),
2988		.hw.init = &(const struct clk_init_data) {
2989			.name = "cam_cc_sbi_fast_ahb_clk",
2990			.parent_hws = (const struct clk_hw*[]) {
2991				&cam_cc_fast_ahb_clk_src.clkr.hw,
2992			},
2993			.num_parents = 1,
2994			.flags = CLK_SET_RATE_PARENT,
2995			.ops = &clk_branch2_ops,
2996		},
2997	},
2998};
2999
3000static struct clk_branch cam_cc_sbi_shift_clk = {
3001	.halt_reg = 0x1010c,
3002	.halt_check = BRANCH_HALT_VOTED,
3003	.clkr = {
3004		.enable_reg = 0x1010c,
3005		.enable_mask = BIT(0),
3006		.hw.init = &(const struct clk_init_data) {
3007			.name = "cam_cc_sbi_shift_clk",
3008			.parent_hws = (const struct clk_hw*[]) {
3009				&cam_cc_xo_clk_src.clkr.hw,
3010			},
3011			.num_parents = 1,
3012			.flags = CLK_SET_RATE_PARENT,
3013			.ops = &clk_branch2_ops,
3014		},
3015	},
3016};
3017
3018static struct clk_branch cam_cc_sfe_0_clk = {
3019	.halt_reg = 0x13084,
3020	.halt_check = BRANCH_HALT,
3021	.clkr = {
3022		.enable_reg = 0x13084,
3023		.enable_mask = BIT(0),
3024		.hw.init = &(const struct clk_init_data) {
3025			.name = "cam_cc_sfe_0_clk",
3026			.parent_hws = (const struct clk_hw*[]) {
3027				&cam_cc_sfe_0_clk_src.clkr.hw,
3028			},
3029			.num_parents = 1,
3030			.flags = CLK_SET_RATE_PARENT,
3031			.ops = &clk_branch2_ops,
3032		},
3033	},
3034};
3035
3036static struct clk_branch cam_cc_sfe_0_fast_ahb_clk = {
3037	.halt_reg = 0x1309c,
3038	.halt_check = BRANCH_HALT,
3039	.clkr = {
3040		.enable_reg = 0x1309c,
3041		.enable_mask = BIT(0),
3042		.hw.init = &(const struct clk_init_data) {
3043			.name = "cam_cc_sfe_0_fast_ahb_clk",
3044			.parent_hws = (const struct clk_hw*[]) {
3045				&cam_cc_fast_ahb_clk_src.clkr.hw,
3046			},
3047			.num_parents = 1,
3048			.flags = CLK_SET_RATE_PARENT,
3049			.ops = &clk_branch2_ops,
3050		},
3051	},
3052};
3053
3054static struct clk_branch cam_cc_sfe_0_shift_clk = {
3055	.halt_reg = 0x130a0,
3056	.halt_check = BRANCH_HALT_VOTED,
3057	.clkr = {
3058		.enable_reg = 0x130a0,
3059		.enable_mask = BIT(0),
3060		.hw.init = &(const struct clk_init_data) {
3061			.name = "cam_cc_sfe_0_shift_clk",
3062			.parent_hws = (const struct clk_hw*[]) {
3063				&cam_cc_xo_clk_src.clkr.hw,
3064			},
3065			.num_parents = 1,
3066			.flags = CLK_SET_RATE_PARENT,
3067			.ops = &clk_branch2_ops,
3068		},
3069	},
3070};
3071
3072static struct clk_branch cam_cc_sfe_1_clk = {
3073	.halt_reg = 0x130d4,
3074	.halt_check = BRANCH_HALT,
3075	.clkr = {
3076		.enable_reg = 0x130d4,
3077		.enable_mask = BIT(0),
3078		.hw.init = &(const struct clk_init_data) {
3079			.name = "cam_cc_sfe_1_clk",
3080			.parent_hws = (const struct clk_hw*[]) {
3081				&cam_cc_sfe_1_clk_src.clkr.hw,
3082			},
3083			.num_parents = 1,
3084			.flags = CLK_SET_RATE_PARENT,
3085			.ops = &clk_branch2_ops,
3086		},
3087	},
3088};
3089
3090static struct clk_branch cam_cc_sfe_1_fast_ahb_clk = {
3091	.halt_reg = 0x130ec,
3092	.halt_check = BRANCH_HALT,
3093	.clkr = {
3094		.enable_reg = 0x130ec,
3095		.enable_mask = BIT(0),
3096		.hw.init = &(const struct clk_init_data) {
3097			.name = "cam_cc_sfe_1_fast_ahb_clk",
3098			.parent_hws = (const struct clk_hw*[]) {
3099				&cam_cc_fast_ahb_clk_src.clkr.hw,
3100			},
3101			.num_parents = 1,
3102			.flags = CLK_SET_RATE_PARENT,
3103			.ops = &clk_branch2_ops,
3104		},
3105	},
3106};
3107
3108static struct clk_branch cam_cc_sfe_1_shift_clk = {
3109	.halt_reg = 0x130f0,
3110	.halt_check = BRANCH_HALT_VOTED,
3111	.clkr = {
3112		.enable_reg = 0x130f0,
3113		.enable_mask = BIT(0),
3114		.hw.init = &(const struct clk_init_data) {
3115			.name = "cam_cc_sfe_1_shift_clk",
3116			.parent_hws = (const struct clk_hw*[]) {
3117				&cam_cc_xo_clk_src.clkr.hw,
3118			},
3119			.num_parents = 1,
3120			.flags = CLK_SET_RATE_PARENT,
3121			.ops = &clk_branch2_ops,
3122		},
3123	},
3124};
3125
3126static struct clk_branch cam_cc_sfe_2_clk = {
3127	.halt_reg = 0x13124,
3128	.halt_check = BRANCH_HALT,
3129	.clkr = {
3130		.enable_reg = 0x13124,
3131		.enable_mask = BIT(0),
3132		.hw.init = &(const struct clk_init_data) {
3133			.name = "cam_cc_sfe_2_clk",
3134			.parent_hws = (const struct clk_hw*[]) {
3135				&cam_cc_sfe_2_clk_src.clkr.hw,
3136			},
3137			.num_parents = 1,
3138			.flags = CLK_SET_RATE_PARENT,
3139			.ops = &clk_branch2_ops,
3140		},
3141	},
3142};
3143
3144static struct clk_branch cam_cc_sfe_2_fast_ahb_clk = {
3145	.halt_reg = 0x1313c,
3146	.halt_check = BRANCH_HALT,
3147	.clkr = {
3148		.enable_reg = 0x1313c,
3149		.enable_mask = BIT(0),
3150		.hw.init = &(const struct clk_init_data) {
3151			.name = "cam_cc_sfe_2_fast_ahb_clk",
3152			.parent_hws = (const struct clk_hw*[]) {
3153				&cam_cc_fast_ahb_clk_src.clkr.hw,
3154			},
3155			.num_parents = 1,
3156			.flags = CLK_SET_RATE_PARENT,
3157			.ops = &clk_branch2_ops,
3158		},
3159	},
3160};
3161
3162static struct clk_branch cam_cc_sfe_2_shift_clk = {
3163	.halt_reg = 0x13140,
3164	.halt_check = BRANCH_HALT_VOTED,
3165	.clkr = {
3166		.enable_reg = 0x13140,
3167		.enable_mask = BIT(0),
3168		.hw.init = &(const struct clk_init_data) {
3169			.name = "cam_cc_sfe_2_shift_clk",
3170			.parent_hws = (const struct clk_hw*[]) {
3171				&cam_cc_xo_clk_src.clkr.hw,
3172			},
3173			.num_parents = 1,
3174			.flags = CLK_SET_RATE_PARENT,
3175			.ops = &clk_branch2_ops,
3176		},
3177	},
3178};
3179
3180static struct clk_branch cam_cc_titan_top_shift_clk = {
3181	.halt_reg = 0x1330c,
3182	.halt_check = BRANCH_HALT_VOTED,
3183	.clkr = {
3184		.enable_reg = 0x1330c,
3185		.enable_mask = BIT(0),
3186		.hw.init = &(const struct clk_init_data) {
3187			.name = "cam_cc_titan_top_shift_clk",
3188			.parent_hws = (const struct clk_hw*[]) {
3189				&cam_cc_xo_clk_src.clkr.hw,
3190			},
3191			.num_parents = 1,
3192			.flags = CLK_SET_RATE_PARENT,
3193			.ops = &clk_branch2_ops,
3194		},
3195	},
3196};
3197
3198static struct gdsc cam_cc_titan_top_gdsc = {
3199	.gdscr = 0x132bc,
3200	.en_rest_wait_val = 0x2,
3201	.en_few_wait_val = 0x2,
3202	.clk_dis_wait_val = 0xf,
3203	.pd = {
3204		.name = "cam_cc_titan_top_gdsc",
3205	},
3206	.pwrsts = PWRSTS_OFF_ON,
3207	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3208};
3209
3210static struct gdsc cam_cc_bps_gdsc = {
3211	.gdscr = 0x10004,
3212	.en_rest_wait_val = 0x2,
3213	.en_few_wait_val = 0x2,
3214	.clk_dis_wait_val = 0xf,
3215	.pd = {
3216		.name = "cam_cc_bps_gdsc",
3217	},
3218	.pwrsts = PWRSTS_OFF_ON,
3219	.parent = &cam_cc_titan_top_gdsc.pd,
3220	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3221};
3222
3223static struct gdsc cam_cc_ife_0_gdsc = {
3224	.gdscr = 0x11004,
3225	.en_rest_wait_val = 0x2,
3226	.en_few_wait_val = 0x2,
3227	.clk_dis_wait_val = 0xf,
3228	.pd = {
3229		.name = "cam_cc_ife_0_gdsc",
3230	},
3231	.pwrsts = PWRSTS_OFF_ON,
3232	.parent = &cam_cc_titan_top_gdsc.pd,
3233	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3234};
3235
3236static struct gdsc cam_cc_ife_1_gdsc = {
3237	.gdscr = 0x12004,
3238	.en_rest_wait_val = 0x2,
3239	.en_few_wait_val = 0x2,
3240	.clk_dis_wait_val = 0xf,
3241	.pd = {
3242		.name = "cam_cc_ife_1_gdsc",
3243	},
3244	.pwrsts = PWRSTS_OFF_ON,
3245	.parent = &cam_cc_titan_top_gdsc.pd,
3246	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3247};
3248
3249static struct gdsc cam_cc_ife_2_gdsc = {
3250	.gdscr = 0x12054,
3251	.en_rest_wait_val = 0x2,
3252	.en_few_wait_val = 0x2,
3253	.clk_dis_wait_val = 0xf,
3254	.pd = {
3255		.name = "cam_cc_ife_2_gdsc",
3256	},
3257	.pwrsts = PWRSTS_OFF_ON,
3258	.parent = &cam_cc_titan_top_gdsc.pd,
3259	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3260};
3261
3262static struct gdsc cam_cc_ipe_0_gdsc = {
3263	.gdscr = 0x10080,
3264	.en_rest_wait_val = 0x2,
3265	.en_few_wait_val = 0x2,
3266	.clk_dis_wait_val = 0xf,
3267	.pd = {
3268		.name = "cam_cc_ipe_0_gdsc",
3269	},
3270	.pwrsts = PWRSTS_OFF_ON,
3271	.parent = &cam_cc_titan_top_gdsc.pd,
3272	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3273};
3274
3275static struct gdsc cam_cc_sbi_gdsc = {
3276	.gdscr = 0x100e4,
3277	.en_rest_wait_val = 0x2,
3278	.en_few_wait_val = 0x2,
3279	.clk_dis_wait_val = 0xf,
3280	.pd = {
3281		.name = "cam_cc_sbi_gdsc",
3282	},
3283	.pwrsts = PWRSTS_OFF_ON,
3284	.parent = &cam_cc_titan_top_gdsc.pd,
3285	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3286};
3287
3288static struct gdsc cam_cc_sfe_0_gdsc = {
3289	.gdscr = 0x13058,
3290	.en_rest_wait_val = 0x2,
3291	.en_few_wait_val = 0x2,
3292	.clk_dis_wait_val = 0xf,
3293	.pd = {
3294		.name = "cam_cc_sfe_0_gdsc",
3295	},
3296	.pwrsts = PWRSTS_OFF_ON,
3297	.parent = &cam_cc_titan_top_gdsc.pd,
3298	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3299};
3300
3301static struct gdsc cam_cc_sfe_1_gdsc = {
3302	.gdscr = 0x130a8,
3303	.en_rest_wait_val = 0x2,
3304	.en_few_wait_val = 0x2,
3305	.clk_dis_wait_val = 0xf,
3306	.pd = {
3307		.name = "cam_cc_sfe_1_gdsc",
3308	},
3309	.pwrsts = PWRSTS_OFF_ON,
3310	.parent = &cam_cc_titan_top_gdsc.pd,
3311	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3312};
3313
3314static struct gdsc cam_cc_sfe_2_gdsc = {
3315	.gdscr = 0x130f8,
3316	.en_rest_wait_val = 0x2,
3317	.en_few_wait_val = 0x2,
3318	.clk_dis_wait_val = 0xf,
3319	.pd = {
3320		.name = "cam_cc_sfe_2_gdsc",
3321	},
3322	.pwrsts = PWRSTS_OFF_ON,
3323	.parent = &cam_cc_titan_top_gdsc.pd,
3324	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3325};
3326
3327static struct clk_regmap *cam_cc_sm8650_clocks[] = {
3328	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
3329	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
3330	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
3331	[CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
3332	[CAM_CC_BPS_SHIFT_CLK] = &cam_cc_bps_shift_clk.clkr,
3333	[CAM_CC_CAMNOC_AXI_NRT_CLK] = &cam_cc_camnoc_axi_nrt_clk.clkr,
3334	[CAM_CC_CAMNOC_AXI_RT_CLK] = &cam_cc_camnoc_axi_rt_clk.clkr,
3335	[CAM_CC_CAMNOC_AXI_RT_CLK_SRC] = &cam_cc_camnoc_axi_rt_clk_src.clkr,
3336	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
3337	[CAM_CC_CAMNOC_XO_CLK] = &cam_cc_camnoc_xo_clk.clkr,
3338	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
3339	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
3340	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
3341	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
3342	[CAM_CC_CCI_2_CLK] = &cam_cc_cci_2_clk.clkr,
3343	[CAM_CC_CCI_2_CLK_SRC] = &cam_cc_cci_2_clk_src.clkr,
3344	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
3345	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
3346	[CAM_CC_CPAS_BPS_CLK] = &cam_cc_cpas_bps_clk.clkr,
3347	[CAM_CC_CPAS_CRE_CLK] = &cam_cc_cpas_cre_clk.clkr,
3348	[CAM_CC_CPAS_FAST_AHB_CLK] = &cam_cc_cpas_fast_ahb_clk.clkr,
3349	[CAM_CC_CPAS_IFE_0_CLK] = &cam_cc_cpas_ife_0_clk.clkr,
3350	[CAM_CC_CPAS_IFE_1_CLK] = &cam_cc_cpas_ife_1_clk.clkr,
3351	[CAM_CC_CPAS_IFE_2_CLK] = &cam_cc_cpas_ife_2_clk.clkr,
3352	[CAM_CC_CPAS_IFE_LITE_CLK] = &cam_cc_cpas_ife_lite_clk.clkr,
3353	[CAM_CC_CPAS_IPE_NPS_CLK] = &cam_cc_cpas_ipe_nps_clk.clkr,
3354	[CAM_CC_CPAS_SBI_CLK] = &cam_cc_cpas_sbi_clk.clkr,
3355	[CAM_CC_CPAS_SFE_0_CLK] = &cam_cc_cpas_sfe_0_clk.clkr,
3356	[CAM_CC_CPAS_SFE_1_CLK] = &cam_cc_cpas_sfe_1_clk.clkr,
3357	[CAM_CC_CPAS_SFE_2_CLK] = &cam_cc_cpas_sfe_2_clk.clkr,
3358	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
3359	[CAM_CC_CRE_AHB_CLK] = &cam_cc_cre_ahb_clk.clkr,
3360	[CAM_CC_CRE_CLK] = &cam_cc_cre_clk.clkr,
3361	[CAM_CC_CRE_CLK_SRC] = &cam_cc_cre_clk_src.clkr,
3362	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
3363	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
3364	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
3365	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
3366	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
3367	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
3368	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
3369	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
3370	[CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
3371	[CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
3372	[CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
3373	[CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
3374	[CAM_CC_CSI6PHYTIMER_CLK] = &cam_cc_csi6phytimer_clk.clkr,
3375	[CAM_CC_CSI6PHYTIMER_CLK_SRC] = &cam_cc_csi6phytimer_clk_src.clkr,
3376	[CAM_CC_CSI7PHYTIMER_CLK] = &cam_cc_csi7phytimer_clk.clkr,
3377	[CAM_CC_CSI7PHYTIMER_CLK_SRC] = &cam_cc_csi7phytimer_clk_src.clkr,
3378	[CAM_CC_CSID_CLK] = &cam_cc_csid_clk.clkr,
3379	[CAM_CC_CSID_CLK_SRC] = &cam_cc_csid_clk_src.clkr,
3380	[CAM_CC_CSID_CSIPHY_RX_CLK] = &cam_cc_csid_csiphy_rx_clk.clkr,
3381	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
3382	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
3383	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
3384	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
3385	[CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
3386	[CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
3387	[CAM_CC_CSIPHY6_CLK] = &cam_cc_csiphy6_clk.clkr,
3388	[CAM_CC_CSIPHY7_CLK] = &cam_cc_csiphy7_clk.clkr,
3389	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
3390	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
3391	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
3392	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
3393	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
3394	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
3395	[CAM_CC_IFE_0_FAST_AHB_CLK] = &cam_cc_ife_0_fast_ahb_clk.clkr,
3396	[CAM_CC_IFE_0_SHIFT_CLK] = &cam_cc_ife_0_shift_clk.clkr,
3397	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
3398	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
3399	[CAM_CC_IFE_1_FAST_AHB_CLK] = &cam_cc_ife_1_fast_ahb_clk.clkr,
3400	[CAM_CC_IFE_1_SHIFT_CLK] = &cam_cc_ife_1_shift_clk.clkr,
3401	[CAM_CC_IFE_2_CLK] = &cam_cc_ife_2_clk.clkr,
3402	[CAM_CC_IFE_2_CLK_SRC] = &cam_cc_ife_2_clk_src.clkr,
3403	[CAM_CC_IFE_2_FAST_AHB_CLK] = &cam_cc_ife_2_fast_ahb_clk.clkr,
3404	[CAM_CC_IFE_2_SHIFT_CLK] = &cam_cc_ife_2_shift_clk.clkr,
3405	[CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
3406	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
3407	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
3408	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
3409	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
3410	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
3411	[CAM_CC_IPE_NPS_AHB_CLK] = &cam_cc_ipe_nps_ahb_clk.clkr,
3412	[CAM_CC_IPE_NPS_CLK] = &cam_cc_ipe_nps_clk.clkr,
3413	[CAM_CC_IPE_NPS_CLK_SRC] = &cam_cc_ipe_nps_clk_src.clkr,
3414	[CAM_CC_IPE_NPS_FAST_AHB_CLK] = &cam_cc_ipe_nps_fast_ahb_clk.clkr,
3415	[CAM_CC_IPE_PPS_CLK] = &cam_cc_ipe_pps_clk.clkr,
3416	[CAM_CC_IPE_PPS_FAST_AHB_CLK] = &cam_cc_ipe_pps_fast_ahb_clk.clkr,
3417	[CAM_CC_IPE_SHIFT_CLK] = &cam_cc_ipe_shift_clk.clkr,
3418	[CAM_CC_JPEG_1_CLK] = &cam_cc_jpeg_1_clk.clkr,
3419	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
3420	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
3421	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
3422	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
3423	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
3424	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
3425	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
3426	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
3427	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
3428	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
3429	[CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
3430	[CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
3431	[CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
3432	[CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
3433	[CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
3434	[CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
3435	[CAM_CC_MCLK7_CLK] = &cam_cc_mclk7_clk.clkr,
3436	[CAM_CC_MCLK7_CLK_SRC] = &cam_cc_mclk7_clk_src.clkr,
3437	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
3438	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
3439	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
3440	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
3441	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
3442	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
3443	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
3444	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
3445	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
3446	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
3447	[CAM_CC_PLL5] = &cam_cc_pll5.clkr,
3448	[CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
3449	[CAM_CC_PLL6] = &cam_cc_pll6.clkr,
3450	[CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
3451	[CAM_CC_PLL7] = &cam_cc_pll7.clkr,
3452	[CAM_CC_PLL7_OUT_EVEN] = &cam_cc_pll7_out_even.clkr,
3453	[CAM_CC_PLL8] = &cam_cc_pll8.clkr,
3454	[CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
3455	[CAM_CC_PLL9] = &cam_cc_pll9.clkr,
3456	[CAM_CC_PLL9_OUT_EVEN] = &cam_cc_pll9_out_even.clkr,
3457	[CAM_CC_PLL9_OUT_ODD] = &cam_cc_pll9_out_odd.clkr,
3458	[CAM_CC_PLL10] = &cam_cc_pll10.clkr,
3459	[CAM_CC_PLL10_OUT_EVEN] = &cam_cc_pll10_out_even.clkr,
3460	[CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
3461	[CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
3462	[CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
3463	[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
3464	[CAM_CC_SBI_FAST_AHB_CLK] = &cam_cc_sbi_fast_ahb_clk.clkr,
3465	[CAM_CC_SBI_SHIFT_CLK] = &cam_cc_sbi_shift_clk.clkr,
3466	[CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
3467	[CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
3468	[CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,
3469	[CAM_CC_SFE_0_SHIFT_CLK] = &cam_cc_sfe_0_shift_clk.clkr,
3470	[CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
3471	[CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
3472	[CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
3473	[CAM_CC_SFE_1_SHIFT_CLK] = &cam_cc_sfe_1_shift_clk.clkr,
3474	[CAM_CC_SFE_2_CLK] = &cam_cc_sfe_2_clk.clkr,
3475	[CAM_CC_SFE_2_CLK_SRC] = &cam_cc_sfe_2_clk_src.clkr,
3476	[CAM_CC_SFE_2_FAST_AHB_CLK] = &cam_cc_sfe_2_fast_ahb_clk.clkr,
3477	[CAM_CC_SFE_2_SHIFT_CLK] = &cam_cc_sfe_2_shift_clk.clkr,
3478	[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
3479	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
3480	[CAM_CC_TITAN_TOP_SHIFT_CLK] = &cam_cc_titan_top_shift_clk.clkr,
3481	[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
3482};
3483
3484static struct gdsc *cam_cc_sm8650_gdscs[] = {
3485	[CAM_CC_TITAN_TOP_GDSC] = &cam_cc_titan_top_gdsc,
3486	[CAM_CC_BPS_GDSC] = &cam_cc_bps_gdsc,
3487	[CAM_CC_IFE_0_GDSC] = &cam_cc_ife_0_gdsc,
3488	[CAM_CC_IFE_1_GDSC] = &cam_cc_ife_1_gdsc,
3489	[CAM_CC_IFE_2_GDSC] = &cam_cc_ife_2_gdsc,
3490	[CAM_CC_IPE_0_GDSC] = &cam_cc_ipe_0_gdsc,
3491	[CAM_CC_SBI_GDSC] = &cam_cc_sbi_gdsc,
3492	[CAM_CC_SFE_0_GDSC] = &cam_cc_sfe_0_gdsc,
3493	[CAM_CC_SFE_1_GDSC] = &cam_cc_sfe_1_gdsc,
3494	[CAM_CC_SFE_2_GDSC] = &cam_cc_sfe_2_gdsc,
3495};
3496
3497static const struct qcom_reset_map cam_cc_sm8650_resets[] = {
3498	[CAM_CC_BPS_BCR] = { 0x10000 },
3499	[CAM_CC_DRV_BCR] = { 0x13310 },
3500	[CAM_CC_ICP_BCR] = { 0x131a0 },
3501	[CAM_CC_IFE_0_BCR] = { 0x11000 },
3502	[CAM_CC_IFE_1_BCR] = { 0x12000 },
3503	[CAM_CC_IFE_2_BCR] = { 0x12050 },
3504	[CAM_CC_IPE_0_BCR] = { 0x1007c },
3505	[CAM_CC_QDSS_DEBUG_BCR] = { 0x13298 },
3506	[CAM_CC_SBI_BCR] = { 0x100e0 },
3507	[CAM_CC_SFE_0_BCR] = { 0x13054 },
3508	[CAM_CC_SFE_1_BCR] = { 0x130a4 },
3509	[CAM_CC_SFE_2_BCR] = { 0x130f4 },
3510};
3511
3512static const struct regmap_config cam_cc_sm8650_regmap_config = {
3513	.reg_bits = 32,
3514	.reg_stride = 4,
3515	.val_bits = 32,
3516	.max_register = 0x1603c,
3517	.fast_io = true,
3518};
3519
3520static struct qcom_cc_desc cam_cc_sm8650_desc = {
3521	.config = &cam_cc_sm8650_regmap_config,
3522	.clks = cam_cc_sm8650_clocks,
3523	.num_clks = ARRAY_SIZE(cam_cc_sm8650_clocks),
3524	.resets = cam_cc_sm8650_resets,
3525	.num_resets = ARRAY_SIZE(cam_cc_sm8650_resets),
3526	.gdscs = cam_cc_sm8650_gdscs,
3527	.num_gdscs = ARRAY_SIZE(cam_cc_sm8650_gdscs),
3528};
3529
3530static const struct of_device_id cam_cc_sm8650_match_table[] = {
3531	{ .compatible = "qcom,sm8650-camcc" },
3532	{ }
3533};
3534MODULE_DEVICE_TABLE(of, cam_cc_sm8650_match_table);
3535
3536static int cam_cc_sm8650_probe(struct platform_device *pdev)
3537{
3538	struct regmap *regmap;
3539	int ret;
3540
3541	ret = devm_pm_runtime_enable(&pdev->dev);
3542	if (ret)
3543		return ret;
3544
3545	ret = pm_runtime_resume_and_get(&pdev->dev);
3546	if (ret)
3547		return ret;
3548
3549	regmap = qcom_cc_map(pdev, &cam_cc_sm8650_desc);
3550	if (IS_ERR(regmap)) {
3551		pm_runtime_put(&pdev->dev);
3552		return PTR_ERR(regmap);
3553	}
3554
3555	clk_lucid_ole_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
3556	clk_lucid_ole_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
3557	clk_rivian_evo_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
3558	clk_lucid_ole_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
3559	clk_lucid_ole_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
3560	clk_lucid_ole_pll_configure(&cam_cc_pll5, regmap, &cam_cc_pll5_config);
3561	clk_lucid_ole_pll_configure(&cam_cc_pll6, regmap, &cam_cc_pll6_config);
3562	clk_lucid_ole_pll_configure(&cam_cc_pll7, regmap, &cam_cc_pll7_config);
3563	clk_lucid_ole_pll_configure(&cam_cc_pll8, regmap, &cam_cc_pll8_config);
3564	clk_lucid_ole_pll_configure(&cam_cc_pll9, regmap, &cam_cc_pll9_config);
3565	clk_lucid_ole_pll_configure(&cam_cc_pll10, regmap, &cam_cc_pll10_config);
3566
3567	/* Keep clocks always enabled */
3568	qcom_branch_set_clk_en(regmap, 0x13318); /* CAM_CC_DRV_AHB_CLK */
3569	qcom_branch_set_clk_en(regmap, 0x13314); /* CAM_CC_DRV_XO_CLK */
3570	qcom_branch_set_clk_en(regmap, 0x132ec); /* CAM_CC_GDSC_CLK */
3571	qcom_branch_set_clk_en(regmap, 0x13308); /* CAM_CC_SLEEP_CLK */
3572
3573	ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sm8650_desc, regmap);
3574
3575	pm_runtime_put(&pdev->dev);
3576
3577	return ret;
3578}
3579
3580static struct platform_driver cam_cc_sm8650_driver = {
3581	.probe = cam_cc_sm8650_probe,
3582	.driver = {
3583		.name = "camcc-sm8650",
3584		.of_match_table = cam_cc_sm8650_match_table,
3585	},
3586};
3587
3588module_platform_driver(cam_cc_sm8650_driver);
3589
3590MODULE_DESCRIPTION("QTI CAMCC SM8650 Driver");
3591MODULE_LICENSE("GPL");