These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / 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 };