xref: /openbmc/linux/drivers/clk/qcom/camcc-sdm845.c (revision c1855dd0)
178412c26SAmit Nischal // SPDX-License-Identifier: GPL-2.0
278412c26SAmit Nischal /*
378412c26SAmit Nischal  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
478412c26SAmit Nischal  */
578412c26SAmit Nischal 
678412c26SAmit Nischal #include <linux/clk-provider.h>
778412c26SAmit Nischal #include <linux/module.h>
878412c26SAmit Nischal #include <linux/platform_device.h>
978412c26SAmit Nischal #include <linux/regmap.h>
1078412c26SAmit Nischal 
1178412c26SAmit Nischal #include <dt-bindings/clock/qcom,camcc-sdm845.h>
1278412c26SAmit Nischal 
1378412c26SAmit Nischal #include "common.h"
1478412c26SAmit Nischal #include "clk-alpha-pll.h"
1578412c26SAmit Nischal #include "clk-branch.h"
1678412c26SAmit Nischal #include "clk-rcg.h"
1778412c26SAmit Nischal #include "clk-regmap.h"
1878412c26SAmit Nischal #include "gdsc.h"
1978412c26SAmit Nischal 
2078412c26SAmit Nischal enum {
2178412c26SAmit Nischal 	P_BI_TCXO,
2278412c26SAmit Nischal 	P_CAM_CC_PLL0_OUT_EVEN,
2378412c26SAmit Nischal 	P_CAM_CC_PLL1_OUT_EVEN,
2478412c26SAmit Nischal 	P_CAM_CC_PLL2_OUT_EVEN,
2578412c26SAmit Nischal 	P_CAM_CC_PLL3_OUT_EVEN,
2678412c26SAmit Nischal };
2778412c26SAmit Nischal 
2878412c26SAmit Nischal static struct clk_alpha_pll cam_cc_pll0 = {
2978412c26SAmit Nischal 	.offset = 0x0,
3078412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
3178412c26SAmit Nischal 	.clkr = {
3278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
3378412c26SAmit Nischal 			.name = "cam_cc_pll0",
340cc3bd80SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data){
350cc3bd80SDmitry Baryshkov 				.fw_name = "bi_tcxo", .name = "bi_tcxo",
360cc3bd80SDmitry Baryshkov 			},
3778412c26SAmit Nischal 			.num_parents = 1,
3878412c26SAmit Nischal 			.ops = &clk_alpha_pll_fabia_ops,
3978412c26SAmit Nischal 		},
4078412c26SAmit Nischal 	},
4178412c26SAmit Nischal };
4278412c26SAmit Nischal 
4378412c26SAmit Nischal static const struct clk_div_table post_div_table_fabia_even[] = {
4478412c26SAmit Nischal 	{ 0x0, 1 },
4578412c26SAmit Nischal 	{ 0x1, 2 },
4678412c26SAmit Nischal 	{ }
4778412c26SAmit Nischal };
4878412c26SAmit Nischal 
4978412c26SAmit Nischal static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
5078412c26SAmit Nischal 	.offset = 0x0,
5178412c26SAmit Nischal 	.post_div_shift = 8,
5278412c26SAmit Nischal 	.post_div_table = post_div_table_fabia_even,
5378412c26SAmit Nischal 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
5478412c26SAmit Nischal 	.width = 4,
5578412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
5678412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
5778412c26SAmit Nischal 		.name = "cam_cc_pll0_out_even",
580cc3bd80SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
590cc3bd80SDmitry Baryshkov 			&cam_cc_pll0.clkr.hw,
600cc3bd80SDmitry Baryshkov 		},
6178412c26SAmit Nischal 		.num_parents = 1,
6278412c26SAmit Nischal 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
6378412c26SAmit Nischal 	},
6478412c26SAmit Nischal };
6578412c26SAmit Nischal 
6678412c26SAmit Nischal static struct clk_alpha_pll cam_cc_pll1 = {
6778412c26SAmit Nischal 	.offset = 0x1000,
6878412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
6978412c26SAmit Nischal 	.clkr = {
7078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
7178412c26SAmit Nischal 			.name = "cam_cc_pll1",
720cc3bd80SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data){
730cc3bd80SDmitry Baryshkov 				.fw_name = "bi_tcxo", .name = "bi_tcxo",
740cc3bd80SDmitry Baryshkov 			},
7578412c26SAmit Nischal 			.num_parents = 1,
7678412c26SAmit Nischal 			.ops = &clk_alpha_pll_fabia_ops,
7778412c26SAmit Nischal 		},
7878412c26SAmit Nischal 	},
7978412c26SAmit Nischal };
8078412c26SAmit Nischal 
8178412c26SAmit Nischal static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
8278412c26SAmit Nischal 	.offset = 0x1000,
8378412c26SAmit Nischal 	.post_div_shift = 8,
8478412c26SAmit Nischal 	.post_div_table = post_div_table_fabia_even,
8578412c26SAmit Nischal 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
8678412c26SAmit Nischal 	.width = 4,
8778412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
8878412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
8978412c26SAmit Nischal 		.name = "cam_cc_pll1_out_even",
900cc3bd80SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
910cc3bd80SDmitry Baryshkov 			&cam_cc_pll1.clkr.hw,
920cc3bd80SDmitry Baryshkov 		},
9378412c26SAmit Nischal 		.num_parents = 1,
9478412c26SAmit Nischal 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
9578412c26SAmit Nischal 	},
9678412c26SAmit Nischal };
9778412c26SAmit Nischal 
9878412c26SAmit Nischal static struct clk_alpha_pll cam_cc_pll2 = {
9978412c26SAmit Nischal 	.offset = 0x2000,
10078412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
10178412c26SAmit Nischal 	.clkr = {
10278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
10378412c26SAmit Nischal 			.name = "cam_cc_pll2",
1040cc3bd80SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data){
1050cc3bd80SDmitry Baryshkov 				.fw_name = "bi_tcxo", .name = "bi_tcxo",
1060cc3bd80SDmitry Baryshkov 			},
10778412c26SAmit Nischal 			.num_parents = 1,
10878412c26SAmit Nischal 			.ops = &clk_alpha_pll_fabia_ops,
10978412c26SAmit Nischal 		},
11078412c26SAmit Nischal 	},
11178412c26SAmit Nischal };
11278412c26SAmit Nischal 
11378412c26SAmit Nischal static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
11478412c26SAmit Nischal 	.offset = 0x2000,
11578412c26SAmit Nischal 	.post_div_shift = 8,
11678412c26SAmit Nischal 	.post_div_table = post_div_table_fabia_even,
11778412c26SAmit Nischal 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
11878412c26SAmit Nischal 	.width = 4,
11978412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
12078412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
12178412c26SAmit Nischal 		.name = "cam_cc_pll2_out_even",
1220cc3bd80SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
1230cc3bd80SDmitry Baryshkov 			&cam_cc_pll2.clkr.hw,
1240cc3bd80SDmitry Baryshkov 		},
12578412c26SAmit Nischal 		.num_parents = 1,
12678412c26SAmit Nischal 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
12778412c26SAmit Nischal 	},
12878412c26SAmit Nischal };
12978412c26SAmit Nischal 
13078412c26SAmit Nischal static struct clk_alpha_pll cam_cc_pll3 = {
13178412c26SAmit Nischal 	.offset = 0x3000,
13278412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
13378412c26SAmit Nischal 	.clkr = {
13478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
13578412c26SAmit Nischal 			.name = "cam_cc_pll3",
1360cc3bd80SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data){
1370cc3bd80SDmitry Baryshkov 				.fw_name = "bi_tcxo", .name = "bi_tcxo",
1380cc3bd80SDmitry Baryshkov 			},
13978412c26SAmit Nischal 			.num_parents = 1,
14078412c26SAmit Nischal 			.ops = &clk_alpha_pll_fabia_ops,
14178412c26SAmit Nischal 		},
14278412c26SAmit Nischal 	},
14378412c26SAmit Nischal };
14478412c26SAmit Nischal 
14578412c26SAmit Nischal static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
14678412c26SAmit Nischal 	.offset = 0x3000,
14778412c26SAmit Nischal 	.post_div_shift = 8,
14878412c26SAmit Nischal 	.post_div_table = post_div_table_fabia_even,
14978412c26SAmit Nischal 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
15078412c26SAmit Nischal 	.width = 4,
15178412c26SAmit Nischal 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
15278412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
15378412c26SAmit Nischal 		.name = "cam_cc_pll3_out_even",
1540cc3bd80SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
1550cc3bd80SDmitry Baryshkov 			&cam_cc_pll3.clkr.hw,
1560cc3bd80SDmitry Baryshkov 		},
15778412c26SAmit Nischal 		.num_parents = 1,
15878412c26SAmit Nischal 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
15978412c26SAmit Nischal 	},
16078412c26SAmit Nischal };
16178412c26SAmit Nischal 
162b4e2d27eSDmitry Baryshkov static const struct parent_map cam_cc_parent_map_0[] = {
163b4e2d27eSDmitry Baryshkov 	{ P_BI_TCXO, 0 },
164b4e2d27eSDmitry Baryshkov 	{ P_CAM_CC_PLL2_OUT_EVEN, 1 },
165b4e2d27eSDmitry Baryshkov 	{ P_CAM_CC_PLL1_OUT_EVEN, 2 },
166b4e2d27eSDmitry Baryshkov 	{ P_CAM_CC_PLL3_OUT_EVEN, 5 },
167b4e2d27eSDmitry Baryshkov 	{ P_CAM_CC_PLL0_OUT_EVEN, 6 },
168b4e2d27eSDmitry Baryshkov };
169b4e2d27eSDmitry Baryshkov 
1700cc3bd80SDmitry Baryshkov static const struct clk_parent_data cam_cc_parent_data_0[] = {
1710cc3bd80SDmitry Baryshkov 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
1720cc3bd80SDmitry Baryshkov 	{ .hw = &cam_cc_pll2_out_even.clkr.hw },
1730cc3bd80SDmitry Baryshkov 	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
1740cc3bd80SDmitry Baryshkov 	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
1750cc3bd80SDmitry Baryshkov 	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
176b4e2d27eSDmitry Baryshkov };
177b4e2d27eSDmitry Baryshkov 
17878412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
17978412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
18078412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
18178412c26SAmit Nischal 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
18278412c26SAmit Nischal 	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
18378412c26SAmit Nischal 	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
18478412c26SAmit Nischal 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
18578412c26SAmit Nischal 	{ }
18678412c26SAmit Nischal };
18778412c26SAmit Nischal 
18878412c26SAmit Nischal /*
18978412c26SAmit Nischal  * As per HW design, some of the CAMCC RCGs needs to
19078412c26SAmit Nischal  * move to XO clock during their clock disable so using
19178412c26SAmit Nischal  * clk_rcg2_shared_ops for such RCGs. This is required
19278412c26SAmit Nischal  * to power down the camera memories gracefully.
19378412c26SAmit Nischal  * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
19478412c26SAmit Nischal  * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
19578412c26SAmit Nischal  * table and requires reconfiguration of the PLL frequency.
19678412c26SAmit Nischal  */
19778412c26SAmit Nischal static struct clk_rcg2 cam_cc_bps_clk_src = {
19878412c26SAmit Nischal 	.cmd_rcgr = 0x600c,
19978412c26SAmit Nischal 	.mnd_width = 0,
20078412c26SAmit Nischal 	.hid_width = 5,
20178412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
20278412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
20378412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
20478412c26SAmit Nischal 		.name = "cam_cc_bps_clk_src",
2050cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
2060cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
20778412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
20878412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
20978412c26SAmit Nischal 	},
21078412c26SAmit Nischal };
21178412c26SAmit Nischal 
21278412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
21378412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
21478412c26SAmit Nischal 	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
21578412c26SAmit Nischal 	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
21678412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
21778412c26SAmit Nischal 	{ }
21878412c26SAmit Nischal };
21978412c26SAmit Nischal 
22078412c26SAmit Nischal static struct clk_rcg2 cam_cc_cci_clk_src = {
22178412c26SAmit Nischal 	.cmd_rcgr = 0xb0d8,
22278412c26SAmit Nischal 	.mnd_width = 8,
22378412c26SAmit Nischal 	.hid_width = 5,
22478412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
22578412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_cci_clk_src,
22678412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
22778412c26SAmit Nischal 		.name = "cam_cc_cci_clk_src",
2280cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
2290cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
23078412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
23178412c26SAmit Nischal 	},
23278412c26SAmit Nischal };
23378412c26SAmit Nischal 
23478412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
23578412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
23678412c26SAmit Nischal 	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
23778412c26SAmit Nischal 	{ }
23878412c26SAmit Nischal };
23978412c26SAmit Nischal 
24078412c26SAmit Nischal static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
24178412c26SAmit Nischal 	.cmd_rcgr = 0x9060,
24278412c26SAmit Nischal 	.mnd_width = 0,
24378412c26SAmit Nischal 	.hid_width = 5,
24478412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
24578412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
24678412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
24778412c26SAmit Nischal 		.name = "cam_cc_cphy_rx_clk_src",
2480cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
2490cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
25078412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
25178412c26SAmit Nischal 	},
25278412c26SAmit Nischal };
25378412c26SAmit Nischal 
25478412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
25578412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
25678412c26SAmit Nischal 	F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
25778412c26SAmit Nischal 	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
25878412c26SAmit Nischal 	{ }
25978412c26SAmit Nischal };
26078412c26SAmit Nischal 
26178412c26SAmit Nischal static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
26278412c26SAmit Nischal 	.cmd_rcgr = 0x5004,
26378412c26SAmit Nischal 	.mnd_width = 0,
26478412c26SAmit Nischal 	.hid_width = 5,
26578412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
26678412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
26778412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
26878412c26SAmit Nischal 		.name = "cam_cc_csi0phytimer_clk_src",
2690cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
2700cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
27178412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
27278412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
27378412c26SAmit Nischal 	},
27478412c26SAmit Nischal };
27578412c26SAmit Nischal 
27678412c26SAmit Nischal static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
27778412c26SAmit Nischal 	.cmd_rcgr = 0x5028,
27878412c26SAmit Nischal 	.mnd_width = 0,
27978412c26SAmit Nischal 	.hid_width = 5,
28078412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
28178412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
28278412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
28378412c26SAmit Nischal 		.name = "cam_cc_csi1phytimer_clk_src",
2840cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
2850cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
28678412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
28778412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
28878412c26SAmit Nischal 	},
28978412c26SAmit Nischal };
29078412c26SAmit Nischal 
29178412c26SAmit Nischal static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
29278412c26SAmit Nischal 	.cmd_rcgr = 0x504c,
29378412c26SAmit Nischal 	.mnd_width = 0,
29478412c26SAmit Nischal 	.hid_width = 5,
29578412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
29678412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
29778412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
29878412c26SAmit Nischal 		.name = "cam_cc_csi2phytimer_clk_src",
2990cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
3000cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
30178412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
30278412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
30378412c26SAmit Nischal 	},
30478412c26SAmit Nischal };
30578412c26SAmit Nischal 
30678412c26SAmit Nischal static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
30778412c26SAmit Nischal 	.cmd_rcgr = 0x5070,
30878412c26SAmit Nischal 	.mnd_width = 0,
30978412c26SAmit Nischal 	.hid_width = 5,
31078412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
31178412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
31278412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
31378412c26SAmit Nischal 		.name = "cam_cc_csi3phytimer_clk_src",
3140cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
3150cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
31678412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
31778412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
31878412c26SAmit Nischal 	},
31978412c26SAmit Nischal };
32078412c26SAmit Nischal 
32178412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
32278412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
32378412c26SAmit Nischal 	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
32478412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
32578412c26SAmit Nischal 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
32678412c26SAmit Nischal 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
32778412c26SAmit Nischal 	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
32878412c26SAmit Nischal 	{ }
32978412c26SAmit Nischal };
33078412c26SAmit Nischal 
33178412c26SAmit Nischal static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
33278412c26SAmit Nischal 	.cmd_rcgr = 0x6038,
33378412c26SAmit Nischal 	.mnd_width = 0,
33478412c26SAmit Nischal 	.hid_width = 5,
33578412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
33678412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
33778412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
33878412c26SAmit Nischal 		.name = "cam_cc_fast_ahb_clk_src",
3390cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
3400cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
34178412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
34278412c26SAmit Nischal 	},
34378412c26SAmit Nischal };
34478412c26SAmit Nischal 
34578412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
34678412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
34778412c26SAmit Nischal 	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
34878412c26SAmit Nischal 	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
34978412c26SAmit Nischal 	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
35078412c26SAmit Nischal 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
35178412c26SAmit Nischal 	{ }
35278412c26SAmit Nischal };
35378412c26SAmit Nischal 
35478412c26SAmit Nischal static struct clk_rcg2 cam_cc_fd_core_clk_src = {
35578412c26SAmit Nischal 	.cmd_rcgr = 0xb0b0,
35678412c26SAmit Nischal 	.mnd_width = 0,
35778412c26SAmit Nischal 	.hid_width = 5,
35878412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
35978412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
36078412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
36178412c26SAmit Nischal 		.name = "cam_cc_fd_core_clk_src",
3620cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
3630cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
36478412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
36578412c26SAmit Nischal 	},
36678412c26SAmit Nischal };
36778412c26SAmit Nischal 
36878412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
36978412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
37078412c26SAmit Nischal 	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
37178412c26SAmit Nischal 	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
37278412c26SAmit Nischal 	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
37378412c26SAmit Nischal 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
37478412c26SAmit Nischal 	{ }
37578412c26SAmit Nischal };
37678412c26SAmit Nischal 
37778412c26SAmit Nischal static struct clk_rcg2 cam_cc_icp_clk_src = {
37878412c26SAmit Nischal 	.cmd_rcgr = 0xb088,
37978412c26SAmit Nischal 	.mnd_width = 0,
38078412c26SAmit Nischal 	.hid_width = 5,
38178412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
38278412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_icp_clk_src,
38378412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
38478412c26SAmit Nischal 		.name = "cam_cc_icp_clk_src",
3850cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
3860cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
38778412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
38878412c26SAmit Nischal 	},
38978412c26SAmit Nischal };
39078412c26SAmit Nischal 
39178412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
39278412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
39378412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
39478412c26SAmit Nischal 	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
39578412c26SAmit Nischal 	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
39678412c26SAmit Nischal 	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
39778412c26SAmit Nischal 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
39878412c26SAmit Nischal 	{ }
39978412c26SAmit Nischal };
40078412c26SAmit Nischal 
40178412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_0_clk_src = {
40278412c26SAmit Nischal 	.cmd_rcgr = 0x900c,
40378412c26SAmit Nischal 	.mnd_width = 0,
40478412c26SAmit Nischal 	.hid_width = 5,
40578412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
40678412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
40778412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
40878412c26SAmit Nischal 		.name = "cam_cc_ife_0_clk_src",
4090cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4100cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
41178412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
41278412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
41378412c26SAmit Nischal 	},
41478412c26SAmit Nischal };
41578412c26SAmit Nischal 
41678412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
41778412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
41878412c26SAmit Nischal 	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
41978412c26SAmit Nischal 	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
42078412c26SAmit Nischal 	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
42178412c26SAmit Nischal 	{ }
42278412c26SAmit Nischal };
42378412c26SAmit Nischal 
42478412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
42578412c26SAmit Nischal 	.cmd_rcgr = 0x9038,
42678412c26SAmit Nischal 	.mnd_width = 0,
42778412c26SAmit Nischal 	.hid_width = 5,
42878412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
42978412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
43078412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
43178412c26SAmit Nischal 		.name = "cam_cc_ife_0_csid_clk_src",
4320cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4330cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
43478412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
43578412c26SAmit Nischal 	},
43678412c26SAmit Nischal };
43778412c26SAmit Nischal 
43878412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_1_clk_src = {
43978412c26SAmit Nischal 	.cmd_rcgr = 0xa00c,
44078412c26SAmit Nischal 	.mnd_width = 0,
44178412c26SAmit Nischal 	.hid_width = 5,
44278412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
44378412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
44478412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
44578412c26SAmit Nischal 		.name = "cam_cc_ife_1_clk_src",
4460cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4470cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
44878412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
44978412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
45078412c26SAmit Nischal 	},
45178412c26SAmit Nischal };
45278412c26SAmit Nischal 
45378412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
45478412c26SAmit Nischal 	.cmd_rcgr = 0xa030,
45578412c26SAmit Nischal 	.mnd_width = 0,
45678412c26SAmit Nischal 	.hid_width = 5,
45778412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
45878412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
45978412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
46078412c26SAmit Nischal 		.name = "cam_cc_ife_1_csid_clk_src",
4610cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4620cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
46378412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
46478412c26SAmit Nischal 	},
46578412c26SAmit Nischal };
46678412c26SAmit Nischal 
46778412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
46878412c26SAmit Nischal 	.cmd_rcgr = 0xb004,
46978412c26SAmit Nischal 	.mnd_width = 0,
47078412c26SAmit Nischal 	.hid_width = 5,
47178412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
47278412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
47378412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
47478412c26SAmit Nischal 		.name = "cam_cc_ife_lite_clk_src",
4750cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4760cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
47778412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
47878412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
47978412c26SAmit Nischal 	},
48078412c26SAmit Nischal };
48178412c26SAmit Nischal 
48278412c26SAmit Nischal static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
48378412c26SAmit Nischal 	.cmd_rcgr = 0xb024,
48478412c26SAmit Nischal 	.mnd_width = 0,
48578412c26SAmit Nischal 	.hid_width = 5,
48678412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
48778412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
48878412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
48978412c26SAmit Nischal 		.name = "cam_cc_ife_lite_csid_clk_src",
4900cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
4910cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
49278412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
49378412c26SAmit Nischal 	},
49478412c26SAmit Nischal };
49578412c26SAmit Nischal 
49678412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
49778412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
49878412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
49978412c26SAmit Nischal 	F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
50078412c26SAmit Nischal 	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
50178412c26SAmit Nischal 	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
50278412c26SAmit Nischal 	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
50378412c26SAmit Nischal 	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
50478412c26SAmit Nischal 	{ }
50578412c26SAmit Nischal };
50678412c26SAmit Nischal 
50778412c26SAmit Nischal static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
50878412c26SAmit Nischal 	.cmd_rcgr = 0x700c,
50978412c26SAmit Nischal 	.mnd_width = 0,
51078412c26SAmit Nischal 	.hid_width = 5,
51178412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
51278412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
51378412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
51478412c26SAmit Nischal 		.name = "cam_cc_ipe_0_clk_src",
5150cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
5160cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
51778412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
51878412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
51978412c26SAmit Nischal 	},
52078412c26SAmit Nischal };
52178412c26SAmit Nischal 
52278412c26SAmit Nischal static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
52378412c26SAmit Nischal 	.cmd_rcgr = 0x800c,
52478412c26SAmit Nischal 	.mnd_width = 0,
52578412c26SAmit Nischal 	.hid_width = 5,
52678412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
52778412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
52878412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
52978412c26SAmit Nischal 		.name = "cam_cc_ipe_1_clk_src",
5300cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
5310cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
53278412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
53378412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
53478412c26SAmit Nischal 	},
53578412c26SAmit Nischal };
53678412c26SAmit Nischal 
53778412c26SAmit Nischal static struct clk_rcg2 cam_cc_jpeg_clk_src = {
53878412c26SAmit Nischal 	.cmd_rcgr = 0xb04c,
53978412c26SAmit Nischal 	.mnd_width = 0,
54078412c26SAmit Nischal 	.hid_width = 5,
54178412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
54278412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
54378412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
54478412c26SAmit Nischal 		.name = "cam_cc_jpeg_clk_src",
5450cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
5460cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
54778412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
54878412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
54978412c26SAmit Nischal 	},
55078412c26SAmit Nischal };
55178412c26SAmit Nischal 
55278412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
55378412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
55478412c26SAmit Nischal 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
55578412c26SAmit Nischal 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
55678412c26SAmit Nischal 	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
55778412c26SAmit Nischal 	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
55878412c26SAmit Nischal 	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
55978412c26SAmit Nischal 	{ }
56078412c26SAmit Nischal };
56178412c26SAmit Nischal 
56278412c26SAmit Nischal static struct clk_rcg2 cam_cc_lrme_clk_src = {
56378412c26SAmit Nischal 	.cmd_rcgr = 0xb0f8,
56478412c26SAmit Nischal 	.mnd_width = 0,
56578412c26SAmit Nischal 	.hid_width = 5,
56678412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
56778412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_lrme_clk_src,
56878412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
56978412c26SAmit Nischal 		.name = "cam_cc_lrme_clk_src",
5700cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
5710cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
57278412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
57378412c26SAmit Nischal 		.ops = &clk_rcg2_shared_ops,
57478412c26SAmit Nischal 	},
57578412c26SAmit Nischal };
57678412c26SAmit Nischal 
57778412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
57878412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
57978412c26SAmit Nischal 	F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
58078412c26SAmit Nischal 	F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
58178412c26SAmit Nischal 	F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
58278412c26SAmit Nischal 	{ }
58378412c26SAmit Nischal };
58478412c26SAmit Nischal 
58578412c26SAmit Nischal static struct clk_rcg2 cam_cc_mclk0_clk_src = {
58678412c26SAmit Nischal 	.cmd_rcgr = 0x4004,
58778412c26SAmit Nischal 	.mnd_width = 8,
58878412c26SAmit Nischal 	.hid_width = 5,
58978412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
59078412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
59178412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
59278412c26SAmit Nischal 		.name = "cam_cc_mclk0_clk_src",
5930cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
5940cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
59578412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
59678412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
59778412c26SAmit Nischal 	},
59878412c26SAmit Nischal };
59978412c26SAmit Nischal 
60078412c26SAmit Nischal static struct clk_rcg2 cam_cc_mclk1_clk_src = {
60178412c26SAmit Nischal 	.cmd_rcgr = 0x4024,
60278412c26SAmit Nischal 	.mnd_width = 8,
60378412c26SAmit Nischal 	.hid_width = 5,
60478412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
60578412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
60678412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
60778412c26SAmit Nischal 		.name = "cam_cc_mclk1_clk_src",
6080cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
6090cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
61078412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
61178412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
61278412c26SAmit Nischal 	},
61378412c26SAmit Nischal };
61478412c26SAmit Nischal 
61578412c26SAmit Nischal static struct clk_rcg2 cam_cc_mclk2_clk_src = {
61678412c26SAmit Nischal 	.cmd_rcgr = 0x4044,
61778412c26SAmit Nischal 	.mnd_width = 8,
61878412c26SAmit Nischal 	.hid_width = 5,
61978412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
62078412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
62178412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
62278412c26SAmit Nischal 		.name = "cam_cc_mclk2_clk_src",
6230cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
6240cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
62578412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
62678412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
62778412c26SAmit Nischal 	},
62878412c26SAmit Nischal };
62978412c26SAmit Nischal 
63078412c26SAmit Nischal static struct clk_rcg2 cam_cc_mclk3_clk_src = {
63178412c26SAmit Nischal 	.cmd_rcgr = 0x4064,
63278412c26SAmit Nischal 	.mnd_width = 8,
63378412c26SAmit Nischal 	.hid_width = 5,
63478412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
63578412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
63678412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
63778412c26SAmit Nischal 		.name = "cam_cc_mclk3_clk_src",
6380cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
6390cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
64078412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
64178412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
64278412c26SAmit Nischal 	},
64378412c26SAmit Nischal };
64478412c26SAmit Nischal 
64578412c26SAmit Nischal static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
64678412c26SAmit Nischal 	F(19200000, P_BI_TCXO, 1, 0, 0),
64778412c26SAmit Nischal 	F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
64878412c26SAmit Nischal 	F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
64978412c26SAmit Nischal 	F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
65078412c26SAmit Nischal 	F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
65178412c26SAmit Nischal 	{ }
65278412c26SAmit Nischal };
65378412c26SAmit Nischal 
65478412c26SAmit Nischal static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
65578412c26SAmit Nischal 	.cmd_rcgr = 0x6054,
65678412c26SAmit Nischal 	.mnd_width = 0,
65778412c26SAmit Nischal 	.hid_width = 5,
65878412c26SAmit Nischal 	.parent_map = cam_cc_parent_map_0,
65978412c26SAmit Nischal 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
66078412c26SAmit Nischal 	.clkr.hw.init = &(struct clk_init_data){
66178412c26SAmit Nischal 		.name = "cam_cc_slow_ahb_clk_src",
6620cc3bd80SDmitry Baryshkov 		.parent_data = cam_cc_parent_data_0,
6630cc3bd80SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
66478412c26SAmit Nischal 		.flags = CLK_SET_RATE_PARENT,
66578412c26SAmit Nischal 		.ops = &clk_rcg2_ops,
66678412c26SAmit Nischal 	},
66778412c26SAmit Nischal };
66878412c26SAmit Nischal 
66978412c26SAmit Nischal static struct clk_branch cam_cc_bps_ahb_clk = {
67078412c26SAmit Nischal 	.halt_reg = 0x606c,
67178412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
67278412c26SAmit Nischal 	.clkr = {
67378412c26SAmit Nischal 		.enable_reg = 0x606c,
67478412c26SAmit Nischal 		.enable_mask = BIT(0),
67578412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
67678412c26SAmit Nischal 			.name = "cam_cc_bps_ahb_clk",
6770cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
6780cc3bd80SDmitry Baryshkov 				&cam_cc_slow_ahb_clk_src.clkr.hw,
67978412c26SAmit Nischal 			},
68078412c26SAmit Nischal 			.num_parents = 1,
68178412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
68278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
68378412c26SAmit Nischal 		},
68478412c26SAmit Nischal 	},
68578412c26SAmit Nischal };
68678412c26SAmit Nischal 
68778412c26SAmit Nischal static struct clk_branch cam_cc_bps_areg_clk = {
68878412c26SAmit Nischal 	.halt_reg = 0x6050,
68978412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
69078412c26SAmit Nischal 	.clkr = {
69178412c26SAmit Nischal 		.enable_reg = 0x6050,
69278412c26SAmit Nischal 		.enable_mask = BIT(0),
69378412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
69478412c26SAmit Nischal 			.name = "cam_cc_bps_areg_clk",
6950cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
6960cc3bd80SDmitry Baryshkov 				&cam_cc_fast_ahb_clk_src.clkr.hw,
69778412c26SAmit Nischal 			},
69878412c26SAmit Nischal 			.num_parents = 1,
69978412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
70078412c26SAmit Nischal 			.ops = &clk_branch2_ops,
70178412c26SAmit Nischal 		},
70278412c26SAmit Nischal 	},
70378412c26SAmit Nischal };
70478412c26SAmit Nischal 
70578412c26SAmit Nischal static struct clk_branch cam_cc_bps_axi_clk = {
70678412c26SAmit Nischal 	.halt_reg = 0x6034,
70778412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
70878412c26SAmit Nischal 	.clkr = {
70978412c26SAmit Nischal 		.enable_reg = 0x6034,
71078412c26SAmit Nischal 		.enable_mask = BIT(0),
71178412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
71278412c26SAmit Nischal 			.name = "cam_cc_bps_axi_clk",
71378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
71478412c26SAmit Nischal 		},
71578412c26SAmit Nischal 	},
71678412c26SAmit Nischal };
71778412c26SAmit Nischal 
71878412c26SAmit Nischal static struct clk_branch cam_cc_bps_clk = {
71978412c26SAmit Nischal 	.halt_reg = 0x6024,
72078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
72178412c26SAmit Nischal 	.clkr = {
72278412c26SAmit Nischal 		.enable_reg = 0x6024,
72378412c26SAmit Nischal 		.enable_mask = BIT(0),
72478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
72578412c26SAmit Nischal 			.name = "cam_cc_bps_clk",
7260cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
7270cc3bd80SDmitry Baryshkov 				&cam_cc_bps_clk_src.clkr.hw,
72878412c26SAmit Nischal 			},
72978412c26SAmit Nischal 			.num_parents = 1,
73078412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
73178412c26SAmit Nischal 			.ops = &clk_branch2_ops,
73278412c26SAmit Nischal 		},
73378412c26SAmit Nischal 	},
73478412c26SAmit Nischal };
73578412c26SAmit Nischal 
73678412c26SAmit Nischal static struct clk_branch cam_cc_camnoc_atb_clk = {
73778412c26SAmit Nischal 	.halt_reg = 0xb12c,
73878412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
73978412c26SAmit Nischal 	.clkr = {
74078412c26SAmit Nischal 		.enable_reg = 0xb12c,
74178412c26SAmit Nischal 		.enable_mask = BIT(0),
74278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
74378412c26SAmit Nischal 			.name = "cam_cc_camnoc_atb_clk",
74478412c26SAmit Nischal 			.ops = &clk_branch2_ops,
74578412c26SAmit Nischal 		},
74678412c26SAmit Nischal 	},
74778412c26SAmit Nischal };
74878412c26SAmit Nischal 
74978412c26SAmit Nischal static struct clk_branch cam_cc_camnoc_axi_clk = {
75078412c26SAmit Nischal 	.halt_reg = 0xb124,
75178412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
75278412c26SAmit Nischal 	.clkr = {
75378412c26SAmit Nischal 		.enable_reg = 0xb124,
75478412c26SAmit Nischal 		.enable_mask = BIT(0),
75578412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
75678412c26SAmit Nischal 			.name = "cam_cc_camnoc_axi_clk",
75778412c26SAmit Nischal 			.ops = &clk_branch2_ops,
75878412c26SAmit Nischal 		},
75978412c26SAmit Nischal 	},
76078412c26SAmit Nischal };
76178412c26SAmit Nischal 
76278412c26SAmit Nischal static struct clk_branch cam_cc_cci_clk = {
76378412c26SAmit Nischal 	.halt_reg = 0xb0f0,
76478412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
76578412c26SAmit Nischal 	.clkr = {
76678412c26SAmit Nischal 		.enable_reg = 0xb0f0,
76778412c26SAmit Nischal 		.enable_mask = BIT(0),
76878412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
76978412c26SAmit Nischal 			.name = "cam_cc_cci_clk",
7700cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
7710cc3bd80SDmitry Baryshkov 				&cam_cc_cci_clk_src.clkr.hw,
77278412c26SAmit Nischal 			},
77378412c26SAmit Nischal 			.num_parents = 1,
77478412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
77578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
77678412c26SAmit Nischal 		},
77778412c26SAmit Nischal 	},
77878412c26SAmit Nischal };
77978412c26SAmit Nischal 
78078412c26SAmit Nischal static struct clk_branch cam_cc_cpas_ahb_clk = {
78178412c26SAmit Nischal 	.halt_reg = 0xb11c,
78278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
78378412c26SAmit Nischal 	.clkr = {
78478412c26SAmit Nischal 		.enable_reg = 0xb11c,
78578412c26SAmit Nischal 		.enable_mask = BIT(0),
78678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
78778412c26SAmit Nischal 			.name = "cam_cc_cpas_ahb_clk",
7880cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
7890cc3bd80SDmitry Baryshkov 				&cam_cc_slow_ahb_clk_src.clkr.hw,
79078412c26SAmit Nischal 			},
79178412c26SAmit Nischal 			.num_parents = 1,
79278412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
79378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
79478412c26SAmit Nischal 		},
79578412c26SAmit Nischal 	},
79678412c26SAmit Nischal };
79778412c26SAmit Nischal 
79878412c26SAmit Nischal static struct clk_branch cam_cc_csi0phytimer_clk = {
79978412c26SAmit Nischal 	.halt_reg = 0x501c,
80078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
80178412c26SAmit Nischal 	.clkr = {
80278412c26SAmit Nischal 		.enable_reg = 0x501c,
80378412c26SAmit Nischal 		.enable_mask = BIT(0),
80478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
80578412c26SAmit Nischal 			.name = "cam_cc_csi0phytimer_clk",
8060cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8070cc3bd80SDmitry Baryshkov 				&cam_cc_csi0phytimer_clk_src.clkr.hw,
80878412c26SAmit Nischal 			},
80978412c26SAmit Nischal 			.num_parents = 1,
81078412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
81178412c26SAmit Nischal 			.ops = &clk_branch2_ops,
81278412c26SAmit Nischal 		},
81378412c26SAmit Nischal 	},
81478412c26SAmit Nischal };
81578412c26SAmit Nischal 
81678412c26SAmit Nischal static struct clk_branch cam_cc_csi1phytimer_clk = {
81778412c26SAmit Nischal 	.halt_reg = 0x5040,
81878412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
81978412c26SAmit Nischal 	.clkr = {
82078412c26SAmit Nischal 		.enable_reg = 0x5040,
82178412c26SAmit Nischal 		.enable_mask = BIT(0),
82278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
82378412c26SAmit Nischal 			.name = "cam_cc_csi1phytimer_clk",
8240cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8250cc3bd80SDmitry Baryshkov 				&cam_cc_csi1phytimer_clk_src.clkr.hw,
82678412c26SAmit Nischal 			},
82778412c26SAmit Nischal 			.num_parents = 1,
82878412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
82978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
83078412c26SAmit Nischal 		},
83178412c26SAmit Nischal 	},
83278412c26SAmit Nischal };
83378412c26SAmit Nischal 
83478412c26SAmit Nischal static struct clk_branch cam_cc_csi2phytimer_clk = {
83578412c26SAmit Nischal 	.halt_reg = 0x5064,
83678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
83778412c26SAmit Nischal 	.clkr = {
83878412c26SAmit Nischal 		.enable_reg = 0x5064,
83978412c26SAmit Nischal 		.enable_mask = BIT(0),
84078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
84178412c26SAmit Nischal 			.name = "cam_cc_csi2phytimer_clk",
8420cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8430cc3bd80SDmitry Baryshkov 				&cam_cc_csi2phytimer_clk_src.clkr.hw,
84478412c26SAmit Nischal 			},
84578412c26SAmit Nischal 			.num_parents = 1,
84678412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
84778412c26SAmit Nischal 			.ops = &clk_branch2_ops,
84878412c26SAmit Nischal 		},
84978412c26SAmit Nischal 	},
85078412c26SAmit Nischal };
85178412c26SAmit Nischal 
85278412c26SAmit Nischal static struct clk_branch cam_cc_csi3phytimer_clk = {
85378412c26SAmit Nischal 	.halt_reg = 0x5088,
85478412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
85578412c26SAmit Nischal 	.clkr = {
85678412c26SAmit Nischal 		.enable_reg = 0x5088,
85778412c26SAmit Nischal 		.enable_mask = BIT(0),
85878412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
85978412c26SAmit Nischal 			.name = "cam_cc_csi3phytimer_clk",
8600cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8610cc3bd80SDmitry Baryshkov 				&cam_cc_csi3phytimer_clk_src.clkr.hw,
86278412c26SAmit Nischal 			},
86378412c26SAmit Nischal 			.num_parents = 1,
86478412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
86578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
86678412c26SAmit Nischal 		},
86778412c26SAmit Nischal 	},
86878412c26SAmit Nischal };
86978412c26SAmit Nischal 
87078412c26SAmit Nischal static struct clk_branch cam_cc_csiphy0_clk = {
87178412c26SAmit Nischal 	.halt_reg = 0x5020,
87278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
87378412c26SAmit Nischal 	.clkr = {
87478412c26SAmit Nischal 		.enable_reg = 0x5020,
87578412c26SAmit Nischal 		.enable_mask = BIT(0),
87678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
87778412c26SAmit Nischal 			.name = "cam_cc_csiphy0_clk",
8780cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8790cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
88078412c26SAmit Nischal 			},
88178412c26SAmit Nischal 			.num_parents = 1,
88278412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
88378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
88478412c26SAmit Nischal 		},
88578412c26SAmit Nischal 	},
88678412c26SAmit Nischal };
88778412c26SAmit Nischal 
88878412c26SAmit Nischal static struct clk_branch cam_cc_csiphy1_clk = {
88978412c26SAmit Nischal 	.halt_reg = 0x5044,
89078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
89178412c26SAmit Nischal 	.clkr = {
89278412c26SAmit Nischal 		.enable_reg = 0x5044,
89378412c26SAmit Nischal 		.enable_mask = BIT(0),
89478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
89578412c26SAmit Nischal 			.name = "cam_cc_csiphy1_clk",
8960cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
8970cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
89878412c26SAmit Nischal 			},
89978412c26SAmit Nischal 			.num_parents = 1,
90078412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
90178412c26SAmit Nischal 			.ops = &clk_branch2_ops,
90278412c26SAmit Nischal 		},
90378412c26SAmit Nischal 	},
90478412c26SAmit Nischal };
90578412c26SAmit Nischal 
90678412c26SAmit Nischal static struct clk_branch cam_cc_csiphy2_clk = {
90778412c26SAmit Nischal 	.halt_reg = 0x5068,
90878412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
90978412c26SAmit Nischal 	.clkr = {
91078412c26SAmit Nischal 		.enable_reg = 0x5068,
91178412c26SAmit Nischal 		.enable_mask = BIT(0),
91278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
91378412c26SAmit Nischal 			.name = "cam_cc_csiphy2_clk",
9140cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
9150cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
91678412c26SAmit Nischal 			},
91778412c26SAmit Nischal 			.num_parents = 1,
91878412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
91978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
92078412c26SAmit Nischal 		},
92178412c26SAmit Nischal 	},
92278412c26SAmit Nischal };
92378412c26SAmit Nischal 
92478412c26SAmit Nischal static struct clk_branch cam_cc_csiphy3_clk = {
92578412c26SAmit Nischal 	.halt_reg = 0x508c,
92678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
92778412c26SAmit Nischal 	.clkr = {
92878412c26SAmit Nischal 		.enable_reg = 0x508c,
92978412c26SAmit Nischal 		.enable_mask = BIT(0),
93078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
93178412c26SAmit Nischal 			.name = "cam_cc_csiphy3_clk",
9320cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
9330cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
93478412c26SAmit Nischal 			},
93578412c26SAmit Nischal 			.num_parents = 1,
93678412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
93778412c26SAmit Nischal 			.ops = &clk_branch2_ops,
93878412c26SAmit Nischal 		},
93978412c26SAmit Nischal 	},
94078412c26SAmit Nischal };
94178412c26SAmit Nischal 
94278412c26SAmit Nischal static struct clk_branch cam_cc_fd_core_clk = {
94378412c26SAmit Nischal 	.halt_reg = 0xb0c8,
94478412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
94578412c26SAmit Nischal 	.clkr = {
94678412c26SAmit Nischal 		.enable_reg = 0xb0c8,
94778412c26SAmit Nischal 		.enable_mask = BIT(0),
94878412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
94978412c26SAmit Nischal 			.name = "cam_cc_fd_core_clk",
9500cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
9510cc3bd80SDmitry Baryshkov 				&cam_cc_fd_core_clk_src.clkr.hw,
95278412c26SAmit Nischal 			},
95378412c26SAmit Nischal 			.num_parents = 1,
95478412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
95578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
95678412c26SAmit Nischal 		},
95778412c26SAmit Nischal 	},
95878412c26SAmit Nischal };
95978412c26SAmit Nischal 
96078412c26SAmit Nischal static struct clk_branch cam_cc_fd_core_uar_clk = {
96178412c26SAmit Nischal 	.halt_reg = 0xb0d0,
96278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
96378412c26SAmit Nischal 	.clkr = {
96478412c26SAmit Nischal 		.enable_reg = 0xb0d0,
96578412c26SAmit Nischal 		.enable_mask = BIT(0),
96678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
96778412c26SAmit Nischal 			.name = "cam_cc_fd_core_uar_clk",
9680cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
9690cc3bd80SDmitry Baryshkov 				&cam_cc_fd_core_clk_src.clkr.hw,
97078412c26SAmit Nischal 			},
97178412c26SAmit Nischal 			.num_parents = 1,
97278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
97378412c26SAmit Nischal 		},
97478412c26SAmit Nischal 	},
97578412c26SAmit Nischal };
97678412c26SAmit Nischal 
97778412c26SAmit Nischal static struct clk_branch cam_cc_icp_apb_clk = {
97878412c26SAmit Nischal 	.halt_reg = 0xb084,
97978412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
98078412c26SAmit Nischal 	.clkr = {
98178412c26SAmit Nischal 		.enable_reg = 0xb084,
98278412c26SAmit Nischal 		.enable_mask = BIT(0),
98378412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
98478412c26SAmit Nischal 			.name = "cam_cc_icp_apb_clk",
98578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
98678412c26SAmit Nischal 		},
98778412c26SAmit Nischal 	},
98878412c26SAmit Nischal };
98978412c26SAmit Nischal 
99078412c26SAmit Nischal static struct clk_branch cam_cc_icp_atb_clk = {
99178412c26SAmit Nischal 	.halt_reg = 0xb078,
99278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
99378412c26SAmit Nischal 	.clkr = {
99478412c26SAmit Nischal 		.enable_reg = 0xb078,
99578412c26SAmit Nischal 		.enable_mask = BIT(0),
99678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
99778412c26SAmit Nischal 			.name = "cam_cc_icp_atb_clk",
99878412c26SAmit Nischal 			.ops = &clk_branch2_ops,
99978412c26SAmit Nischal 		},
100078412c26SAmit Nischal 	},
100178412c26SAmit Nischal };
100278412c26SAmit Nischal 
100378412c26SAmit Nischal static struct clk_branch cam_cc_icp_clk = {
100478412c26SAmit Nischal 	.halt_reg = 0xb0a0,
100578412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
100678412c26SAmit Nischal 	.clkr = {
100778412c26SAmit Nischal 		.enable_reg = 0xb0a0,
100878412c26SAmit Nischal 		.enable_mask = BIT(0),
100978412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
101078412c26SAmit Nischal 			.name = "cam_cc_icp_clk",
10110cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
10120cc3bd80SDmitry Baryshkov 				&cam_cc_icp_clk_src.clkr.hw,
101378412c26SAmit Nischal 			},
101478412c26SAmit Nischal 			.num_parents = 1,
101578412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
101678412c26SAmit Nischal 			.ops = &clk_branch2_ops,
101778412c26SAmit Nischal 		},
101878412c26SAmit Nischal 	},
101978412c26SAmit Nischal };
102078412c26SAmit Nischal 
102178412c26SAmit Nischal static struct clk_branch cam_cc_icp_cti_clk = {
102278412c26SAmit Nischal 	.halt_reg = 0xb07c,
102378412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
102478412c26SAmit Nischal 	.clkr = {
102578412c26SAmit Nischal 		.enable_reg = 0xb07c,
102678412c26SAmit Nischal 		.enable_mask = BIT(0),
102778412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
102878412c26SAmit Nischal 			.name = "cam_cc_icp_cti_clk",
102978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
103078412c26SAmit Nischal 		},
103178412c26SAmit Nischal 	},
103278412c26SAmit Nischal };
103378412c26SAmit Nischal 
103478412c26SAmit Nischal static struct clk_branch cam_cc_icp_ts_clk = {
103578412c26SAmit Nischal 	.halt_reg = 0xb080,
103678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
103778412c26SAmit Nischal 	.clkr = {
103878412c26SAmit Nischal 		.enable_reg = 0xb080,
103978412c26SAmit Nischal 		.enable_mask = BIT(0),
104078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
104178412c26SAmit Nischal 			.name = "cam_cc_icp_ts_clk",
104278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
104378412c26SAmit Nischal 		},
104478412c26SAmit Nischal 	},
104578412c26SAmit Nischal };
104678412c26SAmit Nischal 
104778412c26SAmit Nischal static struct clk_branch cam_cc_ife_0_axi_clk = {
104878412c26SAmit Nischal 	.halt_reg = 0x907c,
104978412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
105078412c26SAmit Nischal 	.clkr = {
105178412c26SAmit Nischal 		.enable_reg = 0x907c,
105278412c26SAmit Nischal 		.enable_mask = BIT(0),
105378412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
105478412c26SAmit Nischal 			.name = "cam_cc_ife_0_axi_clk",
105578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
105678412c26SAmit Nischal 		},
105778412c26SAmit Nischal 	},
105878412c26SAmit Nischal };
105978412c26SAmit Nischal 
106078412c26SAmit Nischal static struct clk_branch cam_cc_ife_0_clk = {
106178412c26SAmit Nischal 	.halt_reg = 0x9024,
106278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
106378412c26SAmit Nischal 	.clkr = {
106478412c26SAmit Nischal 		.enable_reg = 0x9024,
106578412c26SAmit Nischal 		.enable_mask = BIT(0),
106678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
106778412c26SAmit Nischal 			.name = "cam_cc_ife_0_clk",
10680cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
10690cc3bd80SDmitry Baryshkov 				&cam_cc_ife_0_clk_src.clkr.hw,
107078412c26SAmit Nischal 			},
107178412c26SAmit Nischal 			.num_parents = 1,
107278412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
107378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
107478412c26SAmit Nischal 		},
107578412c26SAmit Nischal 	},
107678412c26SAmit Nischal };
107778412c26SAmit Nischal 
107878412c26SAmit Nischal static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
107978412c26SAmit Nischal 	.halt_reg = 0x9078,
108078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
108178412c26SAmit Nischal 	.clkr = {
108278412c26SAmit Nischal 		.enable_reg = 0x9078,
108378412c26SAmit Nischal 		.enable_mask = BIT(0),
108478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
108578412c26SAmit Nischal 			.name = "cam_cc_ife_0_cphy_rx_clk",
10860cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
10870cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
108878412c26SAmit Nischal 			},
108978412c26SAmit Nischal 			.num_parents = 1,
109078412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
109178412c26SAmit Nischal 			.ops = &clk_branch2_ops,
109278412c26SAmit Nischal 		},
109378412c26SAmit Nischal 	},
109478412c26SAmit Nischal };
109578412c26SAmit Nischal 
109678412c26SAmit Nischal static struct clk_branch cam_cc_ife_0_csid_clk = {
109778412c26SAmit Nischal 	.halt_reg = 0x9050,
109878412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
109978412c26SAmit Nischal 	.clkr = {
110078412c26SAmit Nischal 		.enable_reg = 0x9050,
110178412c26SAmit Nischal 		.enable_mask = BIT(0),
110278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
110378412c26SAmit Nischal 			.name = "cam_cc_ife_0_csid_clk",
11040cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
11050cc3bd80SDmitry Baryshkov 				&cam_cc_ife_0_csid_clk_src.clkr.hw,
110678412c26SAmit Nischal 			},
110778412c26SAmit Nischal 			.num_parents = 1,
110878412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
110978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
111078412c26SAmit Nischal 		},
111178412c26SAmit Nischal 	},
111278412c26SAmit Nischal };
111378412c26SAmit Nischal 
111478412c26SAmit Nischal static struct clk_branch cam_cc_ife_0_dsp_clk = {
111578412c26SAmit Nischal 	.halt_reg = 0x9034,
111678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
111778412c26SAmit Nischal 	.clkr = {
111878412c26SAmit Nischal 		.enable_reg = 0x9034,
111978412c26SAmit Nischal 		.enable_mask = BIT(0),
112078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
112178412c26SAmit Nischal 			.name = "cam_cc_ife_0_dsp_clk",
11220cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
11230cc3bd80SDmitry Baryshkov 				&cam_cc_ife_0_clk_src.clkr.hw,
112478412c26SAmit Nischal 			},
112578412c26SAmit Nischal 			.num_parents = 1,
112678412c26SAmit Nischal 			.ops = &clk_branch2_ops,
112778412c26SAmit Nischal 		},
112878412c26SAmit Nischal 	},
112978412c26SAmit Nischal };
113078412c26SAmit Nischal 
113178412c26SAmit Nischal static struct clk_branch cam_cc_ife_1_axi_clk = {
113278412c26SAmit Nischal 	.halt_reg = 0xa054,
113378412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
113478412c26SAmit Nischal 	.clkr = {
113578412c26SAmit Nischal 		.enable_reg = 0xa054,
113678412c26SAmit Nischal 		.enable_mask = BIT(0),
113778412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
113878412c26SAmit Nischal 			.name = "cam_cc_ife_1_axi_clk",
113978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
114078412c26SAmit Nischal 		},
114178412c26SAmit Nischal 	},
114278412c26SAmit Nischal };
114378412c26SAmit Nischal 
114478412c26SAmit Nischal static struct clk_branch cam_cc_ife_1_clk = {
114578412c26SAmit Nischal 	.halt_reg = 0xa024,
114678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
114778412c26SAmit Nischal 	.clkr = {
114878412c26SAmit Nischal 		.enable_reg = 0xa024,
114978412c26SAmit Nischal 		.enable_mask = BIT(0),
115078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
115178412c26SAmit Nischal 			.name = "cam_cc_ife_1_clk",
11520cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
11530cc3bd80SDmitry Baryshkov 				&cam_cc_ife_1_clk_src.clkr.hw,
115478412c26SAmit Nischal 			},
115578412c26SAmit Nischal 			.num_parents = 1,
115678412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
115778412c26SAmit Nischal 			.ops = &clk_branch2_ops,
115878412c26SAmit Nischal 		},
115978412c26SAmit Nischal 	},
116078412c26SAmit Nischal };
116178412c26SAmit Nischal 
116278412c26SAmit Nischal static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
116378412c26SAmit Nischal 	.halt_reg = 0xa050,
116478412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
116578412c26SAmit Nischal 	.clkr = {
116678412c26SAmit Nischal 		.enable_reg = 0xa050,
116778412c26SAmit Nischal 		.enable_mask = BIT(0),
116878412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
116978412c26SAmit Nischal 			.name = "cam_cc_ife_1_cphy_rx_clk",
11700cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
11710cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
117278412c26SAmit Nischal 			},
117378412c26SAmit Nischal 			.num_parents = 1,
117478412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
117578412c26SAmit Nischal 			.ops = &clk_branch2_ops,
117678412c26SAmit Nischal 		},
117778412c26SAmit Nischal 	},
117878412c26SAmit Nischal };
117978412c26SAmit Nischal 
118078412c26SAmit Nischal static struct clk_branch cam_cc_ife_1_csid_clk = {
118178412c26SAmit Nischal 	.halt_reg = 0xa048,
118278412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
118378412c26SAmit Nischal 	.clkr = {
118478412c26SAmit Nischal 		.enable_reg = 0xa048,
118578412c26SAmit Nischal 		.enable_mask = BIT(0),
118678412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
118778412c26SAmit Nischal 			.name = "cam_cc_ife_1_csid_clk",
11880cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
11890cc3bd80SDmitry Baryshkov 				&cam_cc_ife_1_csid_clk_src.clkr.hw,
119078412c26SAmit Nischal 			},
119178412c26SAmit Nischal 			.num_parents = 1,
119278412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
119378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
119478412c26SAmit Nischal 		},
119578412c26SAmit Nischal 	},
119678412c26SAmit Nischal };
119778412c26SAmit Nischal 
119878412c26SAmit Nischal static struct clk_branch cam_cc_ife_1_dsp_clk = {
119978412c26SAmit Nischal 	.halt_reg = 0xa02c,
120078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
120178412c26SAmit Nischal 	.clkr = {
120278412c26SAmit Nischal 		.enable_reg = 0xa02c,
120378412c26SAmit Nischal 		.enable_mask = BIT(0),
120478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
120578412c26SAmit Nischal 			.name = "cam_cc_ife_1_dsp_clk",
12060cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12070cc3bd80SDmitry Baryshkov 				&cam_cc_ife_1_clk_src.clkr.hw,
120878412c26SAmit Nischal 			},
120978412c26SAmit Nischal 			.num_parents = 1,
121078412c26SAmit Nischal 			.ops = &clk_branch2_ops,
121178412c26SAmit Nischal 		},
121278412c26SAmit Nischal 	},
121378412c26SAmit Nischal };
121478412c26SAmit Nischal 
121578412c26SAmit Nischal static struct clk_branch cam_cc_ife_lite_clk = {
121678412c26SAmit Nischal 	.halt_reg = 0xb01c,
121778412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
121878412c26SAmit Nischal 	.clkr = {
121978412c26SAmit Nischal 		.enable_reg = 0xb01c,
122078412c26SAmit Nischal 		.enable_mask = BIT(0),
122178412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
122278412c26SAmit Nischal 			.name = "cam_cc_ife_lite_clk",
12230cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12240cc3bd80SDmitry Baryshkov 				&cam_cc_ife_lite_clk_src.clkr.hw,
122578412c26SAmit Nischal 			},
122678412c26SAmit Nischal 			.num_parents = 1,
122778412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
122878412c26SAmit Nischal 			.ops = &clk_branch2_ops,
122978412c26SAmit Nischal 		},
123078412c26SAmit Nischal 	},
123178412c26SAmit Nischal };
123278412c26SAmit Nischal 
123378412c26SAmit Nischal static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
123478412c26SAmit Nischal 	.halt_reg = 0xb044,
123578412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
123678412c26SAmit Nischal 	.clkr = {
123778412c26SAmit Nischal 		.enable_reg = 0xb044,
123878412c26SAmit Nischal 		.enable_mask = BIT(0),
123978412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
124078412c26SAmit Nischal 			.name = "cam_cc_ife_lite_cphy_rx_clk",
12410cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12420cc3bd80SDmitry Baryshkov 				&cam_cc_cphy_rx_clk_src.clkr.hw,
124378412c26SAmit Nischal 			},
124478412c26SAmit Nischal 			.num_parents = 1,
124578412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
124678412c26SAmit Nischal 			.ops = &clk_branch2_ops,
124778412c26SAmit Nischal 		},
124878412c26SAmit Nischal 	},
124978412c26SAmit Nischal };
125078412c26SAmit Nischal 
125178412c26SAmit Nischal static struct clk_branch cam_cc_ife_lite_csid_clk = {
125278412c26SAmit Nischal 	.halt_reg = 0xb03c,
125378412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
125478412c26SAmit Nischal 	.clkr = {
125578412c26SAmit Nischal 		.enable_reg = 0xb03c,
125678412c26SAmit Nischal 		.enable_mask = BIT(0),
125778412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
125878412c26SAmit Nischal 			.name = "cam_cc_ife_lite_csid_clk",
12590cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12600cc3bd80SDmitry Baryshkov 				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
126178412c26SAmit Nischal 			},
126278412c26SAmit Nischal 			.num_parents = 1,
126378412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
126478412c26SAmit Nischal 			.ops = &clk_branch2_ops,
126578412c26SAmit Nischal 		},
126678412c26SAmit Nischal 	},
126778412c26SAmit Nischal };
126878412c26SAmit Nischal 
126978412c26SAmit Nischal static struct clk_branch cam_cc_ipe_0_ahb_clk = {
127078412c26SAmit Nischal 	.halt_reg = 0x703c,
127178412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
127278412c26SAmit Nischal 	.clkr = {
127378412c26SAmit Nischal 		.enable_reg = 0x703c,
127478412c26SAmit Nischal 		.enable_mask = BIT(0),
127578412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
127678412c26SAmit Nischal 			.name = "cam_cc_ipe_0_ahb_clk",
12770cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12780cc3bd80SDmitry Baryshkov 				&cam_cc_slow_ahb_clk_src.clkr.hw,
127978412c26SAmit Nischal 			},
128078412c26SAmit Nischal 			.num_parents = 1,
128178412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
128278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
128378412c26SAmit Nischal 		},
128478412c26SAmit Nischal 	},
128578412c26SAmit Nischal };
128678412c26SAmit Nischal 
128778412c26SAmit Nischal static struct clk_branch cam_cc_ipe_0_areg_clk = {
128878412c26SAmit Nischal 	.halt_reg = 0x7038,
128978412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
129078412c26SAmit Nischal 	.clkr = {
129178412c26SAmit Nischal 		.enable_reg = 0x7038,
129278412c26SAmit Nischal 		.enable_mask = BIT(0),
129378412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
129478412c26SAmit Nischal 			.name = "cam_cc_ipe_0_areg_clk",
12950cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
12960cc3bd80SDmitry Baryshkov 				&cam_cc_fast_ahb_clk_src.clkr.hw,
129778412c26SAmit Nischal 			},
129878412c26SAmit Nischal 			.num_parents = 1,
129978412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
130078412c26SAmit Nischal 			.ops = &clk_branch2_ops,
130178412c26SAmit Nischal 		},
130278412c26SAmit Nischal 	},
130378412c26SAmit Nischal };
130478412c26SAmit Nischal 
130578412c26SAmit Nischal static struct clk_branch cam_cc_ipe_0_axi_clk = {
130678412c26SAmit Nischal 	.halt_reg = 0x7034,
130778412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
130878412c26SAmit Nischal 	.clkr = {
130978412c26SAmit Nischal 		.enable_reg = 0x7034,
131078412c26SAmit Nischal 		.enable_mask = BIT(0),
131178412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
131278412c26SAmit Nischal 			.name = "cam_cc_ipe_0_axi_clk",
131378412c26SAmit Nischal 			.ops = &clk_branch2_ops,
131478412c26SAmit Nischal 		},
131578412c26SAmit Nischal 	},
131678412c26SAmit Nischal };
131778412c26SAmit Nischal 
131878412c26SAmit Nischal static struct clk_branch cam_cc_ipe_0_clk = {
131978412c26SAmit Nischal 	.halt_reg = 0x7024,
132078412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
132178412c26SAmit Nischal 	.clkr = {
132278412c26SAmit Nischal 		.enable_reg = 0x7024,
132378412c26SAmit Nischal 		.enable_mask = BIT(0),
132478412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
132578412c26SAmit Nischal 			.name = "cam_cc_ipe_0_clk",
13260cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
13270cc3bd80SDmitry Baryshkov 				&cam_cc_ipe_0_clk_src.clkr.hw,
132878412c26SAmit Nischal 			},
132978412c26SAmit Nischal 			.num_parents = 1,
133078412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
133178412c26SAmit Nischal 			.ops = &clk_branch2_ops,
133278412c26SAmit Nischal 		},
133378412c26SAmit Nischal 	},
133478412c26SAmit Nischal };
133578412c26SAmit Nischal 
133678412c26SAmit Nischal static struct clk_branch cam_cc_ipe_1_ahb_clk = {
133778412c26SAmit Nischal 	.halt_reg = 0x803c,
133878412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
133978412c26SAmit Nischal 	.clkr = {
134078412c26SAmit Nischal 		.enable_reg = 0x803c,
134178412c26SAmit Nischal 		.enable_mask = BIT(0),
134278412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
134378412c26SAmit Nischal 			.name = "cam_cc_ipe_1_ahb_clk",
13440cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
13450cc3bd80SDmitry Baryshkov 				&cam_cc_slow_ahb_clk_src.clkr.hw,
134678412c26SAmit Nischal 			},
134778412c26SAmit Nischal 			.num_parents = 1,
134878412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
134978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
135078412c26SAmit Nischal 		},
135178412c26SAmit Nischal 	},
135278412c26SAmit Nischal };
135378412c26SAmit Nischal 
135478412c26SAmit Nischal static struct clk_branch cam_cc_ipe_1_areg_clk = {
135578412c26SAmit Nischal 	.halt_reg = 0x8038,
135678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
135778412c26SAmit Nischal 	.clkr = {
135878412c26SAmit Nischal 		.enable_reg = 0x8038,
135978412c26SAmit Nischal 		.enable_mask = BIT(0),
136078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
136178412c26SAmit Nischal 			.name = "cam_cc_ipe_1_areg_clk",
13620cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
13630cc3bd80SDmitry Baryshkov 				&cam_cc_fast_ahb_clk_src.clkr.hw,
136478412c26SAmit Nischal 			},
136578412c26SAmit Nischal 			.num_parents = 1,
136678412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
136778412c26SAmit Nischal 			.ops = &clk_branch2_ops,
136878412c26SAmit Nischal 		},
136978412c26SAmit Nischal 	},
137078412c26SAmit Nischal };
137178412c26SAmit Nischal 
137278412c26SAmit Nischal static struct clk_branch cam_cc_ipe_1_axi_clk = {
137378412c26SAmit Nischal 	.halt_reg = 0x8034,
137478412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
137578412c26SAmit Nischal 	.clkr = {
137678412c26SAmit Nischal 		.enable_reg = 0x8034,
137778412c26SAmit Nischal 		.enable_mask = BIT(0),
137878412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
137978412c26SAmit Nischal 			.name = "cam_cc_ipe_1_axi_clk",
138078412c26SAmit Nischal 			.ops = &clk_branch2_ops,
138178412c26SAmit Nischal 		},
138278412c26SAmit Nischal 	},
138378412c26SAmit Nischal };
138478412c26SAmit Nischal 
138578412c26SAmit Nischal static struct clk_branch cam_cc_ipe_1_clk = {
138678412c26SAmit Nischal 	.halt_reg = 0x8024,
138778412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
138878412c26SAmit Nischal 	.clkr = {
138978412c26SAmit Nischal 		.enable_reg = 0x8024,
139078412c26SAmit Nischal 		.enable_mask = BIT(0),
139178412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
139278412c26SAmit Nischal 			.name = "cam_cc_ipe_1_clk",
13930cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
13940cc3bd80SDmitry Baryshkov 				&cam_cc_ipe_1_clk_src.clkr.hw,
139578412c26SAmit Nischal 			},
139678412c26SAmit Nischal 			.num_parents = 1,
139778412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
139878412c26SAmit Nischal 			.ops = &clk_branch2_ops,
139978412c26SAmit Nischal 		},
140078412c26SAmit Nischal 	},
140178412c26SAmit Nischal };
140278412c26SAmit Nischal 
140378412c26SAmit Nischal static struct clk_branch cam_cc_jpeg_clk = {
140478412c26SAmit Nischal 	.halt_reg = 0xb064,
140578412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
140678412c26SAmit Nischal 	.clkr = {
140778412c26SAmit Nischal 		.enable_reg = 0xb064,
140878412c26SAmit Nischal 		.enable_mask = BIT(0),
140978412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
141078412c26SAmit Nischal 			.name = "cam_cc_jpeg_clk",
14110cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
14120cc3bd80SDmitry Baryshkov 				&cam_cc_jpeg_clk_src.clkr.hw,
141378412c26SAmit Nischal 			},
141478412c26SAmit Nischal 			.num_parents = 1,
141578412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
141678412c26SAmit Nischal 			.ops = &clk_branch2_ops,
141778412c26SAmit Nischal 		},
141878412c26SAmit Nischal 	},
141978412c26SAmit Nischal };
142078412c26SAmit Nischal 
142178412c26SAmit Nischal static struct clk_branch cam_cc_lrme_clk = {
142278412c26SAmit Nischal 	.halt_reg = 0xb110,
142378412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
142478412c26SAmit Nischal 	.clkr = {
142578412c26SAmit Nischal 		.enable_reg = 0xb110,
142678412c26SAmit Nischal 		.enable_mask = BIT(0),
142778412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
142878412c26SAmit Nischal 			.name = "cam_cc_lrme_clk",
14290cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
14300cc3bd80SDmitry Baryshkov 				&cam_cc_lrme_clk_src.clkr.hw,
143178412c26SAmit Nischal 			},
143278412c26SAmit Nischal 			.num_parents = 1,
143378412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
143478412c26SAmit Nischal 			.ops = &clk_branch2_ops,
143578412c26SAmit Nischal 		},
143678412c26SAmit Nischal 	},
143778412c26SAmit Nischal };
143878412c26SAmit Nischal 
143978412c26SAmit Nischal static struct clk_branch cam_cc_mclk0_clk = {
144078412c26SAmit Nischal 	.halt_reg = 0x401c,
144178412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
144278412c26SAmit Nischal 	.clkr = {
144378412c26SAmit Nischal 		.enable_reg = 0x401c,
144478412c26SAmit Nischal 		.enable_mask = BIT(0),
144578412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
144678412c26SAmit Nischal 			.name = "cam_cc_mclk0_clk",
14470cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
14480cc3bd80SDmitry Baryshkov 				&cam_cc_mclk0_clk_src.clkr.hw,
144978412c26SAmit Nischal 			},
145078412c26SAmit Nischal 			.num_parents = 1,
145178412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
145278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
145378412c26SAmit Nischal 		},
145478412c26SAmit Nischal 	},
145578412c26SAmit Nischal };
145678412c26SAmit Nischal 
145778412c26SAmit Nischal static struct clk_branch cam_cc_mclk1_clk = {
145878412c26SAmit Nischal 	.halt_reg = 0x403c,
145978412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
146078412c26SAmit Nischal 	.clkr = {
146178412c26SAmit Nischal 		.enable_reg = 0x403c,
146278412c26SAmit Nischal 		.enable_mask = BIT(0),
146378412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
146478412c26SAmit Nischal 			.name = "cam_cc_mclk1_clk",
14650cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
14660cc3bd80SDmitry Baryshkov 				&cam_cc_mclk1_clk_src.clkr.hw,
146778412c26SAmit Nischal 			},
146878412c26SAmit Nischal 			.num_parents = 1,
146978412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
147078412c26SAmit Nischal 			.ops = &clk_branch2_ops,
147178412c26SAmit Nischal 		},
147278412c26SAmit Nischal 	},
147378412c26SAmit Nischal };
147478412c26SAmit Nischal 
147578412c26SAmit Nischal static struct clk_branch cam_cc_mclk2_clk = {
147678412c26SAmit Nischal 	.halt_reg = 0x405c,
147778412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
147878412c26SAmit Nischal 	.clkr = {
147978412c26SAmit Nischal 		.enable_reg = 0x405c,
148078412c26SAmit Nischal 		.enable_mask = BIT(0),
148178412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
148278412c26SAmit Nischal 			.name = "cam_cc_mclk2_clk",
14830cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
14840cc3bd80SDmitry Baryshkov 				&cam_cc_mclk2_clk_src.clkr.hw,
148578412c26SAmit Nischal 			},
148678412c26SAmit Nischal 			.num_parents = 1,
148778412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
148878412c26SAmit Nischal 			.ops = &clk_branch2_ops,
148978412c26SAmit Nischal 		},
149078412c26SAmit Nischal 	},
149178412c26SAmit Nischal };
149278412c26SAmit Nischal 
149378412c26SAmit Nischal static struct clk_branch cam_cc_mclk3_clk = {
149478412c26SAmit Nischal 	.halt_reg = 0x407c,
149578412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
149678412c26SAmit Nischal 	.clkr = {
149778412c26SAmit Nischal 		.enable_reg = 0x407c,
149878412c26SAmit Nischal 		.enable_mask = BIT(0),
149978412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
150078412c26SAmit Nischal 			.name = "cam_cc_mclk3_clk",
15010cc3bd80SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
15020cc3bd80SDmitry Baryshkov 				&cam_cc_mclk3_clk_src.clkr.hw,
150378412c26SAmit Nischal 			},
150478412c26SAmit Nischal 			.num_parents = 1,
150578412c26SAmit Nischal 			.flags = CLK_SET_RATE_PARENT,
150678412c26SAmit Nischal 			.ops = &clk_branch2_ops,
150778412c26SAmit Nischal 		},
150878412c26SAmit Nischal 	},
150978412c26SAmit Nischal };
151078412c26SAmit Nischal 
151178412c26SAmit Nischal static struct clk_branch cam_cc_soc_ahb_clk = {
151278412c26SAmit Nischal 	.halt_reg = 0xb13c,
151378412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
151478412c26SAmit Nischal 	.clkr = {
151578412c26SAmit Nischal 		.enable_reg = 0xb13c,
151678412c26SAmit Nischal 		.enable_mask = BIT(0),
151778412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
151878412c26SAmit Nischal 			.name = "cam_cc_soc_ahb_clk",
151978412c26SAmit Nischal 			.ops = &clk_branch2_ops,
152078412c26SAmit Nischal 		},
152178412c26SAmit Nischal 	},
152278412c26SAmit Nischal };
152378412c26SAmit Nischal 
152478412c26SAmit Nischal static struct clk_branch cam_cc_sys_tmr_clk = {
152578412c26SAmit Nischal 	.halt_reg = 0xb0a8,
152678412c26SAmit Nischal 	.halt_check = BRANCH_HALT,
152778412c26SAmit Nischal 	.clkr = {
152878412c26SAmit Nischal 		.enable_reg = 0xb0a8,
152978412c26SAmit Nischal 		.enable_mask = BIT(0),
153078412c26SAmit Nischal 		.hw.init = &(struct clk_init_data){
153178412c26SAmit Nischal 			.name = "cam_cc_sys_tmr_clk",
153278412c26SAmit Nischal 			.ops = &clk_branch2_ops,
153378412c26SAmit Nischal 		},
153478412c26SAmit Nischal 	},
153578412c26SAmit Nischal };
153678412c26SAmit Nischal 
1537*103dd233SVladimir Zapolskiy static struct gdsc titan_top_gdsc;
1538*103dd233SVladimir Zapolskiy 
153978412c26SAmit Nischal static struct gdsc bps_gdsc = {
154078412c26SAmit Nischal 	.gdscr = 0x6004,
154178412c26SAmit Nischal 	.pd = {
154278412c26SAmit Nischal 		.name = "bps_gdsc",
154378412c26SAmit Nischal 	},
154478412c26SAmit Nischal 	.flags = HW_CTRL | POLL_CFG_GDSCR,
154578412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
154678412c26SAmit Nischal };
154778412c26SAmit Nischal 
154878412c26SAmit Nischal static struct gdsc ipe_0_gdsc = {
154978412c26SAmit Nischal 	.gdscr = 0x7004,
155078412c26SAmit Nischal 	.pd = {
155178412c26SAmit Nischal 		.name = "ipe_0_gdsc",
155278412c26SAmit Nischal 	},
155378412c26SAmit Nischal 	.flags = HW_CTRL | POLL_CFG_GDSCR,
155478412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
155578412c26SAmit Nischal };
155678412c26SAmit Nischal 
155778412c26SAmit Nischal static struct gdsc ipe_1_gdsc = {
155878412c26SAmit Nischal 	.gdscr = 0x8004,
155978412c26SAmit Nischal 	.pd = {
156078412c26SAmit Nischal 		.name = "ipe_1_gdsc",
156178412c26SAmit Nischal 	},
156278412c26SAmit Nischal 	.flags = HW_CTRL | POLL_CFG_GDSCR,
156378412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
156478412c26SAmit Nischal };
156578412c26SAmit Nischal 
156678412c26SAmit Nischal static struct gdsc ife_0_gdsc = {
156778412c26SAmit Nischal 	.gdscr = 0x9004,
156878412c26SAmit Nischal 	.pd = {
156978412c26SAmit Nischal 		.name = "ife_0_gdsc",
157078412c26SAmit Nischal 	},
157178412c26SAmit Nischal 	.flags = POLL_CFG_GDSCR,
1572*103dd233SVladimir Zapolskiy 	.parent = &titan_top_gdsc.pd,
157378412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
157478412c26SAmit Nischal };
157578412c26SAmit Nischal 
157678412c26SAmit Nischal static struct gdsc ife_1_gdsc = {
157778412c26SAmit Nischal 	.gdscr = 0xa004,
157878412c26SAmit Nischal 	.pd = {
157978412c26SAmit Nischal 		.name = "ife_1_gdsc",
158078412c26SAmit Nischal 	},
158178412c26SAmit Nischal 	.flags = POLL_CFG_GDSCR,
1582*103dd233SVladimir Zapolskiy 	.parent = &titan_top_gdsc.pd,
158378412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
158478412c26SAmit Nischal };
158578412c26SAmit Nischal 
158678412c26SAmit Nischal static struct gdsc titan_top_gdsc = {
158778412c26SAmit Nischal 	.gdscr = 0xb134,
158878412c26SAmit Nischal 	.pd = {
158978412c26SAmit Nischal 		.name = "titan_top_gdsc",
159078412c26SAmit Nischal 	},
159178412c26SAmit Nischal 	.flags = POLL_CFG_GDSCR,
159278412c26SAmit Nischal 	.pwrsts = PWRSTS_OFF_ON,
159378412c26SAmit Nischal };
159478412c26SAmit Nischal 
159578412c26SAmit Nischal static struct clk_regmap *cam_cc_sdm845_clocks[] = {
159678412c26SAmit Nischal 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
159778412c26SAmit Nischal 	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
159878412c26SAmit Nischal 	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
159978412c26SAmit Nischal 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
160078412c26SAmit Nischal 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
160178412c26SAmit Nischal 	[CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
160278412c26SAmit Nischal 	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
160378412c26SAmit Nischal 	[CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
160478412c26SAmit Nischal 	[CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
160578412c26SAmit Nischal 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
160678412c26SAmit Nischal 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
160778412c26SAmit Nischal 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
160878412c26SAmit Nischal 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
160978412c26SAmit Nischal 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
161078412c26SAmit Nischal 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
161178412c26SAmit Nischal 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
161278412c26SAmit Nischal 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
161378412c26SAmit Nischal 	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
161478412c26SAmit Nischal 	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
161578412c26SAmit Nischal 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
161678412c26SAmit Nischal 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
161778412c26SAmit Nischal 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
161878412c26SAmit Nischal 	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
161978412c26SAmit Nischal 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
162078412c26SAmit Nischal 	[CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
162178412c26SAmit Nischal 	[CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
162278412c26SAmit Nischal 	[CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
162378412c26SAmit Nischal 	[CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
162478412c26SAmit Nischal 	[CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
162578412c26SAmit Nischal 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
162678412c26SAmit Nischal 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
162778412c26SAmit Nischal 	[CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
162878412c26SAmit Nischal 	[CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
162978412c26SAmit Nischal 	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
163078412c26SAmit Nischal 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
163178412c26SAmit Nischal 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
163278412c26SAmit Nischal 	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
163378412c26SAmit Nischal 	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
163478412c26SAmit Nischal 	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
163578412c26SAmit Nischal 	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
163678412c26SAmit Nischal 	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
163778412c26SAmit Nischal 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
163878412c26SAmit Nischal 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
163978412c26SAmit Nischal 	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
164078412c26SAmit Nischal 	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
164178412c26SAmit Nischal 	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
164278412c26SAmit Nischal 	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
164378412c26SAmit Nischal 	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
164478412c26SAmit Nischal 	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
164578412c26SAmit Nischal 	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
164678412c26SAmit Nischal 	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
164778412c26SAmit Nischal 	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
164878412c26SAmit Nischal 	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
164978412c26SAmit Nischal 	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
165078412c26SAmit Nischal 	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
165178412c26SAmit Nischal 	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
165278412c26SAmit Nischal 	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
165378412c26SAmit Nischal 	[CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
165478412c26SAmit Nischal 	[CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
165578412c26SAmit Nischal 	[CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
165678412c26SAmit Nischal 	[CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
165778412c26SAmit Nischal 	[CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
165878412c26SAmit Nischal 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
165978412c26SAmit Nischal 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
166078412c26SAmit Nischal 	[CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
166178412c26SAmit Nischal 	[CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
166278412c26SAmit Nischal 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
166378412c26SAmit Nischal 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
166478412c26SAmit Nischal 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
166578412c26SAmit Nischal 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
166678412c26SAmit Nischal 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
166778412c26SAmit Nischal 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
166878412c26SAmit Nischal 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
166978412c26SAmit Nischal 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
167078412c26SAmit Nischal 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
167178412c26SAmit Nischal 	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
167278412c26SAmit Nischal 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
167378412c26SAmit Nischal 	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
167478412c26SAmit Nischal 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
167578412c26SAmit Nischal 	[CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
167678412c26SAmit Nischal 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
167778412c26SAmit Nischal 	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
167878412c26SAmit Nischal 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
167978412c26SAmit Nischal 	[CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
168078412c26SAmit Nischal 	[CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
168178412c26SAmit Nischal };
168278412c26SAmit Nischal 
168378412c26SAmit Nischal static struct gdsc *cam_cc_sdm845_gdscs[] = {
168478412c26SAmit Nischal 	[BPS_GDSC] = &bps_gdsc,
168578412c26SAmit Nischal 	[IPE_0_GDSC] = &ipe_0_gdsc,
168678412c26SAmit Nischal 	[IPE_1_GDSC] = &ipe_1_gdsc,
168778412c26SAmit Nischal 	[IFE_0_GDSC] = &ife_0_gdsc,
168878412c26SAmit Nischal 	[IFE_1_GDSC] = &ife_1_gdsc,
168978412c26SAmit Nischal 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
169078412c26SAmit Nischal };
169178412c26SAmit Nischal 
169278412c26SAmit Nischal static const struct regmap_config cam_cc_sdm845_regmap_config = {
169378412c26SAmit Nischal 	.reg_bits	= 32,
169478412c26SAmit Nischal 	.reg_stride	= 4,
169578412c26SAmit Nischal 	.val_bits	= 32,
169678412c26SAmit Nischal 	.max_register	= 0xd004,
169778412c26SAmit Nischal 	.fast_io	= true,
169878412c26SAmit Nischal };
169978412c26SAmit Nischal 
170078412c26SAmit Nischal static const struct qcom_cc_desc cam_cc_sdm845_desc = {
170178412c26SAmit Nischal 	.config = &cam_cc_sdm845_regmap_config,
170278412c26SAmit Nischal 	.clks = cam_cc_sdm845_clocks,
170378412c26SAmit Nischal 	.num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
170478412c26SAmit Nischal 	.gdscs = cam_cc_sdm845_gdscs,
170578412c26SAmit Nischal 	.num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
170678412c26SAmit Nischal };
170778412c26SAmit Nischal 
170878412c26SAmit Nischal static const struct of_device_id cam_cc_sdm845_match_table[] = {
170978412c26SAmit Nischal 	{ .compatible = "qcom,sdm845-camcc" },
171078412c26SAmit Nischal 	{ }
171178412c26SAmit Nischal };
171278412c26SAmit Nischal MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
171378412c26SAmit Nischal 
cam_cc_sdm845_probe(struct platform_device * pdev)171478412c26SAmit Nischal static int cam_cc_sdm845_probe(struct platform_device *pdev)
171578412c26SAmit Nischal {
171678412c26SAmit Nischal 	struct regmap *regmap;
171778412c26SAmit Nischal 	struct alpha_pll_config cam_cc_pll_config = { };
171878412c26SAmit Nischal 
171978412c26SAmit Nischal 	regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
172078412c26SAmit Nischal 	if (IS_ERR(regmap))
172178412c26SAmit Nischal 		return PTR_ERR(regmap);
172278412c26SAmit Nischal 
172378412c26SAmit Nischal 	cam_cc_pll_config.l = 0x1f;
172478412c26SAmit Nischal 	cam_cc_pll_config.alpha = 0x4000;
172578412c26SAmit Nischal 	clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
172678412c26SAmit Nischal 
172778412c26SAmit Nischal 	cam_cc_pll_config.l = 0x2a;
172878412c26SAmit Nischal 	cam_cc_pll_config.alpha = 0x1556;
172978412c26SAmit Nischal 	clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
173078412c26SAmit Nischal 
173178412c26SAmit Nischal 	cam_cc_pll_config.l = 0x32;
173278412c26SAmit Nischal 	cam_cc_pll_config.alpha = 0x0;
173378412c26SAmit Nischal 	clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
173478412c26SAmit Nischal 
173578412c26SAmit Nischal 	cam_cc_pll_config.l = 0x14;
173678412c26SAmit Nischal 	clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
173778412c26SAmit Nischal 
173878412c26SAmit Nischal 	return qcom_cc_really_probe(pdev, &cam_cc_sdm845_desc, regmap);
173978412c26SAmit Nischal }
174078412c26SAmit Nischal 
174178412c26SAmit Nischal static struct platform_driver cam_cc_sdm845_driver = {
174278412c26SAmit Nischal 	.probe	= cam_cc_sdm845_probe,
174378412c26SAmit Nischal 	.driver	= {
174478412c26SAmit Nischal 		.name = "sdm845-camcc",
174578412c26SAmit Nischal 		.of_match_table = cam_cc_sdm845_match_table,
174678412c26SAmit Nischal 	},
174778412c26SAmit Nischal };
174878412c26SAmit Nischal 
cam_cc_sdm845_init(void)174978412c26SAmit Nischal static int __init cam_cc_sdm845_init(void)
175078412c26SAmit Nischal {
175178412c26SAmit Nischal 	return platform_driver_register(&cam_cc_sdm845_driver);
175278412c26SAmit Nischal }
175378412c26SAmit Nischal subsys_initcall(cam_cc_sdm845_init);
175478412c26SAmit Nischal 
cam_cc_sdm845_exit(void)175578412c26SAmit Nischal static void __exit cam_cc_sdm845_exit(void)
175678412c26SAmit Nischal {
175778412c26SAmit Nischal 	platform_driver_unregister(&cam_cc_sdm845_driver);
175878412c26SAmit Nischal }
175978412c26SAmit Nischal module_exit(cam_cc_sdm845_exit);
176078412c26SAmit Nischal 
176178412c26SAmit Nischal MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
176278412c26SAmit Nischal MODULE_LICENSE("GPL v2");
1763