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