xref: /linux/drivers/clk/qcom/dispcc-qcs615.c (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1*9b47105fSTaniya Das // SPDX-License-Identifier: GPL-2.0-only
2*9b47105fSTaniya Das /*
3*9b47105fSTaniya Das  * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4*9b47105fSTaniya Das  */
5*9b47105fSTaniya Das 
6*9b47105fSTaniya Das #include <linux/clk-provider.h>
7*9b47105fSTaniya Das #include <linux/module.h>
8*9b47105fSTaniya Das #include <linux/mod_devicetable.h>
9*9b47105fSTaniya Das #include <linux/of.h>
10*9b47105fSTaniya Das #include <linux/platform_device.h>
11*9b47105fSTaniya Das #include <linux/regmap.h>
12*9b47105fSTaniya Das 
13*9b47105fSTaniya Das #include <dt-bindings/clock/qcom,qcs615-dispcc.h>
14*9b47105fSTaniya Das 
15*9b47105fSTaniya Das #include "clk-alpha-pll.h"
16*9b47105fSTaniya Das #include "clk-branch.h"
17*9b47105fSTaniya Das #include "clk-pll.h"
18*9b47105fSTaniya Das #include "clk-rcg.h"
19*9b47105fSTaniya Das #include "clk-regmap.h"
20*9b47105fSTaniya Das #include "clk-regmap-divider.h"
21*9b47105fSTaniya Das #include "clk-regmap-mux.h"
22*9b47105fSTaniya Das #include "common.h"
23*9b47105fSTaniya Das #include "gdsc.h"
24*9b47105fSTaniya Das #include "reset.h"
25*9b47105fSTaniya Das 
26*9b47105fSTaniya Das enum {
27*9b47105fSTaniya Das 	DT_BI_TCXO,
28*9b47105fSTaniya Das 	DT_GPLL0,
29*9b47105fSTaniya Das 	DT_DSI0_PHY_PLL_OUT_BYTECLK,
30*9b47105fSTaniya Das 	DT_DSI0_PHY_PLL_OUT_DSICLK,
31*9b47105fSTaniya Das 	DT_DSI1_PHY_PLL_OUT_DSICLK,
32*9b47105fSTaniya Das 	DT_DP_PHY_PLL_LINK_CLK,
33*9b47105fSTaniya Das 	DT_DP_PHY_PLL_VCO_DIV_CLK,
34*9b47105fSTaniya Das };
35*9b47105fSTaniya Das 
36*9b47105fSTaniya Das enum {
37*9b47105fSTaniya Das 	P_BI_TCXO,
38*9b47105fSTaniya Das 	P_DISP_CC_PLL0_OUT_MAIN,
39*9b47105fSTaniya Das 	P_DP_PHY_PLL_LINK_CLK,
40*9b47105fSTaniya Das 	P_DP_PHY_PLL_VCO_DIV_CLK,
41*9b47105fSTaniya Das 	P_DSI0_PHY_PLL_OUT_BYTECLK,
42*9b47105fSTaniya Das 	P_DSI0_PHY_PLL_OUT_DSICLK,
43*9b47105fSTaniya Das 	P_DSI1_PHY_PLL_OUT_DSICLK,
44*9b47105fSTaniya Das 	P_GPLL0_OUT_MAIN,
45*9b47105fSTaniya Das };
46*9b47105fSTaniya Das 
47*9b47105fSTaniya Das static const struct pll_vco disp_cc_pll_vco[] = {
48*9b47105fSTaniya Das 	{ 500000000, 1000000000, 2 },
49*9b47105fSTaniya Das };
50*9b47105fSTaniya Das 
51*9b47105fSTaniya Das /* 576MHz configuration VCO - 2 */
52*9b47105fSTaniya Das static struct alpha_pll_config disp_cc_pll0_config = {
53*9b47105fSTaniya Das 	.l = 0x1e,
54*9b47105fSTaniya Das 	.vco_val = BIT(21),
55*9b47105fSTaniya Das 	.vco_mask = GENMASK(21, 20),
56*9b47105fSTaniya Das 	.main_output_mask = BIT(0),
57*9b47105fSTaniya Das 	.config_ctl_val = 0x4001055b,
58*9b47105fSTaniya Das 	.test_ctl_hi_val = 0x1,
59*9b47105fSTaniya Das 	.test_ctl_hi_mask = 0x1,
60*9b47105fSTaniya Das };
61*9b47105fSTaniya Das 
62*9b47105fSTaniya Das static struct clk_alpha_pll disp_cc_pll0 = {
63*9b47105fSTaniya Das 	.offset = 0x0,
64*9b47105fSTaniya Das 	.config = &disp_cc_pll0_config,
65*9b47105fSTaniya Das 	.vco_table = disp_cc_pll_vco,
66*9b47105fSTaniya Das 	.num_vco = ARRAY_SIZE(disp_cc_pll_vco),
67*9b47105fSTaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
68*9b47105fSTaniya Das 	.clkr = {
69*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
70*9b47105fSTaniya Das 			.name = "disp_cc_pll0",
71*9b47105fSTaniya Das 			.parent_data = &(const struct clk_parent_data) {
72*9b47105fSTaniya Das 				.index = DT_BI_TCXO,
73*9b47105fSTaniya Das 			},
74*9b47105fSTaniya Das 			.num_parents = 1,
75*9b47105fSTaniya Das 			.ops = &clk_alpha_pll_slew_ops,
76*9b47105fSTaniya Das 		},
77*9b47105fSTaniya Das 	},
78*9b47105fSTaniya Das };
79*9b47105fSTaniya Das 
80*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_0[] = {
81*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
82*9b47105fSTaniya Das 	{ P_DP_PHY_PLL_LINK_CLK, 1 },
83*9b47105fSTaniya Das 	{ P_DP_PHY_PLL_VCO_DIV_CLK, 2 },
84*9b47105fSTaniya Das };
85*9b47105fSTaniya Das 
86*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_0[] = {
87*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
88*9b47105fSTaniya Das 	{ .index = DT_DP_PHY_PLL_LINK_CLK },
89*9b47105fSTaniya Das 	{ .index = DT_DP_PHY_PLL_VCO_DIV_CLK },
90*9b47105fSTaniya Das };
91*9b47105fSTaniya Das 
92*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_1[] = {
93*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
94*9b47105fSTaniya Das };
95*9b47105fSTaniya Das 
96*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_1[] = {
97*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
98*9b47105fSTaniya Das };
99*9b47105fSTaniya Das 
100*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_2[] = {
101*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
102*9b47105fSTaniya Das 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
103*9b47105fSTaniya Das };
104*9b47105fSTaniya Das 
105*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_2[] = {
106*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
107*9b47105fSTaniya Das 	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
108*9b47105fSTaniya Das };
109*9b47105fSTaniya Das 
110*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_3[] = {
111*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
112*9b47105fSTaniya Das 	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
113*9b47105fSTaniya Das 	{ P_GPLL0_OUT_MAIN, 4 },
114*9b47105fSTaniya Das };
115*9b47105fSTaniya Das 
116*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_3[] = {
117*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
118*9b47105fSTaniya Das 	{ .hw = &disp_cc_pll0.clkr.hw },
119*9b47105fSTaniya Das 	{ .index = DT_GPLL0 },
120*9b47105fSTaniya Das };
121*9b47105fSTaniya Das 
122*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_4[] = {
123*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
124*9b47105fSTaniya Das 	{ P_GPLL0_OUT_MAIN, 4 },
125*9b47105fSTaniya Das };
126*9b47105fSTaniya Das 
127*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_4[] = {
128*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
129*9b47105fSTaniya Das 	{ .index = DT_GPLL0 },
130*9b47105fSTaniya Das };
131*9b47105fSTaniya Das 
132*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_5[] = {
133*9b47105fSTaniya Das 	{ P_BI_TCXO, 0 },
134*9b47105fSTaniya Das 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
135*9b47105fSTaniya Das 	{ P_DSI1_PHY_PLL_OUT_DSICLK, 2 },
136*9b47105fSTaniya Das };
137*9b47105fSTaniya Das 
138*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_5[] = {
139*9b47105fSTaniya Das 	{ .index = DT_BI_TCXO },
140*9b47105fSTaniya Das 	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK },
141*9b47105fSTaniya Das 	{ .index = DT_DSI1_PHY_PLL_OUT_DSICLK },
142*9b47105fSTaniya Das };
143*9b47105fSTaniya Das 
144*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
145*9b47105fSTaniya Das 	F(19200000, P_BI_TCXO, 1, 0, 0),
146*9b47105fSTaniya Das 	F(37500000, P_GPLL0_OUT_MAIN, 8, 0, 0),
147*9b47105fSTaniya Das 	F(75000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
148*9b47105fSTaniya Das 	{ }
149*9b47105fSTaniya Das };
150*9b47105fSTaniya Das 
151*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
152*9b47105fSTaniya Das 	.cmd_rcgr = 0x2170,
153*9b47105fSTaniya Das 	.mnd_width = 0,
154*9b47105fSTaniya Das 	.hid_width = 5,
155*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_4,
156*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
157*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
158*9b47105fSTaniya Das 		.name = "disp_cc_mdss_ahb_clk_src",
159*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_4,
160*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
161*9b47105fSTaniya Das 		.ops = &clk_rcg2_shared_ops,
162*9b47105fSTaniya Das 	},
163*9b47105fSTaniya Das };
164*9b47105fSTaniya Das 
165*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
166*9b47105fSTaniya Das 	.cmd_rcgr = 0x20c0,
167*9b47105fSTaniya Das 	.mnd_width = 0,
168*9b47105fSTaniya Das 	.hid_width = 5,
169*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_2,
170*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
171*9b47105fSTaniya Das 		.name = "disp_cc_mdss_byte0_clk_src",
172*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_2,
173*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
174*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
175*9b47105fSTaniya Das 		.ops = &clk_byte2_ops,
176*9b47105fSTaniya Das 	},
177*9b47105fSTaniya Das };
178*9b47105fSTaniya Das 
179*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux1_clk_src[] = {
180*9b47105fSTaniya Das 	F(19200000, P_BI_TCXO, 1, 0, 0),
181*9b47105fSTaniya Das 	{ }
182*9b47105fSTaniya Das };
183*9b47105fSTaniya Das 
184*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = {
185*9b47105fSTaniya Das 	.cmd_rcgr = 0x2158,
186*9b47105fSTaniya Das 	.mnd_width = 0,
187*9b47105fSTaniya Das 	.hid_width = 5,
188*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_1,
189*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,
190*9b47105fSTaniya Das 	.clkr.hw.init = &(struct clk_init_data){
191*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_aux_clk_src",
192*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_1,
193*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
194*9b47105fSTaniya Das 		.ops = &clk_rcg2_shared_ops,
195*9b47105fSTaniya Das 	},
196*9b47105fSTaniya Das };
197*9b47105fSTaniya Das 
198*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {
199*9b47105fSTaniya Das 	.cmd_rcgr = 0x2110,
200*9b47105fSTaniya Das 	.mnd_width = 0,
201*9b47105fSTaniya Das 	.hid_width = 5,
202*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_0,
203*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
204*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_crypto_clk_src",
205*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_0,
206*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
207*9b47105fSTaniya Das 		.ops = &clk_byte2_ops,
208*9b47105fSTaniya Das 	},
209*9b47105fSTaniya Das };
210*9b47105fSTaniya Das 
211*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {
212*9b47105fSTaniya Das 	.cmd_rcgr = 0x20f4,
213*9b47105fSTaniya Das 	.mnd_width = 0,
214*9b47105fSTaniya Das 	.hid_width = 5,
215*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_0,
216*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
217*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_link_clk_src",
218*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_0,
219*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
220*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
221*9b47105fSTaniya Das 		.ops = &clk_byte2_ops,
222*9b47105fSTaniya Das 	},
223*9b47105fSTaniya Das };
224*9b47105fSTaniya Das 
225*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_pixel1_clk_src = {
226*9b47105fSTaniya Das 	.cmd_rcgr = 0x2140,
227*9b47105fSTaniya Das 	.mnd_width = 16,
228*9b47105fSTaniya Das 	.hid_width = 5,
229*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_0,
230*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
231*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_pixel1_clk_src",
232*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_0,
233*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
234*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
235*9b47105fSTaniya Das 		.ops = &clk_dp_ops,
236*9b47105fSTaniya Das 	},
237*9b47105fSTaniya Das };
238*9b47105fSTaniya Das 
239*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = {
240*9b47105fSTaniya Das 	.cmd_rcgr = 0x2128,
241*9b47105fSTaniya Das 	.mnd_width = 16,
242*9b47105fSTaniya Das 	.hid_width = 5,
243*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_0,
244*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
245*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_pixel_clk_src",
246*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_0,
247*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
248*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
249*9b47105fSTaniya Das 		.ops = &clk_dp_ops,
250*9b47105fSTaniya Das 	},
251*9b47105fSTaniya Das };
252*9b47105fSTaniya Das 
253*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
254*9b47105fSTaniya Das 	.cmd_rcgr = 0x20dc,
255*9b47105fSTaniya Das 	.mnd_width = 0,
256*9b47105fSTaniya Das 	.hid_width = 5,
257*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_2,
258*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,
259*9b47105fSTaniya Das 	.clkr.hw.init = &(struct clk_init_data){
260*9b47105fSTaniya Das 		.name = "disp_cc_mdss_esc0_clk_src",
261*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_2,
262*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
263*9b47105fSTaniya Das 		.ops = &clk_rcg2_ops,
264*9b47105fSTaniya Das 	},
265*9b47105fSTaniya Das };
266*9b47105fSTaniya Das 
267*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
268*9b47105fSTaniya Das 	F(19200000, P_BI_TCXO, 1, 0, 0),
269*9b47105fSTaniya Das 	F(192000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
270*9b47105fSTaniya Das 	F(256000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
271*9b47105fSTaniya Das 	F(307000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
272*9b47105fSTaniya Das 	{ }
273*9b47105fSTaniya Das };
274*9b47105fSTaniya Das 
275*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
276*9b47105fSTaniya Das 	.cmd_rcgr = 0x2078,
277*9b47105fSTaniya Das 	.mnd_width = 0,
278*9b47105fSTaniya Das 	.hid_width = 5,
279*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_3,
280*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
281*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
282*9b47105fSTaniya Das 		.name = "disp_cc_mdss_mdp_clk_src",
283*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_3,
284*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
285*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
286*9b47105fSTaniya Das 		.ops = &clk_rcg2_shared_ops,
287*9b47105fSTaniya Das 	},
288*9b47105fSTaniya Das };
289*9b47105fSTaniya Das 
290*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
291*9b47105fSTaniya Das 	.cmd_rcgr = 0x2060,
292*9b47105fSTaniya Das 	.mnd_width = 8,
293*9b47105fSTaniya Das 	.hid_width = 5,
294*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_5,
295*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
296*9b47105fSTaniya Das 		.name = "disp_cc_mdss_pclk0_clk_src",
297*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_5,
298*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
299*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
300*9b47105fSTaniya Das 		.ops = &clk_pixel_ops,
301*9b47105fSTaniya Das 	},
302*9b47105fSTaniya Das };
303*9b47105fSTaniya Das 
304*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
305*9b47105fSTaniya Das 	.cmd_rcgr = 0x2090,
306*9b47105fSTaniya Das 	.mnd_width = 0,
307*9b47105fSTaniya Das 	.hid_width = 5,
308*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_3,
309*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
310*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
311*9b47105fSTaniya Das 		.name = "disp_cc_mdss_rot_clk_src",
312*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_3,
313*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
314*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
315*9b47105fSTaniya Das 		.ops = &clk_rcg2_shared_ops,
316*9b47105fSTaniya Das 	},
317*9b47105fSTaniya Das };
318*9b47105fSTaniya Das 
319*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
320*9b47105fSTaniya Das 	.cmd_rcgr = 0x20a8,
321*9b47105fSTaniya Das 	.mnd_width = 0,
322*9b47105fSTaniya Das 	.hid_width = 5,
323*9b47105fSTaniya Das 	.parent_map = disp_cc_parent_map_1,
324*9b47105fSTaniya Das 	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,
325*9b47105fSTaniya Das 	.clkr.hw.init = &(struct clk_init_data){
326*9b47105fSTaniya Das 		.name = "disp_cc_mdss_vsync_clk_src",
327*9b47105fSTaniya Das 		.parent_data = disp_cc_parent_data_1,
328*9b47105fSTaniya Das 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
329*9b47105fSTaniya Das 		.ops = &clk_rcg2_shared_ops,
330*9b47105fSTaniya Das 	},
331*9b47105fSTaniya Das };
332*9b47105fSTaniya Das 
333*9b47105fSTaniya Das static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
334*9b47105fSTaniya Das 	.reg = 0x20d8,
335*9b47105fSTaniya Das 	.shift = 0,
336*9b47105fSTaniya Das 	.width = 2,
337*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
338*9b47105fSTaniya Das 		.name = "disp_cc_mdss_byte0_div_clk_src",
339*9b47105fSTaniya Das 		.parent_hws = (const struct clk_hw*[]) {
340*9b47105fSTaniya Das 			&disp_cc_mdss_byte0_clk_src.clkr.hw,
341*9b47105fSTaniya Das 		},
342*9b47105fSTaniya Das 		.num_parents = 1,
343*9b47105fSTaniya Das 		.ops = &clk_regmap_div_ro_ops,
344*9b47105fSTaniya Das 	},
345*9b47105fSTaniya Das };
346*9b47105fSTaniya Das 
347*9b47105fSTaniya Das static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = {
348*9b47105fSTaniya Das 	.reg = 0x210c,
349*9b47105fSTaniya Das 	.shift = 0,
350*9b47105fSTaniya Das 	.width = 2,
351*9b47105fSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
352*9b47105fSTaniya Das 		.name = "disp_cc_mdss_dp_link_div_clk_src",
353*9b47105fSTaniya Das 		.parent_hws = (const struct clk_hw*[]) {
354*9b47105fSTaniya Das 			&disp_cc_mdss_dp_link_clk_src.clkr.hw,
355*9b47105fSTaniya Das 		},
356*9b47105fSTaniya Das 		.num_parents = 1,
357*9b47105fSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
358*9b47105fSTaniya Das 		.ops = &clk_regmap_div_ro_ops,
359*9b47105fSTaniya Das 	},
360*9b47105fSTaniya Das };
361*9b47105fSTaniya Das 
362*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_ahb_clk = {
363*9b47105fSTaniya Das 	.halt_reg = 0x2048,
364*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
365*9b47105fSTaniya Das 	.clkr = {
366*9b47105fSTaniya Das 		.enable_reg = 0x2048,
367*9b47105fSTaniya Das 		.enable_mask = BIT(0),
368*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
369*9b47105fSTaniya Das 			.name = "disp_cc_mdss_ahb_clk",
370*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
371*9b47105fSTaniya Das 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
372*9b47105fSTaniya Das 			},
373*9b47105fSTaniya Das 			.num_parents = 1,
374*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
375*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
376*9b47105fSTaniya Das 		},
377*9b47105fSTaniya Das 	},
378*9b47105fSTaniya Das };
379*9b47105fSTaniya Das 
380*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_byte0_clk = {
381*9b47105fSTaniya Das 	.halt_reg = 0x2024,
382*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
383*9b47105fSTaniya Das 	.clkr = {
384*9b47105fSTaniya Das 		.enable_reg = 0x2024,
385*9b47105fSTaniya Das 		.enable_mask = BIT(0),
386*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
387*9b47105fSTaniya Das 			.name = "disp_cc_mdss_byte0_clk",
388*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
389*9b47105fSTaniya Das 				&disp_cc_mdss_byte0_clk_src.clkr.hw,
390*9b47105fSTaniya Das 			},
391*9b47105fSTaniya Das 			.num_parents = 1,
392*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
393*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
394*9b47105fSTaniya Das 		},
395*9b47105fSTaniya Das 	},
396*9b47105fSTaniya Das };
397*9b47105fSTaniya Das 
398*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
399*9b47105fSTaniya Das 	.halt_reg = 0x2028,
400*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
401*9b47105fSTaniya Das 	.clkr = {
402*9b47105fSTaniya Das 		.enable_reg = 0x2028,
403*9b47105fSTaniya Das 		.enable_mask = BIT(0),
404*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
405*9b47105fSTaniya Das 			.name = "disp_cc_mdss_byte0_intf_clk",
406*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
407*9b47105fSTaniya Das 				&disp_cc_mdss_byte0_div_clk_src.clkr.hw,
408*9b47105fSTaniya Das 			},
409*9b47105fSTaniya Das 			.num_parents = 1,
410*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
411*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
412*9b47105fSTaniya Das 		},
413*9b47105fSTaniya Das 	},
414*9b47105fSTaniya Das };
415*9b47105fSTaniya Das 
416*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_aux_clk = {
417*9b47105fSTaniya Das 	.halt_reg = 0x2044,
418*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
419*9b47105fSTaniya Das 	.clkr = {
420*9b47105fSTaniya Das 		.enable_reg = 0x2044,
421*9b47105fSTaniya Das 		.enable_mask = BIT(0),
422*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
423*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_aux_clk",
424*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
425*9b47105fSTaniya Das 				&disp_cc_mdss_dp_aux_clk_src.clkr.hw,
426*9b47105fSTaniya Das 			},
427*9b47105fSTaniya Das 			.num_parents = 1,
428*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
429*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
430*9b47105fSTaniya Das 		},
431*9b47105fSTaniya Das 	},
432*9b47105fSTaniya Das };
433*9b47105fSTaniya Das 
434*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_crypto_clk = {
435*9b47105fSTaniya Das 	.halt_reg = 0x2038,
436*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
437*9b47105fSTaniya Das 	.clkr = {
438*9b47105fSTaniya Das 		.enable_reg = 0x2038,
439*9b47105fSTaniya Das 		.enable_mask = BIT(0),
440*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
441*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_crypto_clk",
442*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
443*9b47105fSTaniya Das 				&disp_cc_mdss_dp_crypto_clk_src.clkr.hw,
444*9b47105fSTaniya Das 			},
445*9b47105fSTaniya Das 			.num_parents = 1,
446*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
447*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
448*9b47105fSTaniya Das 		},
449*9b47105fSTaniya Das 	},
450*9b47105fSTaniya Das };
451*9b47105fSTaniya Das 
452*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_link_clk = {
453*9b47105fSTaniya Das 	.halt_reg = 0x2030,
454*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
455*9b47105fSTaniya Das 	.clkr = {
456*9b47105fSTaniya Das 		.enable_reg = 0x2030,
457*9b47105fSTaniya Das 		.enable_mask = BIT(0),
458*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
459*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_link_clk",
460*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
461*9b47105fSTaniya Das 				&disp_cc_mdss_dp_link_clk_src.clkr.hw,
462*9b47105fSTaniya Das 			},
463*9b47105fSTaniya Das 			.num_parents = 1,
464*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
465*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
466*9b47105fSTaniya Das 		},
467*9b47105fSTaniya Das 	},
468*9b47105fSTaniya Das };
469*9b47105fSTaniya Das 
470*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
471*9b47105fSTaniya Das 	.halt_reg = 0x2034,
472*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
473*9b47105fSTaniya Das 	.clkr = {
474*9b47105fSTaniya Das 		.enable_reg = 0x2034,
475*9b47105fSTaniya Das 		.enable_mask = BIT(0),
476*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
477*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_link_intf_clk",
478*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
479*9b47105fSTaniya Das 				&disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
480*9b47105fSTaniya Das 			},
481*9b47105fSTaniya Das 			.num_parents = 1,
482*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
483*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
484*9b47105fSTaniya Das 		},
485*9b47105fSTaniya Das 	},
486*9b47105fSTaniya Das };
487*9b47105fSTaniya Das 
488*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_pixel1_clk = {
489*9b47105fSTaniya Das 	.halt_reg = 0x2040,
490*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
491*9b47105fSTaniya Das 	.clkr = {
492*9b47105fSTaniya Das 		.enable_reg = 0x2040,
493*9b47105fSTaniya Das 		.enable_mask = BIT(0),
494*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
495*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_pixel1_clk",
496*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
497*9b47105fSTaniya Das 				&disp_cc_mdss_dp_pixel1_clk_src.clkr.hw,
498*9b47105fSTaniya Das 			},
499*9b47105fSTaniya Das 			.num_parents = 1,
500*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
501*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
502*9b47105fSTaniya Das 		},
503*9b47105fSTaniya Das 	},
504*9b47105fSTaniya Das };
505*9b47105fSTaniya Das 
506*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_pixel_clk = {
507*9b47105fSTaniya Das 	.halt_reg = 0x203c,
508*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
509*9b47105fSTaniya Das 	.clkr = {
510*9b47105fSTaniya Das 		.enable_reg = 0x203c,
511*9b47105fSTaniya Das 		.enable_mask = BIT(0),
512*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
513*9b47105fSTaniya Das 			.name = "disp_cc_mdss_dp_pixel_clk",
514*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
515*9b47105fSTaniya Das 				&disp_cc_mdss_dp_pixel_clk_src.clkr.hw,
516*9b47105fSTaniya Das 			},
517*9b47105fSTaniya Das 			.num_parents = 1,
518*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
519*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
520*9b47105fSTaniya Das 		},
521*9b47105fSTaniya Das 	},
522*9b47105fSTaniya Das };
523*9b47105fSTaniya Das 
524*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_esc0_clk = {
525*9b47105fSTaniya Das 	.halt_reg = 0x202c,
526*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
527*9b47105fSTaniya Das 	.clkr = {
528*9b47105fSTaniya Das 		.enable_reg = 0x202c,
529*9b47105fSTaniya Das 		.enable_mask = BIT(0),
530*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
531*9b47105fSTaniya Das 			.name = "disp_cc_mdss_esc0_clk",
532*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
533*9b47105fSTaniya Das 				&disp_cc_mdss_esc0_clk_src.clkr.hw,
534*9b47105fSTaniya Das 			},
535*9b47105fSTaniya Das 			.num_parents = 1,
536*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
537*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
538*9b47105fSTaniya Das 		},
539*9b47105fSTaniya Das 	},
540*9b47105fSTaniya Das };
541*9b47105fSTaniya Das 
542*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_mdp_clk = {
543*9b47105fSTaniya Das 	.halt_reg = 0x2008,
544*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
545*9b47105fSTaniya Das 	.clkr = {
546*9b47105fSTaniya Das 		.enable_reg = 0x2008,
547*9b47105fSTaniya Das 		.enable_mask = BIT(0),
548*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
549*9b47105fSTaniya Das 			.name = "disp_cc_mdss_mdp_clk",
550*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
551*9b47105fSTaniya Das 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
552*9b47105fSTaniya Das 			},
553*9b47105fSTaniya Das 			.num_parents = 1,
554*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
555*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
556*9b47105fSTaniya Das 		},
557*9b47105fSTaniya Das 	},
558*9b47105fSTaniya Das };
559*9b47105fSTaniya Das 
560*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
561*9b47105fSTaniya Das 	.halt_reg = 0x2018,
562*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
563*9b47105fSTaniya Das 	.clkr = {
564*9b47105fSTaniya Das 		.enable_reg = 0x2018,
565*9b47105fSTaniya Das 		.enable_mask = BIT(0),
566*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
567*9b47105fSTaniya Das 			.name = "disp_cc_mdss_mdp_lut_clk",
568*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
569*9b47105fSTaniya Das 				&disp_cc_mdss_mdp_clk_src.clkr.hw,
570*9b47105fSTaniya Das 			},
571*9b47105fSTaniya Das 			.num_parents = 1,
572*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
573*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
574*9b47105fSTaniya Das 		},
575*9b47105fSTaniya Das 	},
576*9b47105fSTaniya Das };
577*9b47105fSTaniya Das 
578*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
579*9b47105fSTaniya Das 	.halt_reg = 0x4004,
580*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
581*9b47105fSTaniya Das 	.clkr = {
582*9b47105fSTaniya Das 		.enable_reg = 0x4004,
583*9b47105fSTaniya Das 		.enable_mask = BIT(0),
584*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
585*9b47105fSTaniya Das 			.name = "disp_cc_mdss_non_gdsc_ahb_clk",
586*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
587*9b47105fSTaniya Das 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
588*9b47105fSTaniya Das 			},
589*9b47105fSTaniya Das 			.num_parents = 1,
590*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
591*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
592*9b47105fSTaniya Das 		},
593*9b47105fSTaniya Das 	},
594*9b47105fSTaniya Das };
595*9b47105fSTaniya Das 
596*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_pclk0_clk = {
597*9b47105fSTaniya Das 	.halt_reg = 0x2004,
598*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
599*9b47105fSTaniya Das 	.clkr = {
600*9b47105fSTaniya Das 		.enable_reg = 0x2004,
601*9b47105fSTaniya Das 		.enable_mask = BIT(0),
602*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
603*9b47105fSTaniya Das 			.name = "disp_cc_mdss_pclk0_clk",
604*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
605*9b47105fSTaniya Das 				&disp_cc_mdss_pclk0_clk_src.clkr.hw,
606*9b47105fSTaniya Das 			},
607*9b47105fSTaniya Das 			.num_parents = 1,
608*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
609*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
610*9b47105fSTaniya Das 		},
611*9b47105fSTaniya Das 	},
612*9b47105fSTaniya Das };
613*9b47105fSTaniya Das 
614*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rot_clk = {
615*9b47105fSTaniya Das 	.halt_reg = 0x2010,
616*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
617*9b47105fSTaniya Das 	.clkr = {
618*9b47105fSTaniya Das 		.enable_reg = 0x2010,
619*9b47105fSTaniya Das 		.enable_mask = BIT(0),
620*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
621*9b47105fSTaniya Das 			.name = "disp_cc_mdss_rot_clk",
622*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
623*9b47105fSTaniya Das 				&disp_cc_mdss_rot_clk_src.clkr.hw,
624*9b47105fSTaniya Das 			},
625*9b47105fSTaniya Das 			.num_parents = 1,
626*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
627*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
628*9b47105fSTaniya Das 		},
629*9b47105fSTaniya Das 	},
630*9b47105fSTaniya Das };
631*9b47105fSTaniya Das 
632*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
633*9b47105fSTaniya Das 	.halt_reg = 0x400c,
634*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
635*9b47105fSTaniya Das 	.clkr = {
636*9b47105fSTaniya Das 		.enable_reg = 0x400c,
637*9b47105fSTaniya Das 		.enable_mask = BIT(0),
638*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
639*9b47105fSTaniya Das 			.name = "disp_cc_mdss_rscc_ahb_clk",
640*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
641*9b47105fSTaniya Das 				&disp_cc_mdss_ahb_clk_src.clkr.hw,
642*9b47105fSTaniya Das 			},
643*9b47105fSTaniya Das 			.num_parents = 1,
644*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
645*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
646*9b47105fSTaniya Das 		},
647*9b47105fSTaniya Das 	},
648*9b47105fSTaniya Das };
649*9b47105fSTaniya Das 
650*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
651*9b47105fSTaniya Das 	.halt_reg = 0x4008,
652*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
653*9b47105fSTaniya Das 	.clkr = {
654*9b47105fSTaniya Das 		.enable_reg = 0x4008,
655*9b47105fSTaniya Das 		.enable_mask = BIT(0),
656*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
657*9b47105fSTaniya Das 			.name = "disp_cc_mdss_rscc_vsync_clk",
658*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
659*9b47105fSTaniya Das 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
660*9b47105fSTaniya Das 			},
661*9b47105fSTaniya Das 			.num_parents = 1,
662*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
663*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
664*9b47105fSTaniya Das 		},
665*9b47105fSTaniya Das 	},
666*9b47105fSTaniya Das };
667*9b47105fSTaniya Das 
668*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_vsync_clk = {
669*9b47105fSTaniya Das 	.halt_reg = 0x2020,
670*9b47105fSTaniya Das 	.halt_check = BRANCH_HALT,
671*9b47105fSTaniya Das 	.clkr = {
672*9b47105fSTaniya Das 		.enable_reg = 0x2020,
673*9b47105fSTaniya Das 		.enable_mask = BIT(0),
674*9b47105fSTaniya Das 		.hw.init = &(const struct clk_init_data) {
675*9b47105fSTaniya Das 			.name = "disp_cc_mdss_vsync_clk",
676*9b47105fSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
677*9b47105fSTaniya Das 				&disp_cc_mdss_vsync_clk_src.clkr.hw,
678*9b47105fSTaniya Das 			},
679*9b47105fSTaniya Das 			.num_parents = 1,
680*9b47105fSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
681*9b47105fSTaniya Das 			.ops = &clk_branch2_ops,
682*9b47105fSTaniya Das 		},
683*9b47105fSTaniya Das 	},
684*9b47105fSTaniya Das };
685*9b47105fSTaniya Das 
686*9b47105fSTaniya Das static struct gdsc mdss_core_gdsc = {
687*9b47105fSTaniya Das 	.gdscr = 0x3000,
688*9b47105fSTaniya Das 	.en_rest_wait_val = 0x2,
689*9b47105fSTaniya Das 	.en_few_wait_val = 0x2,
690*9b47105fSTaniya Das 	.clk_dis_wait_val = 0xf,
691*9b47105fSTaniya Das 	.pd = {
692*9b47105fSTaniya Das 		.name = "mdss_core_gdsc",
693*9b47105fSTaniya Das 	},
694*9b47105fSTaniya Das 	.pwrsts = PWRSTS_OFF_ON,
695*9b47105fSTaniya Das 	.flags = HW_CTRL | POLL_CFG_GDSCR,
696*9b47105fSTaniya Das };
697*9b47105fSTaniya Das 
698*9b47105fSTaniya Das static struct clk_regmap *disp_cc_qcs615_clocks[] = {
699*9b47105fSTaniya Das 	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
700*9b47105fSTaniya Das 	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
701*9b47105fSTaniya Das 	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
702*9b47105fSTaniya Das 	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
703*9b47105fSTaniya Das 	[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
704*9b47105fSTaniya Das 	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
705*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr,
706*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr,
707*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr,
708*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr,
709*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr,
710*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr,
711*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dp_link_div_clk_src.clkr,
712*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr,
713*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_PIXEL1_CLK] = &disp_cc_mdss_dp_pixel1_clk.clkr,
714*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_PIXEL1_CLK_SRC] = &disp_cc_mdss_dp_pixel1_clk_src.clkr,
715*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr,
716*9b47105fSTaniya Das 	[DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr,
717*9b47105fSTaniya Das 	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
718*9b47105fSTaniya Das 	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
719*9b47105fSTaniya Das 	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
720*9b47105fSTaniya Das 	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
721*9b47105fSTaniya Das 	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
722*9b47105fSTaniya Das 	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
723*9b47105fSTaniya Das 	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
724*9b47105fSTaniya Das 	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
725*9b47105fSTaniya Das 	[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
726*9b47105fSTaniya Das 	[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
727*9b47105fSTaniya Das 	[DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
728*9b47105fSTaniya Das 	[DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
729*9b47105fSTaniya Das 	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
730*9b47105fSTaniya Das 	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
731*9b47105fSTaniya Das 	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
732*9b47105fSTaniya Das };
733*9b47105fSTaniya Das 
734*9b47105fSTaniya Das static struct gdsc *disp_cc_qcs615_gdscs[] = {
735*9b47105fSTaniya Das 	[MDSS_CORE_GDSC] = &mdss_core_gdsc,
736*9b47105fSTaniya Das };
737*9b47105fSTaniya Das 
738*9b47105fSTaniya Das static struct clk_alpha_pll *disp_cc_qcs615_plls[] = {
739*9b47105fSTaniya Das 	&disp_cc_pll0,
740*9b47105fSTaniya Das };
741*9b47105fSTaniya Das 
742*9b47105fSTaniya Das static u32 disp_cc_qcs615_critical_cbcrs[] = {
743*9b47105fSTaniya Das 	0x6054, /* DISP_CC_XO_CLK */
744*9b47105fSTaniya Das };
745*9b47105fSTaniya Das 
746*9b47105fSTaniya Das static const struct regmap_config disp_cc_qcs615_regmap_config = {
747*9b47105fSTaniya Das 	.reg_bits = 32,
748*9b47105fSTaniya Das 	.reg_stride = 4,
749*9b47105fSTaniya Das 	.val_bits = 32,
750*9b47105fSTaniya Das 	.max_register = 0x10000,
751*9b47105fSTaniya Das 	.fast_io = true,
752*9b47105fSTaniya Das };
753*9b47105fSTaniya Das 
754*9b47105fSTaniya Das static struct qcom_cc_driver_data disp_cc_qcs615_driver_data = {
755*9b47105fSTaniya Das 	.alpha_plls = disp_cc_qcs615_plls,
756*9b47105fSTaniya Das 	.num_alpha_plls = ARRAY_SIZE(disp_cc_qcs615_plls),
757*9b47105fSTaniya Das 	.clk_cbcrs = disp_cc_qcs615_critical_cbcrs,
758*9b47105fSTaniya Das 	.num_clk_cbcrs = ARRAY_SIZE(disp_cc_qcs615_critical_cbcrs),
759*9b47105fSTaniya Das };
760*9b47105fSTaniya Das 
761*9b47105fSTaniya Das static const struct qcom_cc_desc disp_cc_qcs615_desc = {
762*9b47105fSTaniya Das 	.config = &disp_cc_qcs615_regmap_config,
763*9b47105fSTaniya Das 	.clks = disp_cc_qcs615_clocks,
764*9b47105fSTaniya Das 	.num_clks = ARRAY_SIZE(disp_cc_qcs615_clocks),
765*9b47105fSTaniya Das 	.gdscs = disp_cc_qcs615_gdscs,
766*9b47105fSTaniya Das 	.num_gdscs = ARRAY_SIZE(disp_cc_qcs615_gdscs),
767*9b47105fSTaniya Das 	.driver_data = &disp_cc_qcs615_driver_data,
768*9b47105fSTaniya Das };
769*9b47105fSTaniya Das 
770*9b47105fSTaniya Das static const struct of_device_id disp_cc_qcs615_match_table[] = {
771*9b47105fSTaniya Das 	{ .compatible = "qcom,qcs615-dispcc" },
772*9b47105fSTaniya Das 	{ }
773*9b47105fSTaniya Das };
774*9b47105fSTaniya Das MODULE_DEVICE_TABLE(of, disp_cc_qcs615_match_table);
775*9b47105fSTaniya Das 
776*9b47105fSTaniya Das static int disp_cc_qcs615_probe(struct platform_device *pdev)
777*9b47105fSTaniya Das {
778*9b47105fSTaniya Das 	return qcom_cc_probe(pdev, &disp_cc_qcs615_desc);
779*9b47105fSTaniya Das }
780*9b47105fSTaniya Das 
781*9b47105fSTaniya Das static struct platform_driver disp_cc_qcs615_driver = {
782*9b47105fSTaniya Das 	.probe = disp_cc_qcs615_probe,
783*9b47105fSTaniya Das 	.driver = {
784*9b47105fSTaniya Das 		.name = "dispcc-qcs615",
785*9b47105fSTaniya Das 		.of_match_table = disp_cc_qcs615_match_table,
786*9b47105fSTaniya Das 	},
787*9b47105fSTaniya Das };
788*9b47105fSTaniya Das 
789*9b47105fSTaniya Das module_platform_driver(disp_cc_qcs615_driver);
790*9b47105fSTaniya Das 
791*9b47105fSTaniya Das MODULE_DESCRIPTION("QTI DISPCC QCS615 Driver");
792*9b47105fSTaniya Das MODULE_LICENSE("GPL");
793