xref: /linux/drivers/clk/qcom/videocc-maili.c (revision 502d45774af09f1c681c754c4b7cdfb5d7f72fd9)
1*77814921SJagadeesh Kona // SPDX-License-Identifier: GPL-2.0-only
2*77814921SJagadeesh Kona /*
3*77814921SJagadeesh Kona  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4*77814921SJagadeesh Kona  */
5*77814921SJagadeesh Kona 
6*77814921SJagadeesh Kona #include <linux/clk-provider.h>
7*77814921SJagadeesh Kona #include <linux/module.h>
8*77814921SJagadeesh Kona #include <linux/platform_device.h>
9*77814921SJagadeesh Kona #include <linux/regmap.h>
10*77814921SJagadeesh Kona 
11*77814921SJagadeesh Kona #include <dt-bindings/clock/qcom,maili-videocc.h>
12*77814921SJagadeesh Kona 
13*77814921SJagadeesh Kona #include "clk-alpha-pll.h"
14*77814921SJagadeesh Kona #include "clk-branch.h"
15*77814921SJagadeesh Kona #include "clk-rcg.h"
16*77814921SJagadeesh Kona #include "clk-regmap.h"
17*77814921SJagadeesh Kona #include "clk-regmap-divider.h"
18*77814921SJagadeesh Kona #include "common.h"
19*77814921SJagadeesh Kona #include "gdsc.h"
20*77814921SJagadeesh Kona #include "reset.h"
21*77814921SJagadeesh Kona 
22*77814921SJagadeesh Kona #define ACCU_CFG_MASK GENMASK(25, 21)
23*77814921SJagadeesh Kona 
24*77814921SJagadeesh Kona enum {
25*77814921SJagadeesh Kona 	DT_BI_TCXO,
26*77814921SJagadeesh Kona 	DT_AHB_CLK,
27*77814921SJagadeesh Kona };
28*77814921SJagadeesh Kona 
29*77814921SJagadeesh Kona enum {
30*77814921SJagadeesh Kona 	P_BI_TCXO,
31*77814921SJagadeesh Kona 	P_VIDEO_CC_PLL0_OUT_MAIN,
32*77814921SJagadeesh Kona 	P_VIDEO_CC_PLL1_OUT_MAIN,
33*77814921SJagadeesh Kona 	P_VIDEO_CC_PLL2_OUT_MAIN,
34*77814921SJagadeesh Kona };
35*77814921SJagadeesh Kona 
36*77814921SJagadeesh Kona static const struct pll_vco taycan_eha_t_vco[] = {
37*77814921SJagadeesh Kona 	{ 249600000, 2500000000, 0 },
38*77814921SJagadeesh Kona };
39*77814921SJagadeesh Kona 
40*77814921SJagadeesh Kona /* 360.0 MHz Configuration */
41*77814921SJagadeesh Kona static const struct alpha_pll_config video_cc_pll0_config = {
42*77814921SJagadeesh Kona 	.l = 0x12,
43*77814921SJagadeesh Kona 	.cal_l = 0x42,
44*77814921SJagadeesh Kona 	.alpha = 0xc000,
45*77814921SJagadeesh Kona 	.config_ctl_val = 0xa5c400e7,
46*77814921SJagadeesh Kona 	.config_ctl_hi_val = 0x0a806160,
47*77814921SJagadeesh Kona 	.config_ctl_hi1_val = 0xf51dea20,
48*77814921SJagadeesh Kona 	.user_ctl_val = 0x00000000,
49*77814921SJagadeesh Kona 	.user_ctl_hi_val = 0x00000002,
50*77814921SJagadeesh Kona };
51*77814921SJagadeesh Kona 
52*77814921SJagadeesh Kona static struct clk_alpha_pll video_cc_pll0 = {
53*77814921SJagadeesh Kona 	.offset = 0x0,
54*77814921SJagadeesh Kona 	.config = &video_cc_pll0_config,
55*77814921SJagadeesh Kona 	.vco_table = taycan_eha_t_vco,
56*77814921SJagadeesh Kona 	.num_vco = ARRAY_SIZE(taycan_eha_t_vco),
57*77814921SJagadeesh Kona 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
58*77814921SJagadeesh Kona 	.clkr = {
59*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
60*77814921SJagadeesh Kona 			.name = "video_cc_pll0",
61*77814921SJagadeesh Kona 			.parent_data = &(const struct clk_parent_data) {
62*77814921SJagadeesh Kona 				.index = DT_BI_TCXO,
63*77814921SJagadeesh Kona 			},
64*77814921SJagadeesh Kona 			.num_parents = 1,
65*77814921SJagadeesh Kona 			.ops = &clk_alpha_pll_taycan_eha_t_ops,
66*77814921SJagadeesh Kona 		},
67*77814921SJagadeesh Kona 	},
68*77814921SJagadeesh Kona };
69*77814921SJagadeesh Kona 
70*77814921SJagadeesh Kona /* 480.0 MHz Configuration */
71*77814921SJagadeesh Kona static const struct alpha_pll_config video_cc_pll1_config = {
72*77814921SJagadeesh Kona 	.l = 0x19,
73*77814921SJagadeesh Kona 	.cal_l = 0x42,
74*77814921SJagadeesh Kona 	.alpha = 0x0,
75*77814921SJagadeesh Kona 	.config_ctl_val = 0xa5c400e7,
76*77814921SJagadeesh Kona 	.config_ctl_hi_val = 0x0a806160,
77*77814921SJagadeesh Kona 	.config_ctl_hi1_val = 0xf51dea20,
78*77814921SJagadeesh Kona 	.user_ctl_val = 0x00000000,
79*77814921SJagadeesh Kona 	.user_ctl_hi_val = 0x00000002,
80*77814921SJagadeesh Kona };
81*77814921SJagadeesh Kona 
82*77814921SJagadeesh Kona static struct clk_alpha_pll video_cc_pll1 = {
83*77814921SJagadeesh Kona 	.offset = 0x1000,
84*77814921SJagadeesh Kona 	.config = &video_cc_pll1_config,
85*77814921SJagadeesh Kona 	.vco_table = taycan_eha_t_vco,
86*77814921SJagadeesh Kona 	.num_vco = ARRAY_SIZE(taycan_eha_t_vco),
87*77814921SJagadeesh Kona 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
88*77814921SJagadeesh Kona 	.clkr = {
89*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
90*77814921SJagadeesh Kona 			.name = "video_cc_pll1",
91*77814921SJagadeesh Kona 			.parent_data = &(const struct clk_parent_data) {
92*77814921SJagadeesh Kona 				.index = DT_BI_TCXO,
93*77814921SJagadeesh Kona 			},
94*77814921SJagadeesh Kona 			.num_parents = 1,
95*77814921SJagadeesh Kona 			.ops = &clk_alpha_pll_taycan_eha_t_ops,
96*77814921SJagadeesh Kona 		},
97*77814921SJagadeesh Kona 	},
98*77814921SJagadeesh Kona };
99*77814921SJagadeesh Kona 
100*77814921SJagadeesh Kona /* 480.0 MHz Configuration */
101*77814921SJagadeesh Kona static const struct alpha_pll_config video_cc_pll2_config = {
102*77814921SJagadeesh Kona 	.l = 0x19,
103*77814921SJagadeesh Kona 	.cal_l = 0x42,
104*77814921SJagadeesh Kona 	.alpha = 0x0,
105*77814921SJagadeesh Kona 	.config_ctl_val = 0xa5c400e7,
106*77814921SJagadeesh Kona 	.config_ctl_hi_val = 0x0a806160,
107*77814921SJagadeesh Kona 	.config_ctl_hi1_val = 0xf51dea20,
108*77814921SJagadeesh Kona 	.user_ctl_val = 0x00000000,
109*77814921SJagadeesh Kona 	.user_ctl_hi_val = 0x00000002,
110*77814921SJagadeesh Kona };
111*77814921SJagadeesh Kona 
112*77814921SJagadeesh Kona static struct clk_alpha_pll video_cc_pll2 = {
113*77814921SJagadeesh Kona 	.offset = 0x2000,
114*77814921SJagadeesh Kona 	.config = &video_cc_pll2_config,
115*77814921SJagadeesh Kona 	.vco_table = taycan_eha_t_vco,
116*77814921SJagadeesh Kona 	.num_vco = ARRAY_SIZE(taycan_eha_t_vco),
117*77814921SJagadeesh Kona 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
118*77814921SJagadeesh Kona 	.clkr = {
119*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
120*77814921SJagadeesh Kona 			.name = "video_cc_pll2",
121*77814921SJagadeesh Kona 			.parent_data = &(const struct clk_parent_data) {
122*77814921SJagadeesh Kona 				.index = DT_BI_TCXO,
123*77814921SJagadeesh Kona 			},
124*77814921SJagadeesh Kona 			.num_parents = 1,
125*77814921SJagadeesh Kona 			.ops = &clk_alpha_pll_taycan_eha_t_ops,
126*77814921SJagadeesh Kona 		},
127*77814921SJagadeesh Kona 	},
128*77814921SJagadeesh Kona };
129*77814921SJagadeesh Kona 
130*77814921SJagadeesh Kona static const struct parent_map video_cc_parent_map_0[] = {
131*77814921SJagadeesh Kona 	{ P_BI_TCXO, 0 },
132*77814921SJagadeesh Kona };
133*77814921SJagadeesh Kona 
134*77814921SJagadeesh Kona static const struct clk_parent_data video_cc_parent_data_0[] = {
135*77814921SJagadeesh Kona 	{ .index = DT_BI_TCXO },
136*77814921SJagadeesh Kona };
137*77814921SJagadeesh Kona 
138*77814921SJagadeesh Kona static const struct parent_map video_cc_parent_map_1[] = {
139*77814921SJagadeesh Kona 	{ P_BI_TCXO, 0 },
140*77814921SJagadeesh Kona 	{ P_VIDEO_CC_PLL1_OUT_MAIN, 1 },
141*77814921SJagadeesh Kona };
142*77814921SJagadeesh Kona 
143*77814921SJagadeesh Kona static const struct clk_parent_data video_cc_parent_data_1[] = {
144*77814921SJagadeesh Kona 	{ .index = DT_BI_TCXO },
145*77814921SJagadeesh Kona 	{ .hw = &video_cc_pll1.clkr.hw },
146*77814921SJagadeesh Kona };
147*77814921SJagadeesh Kona 
148*77814921SJagadeesh Kona static const struct parent_map video_cc_parent_map_2[] = {
149*77814921SJagadeesh Kona 	{ P_BI_TCXO, 0 },
150*77814921SJagadeesh Kona 	{ P_VIDEO_CC_PLL2_OUT_MAIN, 1 },
151*77814921SJagadeesh Kona };
152*77814921SJagadeesh Kona 
153*77814921SJagadeesh Kona static const struct clk_parent_data video_cc_parent_data_2[] = {
154*77814921SJagadeesh Kona 	{ .index = DT_BI_TCXO },
155*77814921SJagadeesh Kona 	{ .hw = &video_cc_pll2.clkr.hw },
156*77814921SJagadeesh Kona };
157*77814921SJagadeesh Kona 
158*77814921SJagadeesh Kona static const struct parent_map video_cc_parent_map_3[] = {
159*77814921SJagadeesh Kona 	{ P_BI_TCXO, 0 },
160*77814921SJagadeesh Kona 	{ P_VIDEO_CC_PLL0_OUT_MAIN, 1 },
161*77814921SJagadeesh Kona };
162*77814921SJagadeesh Kona 
163*77814921SJagadeesh Kona static const struct clk_parent_data video_cc_parent_data_3[] = {
164*77814921SJagadeesh Kona 	{ .index = DT_BI_TCXO },
165*77814921SJagadeesh Kona 	{ .hw = &video_cc_pll0.clkr.hw },
166*77814921SJagadeesh Kona };
167*77814921SJagadeesh Kona 
168*77814921SJagadeesh Kona static const struct freq_tbl ftbl_video_cc_ahb_clk_src[] = {
169*77814921SJagadeesh Kona 	F(19200000, P_BI_TCXO, 1, 0, 0),
170*77814921SJagadeesh Kona 	{ }
171*77814921SJagadeesh Kona };
172*77814921SJagadeesh Kona 
173*77814921SJagadeesh Kona static struct clk_rcg2 video_cc_ahb_clk_src = {
174*77814921SJagadeesh Kona 	.cmd_rcgr = 0x8060,
175*77814921SJagadeesh Kona 	.mnd_width = 0,
176*77814921SJagadeesh Kona 	.hid_width = 5,
177*77814921SJagadeesh Kona 	.parent_map = video_cc_parent_map_0,
178*77814921SJagadeesh Kona 	.freq_tbl = ftbl_video_cc_ahb_clk_src,
179*77814921SJagadeesh Kona 	.hw_clk_ctrl = true,
180*77814921SJagadeesh Kona 	.clkr.hw.init = &(const struct clk_init_data) {
181*77814921SJagadeesh Kona 		.name = "video_cc_ahb_clk_src",
182*77814921SJagadeesh Kona 		.parent_data = video_cc_parent_data_0,
183*77814921SJagadeesh Kona 		.num_parents = ARRAY_SIZE(video_cc_parent_data_0),
184*77814921SJagadeesh Kona 		.flags = CLK_SET_RATE_PARENT,
185*77814921SJagadeesh Kona 		.ops = &clk_rcg2_shared_ops,
186*77814921SJagadeesh Kona 	},
187*77814921SJagadeesh Kona };
188*77814921SJagadeesh Kona 
189*77814921SJagadeesh Kona static const struct freq_tbl ftbl_video_cc_mvs0_clk_src[] = {
190*77814921SJagadeesh Kona 	F(240000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
191*77814921SJagadeesh Kona 	F(338000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
192*77814921SJagadeesh Kona 	F(420000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
193*77814921SJagadeesh Kona 	F(444000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
194*77814921SJagadeesh Kona 	F(600000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
195*77814921SJagadeesh Kona 	F(630000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
196*77814921SJagadeesh Kona 	F(800000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
197*77814921SJagadeesh Kona 	F(1000000000, P_VIDEO_CC_PLL1_OUT_MAIN, 2, 0, 0),
198*77814921SJagadeesh Kona 	{ }
199*77814921SJagadeesh Kona };
200*77814921SJagadeesh Kona 
201*77814921SJagadeesh Kona static struct clk_rcg2 video_cc_mvs0_clk_src = {
202*77814921SJagadeesh Kona 	.cmd_rcgr = 0x8030,
203*77814921SJagadeesh Kona 	.mnd_width = 0,
204*77814921SJagadeesh Kona 	.hid_width = 5,
205*77814921SJagadeesh Kona 	.parent_map = video_cc_parent_map_1,
206*77814921SJagadeesh Kona 	.freq_tbl = ftbl_video_cc_mvs0_clk_src,
207*77814921SJagadeesh Kona 	.hw_clk_ctrl = true,
208*77814921SJagadeesh Kona 	.clkr.hw.init = &(const struct clk_init_data) {
209*77814921SJagadeesh Kona 		.name = "video_cc_mvs0_clk_src",
210*77814921SJagadeesh Kona 		.parent_data = video_cc_parent_data_1,
211*77814921SJagadeesh Kona 		.num_parents = ARRAY_SIZE(video_cc_parent_data_1),
212*77814921SJagadeesh Kona 		.flags = CLK_SET_RATE_PARENT,
213*77814921SJagadeesh Kona 		.ops = &clk_rcg2_shared_ops,
214*77814921SJagadeesh Kona 	},
215*77814921SJagadeesh Kona };
216*77814921SJagadeesh Kona 
217*77814921SJagadeesh Kona static const struct freq_tbl ftbl_video_cc_mvs0b_clk_src[] = {
218*77814921SJagadeesh Kona 	F(240000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
219*77814921SJagadeesh Kona 	F(338000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
220*77814921SJagadeesh Kona 	F(420000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
221*77814921SJagadeesh Kona 	F(444000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
222*77814921SJagadeesh Kona 	F(533000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
223*77814921SJagadeesh Kona 	F(630000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
224*77814921SJagadeesh Kona 	F(800000000, P_VIDEO_CC_PLL2_OUT_MAIN, 2, 0, 0),
225*77814921SJagadeesh Kona 	{ }
226*77814921SJagadeesh Kona };
227*77814921SJagadeesh Kona 
228*77814921SJagadeesh Kona static struct clk_rcg2 video_cc_mvs0b_clk_src = {
229*77814921SJagadeesh Kona 	.cmd_rcgr = 0x8018,
230*77814921SJagadeesh Kona 	.mnd_width = 0,
231*77814921SJagadeesh Kona 	.hid_width = 5,
232*77814921SJagadeesh Kona 	.parent_map = video_cc_parent_map_2,
233*77814921SJagadeesh Kona 	.freq_tbl = ftbl_video_cc_mvs0b_clk_src,
234*77814921SJagadeesh Kona 	.hw_clk_ctrl = true,
235*77814921SJagadeesh Kona 	.clkr.hw.init = &(const struct clk_init_data) {
236*77814921SJagadeesh Kona 		.name = "video_cc_mvs0b_clk_src",
237*77814921SJagadeesh Kona 		.parent_data = video_cc_parent_data_2,
238*77814921SJagadeesh Kona 		.num_parents = ARRAY_SIZE(video_cc_parent_data_2),
239*77814921SJagadeesh Kona 		.flags = CLK_SET_RATE_PARENT,
240*77814921SJagadeesh Kona 		.ops = &clk_rcg2_shared_ops,
241*77814921SJagadeesh Kona 	},
242*77814921SJagadeesh Kona };
243*77814921SJagadeesh Kona 
244*77814921SJagadeesh Kona static const struct freq_tbl ftbl_video_cc_mvs0c_clk_src[] = {
245*77814921SJagadeesh Kona 	F(360000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
246*77814921SJagadeesh Kona 	F(507000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
247*77814921SJagadeesh Kona 	F(630000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
248*77814921SJagadeesh Kona 	F(666000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
249*77814921SJagadeesh Kona 	F(800000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
250*77814921SJagadeesh Kona 	F(1104000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
251*77814921SJagadeesh Kona 	F(1260000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0),
252*77814921SJagadeesh Kona 	{ }
253*77814921SJagadeesh Kona };
254*77814921SJagadeesh Kona 
255*77814921SJagadeesh Kona static struct clk_rcg2 video_cc_mvs0c_clk_src = {
256*77814921SJagadeesh Kona 	.cmd_rcgr = 0x8048,
257*77814921SJagadeesh Kona 	.mnd_width = 0,
258*77814921SJagadeesh Kona 	.hid_width = 5,
259*77814921SJagadeesh Kona 	.parent_map = video_cc_parent_map_3,
260*77814921SJagadeesh Kona 	.freq_tbl = ftbl_video_cc_mvs0c_clk_src,
261*77814921SJagadeesh Kona 	.hw_clk_ctrl = true,
262*77814921SJagadeesh Kona 	.clkr.hw.init = &(const struct clk_init_data) {
263*77814921SJagadeesh Kona 		.name = "video_cc_mvs0c_clk_src",
264*77814921SJagadeesh Kona 		.parent_data = video_cc_parent_data_3,
265*77814921SJagadeesh Kona 		.num_parents = ARRAY_SIZE(video_cc_parent_data_3),
266*77814921SJagadeesh Kona 		.flags = CLK_SET_RATE_PARENT,
267*77814921SJagadeesh Kona 		.ops = &clk_rcg2_shared_ops,
268*77814921SJagadeesh Kona 	},
269*77814921SJagadeesh Kona };
270*77814921SJagadeesh Kona 
271*77814921SJagadeesh Kona static struct clk_rcg2 video_cc_xo_clk_src = {
272*77814921SJagadeesh Kona 	.cmd_rcgr = 0x8194,
273*77814921SJagadeesh Kona 	.mnd_width = 0,
274*77814921SJagadeesh Kona 	.hid_width = 5,
275*77814921SJagadeesh Kona 	.parent_map = video_cc_parent_map_0,
276*77814921SJagadeesh Kona 	.freq_tbl = ftbl_video_cc_ahb_clk_src,
277*77814921SJagadeesh Kona 	.clkr.hw.init = &(const struct clk_init_data) {
278*77814921SJagadeesh Kona 		.name = "video_cc_xo_clk_src",
279*77814921SJagadeesh Kona 		.parent_data = video_cc_parent_data_0,
280*77814921SJagadeesh Kona 		.num_parents = ARRAY_SIZE(video_cc_parent_data_0),
281*77814921SJagadeesh Kona 		.flags = CLK_SET_RATE_PARENT,
282*77814921SJagadeesh Kona 		.ops = &clk_rcg2_ops,
283*77814921SJagadeesh Kona 	},
284*77814921SJagadeesh Kona };
285*77814921SJagadeesh Kona 
286*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0_clk = {
287*77814921SJagadeesh Kona 	.halt_reg = 0x80d0,
288*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
289*77814921SJagadeesh Kona 	.hwcg_reg = 0x80d0,
290*77814921SJagadeesh Kona 	.hwcg_bit = 1,
291*77814921SJagadeesh Kona 	.clkr = {
292*77814921SJagadeesh Kona 		.enable_reg = 0x80d0,
293*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
294*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
295*77814921SJagadeesh Kona 			.name = "video_cc_mvs0_clk",
296*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
297*77814921SJagadeesh Kona 				&video_cc_mvs0_clk_src.clkr.hw,
298*77814921SJagadeesh Kona 			},
299*77814921SJagadeesh Kona 			.num_parents = 1,
300*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
301*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
302*77814921SJagadeesh Kona 		},
303*77814921SJagadeesh Kona 	},
304*77814921SJagadeesh Kona };
305*77814921SJagadeesh Kona 
306*77814921SJagadeesh Kona static struct clk_mem_branch video_cc_mvs0_freerun_clk = {
307*77814921SJagadeesh Kona 	.mem_enable_reg = 0x80e4,
308*77814921SJagadeesh Kona 	.mem_ack_reg = 0x80e4,
309*77814921SJagadeesh Kona 	.mem_enable_mask = BIT(3),
310*77814921SJagadeesh Kona 	.mem_enable_ack_mask = GENMASK(11, 10),
311*77814921SJagadeesh Kona 	.mem_enable_invert = true,
312*77814921SJagadeesh Kona 	.branch = {
313*77814921SJagadeesh Kona 		.halt_reg = 0x80e0,
314*77814921SJagadeesh Kona 		.halt_check = BRANCH_HALT,
315*77814921SJagadeesh Kona 		.clkr = {
316*77814921SJagadeesh Kona 			.enable_reg = 0x80e0,
317*77814921SJagadeesh Kona 			.enable_mask = BIT(0),
318*77814921SJagadeesh Kona 			.hw.init = &(const struct clk_init_data) {
319*77814921SJagadeesh Kona 				.name = "video_cc_mvs0_freerun_clk",
320*77814921SJagadeesh Kona 				.parent_hws = (const struct clk_hw*[]) {
321*77814921SJagadeesh Kona 					&video_cc_mvs0_clk_src.clkr.hw,
322*77814921SJagadeesh Kona 				},
323*77814921SJagadeesh Kona 				.num_parents = 1,
324*77814921SJagadeesh Kona 				.flags = CLK_SET_RATE_PARENT,
325*77814921SJagadeesh Kona 				.ops = &clk_branch2_mem_ops,
326*77814921SJagadeesh Kona 			},
327*77814921SJagadeesh Kona 		},
328*77814921SJagadeesh Kona 	},
329*77814921SJagadeesh Kona };
330*77814921SJagadeesh Kona 
331*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0_shift_clk = {
332*77814921SJagadeesh Kona 	.halt_reg = 0x81b4,
333*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
334*77814921SJagadeesh Kona 	.hwcg_reg = 0x81b4,
335*77814921SJagadeesh Kona 	.hwcg_bit = 1,
336*77814921SJagadeesh Kona 	.clkr = {
337*77814921SJagadeesh Kona 		.enable_reg = 0x81b4,
338*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
339*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
340*77814921SJagadeesh Kona 			.name = "video_cc_mvs0_shift_clk",
341*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
342*77814921SJagadeesh Kona 				&video_cc_xo_clk_src.clkr.hw,
343*77814921SJagadeesh Kona 			},
344*77814921SJagadeesh Kona 			.num_parents = 1,
345*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
346*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
347*77814921SJagadeesh Kona 		},
348*77814921SJagadeesh Kona 	},
349*77814921SJagadeesh Kona };
350*77814921SJagadeesh Kona 
351*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0_vpp0_clk = {
352*77814921SJagadeesh Kona 	.halt_reg = 0x8134,
353*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
354*77814921SJagadeesh Kona 	.hwcg_reg = 0x8134,
355*77814921SJagadeesh Kona 	.hwcg_bit = 1,
356*77814921SJagadeesh Kona 	.clkr = {
357*77814921SJagadeesh Kona 		.enable_reg = 0x8134,
358*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
359*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
360*77814921SJagadeesh Kona 			.name = "video_cc_mvs0_vpp0_clk",
361*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
362*77814921SJagadeesh Kona 				&video_cc_mvs0_clk_src.clkr.hw,
363*77814921SJagadeesh Kona 			},
364*77814921SJagadeesh Kona 			.num_parents = 1,
365*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
366*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
367*77814921SJagadeesh Kona 		},
368*77814921SJagadeesh Kona 	},
369*77814921SJagadeesh Kona };
370*77814921SJagadeesh Kona 
371*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0_vpp0_freerun_clk = {
372*77814921SJagadeesh Kona 	.halt_reg = 0x8144,
373*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT,
374*77814921SJagadeesh Kona 	.clkr = {
375*77814921SJagadeesh Kona 		.enable_reg = 0x8144,
376*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
377*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
378*77814921SJagadeesh Kona 			.name = "video_cc_mvs0_vpp0_freerun_clk",
379*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
380*77814921SJagadeesh Kona 				&video_cc_mvs0_clk_src.clkr.hw,
381*77814921SJagadeesh Kona 			},
382*77814921SJagadeesh Kona 			.num_parents = 1,
383*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
384*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
385*77814921SJagadeesh Kona 		},
386*77814921SJagadeesh Kona 	},
387*77814921SJagadeesh Kona };
388*77814921SJagadeesh Kona 
389*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0b_clk = {
390*77814921SJagadeesh Kona 	.halt_reg = 0x80bc,
391*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
392*77814921SJagadeesh Kona 	.hwcg_reg = 0x80bc,
393*77814921SJagadeesh Kona 	.hwcg_bit = 1,
394*77814921SJagadeesh Kona 	.clkr = {
395*77814921SJagadeesh Kona 		.enable_reg = 0x80bc,
396*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
397*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
398*77814921SJagadeesh Kona 			.name = "video_cc_mvs0b_clk",
399*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
400*77814921SJagadeesh Kona 				&video_cc_mvs0b_clk_src.clkr.hw,
401*77814921SJagadeesh Kona 			},
402*77814921SJagadeesh Kona 			.num_parents = 1,
403*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
404*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
405*77814921SJagadeesh Kona 		},
406*77814921SJagadeesh Kona 	},
407*77814921SJagadeesh Kona };
408*77814921SJagadeesh Kona 
409*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0b_freerun_clk = {
410*77814921SJagadeesh Kona 	.halt_reg = 0x80cc,
411*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT,
412*77814921SJagadeesh Kona 	.clkr = {
413*77814921SJagadeesh Kona 		.enable_reg = 0x80cc,
414*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
415*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
416*77814921SJagadeesh Kona 			.name = "video_cc_mvs0b_freerun_clk",
417*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
418*77814921SJagadeesh Kona 				&video_cc_mvs0b_clk_src.clkr.hw,
419*77814921SJagadeesh Kona 			},
420*77814921SJagadeesh Kona 			.num_parents = 1,
421*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
422*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
423*77814921SJagadeesh Kona 		},
424*77814921SJagadeesh Kona 	},
425*77814921SJagadeesh Kona };
426*77814921SJagadeesh Kona 
427*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0c_clk = {
428*77814921SJagadeesh Kona 	.halt_reg = 0x8164,
429*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
430*77814921SJagadeesh Kona 	.hwcg_reg = 0x8164,
431*77814921SJagadeesh Kona 	.hwcg_bit = 1,
432*77814921SJagadeesh Kona 	.clkr = {
433*77814921SJagadeesh Kona 		.enable_reg = 0x8164,
434*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
435*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
436*77814921SJagadeesh Kona 			.name = "video_cc_mvs0c_clk",
437*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
438*77814921SJagadeesh Kona 				&video_cc_mvs0c_clk_src.clkr.hw,
439*77814921SJagadeesh Kona 			},
440*77814921SJagadeesh Kona 			.num_parents = 1,
441*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
442*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
443*77814921SJagadeesh Kona 		},
444*77814921SJagadeesh Kona 	},
445*77814921SJagadeesh Kona };
446*77814921SJagadeesh Kona 
447*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0c_debug_clk = {
448*77814921SJagadeesh Kona 	.halt_reg = 0x81c0,
449*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT,
450*77814921SJagadeesh Kona 	.clkr = {
451*77814921SJagadeesh Kona 		.enable_reg = 0x81c0,
452*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
453*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
454*77814921SJagadeesh Kona 			.name = "video_cc_mvs0c_debug_clk",
455*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
456*77814921SJagadeesh Kona 				&video_cc_mvs0c_clk_src.clkr.hw,
457*77814921SJagadeesh Kona 			},
458*77814921SJagadeesh Kona 			.num_parents = 1,
459*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
460*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
461*77814921SJagadeesh Kona 		},
462*77814921SJagadeesh Kona 	},
463*77814921SJagadeesh Kona };
464*77814921SJagadeesh Kona 
465*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0c_freerun_clk = {
466*77814921SJagadeesh Kona 	.halt_reg = 0x8174,
467*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT,
468*77814921SJagadeesh Kona 	.clkr = {
469*77814921SJagadeesh Kona 		.enable_reg = 0x8174,
470*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
471*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
472*77814921SJagadeesh Kona 			.name = "video_cc_mvs0c_freerun_clk",
473*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
474*77814921SJagadeesh Kona 				&video_cc_mvs0c_clk_src.clkr.hw,
475*77814921SJagadeesh Kona 			},
476*77814921SJagadeesh Kona 			.num_parents = 1,
477*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
478*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
479*77814921SJagadeesh Kona 		},
480*77814921SJagadeesh Kona 	},
481*77814921SJagadeesh Kona };
482*77814921SJagadeesh Kona 
483*77814921SJagadeesh Kona static struct clk_branch video_cc_mvs0c_shift_clk = {
484*77814921SJagadeesh Kona 	.halt_reg = 0x81b8,
485*77814921SJagadeesh Kona 	.halt_check = BRANCH_HALT_VOTED,
486*77814921SJagadeesh Kona 	.hwcg_reg = 0x81b8,
487*77814921SJagadeesh Kona 	.hwcg_bit = 1,
488*77814921SJagadeesh Kona 	.clkr = {
489*77814921SJagadeesh Kona 		.enable_reg = 0x81b8,
490*77814921SJagadeesh Kona 		.enable_mask = BIT(0),
491*77814921SJagadeesh Kona 		.hw.init = &(const struct clk_init_data) {
492*77814921SJagadeesh Kona 			.name = "video_cc_mvs0c_shift_clk",
493*77814921SJagadeesh Kona 			.parent_hws = (const struct clk_hw*[]) {
494*77814921SJagadeesh Kona 				&video_cc_xo_clk_src.clkr.hw,
495*77814921SJagadeesh Kona 			},
496*77814921SJagadeesh Kona 			.num_parents = 1,
497*77814921SJagadeesh Kona 			.flags = CLK_SET_RATE_PARENT,
498*77814921SJagadeesh Kona 			.ops = &clk_branch2_ops,
499*77814921SJagadeesh Kona 		},
500*77814921SJagadeesh Kona 	},
501*77814921SJagadeesh Kona };
502*77814921SJagadeesh Kona 
503*77814921SJagadeesh Kona static struct gdsc video_cc_mvs0c_gdsc = {
504*77814921SJagadeesh Kona 	.gdscr = 0x814c,
505*77814921SJagadeesh Kona 	.en_rest_wait_val = 0x2,
506*77814921SJagadeesh Kona 	.en_few_wait_val = 0x2,
507*77814921SJagadeesh Kona 	.clk_dis_wait_val = 0x6,
508*77814921SJagadeesh Kona 	.pd = {
509*77814921SJagadeesh Kona 		.name = "video_cc_mvs0c_gdsc",
510*77814921SJagadeesh Kona 	},
511*77814921SJagadeesh Kona 	.pwrsts = PWRSTS_OFF_ON,
512*77814921SJagadeesh Kona 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
513*77814921SJagadeesh Kona };
514*77814921SJagadeesh Kona 
515*77814921SJagadeesh Kona static struct gdsc video_cc_mvs0_gdsc = {
516*77814921SJagadeesh Kona 	.gdscr = 0x80a8,
517*77814921SJagadeesh Kona 	.en_rest_wait_val = 0x2,
518*77814921SJagadeesh Kona 	.en_few_wait_val = 0x2,
519*77814921SJagadeesh Kona 	.clk_dis_wait_val = 0x6,
520*77814921SJagadeesh Kona 	.pd = {
521*77814921SJagadeesh Kona 		.name = "video_cc_mvs0_gdsc",
522*77814921SJagadeesh Kona 	},
523*77814921SJagadeesh Kona 	.parent = &video_cc_mvs0c_gdsc.pd,
524*77814921SJagadeesh Kona 	.pwrsts = PWRSTS_OFF_ON,
525*77814921SJagadeesh Kona 	.flags = HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
526*77814921SJagadeesh Kona };
527*77814921SJagadeesh Kona 
528*77814921SJagadeesh Kona static struct gdsc video_cc_mvs0_vpp0_gdsc = {
529*77814921SJagadeesh Kona 	.gdscr = 0x8120,
530*77814921SJagadeesh Kona 	.en_rest_wait_val = 0x2,
531*77814921SJagadeesh Kona 	.en_few_wait_val = 0x2,
532*77814921SJagadeesh Kona 	.clk_dis_wait_val = 0xf,
533*77814921SJagadeesh Kona 	.pd = {
534*77814921SJagadeesh Kona 		.name = "video_cc_mvs0_vpp0_gdsc",
535*77814921SJagadeesh Kona 	},
536*77814921SJagadeesh Kona 	.pwrsts = PWRSTS_OFF_ON,
537*77814921SJagadeesh Kona 	.flags = HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
538*77814921SJagadeesh Kona };
539*77814921SJagadeesh Kona 
540*77814921SJagadeesh Kona static struct clk_regmap *video_cc_maili_clocks[] = {
541*77814921SJagadeesh Kona 	[VIDEO_CC_AHB_CLK_SRC] = &video_cc_ahb_clk_src.clkr,
542*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_CLK] = &video_cc_mvs0_clk.clkr,
543*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_CLK_SRC] = &video_cc_mvs0_clk_src.clkr,
544*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_FREERUN_CLK] = &video_cc_mvs0_freerun_clk.branch.clkr,
545*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_SHIFT_CLK] = &video_cc_mvs0_shift_clk.clkr,
546*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_VPP0_CLK] = &video_cc_mvs0_vpp0_clk.clkr,
547*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_VPP0_FREERUN_CLK] = &video_cc_mvs0_vpp0_freerun_clk.clkr,
548*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0B_CLK] = &video_cc_mvs0b_clk.clkr,
549*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0B_CLK_SRC] = &video_cc_mvs0b_clk_src.clkr,
550*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0B_FREERUN_CLK] = &video_cc_mvs0b_freerun_clk.clkr,
551*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_CLK] = &video_cc_mvs0c_clk.clkr,
552*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_CLK_SRC] = &video_cc_mvs0c_clk_src.clkr,
553*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_DEBUG_CLK] = &video_cc_mvs0c_debug_clk.clkr,
554*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_FREERUN_CLK] = &video_cc_mvs0c_freerun_clk.clkr,
555*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_SHIFT_CLK] = &video_cc_mvs0c_shift_clk.clkr,
556*77814921SJagadeesh Kona 	[VIDEO_CC_PLL0] = &video_cc_pll0.clkr,
557*77814921SJagadeesh Kona 	[VIDEO_CC_PLL1] = &video_cc_pll1.clkr,
558*77814921SJagadeesh Kona 	[VIDEO_CC_PLL2] = &video_cc_pll2.clkr,
559*77814921SJagadeesh Kona 	[VIDEO_CC_XO_CLK_SRC] = &video_cc_xo_clk_src.clkr,
560*77814921SJagadeesh Kona };
561*77814921SJagadeesh Kona 
562*77814921SJagadeesh Kona static struct gdsc *video_cc_maili_gdscs[] = {
563*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_GDSC] = &video_cc_mvs0_gdsc,
564*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_VPP0_GDSC] = &video_cc_mvs0_vpp0_gdsc,
565*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_GDSC] = &video_cc_mvs0c_gdsc,
566*77814921SJagadeesh Kona };
567*77814921SJagadeesh Kona 
568*77814921SJagadeesh Kona static const struct qcom_reset_map video_cc_maili_resets[] = {
569*77814921SJagadeesh Kona 	[VIDEO_CC_INTERFACE_BCR] = { 0x8178 },
570*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_BCR] = { 0x80a4 },
571*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_CLK_ARES] = { 0x80d0, 2 },
572*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_FREERUN_CLK_ARES] = { 0x80e0, 2 },
573*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0_VPP0_BCR] = { 0x811c },
574*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_BCR] = { 0x8148 },
575*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_CLK_ARES] = { 0x8164, 2 },
576*77814921SJagadeesh Kona 	[VIDEO_CC_MVS0C_FREERUN_CLK_ARES] = { 0x8174, 2 },
577*77814921SJagadeesh Kona 	[VIDEO_CC_XO_CLK_ARES] = { 0x81ac, 2 },
578*77814921SJagadeesh Kona };
579*77814921SJagadeesh Kona 
580*77814921SJagadeesh Kona static struct clk_alpha_pll *video_cc_maili_plls[] = {
581*77814921SJagadeesh Kona 	&video_cc_pll0,
582*77814921SJagadeesh Kona 	&video_cc_pll1,
583*77814921SJagadeesh Kona 	&video_cc_pll2,
584*77814921SJagadeesh Kona };
585*77814921SJagadeesh Kona 
586*77814921SJagadeesh Kona static const u32 video_cc_maili_critical_cbcrs[] = {
587*77814921SJagadeesh Kona 	0x817c, /* VIDEO_CC_AHB_CLK */
588*77814921SJagadeesh Kona 	0x81bc, /* VIDEO_CC_SLEEP_CLK */
589*77814921SJagadeesh Kona 	0x81b0, /* VIDEO_CC_TS_XO_CLK */
590*77814921SJagadeesh Kona 	0x81ac, /* VIDEO_CC_XO_CLK */
591*77814921SJagadeesh Kona };
592*77814921SJagadeesh Kona 
593*77814921SJagadeesh Kona static const struct regmap_config video_cc_maili_regmap_config = {
594*77814921SJagadeesh Kona 	.reg_bits = 32,
595*77814921SJagadeesh Kona 	.reg_stride = 4,
596*77814921SJagadeesh Kona 	.val_bits = 32,
597*77814921SJagadeesh Kona 	.max_register = 0xa010,
598*77814921SJagadeesh Kona 	.fast_io = true,
599*77814921SJagadeesh Kona };
600*77814921SJagadeesh Kona 
clk_maili_regs_configure(struct device * dev,struct regmap * regmap)601*77814921SJagadeesh Kona static void clk_maili_regs_configure(struct device *dev, struct regmap *regmap)
602*77814921SJagadeesh Kona {
603*77814921SJagadeesh Kona 	/*
604*77814921SJagadeesh Kona 	 * Enable clk_on sync for MVS0 and VPP clocks as per the
605*77814921SJagadeesh Kona 	 * hardware recommendation.
606*77814921SJagadeesh Kona 	 */
607*77814921SJagadeesh Kona 	regmap_set_bits(regmap, 0x9f24, BIT(0));
608*77814921SJagadeesh Kona 
609*77814921SJagadeesh Kona 	/*
610*77814921SJagadeesh Kona 	 * Update ACCU configuration for MVS0 CFG3, MVS0 VPP0 CFG3,
611*77814921SJagadeesh Kona 	 * MVS0C CFG3 GDSCRs as per the hardware recommendation.
612*77814921SJagadeesh Kona 	 */
613*77814921SJagadeesh Kona 	regmap_set_bits(regmap, 0x80b4, ACCU_CFG_MASK);
614*77814921SJagadeesh Kona 	regmap_set_bits(regmap, 0x812c, ACCU_CFG_MASK);
615*77814921SJagadeesh Kona 	regmap_set_bits(regmap, 0x8158, ACCU_CFG_MASK);
616*77814921SJagadeesh Kona }
617*77814921SJagadeesh Kona 
618*77814921SJagadeesh Kona static const struct qcom_cc_driver_data video_cc_maili_driver_data = {
619*77814921SJagadeesh Kona 	.alpha_plls = video_cc_maili_plls,
620*77814921SJagadeesh Kona 	.num_alpha_plls = ARRAY_SIZE(video_cc_maili_plls),
621*77814921SJagadeesh Kona 	.clk_cbcrs = video_cc_maili_critical_cbcrs,
622*77814921SJagadeesh Kona 	.num_clk_cbcrs = ARRAY_SIZE(video_cc_maili_critical_cbcrs),
623*77814921SJagadeesh Kona 	.clk_regs_configure = clk_maili_regs_configure,
624*77814921SJagadeesh Kona };
625*77814921SJagadeesh Kona 
626*77814921SJagadeesh Kona static const struct qcom_cc_desc video_cc_maili_desc = {
627*77814921SJagadeesh Kona 	.config = &video_cc_maili_regmap_config,
628*77814921SJagadeesh Kona 	.clks = video_cc_maili_clocks,
629*77814921SJagadeesh Kona 	.num_clks = ARRAY_SIZE(video_cc_maili_clocks),
630*77814921SJagadeesh Kona 	.resets = video_cc_maili_resets,
631*77814921SJagadeesh Kona 	.num_resets = ARRAY_SIZE(video_cc_maili_resets),
632*77814921SJagadeesh Kona 	.gdscs = video_cc_maili_gdscs,
633*77814921SJagadeesh Kona 	.num_gdscs = ARRAY_SIZE(video_cc_maili_gdscs),
634*77814921SJagadeesh Kona 	.use_rpm = true,
635*77814921SJagadeesh Kona 	.driver_data = &video_cc_maili_driver_data,
636*77814921SJagadeesh Kona };
637*77814921SJagadeesh Kona 
638*77814921SJagadeesh Kona static const struct of_device_id video_cc_maili_match_table[] = {
639*77814921SJagadeesh Kona 	{ .compatible = "qcom,maili-videocc" },
640*77814921SJagadeesh Kona 	{ }
641*77814921SJagadeesh Kona };
642*77814921SJagadeesh Kona MODULE_DEVICE_TABLE(of, video_cc_maili_match_table);
643*77814921SJagadeesh Kona 
video_cc_maili_probe(struct platform_device * pdev)644*77814921SJagadeesh Kona static int video_cc_maili_probe(struct platform_device *pdev)
645*77814921SJagadeesh Kona {
646*77814921SJagadeesh Kona 	return qcom_cc_probe(pdev, &video_cc_maili_desc);
647*77814921SJagadeesh Kona }
648*77814921SJagadeesh Kona 
649*77814921SJagadeesh Kona static struct platform_driver video_cc_maili_driver = {
650*77814921SJagadeesh Kona 	.probe = video_cc_maili_probe,
651*77814921SJagadeesh Kona 	.driver = {
652*77814921SJagadeesh Kona 		.name = "videocc-maili",
653*77814921SJagadeesh Kona 		.of_match_table = video_cc_maili_match_table,
654*77814921SJagadeesh Kona 	},
655*77814921SJagadeesh Kona };
656*77814921SJagadeesh Kona 
657*77814921SJagadeesh Kona module_platform_driver(video_cc_maili_driver);
658*77814921SJagadeesh Kona 
659*77814921SJagadeesh Kona MODULE_DESCRIPTION("QTI VIDEOCC Maili Driver");
660*77814921SJagadeesh Kona MODULE_LICENSE("GPL");
661