xref: /openbmc/linux/drivers/clk/qcom/dispcc-sm8450.c (revision 7ef71477)
116fb89f9SDmitry Baryshkov // SPDX-License-Identifier: GPL-2.0-only
216fb89f9SDmitry Baryshkov /*
316fb89f9SDmitry Baryshkov  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
416fb89f9SDmitry Baryshkov  * Copyright (c) 2022, Linaro Ltd.
516fb89f9SDmitry Baryshkov  */
616fb89f9SDmitry Baryshkov 
716fb89f9SDmitry Baryshkov #include <linux/clk.h>
816fb89f9SDmitry Baryshkov #include <linux/clk-provider.h>
916fb89f9SDmitry Baryshkov #include <linux/err.h>
1016fb89f9SDmitry Baryshkov #include <linux/kernel.h>
1116fb89f9SDmitry Baryshkov #include <linux/module.h>
1216fb89f9SDmitry Baryshkov #include <linux/of.h>
13a96cbb14SRob Herring #include <linux/platform_device.h>
1416fb89f9SDmitry Baryshkov #include <linux/regmap.h>
1516fb89f9SDmitry Baryshkov #include <linux/pm_runtime.h>
1616fb89f9SDmitry Baryshkov 
1716fb89f9SDmitry Baryshkov #include <dt-bindings/clock/qcom,sm8450-dispcc.h>
1816fb89f9SDmitry Baryshkov 
1916fb89f9SDmitry Baryshkov #include "common.h"
2016fb89f9SDmitry Baryshkov #include "clk-alpha-pll.h"
2116fb89f9SDmitry Baryshkov #include "clk-branch.h"
2216fb89f9SDmitry Baryshkov #include "clk-pll.h"
2316fb89f9SDmitry Baryshkov #include "clk-rcg.h"
2416fb89f9SDmitry Baryshkov #include "clk-regmap.h"
2516fb89f9SDmitry Baryshkov #include "clk-regmap-divider.h"
2616fb89f9SDmitry Baryshkov #include "clk-regmap-mux.h"
2716fb89f9SDmitry Baryshkov #include "reset.h"
2816fb89f9SDmitry Baryshkov #include "gdsc.h"
2916fb89f9SDmitry Baryshkov 
3016fb89f9SDmitry Baryshkov /* Need to match the order of clocks in DT binding */
3116fb89f9SDmitry Baryshkov enum {
3216fb89f9SDmitry Baryshkov 	DT_BI_TCXO,
3316fb89f9SDmitry Baryshkov 	DT_BI_TCXO_AO,
3416fb89f9SDmitry Baryshkov 	DT_AHB_CLK,
3516fb89f9SDmitry Baryshkov 	DT_SLEEP_CLK,
3616fb89f9SDmitry Baryshkov 
3716fb89f9SDmitry Baryshkov 	DT_DSI0_PHY_PLL_OUT_BYTECLK,
3816fb89f9SDmitry Baryshkov 	DT_DSI0_PHY_PLL_OUT_DSICLK,
3916fb89f9SDmitry Baryshkov 	DT_DSI1_PHY_PLL_OUT_BYTECLK,
4016fb89f9SDmitry Baryshkov 	DT_DSI1_PHY_PLL_OUT_DSICLK,
4116fb89f9SDmitry Baryshkov 
4216fb89f9SDmitry Baryshkov 	DT_DP0_PHY_PLL_LINK_CLK,
4316fb89f9SDmitry Baryshkov 	DT_DP0_PHY_PLL_VCO_DIV_CLK,
4416fb89f9SDmitry Baryshkov 	DT_DP1_PHY_PLL_LINK_CLK,
4516fb89f9SDmitry Baryshkov 	DT_DP1_PHY_PLL_VCO_DIV_CLK,
4616fb89f9SDmitry Baryshkov 	DT_DP2_PHY_PLL_LINK_CLK,
4716fb89f9SDmitry Baryshkov 	DT_DP2_PHY_PLL_VCO_DIV_CLK,
4816fb89f9SDmitry Baryshkov 	DT_DP3_PHY_PLL_LINK_CLK,
4916fb89f9SDmitry Baryshkov 	DT_DP3_PHY_PLL_VCO_DIV_CLK,
5016fb89f9SDmitry Baryshkov };
5116fb89f9SDmitry Baryshkov 
5216fb89f9SDmitry Baryshkov #define DISP_CC_MISC_CMD	0xF000
5316fb89f9SDmitry Baryshkov 
5416fb89f9SDmitry Baryshkov enum {
5516fb89f9SDmitry Baryshkov 	P_BI_TCXO,
5616fb89f9SDmitry Baryshkov 	P_DISP_CC_PLL0_OUT_MAIN,
5716fb89f9SDmitry Baryshkov 	P_DISP_CC_PLL1_OUT_EVEN,
5816fb89f9SDmitry Baryshkov 	P_DISP_CC_PLL1_OUT_MAIN,
5916fb89f9SDmitry Baryshkov 	P_DP0_PHY_PLL_LINK_CLK,
6016fb89f9SDmitry Baryshkov 	P_DP0_PHY_PLL_VCO_DIV_CLK,
6116fb89f9SDmitry Baryshkov 	P_DP1_PHY_PLL_LINK_CLK,
6216fb89f9SDmitry Baryshkov 	P_DP1_PHY_PLL_VCO_DIV_CLK,
6316fb89f9SDmitry Baryshkov 	P_DP2_PHY_PLL_LINK_CLK,
6416fb89f9SDmitry Baryshkov 	P_DP2_PHY_PLL_VCO_DIV_CLK,
6516fb89f9SDmitry Baryshkov 	P_DP3_PHY_PLL_LINK_CLK,
6616fb89f9SDmitry Baryshkov 	P_DP3_PHY_PLL_VCO_DIV_CLK,
6716fb89f9SDmitry Baryshkov 	P_DSI0_PHY_PLL_OUT_BYTECLK,
6816fb89f9SDmitry Baryshkov 	P_DSI0_PHY_PLL_OUT_DSICLK,
6916fb89f9SDmitry Baryshkov 	P_DSI1_PHY_PLL_OUT_BYTECLK,
7016fb89f9SDmitry Baryshkov 	P_DSI1_PHY_PLL_OUT_DSICLK,
7116fb89f9SDmitry Baryshkov 	P_SLEEP_CLK,
7216fb89f9SDmitry Baryshkov };
7316fb89f9SDmitry Baryshkov 
7416fb89f9SDmitry Baryshkov static struct pll_vco lucid_evo_vco[] = {
7516fb89f9SDmitry Baryshkov 	{ 249600000, 2000000000, 0 },
7616fb89f9SDmitry Baryshkov };
7716fb89f9SDmitry Baryshkov 
7816fb89f9SDmitry Baryshkov static const struct alpha_pll_config disp_cc_pll0_config = {
7916fb89f9SDmitry Baryshkov 	.l = 0xD,
8016fb89f9SDmitry Baryshkov 	.alpha = 0x6492,
8116fb89f9SDmitry Baryshkov 	.config_ctl_val = 0x20485699,
8216fb89f9SDmitry Baryshkov 	.config_ctl_hi_val = 0x00182261,
8316fb89f9SDmitry Baryshkov 	.config_ctl_hi1_val = 0x32AA299C,
8416fb89f9SDmitry Baryshkov 	.user_ctl_val = 0x00000000,
8516fb89f9SDmitry Baryshkov 	.user_ctl_hi_val = 0x00000805,
8616fb89f9SDmitry Baryshkov };
8716fb89f9SDmitry Baryshkov 
8816fb89f9SDmitry Baryshkov static struct clk_alpha_pll disp_cc_pll0 = {
8916fb89f9SDmitry Baryshkov 	.offset = 0x0,
9016fb89f9SDmitry Baryshkov 	.vco_table = lucid_evo_vco,
9116fb89f9SDmitry Baryshkov 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
9216fb89f9SDmitry Baryshkov 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
9316fb89f9SDmitry Baryshkov 	.clkr = {
9416fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
9516fb89f9SDmitry Baryshkov 			.name = "disp_cc_pll0",
9616fb89f9SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data) {
9716fb89f9SDmitry Baryshkov 				.index = DT_BI_TCXO,
9816fb89f9SDmitry Baryshkov 			},
9916fb89f9SDmitry Baryshkov 			.num_parents = 1,
10016fb89f9SDmitry Baryshkov 			.ops = &clk_alpha_pll_reset_lucid_evo_ops,
10116fb89f9SDmitry Baryshkov 		},
10216fb89f9SDmitry Baryshkov 	},
10316fb89f9SDmitry Baryshkov };
10416fb89f9SDmitry Baryshkov 
10516fb89f9SDmitry Baryshkov static const struct alpha_pll_config disp_cc_pll1_config = {
10616fb89f9SDmitry Baryshkov 	.l = 0x1F,
10716fb89f9SDmitry Baryshkov 	.alpha = 0x4000,
10816fb89f9SDmitry Baryshkov 	.config_ctl_val = 0x20485699,
10916fb89f9SDmitry Baryshkov 	.config_ctl_hi_val = 0x00182261,
11016fb89f9SDmitry Baryshkov 	.config_ctl_hi1_val = 0x32AA299C,
11116fb89f9SDmitry Baryshkov 	.user_ctl_val = 0x00000000,
11216fb89f9SDmitry Baryshkov 	.user_ctl_hi_val = 0x00000805,
11316fb89f9SDmitry Baryshkov };
11416fb89f9SDmitry Baryshkov 
11516fb89f9SDmitry Baryshkov static struct clk_alpha_pll disp_cc_pll1 = {
11616fb89f9SDmitry Baryshkov 	.offset = 0x1000,
11716fb89f9SDmitry Baryshkov 	.vco_table = lucid_evo_vco,
11816fb89f9SDmitry Baryshkov 	.num_vco = ARRAY_SIZE(lucid_evo_vco),
11916fb89f9SDmitry Baryshkov 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
12016fb89f9SDmitry Baryshkov 	.clkr = {
12116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
12216fb89f9SDmitry Baryshkov 			.name = "disp_cc_pll1",
12316fb89f9SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data) {
12416fb89f9SDmitry Baryshkov 				.index = DT_BI_TCXO,
12516fb89f9SDmitry Baryshkov 			},
12616fb89f9SDmitry Baryshkov 			.num_parents = 1,
12716fb89f9SDmitry Baryshkov 			.ops = &clk_alpha_pll_reset_lucid_evo_ops,
12816fb89f9SDmitry Baryshkov 		},
12916fb89f9SDmitry Baryshkov 	},
13016fb89f9SDmitry Baryshkov };
13116fb89f9SDmitry Baryshkov 
13216fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_0[] = {
13316fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
13416fb89f9SDmitry Baryshkov 	{ P_DP0_PHY_PLL_LINK_CLK, 1 },
13516fb89f9SDmitry Baryshkov 	{ P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
13616fb89f9SDmitry Baryshkov 	{ P_DP3_PHY_PLL_VCO_DIV_CLK, 3 },
13716fb89f9SDmitry Baryshkov 	{ P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
13816fb89f9SDmitry Baryshkov 	{ P_DP2_PHY_PLL_VCO_DIV_CLK, 6 },
13916fb89f9SDmitry Baryshkov };
14016fb89f9SDmitry Baryshkov 
14116fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_0[] = {
14216fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
14316fb89f9SDmitry Baryshkov 	{ .index = DT_DP0_PHY_PLL_LINK_CLK },
14416fb89f9SDmitry Baryshkov 	{ .index = DT_DP0_PHY_PLL_VCO_DIV_CLK },
14516fb89f9SDmitry Baryshkov 	{ .index = DT_DP3_PHY_PLL_VCO_DIV_CLK },
14616fb89f9SDmitry Baryshkov 	{ .index = DT_DP1_PHY_PLL_VCO_DIV_CLK },
14716fb89f9SDmitry Baryshkov 	{ .index = DT_DP2_PHY_PLL_VCO_DIV_CLK },
14816fb89f9SDmitry Baryshkov };
14916fb89f9SDmitry Baryshkov 
15016fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_1[] = {
15116fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
15216fb89f9SDmitry Baryshkov };
15316fb89f9SDmitry Baryshkov 
15416fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_1[] = {
15516fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
15616fb89f9SDmitry Baryshkov };
15716fb89f9SDmitry Baryshkov 
15816fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_1_ao[] = {
15916fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO_AO },
16016fb89f9SDmitry Baryshkov };
16116fb89f9SDmitry Baryshkov 
16216fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_2[] = {
16316fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
16416fb89f9SDmitry Baryshkov 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
16516fb89f9SDmitry Baryshkov 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
16616fb89f9SDmitry Baryshkov 	{ P_DSI1_PHY_PLL_OUT_DSICLK, 3 },
16716fb89f9SDmitry Baryshkov 	{ P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
16816fb89f9SDmitry Baryshkov };
16916fb89f9SDmitry Baryshkov 
17016fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_2[] = {
17116fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
17216fb89f9SDmitry Baryshkov 	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK },
17316fb89f9SDmitry Baryshkov 	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
17416fb89f9SDmitry Baryshkov 	{ .index = DT_DSI1_PHY_PLL_OUT_DSICLK },
17516fb89f9SDmitry Baryshkov 	{ .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
17616fb89f9SDmitry Baryshkov };
17716fb89f9SDmitry Baryshkov 
17816fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_3[] = {
17916fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
18016fb89f9SDmitry Baryshkov 	{ P_DP0_PHY_PLL_LINK_CLK, 1 },
18116fb89f9SDmitry Baryshkov 	{ P_DP1_PHY_PLL_LINK_CLK, 2 },
18216fb89f9SDmitry Baryshkov 	{ P_DP2_PHY_PLL_LINK_CLK, 3 },
18316fb89f9SDmitry Baryshkov 	{ P_DP3_PHY_PLL_LINK_CLK, 4 },
18416fb89f9SDmitry Baryshkov };
18516fb89f9SDmitry Baryshkov 
18616fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_3[] = {
18716fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
18816fb89f9SDmitry Baryshkov 	{ .index = DT_DP0_PHY_PLL_LINK_CLK },
18916fb89f9SDmitry Baryshkov 	{ .index = DT_DP1_PHY_PLL_LINK_CLK },
19016fb89f9SDmitry Baryshkov 	{ .index = DT_DP2_PHY_PLL_LINK_CLK },
19116fb89f9SDmitry Baryshkov 	{ .index = DT_DP3_PHY_PLL_LINK_CLK },
19216fb89f9SDmitry Baryshkov };
19316fb89f9SDmitry Baryshkov 
19416fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_4[] = {
19516fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
19616fb89f9SDmitry Baryshkov 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
19716fb89f9SDmitry Baryshkov 	{ P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
19816fb89f9SDmitry Baryshkov };
19916fb89f9SDmitry Baryshkov 
20016fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_4[] = {
20116fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
20216fb89f9SDmitry Baryshkov 	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
20316fb89f9SDmitry Baryshkov 	{ .index = DT_DSI1_PHY_PLL_OUT_BYTECLK },
20416fb89f9SDmitry Baryshkov };
20516fb89f9SDmitry Baryshkov 
20616fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_5[] = {
20716fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
20816fb89f9SDmitry Baryshkov 	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
20916fb89f9SDmitry Baryshkov 	{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
21016fb89f9SDmitry Baryshkov 	{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
21116fb89f9SDmitry Baryshkov };
21216fb89f9SDmitry Baryshkov 
21316fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_5[] = {
21416fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
21516fb89f9SDmitry Baryshkov 	{ .hw = &disp_cc_pll0.clkr.hw },
21616fb89f9SDmitry Baryshkov 	{ .hw = &disp_cc_pll1.clkr.hw },
21716fb89f9SDmitry Baryshkov 	{ .hw = &disp_cc_pll1.clkr.hw },
21816fb89f9SDmitry Baryshkov };
21916fb89f9SDmitry Baryshkov 
22016fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_6[] = {
22116fb89f9SDmitry Baryshkov 	{ P_BI_TCXO, 0 },
22216fb89f9SDmitry Baryshkov 	{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
22316fb89f9SDmitry Baryshkov 	{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
22416fb89f9SDmitry Baryshkov };
22516fb89f9SDmitry Baryshkov 
22616fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_6[] = {
22716fb89f9SDmitry Baryshkov 	{ .index = DT_BI_TCXO },
22816fb89f9SDmitry Baryshkov 	{ .hw = &disp_cc_pll1.clkr.hw },
22916fb89f9SDmitry Baryshkov 	{ .hw = &disp_cc_pll1.clkr.hw },
23016fb89f9SDmitry Baryshkov };
23116fb89f9SDmitry Baryshkov 
23216fb89f9SDmitry Baryshkov static const struct parent_map disp_cc_parent_map_7[] = {
23316fb89f9SDmitry Baryshkov 	{ P_SLEEP_CLK, 0 },
23416fb89f9SDmitry Baryshkov };
23516fb89f9SDmitry Baryshkov 
23616fb89f9SDmitry Baryshkov static const struct clk_parent_data disp_cc_parent_data_7[] = {
23716fb89f9SDmitry Baryshkov 	{ .index = DT_SLEEP_CLK },
23816fb89f9SDmitry Baryshkov };
23916fb89f9SDmitry Baryshkov 
24016fb89f9SDmitry Baryshkov static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
24116fb89f9SDmitry Baryshkov 	F(19200000, P_BI_TCXO, 1, 0, 0),
24216fb89f9SDmitry Baryshkov 	F(37500000, P_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
24316fb89f9SDmitry Baryshkov 	F(75000000, P_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
24416fb89f9SDmitry Baryshkov 	{ }
24516fb89f9SDmitry Baryshkov };
24616fb89f9SDmitry Baryshkov 
24716fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
24816fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8324,
24916fb89f9SDmitry Baryshkov 	.mnd_width = 0,
25016fb89f9SDmitry Baryshkov 	.hid_width = 5,
25116fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_6,
25216fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
25316fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
25416fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_ahb_clk_src",
25516fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_6,
25616fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
25716fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
25816fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_shared_ops,
25916fb89f9SDmitry Baryshkov 	},
26016fb89f9SDmitry Baryshkov };
26116fb89f9SDmitry Baryshkov 
26216fb89f9SDmitry Baryshkov static const struct freq_tbl ftbl_disp_cc_mdss_byte0_clk_src[] = {
26316fb89f9SDmitry Baryshkov 	F(19200000, P_BI_TCXO, 1, 0, 0),
26416fb89f9SDmitry Baryshkov 	{ }
26516fb89f9SDmitry Baryshkov };
26616fb89f9SDmitry Baryshkov 
26716fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
26816fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8134,
26916fb89f9SDmitry Baryshkov 	.mnd_width = 0,
27016fb89f9SDmitry Baryshkov 	.hid_width = 5,
27116fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_2,
27216fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
27316fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
27416fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_byte0_clk_src",
27516fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_2,
27616fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
27716fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
27816fb89f9SDmitry Baryshkov 		.ops = &clk_byte2_ops,
27916fb89f9SDmitry Baryshkov 	},
28016fb89f9SDmitry Baryshkov };
28116fb89f9SDmitry Baryshkov 
28216fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_byte1_clk_src = {
28316fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8150,
28416fb89f9SDmitry Baryshkov 	.mnd_width = 0,
28516fb89f9SDmitry Baryshkov 	.hid_width = 5,
28616fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_2,
28716fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
28816fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
28916fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_byte1_clk_src",
29016fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_2,
29116fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
29216fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
29316fb89f9SDmitry Baryshkov 		.ops = &clk_byte2_ops,
29416fb89f9SDmitry Baryshkov 	},
29516fb89f9SDmitry Baryshkov };
29616fb89f9SDmitry Baryshkov 
29716fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx0_aux_clk_src = {
29816fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x81ec,
29916fb89f9SDmitry Baryshkov 	.mnd_width = 0,
30016fb89f9SDmitry Baryshkov 	.hid_width = 5,
30116fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
30216fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
30316fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
30416fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx0_aux_clk_src",
30516fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1,
30616fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
30716fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
30816fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
30916fb89f9SDmitry Baryshkov 	},
31016fb89f9SDmitry Baryshkov };
31116fb89f9SDmitry Baryshkov 
31216fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = {
31316fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x819c,
31416fb89f9SDmitry Baryshkov 	.mnd_width = 0,
31516fb89f9SDmitry Baryshkov 	.hid_width = 5,
31616fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_3,
31716fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
31816fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx0_link_clk_src",
31916fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_3,
32016fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
32116fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
3227ef71477SDmitry Baryshkov 		.ops = &clk_byte2_ops,
32316fb89f9SDmitry Baryshkov 	},
32416fb89f9SDmitry Baryshkov };
32516fb89f9SDmitry Baryshkov 
32616fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx0_pixel0_clk_src = {
32716fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x81bc,
32816fb89f9SDmitry Baryshkov 	.mnd_width = 16,
32916fb89f9SDmitry Baryshkov 	.hid_width = 5,
33016fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
33116fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
33216fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
33316fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx0_pixel0_clk_src",
33416fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
33516fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
33616fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
33716fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
33816fb89f9SDmitry Baryshkov 	},
33916fb89f9SDmitry Baryshkov };
34016fb89f9SDmitry Baryshkov 
34116fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx0_pixel1_clk_src = {
34216fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x81d4,
34316fb89f9SDmitry Baryshkov 	.mnd_width = 16,
34416fb89f9SDmitry Baryshkov 	.hid_width = 5,
34516fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
34616fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
34716fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
34816fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx0_pixel1_clk_src",
34916fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
35016fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
35116fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
35216fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
35316fb89f9SDmitry Baryshkov 	},
35416fb89f9SDmitry Baryshkov };
35516fb89f9SDmitry Baryshkov 
35616fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx1_aux_clk_src = {
35716fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8254,
35816fb89f9SDmitry Baryshkov 	.mnd_width = 0,
35916fb89f9SDmitry Baryshkov 	.hid_width = 5,
36016fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
36116fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
36216fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
36316fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx1_aux_clk_src",
36416fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1,
36516fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
36616fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
36716fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
36816fb89f9SDmitry Baryshkov 	},
36916fb89f9SDmitry Baryshkov };
37016fb89f9SDmitry Baryshkov 
37116fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx1_link_clk_src = {
37216fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8234,
37316fb89f9SDmitry Baryshkov 	.mnd_width = 0,
37416fb89f9SDmitry Baryshkov 	.hid_width = 5,
37516fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_3,
37616fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
37716fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx1_link_clk_src",
37816fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_3,
37916fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
38016fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
3817ef71477SDmitry Baryshkov 		.ops = &clk_byte2_ops,
38216fb89f9SDmitry Baryshkov 	},
38316fb89f9SDmitry Baryshkov };
38416fb89f9SDmitry Baryshkov 
38516fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx1_pixel0_clk_src = {
38616fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8204,
38716fb89f9SDmitry Baryshkov 	.mnd_width = 16,
38816fb89f9SDmitry Baryshkov 	.hid_width = 5,
38916fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
39016fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
39116fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
39216fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx1_pixel0_clk_src",
39316fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
39416fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
39516fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
39616fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
39716fb89f9SDmitry Baryshkov 	},
39816fb89f9SDmitry Baryshkov };
39916fb89f9SDmitry Baryshkov 
40016fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx1_pixel1_clk_src = {
40116fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x821c,
40216fb89f9SDmitry Baryshkov 	.mnd_width = 16,
40316fb89f9SDmitry Baryshkov 	.hid_width = 5,
40416fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
40516fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
40616fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
40716fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx1_pixel1_clk_src",
40816fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
40916fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
41016fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
41116fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
41216fb89f9SDmitry Baryshkov 	},
41316fb89f9SDmitry Baryshkov };
41416fb89f9SDmitry Baryshkov 
41516fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx2_aux_clk_src = {
41616fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x82bc,
41716fb89f9SDmitry Baryshkov 	.mnd_width = 0,
41816fb89f9SDmitry Baryshkov 	.hid_width = 5,
41916fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
42016fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
42116fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
42216fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx2_aux_clk_src",
42316fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1,
42416fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
42516fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
42616fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
42716fb89f9SDmitry Baryshkov 	},
42816fb89f9SDmitry Baryshkov };
42916fb89f9SDmitry Baryshkov 
43016fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx2_link_clk_src = {
43116fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x826c,
43216fb89f9SDmitry Baryshkov 	.mnd_width = 0,
43316fb89f9SDmitry Baryshkov 	.hid_width = 5,
43416fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_3,
43516fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
43616fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx2_link_clk_src",
43716fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_3,
43816fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
43916fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
4407ef71477SDmitry Baryshkov 		.ops = &clk_byte2_ops,
44116fb89f9SDmitry Baryshkov 	},
44216fb89f9SDmitry Baryshkov };
44316fb89f9SDmitry Baryshkov 
44416fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx2_pixel0_clk_src = {
44516fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x828c,
44616fb89f9SDmitry Baryshkov 	.mnd_width = 16,
44716fb89f9SDmitry Baryshkov 	.hid_width = 5,
44816fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
44916fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
45016fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
45116fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx2_pixel0_clk_src",
45216fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
45316fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
45416fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
45516fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
45616fb89f9SDmitry Baryshkov 	},
45716fb89f9SDmitry Baryshkov };
45816fb89f9SDmitry Baryshkov 
45916fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx2_pixel1_clk_src = {
46016fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x82a4,
46116fb89f9SDmitry Baryshkov 	.mnd_width = 16,
46216fb89f9SDmitry Baryshkov 	.hid_width = 5,
46316fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
46416fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
46516fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
46616fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx2_pixel1_clk_src",
46716fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
46816fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
46916fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
47016fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
47116fb89f9SDmitry Baryshkov 	},
47216fb89f9SDmitry Baryshkov };
47316fb89f9SDmitry Baryshkov 
47416fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx3_aux_clk_src = {
47516fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8308,
47616fb89f9SDmitry Baryshkov 	.mnd_width = 0,
47716fb89f9SDmitry Baryshkov 	.hid_width = 5,
47816fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
47916fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
48016fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
48116fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx3_aux_clk_src",
48216fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1,
48316fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
48416fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
48516fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
48616fb89f9SDmitry Baryshkov 	},
48716fb89f9SDmitry Baryshkov };
48816fb89f9SDmitry Baryshkov 
48916fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx3_link_clk_src = {
49016fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x82ec,
49116fb89f9SDmitry Baryshkov 	.mnd_width = 0,
49216fb89f9SDmitry Baryshkov 	.hid_width = 5,
49316fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_3,
49416fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
49516fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx3_link_clk_src",
49616fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_3,
49716fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
49816fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
4997ef71477SDmitry Baryshkov 		.ops = &clk_byte2_ops,
50016fb89f9SDmitry Baryshkov 	},
50116fb89f9SDmitry Baryshkov };
50216fb89f9SDmitry Baryshkov 
50316fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_dptx3_pixel0_clk_src = {
50416fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x82d4,
50516fb89f9SDmitry Baryshkov 	.mnd_width = 16,
50616fb89f9SDmitry Baryshkov 	.hid_width = 5,
50716fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_0,
50816fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
50916fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
51016fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx3_pixel0_clk_src",
51116fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_0,
51216fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
51316fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
51416fb89f9SDmitry Baryshkov 		.ops = &clk_dp_ops,
51516fb89f9SDmitry Baryshkov 	},
51616fb89f9SDmitry Baryshkov };
51716fb89f9SDmitry Baryshkov 
51816fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
51916fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x816c,
52016fb89f9SDmitry Baryshkov 	.mnd_width = 0,
52116fb89f9SDmitry Baryshkov 	.hid_width = 5,
52216fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_4,
52316fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
52416fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
52516fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_esc0_clk_src",
52616fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_4,
52716fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
52816fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
52916fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
53016fb89f9SDmitry Baryshkov 	},
53116fb89f9SDmitry Baryshkov };
53216fb89f9SDmitry Baryshkov 
53316fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_esc1_clk_src = {
53416fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8184,
53516fb89f9SDmitry Baryshkov 	.mnd_width = 0,
53616fb89f9SDmitry Baryshkov 	.hid_width = 5,
53716fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_4,
53816fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
53916fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
54016fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_esc1_clk_src",
54116fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_4,
54216fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
54316fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
54416fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
54516fb89f9SDmitry Baryshkov 	},
54616fb89f9SDmitry Baryshkov };
54716fb89f9SDmitry Baryshkov 
54816fb89f9SDmitry Baryshkov static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
54916fb89f9SDmitry Baryshkov 	F(19200000, P_BI_TCXO, 1, 0, 0),
55016fb89f9SDmitry Baryshkov 	F(85714286, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55116fb89f9SDmitry Baryshkov 	F(100000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55216fb89f9SDmitry Baryshkov 	F(150000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55316fb89f9SDmitry Baryshkov 	F(172000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55416fb89f9SDmitry Baryshkov 	F(200000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55516fb89f9SDmitry Baryshkov 	F(325000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55616fb89f9SDmitry Baryshkov 	F(375000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55716fb89f9SDmitry Baryshkov 	F(500000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
55816fb89f9SDmitry Baryshkov 	{ }
55916fb89f9SDmitry Baryshkov };
56016fb89f9SDmitry Baryshkov 
56116fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
56216fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x80ec,
56316fb89f9SDmitry Baryshkov 	.mnd_width = 0,
56416fb89f9SDmitry Baryshkov 	.hid_width = 5,
56516fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_5,
56616fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
56716fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
56816fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_mdp_clk_src",
56916fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_5,
57016fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
57116fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
57216fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_shared_ops,
57316fb89f9SDmitry Baryshkov 	},
57416fb89f9SDmitry Baryshkov };
57516fb89f9SDmitry Baryshkov 
57616fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
57716fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x80bc,
57816fb89f9SDmitry Baryshkov 	.mnd_width = 8,
57916fb89f9SDmitry Baryshkov 	.hid_width = 5,
58016fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_2,
58116fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
58216fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
58316fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_pclk0_clk_src",
58416fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_2,
58516fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
58616fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
58716fb89f9SDmitry Baryshkov 		.ops = &clk_pixel_ops,
58816fb89f9SDmitry Baryshkov 	},
58916fb89f9SDmitry Baryshkov };
59016fb89f9SDmitry Baryshkov 
59116fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = {
59216fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x80d4,
59316fb89f9SDmitry Baryshkov 	.mnd_width = 8,
59416fb89f9SDmitry Baryshkov 	.hid_width = 5,
59516fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_2,
59616fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
59716fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
59816fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_pclk1_clk_src",
59916fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_2,
60016fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
60116fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
60216fb89f9SDmitry Baryshkov 		.ops = &clk_pixel_ops,
60316fb89f9SDmitry Baryshkov 	},
60416fb89f9SDmitry Baryshkov };
60516fb89f9SDmitry Baryshkov 
60616fb89f9SDmitry Baryshkov static const struct freq_tbl ftbl_disp_cc_mdss_rot_clk_src[] = {
60716fb89f9SDmitry Baryshkov 	F(19200000, P_BI_TCXO, 1, 0, 0),
60816fb89f9SDmitry Baryshkov 	F(150000000, P_DISP_CC_PLL1_OUT_MAIN, 4, 0, 0),
60916fb89f9SDmitry Baryshkov 	F(200000000, P_DISP_CC_PLL1_OUT_MAIN, 3, 0, 0),
61016fb89f9SDmitry Baryshkov 	F(300000000, P_DISP_CC_PLL1_OUT_MAIN, 2, 0, 0),
61116fb89f9SDmitry Baryshkov 	{ }
61216fb89f9SDmitry Baryshkov };
61316fb89f9SDmitry Baryshkov 
61416fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
61516fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x8104,
61616fb89f9SDmitry Baryshkov 	.mnd_width = 0,
61716fb89f9SDmitry Baryshkov 	.hid_width = 5,
61816fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_5,
61916fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_rot_clk_src,
62016fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
62116fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_rot_clk_src",
62216fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_5,
62316fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
62416fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
62516fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_shared_ops,
62616fb89f9SDmitry Baryshkov 	},
62716fb89f9SDmitry Baryshkov };
62816fb89f9SDmitry Baryshkov 
62916fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
63016fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0x811c,
63116fb89f9SDmitry Baryshkov 	.mnd_width = 0,
63216fb89f9SDmitry Baryshkov 	.hid_width = 5,
63316fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
63416fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
63516fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
63616fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_vsync_clk_src",
63716fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1,
63816fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
63916fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
64016fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
64116fb89f9SDmitry Baryshkov 	},
64216fb89f9SDmitry Baryshkov };
64316fb89f9SDmitry Baryshkov 
64416fb89f9SDmitry Baryshkov static const struct freq_tbl ftbl_disp_cc_sleep_clk_src[] = {
64516fb89f9SDmitry Baryshkov 	F(32000, P_SLEEP_CLK, 1, 0, 0),
64616fb89f9SDmitry Baryshkov 	{ }
64716fb89f9SDmitry Baryshkov };
64816fb89f9SDmitry Baryshkov 
64916fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_sleep_clk_src = {
65016fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0xe060,
65116fb89f9SDmitry Baryshkov 	.mnd_width = 0,
65216fb89f9SDmitry Baryshkov 	.hid_width = 5,
65316fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_7,
65416fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_sleep_clk_src,
65516fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
65616fb89f9SDmitry Baryshkov 		.name = "disp_cc_sleep_clk_src",
65716fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_7,
65816fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_7),
65916fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
66016fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
66116fb89f9SDmitry Baryshkov 	},
66216fb89f9SDmitry Baryshkov };
66316fb89f9SDmitry Baryshkov 
66416fb89f9SDmitry Baryshkov static struct clk_rcg2 disp_cc_xo_clk_src = {
66516fb89f9SDmitry Baryshkov 	.cmd_rcgr = 0xe044,
66616fb89f9SDmitry Baryshkov 	.mnd_width = 0,
66716fb89f9SDmitry Baryshkov 	.hid_width = 5,
66816fb89f9SDmitry Baryshkov 	.parent_map = disp_cc_parent_map_1,
66916fb89f9SDmitry Baryshkov 	.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
67016fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
67116fb89f9SDmitry Baryshkov 		.name = "disp_cc_xo_clk_src",
67216fb89f9SDmitry Baryshkov 		.parent_data = disp_cc_parent_data_1_ao,
67316fb89f9SDmitry Baryshkov 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1_ao),
67416fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
67516fb89f9SDmitry Baryshkov 		.ops = &clk_rcg2_ops,
67616fb89f9SDmitry Baryshkov 	},
67716fb89f9SDmitry Baryshkov };
67816fb89f9SDmitry Baryshkov 
67916fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
68016fb89f9SDmitry Baryshkov 	.reg = 0x814c,
68116fb89f9SDmitry Baryshkov 	.shift = 0,
68216fb89f9SDmitry Baryshkov 	.width = 4,
68316fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
68416fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_byte0_div_clk_src",
6855c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
6865c0df30cSDmitry Baryshkov 			&disp_cc_mdss_byte0_clk_src.clkr.hw,
68716fb89f9SDmitry Baryshkov 		},
68816fb89f9SDmitry Baryshkov 		.num_parents = 1,
68916fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ops,
69016fb89f9SDmitry Baryshkov 	},
69116fb89f9SDmitry Baryshkov };
69216fb89f9SDmitry Baryshkov 
69316fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_byte1_div_clk_src = {
69416fb89f9SDmitry Baryshkov 	.reg = 0x8168,
69516fb89f9SDmitry Baryshkov 	.shift = 0,
69616fb89f9SDmitry Baryshkov 	.width = 4,
69716fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
69816fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_byte1_div_clk_src",
6995c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
7005c0df30cSDmitry Baryshkov 			&disp_cc_mdss_byte1_clk_src.clkr.hw,
70116fb89f9SDmitry Baryshkov 		},
70216fb89f9SDmitry Baryshkov 		.num_parents = 1,
70316fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ops,
70416fb89f9SDmitry Baryshkov 	},
70516fb89f9SDmitry Baryshkov };
70616fb89f9SDmitry Baryshkov 
70716fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_dptx0_link_div_clk_src = {
70816fb89f9SDmitry Baryshkov 	.reg = 0x81b4,
70916fb89f9SDmitry Baryshkov 	.shift = 0,
71016fb89f9SDmitry Baryshkov 	.width = 4,
71116fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
71216fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx0_link_div_clk_src",
7135c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
7145c0df30cSDmitry Baryshkov 			&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
71516fb89f9SDmitry Baryshkov 		},
71616fb89f9SDmitry Baryshkov 		.num_parents = 1,
71716fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
71816fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ro_ops,
71916fb89f9SDmitry Baryshkov 	},
72016fb89f9SDmitry Baryshkov };
72116fb89f9SDmitry Baryshkov 
72216fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_dptx1_link_div_clk_src = {
72316fb89f9SDmitry Baryshkov 	.reg = 0x824c,
72416fb89f9SDmitry Baryshkov 	.shift = 0,
72516fb89f9SDmitry Baryshkov 	.width = 4,
72616fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
72716fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx1_link_div_clk_src",
7285c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
7295c0df30cSDmitry Baryshkov 			&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
73016fb89f9SDmitry Baryshkov 		},
73116fb89f9SDmitry Baryshkov 		.num_parents = 1,
73216fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
73316fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ro_ops,
73416fb89f9SDmitry Baryshkov 	},
73516fb89f9SDmitry Baryshkov };
73616fb89f9SDmitry Baryshkov 
73716fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_dptx2_link_div_clk_src = {
73816fb89f9SDmitry Baryshkov 	.reg = 0x8284,
73916fb89f9SDmitry Baryshkov 	.shift = 0,
74016fb89f9SDmitry Baryshkov 	.width = 4,
74116fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
74216fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx2_link_div_clk_src",
7435c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
7445c0df30cSDmitry Baryshkov 			&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
74516fb89f9SDmitry Baryshkov 		},
74616fb89f9SDmitry Baryshkov 		.num_parents = 1,
74716fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
74816fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ro_ops,
74916fb89f9SDmitry Baryshkov 	},
75016fb89f9SDmitry Baryshkov };
75116fb89f9SDmitry Baryshkov 
75216fb89f9SDmitry Baryshkov static struct clk_regmap_div disp_cc_mdss_dptx3_link_div_clk_src = {
75316fb89f9SDmitry Baryshkov 	.reg = 0x8304,
75416fb89f9SDmitry Baryshkov 	.shift = 0,
75516fb89f9SDmitry Baryshkov 	.width = 4,
75616fb89f9SDmitry Baryshkov 	.clkr.hw.init = &(struct clk_init_data) {
75716fb89f9SDmitry Baryshkov 		.name = "disp_cc_mdss_dptx3_link_div_clk_src",
7585c0df30cSDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]) {
7595c0df30cSDmitry Baryshkov 			&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
76016fb89f9SDmitry Baryshkov 		},
76116fb89f9SDmitry Baryshkov 		.num_parents = 1,
76216fb89f9SDmitry Baryshkov 		.flags = CLK_SET_RATE_PARENT,
76316fb89f9SDmitry Baryshkov 		.ops = &clk_regmap_div_ro_ops,
76416fb89f9SDmitry Baryshkov 	},
76516fb89f9SDmitry Baryshkov };
76616fb89f9SDmitry Baryshkov 
76716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_ahb1_clk = {
76816fb89f9SDmitry Baryshkov 	.halt_reg = 0xa020,
76916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
77016fb89f9SDmitry Baryshkov 	.clkr = {
77116fb89f9SDmitry Baryshkov 		.enable_reg = 0xa020,
77216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
77316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
77416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_ahb1_clk",
7755c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
7765c0df30cSDmitry Baryshkov 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
77716fb89f9SDmitry Baryshkov 			},
77816fb89f9SDmitry Baryshkov 			.num_parents = 1,
77916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
78016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
78116fb89f9SDmitry Baryshkov 		},
78216fb89f9SDmitry Baryshkov 	},
78316fb89f9SDmitry Baryshkov };
78416fb89f9SDmitry Baryshkov 
78516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_ahb_clk = {
78616fb89f9SDmitry Baryshkov 	.halt_reg = 0x80a4,
78716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
78816fb89f9SDmitry Baryshkov 	.clkr = {
78916fb89f9SDmitry Baryshkov 		.enable_reg = 0x80a4,
79016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
79116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
79216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_ahb_clk",
7935c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
7945c0df30cSDmitry Baryshkov 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
79516fb89f9SDmitry Baryshkov 			},
79616fb89f9SDmitry Baryshkov 			.num_parents = 1,
79716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
79816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
79916fb89f9SDmitry Baryshkov 		},
80016fb89f9SDmitry Baryshkov 	},
80116fb89f9SDmitry Baryshkov };
80216fb89f9SDmitry Baryshkov 
80316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_byte0_clk = {
80416fb89f9SDmitry Baryshkov 	.halt_reg = 0x8028,
80516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
80616fb89f9SDmitry Baryshkov 	.clkr = {
80716fb89f9SDmitry Baryshkov 		.enable_reg = 0x8028,
80816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
80916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
81016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_byte0_clk",
8115c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
8125c0df30cSDmitry Baryshkov 				&disp_cc_mdss_byte0_clk_src.clkr.hw,
81316fb89f9SDmitry Baryshkov 			},
81416fb89f9SDmitry Baryshkov 			.num_parents = 1,
81516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
81616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
81716fb89f9SDmitry Baryshkov 		},
81816fb89f9SDmitry Baryshkov 	},
81916fb89f9SDmitry Baryshkov };
82016fb89f9SDmitry Baryshkov 
82116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
82216fb89f9SDmitry Baryshkov 	.halt_reg = 0x802c,
82316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
82416fb89f9SDmitry Baryshkov 	.clkr = {
82516fb89f9SDmitry Baryshkov 		.enable_reg = 0x802c,
82616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
82716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
82816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_byte0_intf_clk",
8295c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
8305c0df30cSDmitry Baryshkov 				&disp_cc_mdss_byte0_div_clk_src.clkr.hw,
83116fb89f9SDmitry Baryshkov 			},
83216fb89f9SDmitry Baryshkov 			.num_parents = 1,
83316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
83416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
83516fb89f9SDmitry Baryshkov 		},
83616fb89f9SDmitry Baryshkov 	},
83716fb89f9SDmitry Baryshkov };
83816fb89f9SDmitry Baryshkov 
83916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_byte1_clk = {
84016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8030,
84116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
84216fb89f9SDmitry Baryshkov 	.clkr = {
84316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8030,
84416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
84516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
84616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_byte1_clk",
8475c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
8485c0df30cSDmitry Baryshkov 				&disp_cc_mdss_byte1_clk_src.clkr.hw,
84916fb89f9SDmitry Baryshkov 			},
85016fb89f9SDmitry Baryshkov 			.num_parents = 1,
85116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
85216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
85316fb89f9SDmitry Baryshkov 		},
85416fb89f9SDmitry Baryshkov 	},
85516fb89f9SDmitry Baryshkov };
85616fb89f9SDmitry Baryshkov 
85716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_byte1_intf_clk = {
85816fb89f9SDmitry Baryshkov 	.halt_reg = 0x8034,
85916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
86016fb89f9SDmitry Baryshkov 	.clkr = {
86116fb89f9SDmitry Baryshkov 		.enable_reg = 0x8034,
86216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
86316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
86416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_byte1_intf_clk",
8655c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
8665c0df30cSDmitry Baryshkov 				&disp_cc_mdss_byte1_div_clk_src.clkr.hw,
86716fb89f9SDmitry Baryshkov 			},
86816fb89f9SDmitry Baryshkov 			.num_parents = 1,
86916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
87016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
87116fb89f9SDmitry Baryshkov 		},
87216fb89f9SDmitry Baryshkov 	},
87316fb89f9SDmitry Baryshkov };
87416fb89f9SDmitry Baryshkov 
87516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_aux_clk = {
87616fb89f9SDmitry Baryshkov 	.halt_reg = 0x8058,
87716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
87816fb89f9SDmitry Baryshkov 	.clkr = {
87916fb89f9SDmitry Baryshkov 		.enable_reg = 0x8058,
88016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
88116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
88216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_aux_clk",
8835c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
8845c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
88516fb89f9SDmitry Baryshkov 			},
88616fb89f9SDmitry Baryshkov 			.num_parents = 1,
88716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
88816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
88916fb89f9SDmitry Baryshkov 		},
89016fb89f9SDmitry Baryshkov 	},
89116fb89f9SDmitry Baryshkov };
89216fb89f9SDmitry Baryshkov 
89316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_crypto_clk = {
89416fb89f9SDmitry Baryshkov 	.halt_reg = 0x804c,
89516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
89616fb89f9SDmitry Baryshkov 	.clkr = {
89716fb89f9SDmitry Baryshkov 		.enable_reg = 0x804c,
89816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
89916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
90016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_crypto_clk",
9015c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9025c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
90316fb89f9SDmitry Baryshkov 			},
90416fb89f9SDmitry Baryshkov 			.num_parents = 1,
90516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
90616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
90716fb89f9SDmitry Baryshkov 		},
90816fb89f9SDmitry Baryshkov 	},
90916fb89f9SDmitry Baryshkov };
91016fb89f9SDmitry Baryshkov 
91116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_link_clk = {
91216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8040,
91316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
91416fb89f9SDmitry Baryshkov 	.clkr = {
91516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8040,
91616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
91716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
91816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_link_clk",
9195c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9205c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
92116fb89f9SDmitry Baryshkov 			},
92216fb89f9SDmitry Baryshkov 			.num_parents = 1,
92316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
92416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
92516fb89f9SDmitry Baryshkov 		},
92616fb89f9SDmitry Baryshkov 	},
92716fb89f9SDmitry Baryshkov };
92816fb89f9SDmitry Baryshkov 
92916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_link_intf_clk = {
93016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8048,
93116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
93216fb89f9SDmitry Baryshkov 	.clkr = {
93316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8048,
93416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
93516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
93616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_link_intf_clk",
9375c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9385c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
93916fb89f9SDmitry Baryshkov 			},
94016fb89f9SDmitry Baryshkov 			.num_parents = 1,
94116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
94216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
94316fb89f9SDmitry Baryshkov 		},
94416fb89f9SDmitry Baryshkov 	},
94516fb89f9SDmitry Baryshkov };
94616fb89f9SDmitry Baryshkov 
94716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_pixel0_clk = {
94816fb89f9SDmitry Baryshkov 	.halt_reg = 0x8050,
94916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
95016fb89f9SDmitry Baryshkov 	.clkr = {
95116fb89f9SDmitry Baryshkov 		.enable_reg = 0x8050,
95216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
95316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
95416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_pixel0_clk",
9555c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9565c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
95716fb89f9SDmitry Baryshkov 			},
95816fb89f9SDmitry Baryshkov 			.num_parents = 1,
95916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
96016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
96116fb89f9SDmitry Baryshkov 		},
96216fb89f9SDmitry Baryshkov 	},
96316fb89f9SDmitry Baryshkov };
96416fb89f9SDmitry Baryshkov 
96516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_pixel1_clk = {
96616fb89f9SDmitry Baryshkov 	.halt_reg = 0x8054,
96716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
96816fb89f9SDmitry Baryshkov 	.clkr = {
96916fb89f9SDmitry Baryshkov 		.enable_reg = 0x8054,
97016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
97116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
97216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_pixel1_clk",
9735c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9745c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
97516fb89f9SDmitry Baryshkov 			},
97616fb89f9SDmitry Baryshkov 			.num_parents = 1,
97716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
97816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
97916fb89f9SDmitry Baryshkov 		},
98016fb89f9SDmitry Baryshkov 	},
98116fb89f9SDmitry Baryshkov };
98216fb89f9SDmitry Baryshkov 
98316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
98416fb89f9SDmitry Baryshkov 	.halt_reg = 0x8044,
98516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
98616fb89f9SDmitry Baryshkov 	.clkr = {
98716fb89f9SDmitry Baryshkov 		.enable_reg = 0x8044,
98816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
98916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
99016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx0_usb_router_link_intf_clk",
9915c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
9925c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
99316fb89f9SDmitry Baryshkov 			},
99416fb89f9SDmitry Baryshkov 			.num_parents = 1,
99516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
99616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
99716fb89f9SDmitry Baryshkov 		},
99816fb89f9SDmitry Baryshkov 	},
99916fb89f9SDmitry Baryshkov };
100016fb89f9SDmitry Baryshkov 
100116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_aux_clk = {
100216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8074,
100316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
100416fb89f9SDmitry Baryshkov 	.clkr = {
100516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8074,
100616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
100716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
100816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_aux_clk",
10095c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
10105c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
101116fb89f9SDmitry Baryshkov 			},
101216fb89f9SDmitry Baryshkov 			.num_parents = 1,
101316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
101416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
101516fb89f9SDmitry Baryshkov 		},
101616fb89f9SDmitry Baryshkov 	},
101716fb89f9SDmitry Baryshkov };
101816fb89f9SDmitry Baryshkov 
101916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_crypto_clk = {
102016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8070,
102116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
102216fb89f9SDmitry Baryshkov 	.clkr = {
102316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8070,
102416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
102516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
102616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_crypto_clk",
10275c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
10285c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
102916fb89f9SDmitry Baryshkov 			},
103016fb89f9SDmitry Baryshkov 			.num_parents = 1,
103116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
103216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
103316fb89f9SDmitry Baryshkov 		},
103416fb89f9SDmitry Baryshkov 	},
103516fb89f9SDmitry Baryshkov };
103616fb89f9SDmitry Baryshkov 
103716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_link_clk = {
103816fb89f9SDmitry Baryshkov 	.halt_reg = 0x8064,
103916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
104016fb89f9SDmitry Baryshkov 	.clkr = {
104116fb89f9SDmitry Baryshkov 		.enable_reg = 0x8064,
104216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
104316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
104416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_link_clk",
10455c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
10465c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
104716fb89f9SDmitry Baryshkov 			},
104816fb89f9SDmitry Baryshkov 			.num_parents = 1,
104916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
105016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
105116fb89f9SDmitry Baryshkov 		},
105216fb89f9SDmitry Baryshkov 	},
105316fb89f9SDmitry Baryshkov };
105416fb89f9SDmitry Baryshkov 
105516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_link_intf_clk = {
105616fb89f9SDmitry Baryshkov 	.halt_reg = 0x806c,
105716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
105816fb89f9SDmitry Baryshkov 	.clkr = {
105916fb89f9SDmitry Baryshkov 		.enable_reg = 0x806c,
106016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
106116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
106216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_link_intf_clk",
10635c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
10645c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
106516fb89f9SDmitry Baryshkov 			},
106616fb89f9SDmitry Baryshkov 			.num_parents = 1,
106716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
106816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
106916fb89f9SDmitry Baryshkov 		},
107016fb89f9SDmitry Baryshkov 	},
107116fb89f9SDmitry Baryshkov };
107216fb89f9SDmitry Baryshkov 
107316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_pixel0_clk = {
107416fb89f9SDmitry Baryshkov 	.halt_reg = 0x805c,
107516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
107616fb89f9SDmitry Baryshkov 	.clkr = {
107716fb89f9SDmitry Baryshkov 		.enable_reg = 0x805c,
107816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
107916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
108016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_pixel0_clk",
10815c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
10825c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
108316fb89f9SDmitry Baryshkov 			},
108416fb89f9SDmitry Baryshkov 			.num_parents = 1,
108516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
108616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
108716fb89f9SDmitry Baryshkov 		},
108816fb89f9SDmitry Baryshkov 	},
108916fb89f9SDmitry Baryshkov };
109016fb89f9SDmitry Baryshkov 
109116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_pixel1_clk = {
109216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8060,
109316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
109416fb89f9SDmitry Baryshkov 	.clkr = {
109516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8060,
109616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
109716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
109816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_pixel1_clk",
10995c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11005c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
110116fb89f9SDmitry Baryshkov 			},
110216fb89f9SDmitry Baryshkov 			.num_parents = 1,
110316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
110416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
110516fb89f9SDmitry Baryshkov 		},
110616fb89f9SDmitry Baryshkov 	},
110716fb89f9SDmitry Baryshkov };
110816fb89f9SDmitry Baryshkov 
110916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
111016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8068,
111116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
111216fb89f9SDmitry Baryshkov 	.clkr = {
111316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8068,
111416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
111516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
111616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx1_usb_router_link_intf_clk",
11175c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11185c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
111916fb89f9SDmitry Baryshkov 			},
112016fb89f9SDmitry Baryshkov 			.num_parents = 1,
112116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
112216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
112316fb89f9SDmitry Baryshkov 		},
112416fb89f9SDmitry Baryshkov 	},
112516fb89f9SDmitry Baryshkov };
112616fb89f9SDmitry Baryshkov 
112716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_aux_clk = {
112816fb89f9SDmitry Baryshkov 	.halt_reg = 0x808c,
112916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
113016fb89f9SDmitry Baryshkov 	.clkr = {
113116fb89f9SDmitry Baryshkov 		.enable_reg = 0x808c,
113216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
113316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
113416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_aux_clk",
11355c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11365c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_aux_clk_src.clkr.hw,
113716fb89f9SDmitry Baryshkov 			},
113816fb89f9SDmitry Baryshkov 			.num_parents = 1,
113916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
114016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
114116fb89f9SDmitry Baryshkov 		},
114216fb89f9SDmitry Baryshkov 	},
114316fb89f9SDmitry Baryshkov };
114416fb89f9SDmitry Baryshkov 
114516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_crypto_clk = {
114616fb89f9SDmitry Baryshkov 	.halt_reg = 0x8088,
114716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
114816fb89f9SDmitry Baryshkov 	.clkr = {
114916fb89f9SDmitry Baryshkov 		.enable_reg = 0x8088,
115016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
115116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
115216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_crypto_clk",
11535c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11545c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
115516fb89f9SDmitry Baryshkov 			},
115616fb89f9SDmitry Baryshkov 			.num_parents = 1,
115716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
115816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
115916fb89f9SDmitry Baryshkov 		},
116016fb89f9SDmitry Baryshkov 	},
116116fb89f9SDmitry Baryshkov };
116216fb89f9SDmitry Baryshkov 
116316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_link_clk = {
116416fb89f9SDmitry Baryshkov 	.halt_reg = 0x8080,
116516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
116616fb89f9SDmitry Baryshkov 	.clkr = {
116716fb89f9SDmitry Baryshkov 		.enable_reg = 0x8080,
116816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
116916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
117016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_link_clk",
11715c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11725c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
117316fb89f9SDmitry Baryshkov 			},
117416fb89f9SDmitry Baryshkov 			.num_parents = 1,
117516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
117616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
117716fb89f9SDmitry Baryshkov 		},
117816fb89f9SDmitry Baryshkov 	},
117916fb89f9SDmitry Baryshkov };
118016fb89f9SDmitry Baryshkov 
118116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_link_intf_clk = {
118216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8084,
118316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
118416fb89f9SDmitry Baryshkov 	.clkr = {
118516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8084,
118616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
118716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
118816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_link_intf_clk",
11895c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
11905c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw,
119116fb89f9SDmitry Baryshkov 			},
119216fb89f9SDmitry Baryshkov 			.num_parents = 1,
119316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
119416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
119516fb89f9SDmitry Baryshkov 		},
119616fb89f9SDmitry Baryshkov 	},
119716fb89f9SDmitry Baryshkov };
119816fb89f9SDmitry Baryshkov 
119916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_pixel0_clk = {
120016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8078,
120116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
120216fb89f9SDmitry Baryshkov 	.clkr = {
120316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8078,
120416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
120516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
120616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_pixel0_clk",
12075c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12085c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw,
120916fb89f9SDmitry Baryshkov 			},
121016fb89f9SDmitry Baryshkov 			.num_parents = 1,
121116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
121216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
121316fb89f9SDmitry Baryshkov 		},
121416fb89f9SDmitry Baryshkov 	},
121516fb89f9SDmitry Baryshkov };
121616fb89f9SDmitry Baryshkov 
121716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx2_pixel1_clk = {
121816fb89f9SDmitry Baryshkov 	.halt_reg = 0x807c,
121916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
122016fb89f9SDmitry Baryshkov 	.clkr = {
122116fb89f9SDmitry Baryshkov 		.enable_reg = 0x807c,
122216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
122316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
122416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx2_pixel1_clk",
12255c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12265c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw,
122716fb89f9SDmitry Baryshkov 			},
122816fb89f9SDmitry Baryshkov 			.num_parents = 1,
122916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
123016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
123116fb89f9SDmitry Baryshkov 		},
123216fb89f9SDmitry Baryshkov 	},
123316fb89f9SDmitry Baryshkov };
123416fb89f9SDmitry Baryshkov 
123516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx3_aux_clk = {
123616fb89f9SDmitry Baryshkov 	.halt_reg = 0x809c,
123716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
123816fb89f9SDmitry Baryshkov 	.clkr = {
123916fb89f9SDmitry Baryshkov 		.enable_reg = 0x809c,
124016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
124116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
124216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx3_aux_clk",
12435c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12445c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx3_aux_clk_src.clkr.hw,
124516fb89f9SDmitry Baryshkov 			},
124616fb89f9SDmitry Baryshkov 			.num_parents = 1,
124716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
124816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
124916fb89f9SDmitry Baryshkov 		},
125016fb89f9SDmitry Baryshkov 	},
125116fb89f9SDmitry Baryshkov };
125216fb89f9SDmitry Baryshkov 
125316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx3_crypto_clk = {
125416fb89f9SDmitry Baryshkov 	.halt_reg = 0x80a0,
125516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
125616fb89f9SDmitry Baryshkov 	.clkr = {
125716fb89f9SDmitry Baryshkov 		.enable_reg = 0x80a0,
125816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
125916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
126016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx3_crypto_clk",
12615c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12625c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
126316fb89f9SDmitry Baryshkov 			},
126416fb89f9SDmitry Baryshkov 			.num_parents = 1,
126516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
126616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
126716fb89f9SDmitry Baryshkov 		},
126816fb89f9SDmitry Baryshkov 	},
126916fb89f9SDmitry Baryshkov };
127016fb89f9SDmitry Baryshkov 
127116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx3_link_clk = {
127216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8094,
127316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
127416fb89f9SDmitry Baryshkov 	.clkr = {
127516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8094,
127616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
127716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
127816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx3_link_clk",
12795c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12805c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
128116fb89f9SDmitry Baryshkov 			},
128216fb89f9SDmitry Baryshkov 			.num_parents = 1,
128316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
128416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
128516fb89f9SDmitry Baryshkov 		},
128616fb89f9SDmitry Baryshkov 	},
128716fb89f9SDmitry Baryshkov };
128816fb89f9SDmitry Baryshkov 
128916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx3_link_intf_clk = {
129016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8098,
129116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
129216fb89f9SDmitry Baryshkov 	.clkr = {
129316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8098,
129416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
129516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
129616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx3_link_intf_clk",
12975c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
12985c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw,
129916fb89f9SDmitry Baryshkov 			},
130016fb89f9SDmitry Baryshkov 			.num_parents = 1,
130116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
130216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
130316fb89f9SDmitry Baryshkov 		},
130416fb89f9SDmitry Baryshkov 	},
130516fb89f9SDmitry Baryshkov };
130616fb89f9SDmitry Baryshkov 
130716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_dptx3_pixel0_clk = {
130816fb89f9SDmitry Baryshkov 	.halt_reg = 0x8090,
130916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
131016fb89f9SDmitry Baryshkov 	.clkr = {
131116fb89f9SDmitry Baryshkov 		.enable_reg = 0x8090,
131216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
131316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
131416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_dptx3_pixel0_clk",
13155c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
13165c0df30cSDmitry Baryshkov 				&disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw,
131716fb89f9SDmitry Baryshkov 			},
131816fb89f9SDmitry Baryshkov 			.num_parents = 1,
131916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
132016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
132116fb89f9SDmitry Baryshkov 		},
132216fb89f9SDmitry Baryshkov 	},
132316fb89f9SDmitry Baryshkov };
132416fb89f9SDmitry Baryshkov 
132516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_esc0_clk = {
132616fb89f9SDmitry Baryshkov 	.halt_reg = 0x8038,
132716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
132816fb89f9SDmitry Baryshkov 	.clkr = {
132916fb89f9SDmitry Baryshkov 		.enable_reg = 0x8038,
133016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
133116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
133216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_esc0_clk",
13335c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
13345c0df30cSDmitry Baryshkov 				&disp_cc_mdss_esc0_clk_src.clkr.hw,
133516fb89f9SDmitry Baryshkov 			},
133616fb89f9SDmitry Baryshkov 			.num_parents = 1,
133716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
133816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
133916fb89f9SDmitry Baryshkov 		},
134016fb89f9SDmitry Baryshkov 	},
134116fb89f9SDmitry Baryshkov };
134216fb89f9SDmitry Baryshkov 
134316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_esc1_clk = {
134416fb89f9SDmitry Baryshkov 	.halt_reg = 0x803c,
134516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
134616fb89f9SDmitry Baryshkov 	.clkr = {
134716fb89f9SDmitry Baryshkov 		.enable_reg = 0x803c,
134816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
134916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
135016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_esc1_clk",
13515c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
13525c0df30cSDmitry Baryshkov 				&disp_cc_mdss_esc1_clk_src.clkr.hw,
135316fb89f9SDmitry Baryshkov 			},
135416fb89f9SDmitry Baryshkov 			.num_parents = 1,
135516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
135616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
135716fb89f9SDmitry Baryshkov 		},
135816fb89f9SDmitry Baryshkov 	},
135916fb89f9SDmitry Baryshkov };
136016fb89f9SDmitry Baryshkov 
136116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_mdp1_clk = {
136216fb89f9SDmitry Baryshkov 	.halt_reg = 0xa004,
136316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
136416fb89f9SDmitry Baryshkov 	.clkr = {
136516fb89f9SDmitry Baryshkov 		.enable_reg = 0xa004,
136616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
136716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
136816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_mdp1_clk",
13695c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
13705c0df30cSDmitry Baryshkov 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
137116fb89f9SDmitry Baryshkov 			},
137216fb89f9SDmitry Baryshkov 			.num_parents = 1,
137316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
137416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
137516fb89f9SDmitry Baryshkov 		},
137616fb89f9SDmitry Baryshkov 	},
137716fb89f9SDmitry Baryshkov };
137816fb89f9SDmitry Baryshkov 
137916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_mdp_clk = {
138016fb89f9SDmitry Baryshkov 	.halt_reg = 0x800c,
138116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
138216fb89f9SDmitry Baryshkov 	.clkr = {
138316fb89f9SDmitry Baryshkov 		.enable_reg = 0x800c,
138416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
138516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
138616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_mdp_clk",
13875c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
13885c0df30cSDmitry Baryshkov 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
138916fb89f9SDmitry Baryshkov 			},
139016fb89f9SDmitry Baryshkov 			.num_parents = 1,
139116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
139216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
139316fb89f9SDmitry Baryshkov 		},
139416fb89f9SDmitry Baryshkov 	},
139516fb89f9SDmitry Baryshkov };
139616fb89f9SDmitry Baryshkov 
139716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_mdp_lut1_clk = {
139816fb89f9SDmitry Baryshkov 	.halt_reg = 0xa014,
139916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
140016fb89f9SDmitry Baryshkov 	.clkr = {
140116fb89f9SDmitry Baryshkov 		.enable_reg = 0xa014,
140216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
140316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
140416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_mdp_lut1_clk",
14055c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14065c0df30cSDmitry Baryshkov 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
140716fb89f9SDmitry Baryshkov 			},
140816fb89f9SDmitry Baryshkov 			.num_parents = 1,
140916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
141016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
141116fb89f9SDmitry Baryshkov 		},
141216fb89f9SDmitry Baryshkov 	},
141316fb89f9SDmitry Baryshkov };
141416fb89f9SDmitry Baryshkov 
141516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
141616fb89f9SDmitry Baryshkov 	.halt_reg = 0x801c,
141716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT_VOTED,
141816fb89f9SDmitry Baryshkov 	.clkr = {
141916fb89f9SDmitry Baryshkov 		.enable_reg = 0x801c,
142016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
142116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
142216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_mdp_lut_clk",
14235c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14245c0df30cSDmitry Baryshkov 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
142516fb89f9SDmitry Baryshkov 			},
142616fb89f9SDmitry Baryshkov 			.num_parents = 1,
142716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
142816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
142916fb89f9SDmitry Baryshkov 		},
143016fb89f9SDmitry Baryshkov 	},
143116fb89f9SDmitry Baryshkov };
143216fb89f9SDmitry Baryshkov 
143316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
143416fb89f9SDmitry Baryshkov 	.halt_reg = 0xc004,
143516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT_VOTED,
143616fb89f9SDmitry Baryshkov 	.clkr = {
143716fb89f9SDmitry Baryshkov 		.enable_reg = 0xc004,
143816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
143916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
144016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_non_gdsc_ahb_clk",
14415c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14425c0df30cSDmitry Baryshkov 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
144316fb89f9SDmitry Baryshkov 			},
144416fb89f9SDmitry Baryshkov 			.num_parents = 1,
144516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
144616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
144716fb89f9SDmitry Baryshkov 		},
144816fb89f9SDmitry Baryshkov 	},
144916fb89f9SDmitry Baryshkov };
145016fb89f9SDmitry Baryshkov 
145116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_pclk0_clk = {
145216fb89f9SDmitry Baryshkov 	.halt_reg = 0x8004,
145316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
145416fb89f9SDmitry Baryshkov 	.clkr = {
145516fb89f9SDmitry Baryshkov 		.enable_reg = 0x8004,
145616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
145716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
145816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_pclk0_clk",
14595c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14605c0df30cSDmitry Baryshkov 				&disp_cc_mdss_pclk0_clk_src.clkr.hw,
146116fb89f9SDmitry Baryshkov 			},
146216fb89f9SDmitry Baryshkov 			.num_parents = 1,
146316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
146416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
146516fb89f9SDmitry Baryshkov 		},
146616fb89f9SDmitry Baryshkov 	},
146716fb89f9SDmitry Baryshkov };
146816fb89f9SDmitry Baryshkov 
146916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_pclk1_clk = {
147016fb89f9SDmitry Baryshkov 	.halt_reg = 0x8008,
147116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
147216fb89f9SDmitry Baryshkov 	.clkr = {
147316fb89f9SDmitry Baryshkov 		.enable_reg = 0x8008,
147416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
147516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
147616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_pclk1_clk",
14775c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14785c0df30cSDmitry Baryshkov 				&disp_cc_mdss_pclk1_clk_src.clkr.hw,
147916fb89f9SDmitry Baryshkov 			},
148016fb89f9SDmitry Baryshkov 			.num_parents = 1,
148116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
148216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
148316fb89f9SDmitry Baryshkov 		},
148416fb89f9SDmitry Baryshkov 	},
148516fb89f9SDmitry Baryshkov };
148616fb89f9SDmitry Baryshkov 
148716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_rot1_clk = {
148816fb89f9SDmitry Baryshkov 	.halt_reg = 0xa00c,
148916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
149016fb89f9SDmitry Baryshkov 	.clkr = {
149116fb89f9SDmitry Baryshkov 		.enable_reg = 0xa00c,
149216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
149316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
149416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_rot1_clk",
14955c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
14965c0df30cSDmitry Baryshkov 				&disp_cc_mdss_rot_clk_src.clkr.hw,
149716fb89f9SDmitry Baryshkov 			},
149816fb89f9SDmitry Baryshkov 			.num_parents = 1,
149916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
150016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
150116fb89f9SDmitry Baryshkov 		},
150216fb89f9SDmitry Baryshkov 	},
150316fb89f9SDmitry Baryshkov };
150416fb89f9SDmitry Baryshkov 
150516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_rot_clk = {
150616fb89f9SDmitry Baryshkov 	.halt_reg = 0x8014,
150716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
150816fb89f9SDmitry Baryshkov 	.clkr = {
150916fb89f9SDmitry Baryshkov 		.enable_reg = 0x8014,
151016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
151116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
151216fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_rot_clk",
15135c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
15145c0df30cSDmitry Baryshkov 				&disp_cc_mdss_rot_clk_src.clkr.hw,
151516fb89f9SDmitry Baryshkov 			},
151616fb89f9SDmitry Baryshkov 			.num_parents = 1,
151716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
151816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
151916fb89f9SDmitry Baryshkov 		},
152016fb89f9SDmitry Baryshkov 	},
152116fb89f9SDmitry Baryshkov };
152216fb89f9SDmitry Baryshkov 
152316fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
152416fb89f9SDmitry Baryshkov 	.halt_reg = 0xc00c,
152516fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
152616fb89f9SDmitry Baryshkov 	.clkr = {
152716fb89f9SDmitry Baryshkov 		.enable_reg = 0xc00c,
152816fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
152916fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
153016fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_rscc_ahb_clk",
15315c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
15325c0df30cSDmitry Baryshkov 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
153316fb89f9SDmitry Baryshkov 			},
153416fb89f9SDmitry Baryshkov 			.num_parents = 1,
153516fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
153616fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
153716fb89f9SDmitry Baryshkov 		},
153816fb89f9SDmitry Baryshkov 	},
153916fb89f9SDmitry Baryshkov };
154016fb89f9SDmitry Baryshkov 
154116fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
154216fb89f9SDmitry Baryshkov 	.halt_reg = 0xc008,
154316fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
154416fb89f9SDmitry Baryshkov 	.clkr = {
154516fb89f9SDmitry Baryshkov 		.enable_reg = 0xc008,
154616fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
154716fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
154816fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_rscc_vsync_clk",
15495c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
15505c0df30cSDmitry Baryshkov 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
155116fb89f9SDmitry Baryshkov 			},
155216fb89f9SDmitry Baryshkov 			.num_parents = 1,
155316fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
155416fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
155516fb89f9SDmitry Baryshkov 		},
155616fb89f9SDmitry Baryshkov 	},
155716fb89f9SDmitry Baryshkov };
155816fb89f9SDmitry Baryshkov 
155916fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_vsync1_clk = {
156016fb89f9SDmitry Baryshkov 	.halt_reg = 0xa01c,
156116fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
156216fb89f9SDmitry Baryshkov 	.clkr = {
156316fb89f9SDmitry Baryshkov 		.enable_reg = 0xa01c,
156416fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
156516fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
156616fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_vsync1_clk",
15675c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
15685c0df30cSDmitry Baryshkov 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
156916fb89f9SDmitry Baryshkov 			},
157016fb89f9SDmitry Baryshkov 			.num_parents = 1,
157116fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
157216fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
157316fb89f9SDmitry Baryshkov 		},
157416fb89f9SDmitry Baryshkov 	},
157516fb89f9SDmitry Baryshkov };
157616fb89f9SDmitry Baryshkov 
157716fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_mdss_vsync_clk = {
157816fb89f9SDmitry Baryshkov 	.halt_reg = 0x8024,
157916fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
158016fb89f9SDmitry Baryshkov 	.clkr = {
158116fb89f9SDmitry Baryshkov 		.enable_reg = 0x8024,
158216fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
158316fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
158416fb89f9SDmitry Baryshkov 			.name = "disp_cc_mdss_vsync_clk",
15855c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
15865c0df30cSDmitry Baryshkov 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
158716fb89f9SDmitry Baryshkov 			},
158816fb89f9SDmitry Baryshkov 			.num_parents = 1,
158916fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
159016fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
159116fb89f9SDmitry Baryshkov 		},
159216fb89f9SDmitry Baryshkov 	},
159316fb89f9SDmitry Baryshkov };
159416fb89f9SDmitry Baryshkov 
159516fb89f9SDmitry Baryshkov static struct clk_branch disp_cc_sleep_clk = {
159616fb89f9SDmitry Baryshkov 	.halt_reg = 0xe078,
159716fb89f9SDmitry Baryshkov 	.halt_check = BRANCH_HALT,
159816fb89f9SDmitry Baryshkov 	.clkr = {
159916fb89f9SDmitry Baryshkov 		.enable_reg = 0xe078,
160016fb89f9SDmitry Baryshkov 		.enable_mask = BIT(0),
160116fb89f9SDmitry Baryshkov 		.hw.init = &(struct clk_init_data) {
160216fb89f9SDmitry Baryshkov 			.name = "disp_cc_sleep_clk",
16035c0df30cSDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]) {
16045c0df30cSDmitry Baryshkov 				&disp_cc_sleep_clk_src.clkr.hw,
160516fb89f9SDmitry Baryshkov 			},
160616fb89f9SDmitry Baryshkov 			.num_parents = 1,
160716fb89f9SDmitry Baryshkov 			.flags = CLK_SET_RATE_PARENT,
160816fb89f9SDmitry Baryshkov 			.ops = &clk_branch2_ops,
160916fb89f9SDmitry Baryshkov 		},
161016fb89f9SDmitry Baryshkov 	},
161116fb89f9SDmitry Baryshkov };
161216fb89f9SDmitry Baryshkov 
161316fb89f9SDmitry Baryshkov static struct gdsc mdss_gdsc = {
161416fb89f9SDmitry Baryshkov 	.gdscr = 0x9000,
161516fb89f9SDmitry Baryshkov 	.pd = {
161616fb89f9SDmitry Baryshkov 		.name = "mdss_gdsc",
161716fb89f9SDmitry Baryshkov 	},
161816fb89f9SDmitry Baryshkov 	.pwrsts = PWRSTS_OFF_ON,
161916fb89f9SDmitry Baryshkov 	.flags = HW_CTRL | RETAIN_FF_ENABLE,
162016fb89f9SDmitry Baryshkov };
162116fb89f9SDmitry Baryshkov 
162216fb89f9SDmitry Baryshkov static struct gdsc mdss_int2_gdsc = {
162316fb89f9SDmitry Baryshkov 	.gdscr = 0xb000,
162416fb89f9SDmitry Baryshkov 	.pd = {
162516fb89f9SDmitry Baryshkov 		.name = "mdss_int2_gdsc",
162616fb89f9SDmitry Baryshkov 	},
162716fb89f9SDmitry Baryshkov 	.pwrsts = PWRSTS_OFF_ON,
162816fb89f9SDmitry Baryshkov 	.flags = HW_CTRL | RETAIN_FF_ENABLE,
162916fb89f9SDmitry Baryshkov };
163016fb89f9SDmitry Baryshkov 
163116fb89f9SDmitry Baryshkov static struct clk_regmap *disp_cc_sm8450_clocks[] = {
163216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_AHB1_CLK] = &disp_cc_mdss_ahb1_clk.clkr,
163316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
163416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
163516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
163616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
163716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
163816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
163916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE1_CLK] = &disp_cc_mdss_byte1_clk.clkr,
164016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE1_CLK_SRC] = &disp_cc_mdss_byte1_clk_src.clkr,
164116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &disp_cc_mdss_byte1_div_clk_src.clkr,
164216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_BYTE1_INTF_CLK] = &disp_cc_mdss_byte1_intf_clk.clkr,
164316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_AUX_CLK] = &disp_cc_mdss_dptx0_aux_clk.clkr,
164416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] = &disp_cc_mdss_dptx0_aux_clk_src.clkr,
164516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_CRYPTO_CLK] = &disp_cc_mdss_dptx0_crypto_clk.clkr,
164616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_LINK_CLK] = &disp_cc_mdss_dptx0_link_clk.clkr,
164716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] = &disp_cc_mdss_dptx0_link_clk_src.clkr,
164816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx0_link_div_clk_src.clkr,
164916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] = &disp_cc_mdss_dptx0_link_intf_clk.clkr,
165016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_PIXEL0_CLK] = &disp_cc_mdss_dptx0_pixel0_clk.clkr,
165116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx0_pixel0_clk_src.clkr,
165216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_PIXEL1_CLK] = &disp_cc_mdss_dptx0_pixel1_clk.clkr,
165316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx0_pixel1_clk_src.clkr,
165416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =
165516fb89f9SDmitry Baryshkov 		&disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr,
165616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_AUX_CLK] = &disp_cc_mdss_dptx1_aux_clk.clkr,
165716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] = &disp_cc_mdss_dptx1_aux_clk_src.clkr,
165816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_CRYPTO_CLK] = &disp_cc_mdss_dptx1_crypto_clk.clkr,
165916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_LINK_CLK] = &disp_cc_mdss_dptx1_link_clk.clkr,
166016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] = &disp_cc_mdss_dptx1_link_clk_src.clkr,
166116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx1_link_div_clk_src.clkr,
166216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] = &disp_cc_mdss_dptx1_link_intf_clk.clkr,
166316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_PIXEL0_CLK] = &disp_cc_mdss_dptx1_pixel0_clk.clkr,
166416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx1_pixel0_clk_src.clkr,
166516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_PIXEL1_CLK] = &disp_cc_mdss_dptx1_pixel1_clk.clkr,
166616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx1_pixel1_clk_src.clkr,
166716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =
166816fb89f9SDmitry Baryshkov 		&disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr,
166916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_AUX_CLK] = &disp_cc_mdss_dptx2_aux_clk.clkr,
167016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_AUX_CLK_SRC] = &disp_cc_mdss_dptx2_aux_clk_src.clkr,
167116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_CRYPTO_CLK] = &disp_cc_mdss_dptx2_crypto_clk.clkr,
167216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_LINK_CLK] = &disp_cc_mdss_dptx2_link_clk.clkr,
167316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_LINK_CLK_SRC] = &disp_cc_mdss_dptx2_link_clk_src.clkr,
167416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx2_link_div_clk_src.clkr,
167516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_LINK_INTF_CLK] = &disp_cc_mdss_dptx2_link_intf_clk.clkr,
167616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_PIXEL0_CLK] = &disp_cc_mdss_dptx2_pixel0_clk.clkr,
167716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx2_pixel0_clk_src.clkr,
167816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_PIXEL1_CLK] = &disp_cc_mdss_dptx2_pixel1_clk.clkr,
167916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx2_pixel1_clk_src.clkr,
168016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_AUX_CLK] = &disp_cc_mdss_dptx3_aux_clk.clkr,
168116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_AUX_CLK_SRC] = &disp_cc_mdss_dptx3_aux_clk_src.clkr,
168216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_CRYPTO_CLK] = &disp_cc_mdss_dptx3_crypto_clk.clkr,
168316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_LINK_CLK] = &disp_cc_mdss_dptx3_link_clk.clkr,
168416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_LINK_CLK_SRC] = &disp_cc_mdss_dptx3_link_clk_src.clkr,
168516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx3_link_div_clk_src.clkr,
168616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_LINK_INTF_CLK] = &disp_cc_mdss_dptx3_link_intf_clk.clkr,
168716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_PIXEL0_CLK] = &disp_cc_mdss_dptx3_pixel0_clk.clkr,
168816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx3_pixel0_clk_src.clkr,
168916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
169016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
169116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ESC1_CLK] = &disp_cc_mdss_esc1_clk.clkr,
169216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ESC1_CLK_SRC] = &disp_cc_mdss_esc1_clk_src.clkr,
169316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_MDP1_CLK] = &disp_cc_mdss_mdp1_clk.clkr,
169416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
169516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
169616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_MDP_LUT1_CLK] = &disp_cc_mdss_mdp_lut1_clk.clkr,
169716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
169816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
169916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
170016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
170116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_PCLK1_CLK] = &disp_cc_mdss_pclk1_clk.clkr,
170216fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_PCLK1_CLK_SRC] = &disp_cc_mdss_pclk1_clk_src.clkr,
170316fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ROT1_CLK] = &disp_cc_mdss_rot1_clk.clkr,
170416fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
170516fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
170616fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
170716fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
170816fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_VSYNC1_CLK] = &disp_cc_mdss_vsync1_clk.clkr,
170916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
171016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
171116fb89f9SDmitry Baryshkov 	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
171216fb89f9SDmitry Baryshkov 	[DISP_CC_PLL1] = &disp_cc_pll1.clkr,
171316fb89f9SDmitry Baryshkov 	[DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
171416fb89f9SDmitry Baryshkov 	[DISP_CC_SLEEP_CLK_SRC] = &disp_cc_sleep_clk_src.clkr,
171516fb89f9SDmitry Baryshkov 	[DISP_CC_XO_CLK_SRC] = &disp_cc_xo_clk_src.clkr,
171616fb89f9SDmitry Baryshkov };
171716fb89f9SDmitry Baryshkov 
171816fb89f9SDmitry Baryshkov static const struct qcom_reset_map disp_cc_sm8450_resets[] = {
171916fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
172016fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 },
172116fb89f9SDmitry Baryshkov 	[DISP_CC_MDSS_RSCC_BCR] = { 0xc000 },
172216fb89f9SDmitry Baryshkov };
172316fb89f9SDmitry Baryshkov 
172416fb89f9SDmitry Baryshkov static struct gdsc *disp_cc_sm8450_gdscs[] = {
172516fb89f9SDmitry Baryshkov 	[MDSS_GDSC] = &mdss_gdsc,
172616fb89f9SDmitry Baryshkov 	[MDSS_INT2_GDSC] = &mdss_int2_gdsc,
172716fb89f9SDmitry Baryshkov };
172816fb89f9SDmitry Baryshkov 
172916fb89f9SDmitry Baryshkov static const struct regmap_config disp_cc_sm8450_regmap_config = {
173016fb89f9SDmitry Baryshkov 	.reg_bits = 32,
173116fb89f9SDmitry Baryshkov 	.reg_stride = 4,
173216fb89f9SDmitry Baryshkov 	.val_bits = 32,
173316fb89f9SDmitry Baryshkov 	.max_register = 0x11008,
173416fb89f9SDmitry Baryshkov 	.fast_io = true,
173516fb89f9SDmitry Baryshkov };
173616fb89f9SDmitry Baryshkov 
173716fb89f9SDmitry Baryshkov static struct qcom_cc_desc disp_cc_sm8450_desc = {
173816fb89f9SDmitry Baryshkov 	.config = &disp_cc_sm8450_regmap_config,
173916fb89f9SDmitry Baryshkov 	.clks = disp_cc_sm8450_clocks,
174016fb89f9SDmitry Baryshkov 	.num_clks = ARRAY_SIZE(disp_cc_sm8450_clocks),
174116fb89f9SDmitry Baryshkov 	.resets = disp_cc_sm8450_resets,
174216fb89f9SDmitry Baryshkov 	.num_resets = ARRAY_SIZE(disp_cc_sm8450_resets),
174316fb89f9SDmitry Baryshkov 	.gdscs = disp_cc_sm8450_gdscs,
174416fb89f9SDmitry Baryshkov 	.num_gdscs = ARRAY_SIZE(disp_cc_sm8450_gdscs),
174516fb89f9SDmitry Baryshkov };
174616fb89f9SDmitry Baryshkov 
174716fb89f9SDmitry Baryshkov static const struct of_device_id disp_cc_sm8450_match_table[] = {
174816fb89f9SDmitry Baryshkov 	{ .compatible = "qcom,sm8450-dispcc" },
174916fb89f9SDmitry Baryshkov 	{ }
175016fb89f9SDmitry Baryshkov };
175116fb89f9SDmitry Baryshkov MODULE_DEVICE_TABLE(of, disp_cc_sm8450_match_table);
175216fb89f9SDmitry Baryshkov 
disp_cc_sm8450_probe(struct platform_device * pdev)175316fb89f9SDmitry Baryshkov static int disp_cc_sm8450_probe(struct platform_device *pdev)
175416fb89f9SDmitry Baryshkov {
175516fb89f9SDmitry Baryshkov 	struct regmap *regmap;
175616fb89f9SDmitry Baryshkov 	int ret;
175716fb89f9SDmitry Baryshkov 
1758b69069c3SDmitry Baryshkov 	ret = devm_pm_runtime_enable(&pdev->dev);
175916fb89f9SDmitry Baryshkov 	if (ret)
176016fb89f9SDmitry Baryshkov 		return ret;
176116fb89f9SDmitry Baryshkov 
176216fb89f9SDmitry Baryshkov 	ret = pm_runtime_resume_and_get(&pdev->dev);
176316fb89f9SDmitry Baryshkov 	if (ret)
176416fb89f9SDmitry Baryshkov 		return ret;
176516fb89f9SDmitry Baryshkov 
176616fb89f9SDmitry Baryshkov 	regmap = qcom_cc_map(pdev, &disp_cc_sm8450_desc);
1767b0f3d01bSJohan Hovold 	if (IS_ERR(regmap)) {
1768b0f3d01bSJohan Hovold 		ret = PTR_ERR(regmap);
1769b0f3d01bSJohan Hovold 		goto err_put_rpm;
1770b0f3d01bSJohan Hovold 	}
177116fb89f9SDmitry Baryshkov 
177216fb89f9SDmitry Baryshkov 	clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
177316fb89f9SDmitry Baryshkov 	clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
177416fb89f9SDmitry Baryshkov 
177516fb89f9SDmitry Baryshkov 	/* Enable clock gating for MDP clocks */
177616fb89f9SDmitry Baryshkov 	regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
177716fb89f9SDmitry Baryshkov 
177816fb89f9SDmitry Baryshkov 	/*
177916fb89f9SDmitry Baryshkov 	 * Keep clocks always enabled:
178016fb89f9SDmitry Baryshkov 	 *	disp_cc_xo_clk
178116fb89f9SDmitry Baryshkov 	 */
178216fb89f9SDmitry Baryshkov 	regmap_update_bits(regmap, 0xe05c, BIT(0), BIT(0));
178316fb89f9SDmitry Baryshkov 
178416fb89f9SDmitry Baryshkov 	ret = qcom_cc_really_probe(pdev, &disp_cc_sm8450_desc, regmap);
1785b0f3d01bSJohan Hovold 	if (ret)
1786b0f3d01bSJohan Hovold 		goto err_put_rpm;
178716fb89f9SDmitry Baryshkov 
178816fb89f9SDmitry Baryshkov 	pm_runtime_put(&pdev->dev);
178916fb89f9SDmitry Baryshkov 
1790b0f3d01bSJohan Hovold 	return 0;
1791b0f3d01bSJohan Hovold 
1792b0f3d01bSJohan Hovold err_put_rpm:
1793b0f3d01bSJohan Hovold 	pm_runtime_put_sync(&pdev->dev);
1794b0f3d01bSJohan Hovold 
179516fb89f9SDmitry Baryshkov 	return ret;
179616fb89f9SDmitry Baryshkov }
179716fb89f9SDmitry Baryshkov 
179816fb89f9SDmitry Baryshkov static struct platform_driver disp_cc_sm8450_driver = {
179916fb89f9SDmitry Baryshkov 	.probe = disp_cc_sm8450_probe,
180016fb89f9SDmitry Baryshkov 	.driver = {
180116fb89f9SDmitry Baryshkov 		.name = "disp_cc-sm8450",
180216fb89f9SDmitry Baryshkov 		.of_match_table = disp_cc_sm8450_match_table,
180316fb89f9SDmitry Baryshkov 	},
180416fb89f9SDmitry Baryshkov };
180516fb89f9SDmitry Baryshkov 
disp_cc_sm8450_init(void)180616fb89f9SDmitry Baryshkov static int __init disp_cc_sm8450_init(void)
180716fb89f9SDmitry Baryshkov {
180816fb89f9SDmitry Baryshkov 	return platform_driver_register(&disp_cc_sm8450_driver);
180916fb89f9SDmitry Baryshkov }
181016fb89f9SDmitry Baryshkov subsys_initcall(disp_cc_sm8450_init);
181116fb89f9SDmitry Baryshkov 
disp_cc_sm8450_exit(void)181216fb89f9SDmitry Baryshkov static void __exit disp_cc_sm8450_exit(void)
181316fb89f9SDmitry Baryshkov {
181416fb89f9SDmitry Baryshkov 	platform_driver_unregister(&disp_cc_sm8450_driver);
181516fb89f9SDmitry Baryshkov }
181616fb89f9SDmitry Baryshkov module_exit(disp_cc_sm8450_exit);
181716fb89f9SDmitry Baryshkov 
181816fb89f9SDmitry Baryshkov MODULE_DESCRIPTION("QTI DISPCC SM8450 Driver");
181916fb89f9SDmitry Baryshkov MODULE_LICENSE("GPL");
1820