xref: /openbmc/linux/drivers/clk/qcom/dispcc-sm6350.c (revision 360823a09426347ea8f232b0b0b5156d0aed0302)
183751977SKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
283751977SKonrad Dybcio /*
383751977SKonrad Dybcio  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
483751977SKonrad Dybcio  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
583751977SKonrad Dybcio  */
683751977SKonrad Dybcio 
783751977SKonrad Dybcio #include <linux/clk-provider.h>
883751977SKonrad Dybcio #include <linux/module.h>
983751977SKonrad Dybcio #include <linux/platform_device.h>
1083751977SKonrad Dybcio #include <linux/regmap.h>
1183751977SKonrad Dybcio 
1283751977SKonrad Dybcio #include <dt-bindings/clock/qcom,dispcc-sm6350.h>
1383751977SKonrad Dybcio 
1483751977SKonrad Dybcio #include "clk-alpha-pll.h"
1583751977SKonrad Dybcio #include "clk-branch.h"
1683751977SKonrad Dybcio #include "clk-rcg.h"
1783751977SKonrad Dybcio #include "clk-regmap.h"
1883751977SKonrad Dybcio #include "clk-regmap-divider.h"
1983751977SKonrad Dybcio #include "common.h"
2083751977SKonrad Dybcio #include "gdsc.h"
2183751977SKonrad Dybcio #include "reset.h"
2283751977SKonrad Dybcio 
2383751977SKonrad Dybcio enum {
2483751977SKonrad Dybcio 	P_BI_TCXO,
2583751977SKonrad Dybcio 	P_DISP_CC_PLL0_OUT_EVEN,
2683751977SKonrad Dybcio 	P_DISP_CC_PLL0_OUT_MAIN,
2783751977SKonrad Dybcio 	P_DP_PHY_PLL_LINK_CLK,
2883751977SKonrad Dybcio 	P_DP_PHY_PLL_VCO_DIV_CLK,
2983751977SKonrad Dybcio 	P_DSI0_PHY_PLL_OUT_BYTECLK,
3083751977SKonrad Dybcio 	P_DSI0_PHY_PLL_OUT_DSICLK,
3183751977SKonrad Dybcio 	P_GCC_DISP_GPLL0_CLK,
3283751977SKonrad Dybcio };
3383751977SKonrad Dybcio 
3483751977SKonrad Dybcio static struct pll_vco fabia_vco[] = {
3583751977SKonrad Dybcio 	{ 249600000, 2000000000, 0 },
3683751977SKonrad Dybcio };
3783751977SKonrad Dybcio 
3883751977SKonrad Dybcio static const struct alpha_pll_config disp_cc_pll0_config = {
3983751977SKonrad Dybcio 	.l = 0x3a,
4083751977SKonrad Dybcio 	.alpha = 0x5555,
4183751977SKonrad Dybcio 	.config_ctl_val = 0x20485699,
4283751977SKonrad Dybcio 	.config_ctl_hi_val = 0x00002067,
4383751977SKonrad Dybcio 	.test_ctl_val = 0x40000000,
4483751977SKonrad Dybcio 	.test_ctl_hi_val = 0x00000002,
4583751977SKonrad Dybcio 	.user_ctl_val = 0x00000000,
4683751977SKonrad Dybcio 	.user_ctl_hi_val = 0x00004805,
4783751977SKonrad Dybcio };
4883751977SKonrad Dybcio 
4983751977SKonrad Dybcio static struct clk_alpha_pll disp_cc_pll0 = {
5083751977SKonrad Dybcio 	.offset = 0x0,
5183751977SKonrad Dybcio 	.vco_table = fabia_vco,
5283751977SKonrad Dybcio 	.num_vco = ARRAY_SIZE(fabia_vco),
5383751977SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
5483751977SKonrad Dybcio 	.clkr = {
5583751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
5683751977SKonrad Dybcio 			.name = "disp_cc_pll0",
5783751977SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
5883751977SKonrad Dybcio 				.fw_name = "bi_tcxo",
5983751977SKonrad Dybcio 			},
6083751977SKonrad Dybcio 			.num_parents = 1,
6183751977SKonrad Dybcio 			.ops = &clk_alpha_pll_fabia_ops,
6283751977SKonrad Dybcio 		},
6383751977SKonrad Dybcio 	},
6483751977SKonrad Dybcio };
6583751977SKonrad Dybcio 
6683751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_0[] = {
6783751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
6883751977SKonrad Dybcio 	{ P_DP_PHY_PLL_LINK_CLK, 1 },
6983751977SKonrad Dybcio 	{ P_DP_PHY_PLL_VCO_DIV_CLK, 2 },
7083751977SKonrad Dybcio };
7183751977SKonrad Dybcio 
7283751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_0[] = {
7383751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
7483751977SKonrad Dybcio 	{ .fw_name = "dp_phy_pll_link_clk" },
7583751977SKonrad Dybcio 	{ .fw_name = "dp_phy_pll_vco_div_clk" },
7683751977SKonrad Dybcio };
7783751977SKonrad Dybcio 
7883751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_1[] = {
7983751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
8083751977SKonrad Dybcio 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
8183751977SKonrad Dybcio };
8283751977SKonrad Dybcio 
8383751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_1[] = {
8483751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
8583751977SKonrad Dybcio 	{ .fw_name = "dsi0_phy_pll_out_byteclk" },
8683751977SKonrad Dybcio };
8783751977SKonrad Dybcio 
8883751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_3[] = {
8983751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
9083751977SKonrad Dybcio 	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
9183751977SKonrad Dybcio 	{ P_GCC_DISP_GPLL0_CLK, 4 },
9283751977SKonrad Dybcio 	{ P_DISP_CC_PLL0_OUT_EVEN, 5 },
9383751977SKonrad Dybcio };
9483751977SKonrad Dybcio 
9583751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_3[] = {
9683751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
9783751977SKonrad Dybcio 	{ .hw = &disp_cc_pll0.clkr.hw },
9883751977SKonrad Dybcio 	{ .fw_name = "gcc_disp_gpll0_clk" },
9983751977SKonrad Dybcio 	{ .hw = &disp_cc_pll0.clkr.hw },
10083751977SKonrad Dybcio };
10183751977SKonrad Dybcio 
10283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_4[] = {
10383751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
10483751977SKonrad Dybcio 	{ P_GCC_DISP_GPLL0_CLK, 4 },
10583751977SKonrad Dybcio };
10683751977SKonrad Dybcio 
10783751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_4[] = {
10883751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
10983751977SKonrad Dybcio 	{ .fw_name = "gcc_disp_gpll0_clk" },
11083751977SKonrad Dybcio };
11183751977SKonrad Dybcio 
11283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_5[] = {
11383751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
11483751977SKonrad Dybcio 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
11583751977SKonrad Dybcio };
11683751977SKonrad Dybcio 
11783751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_5[] = {
11883751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
11983751977SKonrad Dybcio 	{ .fw_name = "dsi0_phy_pll_out_dsiclk" },
12083751977SKonrad Dybcio };
12183751977SKonrad Dybcio 
12283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_6[] = {
12383751977SKonrad Dybcio 	{ P_BI_TCXO, 0 },
12483751977SKonrad Dybcio };
12583751977SKonrad Dybcio 
12683751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_6[] = {
12783751977SKonrad Dybcio 	{ .fw_name = "bi_tcxo" },
12883751977SKonrad Dybcio };
12983751977SKonrad Dybcio 
13083751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
13183751977SKonrad Dybcio 	F(19200000, P_BI_TCXO, 1, 0, 0),
13283751977SKonrad Dybcio 	F(37500000, P_GCC_DISP_GPLL0_CLK, 16, 0, 0),
13383751977SKonrad Dybcio 	F(75000000, P_GCC_DISP_GPLL0_CLK, 8, 0, 0),
13483751977SKonrad Dybcio 	{ }
13583751977SKonrad Dybcio };
13683751977SKonrad Dybcio 
13783751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
13883751977SKonrad Dybcio 	.cmd_rcgr = 0x115c,
13983751977SKonrad Dybcio 	.mnd_width = 0,
14083751977SKonrad Dybcio 	.hid_width = 5,
14183751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_4,
14283751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
14383751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
14483751977SKonrad Dybcio 		.name = "disp_cc_mdss_ahb_clk_src",
14583751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_4,
14683751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
14783751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
14883751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
14983751977SKonrad Dybcio 	},
15083751977SKonrad Dybcio };
15183751977SKonrad Dybcio 
15283751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
15383751977SKonrad Dybcio 	.cmd_rcgr = 0x10c4,
15483751977SKonrad Dybcio 	.mnd_width = 0,
15583751977SKonrad Dybcio 	.hid_width = 5,
15683751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_1,
15783751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
15883751977SKonrad Dybcio 		.name = "disp_cc_mdss_byte0_clk_src",
15983751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_1,
16083751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
16183751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
16283751977SKonrad Dybcio 		.ops = &clk_byte2_ops,
16383751977SKonrad Dybcio 	},
16483751977SKonrad Dybcio };
16583751977SKonrad Dybcio 
16683751977SKonrad Dybcio static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
16783751977SKonrad Dybcio 	.reg = 0x10dc,
16883751977SKonrad Dybcio 	.shift = 0,
16983751977SKonrad Dybcio 	.width = 2,
17083751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data) {
17183751977SKonrad Dybcio 		.name = "disp_cc_mdss_byte0_div_clk_src",
17283751977SKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
17383751977SKonrad Dybcio 			&disp_cc_mdss_byte0_clk_src.clkr.hw,
17483751977SKonrad Dybcio 		},
17583751977SKonrad Dybcio 		.num_parents = 1,
17683751977SKonrad Dybcio 		.flags = CLK_GET_RATE_NOCACHE,
17783751977SKonrad Dybcio 		.ops = &clk_regmap_div_ro_ops,
17883751977SKonrad Dybcio 	},
17983751977SKonrad Dybcio };
18083751977SKonrad Dybcio 
18183751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = {
18283751977SKonrad Dybcio 	F(19200000, P_BI_TCXO, 1, 0, 0),
18383751977SKonrad Dybcio 	{ }
18483751977SKonrad Dybcio };
18583751977SKonrad Dybcio 
18683751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = {
18783751977SKonrad Dybcio 	.cmd_rcgr = 0x1144,
18883751977SKonrad Dybcio 	.mnd_width = 0,
18983751977SKonrad Dybcio 	.hid_width = 5,
190*3ad28517SLuca Weiss 	.parent_map = disp_cc_parent_map_6,
19183751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
19283751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
19383751977SKonrad Dybcio 		.name = "disp_cc_mdss_dp_aux_clk_src",
194*3ad28517SLuca Weiss 		.parent_data = disp_cc_parent_data_6,
195*3ad28517SLuca Weiss 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
19683751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
19783751977SKonrad Dybcio 	},
19883751977SKonrad Dybcio };
19983751977SKonrad Dybcio 
20083751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_dp_crypto_clk_src[] = {
20183751977SKonrad Dybcio 	F(108000, P_DP_PHY_PLL_LINK_CLK, 3, 0, 0),
20283751977SKonrad Dybcio 	F(180000, P_DP_PHY_PLL_LINK_CLK, 3, 0, 0),
20383751977SKonrad Dybcio 	F(360000, P_DP_PHY_PLL_LINK_CLK, 1.5, 0, 0),
20483751977SKonrad Dybcio 	F(540000, P_DP_PHY_PLL_LINK_CLK, 1.5, 0, 0),
20583751977SKonrad Dybcio 	{ }
20683751977SKonrad Dybcio };
20783751977SKonrad Dybcio 
20883751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {
20983751977SKonrad Dybcio 	.cmd_rcgr = 0x1114,
21083751977SKonrad Dybcio 	.mnd_width = 0,
21183751977SKonrad Dybcio 	.hid_width = 5,
21283751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_0,
21383751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_dp_crypto_clk_src,
21483751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
21583751977SKonrad Dybcio 		.name = "disp_cc_mdss_dp_crypto_clk_src",
21683751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_0,
21783751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
21883751977SKonrad Dybcio 		.flags = CLK_GET_RATE_NOCACHE,
21983751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
22083751977SKonrad Dybcio 	},
22183751977SKonrad Dybcio };
22283751977SKonrad Dybcio 
22383751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {
22483751977SKonrad Dybcio 	.cmd_rcgr = 0x10f8,
22583751977SKonrad Dybcio 	.mnd_width = 0,
22683751977SKonrad Dybcio 	.hid_width = 5,
22783751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_0,
22883751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
22983751977SKonrad Dybcio 		.name = "disp_cc_mdss_dp_link_clk_src",
23083751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_0,
23183751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
23283751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
233e91d89deSDmitry Baryshkov 		.ops = &clk_byte2_ops,
23483751977SKonrad Dybcio 	},
23583751977SKonrad Dybcio };
23683751977SKonrad Dybcio 
23783751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = {
23883751977SKonrad Dybcio 	.cmd_rcgr = 0x112c,
23983751977SKonrad Dybcio 	.mnd_width = 16,
24083751977SKonrad Dybcio 	.hid_width = 5,
24183751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_0,
24283751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
24383751977SKonrad Dybcio 		.name = "disp_cc_mdss_dp_pixel_clk_src",
24483751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_0,
24583751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
24683751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
24783751977SKonrad Dybcio 		.ops = &clk_dp_ops,
24883751977SKonrad Dybcio 	},
24983751977SKonrad Dybcio };
25083751977SKonrad Dybcio 
25183751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
25283751977SKonrad Dybcio 	.cmd_rcgr = 0x10e0,
25383751977SKonrad Dybcio 	.mnd_width = 0,
25483751977SKonrad Dybcio 	.hid_width = 5,
25583751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_1,
25683751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
25783751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
25883751977SKonrad Dybcio 		.name = "disp_cc_mdss_esc0_clk_src",
25983751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_1,
26083751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
26183751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
26283751977SKonrad Dybcio 	},
26383751977SKonrad Dybcio };
26483751977SKonrad Dybcio 
26583751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
26683751977SKonrad Dybcio 	F(19200000, P_BI_TCXO, 1, 0, 0),
26783751977SKonrad Dybcio 	F(200000000, P_GCC_DISP_GPLL0_CLK, 3, 0, 0),
26883751977SKonrad Dybcio 	F(300000000, P_GCC_DISP_GPLL0_CLK, 2, 0, 0),
26983751977SKonrad Dybcio 	F(373333333, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
27083751977SKonrad Dybcio 	F(448000000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
27183751977SKonrad Dybcio 	F(560000000, P_DISP_CC_PLL0_OUT_MAIN, 2, 0, 0),
27283751977SKonrad Dybcio 	{ }
27383751977SKonrad Dybcio };
27483751977SKonrad Dybcio 
27583751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
27683751977SKonrad Dybcio 	.cmd_rcgr = 0x107c,
27783751977SKonrad Dybcio 	.mnd_width = 0,
27883751977SKonrad Dybcio 	.hid_width = 5,
27983751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_3,
28083751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
28183751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
28283751977SKonrad Dybcio 		.name = "disp_cc_mdss_mdp_clk_src",
28383751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_3,
28483751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
28583751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
28683751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
28783751977SKonrad Dybcio 	},
28883751977SKonrad Dybcio };
28983751977SKonrad Dybcio 
29083751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
29183751977SKonrad Dybcio 	.cmd_rcgr = 0x1064,
29283751977SKonrad Dybcio 	.mnd_width = 8,
29383751977SKonrad Dybcio 	.hid_width = 5,
29483751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_5,
29583751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
29683751977SKonrad Dybcio 		.name = "disp_cc_mdss_pclk0_clk_src",
29783751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_5,
29883751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
29992039e8cSKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE | CLK_OPS_PARENT_ENABLE,
30083751977SKonrad Dybcio 		.ops = &clk_pixel_ops,
30183751977SKonrad Dybcio 	},
30283751977SKonrad Dybcio };
30383751977SKonrad Dybcio 
30483751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
30583751977SKonrad Dybcio 	.cmd_rcgr = 0x1094,
30683751977SKonrad Dybcio 	.mnd_width = 0,
30783751977SKonrad Dybcio 	.hid_width = 5,
30883751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_3,
30983751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
31083751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
31183751977SKonrad Dybcio 		.name = "disp_cc_mdss_rot_clk_src",
31283751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_3,
31383751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
31483751977SKonrad Dybcio 		.flags = CLK_SET_RATE_PARENT,
31583751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
31683751977SKonrad Dybcio 	},
31783751977SKonrad Dybcio };
31883751977SKonrad Dybcio 
31983751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
32083751977SKonrad Dybcio 	.cmd_rcgr = 0x10ac,
32183751977SKonrad Dybcio 	.mnd_width = 0,
32283751977SKonrad Dybcio 	.hid_width = 5,
32383751977SKonrad Dybcio 	.parent_map = disp_cc_parent_map_6,
32483751977SKonrad Dybcio 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
32583751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
32683751977SKonrad Dybcio 		.name = "disp_cc_mdss_vsync_clk_src",
32783751977SKonrad Dybcio 		.parent_data = disp_cc_parent_data_6,
32883751977SKonrad Dybcio 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
32983751977SKonrad Dybcio 		.ops = &clk_rcg2_ops,
33083751977SKonrad Dybcio 	},
33183751977SKonrad Dybcio };
33283751977SKonrad Dybcio 
33383751977SKonrad Dybcio static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = {
33483751977SKonrad Dybcio 	.reg = 0x1110,
33583751977SKonrad Dybcio 	.shift = 0,
33683751977SKonrad Dybcio 	.width = 2,
33783751977SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data) {
33883751977SKonrad Dybcio 		.name = "disp_cc_mdss_dp_link_div_clk_src",
33983751977SKonrad Dybcio 		.parent_hws = (const struct clk_hw*[]){
34083751977SKonrad Dybcio 			&disp_cc_mdss_dp_link_clk_src.clkr.hw,
34183751977SKonrad Dybcio 		},
34283751977SKonrad Dybcio 		.num_parents = 1,
34383751977SKonrad Dybcio 		.flags = CLK_GET_RATE_NOCACHE,
34483751977SKonrad Dybcio 		.ops = &clk_regmap_div_ro_ops,
34583751977SKonrad Dybcio 	},
34683751977SKonrad Dybcio };
34783751977SKonrad Dybcio 
34883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_ahb_clk = {
34983751977SKonrad Dybcio 	.halt_reg = 0x104c,
35083751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
35183751977SKonrad Dybcio 	.clkr = {
35283751977SKonrad Dybcio 		.enable_reg = 0x104c,
35383751977SKonrad Dybcio 		.enable_mask = BIT(0),
35483751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
35583751977SKonrad Dybcio 			.name = "disp_cc_mdss_ahb_clk",
35683751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
35783751977SKonrad Dybcio 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
35883751977SKonrad Dybcio 			},
35983751977SKonrad Dybcio 			.num_parents = 1,
36083751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
36183751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
36283751977SKonrad Dybcio 		},
36383751977SKonrad Dybcio 	},
36483751977SKonrad Dybcio };
36583751977SKonrad Dybcio 
36683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_byte0_clk = {
36783751977SKonrad Dybcio 	.halt_reg = 0x102c,
36883751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
36983751977SKonrad Dybcio 	.clkr = {
37083751977SKonrad Dybcio 		.enable_reg = 0x102c,
37183751977SKonrad Dybcio 		.enable_mask = BIT(0),
37283751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
37383751977SKonrad Dybcio 			.name = "disp_cc_mdss_byte0_clk",
37483751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
37583751977SKonrad Dybcio 				&disp_cc_mdss_byte0_clk_src.clkr.hw,
37683751977SKonrad Dybcio 			},
37783751977SKonrad Dybcio 			.num_parents = 1,
37892039e8cSKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE | CLK_OPS_PARENT_ENABLE,
37983751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
38083751977SKonrad Dybcio 		},
38183751977SKonrad Dybcio 	},
38283751977SKonrad Dybcio };
38383751977SKonrad Dybcio 
38483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
38583751977SKonrad Dybcio 	.halt_reg = 0x1030,
38683751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
38783751977SKonrad Dybcio 	.clkr = {
38883751977SKonrad Dybcio 		.enable_reg = 0x1030,
38983751977SKonrad Dybcio 		.enable_mask = BIT(0),
39083751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
39183751977SKonrad Dybcio 			.name = "disp_cc_mdss_byte0_intf_clk",
39283751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
39383751977SKonrad Dybcio 				&disp_cc_mdss_byte0_div_clk_src.clkr.hw,
39483751977SKonrad Dybcio 			},
39583751977SKonrad Dybcio 			.num_parents = 1,
39683751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
39783751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
39883751977SKonrad Dybcio 		},
39983751977SKonrad Dybcio 	},
40083751977SKonrad Dybcio };
40183751977SKonrad Dybcio 
40283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_aux_clk = {
40383751977SKonrad Dybcio 	.halt_reg = 0x1048,
40483751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
40583751977SKonrad Dybcio 	.clkr = {
40683751977SKonrad Dybcio 		.enable_reg = 0x1048,
40783751977SKonrad Dybcio 		.enable_mask = BIT(0),
40883751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
40983751977SKonrad Dybcio 			.name = "disp_cc_mdss_dp_aux_clk",
41083751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
41183751977SKonrad Dybcio 				&disp_cc_mdss_dp_aux_clk_src.clkr.hw,
41283751977SKonrad Dybcio 			},
41383751977SKonrad Dybcio 			.num_parents = 1,
41483751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
41583751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
41683751977SKonrad Dybcio 		},
41783751977SKonrad Dybcio 	},
41883751977SKonrad Dybcio };
41983751977SKonrad Dybcio 
42083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_crypto_clk = {
42183751977SKonrad Dybcio 	.halt_reg = 0x1040,
42283751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
42383751977SKonrad Dybcio 	.clkr = {
42483751977SKonrad Dybcio 		.enable_reg = 0x1040,
42583751977SKonrad Dybcio 		.enable_mask = BIT(0),
42683751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
42783751977SKonrad Dybcio 			.name = "disp_cc_mdss_dp_crypto_clk",
42883751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
42983751977SKonrad Dybcio 				&disp_cc_mdss_dp_crypto_clk_src.clkr.hw,
43083751977SKonrad Dybcio 			},
43183751977SKonrad Dybcio 			.num_parents = 1,
43283751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
43383751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
43483751977SKonrad Dybcio 		},
43583751977SKonrad Dybcio 	},
43683751977SKonrad Dybcio };
43783751977SKonrad Dybcio 
43883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_link_clk = {
43983751977SKonrad Dybcio 	.halt_reg = 0x1038,
44083751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
44183751977SKonrad Dybcio 	.clkr = {
44283751977SKonrad Dybcio 		.enable_reg = 0x1038,
44383751977SKonrad Dybcio 		.enable_mask = BIT(0),
44483751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
44583751977SKonrad Dybcio 			.name = "disp_cc_mdss_dp_link_clk",
44683751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
44783751977SKonrad Dybcio 				&disp_cc_mdss_dp_link_clk_src.clkr.hw,
44883751977SKonrad Dybcio 			},
44983751977SKonrad Dybcio 			.num_parents = 1,
45083751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
45183751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
45283751977SKonrad Dybcio 		},
45383751977SKonrad Dybcio 	},
45483751977SKonrad Dybcio };
45583751977SKonrad Dybcio 
45683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
45783751977SKonrad Dybcio 	.halt_reg = 0x103c,
45883751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
45983751977SKonrad Dybcio 	.clkr = {
46083751977SKonrad Dybcio 		.enable_reg = 0x103c,
46183751977SKonrad Dybcio 		.enable_mask = BIT(0),
46283751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
46383751977SKonrad Dybcio 			.name = "disp_cc_mdss_dp_link_intf_clk",
46483751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
46583751977SKonrad Dybcio 				&disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
46683751977SKonrad Dybcio 			},
46783751977SKonrad Dybcio 			.num_parents = 1,
46883751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
46983751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
47083751977SKonrad Dybcio 		},
47183751977SKonrad Dybcio 	},
47283751977SKonrad Dybcio };
47383751977SKonrad Dybcio 
47483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_pixel_clk = {
47583751977SKonrad Dybcio 	.halt_reg = 0x1044,
47683751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
47783751977SKonrad Dybcio 	.clkr = {
47883751977SKonrad Dybcio 		.enable_reg = 0x1044,
47983751977SKonrad Dybcio 		.enable_mask = BIT(0),
48083751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
48183751977SKonrad Dybcio 			.name = "disp_cc_mdss_dp_pixel_clk",
48283751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
48383751977SKonrad Dybcio 				&disp_cc_mdss_dp_pixel_clk_src.clkr.hw,
48483751977SKonrad Dybcio 			},
48583751977SKonrad Dybcio 			.num_parents = 1,
48683751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
48783751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
48883751977SKonrad Dybcio 		},
48983751977SKonrad Dybcio 	},
49083751977SKonrad Dybcio };
49183751977SKonrad Dybcio 
49283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_esc0_clk = {
49383751977SKonrad Dybcio 	.halt_reg = 0x1034,
49483751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
49583751977SKonrad Dybcio 	.clkr = {
49683751977SKonrad Dybcio 		.enable_reg = 0x1034,
49783751977SKonrad Dybcio 		.enable_mask = BIT(0),
49883751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
49983751977SKonrad Dybcio 			.name = "disp_cc_mdss_esc0_clk",
50083751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
50183751977SKonrad Dybcio 				&disp_cc_mdss_esc0_clk_src.clkr.hw,
50283751977SKonrad Dybcio 			},
50383751977SKonrad Dybcio 			.num_parents = 1,
50483751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
50583751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
50683751977SKonrad Dybcio 		},
50783751977SKonrad Dybcio 	},
50883751977SKonrad Dybcio };
50983751977SKonrad Dybcio 
51083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_mdp_clk = {
51183751977SKonrad Dybcio 	.halt_reg = 0x1010,
51283751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
51383751977SKonrad Dybcio 	.clkr = {
51483751977SKonrad Dybcio 		.enable_reg = 0x1010,
51583751977SKonrad Dybcio 		.enable_mask = BIT(0),
51683751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
51783751977SKonrad Dybcio 			.name = "disp_cc_mdss_mdp_clk",
51883751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
51983751977SKonrad Dybcio 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
52083751977SKonrad Dybcio 			},
52183751977SKonrad Dybcio 			.num_parents = 1,
52283751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
52383751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
52483751977SKonrad Dybcio 		},
52583751977SKonrad Dybcio 	},
52683751977SKonrad Dybcio };
52783751977SKonrad Dybcio 
52883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
52983751977SKonrad Dybcio 	.halt_reg = 0x1020,
53083751977SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
53183751977SKonrad Dybcio 	.clkr = {
53283751977SKonrad Dybcio 		.enable_reg = 0x1020,
53383751977SKonrad Dybcio 		.enable_mask = BIT(0),
53483751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
53583751977SKonrad Dybcio 			.name = "disp_cc_mdss_mdp_lut_clk",
53683751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
53783751977SKonrad Dybcio 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
53883751977SKonrad Dybcio 			},
53983751977SKonrad Dybcio 			.num_parents = 1,
54083751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
54183751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
54283751977SKonrad Dybcio 		},
54383751977SKonrad Dybcio 	},
54483751977SKonrad Dybcio };
54583751977SKonrad Dybcio 
54683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
54783751977SKonrad Dybcio 	.halt_reg = 0x2004,
54883751977SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
54983751977SKonrad Dybcio 	.clkr = {
55083751977SKonrad Dybcio 		.enable_reg = 0x2004,
55183751977SKonrad Dybcio 		.enable_mask = BIT(0),
55283751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
55383751977SKonrad Dybcio 			.name = "disp_cc_mdss_non_gdsc_ahb_clk",
55483751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
55583751977SKonrad Dybcio 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
55683751977SKonrad Dybcio 			},
55783751977SKonrad Dybcio 			.num_parents = 1,
55883751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
55983751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
56083751977SKonrad Dybcio 		},
56183751977SKonrad Dybcio 	},
56283751977SKonrad Dybcio };
56383751977SKonrad Dybcio 
56483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_pclk0_clk = {
56583751977SKonrad Dybcio 	.halt_reg = 0x100c,
56683751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
56783751977SKonrad Dybcio 	.clkr = {
56883751977SKonrad Dybcio 		.enable_reg = 0x100c,
56983751977SKonrad Dybcio 		.enable_mask = BIT(0),
57083751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
57183751977SKonrad Dybcio 			.name = "disp_cc_mdss_pclk0_clk",
57283751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
57383751977SKonrad Dybcio 				&disp_cc_mdss_pclk0_clk_src.clkr.hw,
57483751977SKonrad Dybcio 			},
57583751977SKonrad Dybcio 			.num_parents = 1,
57683751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
57783751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
57883751977SKonrad Dybcio 		},
57983751977SKonrad Dybcio 	},
58083751977SKonrad Dybcio };
58183751977SKonrad Dybcio 
58283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rot_clk = {
58383751977SKonrad Dybcio 	.halt_reg = 0x1018,
58483751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
58583751977SKonrad Dybcio 	.clkr = {
58683751977SKonrad Dybcio 		.enable_reg = 0x1018,
58783751977SKonrad Dybcio 		.enable_mask = BIT(0),
58883751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
58983751977SKonrad Dybcio 			.name = "disp_cc_mdss_rot_clk",
59083751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
59183751977SKonrad Dybcio 				&disp_cc_mdss_rot_clk_src.clkr.hw,
59283751977SKonrad Dybcio 			},
59383751977SKonrad Dybcio 			.num_parents = 1,
59483751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
59583751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
59683751977SKonrad Dybcio 		},
59783751977SKonrad Dybcio 	},
59883751977SKonrad Dybcio };
59983751977SKonrad Dybcio 
60083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
60183751977SKonrad Dybcio 	.halt_reg = 0x200c,
60283751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
60383751977SKonrad Dybcio 	.clkr = {
60483751977SKonrad Dybcio 		.enable_reg = 0x200c,
60583751977SKonrad Dybcio 		.enable_mask = BIT(0),
60683751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
60783751977SKonrad Dybcio 			.name = "disp_cc_mdss_rscc_ahb_clk",
60883751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
60983751977SKonrad Dybcio 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
61083751977SKonrad Dybcio 			},
61183751977SKonrad Dybcio 			.num_parents = 1,
61283751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
61383751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
61483751977SKonrad Dybcio 		},
61583751977SKonrad Dybcio 	},
61683751977SKonrad Dybcio };
61783751977SKonrad Dybcio 
61883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
61983751977SKonrad Dybcio 	.halt_reg = 0x2008,
62083751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
62183751977SKonrad Dybcio 	.clkr = {
62283751977SKonrad Dybcio 		.enable_reg = 0x2008,
62383751977SKonrad Dybcio 		.enable_mask = BIT(0),
62483751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
62583751977SKonrad Dybcio 			.name = "disp_cc_mdss_rscc_vsync_clk",
62683751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
62783751977SKonrad Dybcio 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
62883751977SKonrad Dybcio 			},
62983751977SKonrad Dybcio 			.num_parents = 1,
63083751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
63183751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
63283751977SKonrad Dybcio 		},
63383751977SKonrad Dybcio 	},
63483751977SKonrad Dybcio };
63583751977SKonrad Dybcio 
63683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_vsync_clk = {
63783751977SKonrad Dybcio 	.halt_reg = 0x1028,
63883751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
63983751977SKonrad Dybcio 	.clkr = {
64083751977SKonrad Dybcio 		.enable_reg = 0x1028,
64183751977SKonrad Dybcio 		.enable_mask = BIT(0),
64283751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
64383751977SKonrad Dybcio 			.name = "disp_cc_mdss_vsync_clk",
64483751977SKonrad Dybcio 			.parent_hws = (const struct clk_hw*[]){
64583751977SKonrad Dybcio 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
64683751977SKonrad Dybcio 			},
64783751977SKonrad Dybcio 			.num_parents = 1,
64883751977SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
64983751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
65083751977SKonrad Dybcio 		},
65183751977SKonrad Dybcio 	},
65283751977SKonrad Dybcio };
65383751977SKonrad Dybcio 
65483751977SKonrad Dybcio static struct clk_branch disp_cc_sleep_clk = {
65583751977SKonrad Dybcio 	.halt_reg = 0x5004,
65683751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
65783751977SKonrad Dybcio 	.clkr = {
65883751977SKonrad Dybcio 		.enable_reg = 0x5004,
65983751977SKonrad Dybcio 		.enable_mask = BIT(0),
66083751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
66183751977SKonrad Dybcio 			.name = "disp_cc_sleep_clk",
66283751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
66383751977SKonrad Dybcio 		},
66483751977SKonrad Dybcio 	},
66583751977SKonrad Dybcio };
66683751977SKonrad Dybcio 
66783751977SKonrad Dybcio static struct clk_branch disp_cc_xo_clk = {
66883751977SKonrad Dybcio 	.halt_reg = 0x5008,
66983751977SKonrad Dybcio 	.halt_check = BRANCH_HALT,
67083751977SKonrad Dybcio 	.clkr = {
67183751977SKonrad Dybcio 		.enable_reg = 0x5008,
67283751977SKonrad Dybcio 		.enable_mask = BIT(0),
67383751977SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
67483751977SKonrad Dybcio 			.name = "disp_cc_xo_clk",
67583751977SKonrad Dybcio 			.flags = CLK_IS_CRITICAL,
67683751977SKonrad Dybcio 			.ops = &clk_branch2_ops,
67783751977SKonrad Dybcio 		},
67883751977SKonrad Dybcio 	},
67983751977SKonrad Dybcio };
68083751977SKonrad Dybcio 
68183751977SKonrad Dybcio static struct gdsc mdss_gdsc = {
68283751977SKonrad Dybcio 	.gdscr = 0x1004,
68383751977SKonrad Dybcio 	.pd = {
68483751977SKonrad Dybcio 		.name = "mdss_gdsc",
68583751977SKonrad Dybcio 	},
68683751977SKonrad Dybcio 	.pwrsts = PWRSTS_OFF_ON,
68783751977SKonrad Dybcio 	.flags = RETAIN_FF_ENABLE,
68883751977SKonrad Dybcio };
68983751977SKonrad Dybcio 
69083751977SKonrad Dybcio static struct clk_regmap *disp_cc_sm6350_clocks[] = {
69183751977SKonrad Dybcio 	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
69283751977SKonrad Dybcio 	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
69383751977SKonrad Dybcio 	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
69483751977SKonrad Dybcio 	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
69583751977SKonrad Dybcio 	[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
69683751977SKonrad Dybcio 	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
69783751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr,
69883751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr,
69983751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr,
70083751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr,
70183751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr,
70283751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr,
70383751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] =
70483751977SKonrad Dybcio 		&disp_cc_mdss_dp_link_div_clk_src.clkr,
70583751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr,
70683751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr,
70783751977SKonrad Dybcio 	[DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr,
70883751977SKonrad Dybcio 	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
70983751977SKonrad Dybcio 	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
71083751977SKonrad Dybcio 	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
71183751977SKonrad Dybcio 	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
71283751977SKonrad Dybcio 	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
71383751977SKonrad Dybcio 	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
71483751977SKonrad Dybcio 	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
71583751977SKonrad Dybcio 	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
71683751977SKonrad Dybcio 	[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
71783751977SKonrad Dybcio 	[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
71883751977SKonrad Dybcio 	[DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
71983751977SKonrad Dybcio 	[DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
72083751977SKonrad Dybcio 	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
72183751977SKonrad Dybcio 	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
72283751977SKonrad Dybcio 	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
72383751977SKonrad Dybcio 	[DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
72483751977SKonrad Dybcio 	[DISP_CC_XO_CLK] = &disp_cc_xo_clk.clkr,
72583751977SKonrad Dybcio };
72683751977SKonrad Dybcio 
72783751977SKonrad Dybcio static struct gdsc *disp_cc_sm6350_gdscs[] = {
72883751977SKonrad Dybcio 	[MDSS_GDSC] = &mdss_gdsc,
72983751977SKonrad Dybcio };
73083751977SKonrad Dybcio 
73183751977SKonrad Dybcio static const struct regmap_config disp_cc_sm6350_regmap_config = {
73283751977SKonrad Dybcio 	.reg_bits = 32,
73383751977SKonrad Dybcio 	.reg_stride = 4,
73483751977SKonrad Dybcio 	.val_bits = 32,
73583751977SKonrad Dybcio 	.max_register = 0x10000,
73683751977SKonrad Dybcio 	.fast_io = true,
73783751977SKonrad Dybcio };
73883751977SKonrad Dybcio 
73983751977SKonrad Dybcio static const struct qcom_cc_desc disp_cc_sm6350_desc = {
74083751977SKonrad Dybcio 	.config = &disp_cc_sm6350_regmap_config,
74183751977SKonrad Dybcio 	.clks = disp_cc_sm6350_clocks,
74283751977SKonrad Dybcio 	.num_clks = ARRAY_SIZE(disp_cc_sm6350_clocks),
74383751977SKonrad Dybcio 	.gdscs = disp_cc_sm6350_gdscs,
74483751977SKonrad Dybcio 	.num_gdscs = ARRAY_SIZE(disp_cc_sm6350_gdscs),
74583751977SKonrad Dybcio };
74683751977SKonrad Dybcio 
74783751977SKonrad Dybcio static const struct of_device_id disp_cc_sm6350_match_table[] = {
74883751977SKonrad Dybcio 	{ .compatible = "qcom,sm6350-dispcc" },
74983751977SKonrad Dybcio 	{ }
75083751977SKonrad Dybcio };
75183751977SKonrad Dybcio MODULE_DEVICE_TABLE(of, disp_cc_sm6350_match_table);
75283751977SKonrad Dybcio 
disp_cc_sm6350_probe(struct platform_device * pdev)75383751977SKonrad Dybcio static int disp_cc_sm6350_probe(struct platform_device *pdev)
75483751977SKonrad Dybcio {
75583751977SKonrad Dybcio 	struct regmap *regmap;
75683751977SKonrad Dybcio 
75783751977SKonrad Dybcio 	regmap = qcom_cc_map(pdev, &disp_cc_sm6350_desc);
75883751977SKonrad Dybcio 	if (IS_ERR(regmap))
75983751977SKonrad Dybcio 		return PTR_ERR(regmap);
76083751977SKonrad Dybcio 
76183751977SKonrad Dybcio 	clk_fabia_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
76283751977SKonrad Dybcio 
76383751977SKonrad Dybcio 	return qcom_cc_really_probe(pdev, &disp_cc_sm6350_desc, regmap);
76483751977SKonrad Dybcio }
76583751977SKonrad Dybcio 
76683751977SKonrad Dybcio static struct platform_driver disp_cc_sm6350_driver = {
76783751977SKonrad Dybcio 	.probe = disp_cc_sm6350_probe,
76883751977SKonrad Dybcio 	.driver = {
76983751977SKonrad Dybcio 		.name = "disp_cc-sm6350",
77083751977SKonrad Dybcio 		.of_match_table = disp_cc_sm6350_match_table,
77183751977SKonrad Dybcio 	},
77283751977SKonrad Dybcio };
77383751977SKonrad Dybcio 
disp_cc_sm6350_init(void)77483751977SKonrad Dybcio static int __init disp_cc_sm6350_init(void)
77583751977SKonrad Dybcio {
77683751977SKonrad Dybcio 	return platform_driver_register(&disp_cc_sm6350_driver);
77783751977SKonrad Dybcio }
77883751977SKonrad Dybcio subsys_initcall(disp_cc_sm6350_init);
77983751977SKonrad Dybcio 
disp_cc_sm6350_exit(void)78083751977SKonrad Dybcio static void __exit disp_cc_sm6350_exit(void)
78183751977SKonrad Dybcio {
78283751977SKonrad Dybcio 	platform_driver_unregister(&disp_cc_sm6350_driver);
78383751977SKonrad Dybcio }
78483751977SKonrad Dybcio module_exit(disp_cc_sm6350_exit);
78583751977SKonrad Dybcio 
78683751977SKonrad Dybcio MODULE_DESCRIPTION("QTI DISP_CC SM6350 Driver");
78783751977SKonrad Dybcio MODULE_LICENSE("GPL v2");
788