xref: /openbmc/linux/drivers/clk/qcom/mmcc-msm8994.c (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
14d5b4572SKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
24d5b4572SKonrad Dybcio /*
34d5b4572SKonrad Dybcio  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
44d5b4572SKonrad Dybcio  */
54d5b4572SKonrad Dybcio 
64d5b4572SKonrad Dybcio #include <linux/kernel.h>
74d5b4572SKonrad Dybcio #include <linux/bitops.h>
84d5b4572SKonrad Dybcio #include <linux/err.h>
94d5b4572SKonrad Dybcio #include <linux/platform_device.h>
104d5b4572SKonrad Dybcio #include <linux/module.h>
114d5b4572SKonrad Dybcio #include <linux/of.h>
124d5b4572SKonrad Dybcio #include <linux/clk-provider.h>
134d5b4572SKonrad Dybcio #include <linux/regmap.h>
144d5b4572SKonrad Dybcio #include <linux/reset-controller.h>
154d5b4572SKonrad Dybcio #include <linux/clk.h>
164d5b4572SKonrad Dybcio 
174d5b4572SKonrad Dybcio #include <dt-bindings/clock/qcom,mmcc-msm8994.h>
184d5b4572SKonrad Dybcio 
194d5b4572SKonrad Dybcio #include "common.h"
204d5b4572SKonrad Dybcio #include "clk-regmap.h"
214d5b4572SKonrad Dybcio #include "clk-regmap-divider.h"
224d5b4572SKonrad Dybcio #include "clk-alpha-pll.h"
234d5b4572SKonrad Dybcio #include "clk-rcg.h"
244d5b4572SKonrad Dybcio #include "clk-branch.h"
254d5b4572SKonrad Dybcio #include "reset.h"
264d5b4572SKonrad Dybcio #include "gdsc.h"
274d5b4572SKonrad Dybcio 
284d5b4572SKonrad Dybcio 
294d5b4572SKonrad Dybcio enum {
304d5b4572SKonrad Dybcio 	P_XO,
314d5b4572SKonrad Dybcio 	P_GPLL0,
324d5b4572SKonrad Dybcio 	P_MMPLL0,
334d5b4572SKonrad Dybcio 	P_MMPLL1,
344d5b4572SKonrad Dybcio 	P_MMPLL3,
354d5b4572SKonrad Dybcio 	P_MMPLL4,
364d5b4572SKonrad Dybcio 	P_MMPLL5, /* Is this one even used by anything? Downstream doesn't tell. */
374d5b4572SKonrad Dybcio 	P_DSI0PLL,
384d5b4572SKonrad Dybcio 	P_DSI1PLL,
394d5b4572SKonrad Dybcio 	P_DSI0PLL_BYTE,
404d5b4572SKonrad Dybcio 	P_DSI1PLL_BYTE,
414d5b4572SKonrad Dybcio 	P_HDMIPLL,
424d5b4572SKonrad Dybcio };
434d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_gpll0_map[] = {
444d5b4572SKonrad Dybcio 	{ P_XO, 0 },
454d5b4572SKonrad Dybcio 	{ P_GPLL0, 5 }
464d5b4572SKonrad Dybcio };
474d5b4572SKonrad Dybcio 
484d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_gpll0[] = {
494d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
504d5b4572SKonrad Dybcio 	{ .fw_name = "gpll0" },
514d5b4572SKonrad Dybcio };
524d5b4572SKonrad Dybcio 
534d5b4572SKonrad Dybcio static const struct parent_map mmss_xo_hdmi_map[] = {
544d5b4572SKonrad Dybcio 	{ P_XO, 0 },
554d5b4572SKonrad Dybcio 	{ P_HDMIPLL, 3 }
564d5b4572SKonrad Dybcio };
574d5b4572SKonrad Dybcio 
584d5b4572SKonrad Dybcio static const struct clk_parent_data mmss_xo_hdmi[] = {
594d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
604d5b4572SKonrad Dybcio 	{ .fw_name = "hdmipll" },
614d5b4572SKonrad Dybcio };
624d5b4572SKonrad Dybcio 
634d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_dsi0pll_dsi1pll_map[] = {
644d5b4572SKonrad Dybcio 	{ P_XO, 0 },
654d5b4572SKonrad Dybcio 	{ P_DSI0PLL, 1 },
664d5b4572SKonrad Dybcio 	{ P_DSI1PLL, 2 }
674d5b4572SKonrad Dybcio };
684d5b4572SKonrad Dybcio 
694d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_dsi0pll_dsi1pll[] = {
704d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
714d5b4572SKonrad Dybcio 	{ .fw_name = "dsi0pll" },
724d5b4572SKonrad Dybcio 	{ .fw_name = "dsi1pll" },
734d5b4572SKonrad Dybcio };
744d5b4572SKonrad Dybcio 
754d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_dsibyte_map[] = {
764d5b4572SKonrad Dybcio 	{ P_XO, 0 },
774d5b4572SKonrad Dybcio 	{ P_DSI0PLL_BYTE, 1 },
784d5b4572SKonrad Dybcio 	{ P_DSI1PLL_BYTE, 2 }
794d5b4572SKonrad Dybcio };
804d5b4572SKonrad Dybcio 
814d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_dsibyte[] = {
824d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
834d5b4572SKonrad Dybcio 	{ .fw_name = "dsi0pllbyte" },
844d5b4572SKonrad Dybcio 	{ .fw_name = "dsi1pllbyte" },
854d5b4572SKonrad Dybcio };
864d5b4572SKonrad Dybcio 
874d5b4572SKonrad Dybcio static struct pll_vco mmpll_p_vco[] = {
884d5b4572SKonrad Dybcio 	{ 250000000, 500000000, 3 },
894d5b4572SKonrad Dybcio 	{ 500000000, 1000000000, 2 },
904d5b4572SKonrad Dybcio 	{ 1000000000, 1500000000, 1 },
914d5b4572SKonrad Dybcio 	{ 1500000000, 2000000000, 0 },
924d5b4572SKonrad Dybcio };
934d5b4572SKonrad Dybcio 
944d5b4572SKonrad Dybcio static struct pll_vco mmpll_t_vco[] = {
954d5b4572SKonrad Dybcio 	{ 500000000, 1500000000, 0 },
964d5b4572SKonrad Dybcio };
974d5b4572SKonrad Dybcio 
984d5b4572SKonrad Dybcio static const struct alpha_pll_config mmpll_p_config = {
994d5b4572SKonrad Dybcio 	.post_div_mask = 0xf00,
1004d5b4572SKonrad Dybcio };
1014d5b4572SKonrad Dybcio 
1024d5b4572SKonrad Dybcio static struct clk_alpha_pll mmpll0_early = {
1034d5b4572SKonrad Dybcio 	.offset = 0x0,
1044d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1054d5b4572SKonrad Dybcio 	.vco_table = mmpll_p_vco,
1064d5b4572SKonrad Dybcio 	.num_vco = ARRAY_SIZE(mmpll_p_vco),
1074d5b4572SKonrad Dybcio 	.clkr = {
1084d5b4572SKonrad Dybcio 		.enable_reg = 0x100,
1094d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
1104d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1114d5b4572SKonrad Dybcio 			.name = "mmpll0_early",
1124d5b4572SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
1134d5b4572SKonrad Dybcio 				.fw_name = "xo",
1144d5b4572SKonrad Dybcio 			},
1154d5b4572SKonrad Dybcio 			.num_parents = 1,
1164d5b4572SKonrad Dybcio 			.ops = &clk_alpha_pll_ops,
1174d5b4572SKonrad Dybcio 		},
1184d5b4572SKonrad Dybcio 	},
1194d5b4572SKonrad Dybcio };
1204d5b4572SKonrad Dybcio 
1214d5b4572SKonrad Dybcio static struct clk_alpha_pll_postdiv mmpll0 = {
1224d5b4572SKonrad Dybcio 	.offset = 0x0,
1234d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1244d5b4572SKonrad Dybcio 	.width = 4,
1254d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
1264d5b4572SKonrad Dybcio 		.name = "mmpll0",
1274d5b4572SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &mmpll0_early.clkr.hw },
1284d5b4572SKonrad Dybcio 		.num_parents = 1,
1294d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
1304d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
1314d5b4572SKonrad Dybcio 	},
1324d5b4572SKonrad Dybcio };
1334d5b4572SKonrad Dybcio 
1344d5b4572SKonrad Dybcio static struct clk_alpha_pll mmpll1_early = {
1354d5b4572SKonrad Dybcio 	.offset = 0x30,
1364d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1374d5b4572SKonrad Dybcio 	.vco_table = mmpll_p_vco,
1384d5b4572SKonrad Dybcio 	.num_vco = ARRAY_SIZE(mmpll_p_vco),
1394d5b4572SKonrad Dybcio 	.clkr = {
1404d5b4572SKonrad Dybcio 		.enable_reg = 0x100,
1414d5b4572SKonrad Dybcio 		.enable_mask = BIT(1),
1424d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1434d5b4572SKonrad Dybcio 			.name = "mmpll1_early",
1444d5b4572SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
1454d5b4572SKonrad Dybcio 				.fw_name = "xo",
1464d5b4572SKonrad Dybcio 			},
1474d5b4572SKonrad Dybcio 			.num_parents = 1,
1484d5b4572SKonrad Dybcio 			.ops = &clk_alpha_pll_ops,
1494d5b4572SKonrad Dybcio 		}
1504d5b4572SKonrad Dybcio 	},
1514d5b4572SKonrad Dybcio };
1524d5b4572SKonrad Dybcio 
1534d5b4572SKonrad Dybcio static struct clk_alpha_pll_postdiv mmpll1 = {
1544d5b4572SKonrad Dybcio 	.offset = 0x30,
1554d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1564d5b4572SKonrad Dybcio 	.width = 4,
1574d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
1584d5b4572SKonrad Dybcio 		.name = "mmpll1",
1594d5b4572SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &mmpll1_early.clkr.hw },
1604d5b4572SKonrad Dybcio 		.num_parents = 1,
1614d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
1624d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
1634d5b4572SKonrad Dybcio 	},
1644d5b4572SKonrad Dybcio };
1654d5b4572SKonrad Dybcio 
1664d5b4572SKonrad Dybcio static struct clk_alpha_pll mmpll3_early = {
1674d5b4572SKonrad Dybcio 	.offset = 0x60,
1684d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1694d5b4572SKonrad Dybcio 	.vco_table = mmpll_p_vco,
1704d5b4572SKonrad Dybcio 	.num_vco = ARRAY_SIZE(mmpll_p_vco),
1714d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
1724d5b4572SKonrad Dybcio 		.name = "mmpll3_early",
1734d5b4572SKonrad Dybcio 		.parent_data = &(const struct clk_parent_data){
1744d5b4572SKonrad Dybcio 				.fw_name = "xo",
1754d5b4572SKonrad Dybcio 		},
1764d5b4572SKonrad Dybcio 		.num_parents = 1,
1774d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_ops,
1784d5b4572SKonrad Dybcio 	},
1794d5b4572SKonrad Dybcio };
1804d5b4572SKonrad Dybcio 
1814d5b4572SKonrad Dybcio static struct clk_alpha_pll_postdiv mmpll3 = {
1824d5b4572SKonrad Dybcio 	.offset = 0x60,
1834d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1844d5b4572SKonrad Dybcio 	.width = 4,
1854d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
1864d5b4572SKonrad Dybcio 		.name = "mmpll3",
1874d5b4572SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &mmpll3_early.clkr.hw },
1884d5b4572SKonrad Dybcio 		.num_parents = 1,
1894d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
1904d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
1914d5b4572SKonrad Dybcio 	},
1924d5b4572SKonrad Dybcio };
1934d5b4572SKonrad Dybcio 
1944d5b4572SKonrad Dybcio static struct clk_alpha_pll mmpll4_early = {
1954d5b4572SKonrad Dybcio 	.offset = 0x90,
1964d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
1974d5b4572SKonrad Dybcio 	.vco_table = mmpll_t_vco,
1984d5b4572SKonrad Dybcio 	.num_vco = ARRAY_SIZE(mmpll_t_vco),
1994d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
2004d5b4572SKonrad Dybcio 		.name = "mmpll4_early",
2014d5b4572SKonrad Dybcio 		.parent_data = &(const struct clk_parent_data){
2024d5b4572SKonrad Dybcio 				.fw_name = "xo",
2034d5b4572SKonrad Dybcio 		},
2044d5b4572SKonrad Dybcio 		.num_parents = 1,
2054d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_ops,
2064d5b4572SKonrad Dybcio 	},
2074d5b4572SKonrad Dybcio };
2084d5b4572SKonrad Dybcio 
2094d5b4572SKonrad Dybcio static struct clk_alpha_pll_postdiv mmpll4 = {
2104d5b4572SKonrad Dybcio 	.offset = 0x90,
2114d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
2124d5b4572SKonrad Dybcio 	.width = 2,
2134d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
2144d5b4572SKonrad Dybcio 		.name = "mmpll4",
2154d5b4572SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &mmpll4_early.clkr.hw },
2164d5b4572SKonrad Dybcio 		.num_parents = 1,
2174d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
2184d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
2194d5b4572SKonrad Dybcio 	},
2204d5b4572SKonrad Dybcio };
2214d5b4572SKonrad Dybcio 
2224d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_gpll0_mmpll1_map[] = {
2234d5b4572SKonrad Dybcio 	{ P_XO, 0 },
2244d5b4572SKonrad Dybcio 	{ P_GPLL0, 5 },
2254d5b4572SKonrad Dybcio 	{ P_MMPLL1, 2 }
2264d5b4572SKonrad Dybcio };
2274d5b4572SKonrad Dybcio 
2284d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_gpll0_mmpll1[] = {
2294d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
2304d5b4572SKonrad Dybcio 	{ .fw_name = "gpll0" },
2314d5b4572SKonrad Dybcio 	{ .hw = &mmpll1.clkr.hw },
2324d5b4572SKonrad Dybcio };
2334d5b4572SKonrad Dybcio 
2344d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_gpll0_mmpll0_map[] = {
2354d5b4572SKonrad Dybcio 	{ P_XO, 0 },
2364d5b4572SKonrad Dybcio 	{ P_GPLL0, 5 },
2374d5b4572SKonrad Dybcio 	{ P_MMPLL0, 1 }
2384d5b4572SKonrad Dybcio };
2394d5b4572SKonrad Dybcio 
2404d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_gpll0_mmpll0[] = {
2414d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
2424d5b4572SKonrad Dybcio 	{ .fw_name = "gpll0" },
2434d5b4572SKonrad Dybcio 	{ .hw = &mmpll0.clkr.hw },
2444d5b4572SKonrad Dybcio };
2454d5b4572SKonrad Dybcio 
2464d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll3_map[] = {
2474d5b4572SKonrad Dybcio 	{ P_XO, 0 },
2484d5b4572SKonrad Dybcio 	{ P_GPLL0, 5 },
2494d5b4572SKonrad Dybcio 	{ P_MMPLL0, 1 },
2504d5b4572SKonrad Dybcio 	{ P_MMPLL3, 3 }
2514d5b4572SKonrad Dybcio };
2524d5b4572SKonrad Dybcio 
2534d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll3[] = {
2544d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
2554d5b4572SKonrad Dybcio 	{ .fw_name = "gpll0" },
2564d5b4572SKonrad Dybcio 	{ .hw = &mmpll0.clkr.hw },
2574d5b4572SKonrad Dybcio 	{ .hw = &mmpll3.clkr.hw },
2584d5b4572SKonrad Dybcio };
2594d5b4572SKonrad Dybcio 
2604d5b4572SKonrad Dybcio static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll4_map[] = {
2614d5b4572SKonrad Dybcio 	{ P_XO, 0 },
2624d5b4572SKonrad Dybcio 	{ P_GPLL0, 5 },
2634d5b4572SKonrad Dybcio 	{ P_MMPLL0, 1 },
2644d5b4572SKonrad Dybcio 	{ P_MMPLL4, 3 }
2654d5b4572SKonrad Dybcio };
2664d5b4572SKonrad Dybcio 
2674d5b4572SKonrad Dybcio static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll4[] = {
2684d5b4572SKonrad Dybcio 	{ .fw_name = "xo" },
2694d5b4572SKonrad Dybcio 	{ .fw_name = "gpll0" },
2704d5b4572SKonrad Dybcio 	{ .hw = &mmpll0.clkr.hw },
2714d5b4572SKonrad Dybcio 	{ .hw = &mmpll4.clkr.hw },
2724d5b4572SKonrad Dybcio };
2734d5b4572SKonrad Dybcio 
2744d5b4572SKonrad Dybcio static struct clk_alpha_pll mmpll5_early = {
2754d5b4572SKonrad Dybcio 	.offset = 0xc0,
2764d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
2774d5b4572SKonrad Dybcio 	.vco_table = mmpll_p_vco,
2784d5b4572SKonrad Dybcio 	.num_vco = ARRAY_SIZE(mmpll_p_vco),
2794d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
2804d5b4572SKonrad Dybcio 		.name = "mmpll5_early",
2814d5b4572SKonrad Dybcio 		.parent_data = &(const struct clk_parent_data){
2824d5b4572SKonrad Dybcio 				.fw_name = "xo",
2834d5b4572SKonrad Dybcio 		},
2844d5b4572SKonrad Dybcio 		.num_parents = 1,
2854d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_ops,
2864d5b4572SKonrad Dybcio 	},
2874d5b4572SKonrad Dybcio };
2884d5b4572SKonrad Dybcio 
2894d5b4572SKonrad Dybcio static struct clk_alpha_pll_postdiv mmpll5 = {
2904d5b4572SKonrad Dybcio 	.offset = 0xc0,
2914d5b4572SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
2924d5b4572SKonrad Dybcio 	.width = 4,
2934d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
2944d5b4572SKonrad Dybcio 		.name = "mmpll5",
2954d5b4572SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &mmpll5_early.clkr.hw },
2964d5b4572SKonrad Dybcio 		.num_parents = 1,
2974d5b4572SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
2984d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
2994d5b4572SKonrad Dybcio 	},
3004d5b4572SKonrad Dybcio };
3014d5b4572SKonrad Dybcio 
3024d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_ahb_clk_src[] = {
3034d5b4572SKonrad Dybcio 	/* Note: There might be more frequencies desired here. */
3044d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
3054d5b4572SKonrad Dybcio 	F(40000000, P_GPLL0, 15, 0, 0),
3064d5b4572SKonrad Dybcio 	F(80000000, P_MMPLL0, 10, 0, 0),
3074d5b4572SKonrad Dybcio 	{ }
3084d5b4572SKonrad Dybcio };
3094d5b4572SKonrad Dybcio 
3104d5b4572SKonrad Dybcio static struct clk_rcg2 ahb_clk_src = {
3114d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x5000,
3124d5b4572SKonrad Dybcio 	.hid_width = 5,
3134d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
3144d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_ahb_clk_src,
3154d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
3164d5b4572SKonrad Dybcio 		.name = "ahb_clk_src",
3174d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
3184d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
3194d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
3204d5b4572SKonrad Dybcio 	},
3214d5b4572SKonrad Dybcio };
3224d5b4572SKonrad Dybcio 
3234d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_axi_clk_src[] = {
3244d5b4572SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
3254d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
3264d5b4572SKonrad Dybcio 	F(333430000, P_MMPLL1, 3.5, 0, 0),
3274d5b4572SKonrad Dybcio 	F(466800000, P_MMPLL1, 2.5, 0, 0),
3284d5b4572SKonrad Dybcio 	{ }
3294d5b4572SKonrad Dybcio };
3304d5b4572SKonrad Dybcio 
331*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_axi_clk_src_8992[] = {
332*e0be9986SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
333*e0be9986SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
334*e0be9986SKonrad Dybcio 	F(300000000, P_GPLL0, 2, 0, 0),
335*e0be9986SKonrad Dybcio 	F(404000000, P_MMPLL1, 2, 0, 0),
336*e0be9986SKonrad Dybcio 	{ }
337*e0be9986SKonrad Dybcio };
338*e0be9986SKonrad Dybcio 
3394d5b4572SKonrad Dybcio static struct clk_rcg2 axi_clk_src = {
3404d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x5040,
3414d5b4572SKonrad Dybcio 	.hid_width = 5,
3424d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll1_map,
3434d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_axi_clk_src,
3444d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
3454d5b4572SKonrad Dybcio 		.name = "axi_clk_src",
3464d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll1,
3474d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll1),
3484d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
3494d5b4572SKonrad Dybcio 	},
3504d5b4572SKonrad Dybcio };
3514d5b4572SKonrad Dybcio 
3524d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_csi0_1_2_3_clk_src[] = {
3534d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
3544d5b4572SKonrad Dybcio 	F(240000000, P_GPLL0, 2.5, 0, 0),
3554d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
3564d5b4572SKonrad Dybcio 	{ }
3574d5b4572SKonrad Dybcio };
3584d5b4572SKonrad Dybcio 
359*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_csi0_1_2_3_clk_src_8992[] = {
360*e0be9986SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
361*e0be9986SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
362*e0be9986SKonrad Dybcio 	{ }
363*e0be9986SKonrad Dybcio };
364*e0be9986SKonrad Dybcio 
3654d5b4572SKonrad Dybcio static struct clk_rcg2 csi0_clk_src = {
3664d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3090,
3674d5b4572SKonrad Dybcio 	.hid_width = 5,
3684d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
3694d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1_2_3_clk_src,
3704d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
3714d5b4572SKonrad Dybcio 		.name = "csi0_clk_src",
3724d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
3734d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
3744d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
3754d5b4572SKonrad Dybcio 	},
3764d5b4572SKonrad Dybcio };
3774d5b4572SKonrad Dybcio 
3784d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
3794d5b4572SKonrad Dybcio 	F(66670000, P_GPLL0, 9, 0, 0),
3804d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
3814d5b4572SKonrad Dybcio 	F(133330000, P_GPLL0, 4.5, 0, 0),
3824d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
3834d5b4572SKonrad Dybcio 	F(200000000, P_MMPLL0, 4, 0, 0),
3844d5b4572SKonrad Dybcio 	F(240000000, P_GPLL0, 2.5, 0, 0),
3854d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
3864d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
3874d5b4572SKonrad Dybcio 	F(510000000, P_MMPLL3, 2, 0, 0),
3884d5b4572SKonrad Dybcio 	{ }
3894d5b4572SKonrad Dybcio };
3904d5b4572SKonrad Dybcio 
391*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_vcodec0_clk_src_8992[] = {
392*e0be9986SKonrad Dybcio 	F(66670000, P_GPLL0, 9, 0, 0),
393*e0be9986SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
394*e0be9986SKonrad Dybcio 	F(133330000, P_GPLL0, 4.5, 0, 0),
395*e0be9986SKonrad Dybcio 	F(200000000, P_MMPLL0, 4, 0, 0),
396*e0be9986SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
397*e0be9986SKonrad Dybcio 	F(510000000, P_MMPLL3, 2, 0, 0),
398*e0be9986SKonrad Dybcio 	{ }
399*e0be9986SKonrad Dybcio };
400*e0be9986SKonrad Dybcio 
4014d5b4572SKonrad Dybcio static struct clk_rcg2 vcodec0_clk_src = {
4024d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x1000,
4034d5b4572SKonrad Dybcio 	.mnd_width = 8,
4044d5b4572SKonrad Dybcio 	.hid_width = 5,
4054d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll3_map,
4064d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_vcodec0_clk_src,
4074d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
4084d5b4572SKonrad Dybcio 		.name = "vcodec0_clk_src",
4094d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll3,
4104d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll3),
4114d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
4124d5b4572SKonrad Dybcio 	},
4134d5b4572SKonrad Dybcio };
4144d5b4572SKonrad Dybcio 
4154d5b4572SKonrad Dybcio static struct clk_rcg2 csi1_clk_src = {
4164d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3100,
4174d5b4572SKonrad Dybcio 	.hid_width = 5,
4184d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
4194d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1_2_3_clk_src,
4204d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
4214d5b4572SKonrad Dybcio 		.name = "csi1_clk_src",
4224d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
4234d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
4244d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
4254d5b4572SKonrad Dybcio 	},
4264d5b4572SKonrad Dybcio };
4274d5b4572SKonrad Dybcio 
4284d5b4572SKonrad Dybcio static struct clk_rcg2 csi2_clk_src = {
4294d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3160,
4304d5b4572SKonrad Dybcio 	.hid_width = 5,
4314d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
4324d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1_2_3_clk_src,
4334d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
4344d5b4572SKonrad Dybcio 		.name = "csi2_clk_src",
4354d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
4364d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
4374d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
4384d5b4572SKonrad Dybcio 	},
4394d5b4572SKonrad Dybcio };
4404d5b4572SKonrad Dybcio 
4414d5b4572SKonrad Dybcio static struct clk_rcg2 csi3_clk_src = {
4424d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x31c0,
4434d5b4572SKonrad Dybcio 	.hid_width = 5,
4444d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
4454d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1_2_3_clk_src,
4464d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
4474d5b4572SKonrad Dybcio 		.name = "csi3_clk_src",
4484d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
4494d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
4504d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
4514d5b4572SKonrad Dybcio 	},
4524d5b4572SKonrad Dybcio };
4534d5b4572SKonrad Dybcio 
4544d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_vfe0_clk_src[] = {
4554d5b4572SKonrad Dybcio 	F(80000000, P_GPLL0, 7.5, 0, 0),
4564d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
4574d5b4572SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
4584d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
4594d5b4572SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
4604d5b4572SKonrad Dybcio 	F(480000000, P_MMPLL4, 2, 0, 0),
4614d5b4572SKonrad Dybcio 	F(533330000, P_MMPLL0, 1.5, 0, 0),
4624d5b4572SKonrad Dybcio 	F(600000000, P_GPLL0, 1, 0, 0),
4634d5b4572SKonrad Dybcio 	{ }
4644d5b4572SKonrad Dybcio };
4654d5b4572SKonrad Dybcio 
466*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_vfe0_1_clk_src_8992[] = {
467*e0be9986SKonrad Dybcio 	F(80000000, P_GPLL0, 7.5, 0, 0),
468*e0be9986SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
469*e0be9986SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
470*e0be9986SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
471*e0be9986SKonrad Dybcio 	F(480000000, P_MMPLL4, 2, 0, 0),
472*e0be9986SKonrad Dybcio 	F(600000000, P_GPLL0, 1, 0, 0),
473*e0be9986SKonrad Dybcio 	{ }
474*e0be9986SKonrad Dybcio };
475*e0be9986SKonrad Dybcio 
4764d5b4572SKonrad Dybcio static struct clk_rcg2 vfe0_clk_src = {
4774d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3600,
4784d5b4572SKonrad Dybcio 	.hid_width = 5,
4794d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
4804d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_vfe0_clk_src,
4814d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
4824d5b4572SKonrad Dybcio 		.name = "vfe0_clk_src",
4834d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
4844d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
4854d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
4864d5b4572SKonrad Dybcio 	},
4874d5b4572SKonrad Dybcio };
4884d5b4572SKonrad Dybcio 
4894d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_vfe1_clk_src[] = {
4904d5b4572SKonrad Dybcio 	F(80000000, P_GPLL0, 7.5, 0, 0),
4914d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
4924d5b4572SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
4934d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
4944d5b4572SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
4954d5b4572SKonrad Dybcio 	F(533330000, P_MMPLL0, 1.5, 0, 0),
4964d5b4572SKonrad Dybcio 	{ }
4974d5b4572SKonrad Dybcio };
4984d5b4572SKonrad Dybcio 
4994d5b4572SKonrad Dybcio static struct clk_rcg2 vfe1_clk_src = {
5004d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3620,
5014d5b4572SKonrad Dybcio 	.hid_width = 5,
5024d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
5034d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_vfe1_clk_src,
5044d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
5054d5b4572SKonrad Dybcio 		.name = "vfe1_clk_src",
5064d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
5074d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
5084d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
5094d5b4572SKonrad Dybcio 	},
5104d5b4572SKonrad Dybcio };
5114d5b4572SKonrad Dybcio 
5124d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_cpp_clk_src[] = {
5134d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
5144d5b4572SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
5154d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
5164d5b4572SKonrad Dybcio 	F(480000000, P_MMPLL4, 2, 0, 0),
5174d5b4572SKonrad Dybcio 	F(600000000, P_GPLL0, 1, 0, 0),
5184d5b4572SKonrad Dybcio 	F(640000000, P_MMPLL4, 1.5, 0, 0),
5194d5b4572SKonrad Dybcio 	{ }
5204d5b4572SKonrad Dybcio };
5214d5b4572SKonrad Dybcio 
522*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_cpp_clk_src_8992[] = {
523*e0be9986SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
524*e0be9986SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
525*e0be9986SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
526*e0be9986SKonrad Dybcio 	F(480000000, P_MMPLL4, 2, 0, 0),
527*e0be9986SKonrad Dybcio 	F(640000000, P_MMPLL4, 1.5, 0, 0),
528*e0be9986SKonrad Dybcio 	{ }
529*e0be9986SKonrad Dybcio };
530*e0be9986SKonrad Dybcio 
5314d5b4572SKonrad Dybcio static struct clk_rcg2 cpp_clk_src = {
5324d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3640,
5334d5b4572SKonrad Dybcio 	.hid_width = 5,
5344d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
5354d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_cpp_clk_src,
5364d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
5374d5b4572SKonrad Dybcio 		.name = "cpp_clk_src",
5384d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
5394d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
5404d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
5414d5b4572SKonrad Dybcio 	},
5424d5b4572SKonrad Dybcio };
5434d5b4572SKonrad Dybcio 
5444d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_jpeg0_1_clk_src[] = {
5454d5b4572SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
5464d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
5474d5b4572SKonrad Dybcio 	F(228570000, P_MMPLL0, 3.5, 0, 0),
5484d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
5494d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
5504d5b4572SKonrad Dybcio 	F(480000000, P_MMPLL4, 2, 0, 0),
5514d5b4572SKonrad Dybcio 	{ }
5524d5b4572SKonrad Dybcio };
5534d5b4572SKonrad Dybcio 
5544d5b4572SKonrad Dybcio static struct clk_rcg2 jpeg1_clk_src = {
5554d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3520,
5564d5b4572SKonrad Dybcio 	.hid_width = 5,
5574d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
5584d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_jpeg0_1_clk_src,
5594d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
5604d5b4572SKonrad Dybcio 		.name = "jpeg1_clk_src",
5614d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
5624d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
5634d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
5644d5b4572SKonrad Dybcio 	},
5654d5b4572SKonrad Dybcio };
5664d5b4572SKonrad Dybcio 
5674d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_jpeg2_clk_src[] = {
5684d5b4572SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
5694d5b4572SKonrad Dybcio 	F(133330000, P_GPLL0, 4.5, 0, 0),
5704d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
5714d5b4572SKonrad Dybcio 	F(228570000, P_MMPLL0, 3.5, 0, 0),
5724d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
5734d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
5744d5b4572SKonrad Dybcio 	{ }
5754d5b4572SKonrad Dybcio };
5764d5b4572SKonrad Dybcio 
5774d5b4572SKonrad Dybcio static struct clk_rcg2 jpeg2_clk_src = {
5784d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3540,
5794d5b4572SKonrad Dybcio 	.hid_width = 5,
5804d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
5814d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_jpeg2_clk_src,
5824d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
5834d5b4572SKonrad Dybcio 		.name = "jpeg2_clk_src",
5844d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
5854d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
5864d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
5874d5b4572SKonrad Dybcio 	},
5884d5b4572SKonrad Dybcio };
5894d5b4572SKonrad Dybcio 
5904d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_csi2phytimer_clk_src[] = {
5914d5b4572SKonrad Dybcio 	F(50000000, P_GPLL0, 12, 0, 0),
5924d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
5934d5b4572SKonrad Dybcio 	F(200000000, P_MMPLL0, 4, 0, 0),
5944d5b4572SKonrad Dybcio 	{ }
5954d5b4572SKonrad Dybcio };
5964d5b4572SKonrad Dybcio 
5974d5b4572SKonrad Dybcio static struct clk_rcg2 csi2phytimer_clk_src = {
5984d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3060,
5994d5b4572SKonrad Dybcio 	.hid_width = 5,
6004d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
6014d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi2phytimer_clk_src,
6024d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
6034d5b4572SKonrad Dybcio 		.name = "csi2phytimer_clk_src",
6044d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
6054d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
6064d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
6074d5b4572SKonrad Dybcio 	},
6084d5b4572SKonrad Dybcio };
6094d5b4572SKonrad Dybcio 
6104d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_fd_core_clk_src[] = {
6114d5b4572SKonrad Dybcio 	F(60000000, P_GPLL0, 10, 0, 0),
6124d5b4572SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
6134d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
6144d5b4572SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
6154d5b4572SKonrad Dybcio 	{ }
6164d5b4572SKonrad Dybcio };
6174d5b4572SKonrad Dybcio 
6184d5b4572SKonrad Dybcio static struct clk_rcg2 fd_core_clk_src = {
6194d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3b00,
6204d5b4572SKonrad Dybcio 	.hid_width = 5,
6214d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
6224d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_fd_core_clk_src,
6234d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
6244d5b4572SKonrad Dybcio 		.name = "fd_core_clk_src",
6254d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
6264d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
6274d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
6284d5b4572SKonrad Dybcio 	},
6294d5b4572SKonrad Dybcio };
6304d5b4572SKonrad Dybcio 
6314d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_mdp_clk_src[] = {
6324d5b4572SKonrad Dybcio 	F(85710000, P_GPLL0, 7, 0, 0),
6334d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
6344d5b4572SKonrad Dybcio 	F(120000000, P_GPLL0, 5, 0, 0),
6354d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
6364d5b4572SKonrad Dybcio 	F(171430000, P_GPLL0, 3.5, 0, 0),
6374d5b4572SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
6384d5b4572SKonrad Dybcio 	F(240000000, P_GPLL0, 2.5, 0, 0),
6394d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
6404d5b4572SKonrad Dybcio 	F(300000000, P_GPLL0, 2, 0, 0),
6414d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
6424d5b4572SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
6434d5b4572SKonrad Dybcio 	{ }
6444d5b4572SKonrad Dybcio };
6454d5b4572SKonrad Dybcio 
646*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_mdp_clk_src_8992[] = {
647*e0be9986SKonrad Dybcio 	F(85710000, P_GPLL0, 7, 0, 0),
648*e0be9986SKonrad Dybcio 	F(171430000, P_GPLL0, 3.5, 0, 0),
649*e0be9986SKonrad Dybcio 	F(200000000, P_GPLL0, 3, 0, 0),
650*e0be9986SKonrad Dybcio 	F(240000000, P_GPLL0, 2.5, 0, 0),
651*e0be9986SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
652*e0be9986SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
653*e0be9986SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
654*e0be9986SKonrad Dybcio 	{ }
655*e0be9986SKonrad Dybcio };
656*e0be9986SKonrad Dybcio 
6574d5b4572SKonrad Dybcio static struct clk_rcg2 mdp_clk_src = {
6584d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2040,
6594d5b4572SKonrad Dybcio 	.hid_width = 5,
6604d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
6614d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mdp_clk_src,
6624d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
6634d5b4572SKonrad Dybcio 		.name = "mdp_clk_src",
6644d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
6654d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
6664d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
6674d5b4572SKonrad Dybcio 	},
6684d5b4572SKonrad Dybcio };
6694d5b4572SKonrad Dybcio 
6704d5b4572SKonrad Dybcio static struct clk_rcg2 pclk0_clk_src = {
6714d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2000,
6724d5b4572SKonrad Dybcio 	.mnd_width = 8,
6734d5b4572SKonrad Dybcio 	.hid_width = 5,
6744d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsi0pll_dsi1pll_map,
6754d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
6764d5b4572SKonrad Dybcio 		.name = "pclk0_clk_src",
6774d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsi0pll_dsi1pll,
6784d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll),
6794d5b4572SKonrad Dybcio 		.ops = &clk_pixel_ops,
6804d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
6814d5b4572SKonrad Dybcio 	},
6824d5b4572SKonrad Dybcio };
6834d5b4572SKonrad Dybcio 
6844d5b4572SKonrad Dybcio static struct clk_rcg2 pclk1_clk_src = {
6854d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2020,
6864d5b4572SKonrad Dybcio 	.mnd_width = 8,
6874d5b4572SKonrad Dybcio 	.hid_width = 5,
6884d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsi0pll_dsi1pll_map,
6894d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
6904d5b4572SKonrad Dybcio 		.name = "pclk1_clk_src",
6914d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsi0pll_dsi1pll,
6924d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll),
6934d5b4572SKonrad Dybcio 		.ops = &clk_pixel_ops,
6944d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
6954d5b4572SKonrad Dybcio 	},
6964d5b4572SKonrad Dybcio };
6974d5b4572SKonrad Dybcio 
6984d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_ocmemnoc_clk_src[] = {
6994d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
7004d5b4572SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
7014d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
7024d5b4572SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
7034d5b4572SKonrad Dybcio 	F(228570000, P_MMPLL0, 3.5, 0, 0),
7044d5b4572SKonrad Dybcio 	F(266670000, P_MMPLL0, 3, 0, 0),
7054d5b4572SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
7064d5b4572SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
7074d5b4572SKonrad Dybcio 	{ }
7084d5b4572SKonrad Dybcio };
7094d5b4572SKonrad Dybcio 
710*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_ocmemnoc_clk_src_8992[] = {
711*e0be9986SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
712*e0be9986SKonrad Dybcio 	F(75000000, P_GPLL0, 8, 0, 0),
713*e0be9986SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
714*e0be9986SKonrad Dybcio 	F(150000000, P_GPLL0, 4, 0, 0),
715*e0be9986SKonrad Dybcio 	F(320000000, P_MMPLL0, 2.5, 0, 0),
716*e0be9986SKonrad Dybcio 	F(400000000, P_MMPLL0, 2, 0, 0),
717*e0be9986SKonrad Dybcio 	{ }
718*e0be9986SKonrad Dybcio };
719*e0be9986SKonrad Dybcio 
7204d5b4572SKonrad Dybcio static struct clk_rcg2 ocmemnoc_clk_src = {
7214d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x5090,
7224d5b4572SKonrad Dybcio 	.hid_width = 5,
7234d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
7244d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_ocmemnoc_clk_src,
7254d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
7264d5b4572SKonrad Dybcio 		.name = "ocmemnoc_clk_src",
7274d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
7284d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
7294d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
7304d5b4572SKonrad Dybcio 	},
7314d5b4572SKonrad Dybcio };
7324d5b4572SKonrad Dybcio 
7334d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_cci_clk_src[] = {
7344d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
7354d5b4572SKonrad Dybcio 	F(37500000, P_GPLL0, 16, 0, 0),
7364d5b4572SKonrad Dybcio 	F(50000000, P_GPLL0, 12, 0, 0),
7374d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
7384d5b4572SKonrad Dybcio 	{ }
7394d5b4572SKonrad Dybcio };
7404d5b4572SKonrad Dybcio 
7414d5b4572SKonrad Dybcio static struct clk_rcg2 cci_clk_src = {
7424d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3300,
7434d5b4572SKonrad Dybcio 	.mnd_width = 8,
7444d5b4572SKonrad Dybcio 	.hid_width = 5,
7454d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
7464d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_cci_clk_src,
7474d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
7484d5b4572SKonrad Dybcio 		.name = "cci_clk_src",
7494d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
7504d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
7514d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
7524d5b4572SKonrad Dybcio 	},
7534d5b4572SKonrad Dybcio };
7544d5b4572SKonrad Dybcio 
7554d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_mmss_gp0_1_clk_src[] = {
7564d5b4572SKonrad Dybcio 	F(10000, P_XO, 16, 10, 120),
7574d5b4572SKonrad Dybcio 	F(24000, P_GPLL0, 16, 1, 50),
7584d5b4572SKonrad Dybcio 	F(6000000, P_GPLL0, 10, 1, 10),
7594d5b4572SKonrad Dybcio 	F(12000000, P_GPLL0, 10, 1, 5),
7604d5b4572SKonrad Dybcio 	F(13000000, P_GPLL0, 4, 13, 150),
7614d5b4572SKonrad Dybcio 	F(24000000, P_GPLL0, 5, 1, 5),
7624d5b4572SKonrad Dybcio 	{ }
7634d5b4572SKonrad Dybcio };
7644d5b4572SKonrad Dybcio 
7654d5b4572SKonrad Dybcio static struct clk_rcg2 mmss_gp0_clk_src = {
7664d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3420,
7674d5b4572SKonrad Dybcio 	.mnd_width = 8,
7684d5b4572SKonrad Dybcio 	.hid_width = 5,
7694d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
7704d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mmss_gp0_1_clk_src,
7714d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
7724d5b4572SKonrad Dybcio 		.name = "mmss_gp0_clk_src",
7734d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
7744d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
7754d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
7764d5b4572SKonrad Dybcio 	},
7774d5b4572SKonrad Dybcio };
7784d5b4572SKonrad Dybcio 
7794d5b4572SKonrad Dybcio static struct clk_rcg2 mmss_gp1_clk_src = {
7804d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3450,
7814d5b4572SKonrad Dybcio 	.mnd_width = 8,
7824d5b4572SKonrad Dybcio 	.hid_width = 5,
7834d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
7844d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mmss_gp0_1_clk_src,
7854d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
7864d5b4572SKonrad Dybcio 		.name = "mmss_gp1_clk_src",
7874d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
7884d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
7894d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
7904d5b4572SKonrad Dybcio 	},
7914d5b4572SKonrad Dybcio };
7924d5b4572SKonrad Dybcio 
7934d5b4572SKonrad Dybcio static struct clk_rcg2 jpeg0_clk_src = {
7944d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3500,
7954d5b4572SKonrad Dybcio 	.hid_width = 5,
7964d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
7974d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_jpeg0_1_clk_src,
7984d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
7994d5b4572SKonrad Dybcio 		.name = "jpeg0_clk_src",
8004d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
8014d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
8024d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
8034d5b4572SKonrad Dybcio 	},
8044d5b4572SKonrad Dybcio };
8054d5b4572SKonrad Dybcio 
8064d5b4572SKonrad Dybcio static struct clk_rcg2 jpeg_dma_clk_src = {
8074d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3560,
8084d5b4572SKonrad Dybcio 	.hid_width = 5,
8094d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,
8104d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_jpeg0_1_clk_src,
8114d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
8124d5b4572SKonrad Dybcio 		.name = "jpeg_dma_clk_src",
8134d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,
8144d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),
8154d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
8164d5b4572SKonrad Dybcio 	},
8174d5b4572SKonrad Dybcio };
8184d5b4572SKonrad Dybcio 
8194d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_mclk0_1_2_3_clk_src[] = {
8204d5b4572SKonrad Dybcio 	F(4800000, P_XO, 4, 0, 0),
8214d5b4572SKonrad Dybcio 	F(6000000, P_GPLL0, 10, 1, 10),
8224d5b4572SKonrad Dybcio 	F(8000000, P_GPLL0, 15, 1, 5),
8234d5b4572SKonrad Dybcio 	F(9600000, P_XO, 2, 0, 0),
8244d5b4572SKonrad Dybcio 	F(16000000, P_MMPLL0, 10, 1, 5),
8254d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
8264d5b4572SKonrad Dybcio 	F(24000000, P_GPLL0, 5, 1, 5),
8274d5b4572SKonrad Dybcio 	F(32000000, P_MMPLL0, 5, 1, 5),
8284d5b4572SKonrad Dybcio 	F(48000000, P_GPLL0, 12.5, 0, 0),
8294d5b4572SKonrad Dybcio 	F(64000000, P_MMPLL0, 12.5, 0, 0),
8304d5b4572SKonrad Dybcio 	{ }
8314d5b4572SKonrad Dybcio };
8324d5b4572SKonrad Dybcio 
833*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_mclk0_clk_src_8992[] = {
834*e0be9986SKonrad Dybcio 	F(4800000, P_XO, 4, 0, 0),
835*e0be9986SKonrad Dybcio 	F(6000000, P_MMPLL4, 10, 1, 16),
836*e0be9986SKonrad Dybcio 	F(8000000, P_MMPLL4, 10, 1, 12),
837*e0be9986SKonrad Dybcio 	F(9600000, P_XO, 2, 0, 0),
838*e0be9986SKonrad Dybcio 	F(12000000, P_MMPLL4, 10, 1, 8),
839*e0be9986SKonrad Dybcio 	F(16000000, P_MMPLL4, 10, 1, 6),
840*e0be9986SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
841*e0be9986SKonrad Dybcio 	F(24000000, P_MMPLL4, 10, 1, 4),
842*e0be9986SKonrad Dybcio 	F(32000000, P_MMPLL4, 10, 1, 3),
843*e0be9986SKonrad Dybcio 	F(48000000, P_MMPLL4, 10, 1, 2),
844*e0be9986SKonrad Dybcio 	F(64000000, P_MMPLL4, 15, 0, 0),
845*e0be9986SKonrad Dybcio 	{ }
846*e0be9986SKonrad Dybcio };
847*e0be9986SKonrad Dybcio 
848*e0be9986SKonrad Dybcio static const struct freq_tbl ftbl_mclk1_2_3_clk_src_8992[] = {
849*e0be9986SKonrad Dybcio 	F(4800000, P_XO, 4, 0, 0),
850*e0be9986SKonrad Dybcio 	F(6000000, P_MMPLL4, 10, 1, 16),
851*e0be9986SKonrad Dybcio 	F(8000000, P_MMPLL4, 10, 1, 12),
852*e0be9986SKonrad Dybcio 	F(9600000, P_XO, 2, 0, 0),
853*e0be9986SKonrad Dybcio 	F(16000000, P_MMPLL4, 10, 1, 6),
854*e0be9986SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
855*e0be9986SKonrad Dybcio 	F(24000000, P_MMPLL4, 10, 1, 4),
856*e0be9986SKonrad Dybcio 	F(32000000, P_MMPLL4, 10, 1, 3),
857*e0be9986SKonrad Dybcio 	F(48000000, P_MMPLL4, 10, 1, 2),
858*e0be9986SKonrad Dybcio 	F(64000000, P_MMPLL4, 15, 0, 0),
859*e0be9986SKonrad Dybcio 	{ }
860*e0be9986SKonrad Dybcio };
861*e0be9986SKonrad Dybcio 
8624d5b4572SKonrad Dybcio static struct clk_rcg2 mclk0_clk_src = {
8634d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3360,
8644d5b4572SKonrad Dybcio 	.mnd_width = 8,
8654d5b4572SKonrad Dybcio 	.hid_width = 5,
8664d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
8674d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,
8684d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
8694d5b4572SKonrad Dybcio 		.name = "mclk0_clk_src",
8704d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
8714d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
8724d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
8734d5b4572SKonrad Dybcio 	},
8744d5b4572SKonrad Dybcio };
8754d5b4572SKonrad Dybcio 
8764d5b4572SKonrad Dybcio static struct clk_rcg2 mclk1_clk_src = {
8774d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3390,
8784d5b4572SKonrad Dybcio 	.mnd_width = 8,
8794d5b4572SKonrad Dybcio 	.hid_width = 5,
8804d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
8814d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,
8824d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
8834d5b4572SKonrad Dybcio 		.name = "mclk1_clk_src",
8844d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
8854d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
8864d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
8874d5b4572SKonrad Dybcio 	},
8884d5b4572SKonrad Dybcio };
8894d5b4572SKonrad Dybcio 
8904d5b4572SKonrad Dybcio static struct clk_rcg2 mclk2_clk_src = {
8914d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x33c0,
8924d5b4572SKonrad Dybcio 	.mnd_width = 8,
8934d5b4572SKonrad Dybcio 	.hid_width = 5,
8944d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
8954d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,
8964d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
8974d5b4572SKonrad Dybcio 		.name = "mclk2_clk_src",
8984d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
8994d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
9004d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
9014d5b4572SKonrad Dybcio 	},
9024d5b4572SKonrad Dybcio };
9034d5b4572SKonrad Dybcio 
9044d5b4572SKonrad Dybcio static struct clk_rcg2 mclk3_clk_src = {
9054d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x33f0,
9064d5b4572SKonrad Dybcio 	.mnd_width = 8,
9074d5b4572SKonrad Dybcio 	.hid_width = 5,
9084d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
9094d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,
9104d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9114d5b4572SKonrad Dybcio 		.name = "mclk3_clk_src",
9124d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
9134d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
9144d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
9154d5b4572SKonrad Dybcio 	},
9164d5b4572SKonrad Dybcio };
9174d5b4572SKonrad Dybcio 
9184d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_csi0_1phytimer_clk_src[] = {
9194d5b4572SKonrad Dybcio 	F(50000000, P_GPLL0, 12, 0, 0),
9204d5b4572SKonrad Dybcio 	F(100000000, P_GPLL0, 6, 0, 0),
9214d5b4572SKonrad Dybcio 	F(200000000, P_MMPLL0, 4, 0, 0),
9224d5b4572SKonrad Dybcio 	{ }
9234d5b4572SKonrad Dybcio };
9244d5b4572SKonrad Dybcio 
9254d5b4572SKonrad Dybcio static struct clk_rcg2 csi0phytimer_clk_src = {
9264d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3000,
9274d5b4572SKonrad Dybcio 	.hid_width = 5,
9284d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
9294d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1phytimer_clk_src,
9304d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9314d5b4572SKonrad Dybcio 		.name = "csi0phytimer_clk_src",
9324d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
9334d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
9344d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
9354d5b4572SKonrad Dybcio 	},
9364d5b4572SKonrad Dybcio };
9374d5b4572SKonrad Dybcio 
9384d5b4572SKonrad Dybcio static struct clk_rcg2 csi1phytimer_clk_src = {
9394d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x3030,
9404d5b4572SKonrad Dybcio 	.hid_width = 5,
9414d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_mmpll0_map,
9424d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_csi0_1phytimer_clk_src,
9434d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9444d5b4572SKonrad Dybcio 		.name = "csi1phytimer_clk_src",
9454d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0_mmpll0,
9464d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),
9474d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
9484d5b4572SKonrad Dybcio 	},
9494d5b4572SKonrad Dybcio };
9504d5b4572SKonrad Dybcio 
9514d5b4572SKonrad Dybcio static struct clk_rcg2 byte0_clk_src = {
9524d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2120,
9534d5b4572SKonrad Dybcio 	.hid_width = 5,
9544d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsibyte_map,
9554d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9564d5b4572SKonrad Dybcio 		.name = "byte0_clk_src",
9574d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsibyte,
9584d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),
9594d5b4572SKonrad Dybcio 		.ops = &clk_byte2_ops,
9604d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
9614d5b4572SKonrad Dybcio 	},
9624d5b4572SKonrad Dybcio };
9634d5b4572SKonrad Dybcio 
9644d5b4572SKonrad Dybcio static struct clk_rcg2 byte1_clk_src = {
9654d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2140,
9664d5b4572SKonrad Dybcio 	.hid_width = 5,
9674d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsibyte_map,
9684d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9694d5b4572SKonrad Dybcio 		.name = "byte1_clk_src",
9704d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsibyte,
9714d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),
9724d5b4572SKonrad Dybcio 		.ops = &clk_byte2_ops,
9734d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
9744d5b4572SKonrad Dybcio 	},
9754d5b4572SKonrad Dybcio };
9764d5b4572SKonrad Dybcio 
9774d5b4572SKonrad Dybcio static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
9784d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
9794d5b4572SKonrad Dybcio 	{ }
9804d5b4572SKonrad Dybcio };
9814d5b4572SKonrad Dybcio 
9824d5b4572SKonrad Dybcio static struct clk_rcg2 esc0_clk_src = {
9834d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2160,
9844d5b4572SKonrad Dybcio 	.hid_width = 5,
9854d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsibyte_map,
9864d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mdss_esc0_1_clk,
9874d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
9884d5b4572SKonrad Dybcio 		.name = "esc0_clk_src",
9894d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsibyte,
9904d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),
9914d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
9924d5b4572SKonrad Dybcio 	},
9934d5b4572SKonrad Dybcio };
9944d5b4572SKonrad Dybcio 
9954d5b4572SKonrad Dybcio static struct clk_rcg2 esc1_clk_src = {
9964d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2180,
9974d5b4572SKonrad Dybcio 	.hid_width = 5,
9984d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_dsibyte_map,
9994d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mdss_esc0_1_clk,
10004d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
10014d5b4572SKonrad Dybcio 		.name = "esc1_clk_src",
10024d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_dsibyte,
10034d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),
10044d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
10054d5b4572SKonrad Dybcio 	},
10064d5b4572SKonrad Dybcio };
10074d5b4572SKonrad Dybcio 
10084d5b4572SKonrad Dybcio static struct freq_tbl extpclk_freq_tbl[] = {
10094d5b4572SKonrad Dybcio 	{ .src = P_HDMIPLL },
10104d5b4572SKonrad Dybcio 	{ }
10114d5b4572SKonrad Dybcio };
10124d5b4572SKonrad Dybcio 
10134d5b4572SKonrad Dybcio static struct clk_rcg2 extpclk_clk_src = {
10144d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2060,
10154d5b4572SKonrad Dybcio 	.hid_width = 5,
10164d5b4572SKonrad Dybcio 	.parent_map = mmss_xo_hdmi_map,
10174d5b4572SKonrad Dybcio 	.freq_tbl = extpclk_freq_tbl,
10184d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
10194d5b4572SKonrad Dybcio 		.name = "extpclk_clk_src",
10204d5b4572SKonrad Dybcio 		.parent_data = mmss_xo_hdmi,
10214d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmss_xo_hdmi),
10224d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
10234d5b4572SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
10244d5b4572SKonrad Dybcio 	},
10254d5b4572SKonrad Dybcio };
10264d5b4572SKonrad Dybcio 
10274d5b4572SKonrad Dybcio static struct freq_tbl ftbl_hdmi_clk_src[] = {
10284d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
10294d5b4572SKonrad Dybcio 	{ }
10304d5b4572SKonrad Dybcio };
10314d5b4572SKonrad Dybcio 
10324d5b4572SKonrad Dybcio static struct clk_rcg2 hdmi_clk_src = {
10334d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2100,
10344d5b4572SKonrad Dybcio 	.hid_width = 5,
10354d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
10364d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_hdmi_clk_src,
10374d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
10384d5b4572SKonrad Dybcio 		.name = "hdmi_clk_src",
10394d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
10404d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
10414d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
10424d5b4572SKonrad Dybcio 	},
10434d5b4572SKonrad Dybcio };
10444d5b4572SKonrad Dybcio 
10454d5b4572SKonrad Dybcio static struct freq_tbl ftbl_mdss_vsync_clk[] = {
10464d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
10474d5b4572SKonrad Dybcio 	{ }
10484d5b4572SKonrad Dybcio };
10494d5b4572SKonrad Dybcio 
10504d5b4572SKonrad Dybcio static struct clk_rcg2 vsync_clk_src = {
10514d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x2080,
10524d5b4572SKonrad Dybcio 	.hid_width = 5,
10534d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
10544d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_mdss_vsync_clk,
10554d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
10564d5b4572SKonrad Dybcio 		.name = "vsync_clk_src",
10574d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
10584d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
10594d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
10604d5b4572SKonrad Dybcio 	},
10614d5b4572SKonrad Dybcio };
10624d5b4572SKonrad Dybcio 
10634d5b4572SKonrad Dybcio static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {
10644d5b4572SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
10654d5b4572SKonrad Dybcio 	{ }
10664d5b4572SKonrad Dybcio };
10674d5b4572SKonrad Dybcio 
10684d5b4572SKonrad Dybcio static struct clk_rcg2 rbbmtimer_clk_src = {
10694d5b4572SKonrad Dybcio 	.cmd_rcgr = 0x4090,
10704d5b4572SKonrad Dybcio 	.hid_width = 5,
10714d5b4572SKonrad Dybcio 	.parent_map = mmcc_xo_gpll0_map,
10724d5b4572SKonrad Dybcio 	.freq_tbl = ftbl_rbbmtimer_clk_src,
10734d5b4572SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
10744d5b4572SKonrad Dybcio 		.name = "rbbmtimer_clk_src",
10754d5b4572SKonrad Dybcio 		.parent_data = mmcc_xo_gpll0,
10764d5b4572SKonrad Dybcio 		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),
10774d5b4572SKonrad Dybcio 		.ops = &clk_rcg2_ops,
10784d5b4572SKonrad Dybcio 	},
10794d5b4572SKonrad Dybcio };
10804d5b4572SKonrad Dybcio 
10814d5b4572SKonrad Dybcio static struct clk_branch camss_ahb_clk = {
10824d5b4572SKonrad Dybcio 	.halt_reg = 0x348c,
10834d5b4572SKonrad Dybcio 	.clkr = {
10844d5b4572SKonrad Dybcio 		.enable_reg = 0x348c,
10854d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
10864d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
10874d5b4572SKonrad Dybcio 			.name = "camss_ahb_clk",
10884d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
10894d5b4572SKonrad Dybcio 			.num_parents = 1,
10904d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
10914d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
10924d5b4572SKonrad Dybcio 		},
10934d5b4572SKonrad Dybcio 	},
10944d5b4572SKonrad Dybcio };
10954d5b4572SKonrad Dybcio 
10964d5b4572SKonrad Dybcio static struct clk_branch camss_cci_cci_ahb_clk = {
10974d5b4572SKonrad Dybcio 	.halt_reg = 0x3348,
10984d5b4572SKonrad Dybcio 	.clkr = {
10994d5b4572SKonrad Dybcio 		.enable_reg = 0x3348,
11004d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11014d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11024d5b4572SKonrad Dybcio 			.name = "camss_cci_cci_ahb_clk",
11034d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
11044d5b4572SKonrad Dybcio 			.num_parents = 1,
11054d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
11064d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11074d5b4572SKonrad Dybcio 		},
11084d5b4572SKonrad Dybcio 	},
11094d5b4572SKonrad Dybcio };
11104d5b4572SKonrad Dybcio 
11114d5b4572SKonrad Dybcio static struct clk_branch camss_cci_cci_clk = {
11124d5b4572SKonrad Dybcio 	.halt_reg = 0x3344,
11134d5b4572SKonrad Dybcio 	.clkr = {
11144d5b4572SKonrad Dybcio 		.enable_reg = 0x3344,
11154d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11164d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11174d5b4572SKonrad Dybcio 			.name = "camss_cci_cci_clk",
11184d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw },
11194d5b4572SKonrad Dybcio 			.num_parents = 1,
11204d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11214d5b4572SKonrad Dybcio 		},
11224d5b4572SKonrad Dybcio 	},
11234d5b4572SKonrad Dybcio };
11244d5b4572SKonrad Dybcio 
11254d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_cpp_ahb_clk = {
11264d5b4572SKonrad Dybcio 	.halt_reg = 0x36b4,
11274d5b4572SKonrad Dybcio 	.clkr = {
11284d5b4572SKonrad Dybcio 		.enable_reg = 0x36b4,
11294d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11304d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11314d5b4572SKonrad Dybcio 			.name = "camss_vfe_cpp_ahb_clk",
11324d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
11334d5b4572SKonrad Dybcio 			.num_parents = 1,
11344d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
11354d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11364d5b4572SKonrad Dybcio 		},
11374d5b4572SKonrad Dybcio 	},
11384d5b4572SKonrad Dybcio };
11394d5b4572SKonrad Dybcio 
11404d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_cpp_axi_clk = {
11414d5b4572SKonrad Dybcio 	.halt_reg = 0x36c4,
11424d5b4572SKonrad Dybcio 	.clkr = {
11434d5b4572SKonrad Dybcio 		.enable_reg = 0x36c4,
11444d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11454d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11464d5b4572SKonrad Dybcio 			.name = "camss_vfe_cpp_axi_clk",
11474d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
11484d5b4572SKonrad Dybcio 			.num_parents = 1,
11494d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11504d5b4572SKonrad Dybcio 		},
11514d5b4572SKonrad Dybcio 	},
11524d5b4572SKonrad Dybcio };
11534d5b4572SKonrad Dybcio 
11544d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_cpp_clk = {
11554d5b4572SKonrad Dybcio 	.halt_reg = 0x36b0,
11564d5b4572SKonrad Dybcio 	.clkr = {
11574d5b4572SKonrad Dybcio 		.enable_reg = 0x36b0,
11584d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11594d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11604d5b4572SKonrad Dybcio 			.name = "camss_vfe_cpp_clk",
11614d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw },
11624d5b4572SKonrad Dybcio 			.num_parents = 1,
11634d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11644d5b4572SKonrad Dybcio 		},
11654d5b4572SKonrad Dybcio 	},
11664d5b4572SKonrad Dybcio };
11674d5b4572SKonrad Dybcio 
11684d5b4572SKonrad Dybcio static struct clk_branch camss_csi0_ahb_clk = {
11694d5b4572SKonrad Dybcio 	.halt_reg = 0x30bc,
11704d5b4572SKonrad Dybcio 	.clkr = {
11714d5b4572SKonrad Dybcio 		.enable_reg = 0x30bc,
11724d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11734d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11744d5b4572SKonrad Dybcio 			.name = "camss_csi0_ahb_clk",
11754d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
11764d5b4572SKonrad Dybcio 			.num_parents = 1,
11774d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
11784d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11794d5b4572SKonrad Dybcio 		},
11804d5b4572SKonrad Dybcio 	},
11814d5b4572SKonrad Dybcio };
11824d5b4572SKonrad Dybcio 
11834d5b4572SKonrad Dybcio static struct clk_branch camss_csi0_clk = {
11844d5b4572SKonrad Dybcio 	.halt_reg = 0x30b4,
11854d5b4572SKonrad Dybcio 	.clkr = {
11864d5b4572SKonrad Dybcio 		.enable_reg = 0x30b4,
11874d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
11884d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
11894d5b4572SKonrad Dybcio 			.name = "camss_csi0_clk",
11904d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
11914d5b4572SKonrad Dybcio 			.num_parents = 1,
11924d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
11934d5b4572SKonrad Dybcio 		},
11944d5b4572SKonrad Dybcio 	},
11954d5b4572SKonrad Dybcio };
11964d5b4572SKonrad Dybcio 
11974d5b4572SKonrad Dybcio static struct clk_branch camss_csi0phy_clk = {
11984d5b4572SKonrad Dybcio 	.halt_reg = 0x30c4,
11994d5b4572SKonrad Dybcio 	.clkr = {
12004d5b4572SKonrad Dybcio 		.enable_reg = 0x30c4,
12014d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12024d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12034d5b4572SKonrad Dybcio 			.name = "camss_csi0phy_clk",
12044d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
12054d5b4572SKonrad Dybcio 			.num_parents = 1,
12064d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12074d5b4572SKonrad Dybcio 		},
12084d5b4572SKonrad Dybcio 	},
12094d5b4572SKonrad Dybcio };
12104d5b4572SKonrad Dybcio 
12114d5b4572SKonrad Dybcio static struct clk_branch camss_csi0pix_clk = {
12124d5b4572SKonrad Dybcio 	.halt_reg = 0x30e4,
12134d5b4572SKonrad Dybcio 	.clkr = {
12144d5b4572SKonrad Dybcio 		.enable_reg = 0x30e4,
12154d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12164d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12174d5b4572SKonrad Dybcio 			.name = "camss_csi0pix_clk",
12184d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
12194d5b4572SKonrad Dybcio 			.num_parents = 1,
12204d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12214d5b4572SKonrad Dybcio 		},
12224d5b4572SKonrad Dybcio 	},
12234d5b4572SKonrad Dybcio };
12244d5b4572SKonrad Dybcio 
12254d5b4572SKonrad Dybcio static struct clk_branch camss_csi0rdi_clk = {
12264d5b4572SKonrad Dybcio 	.halt_reg = 0x30d4,
12274d5b4572SKonrad Dybcio 	.clkr = {
12284d5b4572SKonrad Dybcio 		.enable_reg = 0x30d4,
12294d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12304d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12314d5b4572SKonrad Dybcio 			.name = "camss_csi0rdi_clk",
12324d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
12334d5b4572SKonrad Dybcio 			.num_parents = 1,
12344d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12354d5b4572SKonrad Dybcio 		},
12364d5b4572SKonrad Dybcio 	},
12374d5b4572SKonrad Dybcio };
12384d5b4572SKonrad Dybcio 
12394d5b4572SKonrad Dybcio static struct clk_branch camss_csi1_ahb_clk = {
12404d5b4572SKonrad Dybcio 	.halt_reg = 0x3128,
12414d5b4572SKonrad Dybcio 	.clkr = {
12424d5b4572SKonrad Dybcio 		.enable_reg = 0x3128,
12434d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12444d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12454d5b4572SKonrad Dybcio 			.name = "camss_csi1_ahb_clk",
12464d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
12474d5b4572SKonrad Dybcio 			.num_parents = 1,
12484d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
12494d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12504d5b4572SKonrad Dybcio 		},
12514d5b4572SKonrad Dybcio 	},
12524d5b4572SKonrad Dybcio };
12534d5b4572SKonrad Dybcio 
12544d5b4572SKonrad Dybcio static struct clk_branch camss_csi1_clk = {
12554d5b4572SKonrad Dybcio 	.halt_reg = 0x3124,
12564d5b4572SKonrad Dybcio 	.clkr = {
12574d5b4572SKonrad Dybcio 		.enable_reg = 0x3124,
12584d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12594d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12604d5b4572SKonrad Dybcio 			.name = "camss_csi1_clk",
12614d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
12624d5b4572SKonrad Dybcio 			.num_parents = 1,
12634d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12644d5b4572SKonrad Dybcio 		},
12654d5b4572SKonrad Dybcio 	},
12664d5b4572SKonrad Dybcio };
12674d5b4572SKonrad Dybcio 
12684d5b4572SKonrad Dybcio static struct clk_branch camss_csi1phy_clk = {
12694d5b4572SKonrad Dybcio 	.halt_reg = 0x3134,
12704d5b4572SKonrad Dybcio 	.clkr = {
12714d5b4572SKonrad Dybcio 		.enable_reg = 0x3134,
12724d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12734d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12744d5b4572SKonrad Dybcio 			.name = "camss_csi1phy_clk",
12754d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
12764d5b4572SKonrad Dybcio 			.num_parents = 1,
12774d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12784d5b4572SKonrad Dybcio 		},
12794d5b4572SKonrad Dybcio 	},
12804d5b4572SKonrad Dybcio };
12814d5b4572SKonrad Dybcio 
12824d5b4572SKonrad Dybcio static struct clk_branch camss_csi1pix_clk = {
12834d5b4572SKonrad Dybcio 	.halt_reg = 0x3154,
12844d5b4572SKonrad Dybcio 	.clkr = {
12854d5b4572SKonrad Dybcio 		.enable_reg = 0x3154,
12864d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
12874d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
12884d5b4572SKonrad Dybcio 			.name = "camss_csi1pix_clk",
12894d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
12904d5b4572SKonrad Dybcio 			.num_parents = 1,
12914d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
12924d5b4572SKonrad Dybcio 		},
12934d5b4572SKonrad Dybcio 	},
12944d5b4572SKonrad Dybcio };
12954d5b4572SKonrad Dybcio 
12964d5b4572SKonrad Dybcio static struct clk_branch camss_csi1rdi_clk = {
12974d5b4572SKonrad Dybcio 	.halt_reg = 0x3144,
12984d5b4572SKonrad Dybcio 	.clkr = {
12994d5b4572SKonrad Dybcio 		.enable_reg = 0x3144,
13004d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13014d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13024d5b4572SKonrad Dybcio 			.name = "camss_csi1rdi_clk",
13034d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
13044d5b4572SKonrad Dybcio 			.num_parents = 1,
13054d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13064d5b4572SKonrad Dybcio 		},
13074d5b4572SKonrad Dybcio 	},
13084d5b4572SKonrad Dybcio };
13094d5b4572SKonrad Dybcio 
13104d5b4572SKonrad Dybcio static struct clk_branch camss_csi2_ahb_clk = {
13114d5b4572SKonrad Dybcio 	.halt_reg = 0x3188,
13124d5b4572SKonrad Dybcio 	.clkr = {
13134d5b4572SKonrad Dybcio 		.enable_reg = 0x3188,
13144d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13154d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13164d5b4572SKonrad Dybcio 			.name = "camss_csi2_ahb_clk",
13174d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
13184d5b4572SKonrad Dybcio 			.num_parents = 1,
13194d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
13204d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13214d5b4572SKonrad Dybcio 		},
13224d5b4572SKonrad Dybcio 	},
13234d5b4572SKonrad Dybcio };
13244d5b4572SKonrad Dybcio 
13254d5b4572SKonrad Dybcio static struct clk_branch camss_csi2_clk = {
13264d5b4572SKonrad Dybcio 	.halt_reg = 0x3184,
13274d5b4572SKonrad Dybcio 	.clkr = {
13284d5b4572SKonrad Dybcio 		.enable_reg = 0x3184,
13294d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13304d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13314d5b4572SKonrad Dybcio 			.name = "camss_csi2_clk",
13324d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
13334d5b4572SKonrad Dybcio 			.num_parents = 1,
13344d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13354d5b4572SKonrad Dybcio 		},
13364d5b4572SKonrad Dybcio 	},
13374d5b4572SKonrad Dybcio };
13384d5b4572SKonrad Dybcio 
13394d5b4572SKonrad Dybcio static struct clk_branch camss_csi2phy_clk = {
13404d5b4572SKonrad Dybcio 	.halt_reg = 0x3194,
13414d5b4572SKonrad Dybcio 	.clkr = {
13424d5b4572SKonrad Dybcio 		.enable_reg = 0x3194,
13434d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13444d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13454d5b4572SKonrad Dybcio 			.name = "camss_csi2phy_clk",
13464d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
13474d5b4572SKonrad Dybcio 			.num_parents = 1,
13484d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13494d5b4572SKonrad Dybcio 		},
13504d5b4572SKonrad Dybcio 	},
13514d5b4572SKonrad Dybcio };
13524d5b4572SKonrad Dybcio 
13534d5b4572SKonrad Dybcio static struct clk_branch camss_csi2pix_clk = {
13544d5b4572SKonrad Dybcio 	.halt_reg = 0x31b4,
13554d5b4572SKonrad Dybcio 	.clkr = {
13564d5b4572SKonrad Dybcio 		.enable_reg = 0x31b4,
13574d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13584d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13594d5b4572SKonrad Dybcio 			.name = "camss_csi2pix_clk",
13604d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
13614d5b4572SKonrad Dybcio 			.num_parents = 1,
13624d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13634d5b4572SKonrad Dybcio 		},
13644d5b4572SKonrad Dybcio 	},
13654d5b4572SKonrad Dybcio };
13664d5b4572SKonrad Dybcio 
13674d5b4572SKonrad Dybcio static struct clk_branch camss_csi2rdi_clk = {
13684d5b4572SKonrad Dybcio 	.halt_reg = 0x31a4,
13694d5b4572SKonrad Dybcio 	.clkr = {
13704d5b4572SKonrad Dybcio 		.enable_reg = 0x31a4,
13714d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13724d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13734d5b4572SKonrad Dybcio 			.name = "camss_csi2rdi_clk",
13744d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
13754d5b4572SKonrad Dybcio 			.num_parents = 1,
13764d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13774d5b4572SKonrad Dybcio 		},
13784d5b4572SKonrad Dybcio 	},
13794d5b4572SKonrad Dybcio };
13804d5b4572SKonrad Dybcio 
13814d5b4572SKonrad Dybcio static struct clk_branch camss_csi3_ahb_clk = {
13824d5b4572SKonrad Dybcio 	.halt_reg = 0x31e8,
13834d5b4572SKonrad Dybcio 	.clkr = {
13844d5b4572SKonrad Dybcio 		.enable_reg = 0x31e8,
13854d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
13864d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
13874d5b4572SKonrad Dybcio 			.name = "camss_csi3_ahb_clk",
13884d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
13894d5b4572SKonrad Dybcio 			.num_parents = 1,
13904d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
13914d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
13924d5b4572SKonrad Dybcio 		},
13934d5b4572SKonrad Dybcio 	},
13944d5b4572SKonrad Dybcio };
13954d5b4572SKonrad Dybcio 
13964d5b4572SKonrad Dybcio static struct clk_branch camss_csi3_clk = {
13974d5b4572SKonrad Dybcio 	.halt_reg = 0x31e4,
13984d5b4572SKonrad Dybcio 	.clkr = {
13994d5b4572SKonrad Dybcio 		.enable_reg = 0x31e4,
14004d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14014d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14024d5b4572SKonrad Dybcio 			.name = "camss_csi3_clk",
14034d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
14044d5b4572SKonrad Dybcio 			.num_parents = 1,
14054d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14064d5b4572SKonrad Dybcio 		},
14074d5b4572SKonrad Dybcio 	},
14084d5b4572SKonrad Dybcio };
14094d5b4572SKonrad Dybcio 
14104d5b4572SKonrad Dybcio static struct clk_branch camss_csi3phy_clk = {
14114d5b4572SKonrad Dybcio 	.halt_reg = 0x31f4,
14124d5b4572SKonrad Dybcio 	.clkr = {
14134d5b4572SKonrad Dybcio 		.enable_reg = 0x31f4,
14144d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14154d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14164d5b4572SKonrad Dybcio 			.name = "camss_csi3phy_clk",
14174d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
14184d5b4572SKonrad Dybcio 			.num_parents = 1,
14194d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14204d5b4572SKonrad Dybcio 		},
14214d5b4572SKonrad Dybcio 	},
14224d5b4572SKonrad Dybcio };
14234d5b4572SKonrad Dybcio 
14244d5b4572SKonrad Dybcio static struct clk_branch camss_csi3pix_clk = {
14254d5b4572SKonrad Dybcio 	.halt_reg = 0x3214,
14264d5b4572SKonrad Dybcio 	.clkr = {
14274d5b4572SKonrad Dybcio 		.enable_reg = 0x3214,
14284d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14294d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14304d5b4572SKonrad Dybcio 			.name = "camss_csi3pix_clk",
14314d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
14324d5b4572SKonrad Dybcio 			.num_parents = 1,
14334d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14344d5b4572SKonrad Dybcio 		},
14354d5b4572SKonrad Dybcio 	},
14364d5b4572SKonrad Dybcio };
14374d5b4572SKonrad Dybcio 
14384d5b4572SKonrad Dybcio static struct clk_branch camss_csi3rdi_clk = {
14394d5b4572SKonrad Dybcio 	.halt_reg = 0x3204,
14404d5b4572SKonrad Dybcio 	.clkr = {
14414d5b4572SKonrad Dybcio 		.enable_reg = 0x3204,
14424d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14434d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14444d5b4572SKonrad Dybcio 			.name = "camss_csi3rdi_clk",
14454d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
14464d5b4572SKonrad Dybcio 			.num_parents = 1,
14474d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14484d5b4572SKonrad Dybcio 		},
14494d5b4572SKonrad Dybcio 	},
14504d5b4572SKonrad Dybcio };
14514d5b4572SKonrad Dybcio 
14524d5b4572SKonrad Dybcio static struct clk_branch camss_csi_vfe0_clk = {
14534d5b4572SKonrad Dybcio 	.halt_reg = 0x3704,
14544d5b4572SKonrad Dybcio 	.clkr = {
14554d5b4572SKonrad Dybcio 		.enable_reg = 0x3704,
14564d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14574d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14584d5b4572SKonrad Dybcio 			.name = "camss_csi_vfe0_clk",
14594d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
14604d5b4572SKonrad Dybcio 			.num_parents = 1,
14614d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14624d5b4572SKonrad Dybcio 		},
14634d5b4572SKonrad Dybcio 	},
14644d5b4572SKonrad Dybcio };
14654d5b4572SKonrad Dybcio 
14664d5b4572SKonrad Dybcio static struct clk_branch camss_csi_vfe1_clk = {
14674d5b4572SKonrad Dybcio 	.halt_reg = 0x3714,
14684d5b4572SKonrad Dybcio 	.clkr = {
14694d5b4572SKonrad Dybcio 		.enable_reg = 0x3714,
14704d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14714d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14724d5b4572SKonrad Dybcio 			.name = "camss_csi_vfe1_clk",
14734d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
14744d5b4572SKonrad Dybcio 			.num_parents = 1,
14754d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14764d5b4572SKonrad Dybcio 		},
14774d5b4572SKonrad Dybcio 	},
14784d5b4572SKonrad Dybcio };
14794d5b4572SKonrad Dybcio 
14804d5b4572SKonrad Dybcio static struct clk_branch camss_gp0_clk = {
14814d5b4572SKonrad Dybcio 	.halt_reg = 0x3444,
14824d5b4572SKonrad Dybcio 	.clkr = {
14834d5b4572SKonrad Dybcio 		.enable_reg = 0x3444,
14844d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14854d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
14864d5b4572SKonrad Dybcio 			.name = "camss_gp0_clk",
14874d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mmss_gp0_clk_src.clkr.hw },
14884d5b4572SKonrad Dybcio 			.num_parents = 1,
14894d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
14904d5b4572SKonrad Dybcio 		},
14914d5b4572SKonrad Dybcio 	},
14924d5b4572SKonrad Dybcio };
14934d5b4572SKonrad Dybcio 
14944d5b4572SKonrad Dybcio static struct clk_branch camss_gp1_clk = {
14954d5b4572SKonrad Dybcio 	.halt_reg = 0x3474,
14964d5b4572SKonrad Dybcio 	.clkr = {
14974d5b4572SKonrad Dybcio 		.enable_reg = 0x3474,
14984d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
14994d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15004d5b4572SKonrad Dybcio 			.name = "camss_gp1_clk",
15014d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mmss_gp1_clk_src.clkr.hw },
15024d5b4572SKonrad Dybcio 			.num_parents = 1,
15034d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15044d5b4572SKonrad Dybcio 		},
15054d5b4572SKonrad Dybcio 	},
15064d5b4572SKonrad Dybcio };
15074d5b4572SKonrad Dybcio 
15084d5b4572SKonrad Dybcio static struct clk_branch camss_ispif_ahb_clk = {
15094d5b4572SKonrad Dybcio 	.halt_reg = 0x3224,
15104d5b4572SKonrad Dybcio 	.clkr = {
15114d5b4572SKonrad Dybcio 		.enable_reg = 0x3224,
15124d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15134d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15144d5b4572SKonrad Dybcio 			.name = "camss_ispif_ahb_clk",
15154d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
15164d5b4572SKonrad Dybcio 			.num_parents = 1,
15174d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
15184d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15194d5b4572SKonrad Dybcio 		},
15204d5b4572SKonrad Dybcio 	},
15214d5b4572SKonrad Dybcio };
15224d5b4572SKonrad Dybcio 
15234d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_dma_clk = {
15244d5b4572SKonrad Dybcio 	.halt_reg = 0x35c0,
15254d5b4572SKonrad Dybcio 	.clkr = {
15264d5b4572SKonrad Dybcio 		.enable_reg = 0x35c0,
15274d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15284d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15294d5b4572SKonrad Dybcio 			.name = "camss_jpeg_dma_clk",
15304d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &jpeg_dma_clk_src.clkr.hw },
15314d5b4572SKonrad Dybcio 			.num_parents = 1,
15324d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15334d5b4572SKonrad Dybcio 		},
15344d5b4572SKonrad Dybcio 	},
15354d5b4572SKonrad Dybcio };
15364d5b4572SKonrad Dybcio 
15374d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_jpeg0_clk = {
15384d5b4572SKonrad Dybcio 	.halt_reg = 0x35a8,
15394d5b4572SKonrad Dybcio 	.clkr = {
15404d5b4572SKonrad Dybcio 		.enable_reg = 0x35a8,
15414d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15424d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15434d5b4572SKonrad Dybcio 			.name = "camss_jpeg_jpeg0_clk",
15444d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw },
15454d5b4572SKonrad Dybcio 			.num_parents = 1,
15464d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15474d5b4572SKonrad Dybcio 		},
15484d5b4572SKonrad Dybcio 	},
15494d5b4572SKonrad Dybcio };
15504d5b4572SKonrad Dybcio 
15514d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_jpeg1_clk = {
15524d5b4572SKonrad Dybcio 	.halt_reg = 0x35ac,
15534d5b4572SKonrad Dybcio 	.clkr = {
15544d5b4572SKonrad Dybcio 		.enable_reg = 0x35ac,
15554d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15564d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15574d5b4572SKonrad Dybcio 			.name = "camss_jpeg_jpeg1_clk",
15584d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &jpeg1_clk_src.clkr.hw },
15594d5b4572SKonrad Dybcio 			.num_parents = 1,
15604d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15614d5b4572SKonrad Dybcio 		},
15624d5b4572SKonrad Dybcio 	},
15634d5b4572SKonrad Dybcio };
15644d5b4572SKonrad Dybcio 
15654d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_jpeg2_clk = {
15664d5b4572SKonrad Dybcio 	.halt_reg = 0x35b0,
15674d5b4572SKonrad Dybcio 	.clkr = {
15684d5b4572SKonrad Dybcio 		.enable_reg = 0x35b0,
15694d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15704d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15714d5b4572SKonrad Dybcio 			.name = "camss_jpeg_jpeg2_clk",
15724d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &jpeg2_clk_src.clkr.hw },
15734d5b4572SKonrad Dybcio 			.num_parents = 1,
15744d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15754d5b4572SKonrad Dybcio 		},
15764d5b4572SKonrad Dybcio 	},
15774d5b4572SKonrad Dybcio };
15784d5b4572SKonrad Dybcio 
15794d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
15804d5b4572SKonrad Dybcio 	.halt_reg = 0x35b4,
15814d5b4572SKonrad Dybcio 	.clkr = {
15824d5b4572SKonrad Dybcio 		.enable_reg = 0x35b4,
15834d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15844d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
15854d5b4572SKonrad Dybcio 			.name = "camss_jpeg_jpeg_ahb_clk",
15864d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
15874d5b4572SKonrad Dybcio 			.num_parents = 1,
15884d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
15894d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
15904d5b4572SKonrad Dybcio 		},
15914d5b4572SKonrad Dybcio 	},
15924d5b4572SKonrad Dybcio };
15934d5b4572SKonrad Dybcio 
15944d5b4572SKonrad Dybcio static struct clk_branch camss_jpeg_jpeg_axi_clk = {
15954d5b4572SKonrad Dybcio 	.halt_reg = 0x35b8,
15964d5b4572SKonrad Dybcio 	.clkr = {
15974d5b4572SKonrad Dybcio 		.enable_reg = 0x35b8,
15984d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
15994d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16004d5b4572SKonrad Dybcio 			.name = "camss_jpeg_jpeg_axi_clk",
16014d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
16024d5b4572SKonrad Dybcio 			.num_parents = 1,
16034d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16044d5b4572SKonrad Dybcio 		},
16054d5b4572SKonrad Dybcio 	},
16064d5b4572SKonrad Dybcio };
16074d5b4572SKonrad Dybcio 
16084d5b4572SKonrad Dybcio static struct clk_branch camss_mclk0_clk = {
16094d5b4572SKonrad Dybcio 	.halt_reg = 0x3384,
16104d5b4572SKonrad Dybcio 	.clkr = {
16114d5b4572SKonrad Dybcio 		.enable_reg = 0x3384,
16124d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16134d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16144d5b4572SKonrad Dybcio 			.name = "camss_mclk0_clk",
16154d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw },
16164d5b4572SKonrad Dybcio 			.num_parents = 1,
16174d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16184d5b4572SKonrad Dybcio 		},
16194d5b4572SKonrad Dybcio 	},
16204d5b4572SKonrad Dybcio };
16214d5b4572SKonrad Dybcio 
16224d5b4572SKonrad Dybcio static struct clk_branch camss_mclk1_clk = {
16234d5b4572SKonrad Dybcio 	.halt_reg = 0x33b4,
16244d5b4572SKonrad Dybcio 	.clkr = {
16254d5b4572SKonrad Dybcio 		.enable_reg = 0x33b4,
16264d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16274d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16284d5b4572SKonrad Dybcio 			.name = "camss_mclk1_clk",
16294d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw },
16304d5b4572SKonrad Dybcio 			.num_parents = 1,
16314d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16324d5b4572SKonrad Dybcio 		},
16334d5b4572SKonrad Dybcio 	},
16344d5b4572SKonrad Dybcio };
16354d5b4572SKonrad Dybcio 
16364d5b4572SKonrad Dybcio static struct clk_branch camss_mclk2_clk = {
16374d5b4572SKonrad Dybcio 	.halt_reg = 0x33e4,
16384d5b4572SKonrad Dybcio 	.clkr = {
16394d5b4572SKonrad Dybcio 		.enable_reg = 0x33e4,
16404d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16414d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16424d5b4572SKonrad Dybcio 			.name = "camss_mclk2_clk",
16434d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw },
16444d5b4572SKonrad Dybcio 			.num_parents = 1,
16454d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16464d5b4572SKonrad Dybcio 		},
16474d5b4572SKonrad Dybcio 	},
16484d5b4572SKonrad Dybcio };
16494d5b4572SKonrad Dybcio 
16504d5b4572SKonrad Dybcio static struct clk_branch camss_mclk3_clk = {
16514d5b4572SKonrad Dybcio 	.halt_reg = 0x3414,
16524d5b4572SKonrad Dybcio 	.clkr = {
16534d5b4572SKonrad Dybcio 		.enable_reg = 0x3414,
16544d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16554d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16564d5b4572SKonrad Dybcio 			.name = "camss_mclk3_clk",
16574d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw },
16584d5b4572SKonrad Dybcio 			.num_parents = 1,
16594d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16604d5b4572SKonrad Dybcio 		},
16614d5b4572SKonrad Dybcio 	},
16624d5b4572SKonrad Dybcio };
16634d5b4572SKonrad Dybcio 
16644d5b4572SKonrad Dybcio static struct clk_branch camss_micro_ahb_clk = {
16654d5b4572SKonrad Dybcio 	.halt_reg = 0x3494,
16664d5b4572SKonrad Dybcio 	.clkr = {
16674d5b4572SKonrad Dybcio 		.enable_reg = 0x3494,
16684d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16694d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16704d5b4572SKonrad Dybcio 			.name = "camss_micro_ahb_clk",
16714d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
16724d5b4572SKonrad Dybcio 			.num_parents = 1,
16734d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
16744d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16754d5b4572SKonrad Dybcio 		},
16764d5b4572SKonrad Dybcio 	},
16774d5b4572SKonrad Dybcio };
16784d5b4572SKonrad Dybcio 
16794d5b4572SKonrad Dybcio static struct clk_branch camss_phy0_csi0phytimer_clk = {
16804d5b4572SKonrad Dybcio 	.halt_reg = 0x3024,
16814d5b4572SKonrad Dybcio 	.clkr = {
16824d5b4572SKonrad Dybcio 		.enable_reg = 0x3024,
16834d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16844d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16854d5b4572SKonrad Dybcio 			.name = "camss_phy0_csi0phytimer_clk",
16864d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw },
16874d5b4572SKonrad Dybcio 			.num_parents = 1,
16884d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
16894d5b4572SKonrad Dybcio 		},
16904d5b4572SKonrad Dybcio 	},
16914d5b4572SKonrad Dybcio };
16924d5b4572SKonrad Dybcio 
16934d5b4572SKonrad Dybcio static struct clk_branch camss_phy1_csi1phytimer_clk = {
16944d5b4572SKonrad Dybcio 	.halt_reg = 0x3054,
16954d5b4572SKonrad Dybcio 	.clkr = {
16964d5b4572SKonrad Dybcio 		.enable_reg = 0x3054,
16974d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
16984d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
16994d5b4572SKonrad Dybcio 			.name = "camss_phy1_csi1phytimer_clk",
17004d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw },
17014d5b4572SKonrad Dybcio 			.num_parents = 1,
17024d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17034d5b4572SKonrad Dybcio 		},
17044d5b4572SKonrad Dybcio 	},
17054d5b4572SKonrad Dybcio };
17064d5b4572SKonrad Dybcio 
17074d5b4572SKonrad Dybcio static struct clk_branch camss_phy2_csi2phytimer_clk = {
17084d5b4572SKonrad Dybcio 	.halt_reg = 0x3084,
17094d5b4572SKonrad Dybcio 	.clkr = {
17104d5b4572SKonrad Dybcio 		.enable_reg = 0x3084,
17114d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17124d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17134d5b4572SKonrad Dybcio 			.name = "camss_phy2_csi2phytimer_clk",
17144d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw },
17154d5b4572SKonrad Dybcio 			.num_parents = 1,
17164d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17174d5b4572SKonrad Dybcio 		},
17184d5b4572SKonrad Dybcio 	},
17194d5b4572SKonrad Dybcio };
17204d5b4572SKonrad Dybcio 
17214d5b4572SKonrad Dybcio static struct clk_branch camss_top_ahb_clk = {
17224d5b4572SKonrad Dybcio 	.halt_reg = 0x3484,
17234d5b4572SKonrad Dybcio 	.clkr = {
17244d5b4572SKonrad Dybcio 		.enable_reg = 0x3484,
17254d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17264d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17274d5b4572SKonrad Dybcio 			.name = "camss_top_ahb_clk",
17284d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
17294d5b4572SKonrad Dybcio 			.num_parents = 1,
17304d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
17314d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17324d5b4572SKonrad Dybcio 		},
17334d5b4572SKonrad Dybcio 	},
17344d5b4572SKonrad Dybcio };
17354d5b4572SKonrad Dybcio 
17364d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_vfe0_clk = {
17374d5b4572SKonrad Dybcio 	.halt_reg = 0x36a8,
17384d5b4572SKonrad Dybcio 	.clkr = {
17394d5b4572SKonrad Dybcio 		.enable_reg = 0x36a8,
17404d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17414d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17424d5b4572SKonrad Dybcio 			.name = "camss_vfe_vfe0_clk",
17434d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
17444d5b4572SKonrad Dybcio 			.num_parents = 1,
17454d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17464d5b4572SKonrad Dybcio 		},
17474d5b4572SKonrad Dybcio 	},
17484d5b4572SKonrad Dybcio };
17494d5b4572SKonrad Dybcio 
17504d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_vfe1_clk = {
17514d5b4572SKonrad Dybcio 	.halt_reg = 0x36ac,
17524d5b4572SKonrad Dybcio 	.clkr = {
17534d5b4572SKonrad Dybcio 		.enable_reg = 0x36ac,
17544d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17554d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17564d5b4572SKonrad Dybcio 			.name = "camss_vfe_vfe1_clk",
17574d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
17584d5b4572SKonrad Dybcio 			.num_parents = 1,
17594d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17604d5b4572SKonrad Dybcio 		},
17614d5b4572SKonrad Dybcio 	},
17624d5b4572SKonrad Dybcio };
17634d5b4572SKonrad Dybcio 
17644d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_vfe_ahb_clk = {
17654d5b4572SKonrad Dybcio 	.halt_reg = 0x36b8,
17664d5b4572SKonrad Dybcio 	.clkr = {
17674d5b4572SKonrad Dybcio 		.enable_reg = 0x36b8,
17684d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17694d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17704d5b4572SKonrad Dybcio 			.name = "camss_vfe_vfe_ahb_clk",
17714d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
17724d5b4572SKonrad Dybcio 			.num_parents = 1,
17734d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
17744d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17754d5b4572SKonrad Dybcio 		},
17764d5b4572SKonrad Dybcio 	},
17774d5b4572SKonrad Dybcio };
17784d5b4572SKonrad Dybcio 
17794d5b4572SKonrad Dybcio static struct clk_branch camss_vfe_vfe_axi_clk = {
17804d5b4572SKonrad Dybcio 	.halt_reg = 0x36bc,
17814d5b4572SKonrad Dybcio 	.clkr = {
17824d5b4572SKonrad Dybcio 		.enable_reg = 0x36bc,
17834d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17844d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17854d5b4572SKonrad Dybcio 			.name = "camss_vfe_vfe_axi_clk",
17864d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
17874d5b4572SKonrad Dybcio 			.num_parents = 1,
17884d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
17894d5b4572SKonrad Dybcio 		},
17904d5b4572SKonrad Dybcio 	},
17914d5b4572SKonrad Dybcio };
17924d5b4572SKonrad Dybcio 
17934d5b4572SKonrad Dybcio static struct clk_branch fd_ahb_clk = {
17944d5b4572SKonrad Dybcio 	.halt_reg = 0x3b74,
17954d5b4572SKonrad Dybcio 	.clkr = {
17964d5b4572SKonrad Dybcio 		.enable_reg = 0x3b74,
17974d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
17984d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
17994d5b4572SKonrad Dybcio 			.name = "fd_ahb_clk",
18004d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
18014d5b4572SKonrad Dybcio 			.num_parents = 1,
18024d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18034d5b4572SKonrad Dybcio 		},
18044d5b4572SKonrad Dybcio 	},
18054d5b4572SKonrad Dybcio };
18064d5b4572SKonrad Dybcio 
18074d5b4572SKonrad Dybcio static struct clk_branch fd_axi_clk = {
18084d5b4572SKonrad Dybcio 	.halt_reg = 0x3b70,
18094d5b4572SKonrad Dybcio 	.clkr = {
18104d5b4572SKonrad Dybcio 		.enable_reg = 0x3b70,
18114d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18124d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18134d5b4572SKonrad Dybcio 			.name = "fd_axi_clk",
18144d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
18154d5b4572SKonrad Dybcio 			.num_parents = 1,
18164d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18174d5b4572SKonrad Dybcio 		},
18184d5b4572SKonrad Dybcio 	},
18194d5b4572SKonrad Dybcio };
18204d5b4572SKonrad Dybcio 
18214d5b4572SKonrad Dybcio static struct clk_branch fd_core_clk = {
18224d5b4572SKonrad Dybcio 	.halt_reg = 0x3b68,
18234d5b4572SKonrad Dybcio 	.clkr = {
18244d5b4572SKonrad Dybcio 		.enable_reg = 0x3b68,
18254d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18264d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18274d5b4572SKonrad Dybcio 			.name = "fd_core_clk",
18284d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
18294d5b4572SKonrad Dybcio 			.num_parents = 1,
18304d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18314d5b4572SKonrad Dybcio 		},
18324d5b4572SKonrad Dybcio 	},
18334d5b4572SKonrad Dybcio };
18344d5b4572SKonrad Dybcio 
18354d5b4572SKonrad Dybcio static struct clk_branch fd_core_uar_clk = {
18364d5b4572SKonrad Dybcio 	.halt_reg = 0x3b6c,
18374d5b4572SKonrad Dybcio 	.clkr = {
18384d5b4572SKonrad Dybcio 		.enable_reg = 0x3b6c,
18394d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18404d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18414d5b4572SKonrad Dybcio 			.name = "fd_core_uar_clk",
18424d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
18434d5b4572SKonrad Dybcio 			.num_parents = 1,
18444d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18454d5b4572SKonrad Dybcio 		},
18464d5b4572SKonrad Dybcio 	},
18474d5b4572SKonrad Dybcio };
18484d5b4572SKonrad Dybcio 
18494d5b4572SKonrad Dybcio static struct clk_branch mdss_ahb_clk = {
18504d5b4572SKonrad Dybcio 	.halt_reg = 0x2308,
18514d5b4572SKonrad Dybcio 	.halt_check = BRANCH_HALT,
18524d5b4572SKonrad Dybcio 	.clkr = {
18534d5b4572SKonrad Dybcio 		.enable_reg = 0x2308,
18544d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18554d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18564d5b4572SKonrad Dybcio 			.name = "mdss_ahb_clk",
18574d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
18584d5b4572SKonrad Dybcio 			.num_parents = 1,
18594d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
18604d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18614d5b4572SKonrad Dybcio 		},
18624d5b4572SKonrad Dybcio 	},
18634d5b4572SKonrad Dybcio };
18644d5b4572SKonrad Dybcio 
18654d5b4572SKonrad Dybcio static struct clk_branch mdss_axi_clk = {
18664d5b4572SKonrad Dybcio 	.halt_reg = 0x2310,
18674d5b4572SKonrad Dybcio 	.clkr = {
18684d5b4572SKonrad Dybcio 		.enable_reg = 0x2310,
18694d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18704d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18714d5b4572SKonrad Dybcio 			.name = "mdss_axi_clk",
18724d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
18734d5b4572SKonrad Dybcio 			.num_parents = 1,
18744d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
18754d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18764d5b4572SKonrad Dybcio 		},
18774d5b4572SKonrad Dybcio 	},
18784d5b4572SKonrad Dybcio };
18794d5b4572SKonrad Dybcio 
18804d5b4572SKonrad Dybcio static struct clk_branch mdss_byte0_clk = {
18814d5b4572SKonrad Dybcio 	.halt_reg = 0x233c,
18824d5b4572SKonrad Dybcio 	.clkr = {
18834d5b4572SKonrad Dybcio 		.enable_reg = 0x233c,
18844d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
18854d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
18864d5b4572SKonrad Dybcio 			.name = "mdss_byte0_clk",
18874d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },
18884d5b4572SKonrad Dybcio 			.num_parents = 1,
18894d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
18904d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
18914d5b4572SKonrad Dybcio 		},
18924d5b4572SKonrad Dybcio 	},
18934d5b4572SKonrad Dybcio };
18944d5b4572SKonrad Dybcio 
18954d5b4572SKonrad Dybcio static struct clk_branch mdss_byte1_clk = {
18964d5b4572SKonrad Dybcio 	.halt_reg = 0x2340,
18974d5b4572SKonrad Dybcio 	.clkr = {
18984d5b4572SKonrad Dybcio 		.enable_reg = 0x2340,
18994d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19004d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19014d5b4572SKonrad Dybcio 			.name = "mdss_byte1_clk",
19024d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },
19034d5b4572SKonrad Dybcio 			.num_parents = 1,
19044d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19054d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19064d5b4572SKonrad Dybcio 		},
19074d5b4572SKonrad Dybcio 	},
19084d5b4572SKonrad Dybcio };
19094d5b4572SKonrad Dybcio 
19104d5b4572SKonrad Dybcio static struct clk_branch mdss_esc0_clk = {
19114d5b4572SKonrad Dybcio 	.halt_reg = 0x2344,
19124d5b4572SKonrad Dybcio 	.clkr = {
19134d5b4572SKonrad Dybcio 		.enable_reg = 0x2344,
19144d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19154d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19164d5b4572SKonrad Dybcio 			.name = "mdss_esc0_clk",
19174d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw },
19184d5b4572SKonrad Dybcio 			.num_parents = 1,
19194d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19204d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19214d5b4572SKonrad Dybcio 		},
19224d5b4572SKonrad Dybcio 	},
19234d5b4572SKonrad Dybcio };
19244d5b4572SKonrad Dybcio 
19254d5b4572SKonrad Dybcio static struct clk_branch mdss_esc1_clk = {
19264d5b4572SKonrad Dybcio 	.halt_reg = 0x2348,
19274d5b4572SKonrad Dybcio 	.clkr = {
19284d5b4572SKonrad Dybcio 		.enable_reg = 0x2348,
19294d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19304d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19314d5b4572SKonrad Dybcio 			.name = "mdss_esc1_clk",
19324d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw },
19334d5b4572SKonrad Dybcio 			.num_parents = 1,
19344d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19354d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19364d5b4572SKonrad Dybcio 		},
19374d5b4572SKonrad Dybcio 	},
19384d5b4572SKonrad Dybcio };
19394d5b4572SKonrad Dybcio 
19404d5b4572SKonrad Dybcio static struct clk_branch mdss_extpclk_clk = {
19414d5b4572SKonrad Dybcio 	.halt_reg = 0x2324,
19424d5b4572SKonrad Dybcio 	.clkr = {
19434d5b4572SKonrad Dybcio 		.enable_reg = 0x2324,
19444d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19454d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19464d5b4572SKonrad Dybcio 			.name = "mdss_extpclk_clk",
19474d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw },
19484d5b4572SKonrad Dybcio 			.num_parents = 1,
19494d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19504d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19514d5b4572SKonrad Dybcio 		},
19524d5b4572SKonrad Dybcio 	},
19534d5b4572SKonrad Dybcio };
19544d5b4572SKonrad Dybcio 
19554d5b4572SKonrad Dybcio static struct clk_branch mdss_hdmi_ahb_clk = {
19564d5b4572SKonrad Dybcio 	.halt_reg = 0x230c,
19574d5b4572SKonrad Dybcio 	.clkr = {
19584d5b4572SKonrad Dybcio 		.enable_reg = 0x230c,
19594d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19604d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19614d5b4572SKonrad Dybcio 			.name = "mdss_hdmi_ahb_clk",
19624d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
19634d5b4572SKonrad Dybcio 			.num_parents = 1,
19644d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19654d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19664d5b4572SKonrad Dybcio 		},
19674d5b4572SKonrad Dybcio 	},
19684d5b4572SKonrad Dybcio };
19694d5b4572SKonrad Dybcio 
19704d5b4572SKonrad Dybcio static struct clk_branch mdss_hdmi_clk = {
19714d5b4572SKonrad Dybcio 	.halt_reg = 0x2338,
19724d5b4572SKonrad Dybcio 	.clkr = {
19734d5b4572SKonrad Dybcio 		.enable_reg = 0x2338,
19744d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19754d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19764d5b4572SKonrad Dybcio 			.name = "mdss_hdmi_clk",
19774d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw },
19784d5b4572SKonrad Dybcio 			.num_parents = 1,
19794d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19804d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19814d5b4572SKonrad Dybcio 		},
19824d5b4572SKonrad Dybcio 	},
19834d5b4572SKonrad Dybcio };
19844d5b4572SKonrad Dybcio 
19854d5b4572SKonrad Dybcio static struct clk_branch mdss_mdp_clk = {
19864d5b4572SKonrad Dybcio 	.halt_reg = 0x231c,
19874d5b4572SKonrad Dybcio 	.clkr = {
19884d5b4572SKonrad Dybcio 		.enable_reg = 0x231c,
19894d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
19904d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
19914d5b4572SKonrad Dybcio 			.name = "mdss_mdp_clk",
19924d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },
19934d5b4572SKonrad Dybcio 			.num_parents = 1,
19944d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
19954d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
19964d5b4572SKonrad Dybcio 		},
19974d5b4572SKonrad Dybcio 	},
19984d5b4572SKonrad Dybcio };
19994d5b4572SKonrad Dybcio 
20004d5b4572SKonrad Dybcio static struct clk_branch mdss_pclk0_clk = {
20014d5b4572SKonrad Dybcio 	.halt_reg = 0x2314,
20024d5b4572SKonrad Dybcio 	.clkr = {
20034d5b4572SKonrad Dybcio 		.enable_reg = 0x2314,
20044d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20054d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20064d5b4572SKonrad Dybcio 			.name = "mdss_pclk0_clk",
20074d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw },
20084d5b4572SKonrad Dybcio 			.num_parents = 1,
20094d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
20104d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20114d5b4572SKonrad Dybcio 		},
20124d5b4572SKonrad Dybcio 	},
20134d5b4572SKonrad Dybcio };
20144d5b4572SKonrad Dybcio 
20154d5b4572SKonrad Dybcio static struct clk_branch mdss_pclk1_clk = {
20164d5b4572SKonrad Dybcio 	.halt_reg = 0x2318,
20174d5b4572SKonrad Dybcio 	.clkr = {
20184d5b4572SKonrad Dybcio 		.enable_reg = 0x2318,
20194d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20204d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20214d5b4572SKonrad Dybcio 			.name = "mdss_pclk1_clk",
20224d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw },
20234d5b4572SKonrad Dybcio 			.num_parents = 1,
20244d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
20254d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20264d5b4572SKonrad Dybcio 		},
20274d5b4572SKonrad Dybcio 	},
20284d5b4572SKonrad Dybcio };
20294d5b4572SKonrad Dybcio 
20304d5b4572SKonrad Dybcio static struct clk_branch mdss_vsync_clk = {
20314d5b4572SKonrad Dybcio 	.halt_reg = 0x2328,
20324d5b4572SKonrad Dybcio 	.clkr = {
20334d5b4572SKonrad Dybcio 		.enable_reg = 0x2328,
20344d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20354d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20364d5b4572SKonrad Dybcio 			.name = "mdss_vsync_clk",
20374d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw },
20384d5b4572SKonrad Dybcio 			.num_parents = 1,
20394d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
20404d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20414d5b4572SKonrad Dybcio 		},
20424d5b4572SKonrad Dybcio 	},
20434d5b4572SKonrad Dybcio };
20444d5b4572SKonrad Dybcio 
20454d5b4572SKonrad Dybcio static struct clk_branch mmss_misc_ahb_clk = {
20464d5b4572SKonrad Dybcio 	.halt_reg = 0x502c,
20474d5b4572SKonrad Dybcio 	.clkr = {
20484d5b4572SKonrad Dybcio 		.enable_reg = 0x502c,
20494d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20504d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20514d5b4572SKonrad Dybcio 			.name = "mmss_misc_ahb_clk",
20524d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
20534d5b4572SKonrad Dybcio 			.num_parents = 1,
20544d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
20554d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20564d5b4572SKonrad Dybcio 		},
20574d5b4572SKonrad Dybcio 	},
20584d5b4572SKonrad Dybcio };
20594d5b4572SKonrad Dybcio 
20604d5b4572SKonrad Dybcio static struct clk_branch mmss_mmssnoc_axi_clk = {
20614d5b4572SKonrad Dybcio 	.halt_reg = 0x506c,
20624d5b4572SKonrad Dybcio 	.clkr = {
20634d5b4572SKonrad Dybcio 		.enable_reg = 0x506c,
20644d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20654d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20664d5b4572SKonrad Dybcio 			.name = "mmss_mmssnoc_axi_clk",
20674d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
20684d5b4572SKonrad Dybcio 			.num_parents = 1,
20694d5b4572SKonrad Dybcio 			/* Gating this clock will wreck havoc among MMSS! */
20704d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
20714d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20724d5b4572SKonrad Dybcio 		},
20734d5b4572SKonrad Dybcio 	},
20744d5b4572SKonrad Dybcio };
20754d5b4572SKonrad Dybcio 
20764d5b4572SKonrad Dybcio static struct clk_branch mmss_s0_axi_clk = {
20774d5b4572SKonrad Dybcio 	.halt_reg = 0x5064,
20784d5b4572SKonrad Dybcio 	.clkr = {
20794d5b4572SKonrad Dybcio 		.enable_reg = 0x5064,
20804d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20814d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20824d5b4572SKonrad Dybcio 			.name = "mmss_s0_axi_clk",
20834d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw, },
20844d5b4572SKonrad Dybcio 			.num_parents = 1,
20854d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
20864d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
20874d5b4572SKonrad Dybcio 		},
20884d5b4572SKonrad Dybcio 	},
20894d5b4572SKonrad Dybcio };
20904d5b4572SKonrad Dybcio 
20914d5b4572SKonrad Dybcio static struct clk_branch ocmemcx_ocmemnoc_clk = {
20924d5b4572SKonrad Dybcio 	.halt_reg = 0x4058,
20934d5b4572SKonrad Dybcio 	.clkr = {
20944d5b4572SKonrad Dybcio 		.enable_reg = 0x4058,
20954d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
20964d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
20974d5b4572SKonrad Dybcio 			.name = "ocmemcx_ocmemnoc_clk",
20984d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw },
20994d5b4572SKonrad Dybcio 			.num_parents = 1,
21004d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21014d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21024d5b4572SKonrad Dybcio 		},
21034d5b4572SKonrad Dybcio 	},
21044d5b4572SKonrad Dybcio };
21054d5b4572SKonrad Dybcio 
21064d5b4572SKonrad Dybcio static struct clk_branch oxili_gfx3d_clk = {
21074d5b4572SKonrad Dybcio 	.halt_reg = 0x4028,
21084d5b4572SKonrad Dybcio 	.clkr = {
21094d5b4572SKonrad Dybcio 		.enable_reg = 0x4028,
21104d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21114d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21124d5b4572SKonrad Dybcio 			.name = "oxili_gfx3d_clk",
21134d5b4572SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
21144d5b4572SKonrad Dybcio 				.fw_name = "oxili_gfx3d_clk_src",
21154d5b4572SKonrad Dybcio 				.name = "oxili_gfx3d_clk_src"
21164d5b4572SKonrad Dybcio 			},
21174d5b4572SKonrad Dybcio 			.num_parents = 1,
21184d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21194d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21204d5b4572SKonrad Dybcio 		},
21214d5b4572SKonrad Dybcio 	},
21224d5b4572SKonrad Dybcio };
21234d5b4572SKonrad Dybcio 
21244d5b4572SKonrad Dybcio static struct clk_branch oxili_rbbmtimer_clk = {
21254d5b4572SKonrad Dybcio 	.halt_reg = 0x40b0,
21264d5b4572SKonrad Dybcio 	.clkr = {
21274d5b4572SKonrad Dybcio 		.enable_reg = 0x40b0,
21284d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21294d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21304d5b4572SKonrad Dybcio 			.name = "oxili_rbbmtimer_clk",
21314d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &rbbmtimer_clk_src.clkr.hw },
21324d5b4572SKonrad Dybcio 			.num_parents = 1,
21334d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21344d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21354d5b4572SKonrad Dybcio 		},
21364d5b4572SKonrad Dybcio 	},
21374d5b4572SKonrad Dybcio };
21384d5b4572SKonrad Dybcio 
21394d5b4572SKonrad Dybcio static struct clk_branch oxilicx_ahb_clk = {
21404d5b4572SKonrad Dybcio 	.halt_reg = 0x403c,
21414d5b4572SKonrad Dybcio 	.clkr = {
21424d5b4572SKonrad Dybcio 		.enable_reg = 0x403c,
21434d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21444d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21454d5b4572SKonrad Dybcio 			.name = "oxilicx_ahb_clk",
21464d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
21474d5b4572SKonrad Dybcio 			.num_parents = 1,
21484d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21494d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21504d5b4572SKonrad Dybcio 		},
21514d5b4572SKonrad Dybcio 	},
21524d5b4572SKonrad Dybcio };
21534d5b4572SKonrad Dybcio 
21544d5b4572SKonrad Dybcio static struct clk_branch venus0_ahb_clk = {
21554d5b4572SKonrad Dybcio 	.halt_reg = 0x1030,
21564d5b4572SKonrad Dybcio 	.clkr = {
21574d5b4572SKonrad Dybcio 		.enable_reg = 0x1030,
21584d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21594d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21604d5b4572SKonrad Dybcio 			.name = "venus0_ahb_clk",
21614d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
21624d5b4572SKonrad Dybcio 			.num_parents = 1,
21634d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21644d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21654d5b4572SKonrad Dybcio 		},
21664d5b4572SKonrad Dybcio 	},
21674d5b4572SKonrad Dybcio };
21684d5b4572SKonrad Dybcio 
21694d5b4572SKonrad Dybcio static struct clk_branch venus0_axi_clk = {
21704d5b4572SKonrad Dybcio 	.halt_reg = 0x1034,
21714d5b4572SKonrad Dybcio 	.clkr = {
21724d5b4572SKonrad Dybcio 		.enable_reg = 0x1034,
21734d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21744d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21754d5b4572SKonrad Dybcio 			.name = "venus0_axi_clk",
21764d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
21774d5b4572SKonrad Dybcio 			.num_parents = 1,
21784d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21794d5b4572SKonrad Dybcio 		},
21804d5b4572SKonrad Dybcio 	},
21814d5b4572SKonrad Dybcio };
21824d5b4572SKonrad Dybcio 
21834d5b4572SKonrad Dybcio static struct clk_branch venus0_ocmemnoc_clk = {
21844d5b4572SKonrad Dybcio 	.halt_reg = 0x1038,
21854d5b4572SKonrad Dybcio 	.clkr = {
21864d5b4572SKonrad Dybcio 		.enable_reg = 0x1038,
21874d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
21884d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
21894d5b4572SKonrad Dybcio 			.name = "venus0_ocmemnoc_clk",
21904d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw },
21914d5b4572SKonrad Dybcio 			.num_parents = 1,
21924d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
21934d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
21944d5b4572SKonrad Dybcio 		},
21954d5b4572SKonrad Dybcio 	},
21964d5b4572SKonrad Dybcio };
21974d5b4572SKonrad Dybcio 
21984d5b4572SKonrad Dybcio static struct clk_branch venus0_vcodec0_clk = {
21994d5b4572SKonrad Dybcio 	.halt_reg = 0x1028,
22004d5b4572SKonrad Dybcio 	.clkr = {
22014d5b4572SKonrad Dybcio 		.enable_reg = 0x1028,
22024d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
22034d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
22044d5b4572SKonrad Dybcio 			.name = "venus0_vcodec0_clk",
22054d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },
22064d5b4572SKonrad Dybcio 			.num_parents = 1,
22074d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
22084d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
22094d5b4572SKonrad Dybcio 		},
22104d5b4572SKonrad Dybcio 	},
22114d5b4572SKonrad Dybcio };
22124d5b4572SKonrad Dybcio 
22134d5b4572SKonrad Dybcio static struct clk_branch venus0_core0_vcodec_clk = {
22144d5b4572SKonrad Dybcio 	.halt_reg = 0x1048,
22154d5b4572SKonrad Dybcio 	.clkr = {
22164d5b4572SKonrad Dybcio 		.enable_reg = 0x1048,
22174d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
22184d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
22194d5b4572SKonrad Dybcio 			.name = "venus0_core0_vcodec_clk",
22204d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },
22214d5b4572SKonrad Dybcio 			.num_parents = 1,
22224d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
22234d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
22244d5b4572SKonrad Dybcio 		},
22254d5b4572SKonrad Dybcio 	},
22264d5b4572SKonrad Dybcio };
22274d5b4572SKonrad Dybcio 
22284d5b4572SKonrad Dybcio static struct clk_branch venus0_core1_vcodec_clk = {
22294d5b4572SKonrad Dybcio 	.halt_reg = 0x104c,
22304d5b4572SKonrad Dybcio 	.clkr = {
22314d5b4572SKonrad Dybcio 		.enable_reg = 0x104c,
22324d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
22334d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
22344d5b4572SKonrad Dybcio 			.name = "venus0_core1_vcodec_clk",
22354d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },
22364d5b4572SKonrad Dybcio 			.num_parents = 1,
22374d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
22384d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
22394d5b4572SKonrad Dybcio 		},
22404d5b4572SKonrad Dybcio 	},
22414d5b4572SKonrad Dybcio };
22424d5b4572SKonrad Dybcio 
22434d5b4572SKonrad Dybcio static struct clk_branch venus0_core2_vcodec_clk = {
22444d5b4572SKonrad Dybcio 	.halt_reg = 0x1054,
22454d5b4572SKonrad Dybcio 	.clkr = {
22464d5b4572SKonrad Dybcio 		.enable_reg = 0x1054,
22474d5b4572SKonrad Dybcio 		.enable_mask = BIT(0),
22484d5b4572SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
22494d5b4572SKonrad Dybcio 			.name = "venus0_core2_vcodec_clk",
22504d5b4572SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },
22514d5b4572SKonrad Dybcio 			.num_parents = 1,
22524d5b4572SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
22534d5b4572SKonrad Dybcio 			.ops = &clk_branch2_ops,
22544d5b4572SKonrad Dybcio 		},
22554d5b4572SKonrad Dybcio 	},
22564d5b4572SKonrad Dybcio };
22574d5b4572SKonrad Dybcio 
22584d5b4572SKonrad Dybcio static struct gdsc venus_gdsc = {
22594d5b4572SKonrad Dybcio 	.gdscr = 0x1024,
22604d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x1038, 0x1034, 0x1048 },
22614d5b4572SKonrad Dybcio 	.cxc_count = 3,
22624d5b4572SKonrad Dybcio 	.pd = {
22634d5b4572SKonrad Dybcio 		.name = "venus_gdsc",
22644d5b4572SKonrad Dybcio 	},
22654d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
22664d5b4572SKonrad Dybcio };
22674d5b4572SKonrad Dybcio 
22684d5b4572SKonrad Dybcio static struct gdsc venus_core0_gdsc = {
22694d5b4572SKonrad Dybcio 	.gdscr = 0x1040,
22704d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x1048 },
22714d5b4572SKonrad Dybcio 	.cxc_count = 1,
22724d5b4572SKonrad Dybcio 	.pd = {
22734d5b4572SKonrad Dybcio 		.name = "venus_core0_gdsc",
22744d5b4572SKonrad Dybcio 	},
22754d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
22764d5b4572SKonrad Dybcio 	.flags = HW_CTRL,
22774d5b4572SKonrad Dybcio };
22784d5b4572SKonrad Dybcio 
22794d5b4572SKonrad Dybcio static struct gdsc venus_core1_gdsc = {
22804d5b4572SKonrad Dybcio 	.gdscr = 0x1044,
22814d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x104c },
22824d5b4572SKonrad Dybcio 	.cxc_count = 1,
22834d5b4572SKonrad Dybcio 	.pd = {
22844d5b4572SKonrad Dybcio 	.name = "venus_core1_gdsc",
22854d5b4572SKonrad Dybcio 	},
22864d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
22874d5b4572SKonrad Dybcio 	.flags = HW_CTRL,
22884d5b4572SKonrad Dybcio };
22894d5b4572SKonrad Dybcio 
22904d5b4572SKonrad Dybcio static struct gdsc venus_core2_gdsc = {
22914d5b4572SKonrad Dybcio 	.gdscr = 0x1050,
22924d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x1054 },
22934d5b4572SKonrad Dybcio 	.cxc_count = 1,
22944d5b4572SKonrad Dybcio 	.pd = {
22954d5b4572SKonrad Dybcio 		.name = "venus_core2_gdsc",
22964d5b4572SKonrad Dybcio 	},
22974d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
22984d5b4572SKonrad Dybcio 	.flags = HW_CTRL,
22994d5b4572SKonrad Dybcio };
23004d5b4572SKonrad Dybcio 
23014d5b4572SKonrad Dybcio static struct gdsc mdss_gdsc = {
23024d5b4572SKonrad Dybcio 	.gdscr = 0x2304,
23034d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x2310, 0x231c },
23044d5b4572SKonrad Dybcio 	.cxc_count = 2,
23054d5b4572SKonrad Dybcio 	.pd = {
23064d5b4572SKonrad Dybcio 		.name = "mdss_gdsc",
23074d5b4572SKonrad Dybcio 	},
23084d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23094d5b4572SKonrad Dybcio };
23104d5b4572SKonrad Dybcio 
23114d5b4572SKonrad Dybcio static struct gdsc camss_top_gdsc = {
23124d5b4572SKonrad Dybcio 	.gdscr = 0x34a0,
23134d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x3704, 0x3714, 0x3494 },
23144d5b4572SKonrad Dybcio 	.cxc_count = 3,
23154d5b4572SKonrad Dybcio 	.pd = {
23164d5b4572SKonrad Dybcio 		.name = "camss_top_gdsc",
23174d5b4572SKonrad Dybcio 	},
23184d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23194d5b4572SKonrad Dybcio };
23204d5b4572SKonrad Dybcio 
23214d5b4572SKonrad Dybcio static struct gdsc jpeg_gdsc = {
23224d5b4572SKonrad Dybcio 	.gdscr = 0x35a4,
23234d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x35a8 },
23244d5b4572SKonrad Dybcio 	.cxc_count = 1,
23254d5b4572SKonrad Dybcio 	.pd = {
23264d5b4572SKonrad Dybcio 		.name = "jpeg_gdsc",
23274d5b4572SKonrad Dybcio 	},
23284d5b4572SKonrad Dybcio 	.parent = &camss_top_gdsc.pd,
23294d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23304d5b4572SKonrad Dybcio };
23314d5b4572SKonrad Dybcio 
23324d5b4572SKonrad Dybcio static struct gdsc vfe_gdsc = {
23334d5b4572SKonrad Dybcio 	.gdscr = 0x36a4,
23344d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x36bc },
23354d5b4572SKonrad Dybcio 	.cxc_count = 1,
23364d5b4572SKonrad Dybcio 	.pd = {
23374d5b4572SKonrad Dybcio 		.name = "vfe_gdsc",
23384d5b4572SKonrad Dybcio 	},
23394d5b4572SKonrad Dybcio 	.parent = &camss_top_gdsc.pd,
23404d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23414d5b4572SKonrad Dybcio };
23424d5b4572SKonrad Dybcio 
23434d5b4572SKonrad Dybcio static struct gdsc cpp_gdsc = {
23444d5b4572SKonrad Dybcio 	.gdscr = 0x36d4,
23454d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x36c4, 0x36b0 },
23464d5b4572SKonrad Dybcio 	.cxc_count = 2,
23474d5b4572SKonrad Dybcio 	.pd = {
23484d5b4572SKonrad Dybcio 		.name = "cpp_gdsc",
23494d5b4572SKonrad Dybcio 	},
23504d5b4572SKonrad Dybcio 	.parent = &camss_top_gdsc.pd,
23514d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23524d5b4572SKonrad Dybcio };
23534d5b4572SKonrad Dybcio 
23544d5b4572SKonrad Dybcio static struct gdsc fd_gdsc = {
23554d5b4572SKonrad Dybcio 	.gdscr = 0x3b64,
23564d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x3b70, 0x3b68 },
23574d5b4572SKonrad Dybcio 	.pd = {
23584d5b4572SKonrad Dybcio 		.name = "fd_gdsc",
23594d5b4572SKonrad Dybcio 	},
23604d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23614d5b4572SKonrad Dybcio };
23624d5b4572SKonrad Dybcio 
23634d5b4572SKonrad Dybcio static struct gdsc oxili_cx_gdsc = {
23644d5b4572SKonrad Dybcio 	.gdscr = 0x4034,
23654d5b4572SKonrad Dybcio 	.pd = {
23664d5b4572SKonrad Dybcio 		.name = "oxili_cx_gdsc",
23674d5b4572SKonrad Dybcio 	},
23684d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23694d5b4572SKonrad Dybcio 	.flags = VOTABLE,
23704d5b4572SKonrad Dybcio };
23714d5b4572SKonrad Dybcio 
23724d5b4572SKonrad Dybcio static struct gdsc oxili_gx_gdsc = {
23734d5b4572SKonrad Dybcio 	.gdscr = 0x4024,
23744d5b4572SKonrad Dybcio 	.cxcs = (unsigned int []){ 0x4028 },
23754d5b4572SKonrad Dybcio 	.cxc_count = 1,
23764d5b4572SKonrad Dybcio 	.pd = {
23774d5b4572SKonrad Dybcio 		.name = "oxili_gx_gdsc",
23784d5b4572SKonrad Dybcio 	},
23794d5b4572SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
23804d5b4572SKonrad Dybcio 	.parent = &oxili_cx_gdsc.pd,
23814d5b4572SKonrad Dybcio 	.flags = CLAMP_IO,
23824d5b4572SKonrad Dybcio 	.supply = "VDD_GFX",
23834d5b4572SKonrad Dybcio };
23844d5b4572SKonrad Dybcio 
23854d5b4572SKonrad Dybcio static struct clk_regmap *mmcc_msm8994_clocks[] = {
23864d5b4572SKonrad Dybcio 	[MMPLL0_EARLY] = &mmpll0_early.clkr,
23874d5b4572SKonrad Dybcio 	[MMPLL0_PLL] = &mmpll0.clkr,
23884d5b4572SKonrad Dybcio 	[MMPLL1_EARLY] = &mmpll1_early.clkr,
23894d5b4572SKonrad Dybcio 	[MMPLL1_PLL] = &mmpll1.clkr,
23904d5b4572SKonrad Dybcio 	[MMPLL3_EARLY] = &mmpll3_early.clkr,
23914d5b4572SKonrad Dybcio 	[MMPLL3_PLL] = &mmpll3.clkr,
23924d5b4572SKonrad Dybcio 	[MMPLL4_EARLY] = &mmpll4_early.clkr,
23934d5b4572SKonrad Dybcio 	[MMPLL4_PLL] = &mmpll4.clkr,
23944d5b4572SKonrad Dybcio 	[MMPLL5_EARLY] = &mmpll5_early.clkr,
23954d5b4572SKonrad Dybcio 	[MMPLL5_PLL] = &mmpll5.clkr,
23964d5b4572SKonrad Dybcio 	[AHB_CLK_SRC] = &ahb_clk_src.clkr,
23974d5b4572SKonrad Dybcio 	[AXI_CLK_SRC] = &axi_clk_src.clkr,
23984d5b4572SKonrad Dybcio 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
23994d5b4572SKonrad Dybcio 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
24004d5b4572SKonrad Dybcio 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
24014d5b4572SKonrad Dybcio 	[CSI3_CLK_SRC] = &csi3_clk_src.clkr,
24024d5b4572SKonrad Dybcio 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
24034d5b4572SKonrad Dybcio 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
24044d5b4572SKonrad Dybcio 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
24054d5b4572SKonrad Dybcio 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
24064d5b4572SKonrad Dybcio 	[JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
24074d5b4572SKonrad Dybcio 	[JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
24084d5b4572SKonrad Dybcio 	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
24094d5b4572SKonrad Dybcio 	[FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
24104d5b4572SKonrad Dybcio 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
24114d5b4572SKonrad Dybcio 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
24124d5b4572SKonrad Dybcio 	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
24134d5b4572SKonrad Dybcio 	[OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
24144d5b4572SKonrad Dybcio 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
24154d5b4572SKonrad Dybcio 	[MMSS_GP0_CLK_SRC] = &mmss_gp0_clk_src.clkr,
24164d5b4572SKonrad Dybcio 	[MMSS_GP1_CLK_SRC] = &mmss_gp1_clk_src.clkr,
24174d5b4572SKonrad Dybcio 	[JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,
24184d5b4572SKonrad Dybcio 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
24194d5b4572SKonrad Dybcio 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
24204d5b4572SKonrad Dybcio 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
24214d5b4572SKonrad Dybcio 	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
24224d5b4572SKonrad Dybcio 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
24234d5b4572SKonrad Dybcio 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
24244d5b4572SKonrad Dybcio 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
24254d5b4572SKonrad Dybcio 	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
24264d5b4572SKonrad Dybcio 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
24274d5b4572SKonrad Dybcio 	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
24284d5b4572SKonrad Dybcio 	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
24294d5b4572SKonrad Dybcio 	[MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
24304d5b4572SKonrad Dybcio 	[EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
24314d5b4572SKonrad Dybcio 	[HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
24324d5b4572SKonrad Dybcio 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
24334d5b4572SKonrad Dybcio 	[RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
24344d5b4572SKonrad Dybcio 	[CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
24354d5b4572SKonrad Dybcio 	[CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
24364d5b4572SKonrad Dybcio 	[CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
24374d5b4572SKonrad Dybcio 	[CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
24384d5b4572SKonrad Dybcio 	[CAMSS_VFE_CPP_AXI_CLK] = &camss_vfe_cpp_axi_clk.clkr,
24394d5b4572SKonrad Dybcio 	[CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
24404d5b4572SKonrad Dybcio 	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
24414d5b4572SKonrad Dybcio 	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
24424d5b4572SKonrad Dybcio 	[CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
24434d5b4572SKonrad Dybcio 	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
24444d5b4572SKonrad Dybcio 	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
24454d5b4572SKonrad Dybcio 	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
24464d5b4572SKonrad Dybcio 	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
24474d5b4572SKonrad Dybcio 	[CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
24484d5b4572SKonrad Dybcio 	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
24494d5b4572SKonrad Dybcio 	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
24504d5b4572SKonrad Dybcio 	[CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
24514d5b4572SKonrad Dybcio 	[CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
24524d5b4572SKonrad Dybcio 	[CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
24534d5b4572SKonrad Dybcio 	[CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
24544d5b4572SKonrad Dybcio 	[CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
24554d5b4572SKonrad Dybcio 	[CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
24564d5b4572SKonrad Dybcio 	[CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
24574d5b4572SKonrad Dybcio 	[CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
24584d5b4572SKonrad Dybcio 	[CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
24594d5b4572SKonrad Dybcio 	[CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
24604d5b4572SKonrad Dybcio 	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
24614d5b4572SKonrad Dybcio 	[CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
24624d5b4572SKonrad Dybcio 	[CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
24634d5b4572SKonrad Dybcio 	[CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
24644d5b4572SKonrad Dybcio 	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
24654d5b4572SKonrad Dybcio 	[CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,
24664d5b4572SKonrad Dybcio 	[CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
24674d5b4572SKonrad Dybcio 	[CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
24684d5b4572SKonrad Dybcio 	[CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
24694d5b4572SKonrad Dybcio 	[CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
24704d5b4572SKonrad Dybcio 	[CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
24714d5b4572SKonrad Dybcio 	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
24724d5b4572SKonrad Dybcio 	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
24734d5b4572SKonrad Dybcio 	[CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
24744d5b4572SKonrad Dybcio 	[CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
24754d5b4572SKonrad Dybcio 	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
24764d5b4572SKonrad Dybcio 	[CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
24774d5b4572SKonrad Dybcio 	[CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
24784d5b4572SKonrad Dybcio 	[CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
24794d5b4572SKonrad Dybcio 	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
24804d5b4572SKonrad Dybcio 	[CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
24814d5b4572SKonrad Dybcio 	[CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
24824d5b4572SKonrad Dybcio 	[CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
24834d5b4572SKonrad Dybcio 	[CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
24844d5b4572SKonrad Dybcio 	[FD_AHB_CLK] = &fd_ahb_clk.clkr,
24854d5b4572SKonrad Dybcio 	[FD_AXI_CLK] = &fd_axi_clk.clkr,
24864d5b4572SKonrad Dybcio 	[FD_CORE_CLK] = &fd_core_clk.clkr,
24874d5b4572SKonrad Dybcio 	[FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
24884d5b4572SKonrad Dybcio 	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
24894d5b4572SKonrad Dybcio 	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
24904d5b4572SKonrad Dybcio 	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
24914d5b4572SKonrad Dybcio 	[MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
24924d5b4572SKonrad Dybcio 	[MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
24934d5b4572SKonrad Dybcio 	[MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
24944d5b4572SKonrad Dybcio 	[MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
24954d5b4572SKonrad Dybcio 	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
24964d5b4572SKonrad Dybcio 	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
24974d5b4572SKonrad Dybcio 	[MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
24984d5b4572SKonrad Dybcio 	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
24994d5b4572SKonrad Dybcio 	[MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
25004d5b4572SKonrad Dybcio 	[MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
25014d5b4572SKonrad Dybcio 	[MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
25024d5b4572SKonrad Dybcio 	[OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
25034d5b4572SKonrad Dybcio 	[OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
25044d5b4572SKonrad Dybcio 	[OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
25054d5b4572SKonrad Dybcio 	[OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
25064d5b4572SKonrad Dybcio 	[VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
25074d5b4572SKonrad Dybcio 	[VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
25084d5b4572SKonrad Dybcio 	[VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
25094d5b4572SKonrad Dybcio 	[VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
25104d5b4572SKonrad Dybcio 	[VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
25114d5b4572SKonrad Dybcio 	[VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
25124d5b4572SKonrad Dybcio 	[VENUS0_CORE2_VCODEC_CLK] = &venus0_core2_vcodec_clk.clkr,
25134d5b4572SKonrad Dybcio };
25144d5b4572SKonrad Dybcio 
25154d5b4572SKonrad Dybcio static struct gdsc *mmcc_msm8994_gdscs[] = {
25164d5b4572SKonrad Dybcio 	[VENUS_GDSC] = &venus_gdsc,
25174d5b4572SKonrad Dybcio 	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
25184d5b4572SKonrad Dybcio 	[VENUS_CORE1_GDSC] = &venus_core1_gdsc,
25194d5b4572SKonrad Dybcio 	[VENUS_CORE2_GDSC] = &venus_core2_gdsc,
25204d5b4572SKonrad Dybcio 	[CAMSS_TOP_GDSC] = &camss_top_gdsc,
25214d5b4572SKonrad Dybcio 	[MDSS_GDSC] = &mdss_gdsc,
25224d5b4572SKonrad Dybcio 	[JPEG_GDSC] = &jpeg_gdsc,
25234d5b4572SKonrad Dybcio 	[VFE_GDSC] = &vfe_gdsc,
25244d5b4572SKonrad Dybcio 	[CPP_GDSC] = &cpp_gdsc,
25254d5b4572SKonrad Dybcio 	[OXILI_GX_GDSC] = &oxili_gx_gdsc,
25264d5b4572SKonrad Dybcio 	[OXILI_CX_GDSC] = &oxili_cx_gdsc,
25274d5b4572SKonrad Dybcio 	[FD_GDSC] = &fd_gdsc,
25284d5b4572SKonrad Dybcio };
25294d5b4572SKonrad Dybcio 
25304d5b4572SKonrad Dybcio static const struct qcom_reset_map mmcc_msm8994_resets[] = {
25314d5b4572SKonrad Dybcio 	[CAMSS_MICRO_BCR] = { 0x3490 },
25324d5b4572SKonrad Dybcio };
25334d5b4572SKonrad Dybcio 
25344d5b4572SKonrad Dybcio static const struct regmap_config mmcc_msm8994_regmap_config = {
25354d5b4572SKonrad Dybcio 	.reg_bits	= 32,
25364d5b4572SKonrad Dybcio 	.reg_stride	= 4,
25374d5b4572SKonrad Dybcio 	.val_bits	= 32,
25384d5b4572SKonrad Dybcio 	.max_register	= 0x5200,
25394d5b4572SKonrad Dybcio 	.fast_io	= true,
25404d5b4572SKonrad Dybcio };
25414d5b4572SKonrad Dybcio 
25424d5b4572SKonrad Dybcio static const struct qcom_cc_desc mmcc_msm8994_desc = {
25434d5b4572SKonrad Dybcio 	.config = &mmcc_msm8994_regmap_config,
25444d5b4572SKonrad Dybcio 	.clks = mmcc_msm8994_clocks,
25454d5b4572SKonrad Dybcio 	.num_clks = ARRAY_SIZE(mmcc_msm8994_clocks),
25464d5b4572SKonrad Dybcio 	.resets = mmcc_msm8994_resets,
25474d5b4572SKonrad Dybcio 	.num_resets = ARRAY_SIZE(mmcc_msm8994_resets),
25484d5b4572SKonrad Dybcio 	.gdscs = mmcc_msm8994_gdscs,
25494d5b4572SKonrad Dybcio 	.num_gdscs = ARRAY_SIZE(mmcc_msm8994_gdscs),
25504d5b4572SKonrad Dybcio };
25514d5b4572SKonrad Dybcio 
25524d5b4572SKonrad Dybcio static const struct of_device_id mmcc_msm8994_match_table[] = {
25534d5b4572SKonrad Dybcio 	{ .compatible = "qcom,mmcc-msm8992" },
25544d5b4572SKonrad Dybcio 	{ .compatible = "qcom,mmcc-msm8994" }, /* V2 and V2.1 */
25554d5b4572SKonrad Dybcio 	{ }
25564d5b4572SKonrad Dybcio };
25574d5b4572SKonrad Dybcio MODULE_DEVICE_TABLE(of, mmcc_msm8994_match_table);
25584d5b4572SKonrad Dybcio 
mmcc_msm8994_probe(struct platform_device * pdev)25594d5b4572SKonrad Dybcio static int mmcc_msm8994_probe(struct platform_device *pdev)
25604d5b4572SKonrad Dybcio {
25614d5b4572SKonrad Dybcio 	struct regmap *regmap;
25624d5b4572SKonrad Dybcio 
2563*e0be9986SKonrad Dybcio 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,mmcc-msm8992")) {
2564*e0be9986SKonrad Dybcio 		/* MSM8992 features less clocks and some have different freq tables */
2565*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG1_CLK] = NULL;
2566*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG2_CLK] = NULL;
2567*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[FD_CORE_CLK_SRC] = NULL;
2568*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[FD_CORE_CLK] = NULL;
2569*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[FD_CORE_UAR_CLK] = NULL;
2570*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[FD_AXI_CLK] = NULL;
2571*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[FD_AHB_CLK] = NULL;
2572*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[JPEG1_CLK_SRC] = NULL;
2573*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[JPEG2_CLK_SRC] = NULL;
2574*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.clks[VENUS0_CORE2_VCODEC_CLK] = NULL;
2575*e0be9986SKonrad Dybcio 
2576*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.gdscs[FD_GDSC] = NULL;
2577*e0be9986SKonrad Dybcio 		mmcc_msm8994_desc.gdscs[VENUS_CORE2_GDSC] = NULL;
2578*e0be9986SKonrad Dybcio 
2579*e0be9986SKonrad Dybcio 		axi_clk_src.freq_tbl = ftbl_axi_clk_src_8992;
2580*e0be9986SKonrad Dybcio 		cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_8992;
2581*e0be9986SKonrad Dybcio 		csi0_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;
2582*e0be9986SKonrad Dybcio 		csi1_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;
2583*e0be9986SKonrad Dybcio 		csi2_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;
2584*e0be9986SKonrad Dybcio 		csi3_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;
2585*e0be9986SKonrad Dybcio 		mclk0_clk_src.freq_tbl = ftbl_mclk0_clk_src_8992;
2586*e0be9986SKonrad Dybcio 		mclk1_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;
2587*e0be9986SKonrad Dybcio 		mclk2_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;
2588*e0be9986SKonrad Dybcio 		mclk3_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;
2589*e0be9986SKonrad Dybcio 		mdp_clk_src.freq_tbl = ftbl_mdp_clk_src_8992;
2590*e0be9986SKonrad Dybcio 		ocmemnoc_clk_src.freq_tbl = ftbl_ocmemnoc_clk_src_8992;
2591*e0be9986SKonrad Dybcio 		vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_8992;
2592*e0be9986SKonrad Dybcio 		vfe0_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992;
2593*e0be9986SKonrad Dybcio 		vfe1_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992;
2594*e0be9986SKonrad Dybcio 	}
2595*e0be9986SKonrad Dybcio 
25964d5b4572SKonrad Dybcio 	regmap = qcom_cc_map(pdev, &mmcc_msm8994_desc);
25974d5b4572SKonrad Dybcio 	if (IS_ERR(regmap))
25984d5b4572SKonrad Dybcio 		return PTR_ERR(regmap);
25994d5b4572SKonrad Dybcio 
26004d5b4572SKonrad Dybcio 	clk_alpha_pll_configure(&mmpll0_early, regmap, &mmpll_p_config);
26014d5b4572SKonrad Dybcio 	clk_alpha_pll_configure(&mmpll1_early, regmap, &mmpll_p_config);
26024d5b4572SKonrad Dybcio 	clk_alpha_pll_configure(&mmpll3_early, regmap, &mmpll_p_config);
26034d5b4572SKonrad Dybcio 	clk_alpha_pll_configure(&mmpll5_early, regmap, &mmpll_p_config);
26044d5b4572SKonrad Dybcio 
26054d5b4572SKonrad Dybcio 	return qcom_cc_really_probe(pdev, &mmcc_msm8994_desc, regmap);
26064d5b4572SKonrad Dybcio }
26074d5b4572SKonrad Dybcio 
26084d5b4572SKonrad Dybcio static struct platform_driver mmcc_msm8994_driver = {
26094d5b4572SKonrad Dybcio 	.probe		= mmcc_msm8994_probe,
26104d5b4572SKonrad Dybcio 	.driver		= {
26114d5b4572SKonrad Dybcio 		.name	= "mmcc-msm8994",
26124d5b4572SKonrad Dybcio 		.of_match_table = mmcc_msm8994_match_table,
26134d5b4572SKonrad Dybcio 	},
26144d5b4572SKonrad Dybcio };
26154d5b4572SKonrad Dybcio module_platform_driver(mmcc_msm8994_driver);
26164d5b4572SKonrad Dybcio 
26174d5b4572SKonrad Dybcio MODULE_DESCRIPTION("QCOM MMCC MSM8994 Driver");
26184d5b4572SKonrad Dybcio MODULE_LICENSE("GPL v2");
26194d5b4572SKonrad Dybcio MODULE_ALIAS("platform:mmcc-msm8994");
2620