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