brintos

brintos / linux-shallow public Read only

0
0
Text · 78.1 KiB · 479964f Raw
3065 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*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");3065