Linux Audio

Check our new training course

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