[media] bdisp: 2D blitter driver using v4l2 mem2mem framework
[deliverable/linux.git] / drivers / media / platform / sti / bdisp / bdisp-filter.h
1 /*
2 * Copyright (C) STMicroelectronics SA 2014
3 * Authors: Fabien Dessenne <fabien.dessenne@st.com> for STMicroelectronics.
4 * License terms: GNU General Public License (GPL), version 2
5 */
6
7 #define BDISP_HF_NB 64
8 #define BDISP_VF_NB 40
9
10 /**
11 * struct bdisp_filter_h_spec - Horizontal filter specification
12 *
13 * @min: min scale factor for this filter (6.10 fixed point)
14 * @max: max scale factor for this filter (6.10 fixed point)
15 * coef: filter coefficients
16 */
17 struct bdisp_filter_h_spec {
18 const u16 min;
19 const u16 max;
20 const u8 coef[BDISP_HF_NB];
21 };
22
23 static const struct bdisp_filter_h_spec bdisp_h_spec[] = {
24 {
25 .min = 0,
26 .max = 921,
27 .coef = {
28 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
29 0x00, 0x00, 0xff, 0x07, 0x3d, 0xfc, 0x01, 0x00,
30 0x00, 0x01, 0xfd, 0x11, 0x36, 0xf9, 0x02, 0x00,
31 0x00, 0x01, 0xfb, 0x1b, 0x2e, 0xf9, 0x02, 0x00,
32 0x00, 0x01, 0xf9, 0x26, 0x26, 0xf9, 0x01, 0x00,
33 0x00, 0x02, 0xf9, 0x30, 0x19, 0xfb, 0x01, 0x00,
34 0x00, 0x02, 0xf9, 0x39, 0x0e, 0xfd, 0x01, 0x00,
35 0x00, 0x01, 0xfc, 0x3e, 0x06, 0xff, 0x00, 0x00
36 }
37 },
38 {
39 .min = 921,
40 .max = 1024,
41 .coef = {
42 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
43 0xff, 0x03, 0xfd, 0x08, 0x3e, 0xf9, 0x04, 0xfe,
44 0xfd, 0x06, 0xf8, 0x13, 0x3b, 0xf4, 0x07, 0xfc,
45 0xfb, 0x08, 0xf5, 0x1f, 0x34, 0xf1, 0x09, 0xfb,
46 0xfb, 0x09, 0xf2, 0x2b, 0x2a, 0xf1, 0x09, 0xfb,
47 0xfb, 0x09, 0xf2, 0x35, 0x1e, 0xf4, 0x08, 0xfb,
48 0xfc, 0x07, 0xf5, 0x3c, 0x12, 0xf7, 0x06, 0xfd,
49 0xfe, 0x04, 0xfa, 0x3f, 0x07, 0xfc, 0x03, 0xff
50 }
51 },
52 {
53 .min = 1024,
54 .max = 1126,
55 .coef = {
56 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
57 0xff, 0x03, 0xfd, 0x08, 0x3e, 0xf9, 0x04, 0xfe,
58 0xfd, 0x06, 0xf8, 0x13, 0x3b, 0xf4, 0x07, 0xfc,
59 0xfb, 0x08, 0xf5, 0x1f, 0x34, 0xf1, 0x09, 0xfb,
60 0xfb, 0x09, 0xf2, 0x2b, 0x2a, 0xf1, 0x09, 0xfb,
61 0xfb, 0x09, 0xf2, 0x35, 0x1e, 0xf4, 0x08, 0xfb,
62 0xfc, 0x07, 0xf5, 0x3c, 0x12, 0xf7, 0x06, 0xfd,
63 0xfe, 0x04, 0xfa, 0x3f, 0x07, 0xfc, 0x03, 0xff
64 }
65 },
66 {
67 .min = 1126,
68 .max = 1228,
69 .coef = {
70 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
71 0xff, 0x03, 0xfd, 0x08, 0x3e, 0xf9, 0x04, 0xfe,
72 0xfd, 0x06, 0xf8, 0x13, 0x3b, 0xf4, 0x07, 0xfc,
73 0xfb, 0x08, 0xf5, 0x1f, 0x34, 0xf1, 0x09, 0xfb,
74 0xfb, 0x09, 0xf2, 0x2b, 0x2a, 0xf1, 0x09, 0xfb,
75 0xfb, 0x09, 0xf2, 0x35, 0x1e, 0xf4, 0x08, 0xfb,
76 0xfc, 0x07, 0xf5, 0x3c, 0x12, 0xf7, 0x06, 0xfd,
77 0xfe, 0x04, 0xfa, 0x3f, 0x07, 0xfc, 0x03, 0xff
78 }
79 },
80 {
81 .min = 1228,
82 .max = 1331,
83 .coef = {
84 0xfd, 0x04, 0xfc, 0x05, 0x39, 0x05, 0xfc, 0x04,
85 0xfc, 0x06, 0xf9, 0x0c, 0x39, 0xfe, 0x00, 0x02,
86 0xfb, 0x08, 0xf6, 0x17, 0x35, 0xf9, 0x02, 0x00,
87 0xfc, 0x08, 0xf4, 0x20, 0x30, 0xf4, 0x05, 0xff,
88 0xfd, 0x07, 0xf4, 0x29, 0x28, 0xf3, 0x07, 0xfd,
89 0xff, 0x05, 0xf5, 0x31, 0x1f, 0xf3, 0x08, 0xfc,
90 0x00, 0x02, 0xf9, 0x38, 0x14, 0xf6, 0x08, 0xfb,
91 0x02, 0x00, 0xff, 0x3a, 0x0b, 0xf8, 0x06, 0xfc
92 }
93 },
94 {
95 .min = 1331,
96 .max = 1433,
97 .coef = {
98 0xfc, 0x06, 0xf9, 0x09, 0x34, 0x09, 0xf9, 0x06,
99 0xfd, 0x07, 0xf7, 0x10, 0x32, 0x02, 0xfc, 0x05,
100 0xfe, 0x07, 0xf6, 0x17, 0x2f, 0xfc, 0xff, 0x04,
101 0xff, 0x06, 0xf5, 0x20, 0x2a, 0xf9, 0x01, 0x02,
102 0x00, 0x04, 0xf6, 0x27, 0x25, 0xf6, 0x04, 0x00,
103 0x02, 0x01, 0xf9, 0x2d, 0x1d, 0xf5, 0x06, 0xff,
104 0x04, 0xff, 0xfd, 0x31, 0x15, 0xf5, 0x07, 0xfe,
105 0x05, 0xfc, 0x02, 0x35, 0x0d, 0xf7, 0x07, 0xfd
106 }
107 },
108 {
109 .min = 1433,
110 .max = 1536,
111 .coef = {
112 0xfe, 0x06, 0xf8, 0x0b, 0x30, 0x0b, 0xf8, 0x06,
113 0xff, 0x06, 0xf7, 0x12, 0x2d, 0x05, 0xfa, 0x06,
114 0x00, 0x04, 0xf6, 0x18, 0x2c, 0x00, 0xfc, 0x06,
115 0x01, 0x02, 0xf7, 0x1f, 0x27, 0xfd, 0xff, 0x04,
116 0x03, 0x00, 0xf9, 0x24, 0x24, 0xf9, 0x00, 0x03,
117 0x04, 0xff, 0xfd, 0x29, 0x1d, 0xf7, 0x02, 0x01,
118 0x06, 0xfc, 0x00, 0x2d, 0x17, 0xf6, 0x04, 0x00,
119 0x06, 0xfa, 0x05, 0x30, 0x0f, 0xf7, 0x06, 0xff
120 }
121 },
122 {
123 .min = 1536,
124 .max = 2048,
125 .coef = {
126 0x05, 0xfd, 0xfb, 0x13, 0x25, 0x13, 0xfb, 0xfd,
127 0x05, 0xfc, 0xfd, 0x17, 0x24, 0x0f, 0xf9, 0xff,
128 0x04, 0xfa, 0xff, 0x1b, 0x24, 0x0b, 0xf9, 0x00,
129 0x03, 0xf9, 0x01, 0x1f, 0x23, 0x08, 0xf8, 0x01,
130 0x02, 0xf9, 0x04, 0x22, 0x20, 0x04, 0xf9, 0x02,
131 0x01, 0xf8, 0x08, 0x25, 0x1d, 0x01, 0xf9, 0x03,
132 0x00, 0xf9, 0x0c, 0x25, 0x1a, 0xfe, 0xfa, 0x04,
133 0xff, 0xf9, 0x10, 0x26, 0x15, 0xfc, 0xfc, 0x05
134 }
135 },
136 {
137 .min = 2048,
138 .max = 3072,
139 .coef = {
140 0xfc, 0xfd, 0x06, 0x13, 0x18, 0x13, 0x06, 0xfd,
141 0xfc, 0xfe, 0x08, 0x15, 0x17, 0x12, 0x04, 0xfc,
142 0xfb, 0xfe, 0x0a, 0x16, 0x18, 0x10, 0x03, 0xfc,
143 0xfb, 0x00, 0x0b, 0x18, 0x17, 0x0f, 0x01, 0xfb,
144 0xfb, 0x00, 0x0d, 0x19, 0x17, 0x0d, 0x00, 0xfb,
145 0xfb, 0x01, 0x0f, 0x19, 0x16, 0x0b, 0x00, 0xfb,
146 0xfc, 0x03, 0x11, 0x19, 0x15, 0x09, 0xfe, 0xfb,
147 0xfc, 0x04, 0x12, 0x1a, 0x12, 0x08, 0xfe, 0xfc
148 }
149 },
150 {
151 .min = 3072,
152 .max = 4096,
153 .coef = {
154 0xfe, 0x02, 0x09, 0x0f, 0x0e, 0x0f, 0x09, 0x02,
155 0xff, 0x02, 0x09, 0x0f, 0x10, 0x0e, 0x08, 0x01,
156 0xff, 0x03, 0x0a, 0x10, 0x10, 0x0d, 0x07, 0x00,
157 0x00, 0x04, 0x0b, 0x10, 0x0f, 0x0c, 0x06, 0x00,
158 0x00, 0x05, 0x0c, 0x10, 0x0e, 0x0c, 0x05, 0x00,
159 0x00, 0x06, 0x0c, 0x11, 0x0e, 0x0b, 0x04, 0x00,
160 0x00, 0x07, 0x0d, 0x11, 0x0f, 0x0a, 0x03, 0xff,
161 0x01, 0x08, 0x0e, 0x11, 0x0e, 0x09, 0x02, 0xff
162 }
163 },
164 {
165 .min = 4096,
166 .max = 5120,
167 .coef = {
168 0x00, 0x04, 0x09, 0x0c, 0x0e, 0x0c, 0x09, 0x04,
169 0x01, 0x05, 0x09, 0x0c, 0x0d, 0x0c, 0x08, 0x04,
170 0x01, 0x05, 0x0a, 0x0c, 0x0e, 0x0b, 0x08, 0x03,
171 0x02, 0x06, 0x0a, 0x0d, 0x0c, 0x0b, 0x07, 0x03,
172 0x02, 0x07, 0x0a, 0x0d, 0x0d, 0x0a, 0x07, 0x02,
173 0x03, 0x07, 0x0b, 0x0d, 0x0c, 0x0a, 0x06, 0x02,
174 0x03, 0x08, 0x0b, 0x0d, 0x0d, 0x0a, 0x05, 0x01,
175 0x04, 0x08, 0x0c, 0x0d, 0x0c, 0x09, 0x05, 0x01
176 }
177 },
178 {
179 .min = 5120,
180 .max = 65535,
181 .coef = {
182 0x03, 0x06, 0x09, 0x0b, 0x09, 0x0b, 0x09, 0x06,
183 0x03, 0x06, 0x09, 0x0b, 0x0c, 0x0a, 0x08, 0x05,
184 0x03, 0x06, 0x09, 0x0b, 0x0c, 0x0a, 0x08, 0x05,
185 0x04, 0x07, 0x09, 0x0b, 0x0b, 0x0a, 0x08, 0x04,
186 0x04, 0x07, 0x0a, 0x0b, 0x0b, 0x0a, 0x07, 0x04,
187 0x04, 0x08, 0x0a, 0x0b, 0x0b, 0x09, 0x07, 0x04,
188 0x05, 0x08, 0x0a, 0x0b, 0x0c, 0x09, 0x06, 0x03,
189 0x05, 0x08, 0x0a, 0x0b, 0x0c, 0x09, 0x06, 0x03
190 }
191 }
192 };
193
194 /**
195 * struct bdisp_filter_v_spec - Vertical filter specification
196 *
197 * @min: min scale factor for this filter (6.10 fixed point)
198 * @max: max scale factor for this filter (6.10 fixed point)
199 * coef: filter coefficients
200 */
201 struct bdisp_filter_v_spec {
202 const u16 min;
203 const u16 max;
204 const u8 coef[BDISP_VF_NB];
205 };
206
207 static const struct bdisp_filter_v_spec bdisp_v_spec[] = {
208 {
209 .min = 0,
210 .max = 1024,
211 .coef = {
212 0x00, 0x00, 0x40, 0x00, 0x00,
213 0x00, 0x06, 0x3d, 0xfd, 0x00,
214 0xfe, 0x0f, 0x38, 0xfb, 0x00,
215 0xfd, 0x19, 0x2f, 0xfb, 0x00,
216 0xfc, 0x24, 0x24, 0xfc, 0x00,
217 0xfb, 0x2f, 0x19, 0xfd, 0x00,
218 0xfb, 0x38, 0x0f, 0xfe, 0x00,
219 0xfd, 0x3d, 0x06, 0x00, 0x00
220 }
221 },
222 {
223 .min = 1024,
224 .max = 1331,
225 .coef = {
226 0xfc, 0x05, 0x3e, 0x05, 0xfc,
227 0xf8, 0x0e, 0x3b, 0xff, 0x00,
228 0xf5, 0x18, 0x38, 0xf9, 0x02,
229 0xf4, 0x21, 0x31, 0xf5, 0x05,
230 0xf4, 0x2a, 0x27, 0xf4, 0x07,
231 0xf6, 0x30, 0x1e, 0xf4, 0x08,
232 0xf9, 0x35, 0x15, 0xf6, 0x07,
233 0xff, 0x37, 0x0b, 0xf9, 0x06
234 }
235 },
236 {
237 .min = 1331,
238 .max = 1433,
239 .coef = {
240 0xf8, 0x0a, 0x3c, 0x0a, 0xf8,
241 0xf6, 0x12, 0x3b, 0x02, 0xfb,
242 0xf4, 0x1b, 0x35, 0xfd, 0xff,
243 0xf4, 0x23, 0x30, 0xf8, 0x01,
244 0xf6, 0x29, 0x27, 0xf6, 0x04,
245 0xf9, 0x2e, 0x1e, 0xf5, 0x06,
246 0xfd, 0x31, 0x16, 0xf6, 0x06,
247 0x02, 0x32, 0x0d, 0xf8, 0x07
248 }
249 },
250 {
251 .min = 1433,
252 .max = 1536,
253 .coef = {
254 0xf6, 0x0e, 0x38, 0x0e, 0xf6,
255 0xf5, 0x15, 0x38, 0x06, 0xf8,
256 0xf5, 0x1d, 0x33, 0x00, 0xfb,
257 0xf6, 0x23, 0x2d, 0xfc, 0xfe,
258 0xf9, 0x28, 0x26, 0xf9, 0x00,
259 0xfc, 0x2c, 0x1e, 0xf7, 0x03,
260 0x00, 0x2e, 0x18, 0xf6, 0x04,
261 0x05, 0x2e, 0x11, 0xf7, 0x05
262 }
263 },
264 {
265 .min = 1536,
266 .max = 2048,
267 .coef = {
268 0xfb, 0x13, 0x24, 0x13, 0xfb,
269 0xfd, 0x17, 0x23, 0x0f, 0xfa,
270 0xff, 0x1a, 0x23, 0x0b, 0xf9,
271 0x01, 0x1d, 0x22, 0x07, 0xf9,
272 0x04, 0x20, 0x1f, 0x04, 0xf9,
273 0x07, 0x22, 0x1c, 0x01, 0xfa,
274 0x0b, 0x24, 0x17, 0xff, 0xfb,
275 0x0f, 0x24, 0x14, 0xfd, 0xfc
276 }
277 },
278 {
279 .min = 2048,
280 .max = 3072,
281 .coef = {
282 0x05, 0x10, 0x16, 0x10, 0x05,
283 0x06, 0x11, 0x16, 0x0f, 0x04,
284 0x08, 0x13, 0x15, 0x0e, 0x02,
285 0x09, 0x14, 0x16, 0x0c, 0x01,
286 0x0b, 0x15, 0x15, 0x0b, 0x00,
287 0x0d, 0x16, 0x13, 0x0a, 0x00,
288 0x0f, 0x17, 0x13, 0x08, 0xff,
289 0x11, 0x18, 0x12, 0x07, 0xfe
290 }
291 },
292 {
293 .min = 3072,
294 .max = 4096,
295 .coef = {
296 0x09, 0x0f, 0x10, 0x0f, 0x09,
297 0x09, 0x0f, 0x12, 0x0e, 0x08,
298 0x0a, 0x10, 0x11, 0x0e, 0x07,
299 0x0b, 0x11, 0x11, 0x0d, 0x06,
300 0x0c, 0x11, 0x12, 0x0c, 0x05,
301 0x0d, 0x12, 0x11, 0x0c, 0x04,
302 0x0e, 0x12, 0x11, 0x0b, 0x04,
303 0x0f, 0x13, 0x11, 0x0a, 0x03
304 }
305 },
306 {
307 .min = 4096,
308 .max = 5120,
309 .coef = {
310 0x0a, 0x0e, 0x10, 0x0e, 0x0a,
311 0x0b, 0x0e, 0x0f, 0x0e, 0x0a,
312 0x0b, 0x0f, 0x10, 0x0d, 0x09,
313 0x0c, 0x0f, 0x10, 0x0d, 0x08,
314 0x0d, 0x0f, 0x0f, 0x0d, 0x08,
315 0x0d, 0x10, 0x10, 0x0c, 0x07,
316 0x0e, 0x10, 0x0f, 0x0c, 0x07,
317 0x0f, 0x10, 0x10, 0x0b, 0x06
318 }
319 },
320 {
321 .min = 5120,
322 .max = 65535,
323 .coef = {
324 0x0b, 0x0e, 0x0e, 0x0e, 0x0b,
325 0x0b, 0x0e, 0x0f, 0x0d, 0x0b,
326 0x0c, 0x0e, 0x0f, 0x0d, 0x0a,
327 0x0c, 0x0e, 0x0f, 0x0d, 0x0a,
328 0x0d, 0x0f, 0x0e, 0x0d, 0x09,
329 0x0d, 0x0f, 0x0f, 0x0c, 0x09,
330 0x0e, 0x0f, 0x0e, 0x0c, 0x09,
331 0x0e, 0x0f, 0x0f, 0x0c, 0x08
332 }
333 }
334 };
335
336 #define NB_H_FILTER ARRAY_SIZE(bdisp_h_spec)
337 #define NB_V_FILTER ARRAY_SIZE(bdisp_v_spec)
338
339 /* RGB YUV 601 standard conversion */
340 static const u32 bdisp_rgb_to_yuv[] = {
341 0x0e1e8bee, 0x08420419, 0xfb5ed471, 0x08004080,
342 };
343
344 static const u32 bdisp_yuv_to_rgb[] = {
345 0x3324a800, 0xe604ab9c, 0x0004a957, 0x32121eeb,
346 };
This page took 0.040357 seconds and 5 git commands to generate.