Linux Audio

Check our new training course

Real-Time Linux with PREEMPT_RT training

Feb 18-20, 2025
Register
Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
   4 * Copyright (c) 2023, Linaro Ltd.
   5 */
   6
   7#include <linux/clk-provider.h>
   8#include <linux/mod_devicetable.h>
   9#include <linux/module.h>
  10#include <linux/platform_device.h>
  11#include <linux/pm_runtime.h>
  12#include <linux/regmap.h>
  13
  14#include <dt-bindings/clock/qcom,sc8280xp-camcc.h>
  15
  16#include "clk-alpha-pll.h"
  17#include "clk-branch.h"
  18#include "clk-rcg.h"
  19#include "clk-regmap.h"
  20#include "common.h"
  21#include "gdsc.h"
  22#include "reset.h"
  23
  24enum {
  25	DT_IFACE,
  26	DT_BI_TCXO,
  27	DT_BI_TCXO_AO,
  28	DT_SLEEP_CLK,
  29};
  30
  31enum {
  32	P_BI_TCXO,
  33	P_CAMCC_PLL0_OUT_EVEN,
  34	P_CAMCC_PLL0_OUT_MAIN,
  35	P_CAMCC_PLL0_OUT_ODD,
  36	P_CAMCC_PLL1_OUT_EVEN,
  37	P_CAMCC_PLL2_OUT_AUX,
  38	P_CAMCC_PLL2_OUT_EARLY,
  39	P_CAMCC_PLL3_OUT_EVEN,
  40	P_CAMCC_PLL4_OUT_EVEN,
  41	P_CAMCC_PLL5_OUT_EVEN,
  42	P_CAMCC_PLL6_OUT_EVEN,
  43	P_CAMCC_PLL7_OUT_EVEN,
  44	P_CAMCC_PLL7_OUT_ODD,
  45	P_SLEEP_CLK,
  46};
  47
  48static const struct pll_vco lucid_vco[] = {
  49	{ 249600000, 1800000000, 0 },
  50};
  51
  52static const struct pll_vco zonda_vco[] = {
  53	{ 595200000, 3600000000, 0 },
  54};
  55
  56static struct alpha_pll_config camcc_pll0_config = {
  57	.l = 0x3e,
  58	.alpha = 0x8000,
  59	.config_ctl_val = 0x20485699,
  60	.config_ctl_hi_val = 0x00002261,
  61	.config_ctl_hi1_val = 0x2a9a699c,
  62	.test_ctl_val = 0x00000000,
  63	.test_ctl_hi_val = 0x00000000,
  64	.test_ctl_hi1_val = 0x01800000,
  65	.user_ctl_val = 0x00003100,
  66	.user_ctl_hi_val = 0x00000805,
  67	.user_ctl_hi1_val = 0x00000000,
  68};
  69
  70static struct clk_alpha_pll camcc_pll0 = {
  71	.offset = 0x0,
  72	.vco_table = lucid_vco,
  73	.num_vco = ARRAY_SIZE(lucid_vco),
  74	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
  75	.clkr = {
  76		.hw.init = &(struct clk_init_data){
  77			.name = "camcc_pll0",
  78			.parent_data = &(const struct clk_parent_data){
  79				.index = DT_BI_TCXO,
  80			},
  81			.num_parents = 1,
  82			.ops = &clk_alpha_pll_lucid_5lpe_ops,
  83		},
  84	},
  85};
  86
  87static const struct clk_div_table post_div_table_camcc_pll0_out_even[] = {
  88	{ 0x1, 2 },
  89};
  90
  91static struct clk_alpha_pll_postdiv camcc_pll0_out_even = {
  92	.offset = 0x0,
  93	.post_div_shift = 8,
  94	.post_div_table = post_div_table_camcc_pll0_out_even,
  95	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll0_out_even),
  96	.width = 4,
  97	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
  98	.clkr.hw.init = &(struct clk_init_data){
  99		.name = "camcc_pll0_out_even",
 100		.parent_hws = (const struct clk_hw*[]){
 101			&camcc_pll0.clkr.hw,
 102		},
 103		.num_parents = 1,
 104		.flags = CLK_SET_RATE_PARENT,
 105		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 106	},
 107};
 108
 109static const struct clk_div_table post_div_table_camcc_pll0_out_odd[] = {
 110	{ 0x3, 3 },
 111};
 112
 113static struct clk_alpha_pll_postdiv camcc_pll0_out_odd = {
 114	.offset = 0x0,
 115	.post_div_shift = 12,
 116	.post_div_table = post_div_table_camcc_pll0_out_odd,
 117	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll0_out_odd),
 118	.width = 4,
 119	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 120	.clkr.hw.init = &(struct clk_init_data){
 121		.name = "camcc_pll0_out_odd",
 122		.parent_hws = (const struct clk_hw*[]){
 123			&camcc_pll0.clkr.hw,
 124		},
 125		.num_parents = 1,
 126		.flags = CLK_SET_RATE_PARENT,
 127		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 128	},
 129};
 130
 131static struct alpha_pll_config camcc_pll1_config = {
 132	.l = 0x21,
 133	.alpha = 0x5555,
 134	.config_ctl_val = 0x20485699,
 135	.config_ctl_hi_val = 0x00002261,
 136	.config_ctl_hi1_val = 0x2a9a699c,
 137	.test_ctl_val = 0x00000000,
 138	.test_ctl_hi_val = 0x00000000,
 139	.test_ctl_hi1_val = 0x01800000,
 140	.user_ctl_val = 0x00000100,
 141	.user_ctl_hi_val = 0x00000805,
 142	.user_ctl_hi1_val = 0x00000000,
 143};
 144
 145static struct clk_alpha_pll camcc_pll1 = {
 146	.offset = 0x1000,
 147	.vco_table = lucid_vco,
 148	.num_vco = ARRAY_SIZE(lucid_vco),
 149	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 150	.clkr = {
 151		.hw.init = &(struct clk_init_data){
 152			.name = "camcc_pll1",
 153			.parent_data = &(const struct clk_parent_data){
 154				.index = DT_BI_TCXO,
 155			},
 156			.num_parents = 1,
 157			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 158		},
 159	},
 160};
 161
 162static const struct clk_div_table post_div_table_camcc_pll1_out_even[] = {
 163	{ 0x1, 2 },
 164};
 165
 166static struct clk_alpha_pll_postdiv camcc_pll1_out_even = {
 167	.offset = 0x1000,
 168	.post_div_shift = 8,
 169	.post_div_table = post_div_table_camcc_pll1_out_even,
 170	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll1_out_even),
 171	.width = 4,
 172	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 173	.clkr.hw.init = &(struct clk_init_data){
 174		.name = "camcc_pll1_out_even",
 175		.parent_hws = (const struct clk_hw*[]){
 176			&camcc_pll1.clkr.hw,
 177		},
 178		.num_parents = 1,
 179		.flags = CLK_SET_RATE_PARENT,
 180		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 181	},
 182};
 183
 184static struct alpha_pll_config camcc_pll2_config = {
 185	.l = 0x32,
 186	.alpha = 0x0,
 187	.config_ctl_val = 0x08200800,
 188	.config_ctl_hi_val = 0x05028011,
 189	.config_ctl_hi1_val = 0x08000000,
 190};
 191
 192static struct clk_alpha_pll camcc_pll2 = {
 193	.offset = 0x2000,
 194	.vco_table = zonda_vco,
 195	.num_vco = ARRAY_SIZE(zonda_vco),
 196	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
 197	.clkr = {
 198		.hw.init = &(struct clk_init_data){
 199			.name = "camcc_pll2",
 200			.parent_data = &(const struct clk_parent_data){
 201				.index = DT_BI_TCXO,
 202			},
 203			.num_parents = 1,
 204			.ops = &clk_alpha_pll_zonda_ops,
 205		},
 206	},
 207};
 208
 209static struct alpha_pll_config camcc_pll3_config = {
 210	.l = 0x29,
 211	.alpha = 0xaaaa,
 212	.config_ctl_val = 0x20485699,
 213	.config_ctl_hi_val = 0x00002261,
 214	.config_ctl_hi1_val = 0x2a9a699c,
 215	.test_ctl_val = 0x00000000,
 216	.test_ctl_hi_val = 0x00000000,
 217	.test_ctl_hi1_val = 0x01800000,
 218	.user_ctl_val = 0x00000100,
 219	.user_ctl_hi_val = 0x00000805,
 220	.user_ctl_hi1_val = 0x00000000,
 221};
 222
 223static struct clk_alpha_pll camcc_pll3 = {
 224	.offset = 0x3000,
 225	.vco_table = lucid_vco,
 226	.num_vco = ARRAY_SIZE(lucid_vco),
 227	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 228	.clkr = {
 229		.hw.init = &(struct clk_init_data){
 230			.name = "camcc_pll3",
 231			.parent_data = &(const struct clk_parent_data){
 232				.index = DT_BI_TCXO,
 233			},
 234			.num_parents = 1,
 235			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 236		},
 237	},
 238};
 239
 240static const struct clk_div_table post_div_table_camcc_pll3_out_even[] = {
 241	{ 0x1, 2 },
 242};
 243
 244static struct clk_alpha_pll_postdiv camcc_pll3_out_even = {
 245	.offset = 0x3000,
 246	.post_div_shift = 8,
 247	.post_div_table = post_div_table_camcc_pll3_out_even,
 248	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll3_out_even),
 249	.width = 4,
 250	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 251	.clkr.hw.init = &(struct clk_init_data){
 252		.name = "camcc_pll3_out_even",
 253		.parent_hws = (const struct clk_hw*[]){
 254			&camcc_pll3.clkr.hw,
 255		},
 256		.num_parents = 1,
 257		.flags = CLK_SET_RATE_PARENT,
 258		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 259	},
 260};
 261
 262static struct alpha_pll_config camcc_pll4_config = {
 263	.l = 0x29,
 264	.alpha = 0xaaaa,
 265	.config_ctl_val = 0x20485699,
 266	.config_ctl_hi_val = 0x00002261,
 267	.config_ctl_hi1_val = 0x2a9a699c,
 268	.test_ctl_val = 0x00000000,
 269	.test_ctl_hi_val = 0x00000000,
 270	.test_ctl_hi1_val = 0x01800000,
 271	.user_ctl_val = 0x00000100,
 272	.user_ctl_hi_val = 0x00000805,
 273	.user_ctl_hi1_val = 0x00000000,
 274};
 275
 276static struct clk_alpha_pll camcc_pll4 = {
 277	.offset = 0x4000,
 278	.vco_table = lucid_vco,
 279	.num_vco = ARRAY_SIZE(lucid_vco),
 280	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 281	.clkr = {
 282		.hw.init = &(struct clk_init_data){
 283			.name = "camcc_pll4",
 284			.parent_data = &(const struct clk_parent_data){
 285				.index = DT_BI_TCXO,
 286			},
 287			.num_parents = 1,
 288			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 289		},
 290	},
 291};
 292
 293static const struct clk_div_table post_div_table_camcc_pll4_out_even[] = {
 294	{ 0x1, 2 },
 295};
 296
 297static struct clk_alpha_pll_postdiv camcc_pll4_out_even = {
 298	.offset = 0x4000,
 299	.post_div_shift = 8,
 300	.post_div_table = post_div_table_camcc_pll4_out_even,
 301	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll4_out_even),
 302	.width = 4,
 303	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 304	.clkr.hw.init = &(struct clk_init_data){
 305		.name = "camcc_pll4_out_even",
 306		.parent_hws = (const struct clk_hw*[]){
 307			&camcc_pll4.clkr.hw,
 308		},
 309		.num_parents = 1,
 310		.flags = CLK_SET_RATE_PARENT,
 311		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 312	},
 313};
 314
 315static struct alpha_pll_config camcc_pll5_config = {
 316	.l = 0x29,
 317	.alpha = 0xaaaa,
 318	.config_ctl_val = 0x20485699,
 319	.config_ctl_hi_val = 0x00002261,
 320	.config_ctl_hi1_val = 0x2a9a699c,
 321	.test_ctl_val = 0x00000000,
 322	.test_ctl_hi_val = 0x00000000,
 323	.test_ctl_hi1_val = 0x01800000,
 324	.user_ctl_val = 0x00000100,
 325	.user_ctl_hi_val = 0x00000805,
 326	.user_ctl_hi1_val = 0x00000000,
 327};
 328
 329static struct clk_alpha_pll camcc_pll5 = {
 330	.offset = 0x10000,
 331	.vco_table = lucid_vco,
 332	.num_vco = ARRAY_SIZE(lucid_vco),
 333	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 334	.clkr = {
 335		.hw.init = &(struct clk_init_data){
 336			.name = "camcc_pll5",
 337			.parent_data = &(const struct clk_parent_data){
 338				.index = DT_BI_TCXO,
 339			},
 340			.num_parents = 1,
 341			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 342		},
 343	},
 344};
 345
 346static const struct clk_div_table post_div_table_camcc_pll5_out_even[] = {
 347	{ 0x1, 2 },
 348};
 349
 350static struct clk_alpha_pll_postdiv camcc_pll5_out_even = {
 351	.offset = 0x10000,
 352	.post_div_shift = 8,
 353	.post_div_table = post_div_table_camcc_pll5_out_even,
 354	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll5_out_even),
 355	.width = 4,
 356	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 357	.clkr.hw.init = &(struct clk_init_data){
 358		.name = "camcc_pll5_out_even",
 359		.parent_hws = (const struct clk_hw*[]){
 360			&camcc_pll5.clkr.hw,
 361		},
 362		.num_parents = 1,
 363		.flags = CLK_SET_RATE_PARENT,
 364		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 365	},
 366};
 367
 368static struct alpha_pll_config camcc_pll6_config = {
 369	.l = 0x29,
 370	.alpha = 0xaaaa,
 371	.config_ctl_val = 0x20486699,
 372	.config_ctl_hi_val = 0x00002261,
 373	.config_ctl_hi1_val = 0x2a9a699c,
 374	.test_ctl_val = 0x00000000,
 375	.test_ctl_hi_val = 0x00000000,
 376	.test_ctl_hi1_val = 0x01800000,
 377	.user_ctl_val = 0x00000100,
 378	.user_ctl_hi_val = 0x00000805,
 379	.user_ctl_hi1_val = 0x00000000,
 380};
 381
 382static struct clk_alpha_pll camcc_pll6 = {
 383	.offset = 0x11000,
 384	.vco_table = lucid_vco,
 385	.num_vco = ARRAY_SIZE(lucid_vco),
 386	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 387	.clkr = {
 388		.hw.init = &(struct clk_init_data){
 389			.name = "camcc_pll6",
 390			.parent_data = &(const struct clk_parent_data){
 391				.index = DT_BI_TCXO,
 392			},
 393			.num_parents = 1,
 394			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 395		},
 396	},
 397};
 398
 399static const struct clk_div_table post_div_table_camcc_pll6_out_even[] = {
 400	{ 0x1, 2 },
 401};
 402
 403static struct clk_alpha_pll_postdiv camcc_pll6_out_even = {
 404	.offset = 0x11000,
 405	.post_div_shift = 8,
 406	.post_div_table = post_div_table_camcc_pll6_out_even,
 407	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll6_out_even),
 408	.width = 4,
 409	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 410	.clkr.hw.init = &(struct clk_init_data){
 411		.name = "camcc_pll6_out_even",
 412		.parent_hws = (const struct clk_hw*[]){
 413			&camcc_pll6.clkr.hw,
 414		},
 415		.num_parents = 1,
 416		.flags = CLK_SET_RATE_PARENT,
 417		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 418	},
 419};
 420
 421static struct alpha_pll_config camcc_pll7_config = {
 422	.l = 0x32,
 423	.alpha = 0x0,
 424	.config_ctl_val = 0x20485699,
 425	.config_ctl_hi_val = 0x00002261,
 426	.config_ctl_hi1_val = 0x2a9a699c,
 427	.test_ctl_val = 0x00000000,
 428	.test_ctl_hi_val = 0x00000000,
 429	.test_ctl_hi1_val = 0x01800000,
 430	.user_ctl_val = 0x00003100,
 431	.user_ctl_hi_val = 0x00000805,
 432	.user_ctl_hi1_val = 0x00000000,
 433};
 434
 435static struct clk_alpha_pll camcc_pll7 = {
 436	.offset = 0x12000,
 437	.vco_table = lucid_vco,
 438	.num_vco = ARRAY_SIZE(lucid_vco),
 439	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 440	.clkr = {
 441		.hw.init = &(struct clk_init_data){
 442			.name = "camcc_pll7",
 443			.parent_data = &(const struct clk_parent_data){
 444				.index = DT_BI_TCXO,
 445			},
 446			.num_parents = 1,
 447			.ops = &clk_alpha_pll_lucid_5lpe_ops,
 448		},
 449	},
 450};
 451
 452static const struct clk_div_table post_div_table_camcc_pll7_out_even[] = {
 453	{ 0x1, 2 },
 454};
 455
 456static struct clk_alpha_pll_postdiv camcc_pll7_out_even = {
 457	.offset = 0x12000,
 458	.post_div_shift = 8,
 459	.post_div_table = post_div_table_camcc_pll7_out_even,
 460	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll7_out_even),
 461	.width = 4,
 462	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 463	.clkr.hw.init = &(struct clk_init_data){
 464		.name = "camcc_pll7_out_even",
 465		.parent_hws = (const struct clk_hw*[]){
 466			&camcc_pll7.clkr.hw,
 467		},
 468		.num_parents = 1,
 469		.flags = CLK_SET_RATE_PARENT,
 470		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 471	},
 472};
 473
 474static const struct clk_div_table post_div_table_camcc_pll7_out_odd[] = {
 475	{ 0x3, 3 },
 476};
 477
 478static struct clk_alpha_pll_postdiv camcc_pll7_out_odd = {
 479	.offset = 0x12000,
 480	.post_div_shift = 12,
 481	.post_div_table = post_div_table_camcc_pll7_out_odd,
 482	.num_post_div = ARRAY_SIZE(post_div_table_camcc_pll7_out_odd),
 483	.width = 4,
 484	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
 485	.clkr.hw.init = &(struct clk_init_data){
 486		.name = "camcc_pll7_out_odd",
 487		.parent_hws = (const struct clk_hw*[]){
 488			&camcc_pll7.clkr.hw,
 489		},
 490		.num_parents = 1,
 491		.flags = CLK_SET_RATE_PARENT,
 492		.ops = &clk_alpha_pll_postdiv_lucid_ops,
 493	},
 494};
 495
 496static const struct parent_map camcc_parent_map_0[] = {
 497	{ P_BI_TCXO, 0 },
 498	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
 499	{ P_CAMCC_PLL0_OUT_EVEN, 2 },
 500	{ P_CAMCC_PLL0_OUT_ODD, 3 },
 501	{ P_CAMCC_PLL7_OUT_EVEN, 5 },
 502};
 503
 504static const struct clk_parent_data camcc_parent_data_0[] = {
 505	{ .index = DT_BI_TCXO },
 506	{ .hw = &camcc_pll0.clkr.hw },
 507	{ .hw = &camcc_pll0_out_even.clkr.hw },
 508	{ .hw = &camcc_pll0_out_odd.clkr.hw },
 509	{ .hw = &camcc_pll7_out_even.clkr.hw },
 510};
 511
 512static const struct parent_map camcc_parent_map_1[] = {
 513	{ P_BI_TCXO, 0 },
 514	{ P_CAMCC_PLL2_OUT_AUX, 2 },
 515	{ P_CAMCC_PLL2_OUT_EARLY, 5 },
 516};
 517
 518static const struct clk_parent_data camcc_parent_data_1[] = {
 519	{ .index = DT_BI_TCXO },
 520	{ .hw = &camcc_pll2.clkr.hw },
 521	{ .hw = &camcc_pll2.clkr.hw },
 522};
 523
 524static const struct parent_map camcc_parent_map_2[] = {
 525	{ P_BI_TCXO, 0 },
 526	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
 527	{ P_CAMCC_PLL0_OUT_EVEN, 2 },
 528	{ P_CAMCC_PLL0_OUT_ODD, 3 },
 529	{ P_CAMCC_PLL7_OUT_ODD, 4 },
 530	{ P_CAMCC_PLL7_OUT_EVEN, 5 },
 531};
 532
 533static const struct clk_parent_data camcc_parent_data_2[] = {
 534	{ .index = DT_BI_TCXO },
 535	{ .hw = &camcc_pll0.clkr.hw },
 536	{ .hw = &camcc_pll0_out_even.clkr.hw },
 537	{ .hw = &camcc_pll0_out_odd.clkr.hw },
 538	{ .hw = &camcc_pll7_out_odd.clkr.hw },
 539	{ .hw = &camcc_pll7_out_even.clkr.hw },
 540};
 541
 542static const struct parent_map camcc_parent_map_3[] = {
 543	{ P_BI_TCXO, 0 },
 544	{ P_CAMCC_PLL0_OUT_MAIN, 1 },
 545	{ P_CAMCC_PLL0_OUT_EVEN, 2 },
 546	{ P_CAMCC_PLL0_OUT_ODD, 3 },
 547	{ P_CAMCC_PLL7_OUT_EVEN, 5 },
 548	{ P_CAMCC_PLL3_OUT_EVEN, 6 },
 549};
 550
 551static const struct clk_parent_data camcc_parent_data_3[] = {
 552	{ .index = DT_BI_TCXO },
 553	{ .hw = &camcc_pll0.clkr.hw },
 554	{ .hw = &camcc_pll0_out_even.clkr.hw },
 555	{ .hw = &camcc_pll0_out_odd.clkr.hw },
 556	{ .hw = &camcc_pll7_out_even.clkr.hw },
 557	{ .hw = &camcc_pll3_out_even.clkr.hw },
 558};
 559
 560static const struct parent_map camcc_parent_map_4[] = {
 561	{ P_BI_TCXO, 0 },
 562	{ P_CAMCC_PLL3_OUT_EVEN, 6 },
 563};
 564
 565static const struct clk_parent_data camcc_parent_data_4[] = {
 566	{ .index = DT_BI_TCXO },
 567	{ .hw = &camcc_pll3_out_even.clkr.hw },
 568};
 569
 570static const struct parent_map camcc_parent_map_5[] = {
 571	{ P_BI_TCXO, 0 },
 572	{ P_CAMCC_PLL4_OUT_EVEN, 6 },
 573};
 574
 575static const struct clk_parent_data camcc_parent_data_5[] = {
 576	{ .index = DT_BI_TCXO },
 577	{ .hw = &camcc_pll4_out_even.clkr.hw },
 578};
 579
 580static const struct parent_map camcc_parent_map_6[] = {
 581	{ P_BI_TCXO, 0 },
 582	{ P_CAMCC_PLL5_OUT_EVEN, 6 },
 583};
 584
 585static const struct clk_parent_data camcc_parent_data_6[] = {
 586	{ .index = DT_BI_TCXO },
 587	{ .hw = &camcc_pll5_out_even.clkr.hw },
 588};
 589
 590static const struct parent_map camcc_parent_map_7[] = {
 591	{ P_BI_TCXO, 0 },
 592	{ P_CAMCC_PLL6_OUT_EVEN, 6 },
 593};
 594
 595static const struct clk_parent_data camcc_parent_data_7[] = {
 596	{ .index = DT_BI_TCXO },
 597	{ .hw = &camcc_pll6_out_even.clkr.hw },
 598};
 599
 600static const struct parent_map camcc_parent_map_8[] = {
 601	{ P_BI_TCXO, 0 },
 602	{ P_CAMCC_PLL1_OUT_EVEN, 4 },
 603};
 604
 605static const struct clk_parent_data camcc_parent_data_8[] = {
 606	{ .index = DT_BI_TCXO },
 607	{ .hw = &camcc_pll1_out_even.clkr.hw },
 608};
 609
 610static const struct parent_map camcc_parent_map_9[] = {
 611	{ P_SLEEP_CLK, 0 },
 612};
 613
 614static const struct clk_parent_data camcc_parent_data_9[] = {
 615	{ .fw_name = "sleep_clk" },
 616};
 617
 618static const struct parent_map camcc_parent_map_10[] = {
 619	{ P_BI_TCXO, 0 },
 620};
 621
 622static const struct clk_parent_data camcc_parent_data_10_ao[] = {
 623	{ .fw_name = "bi_tcxo_ao" },
 624};
 625
 626static const struct freq_tbl ftbl_camcc_bps_clk_src[] = {
 627	F(19200000, P_BI_TCXO, 1, 0, 0),
 628	F(200000000, P_CAMCC_PLL0_OUT_ODD, 2, 0, 0),
 629	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 630	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
 631	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
 632	F(760000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
 633	{ }
 634};
 635
 636static struct clk_rcg2 camcc_bps_clk_src = {
 637	.cmd_rcgr = 0x7010,
 638	.mnd_width = 0,
 639	.hid_width = 5,
 640	.parent_map = camcc_parent_map_3,
 641	.freq_tbl = ftbl_camcc_bps_clk_src,
 642	.clkr.hw.init = &(struct clk_init_data){
 643		.name = "camcc_bps_clk_src",
 644		.parent_data = camcc_parent_data_3,
 645		.num_parents = ARRAY_SIZE(camcc_parent_data_3),
 646		.flags = CLK_SET_RATE_PARENT,
 647		.ops = &clk_rcg2_shared_ops,
 648	},
 649};
 650
 651static const struct freq_tbl ftbl_camcc_camnoc_axi_clk_src[] = {
 652	F(19200000, P_BI_TCXO, 1, 0, 0),
 653	F(150000000, P_CAMCC_PLL0_OUT_EVEN, 4, 0, 0),
 654	F(266666667, P_CAMCC_PLL0_OUT_ODD, 1.5, 0, 0),
 655	F(320000000, P_CAMCC_PLL7_OUT_ODD, 1, 0, 0),
 656	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 657	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
 658	{ }
 659};
 660
 661static struct clk_rcg2 camcc_camnoc_axi_clk_src = {
 662	.cmd_rcgr = 0xc170,
 663	.mnd_width = 0,
 664	.hid_width = 5,
 665	.parent_map = camcc_parent_map_2,
 666	.freq_tbl = ftbl_camcc_camnoc_axi_clk_src,
 667	.clkr.hw.init = &(struct clk_init_data){
 668		.name = "camcc_camnoc_axi_clk_src",
 669		.parent_data = camcc_parent_data_2,
 670		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
 671		.ops = &clk_rcg2_ops,
 672	},
 673};
 674
 675static const struct freq_tbl ftbl_camcc_cci_0_clk_src[] = {
 676	F(19200000, P_BI_TCXO, 1, 0, 0),
 677	F(37500000, P_CAMCC_PLL0_OUT_EVEN, 16, 0, 0),
 678	{ }
 679};
 680
 681static struct clk_rcg2 camcc_cci_0_clk_src = {
 682	.cmd_rcgr = 0xc108,
 683	.mnd_width = 8,
 684	.hid_width = 5,
 685	.parent_map = camcc_parent_map_0,
 686	.freq_tbl = ftbl_camcc_cci_0_clk_src,
 687	.clkr.hw.init = &(struct clk_init_data){
 688		.name = "camcc_cci_0_clk_src",
 689		.parent_data = camcc_parent_data_0,
 690		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 691		.ops = &clk_rcg2_ops,
 692	},
 693};
 694
 695static struct clk_rcg2 camcc_cci_1_clk_src = {
 696	.cmd_rcgr = 0xc124,
 697	.mnd_width = 8,
 698	.hid_width = 5,
 699	.parent_map = camcc_parent_map_0,
 700	.freq_tbl = ftbl_camcc_cci_0_clk_src,
 701	.clkr.hw.init = &(struct clk_init_data){
 702		.name = "camcc_cci_1_clk_src",
 703		.parent_data = camcc_parent_data_0,
 704		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 705		.ops = &clk_rcg2_ops,
 706	},
 707};
 708
 709static struct clk_rcg2 camcc_cci_2_clk_src = {
 710	.cmd_rcgr = 0xc204,
 711	.mnd_width = 8,
 712	.hid_width = 5,
 713	.parent_map = camcc_parent_map_0,
 714	.freq_tbl = ftbl_camcc_cci_0_clk_src,
 715	.clkr.hw.init = &(struct clk_init_data){
 716		.name = "camcc_cci_2_clk_src",
 717		.parent_data = camcc_parent_data_0,
 718		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 719		.ops = &clk_rcg2_ops,
 720	},
 721};
 722
 723static struct clk_rcg2 camcc_cci_3_clk_src = {
 724	.cmd_rcgr = 0xc220,
 725	.mnd_width = 8,
 726	.hid_width = 5,
 727	.parent_map = camcc_parent_map_0,
 728	.freq_tbl = ftbl_camcc_cci_0_clk_src,
 729	.clkr.hw.init = &(struct clk_init_data){
 730		.name = "camcc_cci_3_clk_src",
 731		.parent_data = camcc_parent_data_0,
 732		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 733		.ops = &clk_rcg2_ops,
 734	},
 735};
 736
 737static const struct freq_tbl ftbl_camcc_cphy_rx_clk_src[] = {
 738	F(19200000, P_BI_TCXO, 1, 0, 0),
 739	F(240000000, P_CAMCC_PLL0_OUT_EVEN, 2.5, 0, 0),
 740	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 741	{ }
 742};
 743
 744static struct clk_rcg2 camcc_cphy_rx_clk_src = {
 745	.cmd_rcgr = 0xa064,
 746	.mnd_width = 0,
 747	.hid_width = 5,
 748	.parent_map = camcc_parent_map_0,
 749	.freq_tbl = ftbl_camcc_cphy_rx_clk_src,
 750	.clkr.hw.init = &(struct clk_init_data){
 751		.name = "camcc_cphy_rx_clk_src",
 752		.parent_data = camcc_parent_data_0,
 753		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 754		.ops = &clk_rcg2_ops,
 755	},
 756};
 757
 758static const struct freq_tbl ftbl_camcc_csi0phytimer_clk_src[] = {
 759	F(19200000, P_BI_TCXO, 1, 0, 0),
 760	F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
 761	{ }
 762};
 763
 764static struct clk_rcg2 camcc_csi0phytimer_clk_src = {
 765	.cmd_rcgr = 0x6004,
 766	.mnd_width = 0,
 767	.hid_width = 5,
 768	.parent_map = camcc_parent_map_0,
 769	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
 770	.clkr.hw.init = &(struct clk_init_data){
 771		.name = "camcc_csi0phytimer_clk_src",
 772		.parent_data = camcc_parent_data_0,
 773		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 774		.ops = &clk_rcg2_ops,
 775	},
 776};
 777
 778static struct clk_rcg2 camcc_csi1phytimer_clk_src = {
 779	.cmd_rcgr = 0x6028,
 780	.mnd_width = 0,
 781	.hid_width = 5,
 782	.parent_map = camcc_parent_map_0,
 783	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
 784	.clkr.hw.init = &(struct clk_init_data){
 785		.name = "camcc_csi1phytimer_clk_src",
 786		.parent_data = camcc_parent_data_0,
 787		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 788		.ops = &clk_rcg2_ops,
 789	},
 790};
 791
 792static struct clk_rcg2 camcc_csi2phytimer_clk_src = {
 793	.cmd_rcgr = 0x604c,
 794	.mnd_width = 0,
 795	.hid_width = 5,
 796	.parent_map = camcc_parent_map_0,
 797	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
 798	.clkr.hw.init = &(struct clk_init_data){
 799		.name = "camcc_csi2phytimer_clk_src",
 800		.parent_data = camcc_parent_data_0,
 801		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 802		.ops = &clk_rcg2_ops,
 803	},
 804};
 805
 806static struct clk_rcg2 camcc_csi3phytimer_clk_src = {
 807	.cmd_rcgr = 0x6074,
 808	.mnd_width = 0,
 809	.hid_width = 5,
 810	.parent_map = camcc_parent_map_0,
 811	.freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
 812	.clkr.hw.init = &(struct clk_init_data){
 813		.name = "camcc_csi3phytimer_clk_src",
 814		.parent_data = camcc_parent_data_0,
 815		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 816		.ops = &clk_rcg2_ops,
 817	},
 818};
 819
 820static const struct freq_tbl ftbl_camcc_fast_ahb_clk_src[] = {
 821	F(19200000, P_BI_TCXO, 1, 0, 0),
 822	F(100000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0),
 823	F(200000000, P_CAMCC_PLL0_OUT_EVEN, 3, 0, 0),
 824	F(300000000, P_CAMCC_PLL0_OUT_MAIN, 4, 0, 0),
 825	F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
 826	{ }
 827};
 828
 829static struct clk_rcg2 camcc_fast_ahb_clk_src = {
 830	.cmd_rcgr = 0x703c,
 831	.mnd_width = 0,
 832	.hid_width = 5,
 833	.parent_map = camcc_parent_map_0,
 834	.freq_tbl = ftbl_camcc_fast_ahb_clk_src,
 835	.clkr.hw.init = &(struct clk_init_data){
 836		.name = "camcc_fast_ahb_clk_src",
 837		.parent_data = camcc_parent_data_0,
 838		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 839		.ops = &clk_rcg2_ops,
 840	},
 841};
 842
 843static const struct freq_tbl ftbl_camcc_icp_clk_src[] = {
 844	F(19200000, P_BI_TCXO, 1, 0, 0),
 845	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 846	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
 847	{ }
 848};
 849
 850static struct clk_rcg2 camcc_icp_clk_src = {
 851	.cmd_rcgr = 0xc0b8,
 852	.mnd_width = 0,
 853	.hid_width = 5,
 854	.parent_map = camcc_parent_map_0,
 855	.freq_tbl = ftbl_camcc_icp_clk_src,
 856	.clkr.hw.init = &(struct clk_init_data){
 857		.name = "camcc_icp_clk_src",
 858		.parent_data = camcc_parent_data_0,
 859		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 860		.ops = &clk_rcg2_shared_ops,
 861	},
 862};
 863
 864static const struct freq_tbl ftbl_camcc_ife_0_clk_src[] = {
 865	F(19200000, P_BI_TCXO, 1, 0, 0),
 866	F(400000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
 867	F(558000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
 868	F(637000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
 869	F(760000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
 870	{ }
 871};
 872
 873static struct clk_rcg2 camcc_ife_0_clk_src = {
 874	.cmd_rcgr = 0xa010,
 875	.mnd_width = 0,
 876	.hid_width = 5,
 877	.parent_map = camcc_parent_map_4,
 878	.freq_tbl = ftbl_camcc_ife_0_clk_src,
 879	.clkr.hw.init = &(struct clk_init_data){
 880		.name = "camcc_ife_0_clk_src",
 881		.parent_data = camcc_parent_data_4,
 882		.num_parents = ARRAY_SIZE(camcc_parent_data_4),
 883		.flags = CLK_SET_RATE_PARENT,
 884		.ops = &clk_rcg2_shared_ops,
 885	},
 886};
 887
 888static const struct freq_tbl ftbl_camcc_ife_0_csid_clk_src[] = {
 889	F(19200000, P_BI_TCXO, 1, 0, 0),
 890	F(75000000, P_CAMCC_PLL0_OUT_EVEN, 8, 0, 0),
 891	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 892	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
 893	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
 894	{ }
 895};
 896
 897static struct clk_rcg2 camcc_ife_0_csid_clk_src = {
 898	.cmd_rcgr = 0xa03c,
 899	.mnd_width = 0,
 900	.hid_width = 5,
 901	.parent_map = camcc_parent_map_0,
 902	.freq_tbl = ftbl_camcc_ife_0_csid_clk_src,
 903	.clkr.hw.init = &(struct clk_init_data){
 904		.name = "camcc_ife_0_csid_clk_src",
 905		.parent_data = camcc_parent_data_0,
 906		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 907		.ops = &clk_rcg2_shared_ops,
 908	},
 909};
 910
 911static const struct freq_tbl ftbl_camcc_ife_1_clk_src[] = {
 912	F(19200000, P_BI_TCXO, 1, 0, 0),
 913	F(400000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
 914	F(558000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
 915	F(637000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
 916	F(760000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
 917	{ }
 918};
 919
 920static struct clk_rcg2 camcc_ife_1_clk_src = {
 921	.cmd_rcgr = 0xb010,
 922	.mnd_width = 0,
 923	.hid_width = 5,
 924	.parent_map = camcc_parent_map_5,
 925	.freq_tbl = ftbl_camcc_ife_1_clk_src,
 926	.clkr.hw.init = &(struct clk_init_data){
 927		.name = "camcc_ife_1_clk_src",
 928		.parent_data = camcc_parent_data_5,
 929		.num_parents = ARRAY_SIZE(camcc_parent_data_5),
 930		.flags = CLK_SET_RATE_PARENT,
 931		.ops = &clk_rcg2_shared_ops,
 932	},
 933};
 934
 935static struct clk_rcg2 camcc_ife_1_csid_clk_src = {
 936	.cmd_rcgr = 0xb03c,
 937	.mnd_width = 0,
 938	.hid_width = 5,
 939	.parent_map = camcc_parent_map_0,
 940	.freq_tbl = ftbl_camcc_ife_0_csid_clk_src,
 941	.clkr.hw.init = &(struct clk_init_data){
 942		.name = "camcc_ife_1_csid_clk_src",
 943		.parent_data = camcc_parent_data_0,
 944		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 945		.ops = &clk_rcg2_shared_ops,
 946	},
 947};
 948
 949static const struct freq_tbl ftbl_camcc_ife_2_clk_src[] = {
 950	F(400000000, P_CAMCC_PLL5_OUT_EVEN, 1, 0, 0),
 951	F(558000000, P_CAMCC_PLL5_OUT_EVEN, 1, 0, 0),
 952	F(637000000, P_CAMCC_PLL5_OUT_EVEN, 1, 0, 0),
 953	F(760000000, P_CAMCC_PLL5_OUT_EVEN, 1, 0, 0),
 954	{ }
 955};
 956
 957static struct clk_rcg2 camcc_ife_2_clk_src = {
 958	.cmd_rcgr = 0xf010,
 959	.mnd_width = 0,
 960	.hid_width = 5,
 961	.parent_map = camcc_parent_map_6,
 962	.freq_tbl = ftbl_camcc_ife_2_clk_src,
 963	.clkr.hw.init = &(struct clk_init_data){
 964		.name = "camcc_ife_2_clk_src",
 965		.parent_data = camcc_parent_data_6,
 966		.num_parents = ARRAY_SIZE(camcc_parent_data_6),
 967		.flags = CLK_SET_RATE_PARENT,
 968		.ops = &clk_rcg2_shared_ops,
 969	},
 970};
 971
 972static const struct freq_tbl ftbl_camcc_ife_2_csid_clk_src[] = {
 973	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
 974	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
 975	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
 976	{ }
 977};
 978
 979static struct clk_rcg2 camcc_ife_2_csid_clk_src = {
 980	.cmd_rcgr = 0xf03c,
 981	.mnd_width = 0,
 982	.hid_width = 5,
 983	.parent_map = camcc_parent_map_0,
 984	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
 985	.clkr.hw.init = &(struct clk_init_data){
 986		.name = "camcc_ife_2_csid_clk_src",
 987		.parent_data = camcc_parent_data_0,
 988		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
 989		.ops = &clk_rcg2_shared_ops,
 990	},
 991};
 992
 993static const struct freq_tbl ftbl_camcc_ife_3_clk_src[] = {
 994	F(19200000, P_BI_TCXO, 1, 0, 0),
 995	F(400000000, P_CAMCC_PLL6_OUT_EVEN, 1, 0, 0),
 996	F(558000000, P_CAMCC_PLL6_OUT_EVEN, 1, 0, 0),
 997	F(637000000, P_CAMCC_PLL6_OUT_EVEN, 1, 0, 0),
 998	F(760000000, P_CAMCC_PLL6_OUT_EVEN, 1, 0, 0),
 999	{ }
1000};
1001
1002static struct clk_rcg2 camcc_ife_3_clk_src = {
1003	.cmd_rcgr = 0xf07c,
1004	.mnd_width = 0,
1005	.hid_width = 5,
1006	.parent_map = camcc_parent_map_7,
1007	.freq_tbl = ftbl_camcc_ife_3_clk_src,
1008	.clkr.hw.init = &(struct clk_init_data){
1009		.name = "camcc_ife_3_clk_src",
1010		.parent_data = camcc_parent_data_7,
1011		.num_parents = ARRAY_SIZE(camcc_parent_data_7),
1012		.flags = CLK_SET_RATE_PARENT,
1013		.ops = &clk_rcg2_shared_ops,
1014	},
1015};
1016
1017static struct clk_rcg2 camcc_ife_3_csid_clk_src = {
1018	.cmd_rcgr = 0xf0a8,
1019	.mnd_width = 0,
1020	.hid_width = 5,
1021	.parent_map = camcc_parent_map_0,
1022	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
1023	.clkr.hw.init = &(struct clk_init_data){
1024		.name = "camcc_ife_3_csid_clk_src",
1025		.parent_data = camcc_parent_data_0,
1026		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1027		.ops = &clk_rcg2_shared_ops,
1028	},
1029};
1030
1031static const struct freq_tbl ftbl_camcc_ife_lite_0_clk_src[] = {
1032	F(320000000, P_CAMCC_PLL7_OUT_ODD, 1, 0, 0),
1033	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
1034	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
1035	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
1036	{ }
1037};
1038
1039static struct clk_rcg2 camcc_ife_lite_0_clk_src = {
1040	.cmd_rcgr = 0xc004,
1041	.mnd_width = 0,
1042	.hid_width = 5,
1043	.parent_map = camcc_parent_map_2,
1044	.freq_tbl = ftbl_camcc_ife_lite_0_clk_src,
1045	.clkr.hw.init = &(struct clk_init_data){
1046		.name = "camcc_ife_lite_0_clk_src",
1047		.parent_data = camcc_parent_data_2,
1048		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
1049		.ops = &clk_rcg2_shared_ops,
1050	},
1051};
1052
1053static struct clk_rcg2 camcc_ife_lite_0_csid_clk_src = {
1054	.cmd_rcgr = 0xc020,
1055	.mnd_width = 0,
1056	.hid_width = 5,
1057	.parent_map = camcc_parent_map_0,
1058	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
1059	.clkr.hw.init = &(struct clk_init_data){
1060		.name = "camcc_ife_lite_0_csid_clk_src",
1061		.parent_data = camcc_parent_data_0,
1062		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1063		.ops = &clk_rcg2_shared_ops,
1064	},
1065};
1066
1067static struct clk_rcg2 camcc_ife_lite_1_clk_src = {
1068	.cmd_rcgr = 0xc048,
1069	.mnd_width = 0,
1070	.hid_width = 5,
1071	.parent_map = camcc_parent_map_2,
1072	.freq_tbl = ftbl_camcc_ife_lite_0_clk_src,
1073	.clkr.hw.init = &(struct clk_init_data){
1074		.name = "camcc_ife_lite_1_clk_src",
1075		.parent_data = camcc_parent_data_2,
1076		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
1077		.ops = &clk_rcg2_shared_ops,
1078	},
1079};
1080
1081static struct clk_rcg2 camcc_ife_lite_1_csid_clk_src = {
1082	.cmd_rcgr = 0xc064,
1083	.mnd_width = 0,
1084	.hid_width = 5,
1085	.parent_map = camcc_parent_map_0,
1086	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
1087	.clkr.hw.init = &(struct clk_init_data){
1088		.name = "camcc_ife_lite_1_csid_clk_src",
1089		.parent_data = camcc_parent_data_0,
1090		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1091		.ops = &clk_rcg2_shared_ops,
1092	},
1093};
1094
1095static struct clk_rcg2 camcc_ife_lite_2_clk_src = {
1096	.cmd_rcgr = 0xc240,
1097	.mnd_width = 0,
1098	.hid_width = 5,
1099	.parent_map = camcc_parent_map_2,
1100	.freq_tbl = ftbl_camcc_ife_lite_0_clk_src,
1101	.clkr.hw.init = &(struct clk_init_data){
1102		.name = "camcc_ife_lite_2_clk_src",
1103		.parent_data = camcc_parent_data_2,
1104		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
1105		.ops = &clk_rcg2_shared_ops,
1106	},
1107};
1108
1109static struct clk_rcg2 camcc_ife_lite_2_csid_clk_src = {
1110	.cmd_rcgr = 0xc25c,
1111	.mnd_width = 0,
1112	.hid_width = 5,
1113	.parent_map = camcc_parent_map_0,
1114	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
1115	.clkr.hw.init = &(struct clk_init_data){
1116		.name = "camcc_ife_lite_2_csid_clk_src",
1117		.parent_data = camcc_parent_data_0,
1118		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1119		.ops = &clk_rcg2_shared_ops,
1120	},
1121};
1122
1123static struct clk_rcg2 camcc_ife_lite_3_clk_src = {
1124	.cmd_rcgr = 0xc284,
1125	.mnd_width = 0,
1126	.hid_width = 5,
1127	.parent_map = camcc_parent_map_2,
1128	.freq_tbl = ftbl_camcc_ife_lite_0_clk_src,
1129	.clkr.hw.init = &(struct clk_init_data){
1130		.name = "camcc_ife_lite_3_clk_src",
1131		.parent_data = camcc_parent_data_2,
1132		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
1133		.ops = &clk_rcg2_shared_ops,
1134	},
1135};
1136
1137static struct clk_rcg2 camcc_ife_lite_3_csid_clk_src = {
1138	.cmd_rcgr = 0xc2a0,
1139	.mnd_width = 0,
1140	.hid_width = 5,
1141	.parent_map = camcc_parent_map_0,
1142	.freq_tbl = ftbl_camcc_ife_2_csid_clk_src,
1143	.clkr.hw.init = &(struct clk_init_data){
1144		.name = "camcc_ife_lite_3_csid_clk_src",
1145		.parent_data = camcc_parent_data_0,
1146		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1147		.ops = &clk_rcg2_shared_ops,
1148	},
1149};
1150
1151static const struct freq_tbl ftbl_camcc_ipe_0_clk_src[] = {
1152	F(19200000, P_BI_TCXO, 1, 0, 0),
1153	F(320000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
1154	F(475000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
1155	F(520000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
1156	F(600000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
1157	{ }
1158};
1159
1160static struct clk_rcg2 camcc_ipe_0_clk_src = {
1161	.cmd_rcgr = 0x8010,
1162	.mnd_width = 0,
1163	.hid_width = 5,
1164	.parent_map = camcc_parent_map_8,
1165	.freq_tbl = ftbl_camcc_ipe_0_clk_src,
1166	.clkr.hw.init = &(struct clk_init_data){
1167		.name = "camcc_ipe_0_clk_src",
1168		.parent_data = camcc_parent_data_8,
1169		.num_parents = ARRAY_SIZE(camcc_parent_data_8),
1170		.flags = CLK_SET_RATE_PARENT,
1171		.ops = &clk_rcg2_shared_ops,
1172	},
1173};
1174
1175static const struct freq_tbl ftbl_camcc_jpeg_clk_src[] = {
1176	F(19200000, P_BI_TCXO, 1, 0, 0),
1177	F(200000000, P_CAMCC_PLL0_OUT_ODD, 2, 0, 0),
1178	F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
1179	F(480000000, P_CAMCC_PLL7_OUT_EVEN, 1, 0, 0),
1180	F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
1181	{ }
1182};
1183
1184static struct clk_rcg2 camcc_jpeg_clk_src = {
1185	.cmd_rcgr = 0xc08c,
1186	.mnd_width = 0,
1187	.hid_width = 5,
1188	.parent_map = camcc_parent_map_0,
1189	.freq_tbl = ftbl_camcc_jpeg_clk_src,
1190	.clkr.hw.init = &(struct clk_init_data){
1191		.name = "camcc_jpeg_clk_src",
1192		.parent_data = camcc_parent_data_0,
1193		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1194		.ops = &clk_rcg2_shared_ops,
1195	},
1196};
1197
1198static const struct freq_tbl ftbl_camcc_lrme_clk_src[] = {
1199	F(240000000, P_CAMCC_PLL7_OUT_EVEN, 2, 0, 0),
1200	F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
1201	F(320000000, P_CAMCC_PLL7_OUT_ODD, 1, 0, 0),
1202	F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
1203	{ }
1204};
1205
1206static struct clk_rcg2 camcc_lrme_clk_src = {
1207	.cmd_rcgr = 0xc144,
1208	.mnd_width = 0,
1209	.hid_width = 5,
1210	.parent_map = camcc_parent_map_2,
1211	.freq_tbl = ftbl_camcc_lrme_clk_src,
1212	.clkr.hw.init = &(struct clk_init_data){
1213		.name = "camcc_lrme_clk_src",
1214		.parent_data = camcc_parent_data_2,
1215		.num_parents = ARRAY_SIZE(camcc_parent_data_2),
1216		.ops = &clk_rcg2_shared_ops,
1217	},
1218};
1219
1220static const struct freq_tbl ftbl_camcc_mclk0_clk_src[] = {
1221	F(19200000, P_BI_TCXO, 1, 0, 0),
1222	F(24000000, P_CAMCC_PLL2_OUT_EARLY, 10, 1, 4),
1223	F(64000000, P_CAMCC_PLL2_OUT_EARLY, 15, 0, 0),
1224	{ }
1225};
1226
1227static struct clk_rcg2 camcc_mclk0_clk_src = {
1228	.cmd_rcgr = 0x5004,
1229	.mnd_width = 8,
1230	.hid_width = 5,
1231	.parent_map = camcc_parent_map_1,
1232	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1233	.clkr.hw.init = &(struct clk_init_data){
1234		.name = "camcc_mclk0_clk_src",
1235		.parent_data = camcc_parent_data_1,
1236		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1237		.ops = &clk_rcg2_ops,
1238	},
1239};
1240
1241static struct clk_rcg2 camcc_mclk1_clk_src = {
1242	.cmd_rcgr = 0x5024,
1243	.mnd_width = 8,
1244	.hid_width = 5,
1245	.parent_map = camcc_parent_map_1,
1246	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1247	.clkr.hw.init = &(struct clk_init_data){
1248		.name = "camcc_mclk1_clk_src",
1249		.parent_data = camcc_parent_data_1,
1250		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1251		.ops = &clk_rcg2_ops,
1252	},
1253};
1254
1255static struct clk_rcg2 camcc_mclk2_clk_src = {
1256	.cmd_rcgr = 0x5044,
1257	.mnd_width = 8,
1258	.hid_width = 5,
1259	.parent_map = camcc_parent_map_1,
1260	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1261	.clkr.hw.init = &(struct clk_init_data){
1262		.name = "camcc_mclk2_clk_src",
1263		.parent_data = camcc_parent_data_1,
1264		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1265		.ops = &clk_rcg2_ops,
1266	},
1267};
1268
1269static struct clk_rcg2 camcc_mclk3_clk_src = {
1270	.cmd_rcgr = 0x5064,
1271	.mnd_width = 8,
1272	.hid_width = 5,
1273	.parent_map = camcc_parent_map_1,
1274	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1275	.clkr.hw.init = &(struct clk_init_data){
1276		.name = "camcc_mclk3_clk_src",
1277		.parent_data = camcc_parent_data_1,
1278		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1279		.ops = &clk_rcg2_ops,
1280	},
1281};
1282
1283static struct clk_rcg2 camcc_mclk4_clk_src = {
1284	.cmd_rcgr = 0x5084,
1285	.mnd_width = 8,
1286	.hid_width = 5,
1287	.parent_map = camcc_parent_map_1,
1288	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1289	.clkr.hw.init = &(struct clk_init_data){
1290		.name = "camcc_mclk4_clk_src",
1291		.parent_data = camcc_parent_data_1,
1292		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1293		.ops = &clk_rcg2_ops,
1294	},
1295};
1296
1297static struct clk_rcg2 camcc_mclk5_clk_src = {
1298	.cmd_rcgr = 0x50a4,
1299	.mnd_width = 8,
1300	.hid_width = 5,
1301	.parent_map = camcc_parent_map_1,
1302	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1303	.clkr.hw.init = &(struct clk_init_data){
1304		.name = "camcc_mclk5_clk_src",
1305		.parent_data = camcc_parent_data_1,
1306		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1307		.ops = &clk_rcg2_ops,
1308	},
1309};
1310
1311static struct clk_rcg2 camcc_mclk6_clk_src = {
1312	.cmd_rcgr = 0x50c4,
1313	.mnd_width = 8,
1314	.hid_width = 5,
1315	.parent_map = camcc_parent_map_1,
1316	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1317	.clkr.hw.init = &(struct clk_init_data){
1318		.name = "camcc_mclk6_clk_src",
1319		.parent_data = camcc_parent_data_1,
1320		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1321		.ops = &clk_rcg2_ops,
1322	},
1323};
1324
1325static struct clk_rcg2 camcc_mclk7_clk_src = {
1326	.cmd_rcgr = 0x50e4,
1327	.mnd_width = 8,
1328	.hid_width = 5,
1329	.parent_map = camcc_parent_map_1,
1330	.freq_tbl = ftbl_camcc_mclk0_clk_src,
1331	.clkr.hw.init = &(struct clk_init_data){
1332		.name = "camcc_mclk7_clk_src",
1333		.parent_data = camcc_parent_data_1,
1334		.num_parents = ARRAY_SIZE(camcc_parent_data_1),
1335		.ops = &clk_rcg2_ops,
1336	},
1337};
1338
1339static const struct freq_tbl ftbl_camcc_sleep_clk_src[] = {
1340	F(32000, P_SLEEP_CLK, 1, 0, 0),
1341	{ }
1342};
1343
1344static struct clk_rcg2 camcc_sleep_clk_src = {
1345	.cmd_rcgr = 0xc1e8,
1346	.mnd_width = 0,
1347	.hid_width = 5,
1348	.parent_map = camcc_parent_map_9,
1349	.freq_tbl = ftbl_camcc_sleep_clk_src,
1350	.clkr.hw.init = &(struct clk_init_data){
1351		.name = "camcc_sleep_clk_src",
1352		.parent_data = camcc_parent_data_9,
1353		.num_parents = ARRAY_SIZE(camcc_parent_data_9),
1354		.ops = &clk_rcg2_ops,
1355	},
1356};
1357
1358static const struct freq_tbl ftbl_camcc_slow_ahb_clk_src[] = {
1359	F(19200000, P_BI_TCXO, 1, 0, 0),
1360	F(80000000, P_CAMCC_PLL7_OUT_EVEN, 6, 0, 0),
1361	{ }
1362};
1363
1364static struct clk_rcg2 camcc_slow_ahb_clk_src = {
1365	.cmd_rcgr = 0x7058,
1366	.mnd_width = 8,
1367	.hid_width = 5,
1368	.parent_map = camcc_parent_map_0,
1369	.freq_tbl = ftbl_camcc_slow_ahb_clk_src,
1370	.clkr.hw.init = &(struct clk_init_data){
1371		.name = "camcc_slow_ahb_clk_src",
1372		.parent_data = camcc_parent_data_0,
1373		.num_parents = ARRAY_SIZE(camcc_parent_data_0),
1374		.ops = &clk_rcg2_ops,
1375	},
1376};
1377
1378static const struct freq_tbl ftbl_camcc_xo_clk_src[] = {
1379	F(19200000, P_BI_TCXO, 1, 0, 0),
1380	{ }
1381};
1382
1383static struct clk_rcg2 camcc_xo_clk_src = {
1384	.cmd_rcgr = 0xc1cc,
1385	.mnd_width = 0,
1386	.hid_width = 5,
1387	.parent_map = camcc_parent_map_10,
1388	.freq_tbl = ftbl_camcc_xo_clk_src,
1389	.clkr.hw.init = &(struct clk_init_data){
1390		.name = "camcc_xo_clk_src",
1391		.parent_data = camcc_parent_data_10_ao,
1392		.num_parents = ARRAY_SIZE(camcc_parent_data_10_ao),
1393		.ops = &clk_rcg2_ops,
1394	},
1395};
1396
1397static struct clk_branch camcc_bps_ahb_clk = {
1398	.halt_reg = 0x7070,
1399	.halt_check = BRANCH_HALT,
1400	.clkr = {
1401		.enable_reg = 0x7070,
1402		.enable_mask = BIT(0),
1403		.hw.init = &(struct clk_init_data){
1404			.name = "camcc_bps_ahb_clk",
1405			.parent_hws = (const struct clk_hw*[]){
1406				&camcc_slow_ahb_clk_src.clkr.hw,
1407			},
1408			.num_parents = 1,
1409			.flags = CLK_SET_RATE_PARENT,
1410			.ops = &clk_branch2_ops,
1411		},
1412	},
1413};
1414
1415static struct clk_branch camcc_bps_areg_clk = {
1416	.halt_reg = 0x7054,
1417	.halt_check = BRANCH_HALT,
1418	.clkr = {
1419		.enable_reg = 0x7054,
1420		.enable_mask = BIT(0),
1421		.hw.init = &(struct clk_init_data){
1422			.name = "camcc_bps_areg_clk",
1423			.parent_hws = (const struct clk_hw*[]){
1424				&camcc_fast_ahb_clk_src.clkr.hw,
1425			},
1426			.num_parents = 1,
1427			.flags = CLK_SET_RATE_PARENT,
1428			.ops = &clk_branch2_ops,
1429		},
1430	},
1431};
1432
1433static struct clk_branch camcc_bps_axi_clk = {
1434	.halt_reg = 0x7038,
1435	.halt_check = BRANCH_HALT,
1436	.clkr = {
1437		.enable_reg = 0x7038,
1438		.enable_mask = BIT(0),
1439		.hw.init = &(struct clk_init_data){
1440			.name = "camcc_bps_axi_clk",
1441			.parent_hws = (const struct clk_hw*[]){
1442				&camcc_camnoc_axi_clk_src.clkr.hw,
1443			},
1444			.num_parents = 1,
1445			.flags = CLK_SET_RATE_PARENT,
1446			.ops = &clk_branch2_ops,
1447		},
1448	},
1449};
1450
1451static struct clk_branch camcc_bps_clk = {
1452	.halt_reg = 0x7028,
1453	.halt_check = BRANCH_HALT,
1454	.clkr = {
1455		.enable_reg = 0x7028,
1456		.enable_mask = BIT(0),
1457		.hw.init = &(struct clk_init_data){
1458			.name = "camcc_bps_clk",
1459			.parent_hws = (const struct clk_hw*[]){
1460				&camcc_bps_clk_src.clkr.hw,
1461			},
1462			.num_parents = 1,
1463			.flags = CLK_SET_RATE_PARENT,
1464			.ops = &clk_branch2_ops,
1465		},
1466	},
1467};
1468
1469static struct clk_branch camcc_camnoc_axi_clk = {
1470	.halt_reg = 0xc18c,
1471	.halt_check = BRANCH_HALT,
1472	.clkr = {
1473		.enable_reg = 0xc18c,
1474		.enable_mask = BIT(0),
1475		.hw.init = &(struct clk_init_data){
1476			.name = "camcc_camnoc_axi_clk",
1477			.parent_hws = (const struct clk_hw*[]){
1478				&camcc_camnoc_axi_clk_src.clkr.hw,
1479			},
1480			.num_parents = 1,
1481			.flags = CLK_SET_RATE_PARENT,
1482			.ops = &clk_branch2_ops,
1483		},
1484	},
1485};
1486
1487static struct clk_branch camcc_camnoc_dcd_xo_clk = {
1488	.halt_reg = 0xc194,
1489	.halt_check = BRANCH_HALT,
1490	.clkr = {
1491		.enable_reg = 0xc194,
1492		.enable_mask = BIT(0),
1493		.hw.init = &(struct clk_init_data){
1494			.name = "camcc_camnoc_dcd_xo_clk",
1495			.parent_hws = (const struct clk_hw*[]){
1496				&camcc_xo_clk_src.clkr.hw,
1497			},
1498			.num_parents = 1,
1499			.flags = CLK_SET_RATE_PARENT,
1500			.ops = &clk_branch2_ops,
1501		},
1502	},
1503};
1504
1505static struct clk_branch camcc_cci_0_clk = {
1506	.halt_reg = 0xc120,
1507	.halt_check = BRANCH_HALT,
1508	.clkr = {
1509		.enable_reg = 0xc120,
1510		.enable_mask = BIT(0),
1511		.hw.init = &(struct clk_init_data){
1512			.name = "camcc_cci_0_clk",
1513			.parent_hws = (const struct clk_hw*[]){
1514				&camcc_cci_0_clk_src.clkr.hw,
1515			},
1516			.num_parents = 1,
1517			.flags = CLK_SET_RATE_PARENT,
1518			.ops = &clk_branch2_ops,
1519		},
1520	},
1521};
1522
1523static struct clk_branch camcc_cci_1_clk = {
1524	.halt_reg = 0xc13c,
1525	.halt_check = BRANCH_HALT,
1526	.clkr = {
1527		.enable_reg = 0xc13c,
1528		.enable_mask = BIT(0),
1529		.hw.init = &(struct clk_init_data){
1530			.name = "camcc_cci_1_clk",
1531			.parent_hws = (const struct clk_hw*[]){
1532				&camcc_cci_1_clk_src.clkr.hw,
1533			},
1534			.num_parents = 1,
1535			.flags = CLK_SET_RATE_PARENT,
1536			.ops = &clk_branch2_ops,
1537		},
1538	},
1539};
1540
1541static struct clk_branch camcc_cci_2_clk = {
1542	.halt_reg = 0xc21c,
1543	.halt_check = BRANCH_HALT,
1544	.clkr = {
1545		.enable_reg = 0xc21c,
1546		.enable_mask = BIT(0),
1547		.hw.init = &(struct clk_init_data){
1548			.name = "camcc_cci_2_clk",
1549			.parent_hws = (const struct clk_hw*[]){
1550				&camcc_cci_2_clk_src.clkr.hw,
1551			},
1552			.num_parents = 1,
1553			.flags = CLK_SET_RATE_PARENT,
1554			.ops = &clk_branch2_ops,
1555		},
1556	},
1557};
1558
1559static struct clk_branch camcc_cci_3_clk = {
1560	.halt_reg = 0xc238,
1561	.halt_check = BRANCH_HALT,
1562	.clkr = {
1563		.enable_reg = 0xc238,
1564		.enable_mask = BIT(0),
1565		.hw.init = &(struct clk_init_data){
1566			.name = "camcc_cci_3_clk",
1567			.parent_hws = (const struct clk_hw*[]){
1568				&camcc_cci_3_clk_src.clkr.hw,
1569			},
1570			.num_parents = 1,
1571			.flags = CLK_SET_RATE_PARENT,
1572			.ops = &clk_branch2_ops,
1573		},
1574	},
1575};
1576
1577static struct clk_branch camcc_core_ahb_clk = {
1578	.halt_reg = 0xc1c8,
1579	.halt_check = BRANCH_HALT_DELAY,
1580	.clkr = {
1581		.enable_reg = 0xc1c8,
1582		.enable_mask = BIT(0),
1583		.hw.init = &(struct clk_init_data){
1584			.name = "camcc_core_ahb_clk",
1585			.parent_hws = (const struct clk_hw*[]){
1586				&camcc_slow_ahb_clk_src.clkr.hw,
1587			},
1588			.num_parents = 1,
1589			.flags = CLK_SET_RATE_PARENT,
1590			.ops = &clk_branch2_ops,
1591		},
1592	},
1593};
1594
1595static struct clk_branch camcc_cpas_ahb_clk = {
1596	.halt_reg = 0xc168,
1597	.halt_check = BRANCH_HALT,
1598	.clkr = {
1599		.enable_reg = 0xc168,
1600		.enable_mask = BIT(0),
1601		.hw.init = &(struct clk_init_data){
1602			.name = "camcc_cpas_ahb_clk",
1603			.parent_hws = (const struct clk_hw*[]){
1604				&camcc_slow_ahb_clk_src.clkr.hw,
1605			},
1606			.num_parents = 1,
1607			.flags = CLK_SET_RATE_PARENT,
1608			.ops = &clk_branch2_ops,
1609		},
1610	},
1611};
1612
1613static struct clk_branch camcc_csi0phytimer_clk = {
1614	.halt_reg = 0x601c,
1615	.halt_check = BRANCH_HALT,
1616	.clkr = {
1617		.enable_reg = 0x601c,
1618		.enable_mask = BIT(0),
1619		.hw.init = &(struct clk_init_data){
1620			.name = "camcc_csi0phytimer_clk",
1621			.parent_hws = (const struct clk_hw*[]){
1622				&camcc_csi0phytimer_clk_src.clkr.hw,
1623			},
1624			.num_parents = 1,
1625			.flags = CLK_SET_RATE_PARENT,
1626			.ops = &clk_branch2_ops,
1627		},
1628	},
1629};
1630
1631static struct clk_branch camcc_csi1phytimer_clk = {
1632	.halt_reg = 0x6040,
1633	.halt_check = BRANCH_HALT,
1634	.clkr = {
1635		.enable_reg = 0x6040,
1636		.enable_mask = BIT(0),
1637		.hw.init = &(struct clk_init_data){
1638			.name = "camcc_csi1phytimer_clk",
1639			.parent_hws = (const struct clk_hw*[]){
1640				&camcc_csi1phytimer_clk_src.clkr.hw,
1641			},
1642			.num_parents = 1,
1643			.flags = CLK_SET_RATE_PARENT,
1644			.ops = &clk_branch2_ops,
1645		},
1646	},
1647};
1648
1649static struct clk_branch camcc_csi2phytimer_clk = {
1650	.halt_reg = 0x6064,
1651	.halt_check = BRANCH_HALT,
1652	.clkr = {
1653		.enable_reg = 0x6064,
1654		.enable_mask = BIT(0),
1655		.hw.init = &(struct clk_init_data){
1656			.name = "camcc_csi2phytimer_clk",
1657			.parent_hws = (const struct clk_hw*[]){
1658				&camcc_csi2phytimer_clk_src.clkr.hw,
1659			},
1660			.num_parents = 1,
1661			.flags = CLK_SET_RATE_PARENT,
1662			.ops = &clk_branch2_ops,
1663		},
1664	},
1665};
1666
1667static struct clk_branch camcc_csi3phytimer_clk = {
1668	.halt_reg = 0x608c,
1669	.halt_check = BRANCH_HALT,
1670	.clkr = {
1671		.enable_reg = 0x608c,
1672		.enable_mask = BIT(0),
1673		.hw.init = &(struct clk_init_data){
1674			.name = "camcc_csi3phytimer_clk",
1675			.parent_hws = (const struct clk_hw*[]){
1676				&camcc_csi3phytimer_clk_src.clkr.hw,
1677			},
1678			.num_parents = 1,
1679			.flags = CLK_SET_RATE_PARENT,
1680			.ops = &clk_branch2_ops,
1681		},
1682	},
1683};
1684
1685static struct clk_branch camcc_csiphy0_clk = {
1686	.halt_reg = 0x6020,
1687	.halt_check = BRANCH_HALT,
1688	.clkr = {
1689		.enable_reg = 0x6020,
1690		.enable_mask = BIT(0),
1691		.hw.init = &(struct clk_init_data){
1692			.name = "camcc_csiphy0_clk",
1693			.parent_hws = (const struct clk_hw*[]){
1694				&camcc_cphy_rx_clk_src.clkr.hw,
1695			},
1696			.num_parents = 1,
1697			.flags = CLK_SET_RATE_PARENT,
1698			.ops = &clk_branch2_ops,
1699		},
1700	},
1701};
1702
1703static struct clk_branch camcc_csiphy1_clk = {
1704	.halt_reg = 0x6044,
1705	.halt_check = BRANCH_HALT,
1706	.clkr = {
1707		.enable_reg = 0x6044,
1708		.enable_mask = BIT(0),
1709		.hw.init = &(struct clk_init_data){
1710			.name = "camcc_csiphy1_clk",
1711			.parent_hws = (const struct clk_hw*[]){
1712				&camcc_cphy_rx_clk_src.clkr.hw,
1713			},
1714			.num_parents = 1,
1715			.flags = CLK_SET_RATE_PARENT,
1716			.ops = &clk_branch2_ops,
1717		},
1718	},
1719};
1720
1721static struct clk_branch camcc_csiphy2_clk = {
1722	.halt_reg = 0x6068,
1723	.halt_check = BRANCH_HALT,
1724	.clkr = {
1725		.enable_reg = 0x6068,
1726		.enable_mask = BIT(0),
1727		.hw.init = &(struct clk_init_data){
1728			.name = "camcc_csiphy2_clk",
1729			.parent_hws = (const struct clk_hw*[]){
1730				&camcc_cphy_rx_clk_src.clkr.hw,
1731			},
1732			.num_parents = 1,
1733			.flags = CLK_SET_RATE_PARENT,
1734			.ops = &clk_branch2_ops,
1735		},
1736	},
1737};
1738
1739static struct clk_branch camcc_csiphy3_clk = {
1740	.halt_reg = 0x6090,
1741	.halt_check = BRANCH_HALT,
1742	.clkr = {
1743		.enable_reg = 0x6090,
1744		.enable_mask = BIT(0),
1745		.hw.init = &(struct clk_init_data){
1746			.name = "camcc_csiphy3_clk",
1747			.parent_hws = (const struct clk_hw*[]){
1748				&camcc_cphy_rx_clk_src.clkr.hw,
1749			},
1750			.num_parents = 1,
1751			.flags = CLK_SET_RATE_PARENT,
1752			.ops = &clk_branch2_ops,
1753		},
1754	},
1755};
1756
1757static struct clk_branch camcc_gdsc_clk = {
1758	.halt_reg = 0xc1e4,
1759	.halt_check = BRANCH_HALT,
1760	.clkr = {
1761		.enable_reg = 0xc1e4,
1762		.enable_mask = BIT(0),
1763		.hw.init = &(struct clk_init_data){
1764			.name = "camcc_gdsc_clk",
1765			.parent_hws = (const struct clk_hw*[]){
1766				&camcc_xo_clk_src.clkr.hw,
1767			},
1768			.num_parents = 1,
1769			.flags = CLK_SET_RATE_PARENT,
1770			.ops = &clk_branch2_ops,
1771		},
1772	},
1773};
1774
1775static struct clk_branch camcc_icp_ahb_clk = {
1776	.halt_reg = 0xc0d8,
1777	.halt_check = BRANCH_HALT,
1778	.clkr = {
1779		.enable_reg = 0xc0d8,
1780		.enable_mask = BIT(0),
1781		.hw.init = &(struct clk_init_data){
1782			.name = "camcc_icp_ahb_clk",
1783			.parent_hws = (const struct clk_hw*[]){
1784				&camcc_slow_ahb_clk_src.clkr.hw,
1785			},
1786			.num_parents = 1,
1787			.flags = CLK_SET_RATE_PARENT,
1788			.ops = &clk_branch2_ops,
1789		},
1790	},
1791};
1792
1793static struct clk_branch camcc_icp_clk = {
1794	.halt_reg = 0xc0d0,
1795	.halt_check = BRANCH_HALT,
1796	.clkr = {
1797		.enable_reg = 0xc0d0,
1798		.enable_mask = BIT(0),
1799		.hw.init = &(struct clk_init_data){
1800			.name = "camcc_icp_clk",
1801			.parent_hws = (const struct clk_hw*[]){
1802				&camcc_icp_clk_src.clkr.hw,
1803			},
1804			.num_parents = 1,
1805			.flags = CLK_SET_RATE_PARENT,
1806			.ops = &clk_branch2_ops,
1807		},
1808	},
1809};
1810
1811static struct clk_branch camcc_ife_0_axi_clk = {
1812	.halt_reg = 0xa080,
1813	.halt_check = BRANCH_HALT,
1814	.clkr = {
1815		.enable_reg = 0xa080,
1816		.enable_mask = BIT(0),
1817		.hw.init = &(struct clk_init_data){
1818			.name = "camcc_ife_0_axi_clk",
1819			.parent_hws = (const struct clk_hw*[]){
1820				&camcc_camnoc_axi_clk_src.clkr.hw,
1821			},
1822			.num_parents = 1,
1823			.flags = CLK_SET_RATE_PARENT,
1824			.ops = &clk_branch2_ops,
1825		},
1826	},
1827};
1828
1829static struct clk_branch camcc_ife_0_clk = {
1830	.halt_reg = 0xa028,
1831	.halt_check = BRANCH_HALT,
1832	.clkr = {
1833		.enable_reg = 0xa028,
1834		.enable_mask = BIT(0),
1835		.hw.init = &(struct clk_init_data){
1836			.name = "camcc_ife_0_clk",
1837			.parent_hws = (const struct clk_hw*[]){
1838				&camcc_ife_0_clk_src.clkr.hw,
1839			},
1840			.num_parents = 1,
1841			.flags = CLK_SET_RATE_PARENT,
1842			.ops = &clk_branch2_ops,
1843		},
1844	},
1845};
1846
1847static struct clk_branch camcc_ife_0_cphy_rx_clk = {
1848	.halt_reg = 0xa07c,
1849	.halt_check = BRANCH_HALT,
1850	.clkr = {
1851		.enable_reg = 0xa07c,
1852		.enable_mask = BIT(0),
1853		.hw.init = &(struct clk_init_data){
1854			.name = "camcc_ife_0_cphy_rx_clk",
1855			.parent_hws = (const struct clk_hw*[]){
1856				&camcc_cphy_rx_clk_src.clkr.hw,
1857			},
1858			.num_parents = 1,
1859			.flags = CLK_SET_RATE_PARENT,
1860			.ops = &clk_branch2_ops,
1861		},
1862	},
1863};
1864
1865static struct clk_branch camcc_ife_0_csid_clk = {
1866	.halt_reg = 0xa054,
1867	.halt_check = BRANCH_HALT,
1868	.clkr = {
1869		.enable_reg = 0xa054,
1870		.enable_mask = BIT(0),
1871		.hw.init = &(struct clk_init_data){
1872			.name = "camcc_ife_0_csid_clk",
1873			.parent_hws = (const struct clk_hw*[]){
1874				&camcc_ife_0_csid_clk_src.clkr.hw,
1875			},
1876			.num_parents = 1,
1877			.flags = CLK_SET_RATE_PARENT,
1878			.ops = &clk_branch2_ops,
1879		},
1880	},
1881};
1882
1883static struct clk_branch camcc_ife_0_dsp_clk = {
1884	.halt_reg = 0xa038,
1885	.halt_check = BRANCH_HALT,
1886	.clkr = {
1887		.enable_reg = 0xa038,
1888		.enable_mask = BIT(0),
1889		.hw.init = &(struct clk_init_data){
1890			.name = "camcc_ife_0_dsp_clk",
1891			.parent_hws = (const struct clk_hw*[]){
1892				&camcc_ife_0_clk_src.clkr.hw,
1893			},
1894			.num_parents = 1,
1895			.flags = CLK_SET_RATE_PARENT,
1896			.ops = &clk_branch2_ops,
1897		},
1898	},
1899};
1900
1901static struct clk_branch camcc_ife_1_axi_clk = {
1902	.halt_reg = 0xb068,
1903	.halt_check = BRANCH_HALT,
1904	.clkr = {
1905		.enable_reg = 0xb068,
1906		.enable_mask = BIT(0),
1907		.hw.init = &(struct clk_init_data){
1908			.name = "camcc_ife_1_axi_clk",
1909			.parent_hws = (const struct clk_hw*[]){
1910				&camcc_camnoc_axi_clk_src.clkr.hw,
1911			},
1912			.num_parents = 1,
1913			.flags = CLK_SET_RATE_PARENT,
1914			.ops = &clk_branch2_ops,
1915		},
1916	},
1917};
1918
1919static struct clk_branch camcc_ife_1_clk = {
1920	.halt_reg = 0xb028,
1921	.halt_check = BRANCH_HALT,
1922	.clkr = {
1923		.enable_reg = 0xb028,
1924		.enable_mask = BIT(0),
1925		.hw.init = &(struct clk_init_data){
1926			.name = "camcc_ife_1_clk",
1927			.parent_hws = (const struct clk_hw*[]){
1928				&camcc_ife_1_clk_src.clkr.hw,
1929			},
1930			.num_parents = 1,
1931			.flags = CLK_SET_RATE_PARENT,
1932			.ops = &clk_branch2_ops,
1933		},
1934	},
1935};
1936
1937static struct clk_branch camcc_ife_1_cphy_rx_clk = {
1938	.halt_reg = 0xb064,
1939	.halt_check = BRANCH_HALT,
1940	.clkr = {
1941		.enable_reg = 0xb064,
1942		.enable_mask = BIT(0),
1943		.hw.init = &(struct clk_init_data){
1944			.name = "camcc_ife_1_cphy_rx_clk",
1945			.parent_hws = (const struct clk_hw*[]){
1946				&camcc_cphy_rx_clk_src.clkr.hw,
1947			},
1948			.num_parents = 1,
1949			.flags = CLK_SET_RATE_PARENT,
1950			.ops = &clk_branch2_ops,
1951		},
1952	},
1953};
1954
1955static struct clk_branch camcc_ife_1_csid_clk = {
1956	.halt_reg = 0xb054,
1957	.halt_check = BRANCH_HALT,
1958	.clkr = {
1959		.enable_reg = 0xb054,
1960		.enable_mask = BIT(0),
1961		.hw.init = &(struct clk_init_data){
1962			.name = "camcc_ife_1_csid_clk",
1963			.parent_hws = (const struct clk_hw*[]){
1964				&camcc_ife_1_csid_clk_src.clkr.hw,
1965			},
1966			.num_parents = 1,
1967			.flags = CLK_SET_RATE_PARENT,
1968			.ops = &clk_branch2_ops,
1969		},
1970	},
1971};
1972
1973static struct clk_branch camcc_ife_1_dsp_clk = {
1974	.halt_reg = 0xb038,
1975	.halt_check = BRANCH_HALT,
1976	.clkr = {
1977		.enable_reg = 0xb038,
1978		.enable_mask = BIT(0),
1979		.hw.init = &(struct clk_init_data){
1980			.name = "camcc_ife_1_dsp_clk",
1981			.parent_hws = (const struct clk_hw*[]){
1982				&camcc_ife_1_clk_src.clkr.hw,
1983			},
1984			.num_parents = 1,
1985			.flags = CLK_SET_RATE_PARENT,
1986			.ops = &clk_branch2_ops,
1987		},
1988	},
1989};
1990
1991static struct clk_branch camcc_ife_2_axi_clk = {
1992	.halt_reg = 0xf068,
1993	.halt_check = BRANCH_HALT,
1994	.clkr = {
1995		.enable_reg = 0xf068,
1996		.enable_mask = BIT(0),
1997		.hw.init = &(struct clk_init_data){
1998			.name = "camcc_ife_2_axi_clk",
1999			.parent_hws = (const struct clk_hw*[]){
2000				&camcc_camnoc_axi_clk_src.clkr.hw,
2001			},
2002			.num_parents = 1,
2003			.flags = CLK_SET_RATE_PARENT,
2004			.ops = &clk_branch2_ops,
2005		},
2006	},
2007};
2008
2009static struct clk_branch camcc_ife_2_clk = {
2010	.halt_reg = 0xf028,
2011	.halt_check = BRANCH_HALT,
2012	.clkr = {
2013		.enable_reg = 0xf028,
2014		.enable_mask = BIT(0),
2015		.hw.init = &(struct clk_init_data){
2016			.name = "camcc_ife_2_clk",
2017			.parent_hws = (const struct clk_hw*[]){
2018				&camcc_ife_2_clk_src.clkr.hw,
2019			},
2020			.num_parents = 1,
2021			.flags = CLK_SET_RATE_PARENT,
2022			.ops = &clk_branch2_ops,
2023		},
2024	},
2025};
2026
2027static struct clk_branch camcc_ife_2_cphy_rx_clk = {
2028	.halt_reg = 0xf064,
2029	.halt_check = BRANCH_HALT,
2030	.clkr = {
2031		.enable_reg = 0xf064,
2032		.enable_mask = BIT(0),
2033		.hw.init = &(struct clk_init_data){
2034			.name = "camcc_ife_2_cphy_rx_clk",
2035			.parent_hws = (const struct clk_hw*[]){
2036				&camcc_cphy_rx_clk_src.clkr.hw,
2037			},
2038			.num_parents = 1,
2039			.flags = CLK_SET_RATE_PARENT,
2040			.ops = &clk_branch2_ops,
2041		},
2042	},
2043};
2044
2045static struct clk_branch camcc_ife_2_csid_clk = {
2046	.halt_reg = 0xf054,
2047	.halt_check = BRANCH_HALT,
2048	.clkr = {
2049		.enable_reg = 0xf054,
2050		.enable_mask = BIT(0),
2051		.hw.init = &(struct clk_init_data){
2052			.name = "camcc_ife_2_csid_clk",
2053			.parent_hws = (const struct clk_hw*[]){
2054				&camcc_ife_2_csid_clk_src.clkr.hw,
2055			},
2056			.num_parents = 1,
2057			.flags = CLK_SET_RATE_PARENT,
2058			.ops = &clk_branch2_ops,
2059		},
2060	},
2061};
2062
2063static struct clk_branch camcc_ife_2_dsp_clk = {
2064	.halt_reg = 0xf038,
2065	.halt_check = BRANCH_HALT,
2066	.clkr = {
2067		.enable_reg = 0xf038,
2068		.enable_mask = BIT(0),
2069		.hw.init = &(struct clk_init_data){
2070			.name = "camcc_ife_2_dsp_clk",
2071			.parent_hws = (const struct clk_hw*[]){
2072				&camcc_ife_2_clk_src.clkr.hw,
2073			},
2074			.num_parents = 1,
2075			.flags = CLK_SET_RATE_PARENT,
2076			.ops = &clk_branch2_ops,
2077		},
2078	},
2079};
2080
2081static struct clk_branch camcc_ife_3_axi_clk = {
2082	.halt_reg = 0xf0d4,
2083	.halt_check = BRANCH_HALT,
2084	.clkr = {
2085		.enable_reg = 0xf0d4,
2086		.enable_mask = BIT(0),
2087		.hw.init = &(struct clk_init_data){
2088			.name = "camcc_ife_3_axi_clk",
2089			.parent_hws = (const struct clk_hw*[]){
2090				&camcc_camnoc_axi_clk_src.clkr.hw,
2091			},
2092			.num_parents = 1,
2093			.flags = CLK_SET_RATE_PARENT,
2094			.ops = &clk_branch2_ops,
2095		},
2096	},
2097};
2098
2099static struct clk_branch camcc_ife_3_clk = {
2100	.halt_reg = 0xf094,
2101	.halt_check = BRANCH_HALT,
2102	.clkr = {
2103		.enable_reg = 0xf094,
2104		.enable_mask = BIT(0),
2105		.hw.init = &(struct clk_init_data){
2106			.name = "camcc_ife_3_clk",
2107			.parent_hws = (const struct clk_hw*[]){
2108				&camcc_ife_3_clk_src.clkr.hw,
2109			},
2110			.num_parents = 1,
2111			.flags = CLK_SET_RATE_PARENT,
2112			.ops = &clk_branch2_ops,
2113		},
2114	},
2115};
2116
2117static struct clk_branch camcc_ife_3_cphy_rx_clk = {
2118	.halt_reg = 0xf0d0,
2119	.halt_check = BRANCH_HALT,
2120	.clkr = {
2121		.enable_reg = 0xf0d0,
2122		.enable_mask = BIT(0),
2123		.hw.init = &(struct clk_init_data){
2124			.name = "camcc_ife_3_cphy_rx_clk",
2125			.parent_hws = (const struct clk_hw*[]){
2126				&camcc_cphy_rx_clk_src.clkr.hw,
2127			},
2128			.num_parents = 1,
2129			.flags = CLK_SET_RATE_PARENT,
2130			.ops = &clk_branch2_ops,
2131		},
2132	},
2133};
2134
2135static struct clk_branch camcc_ife_3_csid_clk = {
2136	.halt_reg = 0xf0c0,
2137	.halt_check = BRANCH_HALT,
2138	.clkr = {
2139		.enable_reg = 0xf0c0,
2140		.enable_mask = BIT(0),
2141		.hw.init = &(struct clk_init_data){
2142			.name = "camcc_ife_3_csid_clk",
2143			.parent_hws = (const struct clk_hw*[]){
2144				&camcc_ife_3_csid_clk_src.clkr.hw,
2145			},
2146			.num_parents = 1,
2147			.flags = CLK_SET_RATE_PARENT,
2148			.ops = &clk_branch2_ops,
2149		},
2150	},
2151};
2152
2153static struct clk_branch camcc_ife_3_dsp_clk = {
2154	.halt_reg = 0xf0a4,
2155	.halt_check = BRANCH_HALT,
2156	.clkr = {
2157		.enable_reg = 0xf0a4,
2158		.enable_mask = BIT(0),
2159		.hw.init = &(struct clk_init_data){
2160			.name = "camcc_ife_3_dsp_clk",
2161			.parent_hws = (const struct clk_hw*[]){
2162				&camcc_ife_3_clk_src.clkr.hw,
2163			},
2164			.num_parents = 1,
2165			.flags = CLK_SET_RATE_PARENT,
2166			.ops = &clk_branch2_ops,
2167		},
2168	},
2169};
2170
2171static struct clk_branch camcc_ife_lite_0_clk = {
2172	.halt_reg = 0xc01c,
2173	.halt_check = BRANCH_HALT,
2174	.clkr = {
2175		.enable_reg = 0xc01c,
2176		.enable_mask = BIT(0),
2177		.hw.init = &(struct clk_init_data){
2178			.name = "camcc_ife_lite_0_clk",
2179			.parent_hws = (const struct clk_hw*[]){
2180				&camcc_ife_lite_0_clk_src.clkr.hw,
2181			},
2182			.num_parents = 1,
2183			.flags = CLK_SET_RATE_PARENT,
2184			.ops = &clk_branch2_ops,
2185		},
2186	},
2187};
2188
2189static struct clk_branch camcc_ife_lite_0_cphy_rx_clk = {
2190	.halt_reg = 0xc040,
2191	.halt_check = BRANCH_HALT,
2192	.clkr = {
2193		.enable_reg = 0xc040,
2194		.enable_mask = BIT(0),
2195		.hw.init = &(struct clk_init_data){
2196			.name = "camcc_ife_lite_0_cphy_rx_clk",
2197			.parent_hws = (const struct clk_hw*[]){
2198				&camcc_cphy_rx_clk_src.clkr.hw,
2199			},
2200			.num_parents = 1,
2201			.flags = CLK_SET_RATE_PARENT,
2202			.ops = &clk_branch2_ops,
2203		},
2204	},
2205};
2206
2207static struct clk_branch camcc_ife_lite_0_csid_clk = {
2208	.halt_reg = 0xc038,
2209	.halt_check = BRANCH_HALT,
2210	.clkr = {
2211		.enable_reg = 0xc038,
2212		.enable_mask = BIT(0),
2213		.hw.init = &(struct clk_init_data){
2214			.name = "camcc_ife_lite_0_csid_clk",
2215			.parent_hws = (const struct clk_hw*[]){
2216				&camcc_ife_lite_0_csid_clk_src.clkr.hw,
2217			},
2218			.num_parents = 1,
2219			.flags = CLK_SET_RATE_PARENT,
2220			.ops = &clk_branch2_ops,
2221		},
2222	},
2223};
2224
2225static struct clk_branch camcc_ife_lite_1_clk = {
2226	.halt_reg = 0xc060,
2227	.halt_check = BRANCH_HALT,
2228	.clkr = {
2229		.enable_reg = 0xc060,
2230		.enable_mask = BIT(0),
2231		.hw.init = &(struct clk_init_data){
2232			.name = "camcc_ife_lite_1_clk",
2233			.parent_hws = (const struct clk_hw*[]){
2234				&camcc_ife_lite_1_clk_src.clkr.hw,
2235			},
2236			.num_parents = 1,
2237			.flags = CLK_SET_RATE_PARENT,
2238			.ops = &clk_branch2_ops,
2239		},
2240	},
2241};
2242
2243static struct clk_branch camcc_ife_lite_1_cphy_rx_clk = {
2244	.halt_reg = 0xc084,
2245	.halt_check = BRANCH_HALT,
2246	.clkr = {
2247		.enable_reg = 0xc084,
2248		.enable_mask = BIT(0),
2249		.hw.init = &(struct clk_init_data){
2250			.name = "camcc_ife_lite_1_cphy_rx_clk",
2251			.parent_hws = (const struct clk_hw*[]){
2252				&camcc_cphy_rx_clk_src.clkr.hw,
2253			},
2254			.num_parents = 1,
2255			.flags = CLK_SET_RATE_PARENT,
2256			.ops = &clk_branch2_ops,
2257		},
2258	},
2259};
2260
2261static struct clk_branch camcc_ife_lite_1_csid_clk = {
2262	.halt_reg = 0xc07c,
2263	.halt_check = BRANCH_HALT,
2264	.clkr = {
2265		.enable_reg = 0xc07c,
2266		.enable_mask = BIT(0),
2267		.hw.init = &(struct clk_init_data){
2268			.name = "camcc_ife_lite_1_csid_clk",
2269			.parent_hws = (const struct clk_hw*[]){
2270				&camcc_ife_lite_1_csid_clk_src.clkr.hw,
2271			},
2272			.num_parents = 1,
2273			.flags = CLK_SET_RATE_PARENT,
2274			.ops = &clk_branch2_ops,
2275		},
2276	},
2277};
2278
2279static struct clk_branch camcc_ife_lite_2_clk = {
2280	.halt_reg = 0xc258,
2281	.halt_check = BRANCH_HALT,
2282	.clkr = {
2283		.enable_reg = 0xc258,
2284		.enable_mask = BIT(0),
2285		.hw.init = &(struct clk_init_data){
2286			.name = "camcc_ife_lite_2_clk",
2287			.parent_hws = (const struct clk_hw*[]){
2288				&camcc_ife_lite_2_clk_src.clkr.hw,
2289			},
2290			.num_parents = 1,
2291			.flags = CLK_SET_RATE_PARENT,
2292			.ops = &clk_branch2_ops,
2293		},
2294	},
2295};
2296
2297static struct clk_branch camcc_ife_lite_2_cphy_rx_clk = {
2298	.halt_reg = 0xc27c,
2299	.halt_check = BRANCH_HALT,
2300	.clkr = {
2301		.enable_reg = 0xc27c,
2302		.enable_mask = BIT(0),
2303		.hw.init = &(struct clk_init_data){
2304			.name = "camcc_ife_lite_2_cphy_rx_clk",
2305			.parent_hws = (const struct clk_hw*[]){
2306				&camcc_cphy_rx_clk_src.clkr.hw,
2307			},
2308			.num_parents = 1,
2309			.flags = CLK_SET_RATE_PARENT,
2310			.ops = &clk_branch2_ops,
2311		},
2312	},
2313};
2314
2315static struct clk_branch camcc_ife_lite_2_csid_clk = {
2316	.halt_reg = 0xc274,
2317	.halt_check = BRANCH_HALT,
2318	.clkr = {
2319		.enable_reg = 0xc274,
2320		.enable_mask = BIT(0),
2321		.hw.init = &(struct clk_init_data){
2322			.name = "camcc_ife_lite_2_csid_clk",
2323			.parent_hws = (const struct clk_hw*[]){
2324				&camcc_ife_lite_2_csid_clk_src.clkr.hw,
2325			},
2326			.num_parents = 1,
2327			.flags = CLK_SET_RATE_PARENT,
2328			.ops = &clk_branch2_ops,
2329		},
2330	},
2331};
2332
2333static struct clk_branch camcc_ife_lite_3_clk = {
2334	.halt_reg = 0xc29c,
2335	.halt_check = BRANCH_HALT,
2336	.clkr = {
2337		.enable_reg = 0xc29c,
2338		.enable_mask = BIT(0),
2339		.hw.init = &(struct clk_init_data){
2340			.name = "camcc_ife_lite_3_clk",
2341			.parent_hws = (const struct clk_hw*[]){
2342				&camcc_ife_lite_3_clk_src.clkr.hw,
2343			},
2344			.num_parents = 1,
2345			.flags = CLK_SET_RATE_PARENT,
2346			.ops = &clk_branch2_ops,
2347		},
2348	},
2349};
2350
2351static struct clk_branch camcc_ife_lite_3_cphy_rx_clk = {
2352	.halt_reg = 0xc2c0,
2353	.halt_check = BRANCH_HALT,
2354	.clkr = {
2355		.enable_reg = 0xc2c0,
2356		.enable_mask = BIT(0),
2357		.hw.init = &(struct clk_init_data){
2358			.name = "camcc_ife_lite_3_cphy_rx_clk",
2359			.parent_hws = (const struct clk_hw*[]){
2360				&camcc_cphy_rx_clk_src.clkr.hw,
2361			},
2362			.num_parents = 1,
2363			.flags = CLK_SET_RATE_PARENT,
2364			.ops = &clk_branch2_ops,
2365		},
2366	},
2367};
2368
2369static struct clk_branch camcc_ife_lite_3_csid_clk = {
2370	.halt_reg = 0xc2b8,
2371	.halt_check = BRANCH_HALT,
2372	.clkr = {
2373		.enable_reg = 0xc2b8,
2374		.enable_mask = BIT(0),
2375		.hw.init = &(struct clk_init_data){
2376			.name = "camcc_ife_lite_3_csid_clk",
2377			.parent_hws = (const struct clk_hw*[]){
2378				&camcc_ife_lite_3_csid_clk_src.clkr.hw,
2379			},
2380			.num_parents = 1,
2381			.flags = CLK_SET_RATE_PARENT,
2382			.ops = &clk_branch2_ops,
2383		},
2384	},
2385};
2386
2387static struct clk_branch camcc_ipe_0_ahb_clk = {
2388	.halt_reg = 0x8040,
2389	.halt_check = BRANCH_HALT,
2390	.clkr = {
2391		.enable_reg = 0x8040,
2392		.enable_mask = BIT(0),
2393		.hw.init = &(struct clk_init_data){
2394			.name = "camcc_ipe_0_ahb_clk",
2395			.parent_hws = (const struct clk_hw*[]){
2396				&camcc_slow_ahb_clk_src.clkr.hw,
2397			},
2398			.num_parents = 1,
2399			.flags = CLK_SET_RATE_PARENT,
2400			.ops = &clk_branch2_ops,
2401		},
2402	},
2403};
2404
2405static struct clk_branch camcc_ipe_0_areg_clk = {
2406	.halt_reg = 0x803c,
2407	.halt_check = BRANCH_HALT,
2408	.clkr = {
2409		.enable_reg = 0x803c,
2410		.enable_mask = BIT(0),
2411		.hw.init = &(struct clk_init_data){
2412			.name = "camcc_ipe_0_areg_clk",
2413			.parent_hws = (const struct clk_hw*[]){
2414				&camcc_fast_ahb_clk_src.clkr.hw,
2415			},
2416			.num_parents = 1,
2417			.flags = CLK_SET_RATE_PARENT,
2418			.ops = &clk_branch2_ops,
2419		},
2420	},
2421};
2422
2423static struct clk_branch camcc_ipe_0_axi_clk = {
2424	.halt_reg = 0x8038,
2425	.halt_check = BRANCH_HALT,
2426	.clkr = {
2427		.enable_reg = 0x8038,
2428		.enable_mask = BIT(0),
2429		.hw.init = &(struct clk_init_data){
2430			.name = "camcc_ipe_0_axi_clk",
2431			.parent_hws = (const struct clk_hw*[]){
2432				&camcc_camnoc_axi_clk_src.clkr.hw,
2433			},
2434			.num_parents = 1,
2435			.flags = CLK_SET_RATE_PARENT,
2436			.ops = &clk_branch2_ops,
2437		},
2438	},
2439};
2440
2441static struct clk_branch camcc_ipe_0_clk = {
2442	.halt_reg = 0x8028,
2443	.halt_check = BRANCH_HALT,
2444	.clkr = {
2445		.enable_reg = 0x8028,
2446		.enable_mask = BIT(0),
2447		.hw.init = &(struct clk_init_data){
2448			.name = "camcc_ipe_0_clk",
2449			.parent_hws = (const struct clk_hw*[]){
2450				&camcc_ipe_0_clk_src.clkr.hw,
2451			},
2452			.num_parents = 1,
2453			.flags = CLK_SET_RATE_PARENT,
2454			.ops = &clk_branch2_ops,
2455		},
2456	},
2457};
2458
2459static struct clk_branch camcc_ipe_1_ahb_clk = {
2460	.halt_reg = 0x9028,
2461	.halt_check = BRANCH_HALT,
2462	.clkr = {
2463		.enable_reg = 0x9028,
2464		.enable_mask = BIT(0),
2465		.hw.init = &(struct clk_init_data){
2466			.name = "camcc_ipe_1_ahb_clk",
2467			.parent_hws = (const struct clk_hw*[]){
2468				&camcc_slow_ahb_clk_src.clkr.hw,
2469			},
2470			.num_parents = 1,
2471			.flags = CLK_SET_RATE_PARENT,
2472			.ops = &clk_branch2_ops,
2473		},
2474	},
2475};
2476
2477static struct clk_branch camcc_ipe_1_areg_clk = {
2478	.halt_reg = 0x9024,
2479	.halt_check = BRANCH_HALT,
2480	.clkr = {
2481		.enable_reg = 0x9024,
2482		.enable_mask = BIT(0),
2483		.hw.init = &(struct clk_init_data){
2484			.name = "camcc_ipe_1_areg_clk",
2485			.parent_hws = (const struct clk_hw*[]){
2486				&camcc_fast_ahb_clk_src.clkr.hw,
2487			},
2488			.num_parents = 1,
2489			.flags = CLK_SET_RATE_PARENT,
2490			.ops = &clk_branch2_ops,
2491		},
2492	},
2493};
2494
2495static struct clk_branch camcc_ipe_1_axi_clk = {
2496	.halt_reg = 0x9020,
2497	.halt_check = BRANCH_HALT,
2498	.clkr = {
2499		.enable_reg = 0x9020,
2500		.enable_mask = BIT(0),
2501		.hw.init = &(struct clk_init_data){
2502			.name = "camcc_ipe_1_axi_clk",
2503			.parent_hws = (const struct clk_hw*[]){
2504				&camcc_camnoc_axi_clk_src.clkr.hw,
2505			},
2506			.num_parents = 1,
2507			.flags = CLK_SET_RATE_PARENT,
2508			.ops = &clk_branch2_ops,
2509		},
2510	},
2511};
2512
2513static struct clk_branch camcc_ipe_1_clk = {
2514	.halt_reg = 0x9010,
2515	.halt_check = BRANCH_HALT,
2516	.clkr = {
2517		.enable_reg = 0x9010,
2518		.enable_mask = BIT(0),
2519		.hw.init = &(struct clk_init_data){
2520			.name = "camcc_ipe_1_clk",
2521			.parent_hws = (const struct clk_hw*[]){
2522				&camcc_ipe_0_clk_src.clkr.hw,
2523			},
2524			.num_parents = 1,
2525			.flags = CLK_SET_RATE_PARENT,
2526			.ops = &clk_branch2_ops,
2527		},
2528	},
2529};
2530
2531static struct clk_branch camcc_jpeg_clk = {
2532	.halt_reg = 0xc0a4,
2533	.halt_check = BRANCH_HALT,
2534	.clkr = {
2535		.enable_reg = 0xc0a4,
2536		.enable_mask = BIT(0),
2537		.hw.init = &(struct clk_init_data){
2538			.name = "camcc_jpeg_clk",
2539			.parent_hws = (const struct clk_hw*[]){
2540				&camcc_jpeg_clk_src.clkr.hw,
2541			},
2542			.num_parents = 1,
2543			.flags = CLK_SET_RATE_PARENT,
2544			.ops = &clk_branch2_ops,
2545		},
2546	},
2547};
2548
2549static struct clk_branch camcc_lrme_clk = {
2550	.halt_reg = 0xc15c,
2551	.halt_check = BRANCH_HALT,
2552	.clkr = {
2553		.enable_reg = 0xc15c,
2554		.enable_mask = BIT(0),
2555		.hw.init = &(struct clk_init_data){
2556			.name = "camcc_lrme_clk",
2557			.parent_hws = (const struct clk_hw*[]){
2558				&camcc_lrme_clk_src.clkr.hw,
2559			},
2560			.num_parents = 1,
2561			.flags = CLK_SET_RATE_PARENT,
2562			.ops = &clk_branch2_ops,
2563		},
2564	},
2565};
2566
2567static struct clk_branch camcc_mclk0_clk = {
2568	.halt_reg = 0x501c,
2569	.halt_check = BRANCH_HALT,
2570	.clkr = {
2571		.enable_reg = 0x501c,
2572		.enable_mask = BIT(0),
2573		.hw.init = &(struct clk_init_data){
2574			.name = "camcc_mclk0_clk",
2575			.parent_hws = (const struct clk_hw*[]){
2576				&camcc_mclk0_clk_src.clkr.hw,
2577			},
2578			.num_parents = 1,
2579			.flags = CLK_SET_RATE_PARENT,
2580			.ops = &clk_branch2_ops,
2581		},
2582	},
2583};
2584
2585static struct clk_branch camcc_mclk1_clk = {
2586	.halt_reg = 0x503c,
2587	.halt_check = BRANCH_HALT,
2588	.clkr = {
2589		.enable_reg = 0x503c,
2590		.enable_mask = BIT(0),
2591		.hw.init = &(struct clk_init_data){
2592			.name = "camcc_mclk1_clk",
2593			.parent_hws = (const struct clk_hw*[]){
2594				&camcc_mclk1_clk_src.clkr.hw,
2595			},
2596			.num_parents = 1,
2597			.flags = CLK_SET_RATE_PARENT,
2598			.ops = &clk_branch2_ops,
2599		},
2600	},
2601};
2602
2603static struct clk_branch camcc_mclk2_clk = {
2604	.halt_reg = 0x505c,
2605	.halt_check = BRANCH_HALT,
2606	.clkr = {
2607		.enable_reg = 0x505c,
2608		.enable_mask = BIT(0),
2609		.hw.init = &(struct clk_init_data){
2610			.name = "camcc_mclk2_clk",
2611			.parent_hws = (const struct clk_hw*[]){
2612				&camcc_mclk2_clk_src.clkr.hw,
2613			},
2614			.num_parents = 1,
2615			.flags = CLK_SET_RATE_PARENT,
2616			.ops = &clk_branch2_ops,
2617		},
2618	},
2619};
2620
2621static struct clk_branch camcc_mclk3_clk = {
2622	.halt_reg = 0x507c,
2623	.halt_check = BRANCH_HALT,
2624	.clkr = {
2625		.enable_reg = 0x507c,
2626		.enable_mask = BIT(0),
2627		.hw.init = &(struct clk_init_data){
2628			.name = "camcc_mclk3_clk",
2629			.parent_hws = (const struct clk_hw*[]){
2630				&camcc_mclk3_clk_src.clkr.hw,
2631			},
2632			.num_parents = 1,
2633			.flags = CLK_SET_RATE_PARENT,
2634			.ops = &clk_branch2_ops,
2635		},
2636	},
2637};
2638
2639static struct clk_branch camcc_mclk4_clk = {
2640	.halt_reg = 0x509c,
2641	.halt_check = BRANCH_HALT,
2642	.clkr = {
2643		.enable_reg = 0x509c,
2644		.enable_mask = BIT(0),
2645		.hw.init = &(struct clk_init_data){
2646			.name = "camcc_mclk4_clk",
2647			.parent_hws = (const struct clk_hw*[]){
2648				&camcc_mclk4_clk_src.clkr.hw,
2649			},
2650			.num_parents = 1,
2651			.flags = CLK_SET_RATE_PARENT,
2652			.ops = &clk_branch2_ops,
2653		},
2654	},
2655};
2656
2657static struct clk_branch camcc_mclk5_clk = {
2658	.halt_reg = 0x50bc,
2659	.halt_check = BRANCH_HALT,
2660	.clkr = {
2661		.enable_reg = 0x50bc,
2662		.enable_mask = BIT(0),
2663		.hw.init = &(struct clk_init_data){
2664			.name = "camcc_mclk5_clk",
2665			.parent_hws = (const struct clk_hw*[]){
2666				&camcc_mclk5_clk_src.clkr.hw,
2667			},
2668			.num_parents = 1,
2669			.flags = CLK_SET_RATE_PARENT,
2670			.ops = &clk_branch2_ops,
2671		},
2672	},
2673};
2674
2675static struct clk_branch camcc_mclk6_clk = {
2676	.halt_reg = 0x50dc,
2677	.halt_check = BRANCH_HALT,
2678	.clkr = {
2679		.enable_reg = 0x50dc,
2680		.enable_mask = BIT(0),
2681		.hw.init = &(struct clk_init_data){
2682			.name = "camcc_mclk6_clk",
2683			.parent_hws = (const struct clk_hw*[]){
2684				&camcc_mclk6_clk_src.clkr.hw,
2685			},
2686			.num_parents = 1,
2687			.flags = CLK_SET_RATE_PARENT,
2688			.ops = &clk_branch2_ops,
2689		},
2690	},
2691};
2692
2693static struct clk_branch camcc_mclk7_clk = {
2694	.halt_reg = 0x50fc,
2695	.halt_check = BRANCH_HALT,
2696	.clkr = {
2697		.enable_reg = 0x50fc,
2698		.enable_mask = BIT(0),
2699		.hw.init = &(struct clk_init_data){
2700			.name = "camcc_mclk7_clk",
2701			.parent_hws = (const struct clk_hw*[]){
2702				&camcc_mclk7_clk_src.clkr.hw,
2703			},
2704			.num_parents = 1,
2705			.flags = CLK_SET_RATE_PARENT,
2706			.ops = &clk_branch2_ops,
2707		},
2708	},
2709};
2710
2711static struct clk_branch camcc_sleep_clk = {
2712	.halt_reg = 0xc200,
2713	.halt_check = BRANCH_HALT,
2714	.clkr = {
2715		.enable_reg = 0xc200,
2716		.enable_mask = BIT(0),
2717		.hw.init = &(struct clk_init_data){
2718			.name = "camcc_sleep_clk",
2719			.parent_hws = (const struct clk_hw*[]){
2720				&camcc_sleep_clk_src.clkr.hw,
2721			},
2722			.num_parents = 1,
2723			.flags = CLK_SET_RATE_PARENT,
2724			.ops = &clk_branch2_ops,
2725		},
2726	},
2727};
2728
2729static struct gdsc titan_top_gdsc;
2730
2731static struct gdsc bps_gdsc = {
2732	.gdscr = 0x7004,
2733	.pd = {
2734		.name = "bps_gdsc",
2735	},
2736	.flags = HW_CTRL | RETAIN_FF_ENABLE,
2737	.parent = &titan_top_gdsc.pd,
2738	.pwrsts = PWRSTS_OFF_ON,
2739};
2740
2741static struct gdsc ife_0_gdsc = {
2742	.gdscr = 0xa004,
2743	.pd = {
2744		.name = "ife_0_gdsc",
2745	},
2746	.flags = RETAIN_FF_ENABLE,
2747	.parent = &titan_top_gdsc.pd,
2748	.pwrsts = PWRSTS_OFF_ON,
2749};
2750
2751static struct gdsc ife_1_gdsc = {
2752	.gdscr = 0xb004,
2753	.pd = {
2754		.name = "ife_1_gdsc",
2755	},
2756	.flags = RETAIN_FF_ENABLE,
2757	.parent = &titan_top_gdsc.pd,
2758	.pwrsts = PWRSTS_OFF_ON,
2759};
2760
2761static struct gdsc ife_2_gdsc = {
2762	.gdscr = 0xf004,
2763	.pd = {
2764		.name = "ife_2_gdsc",
2765	},
2766	.flags = RETAIN_FF_ENABLE,
2767	.parent = &titan_top_gdsc.pd,
2768	.pwrsts = PWRSTS_OFF_ON,
2769};
2770
2771static struct gdsc ife_3_gdsc = {
2772	.gdscr = 0xf070,
2773	.pd = {
2774		.name = "ife_3_gdsc",
2775	},
2776	.flags = RETAIN_FF_ENABLE,
2777	.parent = &titan_top_gdsc.pd,
2778	.pwrsts = PWRSTS_OFF_ON,
2779};
2780
2781static struct gdsc ipe_0_gdsc = {
2782	.gdscr = 0x8004,
2783	.pd = {
2784		.name = "ipe_0_gdsc",
2785	},
2786	.flags = HW_CTRL | RETAIN_FF_ENABLE,
2787	.parent = &titan_top_gdsc.pd,
2788	.pwrsts = PWRSTS_OFF_ON,
2789};
2790
2791static struct gdsc ipe_1_gdsc = {
2792	.gdscr = 0x9004,
2793	.pd = {
2794		.name = "ipe_1_gdsc",
2795	},
2796	.flags = HW_CTRL | RETAIN_FF_ENABLE,
2797	.parent = &titan_top_gdsc.pd,
2798	.pwrsts = PWRSTS_OFF_ON,
2799};
2800
2801static struct gdsc titan_top_gdsc = {
2802	.gdscr = 0xc1bc,
2803	.pd = {
2804		.name = "titan_top_gdsc",
2805	},
2806	.flags = RETAIN_FF_ENABLE,
2807	.pwrsts = PWRSTS_OFF_ON,
2808};
2809
2810static struct clk_regmap *camcc_sc8280xp_clocks[] = {
2811	[CAMCC_BPS_AHB_CLK] = &camcc_bps_ahb_clk.clkr,
2812	[CAMCC_BPS_AREG_CLK] = &camcc_bps_areg_clk.clkr,
2813	[CAMCC_BPS_AXI_CLK] = &camcc_bps_axi_clk.clkr,
2814	[CAMCC_BPS_CLK] = &camcc_bps_clk.clkr,
2815	[CAMCC_BPS_CLK_SRC] = &camcc_bps_clk_src.clkr,
2816	[CAMCC_CAMNOC_AXI_CLK] = &camcc_camnoc_axi_clk.clkr,
2817	[CAMCC_CAMNOC_AXI_CLK_SRC] = &camcc_camnoc_axi_clk_src.clkr,
2818	[CAMCC_CAMNOC_DCD_XO_CLK] = &camcc_camnoc_dcd_xo_clk.clkr,
2819	[CAMCC_CCI_0_CLK] = &camcc_cci_0_clk.clkr,
2820	[CAMCC_CCI_0_CLK_SRC] = &camcc_cci_0_clk_src.clkr,
2821	[CAMCC_CCI_1_CLK] = &camcc_cci_1_clk.clkr,
2822	[CAMCC_CCI_1_CLK_SRC] = &camcc_cci_1_clk_src.clkr,
2823	[CAMCC_CCI_2_CLK] = &camcc_cci_2_clk.clkr,
2824	[CAMCC_CCI_2_CLK_SRC] = &camcc_cci_2_clk_src.clkr,
2825	[CAMCC_CCI_3_CLK] = &camcc_cci_3_clk.clkr,
2826	[CAMCC_CCI_3_CLK_SRC] = &camcc_cci_3_clk_src.clkr,
2827	[CAMCC_CORE_AHB_CLK] = &camcc_core_ahb_clk.clkr,
2828	[CAMCC_CPAS_AHB_CLK] = &camcc_cpas_ahb_clk.clkr,
2829	[CAMCC_CPHY_RX_CLK_SRC] = &camcc_cphy_rx_clk_src.clkr,
2830	[CAMCC_CSI0PHYTIMER_CLK] = &camcc_csi0phytimer_clk.clkr,
2831	[CAMCC_CSI0PHYTIMER_CLK_SRC] = &camcc_csi0phytimer_clk_src.clkr,
2832	[CAMCC_CSI1PHYTIMER_CLK] = &camcc_csi1phytimer_clk.clkr,
2833	[CAMCC_CSI1PHYTIMER_CLK_SRC] = &camcc_csi1phytimer_clk_src.clkr,
2834	[CAMCC_CSI2PHYTIMER_CLK] = &camcc_csi2phytimer_clk.clkr,
2835	[CAMCC_CSI2PHYTIMER_CLK_SRC] = &camcc_csi2phytimer_clk_src.clkr,
2836	[CAMCC_CSI3PHYTIMER_CLK] = &camcc_csi3phytimer_clk.clkr,
2837	[CAMCC_CSI3PHYTIMER_CLK_SRC] = &camcc_csi3phytimer_clk_src.clkr,
2838	[CAMCC_CSIPHY0_CLK] = &camcc_csiphy0_clk.clkr,
2839	[CAMCC_CSIPHY1_CLK] = &camcc_csiphy1_clk.clkr,
2840	[CAMCC_CSIPHY2_CLK] = &camcc_csiphy2_clk.clkr,
2841	[CAMCC_CSIPHY3_CLK] = &camcc_csiphy3_clk.clkr,
2842	[CAMCC_FAST_AHB_CLK_SRC] = &camcc_fast_ahb_clk_src.clkr,
2843	[CAMCC_GDSC_CLK] = &camcc_gdsc_clk.clkr,
2844	[CAMCC_ICP_AHB_CLK] = &camcc_icp_ahb_clk.clkr,
2845	[CAMCC_ICP_CLK] = &camcc_icp_clk.clkr,
2846	[CAMCC_ICP_CLK_SRC] = &camcc_icp_clk_src.clkr,
2847	[CAMCC_IFE_0_AXI_CLK] = &camcc_ife_0_axi_clk.clkr,
2848	[CAMCC_IFE_0_CLK] = &camcc_ife_0_clk.clkr,
2849	[CAMCC_IFE_0_CLK_SRC] = &camcc_ife_0_clk_src.clkr,
2850	[CAMCC_IFE_0_CPHY_RX_CLK] = &camcc_ife_0_cphy_rx_clk.clkr,
2851	[CAMCC_IFE_0_CSID_CLK] = &camcc_ife_0_csid_clk.clkr,
2852	[CAMCC_IFE_0_CSID_CLK_SRC] = &camcc_ife_0_csid_clk_src.clkr,
2853	[CAMCC_IFE_0_DSP_CLK] = &camcc_ife_0_dsp_clk.clkr,
2854	[CAMCC_IFE_1_AXI_CLK] = &camcc_ife_1_axi_clk.clkr,
2855	[CAMCC_IFE_1_CLK] = &camcc_ife_1_clk.clkr,
2856	[CAMCC_IFE_1_CLK_SRC] = &camcc_ife_1_clk_src.clkr,
2857	[CAMCC_IFE_1_CPHY_RX_CLK] = &camcc_ife_1_cphy_rx_clk.clkr,
2858	[CAMCC_IFE_1_CSID_CLK] = &camcc_ife_1_csid_clk.clkr,
2859	[CAMCC_IFE_1_CSID_CLK_SRC] = &camcc_ife_1_csid_clk_src.clkr,
2860	[CAMCC_IFE_1_DSP_CLK] = &camcc_ife_1_dsp_clk.clkr,
2861	[CAMCC_IFE_2_AXI_CLK] = &camcc_ife_2_axi_clk.clkr,
2862	[CAMCC_IFE_2_CLK] = &camcc_ife_2_clk.clkr,
2863	[CAMCC_IFE_2_CLK_SRC] = &camcc_ife_2_clk_src.clkr,
2864	[CAMCC_IFE_2_CPHY_RX_CLK] = &camcc_ife_2_cphy_rx_clk.clkr,
2865	[CAMCC_IFE_2_CSID_CLK] = &camcc_ife_2_csid_clk.clkr,
2866	[CAMCC_IFE_2_CSID_CLK_SRC] = &camcc_ife_2_csid_clk_src.clkr,
2867	[CAMCC_IFE_2_DSP_CLK] = &camcc_ife_2_dsp_clk.clkr,
2868	[CAMCC_IFE_3_AXI_CLK] = &camcc_ife_3_axi_clk.clkr,
2869	[CAMCC_IFE_3_CLK] = &camcc_ife_3_clk.clkr,
2870	[CAMCC_IFE_3_CLK_SRC] = &camcc_ife_3_clk_src.clkr,
2871	[CAMCC_IFE_3_CPHY_RX_CLK] = &camcc_ife_3_cphy_rx_clk.clkr,
2872	[CAMCC_IFE_3_CSID_CLK] = &camcc_ife_3_csid_clk.clkr,
2873	[CAMCC_IFE_3_CSID_CLK_SRC] = &camcc_ife_3_csid_clk_src.clkr,
2874	[CAMCC_IFE_3_DSP_CLK] = &camcc_ife_3_dsp_clk.clkr,
2875	[CAMCC_IFE_LITE_0_CLK] = &camcc_ife_lite_0_clk.clkr,
2876	[CAMCC_IFE_LITE_0_CLK_SRC] = &camcc_ife_lite_0_clk_src.clkr,
2877	[CAMCC_IFE_LITE_0_CPHY_RX_CLK] = &camcc_ife_lite_0_cphy_rx_clk.clkr,
2878	[CAMCC_IFE_LITE_0_CSID_CLK] = &camcc_ife_lite_0_csid_clk.clkr,
2879	[CAMCC_IFE_LITE_0_CSID_CLK_SRC] = &camcc_ife_lite_0_csid_clk_src.clkr,
2880	[CAMCC_IFE_LITE_1_CLK] = &camcc_ife_lite_1_clk.clkr,
2881	[CAMCC_IFE_LITE_1_CLK_SRC] = &camcc_ife_lite_1_clk_src.clkr,
2882	[CAMCC_IFE_LITE_1_CPHY_RX_CLK] = &camcc_ife_lite_1_cphy_rx_clk.clkr,
2883	[CAMCC_IFE_LITE_1_CSID_CLK] = &camcc_ife_lite_1_csid_clk.clkr,
2884	[CAMCC_IFE_LITE_1_CSID_CLK_SRC] = &camcc_ife_lite_1_csid_clk_src.clkr,
2885	[CAMCC_IFE_LITE_2_CLK] = &camcc_ife_lite_2_clk.clkr,
2886	[CAMCC_IFE_LITE_2_CLK_SRC] = &camcc_ife_lite_2_clk_src.clkr,
2887	[CAMCC_IFE_LITE_2_CPHY_RX_CLK] = &camcc_ife_lite_2_cphy_rx_clk.clkr,
2888	[CAMCC_IFE_LITE_2_CSID_CLK] = &camcc_ife_lite_2_csid_clk.clkr,
2889	[CAMCC_IFE_LITE_2_CSID_CLK_SRC] = &camcc_ife_lite_2_csid_clk_src.clkr,
2890	[CAMCC_IFE_LITE_3_CLK] = &camcc_ife_lite_3_clk.clkr,
2891	[CAMCC_IFE_LITE_3_CLK_SRC] = &camcc_ife_lite_3_clk_src.clkr,
2892	[CAMCC_IFE_LITE_3_CPHY_RX_CLK] = &camcc_ife_lite_3_cphy_rx_clk.clkr,
2893	[CAMCC_IFE_LITE_3_CSID_CLK] = &camcc_ife_lite_3_csid_clk.clkr,
2894	[CAMCC_IFE_LITE_3_CSID_CLK_SRC] = &camcc_ife_lite_3_csid_clk_src.clkr,
2895	[CAMCC_IPE_0_AHB_CLK] = &camcc_ipe_0_ahb_clk.clkr,
2896	[CAMCC_IPE_0_AREG_CLK] = &camcc_ipe_0_areg_clk.clkr,
2897	[CAMCC_IPE_0_AXI_CLK] = &camcc_ipe_0_axi_clk.clkr,
2898	[CAMCC_IPE_0_CLK] = &camcc_ipe_0_clk.clkr,
2899	[CAMCC_IPE_0_CLK_SRC] = &camcc_ipe_0_clk_src.clkr,
2900	[CAMCC_IPE_1_AHB_CLK] = &camcc_ipe_1_ahb_clk.clkr,
2901	[CAMCC_IPE_1_AREG_CLK] = &camcc_ipe_1_areg_clk.clkr,
2902	[CAMCC_IPE_1_AXI_CLK] = &camcc_ipe_1_axi_clk.clkr,
2903	[CAMCC_IPE_1_CLK] = &camcc_ipe_1_clk.clkr,
2904	[CAMCC_JPEG_CLK] = &camcc_jpeg_clk.clkr,
2905	[CAMCC_JPEG_CLK_SRC] = &camcc_jpeg_clk_src.clkr,
2906	[CAMCC_LRME_CLK] = &camcc_lrme_clk.clkr,
2907	[CAMCC_LRME_CLK_SRC] = &camcc_lrme_clk_src.clkr,
2908	[CAMCC_MCLK0_CLK] = &camcc_mclk0_clk.clkr,
2909	[CAMCC_MCLK0_CLK_SRC] = &camcc_mclk0_clk_src.clkr,
2910	[CAMCC_MCLK1_CLK] = &camcc_mclk1_clk.clkr,
2911	[CAMCC_MCLK1_CLK_SRC] = &camcc_mclk1_clk_src.clkr,
2912	[CAMCC_MCLK2_CLK] = &camcc_mclk2_clk.clkr,
2913	[CAMCC_MCLK2_CLK_SRC] = &camcc_mclk2_clk_src.clkr,
2914	[CAMCC_MCLK3_CLK] = &camcc_mclk3_clk.clkr,
2915	[CAMCC_MCLK3_CLK_SRC] = &camcc_mclk3_clk_src.clkr,
2916	[CAMCC_MCLK4_CLK] = &camcc_mclk4_clk.clkr,
2917	[CAMCC_MCLK4_CLK_SRC] = &camcc_mclk4_clk_src.clkr,
2918	[CAMCC_MCLK5_CLK] = &camcc_mclk5_clk.clkr,
2919	[CAMCC_MCLK5_CLK_SRC] = &camcc_mclk5_clk_src.clkr,
2920	[CAMCC_MCLK6_CLK] = &camcc_mclk6_clk.clkr,
2921	[CAMCC_MCLK6_CLK_SRC] = &camcc_mclk6_clk_src.clkr,
2922	[CAMCC_MCLK7_CLK] = &camcc_mclk7_clk.clkr,
2923	[CAMCC_MCLK7_CLK_SRC] = &camcc_mclk7_clk_src.clkr,
2924	[CAMCC_PLL0] = &camcc_pll0.clkr,
2925	[CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.clkr,
2926	[CAMCC_PLL0_OUT_ODD] = &camcc_pll0_out_odd.clkr,
2927	[CAMCC_PLL1] = &camcc_pll1.clkr,
2928	[CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.clkr,
2929	[CAMCC_PLL2] = &camcc_pll2.clkr,
2930	[CAMCC_PLL3] = &camcc_pll3.clkr,
2931	[CAMCC_PLL3_OUT_EVEN] = &camcc_pll3_out_even.clkr,
2932	[CAMCC_PLL4] = &camcc_pll4.clkr,
2933	[CAMCC_PLL4_OUT_EVEN] = &camcc_pll4_out_even.clkr,
2934	[CAMCC_PLL5] = &camcc_pll5.clkr,
2935	[CAMCC_PLL5_OUT_EVEN] = &camcc_pll5_out_even.clkr,
2936	[CAMCC_PLL6] = &camcc_pll6.clkr,
2937	[CAMCC_PLL6_OUT_EVEN] = &camcc_pll6_out_even.clkr,
2938	[CAMCC_PLL7] = &camcc_pll7.clkr,
2939	[CAMCC_PLL7_OUT_EVEN] = &camcc_pll7_out_even.clkr,
2940	[CAMCC_PLL7_OUT_ODD] = &camcc_pll7_out_odd.clkr,
2941	[CAMCC_SLEEP_CLK] = &camcc_sleep_clk.clkr,
2942	[CAMCC_SLEEP_CLK_SRC] = &camcc_sleep_clk_src.clkr,
2943	[CAMCC_SLOW_AHB_CLK_SRC] = &camcc_slow_ahb_clk_src.clkr,
2944	[CAMCC_XO_CLK_SRC] = &camcc_xo_clk_src.clkr,
2945};
2946
2947static struct gdsc *camcc_sc8280xp_gdscs[] = {
2948	[BPS_GDSC] = &bps_gdsc,
2949	[IFE_0_GDSC] = &ife_0_gdsc,
2950	[IFE_1_GDSC] = &ife_1_gdsc,
2951	[IFE_2_GDSC] = &ife_2_gdsc,
2952	[IFE_3_GDSC] = &ife_3_gdsc,
2953	[IPE_0_GDSC] = &ipe_0_gdsc,
2954	[IPE_1_GDSC] = &ipe_1_gdsc,
2955	[TITAN_TOP_GDSC] = &titan_top_gdsc,
2956};
2957
2958static const struct qcom_reset_map camcc_sc8280xp_resets[] = {
2959	[CAMCC_BPS_BCR] = { 0x7000 },
2960	[CAMCC_CAMNOC_BCR] = { 0xc16c },
2961	[CAMCC_CCI_BCR] = { 0xc104 },
2962	[CAMCC_CPAS_BCR] = { 0xc164 },
2963	[CAMCC_CSI0PHY_BCR] = { 0x6000 },
2964	[CAMCC_CSI1PHY_BCR] = { 0x6024 },
2965	[CAMCC_CSI2PHY_BCR] = { 0x6048 },
2966	[CAMCC_CSI3PHY_BCR] = { 0x6070 },
2967	[CAMCC_ICP_BCR] = { 0xc0b4 },
2968	[CAMCC_IFE_0_BCR] = { 0xa000 },
2969	[CAMCC_IFE_1_BCR] = { 0xb000 },
2970	[CAMCC_IFE_2_BCR] = { 0xf000 },
2971	[CAMCC_IFE_3_BCR] = { 0xf06c },
2972	[CAMCC_IFE_LITE_0_BCR] = { 0xc000 },
2973	[CAMCC_IFE_LITE_1_BCR] = { 0xc044 },
2974	[CAMCC_IFE_LITE_2_BCR] = { 0xc23c },
2975	[CAMCC_IFE_LITE_3_BCR] = { 0xc280 },
2976	[CAMCC_IPE_0_BCR] = { 0x8000 },
2977	[CAMCC_IPE_1_BCR] = { 0x9000 },
2978	[CAMCC_JPEG_BCR] = { 0xc088 },
2979	[CAMCC_LRME_BCR] = { 0xc140 },
2980};
2981
2982static const struct regmap_config camcc_sc8280xp_regmap_config = {
2983	.reg_bits = 32,
2984	.reg_stride = 4,
2985	.val_bits = 32,
2986	.max_register = 0x13020,
2987	.fast_io = true,
2988};
2989
2990static struct qcom_cc_desc camcc_sc8280xp_desc = {
2991	.config = &camcc_sc8280xp_regmap_config,
2992	.clks = camcc_sc8280xp_clocks,
2993	.num_clks = ARRAY_SIZE(camcc_sc8280xp_clocks),
2994	.resets = camcc_sc8280xp_resets,
2995	.num_resets = ARRAY_SIZE(camcc_sc8280xp_resets),
2996	.gdscs = camcc_sc8280xp_gdscs,
2997	.num_gdscs = ARRAY_SIZE(camcc_sc8280xp_gdscs),
2998};
2999
3000static const struct of_device_id camcc_sc8280xp_match_table[] = {
3001	{ .compatible = "qcom,sc8280xp-camcc" },
3002	{ }
3003};
3004MODULE_DEVICE_TABLE(of, camcc_sc8280xp_match_table);
3005
3006static int camcc_sc8280xp_probe(struct platform_device *pdev)
3007{
3008	struct regmap *regmap;
3009	int ret;
3010
3011	ret = devm_pm_runtime_enable(&pdev->dev);
3012	if (ret)
3013		return ret;
3014
3015	ret = pm_runtime_resume_and_get(&pdev->dev);
3016	if (ret)
3017		return ret;
3018
3019	regmap = qcom_cc_map(pdev, &camcc_sc8280xp_desc);
3020	if (IS_ERR(regmap)) {
3021		ret = PTR_ERR(regmap);
3022		goto err_put_rpm;
3023	}
3024
3025	clk_lucid_pll_configure(&camcc_pll0, regmap, &camcc_pll0_config);
3026	clk_lucid_pll_configure(&camcc_pll1, regmap, &camcc_pll1_config);
3027	clk_zonda_pll_configure(&camcc_pll2, regmap, &camcc_pll2_config);
3028	clk_lucid_pll_configure(&camcc_pll3, regmap, &camcc_pll3_config);
3029	clk_lucid_pll_configure(&camcc_pll4, regmap, &camcc_pll4_config);
3030	clk_lucid_pll_configure(&camcc_pll5, regmap, &camcc_pll5_config);
3031	clk_lucid_pll_configure(&camcc_pll6, regmap, &camcc_pll6_config);
3032	clk_lucid_pll_configure(&camcc_pll7, regmap, &camcc_pll7_config);
3033
3034	/* Keep some clocks always-on */
3035	qcom_branch_set_clk_en(regmap, 0xc1e4); /* CAMCC_GDSC_CLK */
3036
3037	ret = qcom_cc_really_probe(&pdev->dev, &camcc_sc8280xp_desc, regmap);
3038	if (ret)
3039		goto err_disable;
3040
3041	pm_runtime_put(&pdev->dev);
3042
3043	return 0;
3044
3045err_disable:
3046	regmap_update_bits(regmap, 0xc1e4, BIT(0), 0);
3047err_put_rpm:
3048	pm_runtime_put_sync(&pdev->dev);
3049
3050	return ret;
3051}
3052
3053static struct platform_driver camcc_sc8280xp_driver = {
3054	.probe = camcc_sc8280xp_probe,
3055	.driver = {
3056		.name = "camcc-sc8280xp",
3057		.of_match_table = camcc_sc8280xp_match_table,
3058	},
3059};
3060
3061module_platform_driver(camcc_sc8280xp_driver);
3062
3063MODULE_DESCRIPTION("QCOM CAMCC SC8280XP Driver");
3064MODULE_LICENSE("GPL");