xref: /openbmc/linux/drivers/clk/qcom/camcc-sm8250.c (revision 433a2210)
15d66ca79SJonathan Marek // SPDX-License-Identifier: GPL-2.0-only
25d66ca79SJonathan Marek /*
35d66ca79SJonathan Marek  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
45d66ca79SJonathan Marek  */
55d66ca79SJonathan Marek 
65d66ca79SJonathan Marek #include <linux/clk-provider.h>
75d66ca79SJonathan Marek #include <linux/module.h>
85d66ca79SJonathan Marek #include <linux/platform_device.h>
95d66ca79SJonathan Marek #include <linux/regmap.h>
105d66ca79SJonathan Marek #include <linux/reset-controller.h>
115d66ca79SJonathan Marek 
125d66ca79SJonathan Marek #include <dt-bindings/clock/qcom,camcc-sm8250.h>
135d66ca79SJonathan Marek 
145d66ca79SJonathan Marek #include "clk-alpha-pll.h"
155d66ca79SJonathan Marek #include "clk-branch.h"
165d66ca79SJonathan Marek #include "clk-rcg.h"
175d66ca79SJonathan Marek #include "clk-regmap-divider.h"
185d66ca79SJonathan Marek #include "common.h"
195d66ca79SJonathan Marek #include "gdsc.h"
205d66ca79SJonathan Marek #include "reset.h"
215d66ca79SJonathan Marek 
225d66ca79SJonathan Marek enum {
235d66ca79SJonathan Marek 	P_BI_TCXO,
245d66ca79SJonathan Marek 	P_CAM_CC_PLL0_OUT_EVEN,
255d66ca79SJonathan Marek 	P_CAM_CC_PLL0_OUT_MAIN,
265d66ca79SJonathan Marek 	P_CAM_CC_PLL0_OUT_ODD,
275d66ca79SJonathan Marek 	P_CAM_CC_PLL1_OUT_EVEN,
285d66ca79SJonathan Marek 	P_CAM_CC_PLL2_OUT_EARLY,
295d66ca79SJonathan Marek 	P_CAM_CC_PLL2_OUT_MAIN,
305d66ca79SJonathan Marek 	P_CAM_CC_PLL3_OUT_EVEN,
315d66ca79SJonathan Marek 	P_CAM_CC_PLL4_OUT_EVEN,
325d66ca79SJonathan Marek 	P_SLEEP_CLK,
335d66ca79SJonathan Marek };
345d66ca79SJonathan Marek 
355d66ca79SJonathan Marek static struct pll_vco lucid_vco[] = {
365d66ca79SJonathan Marek 	{ 249600000, 2000000000, 0 },
375d66ca79SJonathan Marek };
385d66ca79SJonathan Marek 
395d66ca79SJonathan Marek static struct pll_vco zonda_vco[] = {
405d66ca79SJonathan Marek 	{ 595200000UL, 3600000000UL, 0 },
415d66ca79SJonathan Marek };
425d66ca79SJonathan Marek 
435d66ca79SJonathan Marek static const struct alpha_pll_config cam_cc_pll0_config = {
445d66ca79SJonathan Marek 	.l = 0x3e,
455d66ca79SJonathan Marek 	.alpha = 0x8000,
465d66ca79SJonathan Marek 	.config_ctl_val = 0x20485699,
475d66ca79SJonathan Marek 	.config_ctl_hi_val = 0x00002261,
485d66ca79SJonathan Marek 	.config_ctl_hi1_val = 0x329A699c,
495d66ca79SJonathan Marek 	.user_ctl_val = 0x00003100,
505d66ca79SJonathan Marek 	.user_ctl_hi_val = 0x00000805,
515d66ca79SJonathan Marek 	.user_ctl_hi1_val = 0x00000000,
525d66ca79SJonathan Marek };
535d66ca79SJonathan Marek 
545d66ca79SJonathan Marek static struct clk_alpha_pll cam_cc_pll0 = {
555d66ca79SJonathan Marek 	.offset = 0x0,
565d66ca79SJonathan Marek 	.vco_table = lucid_vco,
575d66ca79SJonathan Marek 	.num_vco = ARRAY_SIZE(lucid_vco),
585d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
595d66ca79SJonathan Marek 	.clkr = {
605d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
615d66ca79SJonathan Marek 			.name = "cam_cc_pll0",
625d66ca79SJonathan Marek 			.parent_data = &(const struct clk_parent_data){
635d66ca79SJonathan Marek 				.fw_name = "bi_tcxo",
645d66ca79SJonathan Marek 			},
655d66ca79SJonathan Marek 			.num_parents = 1,
665d66ca79SJonathan Marek 			.ops = &clk_alpha_pll_lucid_ops,
675d66ca79SJonathan Marek 		},
685d66ca79SJonathan Marek 	},
695d66ca79SJonathan Marek };
705d66ca79SJonathan Marek 
715d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
725d66ca79SJonathan Marek 	{ 0x1, 2 },
735d66ca79SJonathan Marek 	{ }
745d66ca79SJonathan Marek };
755d66ca79SJonathan Marek 
765d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
775d66ca79SJonathan Marek 	.offset = 0x0,
785d66ca79SJonathan Marek 	.post_div_shift = 8,
795d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll0_out_even,
805d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
815d66ca79SJonathan Marek 	.width = 4,
825d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
835d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
845d66ca79SJonathan Marek 		.name = "cam_cc_pll0_out_even",
855d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
865d66ca79SJonathan Marek 			&cam_cc_pll0.clkr.hw,
875d66ca79SJonathan Marek 		},
885d66ca79SJonathan Marek 		.num_parents = 1,
895d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
905d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
915d66ca79SJonathan Marek 	},
925d66ca79SJonathan Marek };
935d66ca79SJonathan Marek 
945d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
955d66ca79SJonathan Marek 	{ 0x3, 3 },
965d66ca79SJonathan Marek 	{ }
975d66ca79SJonathan Marek };
985d66ca79SJonathan Marek 
995d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
1005d66ca79SJonathan Marek 	.offset = 0x0,
1015d66ca79SJonathan Marek 	.post_div_shift = 12,
1025d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll0_out_odd,
1035d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
1045d66ca79SJonathan Marek 	.width = 4,
1055d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
1065d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
1075d66ca79SJonathan Marek 		.name = "cam_cc_pll0_out_odd",
1085d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
1095d66ca79SJonathan Marek 			&cam_cc_pll0.clkr.hw,
1105d66ca79SJonathan Marek 		},
1115d66ca79SJonathan Marek 		.num_parents = 1,
1125d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
1135d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
1145d66ca79SJonathan Marek 	},
1155d66ca79SJonathan Marek };
1165d66ca79SJonathan Marek 
1175d66ca79SJonathan Marek static const struct alpha_pll_config cam_cc_pll1_config = {
1185d66ca79SJonathan Marek 	.l = 0x1f,
1195d66ca79SJonathan Marek 	.alpha = 0x4000,
1205d66ca79SJonathan Marek 	.config_ctl_val = 0x20485699,
1215d66ca79SJonathan Marek 	.config_ctl_hi_val = 0x00002261,
1225d66ca79SJonathan Marek 	.config_ctl_hi1_val = 0x329A699c,
1235d66ca79SJonathan Marek 	.user_ctl_val = 0x00000100,
1245d66ca79SJonathan Marek 	.user_ctl_hi_val = 0x00000805,
1255d66ca79SJonathan Marek 	.user_ctl_hi1_val = 0x00000000,
1265d66ca79SJonathan Marek };
1275d66ca79SJonathan Marek 
1285d66ca79SJonathan Marek static struct clk_alpha_pll cam_cc_pll1 = {
1295d66ca79SJonathan Marek 	.offset = 0x1000,
1305d66ca79SJonathan Marek 	.vco_table = lucid_vco,
1315d66ca79SJonathan Marek 	.num_vco = ARRAY_SIZE(lucid_vco),
1325d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
1335d66ca79SJonathan Marek 	.clkr = {
1345d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
1355d66ca79SJonathan Marek 			.name = "cam_cc_pll1",
1365d66ca79SJonathan Marek 			.parent_data = &(const struct clk_parent_data){
1375d66ca79SJonathan Marek 				.fw_name = "bi_tcxo",
1385d66ca79SJonathan Marek 			},
1395d66ca79SJonathan Marek 			.num_parents = 1,
1405d66ca79SJonathan Marek 			.ops = &clk_alpha_pll_lucid_ops,
1415d66ca79SJonathan Marek 		},
1425d66ca79SJonathan Marek 	},
1435d66ca79SJonathan Marek };
1445d66ca79SJonathan Marek 
1455d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
1465d66ca79SJonathan Marek 	{ 0x1, 2 },
1475d66ca79SJonathan Marek 	{ }
1485d66ca79SJonathan Marek };
1495d66ca79SJonathan Marek 
1505d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
1515d66ca79SJonathan Marek 	.offset = 0x1000,
1525d66ca79SJonathan Marek 	.post_div_shift = 8,
1535d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll1_out_even,
1545d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
1555d66ca79SJonathan Marek 	.width = 4,
1565d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
1575d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
1585d66ca79SJonathan Marek 		.name = "cam_cc_pll1_out_even",
1595d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
1605d66ca79SJonathan Marek 			&cam_cc_pll1.clkr.hw,
1615d66ca79SJonathan Marek 		},
1625d66ca79SJonathan Marek 		.num_parents = 1,
1635d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
1645d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
1655d66ca79SJonathan Marek 	},
1665d66ca79SJonathan Marek };
1675d66ca79SJonathan Marek 
1685d66ca79SJonathan Marek static const struct alpha_pll_config cam_cc_pll2_config = {
1695d66ca79SJonathan Marek 	.l = 0x4b,
1705d66ca79SJonathan Marek 	.alpha = 0x0,
1715d66ca79SJonathan Marek 	.config_ctl_val = 0x08200920,
1725d66ca79SJonathan Marek 	.config_ctl_hi_val = 0x05002015,
1735d66ca79SJonathan Marek 	.config_ctl_hi1_val = 0x00000000,
1745d66ca79SJonathan Marek 	.user_ctl_val = 0x00000100,
1755d66ca79SJonathan Marek 	.user_ctl_hi_val = 0x00000000,
1765d66ca79SJonathan Marek 	.user_ctl_hi1_val = 0x00000000,
1775d66ca79SJonathan Marek };
1785d66ca79SJonathan Marek 
1795d66ca79SJonathan Marek static struct clk_alpha_pll cam_cc_pll2 = {
1805d66ca79SJonathan Marek 	.offset = 0x2000,
1815d66ca79SJonathan Marek 	.vco_table = zonda_vco,
1825d66ca79SJonathan Marek 	.num_vco = ARRAY_SIZE(zonda_vco),
1835d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
1845d66ca79SJonathan Marek 	.clkr = {
1855d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
1865d66ca79SJonathan Marek 			.name = "cam_cc_pll2",
1875d66ca79SJonathan Marek 			.parent_data = &(const struct clk_parent_data){
1885d66ca79SJonathan Marek 				.fw_name = "bi_tcxo",
1895d66ca79SJonathan Marek 			},
1905d66ca79SJonathan Marek 			.num_parents = 1,
1915d66ca79SJonathan Marek 			.ops = &clk_alpha_pll_zonda_ops,
1925d66ca79SJonathan Marek 		},
1935d66ca79SJonathan Marek 	},
1945d66ca79SJonathan Marek };
1955d66ca79SJonathan Marek 
1965d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll2_out_main[] = {
1975d66ca79SJonathan Marek 	{ 0x1, 2 },
1985d66ca79SJonathan Marek 	{ }
1995d66ca79SJonathan Marek };
2005d66ca79SJonathan Marek 
2015d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll2_out_main = {
2025d66ca79SJonathan Marek 	.offset = 0x2000,
2035d66ca79SJonathan Marek 	.post_div_shift = 8,
2045d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll2_out_main,
2055d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_main),
2065d66ca79SJonathan Marek 	.width = 2,
2075d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
2085d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
2095d66ca79SJonathan Marek 		.name = "cam_cc_pll2_out_main",
2105d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
2115d66ca79SJonathan Marek 			&cam_cc_pll2.clkr.hw,
2125d66ca79SJonathan Marek 		},
2135d66ca79SJonathan Marek 		.num_parents = 1,
2145d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
2155d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_zonda_ops,
2165d66ca79SJonathan Marek 	},
2175d66ca79SJonathan Marek };
2185d66ca79SJonathan Marek 
2195d66ca79SJonathan Marek static const struct alpha_pll_config cam_cc_pll3_config = {
2205d66ca79SJonathan Marek 	.l = 0x24,
2215d66ca79SJonathan Marek 	.alpha = 0x7555,
2225d66ca79SJonathan Marek 	.config_ctl_val = 0x20485699,
2235d66ca79SJonathan Marek 	.config_ctl_hi_val = 0x00002261,
2245d66ca79SJonathan Marek 	.config_ctl_hi1_val = 0x329A699c,
2255d66ca79SJonathan Marek 	.user_ctl_val = 0x00000100,
2265d66ca79SJonathan Marek 	.user_ctl_hi_val = 0x00000805,
2275d66ca79SJonathan Marek 	.user_ctl_hi1_val = 0x00000000,
2285d66ca79SJonathan Marek };
2295d66ca79SJonathan Marek 
2305d66ca79SJonathan Marek static struct clk_alpha_pll cam_cc_pll3 = {
2315d66ca79SJonathan Marek 	.offset = 0x3000,
2325d66ca79SJonathan Marek 	.vco_table = lucid_vco,
2335d66ca79SJonathan Marek 	.num_vco = ARRAY_SIZE(lucid_vco),
2345d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
2355d66ca79SJonathan Marek 	.clkr = {
2365d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
2375d66ca79SJonathan Marek 			.name = "cam_cc_pll3",
2385d66ca79SJonathan Marek 			.parent_data = &(const struct clk_parent_data){
2395d66ca79SJonathan Marek 				.fw_name = "bi_tcxo",
2405d66ca79SJonathan Marek 			},
2415d66ca79SJonathan Marek 			.num_parents = 1,
2425d66ca79SJonathan Marek 			.ops = &clk_alpha_pll_lucid_ops,
2435d66ca79SJonathan Marek 		},
2445d66ca79SJonathan Marek 	},
2455d66ca79SJonathan Marek };
2465d66ca79SJonathan Marek 
2475d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
2485d66ca79SJonathan Marek 	{ 0x1, 2 },
2495d66ca79SJonathan Marek 	{ }
2505d66ca79SJonathan Marek };
2515d66ca79SJonathan Marek 
2525d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
2535d66ca79SJonathan Marek 	.offset = 0x3000,
2545d66ca79SJonathan Marek 	.post_div_shift = 8,
2555d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll3_out_even,
2565d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
2575d66ca79SJonathan Marek 	.width = 4,
2585d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
2595d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
2605d66ca79SJonathan Marek 		.name = "cam_cc_pll3_out_even",
2615d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
2625d66ca79SJonathan Marek 			&cam_cc_pll3.clkr.hw,
2635d66ca79SJonathan Marek 		},
2645d66ca79SJonathan Marek 		.num_parents = 1,
2655d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
2665d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
2675d66ca79SJonathan Marek 	},
2685d66ca79SJonathan Marek };
2695d66ca79SJonathan Marek 
2705d66ca79SJonathan Marek static const struct alpha_pll_config cam_cc_pll4_config = {
2715d66ca79SJonathan Marek 	.l = 0x24,
2725d66ca79SJonathan Marek 	.alpha = 0x7555,
2735d66ca79SJonathan Marek 	.config_ctl_val = 0x20485699,
2745d66ca79SJonathan Marek 	.config_ctl_hi_val = 0x00002261,
2755d66ca79SJonathan Marek 	.config_ctl_hi1_val = 0x329A699c,
2765d66ca79SJonathan Marek 	.user_ctl_val = 0x00000100,
2775d66ca79SJonathan Marek 	.user_ctl_hi_val = 0x00000805,
2785d66ca79SJonathan Marek 	.user_ctl_hi1_val = 0x00000000,
2795d66ca79SJonathan Marek };
2805d66ca79SJonathan Marek 
2815d66ca79SJonathan Marek static struct clk_alpha_pll cam_cc_pll4 = {
2825d66ca79SJonathan Marek 	.offset = 0x4000,
2835d66ca79SJonathan Marek 	.vco_table = lucid_vco,
2845d66ca79SJonathan Marek 	.num_vco = ARRAY_SIZE(lucid_vco),
2855d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
2865d66ca79SJonathan Marek 	.clkr = {
2875d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
2885d66ca79SJonathan Marek 			.name = "cam_cc_pll4",
2895d66ca79SJonathan Marek 			.parent_data = &(const struct clk_parent_data){
2905d66ca79SJonathan Marek 				.fw_name = "bi_tcxo",
2915d66ca79SJonathan Marek 			},
2925d66ca79SJonathan Marek 			.num_parents = 1,
2935d66ca79SJonathan Marek 			.ops = &clk_alpha_pll_lucid_ops,
2945d66ca79SJonathan Marek 		},
2955d66ca79SJonathan Marek 	},
2965d66ca79SJonathan Marek };
2975d66ca79SJonathan Marek 
2985d66ca79SJonathan Marek static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
2995d66ca79SJonathan Marek 	{ 0x1, 2 },
3005d66ca79SJonathan Marek 	{ }
3015d66ca79SJonathan Marek };
3025d66ca79SJonathan Marek 
3035d66ca79SJonathan Marek static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
3045d66ca79SJonathan Marek 	.offset = 0x4000,
3055d66ca79SJonathan Marek 	.post_div_shift = 8,
3065d66ca79SJonathan Marek 	.post_div_table = post_div_table_cam_cc_pll4_out_even,
3075d66ca79SJonathan Marek 	.num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
3085d66ca79SJonathan Marek 	.width = 4,
3095d66ca79SJonathan Marek 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
3105d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
3115d66ca79SJonathan Marek 		.name = "cam_cc_pll4_out_even",
3125d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
3135d66ca79SJonathan Marek 			&cam_cc_pll4.clkr.hw,
3145d66ca79SJonathan Marek 		},
3155d66ca79SJonathan Marek 		.num_parents = 1,
3165d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
3175d66ca79SJonathan Marek 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
3185d66ca79SJonathan Marek 	},
3195d66ca79SJonathan Marek };
3205d66ca79SJonathan Marek 
3215d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_0[] = {
3225d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3235d66ca79SJonathan Marek 	{ P_CAM_CC_PLL0_OUT_MAIN, 1 },
3245d66ca79SJonathan Marek 	{ P_CAM_CC_PLL0_OUT_EVEN, 2 },
3255d66ca79SJonathan Marek 	{ P_CAM_CC_PLL0_OUT_ODD, 3 },
3265d66ca79SJonathan Marek 	{ P_CAM_CC_PLL2_OUT_MAIN, 5 },
3275d66ca79SJonathan Marek };
3285d66ca79SJonathan Marek 
3295d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_0[] = {
3305d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3315d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll0.clkr.hw },
3325d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
3335d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll0_out_odd.clkr.hw },
3345d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll2_out_main.clkr.hw },
3355d66ca79SJonathan Marek };
3365d66ca79SJonathan Marek 
3375d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_1[] = {
3385d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3395d66ca79SJonathan Marek 	{ P_CAM_CC_PLL2_OUT_EARLY, 5 },
3405d66ca79SJonathan Marek };
3415d66ca79SJonathan Marek 
3425d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_1[] = {
3435d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3445d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll2.clkr.hw },
3455d66ca79SJonathan Marek };
3465d66ca79SJonathan Marek 
3475d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_2[] = {
3485d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3495d66ca79SJonathan Marek 	{ P_CAM_CC_PLL3_OUT_EVEN, 6 },
3505d66ca79SJonathan Marek };
3515d66ca79SJonathan Marek 
3525d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_2[] = {
3535d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3545d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
3555d66ca79SJonathan Marek };
3565d66ca79SJonathan Marek 
3575d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_3[] = {
3585d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3595d66ca79SJonathan Marek 	{ P_CAM_CC_PLL4_OUT_EVEN, 6 },
3605d66ca79SJonathan Marek };
3615d66ca79SJonathan Marek 
3625d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_3[] = {
3635d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3645d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll4_out_even.clkr.hw },
3655d66ca79SJonathan Marek };
3665d66ca79SJonathan Marek 
3675d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_4[] = {
3685d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3695d66ca79SJonathan Marek 	{ P_CAM_CC_PLL1_OUT_EVEN, 4 },
3705d66ca79SJonathan Marek };
3715d66ca79SJonathan Marek 
3725d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_4[] = {
3735d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3745d66ca79SJonathan Marek 	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
3755d66ca79SJonathan Marek };
3765d66ca79SJonathan Marek 
3775d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_5[] = {
3785d66ca79SJonathan Marek 	{ P_SLEEP_CLK, 0 },
3795d66ca79SJonathan Marek };
3805d66ca79SJonathan Marek 
3815d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_5[] = {
3825d66ca79SJonathan Marek 	{ .fw_name = "sleep_clk" },
3835d66ca79SJonathan Marek };
3845d66ca79SJonathan Marek 
3855d66ca79SJonathan Marek static const struct parent_map cam_cc_parent_map_6[] = {
3865d66ca79SJonathan Marek 	{ P_BI_TCXO, 0 },
3875d66ca79SJonathan Marek };
3885d66ca79SJonathan Marek 
3895d66ca79SJonathan Marek static const struct clk_parent_data cam_cc_parent_data_6[] = {
3905d66ca79SJonathan Marek 	{ .fw_name = "bi_tcxo" },
3915d66ca79SJonathan Marek };
3925d66ca79SJonathan Marek 
3935d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
3945d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
3955d66ca79SJonathan Marek 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
3965d66ca79SJonathan Marek 	F(200000000, P_CAM_CC_PLL0_OUT_ODD, 2, 0, 0),
3975d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
3985d66ca79SJonathan Marek 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
3995d66ca79SJonathan Marek 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
4005d66ca79SJonathan Marek 	{ }
4015d66ca79SJonathan Marek };
4025d66ca79SJonathan Marek 
4035d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_bps_clk_src = {
4045d66ca79SJonathan Marek 	.cmd_rcgr = 0x7010,
4055d66ca79SJonathan Marek 	.mnd_width = 0,
4065d66ca79SJonathan Marek 	.hid_width = 5,
4075d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
4085d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
4095d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
4105d66ca79SJonathan Marek 		.name = "cam_cc_bps_clk_src",
4115d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
4125d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
4135d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
4145d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
4155d66ca79SJonathan Marek 	},
4165d66ca79SJonathan Marek };
4175d66ca79SJonathan Marek 
4185d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
4195d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
4205d66ca79SJonathan Marek 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
4215d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
4225d66ca79SJonathan Marek 	{ }
4235d66ca79SJonathan Marek };
4245d66ca79SJonathan Marek 
4255d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
4265d66ca79SJonathan Marek 	.cmd_rcgr = 0xc0f8,
4275d66ca79SJonathan Marek 	.mnd_width = 0,
4285d66ca79SJonathan Marek 	.hid_width = 5,
4295d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
4305d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
4315d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
4325d66ca79SJonathan Marek 		.name = "cam_cc_camnoc_axi_clk_src",
4335d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
4345d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
4355d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
4365d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
4375d66ca79SJonathan Marek 	},
4385d66ca79SJonathan Marek };
4395d66ca79SJonathan Marek 
4405d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
4415d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
4425d66ca79SJonathan Marek 	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
4435d66ca79SJonathan Marek 	{ }
4445d66ca79SJonathan Marek };
4455d66ca79SJonathan Marek 
4465d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_cci_0_clk_src = {
4475d66ca79SJonathan Marek 	.cmd_rcgr = 0xc0bc,
4485d66ca79SJonathan Marek 	.mnd_width = 8,
4495d66ca79SJonathan Marek 	.hid_width = 5,
4505d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
4515d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
4525d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
4535d66ca79SJonathan Marek 		.name = "cam_cc_cci_0_clk_src",
4545d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
4555d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
4565d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
4575d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
4585d66ca79SJonathan Marek 	},
4595d66ca79SJonathan Marek };
4605d66ca79SJonathan Marek 
4615d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_cci_1_clk_src = {
4625d66ca79SJonathan Marek 	.cmd_rcgr = 0xc0d8,
4635d66ca79SJonathan Marek 	.mnd_width = 8,
4645d66ca79SJonathan Marek 	.hid_width = 5,
4655d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
4665d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
4675d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
4685d66ca79SJonathan Marek 		.name = "cam_cc_cci_1_clk_src",
4695d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
4705d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
4715d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
4725d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
4735d66ca79SJonathan Marek 	},
4745d66ca79SJonathan Marek };
4755d66ca79SJonathan Marek 
4765d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
4775d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
4785d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
4795d66ca79SJonathan Marek 	{ }
4805d66ca79SJonathan Marek };
4815d66ca79SJonathan Marek 
4825d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
4835d66ca79SJonathan Marek 	.cmd_rcgr = 0xa068,
4845d66ca79SJonathan Marek 	.mnd_width = 0,
4855d66ca79SJonathan Marek 	.hid_width = 5,
4865d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
4875d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
4885d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
4895d66ca79SJonathan Marek 		.name = "cam_cc_cphy_rx_clk_src",
4905d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
4915d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
4925d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
4935d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
4945d66ca79SJonathan Marek 	},
4955d66ca79SJonathan Marek };
4965d66ca79SJonathan Marek 
4975d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
4985d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
4995d66ca79SJonathan Marek 	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
5005d66ca79SJonathan Marek 	{ }
5015d66ca79SJonathan Marek };
5025d66ca79SJonathan Marek 
5035d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
5045d66ca79SJonathan Marek 	.cmd_rcgr = 0x6000,
5055d66ca79SJonathan Marek 	.mnd_width = 0,
5065d66ca79SJonathan Marek 	.hid_width = 5,
5075d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5085d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5095d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5105d66ca79SJonathan Marek 		.name = "cam_cc_csi0phytimer_clk_src",
5115d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5125d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5135d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5145d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5155d66ca79SJonathan Marek 	},
5165d66ca79SJonathan Marek };
5175d66ca79SJonathan Marek 
5185d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
5195d66ca79SJonathan Marek 	.cmd_rcgr = 0x6020,
5205d66ca79SJonathan Marek 	.mnd_width = 0,
5215d66ca79SJonathan Marek 	.hid_width = 5,
5225d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5235d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5245d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5255d66ca79SJonathan Marek 		.name = "cam_cc_csi1phytimer_clk_src",
5265d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5275d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5285d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5295d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5305d66ca79SJonathan Marek 	},
5315d66ca79SJonathan Marek };
5325d66ca79SJonathan Marek 
5335d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
5345d66ca79SJonathan Marek 	.cmd_rcgr = 0x6040,
5355d66ca79SJonathan Marek 	.mnd_width = 0,
5365d66ca79SJonathan Marek 	.hid_width = 5,
5375d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5385d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5395d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5405d66ca79SJonathan Marek 		.name = "cam_cc_csi2phytimer_clk_src",
5415d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5425d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5435d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5445d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5455d66ca79SJonathan Marek 	},
5465d66ca79SJonathan Marek };
5475d66ca79SJonathan Marek 
5485d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
5495d66ca79SJonathan Marek 	.cmd_rcgr = 0x6060,
5505d66ca79SJonathan Marek 	.mnd_width = 0,
5515d66ca79SJonathan Marek 	.hid_width = 5,
5525d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5535d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5545d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5555d66ca79SJonathan Marek 		.name = "cam_cc_csi3phytimer_clk_src",
5565d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5575d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5585d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5595d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5605d66ca79SJonathan Marek 	},
5615d66ca79SJonathan Marek };
5625d66ca79SJonathan Marek 
5635d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi4phytimer_clk_src = {
5645d66ca79SJonathan Marek 	.cmd_rcgr = 0x6080,
5655d66ca79SJonathan Marek 	.mnd_width = 0,
5665d66ca79SJonathan Marek 	.hid_width = 5,
5675d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5685d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5695d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5705d66ca79SJonathan Marek 		.name = "cam_cc_csi4phytimer_clk_src",
5715d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5725d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5735d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5745d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5755d66ca79SJonathan Marek 	},
5765d66ca79SJonathan Marek };
5775d66ca79SJonathan Marek 
5785d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_csi5phytimer_clk_src = {
5795d66ca79SJonathan Marek 	.cmd_rcgr = 0x60a0,
5805d66ca79SJonathan Marek 	.mnd_width = 0,
5815d66ca79SJonathan Marek 	.hid_width = 5,
5825d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
5835d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
5845d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
5855d66ca79SJonathan Marek 		.name = "cam_cc_csi5phytimer_clk_src",
5865d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
5875d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
5885d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
5895d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
5905d66ca79SJonathan Marek 	},
5915d66ca79SJonathan Marek };
5925d66ca79SJonathan Marek 
5935d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
5945d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
5955d66ca79SJonathan Marek 	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
5965d66ca79SJonathan Marek 	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
5975d66ca79SJonathan Marek 	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
5985d66ca79SJonathan Marek 	F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
5995d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
6005d66ca79SJonathan Marek 	{ }
6015d66ca79SJonathan Marek };
6025d66ca79SJonathan Marek 
6035d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
6045d66ca79SJonathan Marek 	.cmd_rcgr = 0x703c,
6055d66ca79SJonathan Marek 	.mnd_width = 0,
6065d66ca79SJonathan Marek 	.hid_width = 5,
6075d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
6085d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
6095d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
6105d66ca79SJonathan Marek 		.name = "cam_cc_fast_ahb_clk_src",
6115d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
6125d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
6135d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
6145d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
6155d66ca79SJonathan Marek 	},
6165d66ca79SJonathan Marek };
6175d66ca79SJonathan Marek 
6185d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
6195d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
6205d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
6215d66ca79SJonathan Marek 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
6225d66ca79SJonathan Marek 	F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
6235d66ca79SJonathan Marek 	{ }
6245d66ca79SJonathan Marek };
6255d66ca79SJonathan Marek 
6265d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_fd_core_clk_src = {
6275d66ca79SJonathan Marek 	.cmd_rcgr = 0xc098,
6285d66ca79SJonathan Marek 	.mnd_width = 0,
6295d66ca79SJonathan Marek 	.hid_width = 5,
6305d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
6315d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
6325d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
6335d66ca79SJonathan Marek 		.name = "cam_cc_fd_core_clk_src",
6345d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
6355d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
6365d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
6375d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
6385d66ca79SJonathan Marek 	},
6395d66ca79SJonathan Marek };
6405d66ca79SJonathan Marek 
6415d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_icp_clk_src = {
6425d66ca79SJonathan Marek 	.cmd_rcgr = 0xc074,
6435d66ca79SJonathan Marek 	.mnd_width = 0,
6445d66ca79SJonathan Marek 	.hid_width = 5,
6455d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
6465d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
6475d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
6485d66ca79SJonathan Marek 		.name = "cam_cc_icp_clk_src",
6495d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
6505d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
6515d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
6525d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
6535d66ca79SJonathan Marek 	},
6545d66ca79SJonathan Marek };
6555d66ca79SJonathan Marek 
6565d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
6575d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
6585d66ca79SJonathan Marek 	F(350000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
6595d66ca79SJonathan Marek 	F(475000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
6605d66ca79SJonathan Marek 	F(576000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
6615d66ca79SJonathan Marek 	F(680000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
6625d66ca79SJonathan Marek 	{ }
6635d66ca79SJonathan Marek };
6645d66ca79SJonathan Marek 
6655d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_0_clk_src = {
6665d66ca79SJonathan Marek 	.cmd_rcgr = 0xa010,
6675d66ca79SJonathan Marek 	.mnd_width = 0,
6685d66ca79SJonathan Marek 	.hid_width = 5,
6695d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_2,
6705d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
6715d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
6725d66ca79SJonathan Marek 		.name = "cam_cc_ife_0_clk_src",
6735d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_2,
6745d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
6755d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
6765d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
6775d66ca79SJonathan Marek 	},
6785d66ca79SJonathan Marek };
6795d66ca79SJonathan Marek 
6805d66ca79SJonathan Marek static struct clk_regmap_div cam_cc_sbi_div_clk_src = {
6815d66ca79SJonathan Marek 	.reg = 0x9010,
6825d66ca79SJonathan Marek 	.shift = 0,
6835d66ca79SJonathan Marek 	.width = 3,
6845d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data) {
6855d66ca79SJonathan Marek 		.name = "cam_cc_sbi_div_clk_src",
6865d66ca79SJonathan Marek 		.parent_hws = (const struct clk_hw*[]){
6875d66ca79SJonathan Marek 			&cam_cc_ife_0_clk_src.clkr.hw,
6885d66ca79SJonathan Marek 		},
6895d66ca79SJonathan Marek 		.num_parents = 1,
6905d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
6915d66ca79SJonathan Marek 		.ops = &clk_regmap_div_ro_ops,
6925d66ca79SJonathan Marek 	},
6935d66ca79SJonathan Marek };
6945d66ca79SJonathan Marek 
6955d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
6965d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
6975d66ca79SJonathan Marek 	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
6985d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
6995d66ca79SJonathan Marek 	{ }
7005d66ca79SJonathan Marek };
7015d66ca79SJonathan Marek 
7025d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
7035d66ca79SJonathan Marek 	.cmd_rcgr = 0xa040,
7045d66ca79SJonathan Marek 	.mnd_width = 0,
7055d66ca79SJonathan Marek 	.hid_width = 5,
7065d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
7075d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
7085d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
7095d66ca79SJonathan Marek 		.name = "cam_cc_ife_0_csid_clk_src",
7105d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
7115d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
7125d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
7135d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
7145d66ca79SJonathan Marek 	},
7155d66ca79SJonathan Marek };
7165d66ca79SJonathan Marek 
7175d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_ife_1_clk_src[] = {
7185d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
7195d66ca79SJonathan Marek 	F(350000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
7205d66ca79SJonathan Marek 	F(475000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
7215d66ca79SJonathan Marek 	F(576000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
7225d66ca79SJonathan Marek 	F(680000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
7235d66ca79SJonathan Marek 	{ }
7245d66ca79SJonathan Marek };
7255d66ca79SJonathan Marek 
7265d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_1_clk_src = {
7275d66ca79SJonathan Marek 	.cmd_rcgr = 0xb010,
7285d66ca79SJonathan Marek 	.mnd_width = 0,
7295d66ca79SJonathan Marek 	.hid_width = 5,
7305d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_3,
7315d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ife_1_clk_src,
7325d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
7335d66ca79SJonathan Marek 		.name = "cam_cc_ife_1_clk_src",
7345d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_3,
7355d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
7365d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
7375d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
7385d66ca79SJonathan Marek 	},
7395d66ca79SJonathan Marek };
7405d66ca79SJonathan Marek 
7415d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
7425d66ca79SJonathan Marek 	.cmd_rcgr = 0xb040,
7435d66ca79SJonathan Marek 	.mnd_width = 0,
7445d66ca79SJonathan Marek 	.hid_width = 5,
7455d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
7465d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
7475d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
7485d66ca79SJonathan Marek 		.name = "cam_cc_ife_1_csid_clk_src",
7495d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
7505d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
7515d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
7525d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
7535d66ca79SJonathan Marek 	},
7545d66ca79SJonathan Marek };
7555d66ca79SJonathan Marek 
7565d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_ife_lite_clk_src[] = {
7575d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
7585d66ca79SJonathan Marek 	F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
7595d66ca79SJonathan Marek 	F(480000000, P_CAM_CC_PLL2_OUT_MAIN, 1.5, 0, 0),
7605d66ca79SJonathan Marek 	{ }
7615d66ca79SJonathan Marek };
7625d66ca79SJonathan Marek 
7635d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
7645d66ca79SJonathan Marek 	.cmd_rcgr = 0xc000,
7655d66ca79SJonathan Marek 	.mnd_width = 0,
7665d66ca79SJonathan Marek 	.hid_width = 5,
7675d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
7685d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
7695d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
7705d66ca79SJonathan Marek 		.name = "cam_cc_ife_lite_clk_src",
7715d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
7725d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
7735d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
7745d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
7755d66ca79SJonathan Marek 	},
7765d66ca79SJonathan Marek };
7775d66ca79SJonathan Marek 
7785d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
7795d66ca79SJonathan Marek 	.cmd_rcgr = 0xc01c,
7805d66ca79SJonathan Marek 	.mnd_width = 0,
7815d66ca79SJonathan Marek 	.hid_width = 5,
7825d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
7835d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
7845d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
7855d66ca79SJonathan Marek 		.name = "cam_cc_ife_lite_csid_clk_src",
7865d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
7875d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
7885d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
7895d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
7905d66ca79SJonathan Marek 	},
7915d66ca79SJonathan Marek };
7925d66ca79SJonathan Marek 
7935d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
7945d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
7955d66ca79SJonathan Marek 	F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
7965d66ca79SJonathan Marek 	F(475000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
7975d66ca79SJonathan Marek 	F(525000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
7985d66ca79SJonathan Marek 	F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
7995d66ca79SJonathan Marek 	{ }
8005d66ca79SJonathan Marek };
8015d66ca79SJonathan Marek 
8025d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
8035d66ca79SJonathan Marek 	.cmd_rcgr = 0x8010,
8045d66ca79SJonathan Marek 	.mnd_width = 0,
8055d66ca79SJonathan Marek 	.hid_width = 5,
8065d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_4,
8075d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
8085d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8095d66ca79SJonathan Marek 		.name = "cam_cc_ipe_0_clk_src",
8105d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_4,
8115d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
8125d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8135d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8145d66ca79SJonathan Marek 	},
8155d66ca79SJonathan Marek };
8165d66ca79SJonathan Marek 
8175d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_jpeg_clk_src = {
8185d66ca79SJonathan Marek 	.cmd_rcgr = 0xc048,
8195d66ca79SJonathan Marek 	.mnd_width = 0,
8205d66ca79SJonathan Marek 	.hid_width = 5,
8215d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
8225d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_bps_clk_src,
8235d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8245d66ca79SJonathan Marek 		.name = "cam_cc_jpeg_clk_src",
8255d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
8265d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
8275d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8285d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8295d66ca79SJonathan Marek 	},
8305d66ca79SJonathan Marek };
8315d66ca79SJonathan Marek 
8325d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
8335d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
8345d66ca79SJonathan Marek 	F(24000000, P_CAM_CC_PLL2_OUT_EARLY, 10, 1, 6),
8355d66ca79SJonathan Marek 	F(68571429, P_CAM_CC_PLL2_OUT_EARLY, 1, 1, 21),
8365d66ca79SJonathan Marek 	{ }
8375d66ca79SJonathan Marek };
8385d66ca79SJonathan Marek 
8395d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk0_clk_src = {
8405d66ca79SJonathan Marek 	.cmd_rcgr = 0x5000,
8415d66ca79SJonathan Marek 	.mnd_width = 8,
8425d66ca79SJonathan Marek 	.hid_width = 5,
8435d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
8445d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
8455d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8465d66ca79SJonathan Marek 		.name = "cam_cc_mclk0_clk_src",
8475d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
8485d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
8495d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8505d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8515d66ca79SJonathan Marek 	},
8525d66ca79SJonathan Marek };
8535d66ca79SJonathan Marek 
8545d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk1_clk_src = {
8555d66ca79SJonathan Marek 	.cmd_rcgr = 0x501c,
8565d66ca79SJonathan Marek 	.mnd_width = 8,
8575d66ca79SJonathan Marek 	.hid_width = 5,
8585d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
8595d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
8605d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8615d66ca79SJonathan Marek 		.name = "cam_cc_mclk1_clk_src",
8625d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
8635d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
8645d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8655d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8665d66ca79SJonathan Marek 	},
8675d66ca79SJonathan Marek };
8685d66ca79SJonathan Marek 
8695d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk2_clk_src = {
8705d66ca79SJonathan Marek 	.cmd_rcgr = 0x5038,
8715d66ca79SJonathan Marek 	.mnd_width = 8,
8725d66ca79SJonathan Marek 	.hid_width = 5,
8735d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
8745d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
8755d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8765d66ca79SJonathan Marek 		.name = "cam_cc_mclk2_clk_src",
8775d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
8785d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
8795d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8805d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8815d66ca79SJonathan Marek 	},
8825d66ca79SJonathan Marek };
8835d66ca79SJonathan Marek 
8845d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk3_clk_src = {
8855d66ca79SJonathan Marek 	.cmd_rcgr = 0x5054,
8865d66ca79SJonathan Marek 	.mnd_width = 8,
8875d66ca79SJonathan Marek 	.hid_width = 5,
8885d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
8895d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
8905d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
8915d66ca79SJonathan Marek 		.name = "cam_cc_mclk3_clk_src",
8925d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
8935d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
8945d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
8955d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
8965d66ca79SJonathan Marek 	},
8975d66ca79SJonathan Marek };
8985d66ca79SJonathan Marek 
8995d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk4_clk_src = {
9005d66ca79SJonathan Marek 	.cmd_rcgr = 0x5070,
9015d66ca79SJonathan Marek 	.mnd_width = 8,
9025d66ca79SJonathan Marek 	.hid_width = 5,
9035d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
9045d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
9055d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9065d66ca79SJonathan Marek 		.name = "cam_cc_mclk4_clk_src",
9075d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
9085d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
9095d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9105d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9115d66ca79SJonathan Marek 	},
9125d66ca79SJonathan Marek };
9135d66ca79SJonathan Marek 
9145d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk5_clk_src = {
9155d66ca79SJonathan Marek 	.cmd_rcgr = 0x508c,
9165d66ca79SJonathan Marek 	.mnd_width = 8,
9175d66ca79SJonathan Marek 	.hid_width = 5,
9185d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
9195d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
9205d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9215d66ca79SJonathan Marek 		.name = "cam_cc_mclk5_clk_src",
9225d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
9235d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
9245d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9255d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9265d66ca79SJonathan Marek 	},
9275d66ca79SJonathan Marek };
9285d66ca79SJonathan Marek 
9295d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_mclk6_clk_src = {
9305d66ca79SJonathan Marek 	.cmd_rcgr = 0x50a8,
9315d66ca79SJonathan Marek 	.mnd_width = 8,
9325d66ca79SJonathan Marek 	.hid_width = 5,
9335d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_1,
9345d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
9355d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9365d66ca79SJonathan Marek 		.name = "cam_cc_mclk6_clk_src",
9375d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_1,
9385d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
9395d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9405d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9415d66ca79SJonathan Marek 	},
9425d66ca79SJonathan Marek };
9435d66ca79SJonathan Marek 
9445d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_sbi_csid_clk_src = {
9455d66ca79SJonathan Marek 	.cmd_rcgr = 0x901c,
9465d66ca79SJonathan Marek 	.mnd_width = 0,
9475d66ca79SJonathan Marek 	.hid_width = 5,
9485d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
9495d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
9505d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9515d66ca79SJonathan Marek 		.name = "cam_cc_sbi_csid_clk_src",
9525d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
9535d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
9545d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9555d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9565d66ca79SJonathan Marek 	},
9575d66ca79SJonathan Marek };
9585d66ca79SJonathan Marek 
9595d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
9605d66ca79SJonathan Marek 	F(32768, P_SLEEP_CLK, 1, 0, 0),
9615d66ca79SJonathan Marek 	{ }
9625d66ca79SJonathan Marek };
9635d66ca79SJonathan Marek 
9645d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_sleep_clk_src = {
9655d66ca79SJonathan Marek 	.cmd_rcgr = 0xc170,
9665d66ca79SJonathan Marek 	.mnd_width = 0,
9675d66ca79SJonathan Marek 	.hid_width = 5,
9685d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_5,
9695d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_sleep_clk_src,
9705d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9715d66ca79SJonathan Marek 		.name = "cam_cc_sleep_clk_src",
9725d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_5,
9735d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
9745d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9755d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9765d66ca79SJonathan Marek 	},
9775d66ca79SJonathan Marek };
9785d66ca79SJonathan Marek 
9795d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
9805d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
9815d66ca79SJonathan Marek 	F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
9825d66ca79SJonathan Marek 	{ }
9835d66ca79SJonathan Marek };
9845d66ca79SJonathan Marek 
9855d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
9865d66ca79SJonathan Marek 	.cmd_rcgr = 0x7058,
9875d66ca79SJonathan Marek 	.mnd_width = 8,
9885d66ca79SJonathan Marek 	.hid_width = 5,
9895d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_0,
9905d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
9915d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
9925d66ca79SJonathan Marek 		.name = "cam_cc_slow_ahb_clk_src",
9935d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_0,
9945d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
9955d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
9965d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
9975d66ca79SJonathan Marek 	},
9985d66ca79SJonathan Marek };
9995d66ca79SJonathan Marek 
10005d66ca79SJonathan Marek static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
10015d66ca79SJonathan Marek 	F(19200000, P_BI_TCXO, 1, 0, 0),
10025d66ca79SJonathan Marek 	{ }
10035d66ca79SJonathan Marek };
10045d66ca79SJonathan Marek 
10055d66ca79SJonathan Marek static struct clk_rcg2 cam_cc_xo_clk_src = {
10065d66ca79SJonathan Marek 	.cmd_rcgr = 0xc154,
10075d66ca79SJonathan Marek 	.mnd_width = 0,
10085d66ca79SJonathan Marek 	.hid_width = 5,
10095d66ca79SJonathan Marek 	.parent_map = cam_cc_parent_map_6,
10105d66ca79SJonathan Marek 	.freq_tbl = ftbl_cam_cc_xo_clk_src,
10115d66ca79SJonathan Marek 	.clkr.hw.init = &(struct clk_init_data){
10125d66ca79SJonathan Marek 		.name = "cam_cc_xo_clk_src",
10135d66ca79SJonathan Marek 		.parent_data = cam_cc_parent_data_6,
10145d66ca79SJonathan Marek 		.num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
10155d66ca79SJonathan Marek 		.flags = CLK_SET_RATE_PARENT,
10165d66ca79SJonathan Marek 		.ops = &clk_rcg2_ops,
10175d66ca79SJonathan Marek 	},
10185d66ca79SJonathan Marek };
10195d66ca79SJonathan Marek 
10205d66ca79SJonathan Marek static struct clk_branch cam_cc_bps_ahb_clk = {
10215d66ca79SJonathan Marek 	.halt_reg = 0x7070,
10225d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
10235d66ca79SJonathan Marek 	.clkr = {
10245d66ca79SJonathan Marek 		.enable_reg = 0x7070,
10255d66ca79SJonathan Marek 		.enable_mask = BIT(0),
10265d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
10275d66ca79SJonathan Marek 			.name = "cam_cc_bps_ahb_clk",
10285d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
10295d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
10305d66ca79SJonathan Marek 			},
10315d66ca79SJonathan Marek 			.num_parents = 1,
10325d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
10335d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
10345d66ca79SJonathan Marek 		},
10355d66ca79SJonathan Marek 	},
10365d66ca79SJonathan Marek };
10375d66ca79SJonathan Marek 
10385d66ca79SJonathan Marek static struct clk_branch cam_cc_bps_areg_clk = {
10395d66ca79SJonathan Marek 	.halt_reg = 0x7054,
10405d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
10415d66ca79SJonathan Marek 	.clkr = {
10425d66ca79SJonathan Marek 		.enable_reg = 0x7054,
10435d66ca79SJonathan Marek 		.enable_mask = BIT(0),
10445d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
10455d66ca79SJonathan Marek 			.name = "cam_cc_bps_areg_clk",
10465d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
10475d66ca79SJonathan Marek 				&cam_cc_fast_ahb_clk_src.clkr.hw
10485d66ca79SJonathan Marek 			},
10495d66ca79SJonathan Marek 			.num_parents = 1,
10505d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
10515d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
10525d66ca79SJonathan Marek 		},
10535d66ca79SJonathan Marek 	},
10545d66ca79SJonathan Marek };
10555d66ca79SJonathan Marek 
10565d66ca79SJonathan Marek static struct clk_branch cam_cc_bps_axi_clk = {
10575d66ca79SJonathan Marek 	.halt_reg = 0x7038,
10585d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
10595d66ca79SJonathan Marek 	.clkr = {
10605d66ca79SJonathan Marek 		.enable_reg = 0x7038,
10615d66ca79SJonathan Marek 		.enable_mask = BIT(0),
10625d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
10635d66ca79SJonathan Marek 			.name = "cam_cc_bps_axi_clk",
10645d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
10655d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
10665d66ca79SJonathan Marek 			},
10675d66ca79SJonathan Marek 			.num_parents = 1,
10685d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
10695d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
10705d66ca79SJonathan Marek 		},
10715d66ca79SJonathan Marek 	},
10725d66ca79SJonathan Marek };
10735d66ca79SJonathan Marek 
10745d66ca79SJonathan Marek static struct clk_branch cam_cc_bps_clk = {
10755d66ca79SJonathan Marek 	.halt_reg = 0x7028,
10765d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
10775d66ca79SJonathan Marek 	.clkr = {
10785d66ca79SJonathan Marek 		.enable_reg = 0x7028,
10795d66ca79SJonathan Marek 		.enable_mask = BIT(0),
10805d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
10815d66ca79SJonathan Marek 			.name = "cam_cc_bps_clk",
10825d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
10835d66ca79SJonathan Marek 				&cam_cc_bps_clk_src.clkr.hw
10845d66ca79SJonathan Marek 			},
10855d66ca79SJonathan Marek 			.num_parents = 1,
10865d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
10875d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
10885d66ca79SJonathan Marek 		},
10895d66ca79SJonathan Marek 	},
10905d66ca79SJonathan Marek };
10915d66ca79SJonathan Marek 
10925d66ca79SJonathan Marek static struct clk_branch cam_cc_camnoc_axi_clk = {
10935d66ca79SJonathan Marek 	.halt_reg = 0xc114,
10945d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
10955d66ca79SJonathan Marek 	.clkr = {
10965d66ca79SJonathan Marek 		.enable_reg = 0xc114,
10975d66ca79SJonathan Marek 		.enable_mask = BIT(0),
10985d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
10995d66ca79SJonathan Marek 			.name = "cam_cc_camnoc_axi_clk",
11005d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11015d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
11025d66ca79SJonathan Marek 			},
11035d66ca79SJonathan Marek 			.num_parents = 1,
11045d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11055d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11065d66ca79SJonathan Marek 		},
11075d66ca79SJonathan Marek 	},
11085d66ca79SJonathan Marek };
11095d66ca79SJonathan Marek 
11105d66ca79SJonathan Marek static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
11115d66ca79SJonathan Marek 	.halt_reg = 0xc11c,
11125d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
11135d66ca79SJonathan Marek 	.clkr = {
11145d66ca79SJonathan Marek 		.enable_reg = 0xc11c,
11155d66ca79SJonathan Marek 		.enable_mask = BIT(0),
11165d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
11175d66ca79SJonathan Marek 			.name = "cam_cc_camnoc_dcd_xo_clk",
11185d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11195d66ca79SJonathan Marek 				&cam_cc_xo_clk_src.clkr.hw
11205d66ca79SJonathan Marek 			},
11215d66ca79SJonathan Marek 			.num_parents = 1,
11225d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11235d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11245d66ca79SJonathan Marek 		},
11255d66ca79SJonathan Marek 	},
11265d66ca79SJonathan Marek };
11275d66ca79SJonathan Marek 
11285d66ca79SJonathan Marek static struct clk_branch cam_cc_cci_0_clk = {
11295d66ca79SJonathan Marek 	.halt_reg = 0xc0d4,
11305d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
11315d66ca79SJonathan Marek 	.clkr = {
11325d66ca79SJonathan Marek 		.enable_reg = 0xc0d4,
11335d66ca79SJonathan Marek 		.enable_mask = BIT(0),
11345d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
11355d66ca79SJonathan Marek 			.name = "cam_cc_cci_0_clk",
11365d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11375d66ca79SJonathan Marek 				&cam_cc_cci_0_clk_src.clkr.hw
11385d66ca79SJonathan Marek 			},
11395d66ca79SJonathan Marek 			.num_parents = 1,
11405d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11415d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11425d66ca79SJonathan Marek 		},
11435d66ca79SJonathan Marek 	},
11445d66ca79SJonathan Marek };
11455d66ca79SJonathan Marek 
11465d66ca79SJonathan Marek static struct clk_branch cam_cc_cci_1_clk = {
11475d66ca79SJonathan Marek 	.halt_reg = 0xc0f0,
11485d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
11495d66ca79SJonathan Marek 	.clkr = {
11505d66ca79SJonathan Marek 		.enable_reg = 0xc0f0,
11515d66ca79SJonathan Marek 		.enable_mask = BIT(0),
11525d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
11535d66ca79SJonathan Marek 			.name = "cam_cc_cci_1_clk",
11545d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11555d66ca79SJonathan Marek 				&cam_cc_cci_1_clk_src.clkr.hw
11565d66ca79SJonathan Marek 			},
11575d66ca79SJonathan Marek 			.num_parents = 1,
11585d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11595d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11605d66ca79SJonathan Marek 		},
11615d66ca79SJonathan Marek 	},
11625d66ca79SJonathan Marek };
11635d66ca79SJonathan Marek 
11645d66ca79SJonathan Marek static struct clk_branch cam_cc_core_ahb_clk = {
11655d66ca79SJonathan Marek 	.halt_reg = 0xc150,
11665d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT_DELAY,
11675d66ca79SJonathan Marek 	.clkr = {
11685d66ca79SJonathan Marek 		.enable_reg = 0xc150,
11695d66ca79SJonathan Marek 		.enable_mask = BIT(0),
11705d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
11715d66ca79SJonathan Marek 			.name = "cam_cc_core_ahb_clk",
11725d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11735d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
11745d66ca79SJonathan Marek 			},
11755d66ca79SJonathan Marek 			.num_parents = 1,
11765d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11775d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11785d66ca79SJonathan Marek 		},
11795d66ca79SJonathan Marek 	},
11805d66ca79SJonathan Marek };
11815d66ca79SJonathan Marek 
11825d66ca79SJonathan Marek static struct clk_branch cam_cc_cpas_ahb_clk = {
11835d66ca79SJonathan Marek 	.halt_reg = 0xc0f4,
11845d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
11855d66ca79SJonathan Marek 	.clkr = {
11865d66ca79SJonathan Marek 		.enable_reg = 0xc0f4,
11875d66ca79SJonathan Marek 		.enable_mask = BIT(0),
11885d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
11895d66ca79SJonathan Marek 			.name = "cam_cc_cpas_ahb_clk",
11905d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
11915d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
11925d66ca79SJonathan Marek 			},
11935d66ca79SJonathan Marek 			.num_parents = 1,
11945d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
11955d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
11965d66ca79SJonathan Marek 		},
11975d66ca79SJonathan Marek 	},
11985d66ca79SJonathan Marek };
11995d66ca79SJonathan Marek 
12005d66ca79SJonathan Marek static struct clk_branch cam_cc_csi0phytimer_clk = {
12015d66ca79SJonathan Marek 	.halt_reg = 0x6018,
12025d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12035d66ca79SJonathan Marek 	.clkr = {
12045d66ca79SJonathan Marek 		.enable_reg = 0x6018,
12055d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12065d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12075d66ca79SJonathan Marek 			.name = "cam_cc_csi0phytimer_clk",
12085d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12095d66ca79SJonathan Marek 				&cam_cc_csi0phytimer_clk_src.clkr.hw
12105d66ca79SJonathan Marek 			},
12115d66ca79SJonathan Marek 			.num_parents = 1,
12125d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
12135d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
12145d66ca79SJonathan Marek 		},
12155d66ca79SJonathan Marek 	},
12165d66ca79SJonathan Marek };
12175d66ca79SJonathan Marek 
12185d66ca79SJonathan Marek static struct clk_branch cam_cc_csi1phytimer_clk = {
12195d66ca79SJonathan Marek 	.halt_reg = 0x6038,
12205d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12215d66ca79SJonathan Marek 	.clkr = {
12225d66ca79SJonathan Marek 		.enable_reg = 0x6038,
12235d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12245d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12255d66ca79SJonathan Marek 			.name = "cam_cc_csi1phytimer_clk",
12265d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12275d66ca79SJonathan Marek 				&cam_cc_csi1phytimer_clk_src.clkr.hw
12285d66ca79SJonathan Marek 			},
12295d66ca79SJonathan Marek 			.num_parents = 1,
12305d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
12315d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
12325d66ca79SJonathan Marek 		},
12335d66ca79SJonathan Marek 	},
12345d66ca79SJonathan Marek };
12355d66ca79SJonathan Marek 
12365d66ca79SJonathan Marek static struct clk_branch cam_cc_csi2phytimer_clk = {
12375d66ca79SJonathan Marek 	.halt_reg = 0x6058,
12385d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12395d66ca79SJonathan Marek 	.clkr = {
12405d66ca79SJonathan Marek 		.enable_reg = 0x6058,
12415d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12425d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12435d66ca79SJonathan Marek 			.name = "cam_cc_csi2phytimer_clk",
12445d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12455d66ca79SJonathan Marek 				&cam_cc_csi2phytimer_clk_src.clkr.hw
12465d66ca79SJonathan Marek 			},
12475d66ca79SJonathan Marek 			.num_parents = 1,
12485d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
12495d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
12505d66ca79SJonathan Marek 		},
12515d66ca79SJonathan Marek 	},
12525d66ca79SJonathan Marek };
12535d66ca79SJonathan Marek 
12545d66ca79SJonathan Marek static struct clk_branch cam_cc_csi3phytimer_clk = {
12555d66ca79SJonathan Marek 	.halt_reg = 0x6078,
12565d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12575d66ca79SJonathan Marek 	.clkr = {
12585d66ca79SJonathan Marek 		.enable_reg = 0x6078,
12595d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12605d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12615d66ca79SJonathan Marek 			.name = "cam_cc_csi3phytimer_clk",
12625d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12635d66ca79SJonathan Marek 				&cam_cc_csi3phytimer_clk_src.clkr.hw
12645d66ca79SJonathan Marek 			},
12655d66ca79SJonathan Marek 			.num_parents = 1,
12665d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
12675d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
12685d66ca79SJonathan Marek 		},
12695d66ca79SJonathan Marek 	},
12705d66ca79SJonathan Marek };
12715d66ca79SJonathan Marek 
12725d66ca79SJonathan Marek static struct clk_branch cam_cc_csi4phytimer_clk = {
12735d66ca79SJonathan Marek 	.halt_reg = 0x6098,
12745d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12755d66ca79SJonathan Marek 	.clkr = {
12765d66ca79SJonathan Marek 		.enable_reg = 0x6098,
12775d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12785d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12795d66ca79SJonathan Marek 			.name = "cam_cc_csi4phytimer_clk",
12805d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12815d66ca79SJonathan Marek 				&cam_cc_csi4phytimer_clk_src.clkr.hw
12825d66ca79SJonathan Marek 			},
12835d66ca79SJonathan Marek 			.num_parents = 1,
12845d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
12855d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
12865d66ca79SJonathan Marek 		},
12875d66ca79SJonathan Marek 	},
12885d66ca79SJonathan Marek };
12895d66ca79SJonathan Marek 
12905d66ca79SJonathan Marek static struct clk_branch cam_cc_csi5phytimer_clk = {
12915d66ca79SJonathan Marek 	.halt_reg = 0x60b8,
12925d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
12935d66ca79SJonathan Marek 	.clkr = {
12945d66ca79SJonathan Marek 		.enable_reg = 0x60b8,
12955d66ca79SJonathan Marek 		.enable_mask = BIT(0),
12965d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
12975d66ca79SJonathan Marek 			.name = "cam_cc_csi5phytimer_clk",
12985d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
12995d66ca79SJonathan Marek 				&cam_cc_csi5phytimer_clk_src.clkr.hw
13005d66ca79SJonathan Marek 			},
13015d66ca79SJonathan Marek 			.num_parents = 1,
13025d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13035d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13045d66ca79SJonathan Marek 		},
13055d66ca79SJonathan Marek 	},
13065d66ca79SJonathan Marek };
13075d66ca79SJonathan Marek 
13085d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy0_clk = {
13095d66ca79SJonathan Marek 	.halt_reg = 0x601c,
13105d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
13115d66ca79SJonathan Marek 	.clkr = {
13125d66ca79SJonathan Marek 		.enable_reg = 0x601c,
13135d66ca79SJonathan Marek 		.enable_mask = BIT(0),
13145d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
13155d66ca79SJonathan Marek 			.name = "cam_cc_csiphy0_clk",
13165d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
13175d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
13185d66ca79SJonathan Marek 			},
13195d66ca79SJonathan Marek 			.num_parents = 1,
13205d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13215d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13225d66ca79SJonathan Marek 		},
13235d66ca79SJonathan Marek 	},
13245d66ca79SJonathan Marek };
13255d66ca79SJonathan Marek 
13265d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy1_clk = {
13275d66ca79SJonathan Marek 	.halt_reg = 0x603c,
13285d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
13295d66ca79SJonathan Marek 	.clkr = {
13305d66ca79SJonathan Marek 		.enable_reg = 0x603c,
13315d66ca79SJonathan Marek 		.enable_mask = BIT(0),
13325d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
13335d66ca79SJonathan Marek 			.name = "cam_cc_csiphy1_clk",
13345d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
13355d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
13365d66ca79SJonathan Marek 			},
13375d66ca79SJonathan Marek 			.num_parents = 1,
13385d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13395d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13405d66ca79SJonathan Marek 		},
13415d66ca79SJonathan Marek 	},
13425d66ca79SJonathan Marek };
13435d66ca79SJonathan Marek 
13445d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy2_clk = {
13455d66ca79SJonathan Marek 	.halt_reg = 0x605c,
13465d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
13475d66ca79SJonathan Marek 	.clkr = {
13485d66ca79SJonathan Marek 		.enable_reg = 0x605c,
13495d66ca79SJonathan Marek 		.enable_mask = BIT(0),
13505d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
13515d66ca79SJonathan Marek 			.name = "cam_cc_csiphy2_clk",
13525d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
13535d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
13545d66ca79SJonathan Marek 			},
13555d66ca79SJonathan Marek 			.num_parents = 1,
13565d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13575d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13585d66ca79SJonathan Marek 		},
13595d66ca79SJonathan Marek 	},
13605d66ca79SJonathan Marek };
13615d66ca79SJonathan Marek 
13625d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy3_clk = {
13635d66ca79SJonathan Marek 	.halt_reg = 0x607c,
13645d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
13655d66ca79SJonathan Marek 	.clkr = {
13665d66ca79SJonathan Marek 		.enable_reg = 0x607c,
13675d66ca79SJonathan Marek 		.enable_mask = BIT(0),
13685d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
13695d66ca79SJonathan Marek 			.name = "cam_cc_csiphy3_clk",
13705d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
13715d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
13725d66ca79SJonathan Marek 			},
13735d66ca79SJonathan Marek 			.num_parents = 1,
13745d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13755d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13765d66ca79SJonathan Marek 		},
13775d66ca79SJonathan Marek 	},
13785d66ca79SJonathan Marek };
13795d66ca79SJonathan Marek 
13805d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy4_clk = {
13815d66ca79SJonathan Marek 	.halt_reg = 0x609c,
13825d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
13835d66ca79SJonathan Marek 	.clkr = {
13845d66ca79SJonathan Marek 		.enable_reg = 0x609c,
13855d66ca79SJonathan Marek 		.enable_mask = BIT(0),
13865d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
13875d66ca79SJonathan Marek 			.name = "cam_cc_csiphy4_clk",
13885d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
13895d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
13905d66ca79SJonathan Marek 			},
13915d66ca79SJonathan Marek 			.num_parents = 1,
13925d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
13935d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
13945d66ca79SJonathan Marek 		},
13955d66ca79SJonathan Marek 	},
13965d66ca79SJonathan Marek };
13975d66ca79SJonathan Marek 
13985d66ca79SJonathan Marek static struct clk_branch cam_cc_csiphy5_clk = {
13995d66ca79SJonathan Marek 	.halt_reg = 0x60bc,
14005d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14015d66ca79SJonathan Marek 	.clkr = {
14025d66ca79SJonathan Marek 		.enable_reg = 0x60bc,
14035d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14045d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14055d66ca79SJonathan Marek 			.name = "cam_cc_csiphy5_clk",
14065d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14075d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
14085d66ca79SJonathan Marek 			},
14095d66ca79SJonathan Marek 			.num_parents = 1,
14105d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
14115d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
14125d66ca79SJonathan Marek 		},
14135d66ca79SJonathan Marek 	},
14145d66ca79SJonathan Marek };
14155d66ca79SJonathan Marek 
14165d66ca79SJonathan Marek static struct clk_branch cam_cc_fd_core_clk = {
14175d66ca79SJonathan Marek 	.halt_reg = 0xc0b0,
14185d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14195d66ca79SJonathan Marek 	.clkr = {
14205d66ca79SJonathan Marek 		.enable_reg = 0xc0b0,
14215d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14225d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14235d66ca79SJonathan Marek 			.name = "cam_cc_fd_core_clk",
14245d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14255d66ca79SJonathan Marek 				&cam_cc_fd_core_clk_src.clkr.hw
14265d66ca79SJonathan Marek 			},
14275d66ca79SJonathan Marek 			.num_parents = 1,
14285d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
14295d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
14305d66ca79SJonathan Marek 		},
14315d66ca79SJonathan Marek 	},
14325d66ca79SJonathan Marek };
14335d66ca79SJonathan Marek 
14345d66ca79SJonathan Marek static struct clk_branch cam_cc_fd_core_uar_clk = {
14355d66ca79SJonathan Marek 	.halt_reg = 0xc0b8,
14365d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14375d66ca79SJonathan Marek 	.clkr = {
14385d66ca79SJonathan Marek 		.enable_reg = 0xc0b8,
14395d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14405d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14415d66ca79SJonathan Marek 			.name = "cam_cc_fd_core_uar_clk",
14425d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14435d66ca79SJonathan Marek 				&cam_cc_fd_core_clk_src.clkr.hw
14445d66ca79SJonathan Marek 			},
14455d66ca79SJonathan Marek 			.num_parents = 1,
14465d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
14475d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
14485d66ca79SJonathan Marek 		},
14495d66ca79SJonathan Marek 	},
14505d66ca79SJonathan Marek };
14515d66ca79SJonathan Marek 
14525d66ca79SJonathan Marek static struct clk_branch cam_cc_gdsc_clk = {
14535d66ca79SJonathan Marek 	.halt_reg = 0xc16c,
14545d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14555d66ca79SJonathan Marek 	.clkr = {
14565d66ca79SJonathan Marek 		.enable_reg = 0xc16c,
14575d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14585d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14595d66ca79SJonathan Marek 			.name = "cam_cc_gdsc_clk",
14605d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14615d66ca79SJonathan Marek 				&cam_cc_xo_clk_src.clkr.hw
14625d66ca79SJonathan Marek 			},
14635d66ca79SJonathan Marek 			.num_parents = 1,
14645d66ca79SJonathan Marek 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
14655d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
14665d66ca79SJonathan Marek 		},
14675d66ca79SJonathan Marek 	},
14685d66ca79SJonathan Marek };
14695d66ca79SJonathan Marek 
14705d66ca79SJonathan Marek static struct clk_branch cam_cc_icp_ahb_clk = {
14715d66ca79SJonathan Marek 	.halt_reg = 0xc094,
14725d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14735d66ca79SJonathan Marek 	.clkr = {
14745d66ca79SJonathan Marek 		.enable_reg = 0xc094,
14755d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14765d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14775d66ca79SJonathan Marek 			.name = "cam_cc_icp_ahb_clk",
14785d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14795d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
14805d66ca79SJonathan Marek 			},
14815d66ca79SJonathan Marek 			.num_parents = 1,
14825d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
14835d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
14845d66ca79SJonathan Marek 		},
14855d66ca79SJonathan Marek 	},
14865d66ca79SJonathan Marek };
14875d66ca79SJonathan Marek 
14885d66ca79SJonathan Marek static struct clk_branch cam_cc_icp_clk = {
14895d66ca79SJonathan Marek 	.halt_reg = 0xc08c,
14905d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
14915d66ca79SJonathan Marek 	.clkr = {
14925d66ca79SJonathan Marek 		.enable_reg = 0xc08c,
14935d66ca79SJonathan Marek 		.enable_mask = BIT(0),
14945d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
14955d66ca79SJonathan Marek 			.name = "cam_cc_icp_clk",
14965d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
14975d66ca79SJonathan Marek 				&cam_cc_icp_clk_src.clkr.hw
14985d66ca79SJonathan Marek 			},
14995d66ca79SJonathan Marek 			.num_parents = 1,
15005d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15015d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15025d66ca79SJonathan Marek 		},
15035d66ca79SJonathan Marek 	},
15045d66ca79SJonathan Marek };
15055d66ca79SJonathan Marek 
15065d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_ahb_clk = {
15075d66ca79SJonathan Marek 	.halt_reg = 0xa088,
15085d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15095d66ca79SJonathan Marek 	.clkr = {
15105d66ca79SJonathan Marek 		.enable_reg = 0xa088,
15115d66ca79SJonathan Marek 		.enable_mask = BIT(0),
15125d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
15135d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_ahb_clk",
15145d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
15155d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
15165d66ca79SJonathan Marek 			},
15175d66ca79SJonathan Marek 			.num_parents = 1,
15185d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15195d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15205d66ca79SJonathan Marek 		},
15215d66ca79SJonathan Marek 	},
15225d66ca79SJonathan Marek };
15235d66ca79SJonathan Marek 
15245d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_areg_clk = {
15255d66ca79SJonathan Marek 	.halt_reg = 0xa030,
15265d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15275d66ca79SJonathan Marek 	.clkr = {
15285d66ca79SJonathan Marek 		.enable_reg = 0xa030,
15295d66ca79SJonathan Marek 		.enable_mask = BIT(0),
15305d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
15315d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_areg_clk",
15325d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
15335d66ca79SJonathan Marek 				&cam_cc_fast_ahb_clk_src.clkr.hw
15345d66ca79SJonathan Marek 			},
15355d66ca79SJonathan Marek 			.num_parents = 1,
15365d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15375d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15385d66ca79SJonathan Marek 		},
15395d66ca79SJonathan Marek 	},
15405d66ca79SJonathan Marek };
15415d66ca79SJonathan Marek 
15425d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_axi_clk = {
15435d66ca79SJonathan Marek 	.halt_reg = 0xa084,
15445d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15455d66ca79SJonathan Marek 	.clkr = {
15465d66ca79SJonathan Marek 		.enable_reg = 0xa084,
15475d66ca79SJonathan Marek 		.enable_mask = BIT(0),
15485d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
15495d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_axi_clk",
15505d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
15515d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
15525d66ca79SJonathan Marek 			},
15535d66ca79SJonathan Marek 			.num_parents = 1,
15545d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15555d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15565d66ca79SJonathan Marek 		},
15575d66ca79SJonathan Marek 	},
15585d66ca79SJonathan Marek };
15595d66ca79SJonathan Marek 
15605d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_clk = {
15615d66ca79SJonathan Marek 	.halt_reg = 0xa028,
15625d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15635d66ca79SJonathan Marek 	.clkr = {
15645d66ca79SJonathan Marek 		.enable_reg = 0xa028,
15655d66ca79SJonathan Marek 		.enable_mask = BIT(0),
15665d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
15675d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_clk",
15685d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
15695d66ca79SJonathan Marek 				&cam_cc_ife_0_clk_src.clkr.hw
15705d66ca79SJonathan Marek 			},
15715d66ca79SJonathan Marek 			.num_parents = 1,
15725d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15735d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15745d66ca79SJonathan Marek 		},
15755d66ca79SJonathan Marek 	},
15765d66ca79SJonathan Marek };
15775d66ca79SJonathan Marek 
15785d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
15795d66ca79SJonathan Marek 	.halt_reg = 0xa080,
15805d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15815d66ca79SJonathan Marek 	.clkr = {
15825d66ca79SJonathan Marek 		.enable_reg = 0xa080,
15835d66ca79SJonathan Marek 		.enable_mask = BIT(0),
15845d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
15855d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_cphy_rx_clk",
15865d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
15875d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
15885d66ca79SJonathan Marek 			},
15895d66ca79SJonathan Marek 			.num_parents = 1,
15905d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
15915d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
15925d66ca79SJonathan Marek 		},
15935d66ca79SJonathan Marek 	},
15945d66ca79SJonathan Marek };
15955d66ca79SJonathan Marek 
15965d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_csid_clk = {
15975d66ca79SJonathan Marek 	.halt_reg = 0xa058,
15985d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
15995d66ca79SJonathan Marek 	.clkr = {
16005d66ca79SJonathan Marek 		.enable_reg = 0xa058,
16015d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16025d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16035d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_csid_clk",
16045d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16055d66ca79SJonathan Marek 				&cam_cc_ife_0_csid_clk_src.clkr.hw
16065d66ca79SJonathan Marek 			},
16075d66ca79SJonathan Marek 			.num_parents = 1,
16085d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16095d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
16105d66ca79SJonathan Marek 		},
16115d66ca79SJonathan Marek 	},
16125d66ca79SJonathan Marek };
16135d66ca79SJonathan Marek 
16145d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_0_dsp_clk = {
16155d66ca79SJonathan Marek 	.halt_reg = 0xa03c,
16165d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
16175d66ca79SJonathan Marek 	.clkr = {
16185d66ca79SJonathan Marek 		.enable_reg = 0xa03c,
16195d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16205d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16215d66ca79SJonathan Marek 			.name = "cam_cc_ife_0_dsp_clk",
16225d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16235d66ca79SJonathan Marek 				&cam_cc_ife_0_clk_src.clkr.hw
16245d66ca79SJonathan Marek 			},
16255d66ca79SJonathan Marek 			.num_parents = 1,
16265d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16275d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
16285d66ca79SJonathan Marek 		},
16295d66ca79SJonathan Marek 	},
16305d66ca79SJonathan Marek };
16315d66ca79SJonathan Marek 
16325d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_ahb_clk = {
16335d66ca79SJonathan Marek 	.halt_reg = 0xb068,
16345d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
16355d66ca79SJonathan Marek 	.clkr = {
16365d66ca79SJonathan Marek 		.enable_reg = 0xb068,
16375d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16385d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16395d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_ahb_clk",
16405d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16415d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
16425d66ca79SJonathan Marek 			},
16435d66ca79SJonathan Marek 			.num_parents = 1,
16445d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16455d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
16465d66ca79SJonathan Marek 		},
16475d66ca79SJonathan Marek 	},
16485d66ca79SJonathan Marek };
16495d66ca79SJonathan Marek 
16505d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_areg_clk = {
16515d66ca79SJonathan Marek 	.halt_reg = 0xb030,
16525d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
16535d66ca79SJonathan Marek 	.clkr = {
16545d66ca79SJonathan Marek 		.enable_reg = 0xb030,
16555d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16565d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16575d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_areg_clk",
16585d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16595d66ca79SJonathan Marek 				&cam_cc_fast_ahb_clk_src.clkr.hw
16605d66ca79SJonathan Marek 			},
16615d66ca79SJonathan Marek 			.num_parents = 1,
16625d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16635d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
16645d66ca79SJonathan Marek 		},
16655d66ca79SJonathan Marek 	},
16665d66ca79SJonathan Marek };
16675d66ca79SJonathan Marek 
16685d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_axi_clk = {
16695d66ca79SJonathan Marek 	.halt_reg = 0xb064,
16705d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
16715d66ca79SJonathan Marek 	.clkr = {
16725d66ca79SJonathan Marek 		.enable_reg = 0xb064,
16735d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16745d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16755d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_axi_clk",
16765d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16775d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
16785d66ca79SJonathan Marek 			},
16795d66ca79SJonathan Marek 			.num_parents = 1,
16805d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16815d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
16825d66ca79SJonathan Marek 		},
16835d66ca79SJonathan Marek 	},
16845d66ca79SJonathan Marek };
16855d66ca79SJonathan Marek 
16865d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_clk = {
16875d66ca79SJonathan Marek 	.halt_reg = 0xb028,
16885d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
16895d66ca79SJonathan Marek 	.clkr = {
16905d66ca79SJonathan Marek 		.enable_reg = 0xb028,
16915d66ca79SJonathan Marek 		.enable_mask = BIT(0),
16925d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
16935d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_clk",
16945d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
16955d66ca79SJonathan Marek 				&cam_cc_ife_1_clk_src.clkr.hw
16965d66ca79SJonathan Marek 			},
16975d66ca79SJonathan Marek 			.num_parents = 1,
16985d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
16995d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17005d66ca79SJonathan Marek 		},
17015d66ca79SJonathan Marek 	},
17025d66ca79SJonathan Marek };
17035d66ca79SJonathan Marek 
17045d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
17055d66ca79SJonathan Marek 	.halt_reg = 0xb060,
17065d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17075d66ca79SJonathan Marek 	.clkr = {
17085d66ca79SJonathan Marek 		.enable_reg = 0xb060,
17095d66ca79SJonathan Marek 		.enable_mask = BIT(0),
17105d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
17115d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_cphy_rx_clk",
17125d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
17135d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
17145d66ca79SJonathan Marek 			},
17155d66ca79SJonathan Marek 			.num_parents = 1,
17165d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
17175d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17185d66ca79SJonathan Marek 		},
17195d66ca79SJonathan Marek 	},
17205d66ca79SJonathan Marek };
17215d66ca79SJonathan Marek 
17225d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_csid_clk = {
17235d66ca79SJonathan Marek 	.halt_reg = 0xb058,
17245d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17255d66ca79SJonathan Marek 	.clkr = {
17265d66ca79SJonathan Marek 		.enable_reg = 0xb058,
17275d66ca79SJonathan Marek 		.enable_mask = BIT(0),
17285d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
17295d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_csid_clk",
17305d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
17315d66ca79SJonathan Marek 				&cam_cc_ife_1_csid_clk_src.clkr.hw
17325d66ca79SJonathan Marek 			},
17335d66ca79SJonathan Marek 			.num_parents = 1,
17345d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
17355d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17365d66ca79SJonathan Marek 		},
17375d66ca79SJonathan Marek 	},
17385d66ca79SJonathan Marek };
17395d66ca79SJonathan Marek 
17405d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_1_dsp_clk = {
17415d66ca79SJonathan Marek 	.halt_reg = 0xb03c,
17425d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17435d66ca79SJonathan Marek 	.clkr = {
17445d66ca79SJonathan Marek 		.enable_reg = 0xb03c,
17455d66ca79SJonathan Marek 		.enable_mask = BIT(0),
17465d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
17475d66ca79SJonathan Marek 			.name = "cam_cc_ife_1_dsp_clk",
17485d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
17495d66ca79SJonathan Marek 				&cam_cc_ife_1_clk_src.clkr.hw
17505d66ca79SJonathan Marek 			},
17515d66ca79SJonathan Marek 			.num_parents = 1,
17525d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
17535d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17545d66ca79SJonathan Marek 		},
17555d66ca79SJonathan Marek 	},
17565d66ca79SJonathan Marek };
17575d66ca79SJonathan Marek 
17585d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_lite_ahb_clk = {
17595d66ca79SJonathan Marek 	.halt_reg = 0xc040,
17605d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17615d66ca79SJonathan Marek 	.clkr = {
17625d66ca79SJonathan Marek 		.enable_reg = 0xc040,
17635d66ca79SJonathan Marek 		.enable_mask = BIT(0),
17645d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
17655d66ca79SJonathan Marek 			.name = "cam_cc_ife_lite_ahb_clk",
17665d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
17675d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
17685d66ca79SJonathan Marek 			},
17695d66ca79SJonathan Marek 			.num_parents = 1,
17705d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
17715d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17725d66ca79SJonathan Marek 		},
17735d66ca79SJonathan Marek 	},
17745d66ca79SJonathan Marek };
17755d66ca79SJonathan Marek 
17765d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_lite_axi_clk = {
17775d66ca79SJonathan Marek 	.halt_reg = 0xc044,
17785d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17795d66ca79SJonathan Marek 	.clkr = {
17805d66ca79SJonathan Marek 		.enable_reg = 0xc044,
17815d66ca79SJonathan Marek 		.enable_mask = BIT(0),
17825d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
17835d66ca79SJonathan Marek 			.name = "cam_cc_ife_lite_axi_clk",
17845d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
17855d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
17865d66ca79SJonathan Marek 			},
17875d66ca79SJonathan Marek 			.num_parents = 1,
17885d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
17895d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
17905d66ca79SJonathan Marek 		},
17915d66ca79SJonathan Marek 	},
17925d66ca79SJonathan Marek };
17935d66ca79SJonathan Marek 
17945d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_lite_clk = {
17955d66ca79SJonathan Marek 	.halt_reg = 0xc018,
17965d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
17975d66ca79SJonathan Marek 	.clkr = {
17985d66ca79SJonathan Marek 		.enable_reg = 0xc018,
17995d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18005d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18015d66ca79SJonathan Marek 			.name = "cam_cc_ife_lite_clk",
18025d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18035d66ca79SJonathan Marek 				&cam_cc_ife_lite_clk_src.clkr.hw
18045d66ca79SJonathan Marek 			},
18055d66ca79SJonathan Marek 			.num_parents = 1,
18065d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18075d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18085d66ca79SJonathan Marek 		},
18095d66ca79SJonathan Marek 	},
18105d66ca79SJonathan Marek };
18115d66ca79SJonathan Marek 
18125d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
18135d66ca79SJonathan Marek 	.halt_reg = 0xc03c,
18145d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
18155d66ca79SJonathan Marek 	.clkr = {
18165d66ca79SJonathan Marek 		.enable_reg = 0xc03c,
18175d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18185d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18195d66ca79SJonathan Marek 			.name = "cam_cc_ife_lite_cphy_rx_clk",
18205d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18215d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
18225d66ca79SJonathan Marek 			},
18235d66ca79SJonathan Marek 			.num_parents = 1,
18245d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18255d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18265d66ca79SJonathan Marek 		},
18275d66ca79SJonathan Marek 	},
18285d66ca79SJonathan Marek };
18295d66ca79SJonathan Marek 
18305d66ca79SJonathan Marek static struct clk_branch cam_cc_ife_lite_csid_clk = {
18315d66ca79SJonathan Marek 	.halt_reg = 0xc034,
18325d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
18335d66ca79SJonathan Marek 	.clkr = {
18345d66ca79SJonathan Marek 		.enable_reg = 0xc034,
18355d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18365d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18375d66ca79SJonathan Marek 			.name = "cam_cc_ife_lite_csid_clk",
18385d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18395d66ca79SJonathan Marek 				&cam_cc_ife_lite_csid_clk_src.clkr.hw
18405d66ca79SJonathan Marek 			},
18415d66ca79SJonathan Marek 			.num_parents = 1,
18425d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18435d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18445d66ca79SJonathan Marek 		},
18455d66ca79SJonathan Marek 	},
18465d66ca79SJonathan Marek };
18475d66ca79SJonathan Marek 
18485d66ca79SJonathan Marek static struct clk_branch cam_cc_ipe_0_ahb_clk = {
18495d66ca79SJonathan Marek 	.halt_reg = 0x8040,
18505d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
18515d66ca79SJonathan Marek 	.clkr = {
18525d66ca79SJonathan Marek 		.enable_reg = 0x8040,
18535d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18545d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18555d66ca79SJonathan Marek 			.name = "cam_cc_ipe_0_ahb_clk",
18565d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18575d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
18585d66ca79SJonathan Marek 			},
18595d66ca79SJonathan Marek 			.num_parents = 1,
18605d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18615d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18625d66ca79SJonathan Marek 		},
18635d66ca79SJonathan Marek 	},
18645d66ca79SJonathan Marek };
18655d66ca79SJonathan Marek 
18665d66ca79SJonathan Marek static struct clk_branch cam_cc_ipe_0_areg_clk = {
18675d66ca79SJonathan Marek 	.halt_reg = 0x803c,
18685d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
18695d66ca79SJonathan Marek 	.clkr = {
18705d66ca79SJonathan Marek 		.enable_reg = 0x803c,
18715d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18725d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18735d66ca79SJonathan Marek 			.name = "cam_cc_ipe_0_areg_clk",
18745d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18755d66ca79SJonathan Marek 				&cam_cc_fast_ahb_clk_src.clkr.hw
18765d66ca79SJonathan Marek 			},
18775d66ca79SJonathan Marek 			.num_parents = 1,
18785d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18795d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18805d66ca79SJonathan Marek 		},
18815d66ca79SJonathan Marek 	},
18825d66ca79SJonathan Marek };
18835d66ca79SJonathan Marek 
18845d66ca79SJonathan Marek static struct clk_branch cam_cc_ipe_0_axi_clk = {
18855d66ca79SJonathan Marek 	.halt_reg = 0x8038,
18865d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
18875d66ca79SJonathan Marek 	.clkr = {
18885d66ca79SJonathan Marek 		.enable_reg = 0x8038,
18895d66ca79SJonathan Marek 		.enable_mask = BIT(0),
18905d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
18915d66ca79SJonathan Marek 			.name = "cam_cc_ipe_0_axi_clk",
18925d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
18935d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
18945d66ca79SJonathan Marek 			},
18955d66ca79SJonathan Marek 			.num_parents = 1,
18965d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
18975d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
18985d66ca79SJonathan Marek 		},
18995d66ca79SJonathan Marek 	},
19005d66ca79SJonathan Marek };
19015d66ca79SJonathan Marek 
19025d66ca79SJonathan Marek static struct clk_branch cam_cc_ipe_0_clk = {
19035d66ca79SJonathan Marek 	.halt_reg = 0x8028,
19045d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19055d66ca79SJonathan Marek 	.clkr = {
19065d66ca79SJonathan Marek 		.enable_reg = 0x8028,
19075d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19085d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19095d66ca79SJonathan Marek 			.name = "cam_cc_ipe_0_clk",
19105d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
19115d66ca79SJonathan Marek 				&cam_cc_ipe_0_clk_src.clkr.hw
19125d66ca79SJonathan Marek 			},
19135d66ca79SJonathan Marek 			.num_parents = 1,
19145d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
19155d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
19165d66ca79SJonathan Marek 		},
19175d66ca79SJonathan Marek 	},
19185d66ca79SJonathan Marek };
19195d66ca79SJonathan Marek 
19205d66ca79SJonathan Marek static struct clk_branch cam_cc_jpeg_clk = {
19215d66ca79SJonathan Marek 	.halt_reg = 0xc060,
19225d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19235d66ca79SJonathan Marek 	.clkr = {
19245d66ca79SJonathan Marek 		.enable_reg = 0xc060,
19255d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19265d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19275d66ca79SJonathan Marek 			.name = "cam_cc_jpeg_clk",
19285d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
19295d66ca79SJonathan Marek 				&cam_cc_jpeg_clk_src.clkr.hw
19305d66ca79SJonathan Marek 			},
19315d66ca79SJonathan Marek 			.num_parents = 1,
19325d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
19335d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
19345d66ca79SJonathan Marek 		},
19355d66ca79SJonathan Marek 	},
19365d66ca79SJonathan Marek };
19375d66ca79SJonathan Marek 
19385d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk0_clk = {
19395d66ca79SJonathan Marek 	.halt_reg = 0x5018,
19405d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19415d66ca79SJonathan Marek 	.clkr = {
19425d66ca79SJonathan Marek 		.enable_reg = 0x5018,
19435d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19445d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19455d66ca79SJonathan Marek 			.name = "cam_cc_mclk0_clk",
19465d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
19475d66ca79SJonathan Marek 				&cam_cc_mclk0_clk_src.clkr.hw
19485d66ca79SJonathan Marek 			},
19495d66ca79SJonathan Marek 			.num_parents = 1,
19505d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
19515d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
19525d66ca79SJonathan Marek 		},
19535d66ca79SJonathan Marek 	},
19545d66ca79SJonathan Marek };
19555d66ca79SJonathan Marek 
19565d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk1_clk = {
19575d66ca79SJonathan Marek 	.halt_reg = 0x5034,
19585d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19595d66ca79SJonathan Marek 	.clkr = {
19605d66ca79SJonathan Marek 		.enable_reg = 0x5034,
19615d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19625d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19635d66ca79SJonathan Marek 			.name = "cam_cc_mclk1_clk",
19645d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
19655d66ca79SJonathan Marek 				&cam_cc_mclk1_clk_src.clkr.hw
19665d66ca79SJonathan Marek 			},
19675d66ca79SJonathan Marek 			.num_parents = 1,
19685d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
19695d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
19705d66ca79SJonathan Marek 		},
19715d66ca79SJonathan Marek 	},
19725d66ca79SJonathan Marek };
19735d66ca79SJonathan Marek 
19745d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk2_clk = {
19755d66ca79SJonathan Marek 	.halt_reg = 0x5050,
19765d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19775d66ca79SJonathan Marek 	.clkr = {
19785d66ca79SJonathan Marek 		.enable_reg = 0x5050,
19795d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19805d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19815d66ca79SJonathan Marek 			.name = "cam_cc_mclk2_clk",
19825d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
19835d66ca79SJonathan Marek 				&cam_cc_mclk2_clk_src.clkr.hw
19845d66ca79SJonathan Marek 			},
19855d66ca79SJonathan Marek 			.num_parents = 1,
19865d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
19875d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
19885d66ca79SJonathan Marek 		},
19895d66ca79SJonathan Marek 	},
19905d66ca79SJonathan Marek };
19915d66ca79SJonathan Marek 
19925d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk3_clk = {
19935d66ca79SJonathan Marek 	.halt_reg = 0x506c,
19945d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
19955d66ca79SJonathan Marek 	.clkr = {
19965d66ca79SJonathan Marek 		.enable_reg = 0x506c,
19975d66ca79SJonathan Marek 		.enable_mask = BIT(0),
19985d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
19995d66ca79SJonathan Marek 			.name = "cam_cc_mclk3_clk",
20005d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20015d66ca79SJonathan Marek 				&cam_cc_mclk3_clk_src.clkr.hw
20025d66ca79SJonathan Marek 			},
20035d66ca79SJonathan Marek 			.num_parents = 1,
20045d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20055d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20065d66ca79SJonathan Marek 		},
20075d66ca79SJonathan Marek 	},
20085d66ca79SJonathan Marek };
20095d66ca79SJonathan Marek 
20105d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk4_clk = {
20115d66ca79SJonathan Marek 	.halt_reg = 0x5088,
20125d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
20135d66ca79SJonathan Marek 	.clkr = {
20145d66ca79SJonathan Marek 		.enable_reg = 0x5088,
20155d66ca79SJonathan Marek 		.enable_mask = BIT(0),
20165d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
20175d66ca79SJonathan Marek 			.name = "cam_cc_mclk4_clk",
20185d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20195d66ca79SJonathan Marek 				&cam_cc_mclk4_clk_src.clkr.hw
20205d66ca79SJonathan Marek 			},
20215d66ca79SJonathan Marek 			.num_parents = 1,
20225d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20235d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20245d66ca79SJonathan Marek 		},
20255d66ca79SJonathan Marek 	},
20265d66ca79SJonathan Marek };
20275d66ca79SJonathan Marek 
20285d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk5_clk = {
20295d66ca79SJonathan Marek 	.halt_reg = 0x50a4,
20305d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
20315d66ca79SJonathan Marek 	.clkr = {
20325d66ca79SJonathan Marek 		.enable_reg = 0x50a4,
20335d66ca79SJonathan Marek 		.enable_mask = BIT(0),
20345d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
20355d66ca79SJonathan Marek 			.name = "cam_cc_mclk5_clk",
20365d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20375d66ca79SJonathan Marek 				&cam_cc_mclk5_clk_src.clkr.hw
20385d66ca79SJonathan Marek 			},
20395d66ca79SJonathan Marek 			.num_parents = 1,
20405d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20415d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20425d66ca79SJonathan Marek 		},
20435d66ca79SJonathan Marek 	},
20445d66ca79SJonathan Marek };
20455d66ca79SJonathan Marek 
20465d66ca79SJonathan Marek static struct clk_branch cam_cc_mclk6_clk = {
20475d66ca79SJonathan Marek 	.halt_reg = 0x50c0,
20485d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
20495d66ca79SJonathan Marek 	.clkr = {
20505d66ca79SJonathan Marek 		.enable_reg = 0x50c0,
20515d66ca79SJonathan Marek 		.enable_mask = BIT(0),
20525d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
20535d66ca79SJonathan Marek 			.name = "cam_cc_mclk6_clk",
20545d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20555d66ca79SJonathan Marek 				&cam_cc_mclk6_clk_src.clkr.hw
20565d66ca79SJonathan Marek 			},
20575d66ca79SJonathan Marek 			.num_parents = 1,
20585d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20595d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20605d66ca79SJonathan Marek 		},
20615d66ca79SJonathan Marek 	},
20625d66ca79SJonathan Marek };
20635d66ca79SJonathan Marek 
20645d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_ahb_clk = {
20655d66ca79SJonathan Marek 	.halt_reg = 0x9040,
20665d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
20675d66ca79SJonathan Marek 	.clkr = {
20685d66ca79SJonathan Marek 		.enable_reg = 0x9040,
20695d66ca79SJonathan Marek 		.enable_mask = BIT(0),
20705d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
20715d66ca79SJonathan Marek 			.name = "cam_cc_sbi_ahb_clk",
20725d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20735d66ca79SJonathan Marek 				&cam_cc_slow_ahb_clk_src.clkr.hw
20745d66ca79SJonathan Marek 			},
20755d66ca79SJonathan Marek 			.num_parents = 1,
20765d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20775d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20785d66ca79SJonathan Marek 		},
20795d66ca79SJonathan Marek 	},
20805d66ca79SJonathan Marek };
20815d66ca79SJonathan Marek 
20825d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_axi_clk = {
20835d66ca79SJonathan Marek 	.halt_reg = 0x903c,
20845d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
20855d66ca79SJonathan Marek 	.clkr = {
20865d66ca79SJonathan Marek 		.enable_reg = 0x903c,
20875d66ca79SJonathan Marek 		.enable_mask = BIT(0),
20885d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
20895d66ca79SJonathan Marek 			.name = "cam_cc_sbi_axi_clk",
20905d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
20915d66ca79SJonathan Marek 				&cam_cc_camnoc_axi_clk_src.clkr.hw
20925d66ca79SJonathan Marek 			},
20935d66ca79SJonathan Marek 			.num_parents = 1,
20945d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
20955d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
20965d66ca79SJonathan Marek 		},
20975d66ca79SJonathan Marek 	},
20985d66ca79SJonathan Marek };
20995d66ca79SJonathan Marek 
21005d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_clk = {
21015d66ca79SJonathan Marek 	.halt_reg = 0x9014,
21025d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21035d66ca79SJonathan Marek 	.clkr = {
21045d66ca79SJonathan Marek 		.enable_reg = 0x9014,
21055d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21065d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21075d66ca79SJonathan Marek 			.name = "cam_cc_sbi_clk",
21085d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21095d66ca79SJonathan Marek 				&cam_cc_sbi_div_clk_src.clkr.hw
21105d66ca79SJonathan Marek 			},
21115d66ca79SJonathan Marek 			.num_parents = 1,
21125d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
21135d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
21145d66ca79SJonathan Marek 		},
21155d66ca79SJonathan Marek 	},
21165d66ca79SJonathan Marek };
21175d66ca79SJonathan Marek 
21185d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_cphy_rx_clk = {
21195d66ca79SJonathan Marek 	.halt_reg = 0x9038,
21205d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21215d66ca79SJonathan Marek 	.clkr = {
21225d66ca79SJonathan Marek 		.enable_reg = 0x9038,
21235d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21245d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21255d66ca79SJonathan Marek 			.name = "cam_cc_sbi_cphy_rx_clk",
21265d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21275d66ca79SJonathan Marek 				&cam_cc_cphy_rx_clk_src.clkr.hw
21285d66ca79SJonathan Marek 			},
21295d66ca79SJonathan Marek 			.num_parents = 1,
21305d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
21315d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
21325d66ca79SJonathan Marek 		},
21335d66ca79SJonathan Marek 	},
21345d66ca79SJonathan Marek };
21355d66ca79SJonathan Marek 
21365d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_csid_clk = {
21375d66ca79SJonathan Marek 	.halt_reg = 0x9034,
21385d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21395d66ca79SJonathan Marek 	.clkr = {
21405d66ca79SJonathan Marek 		.enable_reg = 0x9034,
21415d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21425d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21435d66ca79SJonathan Marek 			.name = "cam_cc_sbi_csid_clk",
21445d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21455d66ca79SJonathan Marek 				&cam_cc_sbi_csid_clk_src.clkr.hw
21465d66ca79SJonathan Marek 			},
21475d66ca79SJonathan Marek 			.num_parents = 1,
21485d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
21495d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
21505d66ca79SJonathan Marek 		},
21515d66ca79SJonathan Marek 	},
21525d66ca79SJonathan Marek };
21535d66ca79SJonathan Marek 
21545d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_ife_0_clk = {
21555d66ca79SJonathan Marek 	.halt_reg = 0x9044,
21565d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21575d66ca79SJonathan Marek 	.clkr = {
21585d66ca79SJonathan Marek 		.enable_reg = 0x9044,
21595d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21605d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21615d66ca79SJonathan Marek 			.name = "cam_cc_sbi_ife_0_clk",
21625d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21635d66ca79SJonathan Marek 				&cam_cc_ife_0_clk_src.clkr.hw
21645d66ca79SJonathan Marek 			},
21655d66ca79SJonathan Marek 			.num_parents = 1,
21665d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
21675d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
21685d66ca79SJonathan Marek 		},
21695d66ca79SJonathan Marek 	},
21705d66ca79SJonathan Marek };
21715d66ca79SJonathan Marek 
21725d66ca79SJonathan Marek static struct clk_branch cam_cc_sbi_ife_1_clk = {
21735d66ca79SJonathan Marek 	.halt_reg = 0x9048,
21745d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21755d66ca79SJonathan Marek 	.clkr = {
21765d66ca79SJonathan Marek 		.enable_reg = 0x9048,
21775d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21785d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21795d66ca79SJonathan Marek 			.name = "cam_cc_sbi_ife_1_clk",
21805d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21815d66ca79SJonathan Marek 				&cam_cc_ife_1_clk_src.clkr.hw
21825d66ca79SJonathan Marek 			},
21835d66ca79SJonathan Marek 			.num_parents = 1,
21845d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
21855d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
21865d66ca79SJonathan Marek 		},
21875d66ca79SJonathan Marek 	},
21885d66ca79SJonathan Marek };
21895d66ca79SJonathan Marek 
21905d66ca79SJonathan Marek static struct clk_branch cam_cc_sleep_clk = {
21915d66ca79SJonathan Marek 	.halt_reg = 0xc188,
21925d66ca79SJonathan Marek 	.halt_check = BRANCH_HALT,
21935d66ca79SJonathan Marek 	.clkr = {
21945d66ca79SJonathan Marek 		.enable_reg = 0xc188,
21955d66ca79SJonathan Marek 		.enable_mask = BIT(0),
21965d66ca79SJonathan Marek 		.hw.init = &(struct clk_init_data){
21975d66ca79SJonathan Marek 			.name = "cam_cc_sleep_clk",
21985d66ca79SJonathan Marek 			.parent_hws = (const struct clk_hw*[]){
21995d66ca79SJonathan Marek 				&cam_cc_sleep_clk_src.clkr.hw
22005d66ca79SJonathan Marek 			},
22015d66ca79SJonathan Marek 			.num_parents = 1,
22025d66ca79SJonathan Marek 			.flags = CLK_SET_RATE_PARENT,
22035d66ca79SJonathan Marek 			.ops = &clk_branch2_ops,
22045d66ca79SJonathan Marek 		},
22055d66ca79SJonathan Marek 	},
22065d66ca79SJonathan Marek };
22075d66ca79SJonathan Marek 
2208*433a2210SVladimir Zapolskiy static struct gdsc titan_top_gdsc;
2209*433a2210SVladimir Zapolskiy 
22105d66ca79SJonathan Marek static struct gdsc bps_gdsc = {
22115d66ca79SJonathan Marek 	.gdscr = 0x7004,
22125d66ca79SJonathan Marek 	.pd = {
22135d66ca79SJonathan Marek 		.name = "bps_gdsc",
22145d66ca79SJonathan Marek 	},
22155d66ca79SJonathan Marek 	.flags = HW_CTRL | POLL_CFG_GDSCR,
22165d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22175d66ca79SJonathan Marek };
22185d66ca79SJonathan Marek 
22195d66ca79SJonathan Marek static struct gdsc ipe_0_gdsc = {
22205d66ca79SJonathan Marek 	.gdscr = 0x8004,
22215d66ca79SJonathan Marek 	.pd = {
22225d66ca79SJonathan Marek 		.name = "ipe_0_gdsc",
22235d66ca79SJonathan Marek 	},
22245d66ca79SJonathan Marek 	.flags = HW_CTRL | POLL_CFG_GDSCR,
22255d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22265d66ca79SJonathan Marek };
22275d66ca79SJonathan Marek 
22285d66ca79SJonathan Marek static struct gdsc sbi_gdsc = {
22295d66ca79SJonathan Marek 	.gdscr = 0x9004,
22305d66ca79SJonathan Marek 	.pd = {
22315d66ca79SJonathan Marek 		.name = "sbi_gdsc",
22325d66ca79SJonathan Marek 	},
22335d66ca79SJonathan Marek 	.flags = HW_CTRL | POLL_CFG_GDSCR,
22345d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22355d66ca79SJonathan Marek };
22365d66ca79SJonathan Marek 
22375d66ca79SJonathan Marek static struct gdsc ife_0_gdsc = {
22385d66ca79SJonathan Marek 	.gdscr = 0xa004,
22395d66ca79SJonathan Marek 	.pd = {
22405d66ca79SJonathan Marek 		.name = "ife_0_gdsc",
22415d66ca79SJonathan Marek 	},
22425d66ca79SJonathan Marek 	.flags = POLL_CFG_GDSCR,
2243*433a2210SVladimir Zapolskiy 	.parent = &titan_top_gdsc.pd,
22445d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22455d66ca79SJonathan Marek };
22465d66ca79SJonathan Marek 
22475d66ca79SJonathan Marek static struct gdsc ife_1_gdsc = {
22485d66ca79SJonathan Marek 	.gdscr = 0xb004,
22495d66ca79SJonathan Marek 	.pd = {
22505d66ca79SJonathan Marek 		.name = "ife_1_gdsc",
22515d66ca79SJonathan Marek 	},
22525d66ca79SJonathan Marek 	.flags = POLL_CFG_GDSCR,
2253*433a2210SVladimir Zapolskiy 	.parent = &titan_top_gdsc.pd,
22545d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22555d66ca79SJonathan Marek };
22565d66ca79SJonathan Marek 
22575d66ca79SJonathan Marek static struct gdsc titan_top_gdsc = {
22585d66ca79SJonathan Marek 	.gdscr = 0xc144,
22595d66ca79SJonathan Marek 	.pd = {
22605d66ca79SJonathan Marek 		.name = "titan_top_gdsc",
22615d66ca79SJonathan Marek 	},
22625d66ca79SJonathan Marek 	.flags = POLL_CFG_GDSCR,
22635d66ca79SJonathan Marek 	.pwrsts = PWRSTS_OFF_ON,
22645d66ca79SJonathan Marek };
22655d66ca79SJonathan Marek 
22665d66ca79SJonathan Marek static struct clk_regmap *cam_cc_sm8250_clocks[] = {
22675d66ca79SJonathan Marek 	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
22685d66ca79SJonathan Marek 	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
22695d66ca79SJonathan Marek 	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
22705d66ca79SJonathan Marek 	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
22715d66ca79SJonathan Marek 	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
22725d66ca79SJonathan Marek 	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
22735d66ca79SJonathan Marek 	[CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
22745d66ca79SJonathan Marek 	[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
22755d66ca79SJonathan Marek 	[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
22765d66ca79SJonathan Marek 	[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
22775d66ca79SJonathan Marek 	[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
22785d66ca79SJonathan Marek 	[CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
22795d66ca79SJonathan Marek 	[CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
22805d66ca79SJonathan Marek 	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
22815d66ca79SJonathan Marek 	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
22825d66ca79SJonathan Marek 	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
22835d66ca79SJonathan Marek 	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
22845d66ca79SJonathan Marek 	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
22855d66ca79SJonathan Marek 	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
22865d66ca79SJonathan Marek 	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
22875d66ca79SJonathan Marek 	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
22885d66ca79SJonathan Marek 	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
22895d66ca79SJonathan Marek 	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
22905d66ca79SJonathan Marek 	[CAM_CC_CSI4PHYTIMER_CLK] = &cam_cc_csi4phytimer_clk.clkr,
22915d66ca79SJonathan Marek 	[CAM_CC_CSI4PHYTIMER_CLK_SRC] = &cam_cc_csi4phytimer_clk_src.clkr,
22925d66ca79SJonathan Marek 	[CAM_CC_CSI5PHYTIMER_CLK] = &cam_cc_csi5phytimer_clk.clkr,
22935d66ca79SJonathan Marek 	[CAM_CC_CSI5PHYTIMER_CLK_SRC] = &cam_cc_csi5phytimer_clk_src.clkr,
22945d66ca79SJonathan Marek 	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
22955d66ca79SJonathan Marek 	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
22965d66ca79SJonathan Marek 	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
22975d66ca79SJonathan Marek 	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
22985d66ca79SJonathan Marek 	[CAM_CC_CSIPHY4_CLK] = &cam_cc_csiphy4_clk.clkr,
22995d66ca79SJonathan Marek 	[CAM_CC_CSIPHY5_CLK] = &cam_cc_csiphy5_clk.clkr,
23005d66ca79SJonathan Marek 	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
23015d66ca79SJonathan Marek 	[CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
23025d66ca79SJonathan Marek 	[CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
23035d66ca79SJonathan Marek 	[CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
23045d66ca79SJonathan Marek 	[CAM_CC_GDSC_CLK] = &cam_cc_gdsc_clk.clkr,
23055d66ca79SJonathan Marek 	[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
23065d66ca79SJonathan Marek 	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
23075d66ca79SJonathan Marek 	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
23085d66ca79SJonathan Marek 	[CAM_CC_IFE_0_AHB_CLK] = &cam_cc_ife_0_ahb_clk.clkr,
23095d66ca79SJonathan Marek 	[CAM_CC_IFE_0_AREG_CLK] = &cam_cc_ife_0_areg_clk.clkr,
23105d66ca79SJonathan Marek 	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
23115d66ca79SJonathan Marek 	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
23125d66ca79SJonathan Marek 	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
23135d66ca79SJonathan Marek 	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
23145d66ca79SJonathan Marek 	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
23155d66ca79SJonathan Marek 	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
23165d66ca79SJonathan Marek 	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
23175d66ca79SJonathan Marek 	[CAM_CC_IFE_1_AHB_CLK] = &cam_cc_ife_1_ahb_clk.clkr,
23185d66ca79SJonathan Marek 	[CAM_CC_IFE_1_AREG_CLK] = &cam_cc_ife_1_areg_clk.clkr,
23195d66ca79SJonathan Marek 	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
23205d66ca79SJonathan Marek 	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
23215d66ca79SJonathan Marek 	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
23225d66ca79SJonathan Marek 	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
23235d66ca79SJonathan Marek 	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
23245d66ca79SJonathan Marek 	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
23255d66ca79SJonathan Marek 	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
23265d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_AHB_CLK] = &cam_cc_ife_lite_ahb_clk.clkr,
23275d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_AXI_CLK] = &cam_cc_ife_lite_axi_clk.clkr,
23285d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
23295d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
23305d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
23315d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
23325d66ca79SJonathan Marek 	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
23335d66ca79SJonathan Marek 	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
23345d66ca79SJonathan Marek 	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
23355d66ca79SJonathan Marek 	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
23365d66ca79SJonathan Marek 	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
23375d66ca79SJonathan Marek 	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
23385d66ca79SJonathan Marek 	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
23395d66ca79SJonathan Marek 	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
23405d66ca79SJonathan Marek 	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
23415d66ca79SJonathan Marek 	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
23425d66ca79SJonathan Marek 	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
23435d66ca79SJonathan Marek 	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
23445d66ca79SJonathan Marek 	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
23455d66ca79SJonathan Marek 	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
23465d66ca79SJonathan Marek 	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
23475d66ca79SJonathan Marek 	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
23485d66ca79SJonathan Marek 	[CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
23495d66ca79SJonathan Marek 	[CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
23505d66ca79SJonathan Marek 	[CAM_CC_MCLK5_CLK] = &cam_cc_mclk5_clk.clkr,
23515d66ca79SJonathan Marek 	[CAM_CC_MCLK5_CLK_SRC] = &cam_cc_mclk5_clk_src.clkr,
23525d66ca79SJonathan Marek 	[CAM_CC_MCLK6_CLK] = &cam_cc_mclk6_clk.clkr,
23535d66ca79SJonathan Marek 	[CAM_CC_MCLK6_CLK_SRC] = &cam_cc_mclk6_clk_src.clkr,
23545d66ca79SJonathan Marek 	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
23555d66ca79SJonathan Marek 	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
23565d66ca79SJonathan Marek 	[CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
23575d66ca79SJonathan Marek 	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
23585d66ca79SJonathan Marek 	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
23595d66ca79SJonathan Marek 	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
23605d66ca79SJonathan Marek 	[CAM_CC_PLL2_OUT_MAIN] = &cam_cc_pll2_out_main.clkr,
23615d66ca79SJonathan Marek 	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
23625d66ca79SJonathan Marek 	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
23635d66ca79SJonathan Marek 	[CAM_CC_PLL4] = &cam_cc_pll4.clkr,
23645d66ca79SJonathan Marek 	[CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
23655d66ca79SJonathan Marek 	[CAM_CC_SBI_AHB_CLK] = &cam_cc_sbi_ahb_clk.clkr,
23665d66ca79SJonathan Marek 	[CAM_CC_SBI_AXI_CLK] = &cam_cc_sbi_axi_clk.clkr,
23675d66ca79SJonathan Marek 	[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
23685d66ca79SJonathan Marek 	[CAM_CC_SBI_CPHY_RX_CLK] = &cam_cc_sbi_cphy_rx_clk.clkr,
23695d66ca79SJonathan Marek 	[CAM_CC_SBI_CSID_CLK] = &cam_cc_sbi_csid_clk.clkr,
23705d66ca79SJonathan Marek 	[CAM_CC_SBI_CSID_CLK_SRC] = &cam_cc_sbi_csid_clk_src.clkr,
23715d66ca79SJonathan Marek 	[CAM_CC_SBI_DIV_CLK_SRC] = &cam_cc_sbi_div_clk_src.clkr,
23725d66ca79SJonathan Marek 	[CAM_CC_SBI_IFE_0_CLK] = &cam_cc_sbi_ife_0_clk.clkr,
23735d66ca79SJonathan Marek 	[CAM_CC_SBI_IFE_1_CLK] = &cam_cc_sbi_ife_1_clk.clkr,
23745d66ca79SJonathan Marek 	[CAM_CC_SLEEP_CLK] = &cam_cc_sleep_clk.clkr,
23755d66ca79SJonathan Marek 	[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
23765d66ca79SJonathan Marek 	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
23775d66ca79SJonathan Marek 	[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
23785d66ca79SJonathan Marek };
23795d66ca79SJonathan Marek 
23805d66ca79SJonathan Marek static struct gdsc *cam_cc_sm8250_gdscs[] = {
23815d66ca79SJonathan Marek 	[BPS_GDSC] = &bps_gdsc,
23825d66ca79SJonathan Marek 	[IPE_0_GDSC] = &ipe_0_gdsc,
23835d66ca79SJonathan Marek 	[SBI_GDSC] = &sbi_gdsc,
23845d66ca79SJonathan Marek 	[IFE_0_GDSC] = &ife_0_gdsc,
23855d66ca79SJonathan Marek 	[IFE_1_GDSC] = &ife_1_gdsc,
23865d66ca79SJonathan Marek 	[TITAN_TOP_GDSC] = &titan_top_gdsc,
23875d66ca79SJonathan Marek };
23885d66ca79SJonathan Marek 
23895d66ca79SJonathan Marek static const struct qcom_reset_map cam_cc_sm8250_resets[] = {
23905d66ca79SJonathan Marek 	[CAM_CC_BPS_BCR] = { 0x7000 },
23915d66ca79SJonathan Marek 	[CAM_CC_ICP_BCR] = { 0xc070 },
23925d66ca79SJonathan Marek 	[CAM_CC_IFE_0_BCR] = { 0xa000 },
23935d66ca79SJonathan Marek 	[CAM_CC_IFE_1_BCR] = { 0xb000 },
23945d66ca79SJonathan Marek 	[CAM_CC_IPE_0_BCR] = { 0x8000 },
23955d66ca79SJonathan Marek 	[CAM_CC_SBI_BCR] = { 0x9000 },
23965d66ca79SJonathan Marek };
23975d66ca79SJonathan Marek 
23985d66ca79SJonathan Marek static const struct regmap_config cam_cc_sm8250_regmap_config = {
23995d66ca79SJonathan Marek 	.reg_bits = 32,
24005d66ca79SJonathan Marek 	.reg_stride = 4,
24015d66ca79SJonathan Marek 	.val_bits = 32,
24025d66ca79SJonathan Marek 	.max_register = 0xe004,
24035d66ca79SJonathan Marek 	.fast_io = true,
24045d66ca79SJonathan Marek };
24055d66ca79SJonathan Marek 
24065d66ca79SJonathan Marek static const struct qcom_cc_desc cam_cc_sm8250_desc = {
24075d66ca79SJonathan Marek 	.config = &cam_cc_sm8250_regmap_config,
24085d66ca79SJonathan Marek 	.clks = cam_cc_sm8250_clocks,
24095d66ca79SJonathan Marek 	.num_clks = ARRAY_SIZE(cam_cc_sm8250_clocks),
24105d66ca79SJonathan Marek 	.resets = cam_cc_sm8250_resets,
24115d66ca79SJonathan Marek 	.num_resets = ARRAY_SIZE(cam_cc_sm8250_resets),
24125d66ca79SJonathan Marek 	.gdscs = cam_cc_sm8250_gdscs,
24135d66ca79SJonathan Marek 	.num_gdscs = ARRAY_SIZE(cam_cc_sm8250_gdscs),
24145d66ca79SJonathan Marek };
24155d66ca79SJonathan Marek 
24165d66ca79SJonathan Marek static const struct of_device_id cam_cc_sm8250_match_table[] = {
24175d66ca79SJonathan Marek 	{ .compatible = "qcom,sm8250-camcc" },
24185d66ca79SJonathan Marek 	{ }
24195d66ca79SJonathan Marek };
24205d66ca79SJonathan Marek MODULE_DEVICE_TABLE(of, cam_cc_sm8250_match_table);
24215d66ca79SJonathan Marek 
cam_cc_sm8250_probe(struct platform_device * pdev)24225d66ca79SJonathan Marek static int cam_cc_sm8250_probe(struct platform_device *pdev)
24235d66ca79SJonathan Marek {
24245d66ca79SJonathan Marek 	struct regmap *regmap;
24255d66ca79SJonathan Marek 
24265d66ca79SJonathan Marek 	regmap = qcom_cc_map(pdev, &cam_cc_sm8250_desc);
24275d66ca79SJonathan Marek 	if (IS_ERR(regmap))
24285d66ca79SJonathan Marek 		return PTR_ERR(regmap);
24295d66ca79SJonathan Marek 
24305d66ca79SJonathan Marek 	clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
24315d66ca79SJonathan Marek 	clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
24325d66ca79SJonathan Marek 	clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
24335d66ca79SJonathan Marek 	clk_lucid_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
24345d66ca79SJonathan Marek 	clk_lucid_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
24355d66ca79SJonathan Marek 
24365d66ca79SJonathan Marek 	return qcom_cc_really_probe(pdev, &cam_cc_sm8250_desc, regmap);
24375d66ca79SJonathan Marek }
24385d66ca79SJonathan Marek 
24395d66ca79SJonathan Marek static struct platform_driver cam_cc_sm8250_driver = {
24405d66ca79SJonathan Marek 	.probe = cam_cc_sm8250_probe,
24415d66ca79SJonathan Marek 	.driver = {
24425d66ca79SJonathan Marek 		.name = "cam_cc-sm8250",
24435d66ca79SJonathan Marek 		.of_match_table = cam_cc_sm8250_match_table,
24445d66ca79SJonathan Marek 	},
24455d66ca79SJonathan Marek };
24465d66ca79SJonathan Marek 
244730f44ddfSVladimir Zapolskiy module_platform_driver(cam_cc_sm8250_driver);
24485d66ca79SJonathan Marek 
24495d66ca79SJonathan Marek MODULE_DESCRIPTION("QTI CAMCC SM8250 Driver");
24505d66ca79SJonathan Marek MODULE_LICENSE("GPL v2");
2451