2 * Copyright (C) 2013 Google, Inc.
3 * modified from drivers/gpu/drm/drm_crtc.c
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
16 #include <linux/export.h>
17 #include <linux/kernel.h>
18 #include <drm/drm_fourcc.h>
19 #include <video/adf_format.h>
21 bool adf_format_is_standard(u32 format)
25 case DRM_FORMAT_RGB332:
26 case DRM_FORMAT_BGR233:
27 case DRM_FORMAT_XRGB4444:
28 case DRM_FORMAT_XBGR4444:
29 case DRM_FORMAT_RGBX4444:
30 case DRM_FORMAT_BGRX4444:
31 case DRM_FORMAT_ARGB4444:
32 case DRM_FORMAT_ABGR4444:
33 case DRM_FORMAT_RGBA4444:
34 case DRM_FORMAT_BGRA4444:
35 case DRM_FORMAT_XRGB1555:
36 case DRM_FORMAT_XBGR1555:
37 case DRM_FORMAT_RGBX5551:
38 case DRM_FORMAT_BGRX5551:
39 case DRM_FORMAT_ARGB1555:
40 case DRM_FORMAT_ABGR1555:
41 case DRM_FORMAT_RGBA5551:
42 case DRM_FORMAT_BGRA5551:
43 case DRM_FORMAT_RGB565:
44 case DRM_FORMAT_BGR565:
45 case DRM_FORMAT_RGB888:
46 case DRM_FORMAT_BGR888:
47 case DRM_FORMAT_XRGB8888:
48 case DRM_FORMAT_XBGR8888:
49 case DRM_FORMAT_RGBX8888:
50 case DRM_FORMAT_BGRX8888:
51 case DRM_FORMAT_ARGB8888:
52 case DRM_FORMAT_ABGR8888:
53 case DRM_FORMAT_RGBA8888:
54 case DRM_FORMAT_BGRA8888:
55 case DRM_FORMAT_XRGB2101010:
56 case DRM_FORMAT_XBGR2101010:
57 case DRM_FORMAT_RGBX1010102:
58 case DRM_FORMAT_BGRX1010102:
59 case DRM_FORMAT_ARGB2101010:
60 case DRM_FORMAT_ABGR2101010:
61 case DRM_FORMAT_RGBA1010102:
62 case DRM_FORMAT_BGRA1010102:
72 case DRM_FORMAT_YUV410:
73 case DRM_FORMAT_YVU410:
74 case DRM_FORMAT_YUV411:
75 case DRM_FORMAT_YVU411:
76 case DRM_FORMAT_YUV420:
77 case DRM_FORMAT_YVU420:
78 case DRM_FORMAT_YUV422:
79 case DRM_FORMAT_YVU422:
80 case DRM_FORMAT_YUV444:
81 case DRM_FORMAT_YVU444:
87 EXPORT_SYMBOL(adf_format_is_standard);
89 bool adf_format_is_rgb(u32 format)
93 case DRM_FORMAT_RGB332:
94 case DRM_FORMAT_BGR233:
95 case DRM_FORMAT_XRGB1555:
96 case DRM_FORMAT_XBGR1555:
97 case DRM_FORMAT_RGBX5551:
98 case DRM_FORMAT_BGRX5551:
99 case DRM_FORMAT_ARGB1555:
100 case DRM_FORMAT_ABGR1555:
101 case DRM_FORMAT_RGBA5551:
102 case DRM_FORMAT_BGRA5551:
103 case DRM_FORMAT_RGB565:
104 case DRM_FORMAT_BGR565:
105 case DRM_FORMAT_RGB888:
106 case DRM_FORMAT_BGR888:
107 case DRM_FORMAT_XRGB8888:
108 case DRM_FORMAT_XBGR8888:
109 case DRM_FORMAT_RGBX8888:
110 case DRM_FORMAT_BGRX8888:
111 case DRM_FORMAT_XRGB2101010:
112 case DRM_FORMAT_XBGR2101010:
113 case DRM_FORMAT_RGBX1010102:
114 case DRM_FORMAT_BGRX1010102:
115 case DRM_FORMAT_ARGB2101010:
116 case DRM_FORMAT_ABGR2101010:
117 case DRM_FORMAT_RGBA1010102:
118 case DRM_FORMAT_BGRA1010102:
119 case DRM_FORMAT_ARGB8888:
120 case DRM_FORMAT_ABGR8888:
121 case DRM_FORMAT_RGBA8888:
122 case DRM_FORMAT_BGRA8888:
129 EXPORT_SYMBOL(adf_format_is_rgb);
131 u8 adf_format_num_planes(u32 format)
134 case DRM_FORMAT_YUV410:
135 case DRM_FORMAT_YVU410:
136 case DRM_FORMAT_YUV411:
137 case DRM_FORMAT_YVU411:
138 case DRM_FORMAT_YUV420:
139 case DRM_FORMAT_YVU420:
140 case DRM_FORMAT_YUV422:
141 case DRM_FORMAT_YVU422:
142 case DRM_FORMAT_YUV444:
143 case DRM_FORMAT_YVU444:
145 case DRM_FORMAT_NV12:
146 case DRM_FORMAT_NV21:
147 case DRM_FORMAT_NV16:
148 case DRM_FORMAT_NV61:
154 EXPORT_SYMBOL(adf_format_num_planes);
156 u8 adf_format_bpp(u32 format)
160 case DRM_FORMAT_RGB332:
161 case DRM_FORMAT_BGR233:
164 case DRM_FORMAT_XRGB1555:
165 case DRM_FORMAT_XBGR1555:
166 case DRM_FORMAT_RGBX5551:
167 case DRM_FORMAT_BGRX5551:
168 case DRM_FORMAT_ARGB1555:
169 case DRM_FORMAT_ABGR1555:
170 case DRM_FORMAT_RGBA5551:
171 case DRM_FORMAT_BGRA5551:
172 case DRM_FORMAT_RGB565:
173 case DRM_FORMAT_BGR565:
176 case DRM_FORMAT_RGB888:
177 case DRM_FORMAT_BGR888:
180 case DRM_FORMAT_XRGB8888:
181 case DRM_FORMAT_XBGR8888:
182 case DRM_FORMAT_RGBX8888:
183 case DRM_FORMAT_BGRX8888:
184 case DRM_FORMAT_XRGB2101010:
185 case DRM_FORMAT_XBGR2101010:
186 case DRM_FORMAT_RGBX1010102:
187 case DRM_FORMAT_BGRX1010102:
188 case DRM_FORMAT_ARGB2101010:
189 case DRM_FORMAT_ABGR2101010:
190 case DRM_FORMAT_RGBA1010102:
191 case DRM_FORMAT_BGRA1010102:
192 case DRM_FORMAT_ARGB8888:
193 case DRM_FORMAT_ABGR8888:
194 case DRM_FORMAT_RGBA8888:
195 case DRM_FORMAT_BGRA8888:
199 pr_debug("%s: unsupported pixel format %u\n", __func__, format);
203 EXPORT_SYMBOL(adf_format_bpp);
205 u8 adf_format_plane_cpp(u32 format, int plane)
207 if (plane >= adf_format_num_planes(format))
211 case DRM_FORMAT_YUYV:
212 case DRM_FORMAT_YVYU:
213 case DRM_FORMAT_UYVY:
214 case DRM_FORMAT_VYUY:
216 case DRM_FORMAT_NV12:
217 case DRM_FORMAT_NV21:
218 case DRM_FORMAT_NV16:
219 case DRM_FORMAT_NV61:
220 return plane ? 2 : 1;
221 case DRM_FORMAT_YUV410:
222 case DRM_FORMAT_YVU410:
223 case DRM_FORMAT_YUV411:
224 case DRM_FORMAT_YVU411:
225 case DRM_FORMAT_YUV420:
226 case DRM_FORMAT_YVU420:
227 case DRM_FORMAT_YUV422:
228 case DRM_FORMAT_YVU422:
229 case DRM_FORMAT_YUV444:
230 case DRM_FORMAT_YVU444:
233 return adf_format_bpp(format) / 8;
236 EXPORT_SYMBOL(adf_format_plane_cpp);
238 u8 adf_format_horz_chroma_subsampling(u32 format)
241 case DRM_FORMAT_YUV411:
242 case DRM_FORMAT_YVU411:
243 case DRM_FORMAT_YUV410:
244 case DRM_FORMAT_YVU410:
246 case DRM_FORMAT_YUYV:
247 case DRM_FORMAT_YVYU:
248 case DRM_FORMAT_UYVY:
249 case DRM_FORMAT_VYUY:
250 case DRM_FORMAT_NV12:
251 case DRM_FORMAT_NV21:
252 case DRM_FORMAT_NV16:
253 case DRM_FORMAT_NV61:
254 case DRM_FORMAT_YUV422:
255 case DRM_FORMAT_YVU422:
256 case DRM_FORMAT_YUV420:
257 case DRM_FORMAT_YVU420:
263 EXPORT_SYMBOL(adf_format_horz_chroma_subsampling);
265 u8 adf_format_vert_chroma_subsampling(u32 format)
268 case DRM_FORMAT_YUV410:
269 case DRM_FORMAT_YVU410:
271 case DRM_FORMAT_YUV420:
272 case DRM_FORMAT_YVU420:
273 case DRM_FORMAT_NV12:
274 case DRM_FORMAT_NV21:
280 EXPORT_SYMBOL(adf_format_vert_chroma_subsampling);