]>
Commit | Line | Data |
---|---|---|
caab277b | 1 | // SPDX-License-Identifier: GPL-2.0-only |
f76ee892 TV |
2 | /* |
3 | * linux/drivers/video/omap2/dss/dss_features.c | |
4 | * | |
5 | * Copyright (C) 2010 Texas Instruments | |
6 | * Author: Archit Taneja <archit@ti.com> | |
f76ee892 TV |
7 | */ |
8 | ||
9 | #include <linux/kernel.h> | |
10 | #include <linux/module.h> | |
11 | #include <linux/types.h> | |
12 | #include <linux/err.h> | |
13 | #include <linux/slab.h> | |
14 | ||
62d9e44e | 15 | #include <video/omapfb_dss.h> |
f76ee892 TV |
16 | |
17 | #include "dss.h" | |
18 | #include "dss_features.h" | |
19 | ||
20 | /* Defines a generic omap register field */ | |
21 | struct dss_reg_field { | |
22 | u8 start, end; | |
23 | }; | |
24 | ||
25 | struct dss_param_range { | |
26 | int min, max; | |
27 | }; | |
28 | ||
29 | struct omap_dss_features { | |
30 | const struct dss_reg_field *reg_fields; | |
31 | const int num_reg_fields; | |
32 | ||
33 | const enum dss_feat_id *features; | |
34 | const int num_features; | |
35 | ||
36 | const int num_mgrs; | |
37 | const int num_ovls; | |
38 | const enum omap_display_type *supported_displays; | |
39 | const enum omap_dss_output_id *supported_outputs; | |
40 | const enum omap_color_mode *supported_color_modes; | |
41 | const enum omap_overlay_caps *overlay_caps; | |
42 | const char * const *clksrc_names; | |
43 | const struct dss_param_range *dss_params; | |
44 | ||
45 | const enum omap_dss_rotation_type supported_rotation_types; | |
46 | ||
47 | const u32 buffer_size_unit; | |
48 | const u32 burst_size_unit; | |
49 | }; | |
50 | ||
51 | /* This struct is assigned to one of the below during initialization */ | |
52 | static const struct omap_dss_features *omap_current_dss_features; | |
53 | ||
54 | static const struct dss_reg_field omap2_dss_reg_fields[] = { | |
55 | [FEAT_REG_FIRHINC] = { 11, 0 }, | |
56 | [FEAT_REG_FIRVINC] = { 27, 16 }, | |
57 | [FEAT_REG_FIFOLOWTHRESHOLD] = { 8, 0 }, | |
58 | [FEAT_REG_FIFOHIGHTHRESHOLD] = { 24, 16 }, | |
59 | [FEAT_REG_FIFOSIZE] = { 8, 0 }, | |
60 | [FEAT_REG_HORIZONTALACCU] = { 9, 0 }, | |
61 | [FEAT_REG_VERTICALACCU] = { 25, 16 }, | |
62 | [FEAT_REG_DISPC_CLK_SWITCH] = { 0, 0 }, | |
63 | }; | |
64 | ||
65 | static const struct dss_reg_field omap3_dss_reg_fields[] = { | |
66 | [FEAT_REG_FIRHINC] = { 12, 0 }, | |
67 | [FEAT_REG_FIRVINC] = { 28, 16 }, | |
68 | [FEAT_REG_FIFOLOWTHRESHOLD] = { 11, 0 }, | |
69 | [FEAT_REG_FIFOHIGHTHRESHOLD] = { 27, 16 }, | |
70 | [FEAT_REG_FIFOSIZE] = { 10, 0 }, | |
71 | [FEAT_REG_HORIZONTALACCU] = { 9, 0 }, | |
72 | [FEAT_REG_VERTICALACCU] = { 25, 16 }, | |
73 | [FEAT_REG_DISPC_CLK_SWITCH] = { 0, 0 }, | |
74 | }; | |
75 | ||
76 | static const struct dss_reg_field am43xx_dss_reg_fields[] = { | |
77 | [FEAT_REG_FIRHINC] = { 12, 0 }, | |
78 | [FEAT_REG_FIRVINC] = { 28, 16 }, | |
79 | [FEAT_REG_FIFOLOWTHRESHOLD] = { 11, 0 }, | |
80 | [FEAT_REG_FIFOHIGHTHRESHOLD] = { 27, 16 }, | |
81 | [FEAT_REG_FIFOSIZE] = { 10, 0 }, | |
82 | [FEAT_REG_HORIZONTALACCU] = { 9, 0 }, | |
83 | [FEAT_REG_VERTICALACCU] = { 25, 16 }, | |
84 | [FEAT_REG_DISPC_CLK_SWITCH] = { 0, 0 }, | |
85 | }; | |
86 | ||
87 | static const struct dss_reg_field omap4_dss_reg_fields[] = { | |
88 | [FEAT_REG_FIRHINC] = { 12, 0 }, | |
89 | [FEAT_REG_FIRVINC] = { 28, 16 }, | |
90 | [FEAT_REG_FIFOLOWTHRESHOLD] = { 15, 0 }, | |
91 | [FEAT_REG_FIFOHIGHTHRESHOLD] = { 31, 16 }, | |
92 | [FEAT_REG_FIFOSIZE] = { 15, 0 }, | |
93 | [FEAT_REG_HORIZONTALACCU] = { 10, 0 }, | |
94 | [FEAT_REG_VERTICALACCU] = { 26, 16 }, | |
95 | [FEAT_REG_DISPC_CLK_SWITCH] = { 9, 8 }, | |
96 | }; | |
97 | ||
98 | static const struct dss_reg_field omap5_dss_reg_fields[] = { | |
99 | [FEAT_REG_FIRHINC] = { 12, 0 }, | |
100 | [FEAT_REG_FIRVINC] = { 28, 16 }, | |
101 | [FEAT_REG_FIFOLOWTHRESHOLD] = { 15, 0 }, | |
102 | [FEAT_REG_FIFOHIGHTHRESHOLD] = { 31, 16 }, | |
103 | [FEAT_REG_FIFOSIZE] = { 15, 0 }, | |
104 | [FEAT_REG_HORIZONTALACCU] = { 10, 0 }, | |
105 | [FEAT_REG_VERTICALACCU] = { 26, 16 }, | |
106 | [FEAT_REG_DISPC_CLK_SWITCH] = { 9, 7 }, | |
107 | }; | |
108 | ||
109 | static const enum omap_display_type omap2_dss_supported_displays[] = { | |
110 | /* OMAP_DSS_CHANNEL_LCD */ | |
111 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI, | |
112 | ||
113 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
114 | OMAP_DISPLAY_TYPE_VENC, | |
115 | }; | |
116 | ||
117 | static const enum omap_display_type omap3430_dss_supported_displays[] = { | |
118 | /* OMAP_DSS_CHANNEL_LCD */ | |
119 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI | | |
120 | OMAP_DISPLAY_TYPE_SDI | OMAP_DISPLAY_TYPE_DSI, | |
121 | ||
122 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
123 | OMAP_DISPLAY_TYPE_VENC, | |
124 | }; | |
125 | ||
126 | static const enum omap_display_type omap3630_dss_supported_displays[] = { | |
127 | /* OMAP_DSS_CHANNEL_LCD */ | |
128 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI | | |
129 | OMAP_DISPLAY_TYPE_DSI, | |
130 | ||
131 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
132 | OMAP_DISPLAY_TYPE_VENC, | |
133 | }; | |
134 | ||
135 | static const enum omap_display_type am43xx_dss_supported_displays[] = { | |
136 | /* OMAP_DSS_CHANNEL_LCD */ | |
137 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI, | |
138 | }; | |
139 | ||
140 | static const enum omap_display_type omap4_dss_supported_displays[] = { | |
141 | /* OMAP_DSS_CHANNEL_LCD */ | |
142 | OMAP_DISPLAY_TYPE_DBI | OMAP_DISPLAY_TYPE_DSI, | |
143 | ||
144 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
145 | OMAP_DISPLAY_TYPE_VENC | OMAP_DISPLAY_TYPE_HDMI, | |
146 | ||
147 | /* OMAP_DSS_CHANNEL_LCD2 */ | |
148 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI | | |
149 | OMAP_DISPLAY_TYPE_DSI, | |
150 | }; | |
151 | ||
152 | static const enum omap_display_type omap5_dss_supported_displays[] = { | |
153 | /* OMAP_DSS_CHANNEL_LCD */ | |
154 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI | | |
155 | OMAP_DISPLAY_TYPE_DSI, | |
156 | ||
157 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
158 | OMAP_DISPLAY_TYPE_HDMI | OMAP_DISPLAY_TYPE_DPI, | |
159 | ||
160 | /* OMAP_DSS_CHANNEL_LCD2 */ | |
161 | OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI | | |
162 | OMAP_DISPLAY_TYPE_DSI, | |
163 | }; | |
164 | ||
165 | static const enum omap_dss_output_id omap2_dss_supported_outputs[] = { | |
166 | /* OMAP_DSS_CHANNEL_LCD */ | |
167 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI, | |
168 | ||
169 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
170 | OMAP_DSS_OUTPUT_VENC, | |
171 | }; | |
172 | ||
173 | static const enum omap_dss_output_id omap3430_dss_supported_outputs[] = { | |
174 | /* OMAP_DSS_CHANNEL_LCD */ | |
175 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
176 | OMAP_DSS_OUTPUT_SDI | OMAP_DSS_OUTPUT_DSI1, | |
177 | ||
178 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
179 | OMAP_DSS_OUTPUT_VENC, | |
180 | }; | |
181 | ||
182 | static const enum omap_dss_output_id omap3630_dss_supported_outputs[] = { | |
183 | /* OMAP_DSS_CHANNEL_LCD */ | |
184 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
185 | OMAP_DSS_OUTPUT_DSI1, | |
186 | ||
187 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
188 | OMAP_DSS_OUTPUT_VENC, | |
189 | }; | |
190 | ||
191 | static const enum omap_dss_output_id am43xx_dss_supported_outputs[] = { | |
192 | /* OMAP_DSS_CHANNEL_LCD */ | |
193 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI, | |
194 | }; | |
195 | ||
196 | static const enum omap_dss_output_id omap4_dss_supported_outputs[] = { | |
197 | /* OMAP_DSS_CHANNEL_LCD */ | |
198 | OMAP_DSS_OUTPUT_DBI | OMAP_DSS_OUTPUT_DSI1, | |
199 | ||
200 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
201 | OMAP_DSS_OUTPUT_VENC | OMAP_DSS_OUTPUT_HDMI, | |
202 | ||
203 | /* OMAP_DSS_CHANNEL_LCD2 */ | |
204 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
205 | OMAP_DSS_OUTPUT_DSI2, | |
206 | }; | |
207 | ||
208 | static const enum omap_dss_output_id omap5_dss_supported_outputs[] = { | |
209 | /* OMAP_DSS_CHANNEL_LCD */ | |
210 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
211 | OMAP_DSS_OUTPUT_DSI1 | OMAP_DSS_OUTPUT_DSI2, | |
212 | ||
213 | /* OMAP_DSS_CHANNEL_DIGIT */ | |
214 | OMAP_DSS_OUTPUT_HDMI, | |
215 | ||
216 | /* OMAP_DSS_CHANNEL_LCD2 */ | |
217 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
218 | OMAP_DSS_OUTPUT_DSI1, | |
219 | ||
220 | /* OMAP_DSS_CHANNEL_LCD3 */ | |
221 | OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI | | |
222 | OMAP_DSS_OUTPUT_DSI2, | |
223 | }; | |
224 | ||
225 | static const enum omap_color_mode omap2_dss_supported_color_modes[] = { | |
226 | /* OMAP_DSS_GFX */ | |
227 | OMAP_DSS_COLOR_CLUT1 | OMAP_DSS_COLOR_CLUT2 | | |
228 | OMAP_DSS_COLOR_CLUT4 | OMAP_DSS_COLOR_CLUT8 | | |
229 | OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_RGB16 | | |
230 | OMAP_DSS_COLOR_RGB24U | OMAP_DSS_COLOR_RGB24P, | |
231 | ||
232 | /* OMAP_DSS_VIDEO1 */ | |
233 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | | |
234 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | | |
235 | OMAP_DSS_COLOR_UYVY, | |
236 | ||
237 | /* OMAP_DSS_VIDEO2 */ | |
238 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | | |
239 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | | |
240 | OMAP_DSS_COLOR_UYVY, | |
241 | }; | |
242 | ||
243 | static const enum omap_color_mode omap3_dss_supported_color_modes[] = { | |
244 | /* OMAP_DSS_GFX */ | |
245 | OMAP_DSS_COLOR_CLUT1 | OMAP_DSS_COLOR_CLUT2 | | |
246 | OMAP_DSS_COLOR_CLUT4 | OMAP_DSS_COLOR_CLUT8 | | |
247 | OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | | |
248 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | | |
249 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_ARGB32 | | |
250 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, | |
251 | ||
252 | /* OMAP_DSS_VIDEO1 */ | |
253 | OMAP_DSS_COLOR_RGB24U | OMAP_DSS_COLOR_RGB24P | | |
254 | OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_RGB16 | | |
255 | OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_UYVY, | |
256 | ||
257 | /* OMAP_DSS_VIDEO2 */ | |
258 | OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | | |
259 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | | |
260 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | | |
261 | OMAP_DSS_COLOR_UYVY | OMAP_DSS_COLOR_ARGB32 | | |
262 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, | |
263 | }; | |
264 | ||
265 | static const enum omap_color_mode omap4_dss_supported_color_modes[] = { | |
266 | /* OMAP_DSS_GFX */ | |
267 | OMAP_DSS_COLOR_CLUT1 | OMAP_DSS_COLOR_CLUT2 | | |
268 | OMAP_DSS_COLOR_CLUT4 | OMAP_DSS_COLOR_CLUT8 | | |
269 | OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | | |
270 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | | |
271 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_ARGB32 | | |
272 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32 | | |
273 | OMAP_DSS_COLOR_ARGB16_1555 | OMAP_DSS_COLOR_RGBX16 | | |
274 | OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_XRGB16_1555, | |
275 | ||
276 | /* OMAP_DSS_VIDEO1 */ | |
277 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | | |
278 | OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | | |
279 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | | |
280 | OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | | |
281 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | | |
282 | OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | | |
283 | OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | | |
284 | OMAP_DSS_COLOR_RGBX32, | |
285 | ||
286 | /* OMAP_DSS_VIDEO2 */ | |
287 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | | |
288 | OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | | |
289 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | | |
290 | OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | | |
291 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | | |
292 | OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | | |
293 | OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | | |
294 | OMAP_DSS_COLOR_RGBX32, | |
295 | ||
296 | /* OMAP_DSS_VIDEO3 */ | |
297 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | | |
298 | OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | | |
299 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | | |
300 | OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | | |
301 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | | |
302 | OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | | |
303 | OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | | |
304 | OMAP_DSS_COLOR_RGBX32, | |
305 | ||
306 | /* OMAP_DSS_WB */ | |
307 | OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | | |
308 | OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | | |
309 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | | |
310 | OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | | |
311 | OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | | |
312 | OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | | |
313 | OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | | |
314 | OMAP_DSS_COLOR_RGBX32, | |
315 | }; | |
316 | ||
317 | static const enum omap_overlay_caps omap2_dss_overlay_caps[] = { | |
318 | /* OMAP_DSS_GFX */ | |
319 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
320 | ||
321 | /* OMAP_DSS_VIDEO1 */ | |
322 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS | | |
323 | OMAP_DSS_OVL_CAP_REPLICATION, | |
324 | ||
325 | /* OMAP_DSS_VIDEO2 */ | |
326 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS | | |
327 | OMAP_DSS_OVL_CAP_REPLICATION, | |
328 | }; | |
329 | ||
330 | static const enum omap_overlay_caps omap3430_dss_overlay_caps[] = { | |
331 | /* OMAP_DSS_GFX */ | |
332 | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_POS | | |
333 | OMAP_DSS_OVL_CAP_REPLICATION, | |
334 | ||
335 | /* OMAP_DSS_VIDEO1 */ | |
336 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS | | |
337 | OMAP_DSS_OVL_CAP_REPLICATION, | |
338 | ||
339 | /* OMAP_DSS_VIDEO2 */ | |
340 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | | |
341 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
342 | }; | |
343 | ||
344 | static const enum omap_overlay_caps omap3630_dss_overlay_caps[] = { | |
345 | /* OMAP_DSS_GFX */ | |
346 | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | | |
347 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
348 | ||
349 | /* OMAP_DSS_VIDEO1 */ | |
350 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS | | |
351 | OMAP_DSS_OVL_CAP_REPLICATION, | |
352 | ||
353 | /* OMAP_DSS_VIDEO2 */ | |
354 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | | |
355 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_POS | | |
356 | OMAP_DSS_OVL_CAP_REPLICATION, | |
357 | }; | |
358 | ||
359 | static const enum omap_overlay_caps omap4_dss_overlay_caps[] = { | |
360 | /* OMAP_DSS_GFX */ | |
361 | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | | |
362 | OMAP_DSS_OVL_CAP_ZORDER | OMAP_DSS_OVL_CAP_POS | | |
363 | OMAP_DSS_OVL_CAP_REPLICATION, | |
364 | ||
365 | /* OMAP_DSS_VIDEO1 */ | |
366 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | | |
367 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER | | |
368 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
369 | ||
370 | /* OMAP_DSS_VIDEO2 */ | |
371 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | | |
372 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER | | |
373 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
374 | ||
375 | /* OMAP_DSS_VIDEO3 */ | |
376 | OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | | |
377 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER | | |
378 | OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION, | |
379 | }; | |
380 | ||
381 | static const char * const omap2_dss_clk_source_names[] = { | |
382 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC] = "N/A", | |
383 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI] = "N/A", | |
384 | [OMAP_DSS_CLK_SRC_FCK] = "DSS_FCLK1", | |
385 | }; | |
386 | ||
387 | static const char * const omap3_dss_clk_source_names[] = { | |
388 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC] = "DSI1_PLL_FCLK", | |
389 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI] = "DSI2_PLL_FCLK", | |
390 | [OMAP_DSS_CLK_SRC_FCK] = "DSS1_ALWON_FCLK", | |
391 | }; | |
392 | ||
393 | static const char * const omap4_dss_clk_source_names[] = { | |
394 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC] = "PLL1_CLK1", | |
395 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI] = "PLL1_CLK2", | |
396 | [OMAP_DSS_CLK_SRC_FCK] = "DSS_FCLK", | |
397 | [OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC] = "PLL2_CLK1", | |
398 | [OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI] = "PLL2_CLK2", | |
399 | }; | |
400 | ||
401 | static const char * const omap5_dss_clk_source_names[] = { | |
402 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC] = "DPLL_DSI1_A_CLK1", | |
403 | [OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI] = "DPLL_DSI1_A_CLK2", | |
404 | [OMAP_DSS_CLK_SRC_FCK] = "DSS_CLK", | |
405 | [OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC] = "DPLL_DSI1_C_CLK1", | |
406 | [OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI] = "DPLL_DSI1_C_CLK2", | |
407 | }; | |
408 | ||
409 | static const struct dss_param_range omap2_dss_param_range[] = { | |
410 | [FEAT_PARAM_DSS_FCK] = { 0, 133000000 }, | |
411 | [FEAT_PARAM_DSS_PCD] = { 2, 255 }, | |
412 | [FEAT_PARAM_DOWNSCALE] = { 1, 2 }, | |
413 | /* | |
414 | * Assuming the line width buffer to be 768 pixels as OMAP2 DISPC | |
415 | * scaler cannot scale a image with width more than 768. | |
416 | */ | |
417 | [FEAT_PARAM_LINEWIDTH] = { 1, 768 }, | |
418 | }; | |
419 | ||
420 | static const struct dss_param_range omap3_dss_param_range[] = { | |
421 | [FEAT_PARAM_DSS_FCK] = { 0, 173000000 }, | |
422 | [FEAT_PARAM_DSS_PCD] = { 1, 255 }, | |
423 | [FEAT_PARAM_DSIPLL_LPDIV] = { 1, (1 << 13) - 1}, | |
424 | [FEAT_PARAM_DSI_FCK] = { 0, 173000000 }, | |
425 | [FEAT_PARAM_DOWNSCALE] = { 1, 4 }, | |
426 | [FEAT_PARAM_LINEWIDTH] = { 1, 1024 }, | |
427 | }; | |
428 | ||
429 | static const struct dss_param_range am43xx_dss_param_range[] = { | |
430 | [FEAT_PARAM_DSS_FCK] = { 0, 200000000 }, | |
431 | [FEAT_PARAM_DSS_PCD] = { 1, 255 }, | |
432 | [FEAT_PARAM_DOWNSCALE] = { 1, 4 }, | |
433 | [FEAT_PARAM_LINEWIDTH] = { 1, 1024 }, | |
434 | }; | |
435 | ||
436 | static const struct dss_param_range omap4_dss_param_range[] = { | |
437 | [FEAT_PARAM_DSS_FCK] = { 0, 186000000 }, | |
438 | [FEAT_PARAM_DSS_PCD] = { 1, 255 }, | |
439 | [FEAT_PARAM_DSIPLL_LPDIV] = { 0, (1 << 13) - 1 }, | |
440 | [FEAT_PARAM_DSI_FCK] = { 0, 170000000 }, | |
441 | [FEAT_PARAM_DOWNSCALE] = { 1, 4 }, | |
442 | [FEAT_PARAM_LINEWIDTH] = { 1, 2048 }, | |
443 | }; | |
444 | ||
445 | static const struct dss_param_range omap5_dss_param_range[] = { | |
446 | [FEAT_PARAM_DSS_FCK] = { 0, 209250000 }, | |
447 | [FEAT_PARAM_DSS_PCD] = { 1, 255 }, | |
448 | [FEAT_PARAM_DSIPLL_LPDIV] = { 0, (1 << 13) - 1 }, | |
449 | [FEAT_PARAM_DSI_FCK] = { 0, 209250000 }, | |
450 | [FEAT_PARAM_DOWNSCALE] = { 1, 4 }, | |
451 | [FEAT_PARAM_LINEWIDTH] = { 1, 2048 }, | |
452 | }; | |
453 | ||
454 | static const enum dss_feat_id omap2_dss_feat_list[] = { | |
455 | FEAT_LCDENABLEPOL, | |
456 | FEAT_LCDENABLESIGNAL, | |
457 | FEAT_PCKFREEENABLE, | |
458 | FEAT_FUNCGATED, | |
459 | FEAT_ROWREPEATENABLE, | |
460 | FEAT_RESIZECONF, | |
461 | }; | |
462 | ||
463 | static const enum dss_feat_id omap3430_dss_feat_list[] = { | |
464 | FEAT_LCDENABLEPOL, | |
465 | FEAT_LCDENABLESIGNAL, | |
466 | FEAT_PCKFREEENABLE, | |
467 | FEAT_FUNCGATED, | |
468 | FEAT_LINEBUFFERSPLIT, | |
469 | FEAT_ROWREPEATENABLE, | |
470 | FEAT_RESIZECONF, | |
471 | FEAT_DSI_REVERSE_TXCLKESC, | |
472 | FEAT_VENC_REQUIRES_TV_DAC_CLK, | |
473 | FEAT_CPR, | |
474 | FEAT_PRELOAD, | |
475 | FEAT_FIR_COEF_V, | |
476 | FEAT_ALPHA_FIXED_ZORDER, | |
477 | FEAT_FIFO_MERGE, | |
478 | FEAT_OMAP3_DSI_FIFO_BUG, | |
479 | FEAT_DPI_USES_VDDS_DSI, | |
480 | }; | |
481 | ||
482 | static const enum dss_feat_id am35xx_dss_feat_list[] = { | |
483 | FEAT_LCDENABLEPOL, | |
484 | FEAT_LCDENABLESIGNAL, | |
485 | FEAT_PCKFREEENABLE, | |
486 | FEAT_FUNCGATED, | |
487 | FEAT_LINEBUFFERSPLIT, | |
488 | FEAT_ROWREPEATENABLE, | |
489 | FEAT_RESIZECONF, | |
490 | FEAT_DSI_REVERSE_TXCLKESC, | |
491 | FEAT_VENC_REQUIRES_TV_DAC_CLK, | |
492 | FEAT_CPR, | |
493 | FEAT_PRELOAD, | |
494 | FEAT_FIR_COEF_V, | |
495 | FEAT_ALPHA_FIXED_ZORDER, | |
496 | FEAT_FIFO_MERGE, | |
497 | FEAT_OMAP3_DSI_FIFO_BUG, | |
498 | }; | |
499 | ||
500 | static const enum dss_feat_id am43xx_dss_feat_list[] = { | |
501 | FEAT_LCDENABLEPOL, | |
502 | FEAT_LCDENABLESIGNAL, | |
503 | FEAT_PCKFREEENABLE, | |
504 | FEAT_FUNCGATED, | |
505 | FEAT_LINEBUFFERSPLIT, | |
506 | FEAT_ROWREPEATENABLE, | |
507 | FEAT_RESIZECONF, | |
508 | FEAT_CPR, | |
509 | FEAT_PRELOAD, | |
510 | FEAT_FIR_COEF_V, | |
511 | FEAT_ALPHA_FIXED_ZORDER, | |
512 | FEAT_FIFO_MERGE, | |
513 | }; | |
514 | ||
515 | static const enum dss_feat_id omap3630_dss_feat_list[] = { | |
516 | FEAT_LCDENABLEPOL, | |
517 | FEAT_LCDENABLESIGNAL, | |
518 | FEAT_PCKFREEENABLE, | |
519 | FEAT_FUNCGATED, | |
520 | FEAT_LINEBUFFERSPLIT, | |
521 | FEAT_ROWREPEATENABLE, | |
522 | FEAT_RESIZECONF, | |
523 | FEAT_DSI_PLL_PWR_BUG, | |
524 | FEAT_CPR, | |
525 | FEAT_PRELOAD, | |
526 | FEAT_FIR_COEF_V, | |
527 | FEAT_ALPHA_FIXED_ZORDER, | |
528 | FEAT_FIFO_MERGE, | |
529 | FEAT_OMAP3_DSI_FIFO_BUG, | |
530 | FEAT_DPI_USES_VDDS_DSI, | |
531 | }; | |
532 | ||
533 | static const enum dss_feat_id omap4430_es1_0_dss_feat_list[] = { | |
534 | FEAT_MGR_LCD2, | |
535 | FEAT_CORE_CLK_DIV, | |
536 | FEAT_LCD_CLK_SRC, | |
537 | FEAT_DSI_DCS_CMD_CONFIG_VC, | |
538 | FEAT_DSI_VC_OCP_WIDTH, | |
539 | FEAT_DSI_GNQ, | |
540 | FEAT_HANDLE_UV_SEPARATE, | |
541 | FEAT_ATTR2, | |
542 | FEAT_CPR, | |
543 | FEAT_PRELOAD, | |
544 | FEAT_FIR_COEF_V, | |
545 | FEAT_ALPHA_FREE_ZORDER, | |
546 | FEAT_FIFO_MERGE, | |
547 | FEAT_BURST_2D, | |
548 | }; | |
549 | ||
550 | static const enum dss_feat_id omap4430_es2_0_1_2_dss_feat_list[] = { | |
551 | FEAT_MGR_LCD2, | |
552 | FEAT_CORE_CLK_DIV, | |
553 | FEAT_LCD_CLK_SRC, | |
554 | FEAT_DSI_DCS_CMD_CONFIG_VC, | |
555 | FEAT_DSI_VC_OCP_WIDTH, | |
556 | FEAT_DSI_GNQ, | |
557 | FEAT_HDMI_CTS_SWMODE, | |
558 | FEAT_HANDLE_UV_SEPARATE, | |
559 | FEAT_ATTR2, | |
560 | FEAT_CPR, | |
561 | FEAT_PRELOAD, | |
562 | FEAT_FIR_COEF_V, | |
563 | FEAT_ALPHA_FREE_ZORDER, | |
564 | FEAT_FIFO_MERGE, | |
565 | FEAT_BURST_2D, | |
566 | }; | |
567 | ||
568 | static const enum dss_feat_id omap4_dss_feat_list[] = { | |
569 | FEAT_MGR_LCD2, | |
570 | FEAT_CORE_CLK_DIV, | |
571 | FEAT_LCD_CLK_SRC, | |
572 | FEAT_DSI_DCS_CMD_CONFIG_VC, | |
573 | FEAT_DSI_VC_OCP_WIDTH, | |
574 | FEAT_DSI_GNQ, | |
575 | FEAT_HDMI_CTS_SWMODE, | |
576 | FEAT_HDMI_AUDIO_USE_MCLK, | |
577 | FEAT_HANDLE_UV_SEPARATE, | |
578 | FEAT_ATTR2, | |
579 | FEAT_CPR, | |
580 | FEAT_PRELOAD, | |
581 | FEAT_FIR_COEF_V, | |
582 | FEAT_ALPHA_FREE_ZORDER, | |
583 | FEAT_FIFO_MERGE, | |
584 | FEAT_BURST_2D, | |
585 | }; | |
586 | ||
587 | static const enum dss_feat_id omap5_dss_feat_list[] = { | |
588 | FEAT_MGR_LCD2, | |
589 | FEAT_MGR_LCD3, | |
590 | FEAT_CORE_CLK_DIV, | |
591 | FEAT_LCD_CLK_SRC, | |
592 | FEAT_DSI_DCS_CMD_CONFIG_VC, | |
593 | FEAT_DSI_VC_OCP_WIDTH, | |
594 | FEAT_DSI_GNQ, | |
595 | FEAT_HDMI_CTS_SWMODE, | |
596 | FEAT_HDMI_AUDIO_USE_MCLK, | |
597 | FEAT_HANDLE_UV_SEPARATE, | |
598 | FEAT_ATTR2, | |
599 | FEAT_CPR, | |
600 | FEAT_PRELOAD, | |
601 | FEAT_FIR_COEF_V, | |
602 | FEAT_ALPHA_FREE_ZORDER, | |
603 | FEAT_FIFO_MERGE, | |
604 | FEAT_BURST_2D, | |
605 | FEAT_DSI_PHY_DCC, | |
606 | FEAT_MFLAG, | |
607 | }; | |
608 | ||
609 | /* OMAP2 DSS Features */ | |
610 | static const struct omap_dss_features omap2_dss_features = { | |
611 | .reg_fields = omap2_dss_reg_fields, | |
612 | .num_reg_fields = ARRAY_SIZE(omap2_dss_reg_fields), | |
613 | ||
614 | .features = omap2_dss_feat_list, | |
615 | .num_features = ARRAY_SIZE(omap2_dss_feat_list), | |
616 | ||
617 | .num_mgrs = 2, | |
618 | .num_ovls = 3, | |
619 | .supported_displays = omap2_dss_supported_displays, | |
620 | .supported_outputs = omap2_dss_supported_outputs, | |
621 | .supported_color_modes = omap2_dss_supported_color_modes, | |
622 | .overlay_caps = omap2_dss_overlay_caps, | |
623 | .clksrc_names = omap2_dss_clk_source_names, | |
624 | .dss_params = omap2_dss_param_range, | |
625 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_VRFB, | |
626 | .buffer_size_unit = 1, | |
627 | .burst_size_unit = 8, | |
628 | }; | |
629 | ||
630 | /* OMAP3 DSS Features */ | |
631 | static const struct omap_dss_features omap3430_dss_features = { | |
632 | .reg_fields = omap3_dss_reg_fields, | |
633 | .num_reg_fields = ARRAY_SIZE(omap3_dss_reg_fields), | |
634 | ||
635 | .features = omap3430_dss_feat_list, | |
636 | .num_features = ARRAY_SIZE(omap3430_dss_feat_list), | |
637 | ||
638 | .num_mgrs = 2, | |
639 | .num_ovls = 3, | |
640 | .supported_displays = omap3430_dss_supported_displays, | |
641 | .supported_outputs = omap3430_dss_supported_outputs, | |
642 | .supported_color_modes = omap3_dss_supported_color_modes, | |
643 | .overlay_caps = omap3430_dss_overlay_caps, | |
644 | .clksrc_names = omap3_dss_clk_source_names, | |
645 | .dss_params = omap3_dss_param_range, | |
646 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_VRFB, | |
647 | .buffer_size_unit = 1, | |
648 | .burst_size_unit = 8, | |
649 | }; | |
650 | ||
651 | /* | |
652 | * AM35xx DSS Features. This is basically OMAP3 DSS Features without the | |
653 | * vdds_dsi regulator. | |
654 | */ | |
655 | static const struct omap_dss_features am35xx_dss_features = { | |
656 | .reg_fields = omap3_dss_reg_fields, | |
657 | .num_reg_fields = ARRAY_SIZE(omap3_dss_reg_fields), | |
658 | ||
659 | .features = am35xx_dss_feat_list, | |
660 | .num_features = ARRAY_SIZE(am35xx_dss_feat_list), | |
661 | ||
662 | .num_mgrs = 2, | |
663 | .num_ovls = 3, | |
664 | .supported_displays = omap3430_dss_supported_displays, | |
665 | .supported_outputs = omap3430_dss_supported_outputs, | |
666 | .supported_color_modes = omap3_dss_supported_color_modes, | |
667 | .overlay_caps = omap3430_dss_overlay_caps, | |
668 | .clksrc_names = omap3_dss_clk_source_names, | |
669 | .dss_params = omap3_dss_param_range, | |
670 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_VRFB, | |
671 | .buffer_size_unit = 1, | |
672 | .burst_size_unit = 8, | |
673 | }; | |
674 | ||
675 | static const struct omap_dss_features am43xx_dss_features = { | |
676 | .reg_fields = am43xx_dss_reg_fields, | |
677 | .num_reg_fields = ARRAY_SIZE(am43xx_dss_reg_fields), | |
678 | ||
679 | .features = am43xx_dss_feat_list, | |
680 | .num_features = ARRAY_SIZE(am43xx_dss_feat_list), | |
681 | ||
682 | .num_mgrs = 1, | |
683 | .num_ovls = 3, | |
684 | .supported_displays = am43xx_dss_supported_displays, | |
685 | .supported_outputs = am43xx_dss_supported_outputs, | |
686 | .supported_color_modes = omap3_dss_supported_color_modes, | |
687 | .overlay_caps = omap3430_dss_overlay_caps, | |
688 | .clksrc_names = omap2_dss_clk_source_names, | |
689 | .dss_params = am43xx_dss_param_range, | |
690 | .supported_rotation_types = OMAP_DSS_ROT_DMA, | |
691 | .buffer_size_unit = 1, | |
692 | .burst_size_unit = 8, | |
693 | }; | |
694 | ||
695 | static const struct omap_dss_features omap3630_dss_features = { | |
696 | .reg_fields = omap3_dss_reg_fields, | |
697 | .num_reg_fields = ARRAY_SIZE(omap3_dss_reg_fields), | |
698 | ||
699 | .features = omap3630_dss_feat_list, | |
700 | .num_features = ARRAY_SIZE(omap3630_dss_feat_list), | |
701 | ||
702 | .num_mgrs = 2, | |
703 | .num_ovls = 3, | |
704 | .supported_displays = omap3630_dss_supported_displays, | |
705 | .supported_outputs = omap3630_dss_supported_outputs, | |
706 | .supported_color_modes = omap3_dss_supported_color_modes, | |
707 | .overlay_caps = omap3630_dss_overlay_caps, | |
708 | .clksrc_names = omap3_dss_clk_source_names, | |
709 | .dss_params = omap3_dss_param_range, | |
710 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_VRFB, | |
711 | .buffer_size_unit = 1, | |
712 | .burst_size_unit = 8, | |
713 | }; | |
714 | ||
715 | /* OMAP4 DSS Features */ | |
716 | /* For OMAP4430 ES 1.0 revision */ | |
717 | static const struct omap_dss_features omap4430_es1_0_dss_features = { | |
718 | .reg_fields = omap4_dss_reg_fields, | |
719 | .num_reg_fields = ARRAY_SIZE(omap4_dss_reg_fields), | |
720 | ||
721 | .features = omap4430_es1_0_dss_feat_list, | |
722 | .num_features = ARRAY_SIZE(omap4430_es1_0_dss_feat_list), | |
723 | ||
724 | .num_mgrs = 3, | |
725 | .num_ovls = 4, | |
726 | .supported_displays = omap4_dss_supported_displays, | |
727 | .supported_outputs = omap4_dss_supported_outputs, | |
728 | .supported_color_modes = omap4_dss_supported_color_modes, | |
729 | .overlay_caps = omap4_dss_overlay_caps, | |
730 | .clksrc_names = omap4_dss_clk_source_names, | |
731 | .dss_params = omap4_dss_param_range, | |
732 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_TILER, | |
733 | .buffer_size_unit = 16, | |
734 | .burst_size_unit = 16, | |
735 | }; | |
736 | ||
737 | /* For OMAP4430 ES 2.0, 2.1 and 2.2 revisions */ | |
738 | static const struct omap_dss_features omap4430_es2_0_1_2_dss_features = { | |
739 | .reg_fields = omap4_dss_reg_fields, | |
740 | .num_reg_fields = ARRAY_SIZE(omap4_dss_reg_fields), | |
741 | ||
742 | .features = omap4430_es2_0_1_2_dss_feat_list, | |
743 | .num_features = ARRAY_SIZE(omap4430_es2_0_1_2_dss_feat_list), | |
744 | ||
745 | .num_mgrs = 3, | |
746 | .num_ovls = 4, | |
747 | .supported_displays = omap4_dss_supported_displays, | |
748 | .supported_outputs = omap4_dss_supported_outputs, | |
749 | .supported_color_modes = omap4_dss_supported_color_modes, | |
750 | .overlay_caps = omap4_dss_overlay_caps, | |
751 | .clksrc_names = omap4_dss_clk_source_names, | |
752 | .dss_params = omap4_dss_param_range, | |
753 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_TILER, | |
754 | .buffer_size_unit = 16, | |
755 | .burst_size_unit = 16, | |
756 | }; | |
757 | ||
758 | /* For all the other OMAP4 versions */ | |
759 | static const struct omap_dss_features omap4_dss_features = { | |
760 | .reg_fields = omap4_dss_reg_fields, | |
761 | .num_reg_fields = ARRAY_SIZE(omap4_dss_reg_fields), | |
762 | ||
763 | .features = omap4_dss_feat_list, | |
764 | .num_features = ARRAY_SIZE(omap4_dss_feat_list), | |
765 | ||
766 | .num_mgrs = 3, | |
767 | .num_ovls = 4, | |
768 | .supported_displays = omap4_dss_supported_displays, | |
769 | .supported_outputs = omap4_dss_supported_outputs, | |
770 | .supported_color_modes = omap4_dss_supported_color_modes, | |
771 | .overlay_caps = omap4_dss_overlay_caps, | |
772 | .clksrc_names = omap4_dss_clk_source_names, | |
773 | .dss_params = omap4_dss_param_range, | |
774 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_TILER, | |
775 | .buffer_size_unit = 16, | |
776 | .burst_size_unit = 16, | |
777 | }; | |
778 | ||
779 | /* OMAP5 DSS Features */ | |
780 | static const struct omap_dss_features omap5_dss_features = { | |
781 | .reg_fields = omap5_dss_reg_fields, | |
782 | .num_reg_fields = ARRAY_SIZE(omap5_dss_reg_fields), | |
783 | ||
784 | .features = omap5_dss_feat_list, | |
785 | .num_features = ARRAY_SIZE(omap5_dss_feat_list), | |
786 | ||
787 | .num_mgrs = 4, | |
788 | .num_ovls = 4, | |
789 | .supported_displays = omap5_dss_supported_displays, | |
790 | .supported_outputs = omap5_dss_supported_outputs, | |
791 | .supported_color_modes = omap4_dss_supported_color_modes, | |
792 | .overlay_caps = omap4_dss_overlay_caps, | |
793 | .clksrc_names = omap5_dss_clk_source_names, | |
794 | .dss_params = omap5_dss_param_range, | |
795 | .supported_rotation_types = OMAP_DSS_ROT_DMA | OMAP_DSS_ROT_TILER, | |
796 | .buffer_size_unit = 16, | |
797 | .burst_size_unit = 16, | |
798 | }; | |
799 | ||
800 | /* Functions returning values related to a DSS feature */ | |
801 | int dss_feat_get_num_mgrs(void) | |
802 | { | |
803 | return omap_current_dss_features->num_mgrs; | |
804 | } | |
805 | EXPORT_SYMBOL(dss_feat_get_num_mgrs); | |
806 | ||
807 | int dss_feat_get_num_ovls(void) | |
808 | { | |
809 | return omap_current_dss_features->num_ovls; | |
810 | } | |
811 | EXPORT_SYMBOL(dss_feat_get_num_ovls); | |
812 | ||
813 | unsigned long dss_feat_get_param_min(enum dss_range_param param) | |
814 | { | |
815 | return omap_current_dss_features->dss_params[param].min; | |
816 | } | |
817 | ||
818 | unsigned long dss_feat_get_param_max(enum dss_range_param param) | |
819 | { | |
820 | return omap_current_dss_features->dss_params[param].max; | |
821 | } | |
822 | ||
823 | enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel) | |
824 | { | |
825 | return omap_current_dss_features->supported_displays[channel]; | |
826 | } | |
827 | ||
828 | enum omap_dss_output_id dss_feat_get_supported_outputs(enum omap_channel channel) | |
829 | { | |
830 | return omap_current_dss_features->supported_outputs[channel]; | |
831 | } | |
832 | ||
833 | enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane) | |
834 | { | |
835 | return omap_current_dss_features->supported_color_modes[plane]; | |
836 | } | |
837 | EXPORT_SYMBOL(dss_feat_get_supported_color_modes); | |
838 | ||
839 | enum omap_overlay_caps dss_feat_get_overlay_caps(enum omap_plane plane) | |
840 | { | |
841 | return omap_current_dss_features->overlay_caps[plane]; | |
842 | } | |
843 | ||
844 | bool dss_feat_color_mode_supported(enum omap_plane plane, | |
845 | enum omap_color_mode color_mode) | |
846 | { | |
847 | return omap_current_dss_features->supported_color_modes[plane] & | |
848 | color_mode; | |
849 | } | |
850 | ||
851 | const char *dss_feat_get_clk_source_name(enum omap_dss_clk_source id) | |
852 | { | |
853 | return omap_current_dss_features->clksrc_names[id]; | |
854 | } | |
855 | ||
856 | u32 dss_feat_get_buffer_size_unit(void) | |
857 | { | |
858 | return omap_current_dss_features->buffer_size_unit; | |
859 | } | |
860 | ||
861 | u32 dss_feat_get_burst_size_unit(void) | |
862 | { | |
863 | return omap_current_dss_features->burst_size_unit; | |
864 | } | |
865 | ||
866 | /* DSS has_feature check */ | |
867 | bool dss_has_feature(enum dss_feat_id id) | |
868 | { | |
869 | int i; | |
870 | const enum dss_feat_id *features = omap_current_dss_features->features; | |
871 | const int num_features = omap_current_dss_features->num_features; | |
872 | ||
873 | for (i = 0; i < num_features; i++) { | |
874 | if (features[i] == id) | |
875 | return true; | |
876 | } | |
877 | ||
878 | return false; | |
879 | } | |
880 | ||
881 | void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end) | |
882 | { | |
f46bdacd | 883 | BUG_ON(id >= omap_current_dss_features->num_reg_fields); |
f76ee892 TV |
884 | |
885 | *start = omap_current_dss_features->reg_fields[id].start; | |
886 | *end = omap_current_dss_features->reg_fields[id].end; | |
887 | } | |
888 | ||
889 | bool dss_feat_rotation_type_supported(enum omap_dss_rotation_type rot_type) | |
890 | { | |
891 | return omap_current_dss_features->supported_rotation_types & rot_type; | |
892 | } | |
893 | ||
894 | void dss_features_init(enum omapdss_version version) | |
895 | { | |
896 | switch (version) { | |
897 | case OMAPDSS_VER_OMAP24xx: | |
898 | omap_current_dss_features = &omap2_dss_features; | |
899 | break; | |
900 | ||
901 | case OMAPDSS_VER_OMAP34xx_ES1: | |
902 | case OMAPDSS_VER_OMAP34xx_ES3: | |
903 | omap_current_dss_features = &omap3430_dss_features; | |
904 | break; | |
905 | ||
906 | case OMAPDSS_VER_OMAP3630: | |
907 | omap_current_dss_features = &omap3630_dss_features; | |
908 | break; | |
909 | ||
910 | case OMAPDSS_VER_OMAP4430_ES1: | |
911 | omap_current_dss_features = &omap4430_es1_0_dss_features; | |
912 | break; | |
913 | ||
914 | case OMAPDSS_VER_OMAP4430_ES2: | |
915 | omap_current_dss_features = &omap4430_es2_0_1_2_dss_features; | |
916 | break; | |
917 | ||
918 | case OMAPDSS_VER_OMAP4: | |
919 | omap_current_dss_features = &omap4_dss_features; | |
920 | break; | |
921 | ||
922 | case OMAPDSS_VER_OMAP5: | |
923 | case OMAPDSS_VER_DRA7xx: | |
924 | omap_current_dss_features = &omap5_dss_features; | |
925 | break; | |
926 | ||
927 | case OMAPDSS_VER_AM35xx: | |
928 | omap_current_dss_features = &am35xx_dss_features; | |
929 | break; | |
930 | ||
931 | case OMAPDSS_VER_AM43xx: | |
932 | omap_current_dss_features = &am43xx_dss_features; | |
933 | break; | |
934 | ||
935 | default: | |
936 | DSSWARN("Unsupported OMAP version"); | |
937 | break; | |
938 | } | |
939 | } |