brintos

brintos / linux-shallow public Read only

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