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