1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
|
/*++
* linux/drivers/video/wmt/com-vpp.h
* WonderMedia video post processor (VPP) driver
*
* Copyright c 2014 WonderMedia Technologies, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* WonderMedia Technologies, Inc.
* 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
--*/
#ifndef COM_VPP_H
#define COM_VPP_H
#ifdef __KERNEL__
#include <linux/types.h>
#include <linux/fb.h>
#include <asm/io.h>
#include <mach/common_def.h>
#include <mach/com-video.h>
#else
#include "com-video.h"
#ifdef CFG_LOADER
#include "com-fb.h"
#endif
#endif
#define VPP_NEW_FBUF_MANAGER
#define VPP_AHB_CLK 250000000
#ifdef CONFIG_MAX_RESX
#define VPP_HD_MAX_RESX CONFIG_MAX_RESX
#else
#define VPP_HD_MAX_RESX 1920
#endif
#ifdef CONFIG_MAX_RESY
#define VPP_HD_MAX_RESY CONFIG_MAX_RESY
#else
#define VPP_HD_MAX_RESY 1200
#endif
#ifdef CONFIG_DEFAULT_RESX
#define VPP_HD_DISP_RESX CONFIG_DEFAULT_RESX
#else
#define VPP_HD_DISP_RESX 1024
#endif
#ifdef CONFIG_DEFAULT_RESY
#define VPP_HD_DISP_RESY CONFIG_DEFAULT_RESY
#else
#define VPP_HD_DISP_RESY 768
#endif
#ifdef CONFIG_DEFAULT_FPS
#define VPP_HD_DISP_FPS CONFIG_DEFAULT_FPS
#else
#define VPP_HD_DISP_FPS 60
#endif
#define VPP_HD_DISP_PIXCLK 65000000
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
#define VPP_YUV_BLACK 0x008080 /* Y, Cr, Cb */
#define VPP_YUV_WHITE 0xff8080
#define VPP_YUV_RED 0x51f05a
#define VPP_YUV_GREEN 0x902235
#define VPP_YUV_BLUE 0x286df0
#define VPP_RGB32_BLACK 0x00000000
#define VPP_COL_RGB32_BLACK 0x000000
#define VPP_COL_RGB32_WHITE 0xFFFFFF
#define VPP_COL_RGB32_RED 0xFF0000
#define VPP_COL_RGB32_GREEN 0x00FF00
#define VPP_COL_RGB32_BLUE 0x0000FF
#define VPP_COL_BLACK 0x008080 /* Y, Cr, Cb */
#define VPP_COL_WHITE 0xff8080
#define VPP_COL_RED 0x41d464
#define VPP_COL_GREEN 0x902235
#define VPP_COL_BLUE 0x2372d4
#define VPP_MAGNUM(s, e) ((2^((s)-(e)+1))-1)
#define WMT_FB_COLFMT(a) (a & 0xFF)
enum vpp_fbuf_s {
VPP_FBUF_GOVR_1,
VPP_FBUF_GOVR_2,
VPP_FBUF_SCLR_1,
VPP_FBUF_SCLR_2,
VPP_FBUF_MAX
};
#define vpp_fbuf_t enum vpp_fbuf_s
enum vpp_flag_s {
VPP_FLAG_NULL = 0,
VPP_FLAG_ENABLE = 1,
VPP_FLAG_DISABLE = 0,
VPP_FLAG_TRUE = 1,
VPP_FLAG_FALSE = 0,
VPP_FLAG_ZERO = 0,
VPP_FLAG_ONE = 1,
VPP_FLAG_SUCCESS = 1,
VPP_FLAG_ERROR = 0,
VPP_FLAG_RD = 1,
VPP_FLAG_WR = 0,
};
#define vpp_flag_t enum vpp_flag_s
enum vpp_mod_s {
VPP_MOD_GOVRH2,
VPP_MOD_GOVRH,
VPP_MOD_DISP,
VPP_MOD_GOVW,
VPP_MOD_GOVM,
VPP_MOD_SCL,
VPP_MOD_SCLW,
VPP_MOD_VPU,
VPP_MOD_VPUW,
VPP_MOD_PIP,
VPP_MOD_VPPM,
VPP_MOD_LCDC,
VPP_MOD_CURSOR,
VPP_MOD_MAX
};
#define vpp_mod_t enum vpp_mod_s
enum vpp_vout_s {
VPP_VOUT_NONE = 0,
VPP_VOUT_SDA = 1,
VPP_VOUT_LCD = 2,
VPP_VOUT_DVI = 3,
VPP_VOUT_HDMI = 4,
VPP_VOUT_DVO2HDMI = 5,
VPP_VOUT_LVDS = 6,
VPP_VOUT_VGA = 7,
VPP_VOUT_FBDEV = 8,
VPP_VOUT_VIRDISP = 9,
VPP_VOUT_MAX
};
#define vpp_vout_t enum vpp_vout_s
enum vpp_display_format_s {
VPP_DISP_FMT_FRAME, /* Progressive */
VPP_DISP_FMT_FIELD, /* Interlace */
VPP_DISP_FMT_MAX,
};
#define vpp_display_format_t enum vpp_display_format_s
enum vpp_media_format_s {
VPP_MEDIA_FMT_MPEG,
VPP_MEDIA_FMT_H264,
VPP_MEDIA_FMT_MAX,
};
#define vpp_media_format_t enum vpp_media_format_s
enum vpp_csc_s { /* don't change this order */
VPP_CSC_YUV2RGB2_MIN,
VPP_CSC_YUV2RGB_SDTV_0_255 = VPP_CSC_YUV2RGB2_MIN,
VPP_CSC_YUV2RGB_SDTV_16_235,
VPP_CSC_YUV2RGB_HDTV_0_255,
VPP_CSC_YUV2RGB_HDTV_16_235,
VPP_CSC_YUV2RGB_JFIF_0_255,
VPP_CSC_YUV2RGB_SMPTE170M,
VPP_CSC_YUV2RGB_SMPTE240M,
VPP_CSC_RGB2YUV_MIN,
VPP_CSC_RGB2YUV_SDTV_0_255 = VPP_CSC_RGB2YUV_MIN,
VPP_CSC_RGB2YUV_SDTV_16_235,
VPP_CSC_RGB2YUV_HDTV_0_255,
VPP_CSC_RGB2YUV_HDTV_16_235,
VPP_CSC_RGB2YUV_JFIF_0_255,
VPP_CSC_RGB2YUV_SMPTE170M,
VPP_CSC_RGB2YUV_SMPTE240M,
VPP_CSC_RGB2YUV_JFIF_VT1625,
VPP_CSC_MAX,
VPP_CSC_BYPASS
};
#define vpp_csc_t enum vpp_csc_s
enum vpp_reglevel_s {
VPP_REG_LEVEL_1,
VPP_REG_LEVEL_2,
VPP_REG_LEVEL_MAX,
};
#define vpp_reglevel_t enum vpp_reglevel_s
enum vpp_datawidht_s {
VPP_DATAWIDHT_12,
VPP_DATAWIDHT_24,
VPP_DATAWIDHT_MAX,
};
#define vpp_datawidht_t enum vpp_datawidht_s
enum vpp_tvsys_s {
VPP_TVSYS_NTSC,
VPP_TVSYS_NTSCJ,
VPP_TVSYS_NTSC443,
VPP_TVSYS_PAL,
VPP_TVSYS_PALM,
VPP_TVSYS_PAL60,
VPP_TVSYS_PALN,
VPP_TVSYS_PALNC,
VPP_TVSYS_720P,
VPP_TVSYS_1080I,
VPP_TVSYS_1080P,
VPP_TVSYS_MAX
};
#define vpp_tvsys_t enum vpp_tvsys_s
enum vpp_tvconn_s {
VPP_TVCONN_YCBCR,
VPP_TVCONN_SCART,
VPP_TVCONN_YPBPR,
VPP_TVCONN_VGA,
VPP_TVCONN_SVIDEO,
VPP_TVCONN_CVBS,
VPP_TVCONN_MAX
};
#define vpp_tvconn_t enum vpp_tvconn_s
#define VPP_OPT_INTERLACE 0x01
#define VPP_DVO_SYNC_POLAR_HI 0x08
#define VPP_DVO_VSYNC_POLAR_HI 0x10
struct vpp_clock_s {
int read_cycle;
unsigned int total_pixel_of_line;
unsigned int begin_pixel_of_active;
unsigned int end_pixel_of_active;
unsigned int total_line_of_frame;
unsigned int begin_line_of_active;
unsigned int end_line_of_active;
unsigned int hsync;
unsigned int vsync;
unsigned int line_number_between_VBIS_VBIE;
unsigned int line_number_between_PVBI_VBIS;
};
#define vpp_clock_t struct vpp_clock_s
struct vpp_scale_s {
vdo_framebuf_t src_fb;
vdo_framebuf_t dst_fb;
};
#define vpp_scale_t struct vpp_scale_s
struct vpp_scale_overlap_s {
int mode;
vdo_framebuf_t src_fb;
vdo_framebuf_t src2_fb;
vdo_framebuf_t dst_fb;
};
#define vpp_scale_overlap_t struct vpp_scale_overlap_s
struct vpp_overlap_s {
unsigned int alpha_src_type:2; /* 0-mif1,1-mif2,2-fix */
unsigned int alpha_src:8;
unsigned int alpha_dst_type:2; /* 0-mif1,1-mif2,2-fix */
unsigned int alpha_dst:8;
unsigned int alpha_swap:1; /* 0-(alpha,1-alpha),1:(1-alpha,alpha) */
unsigned int color_key_from:2; /* 0-RMIF1,1-RMIF2 */
unsigned int color_key_comp:2; /* 0-888,1-777,2-666,3-555 */
unsigned int color_key_mode:3; /* (Non-Hit,Hit):0/1-(alpha,alpha),
2-(alpha,pix1), 3-(pix1,alpha),4-(alpha,pix2),
5-(pix2,alpha),6-(pix1,pix2),7-(pix2,pix1) */
unsigned int reserved:4;
unsigned int color_key; /* ARGB */
};
#define vpp_overlap_t struct vpp_overlap_s
#define VPP_VOUT_STS_REGISTER 0x01
#define VPP_VOUT_STS_ACTIVE 0x02
#define VPP_VOUT_STS_PLUGIN 0x04
#define VPP_VOUT_STS_EDID 0x08
#define VPP_VOUT_STS_BLANK 0x10
#define VPP_VOUT_STS_POWERDN 0x20
#define VPP_VOUT_STS_CONTENT_PROTECT 0x40
#define VPP_VOUT_STS_FB 0xF00
#define VPP_VOUT_ARG_NUM 5
struct vpp_vout_info_s {
enum vpp_vout_s mode[VPP_VOUT_ARG_NUM];
unsigned int status[VPP_VOUT_ARG_NUM];
};
#define vpp_vout_info_t struct vpp_vout_info_s
struct vpp_vout_parm_s {
int num;
int arg;
};
#define vpp_vout_parm_t struct vpp_vout_parm_s
#define VOUT_OPT_BLANK BIT(8)
#define VPP_CAP_DUAL_DISPLAY BIT(0)
struct vpp_cap_s {
unsigned int chip_id;
unsigned int version;
unsigned int resx_max;
unsigned int resy_max;
unsigned int pixel_clk;
unsigned int module;
unsigned int option;
};
#define vpp_cap_t struct vpp_cap_s
struct vpp_i2c_s {
unsigned int addr;
unsigned int index;
unsigned int val;
};
#define vpp_i2c_t struct vpp_i2c_s
struct vpp_mod_fbinfo_s {
vpp_mod_t mod;
int read;
vdo_framebuf_t fb;
};
#define vpp_mod_fbinfo_t struct vpp_mod_fbinfo_s
struct vpp_vmode_parm_s {
unsigned int resx;
unsigned int resy;
unsigned int fps;
unsigned int option;
};
#define vpp_vmode_parm_t struct vpp_vmode_parm_s
#define VPP_VOUT_VMODE_NUM 20
struct vpp_vout_vmode_s {
vpp_vout_t mode;
int num;
vpp_vmode_parm_t parm[VPP_VOUT_VMODE_NUM];
};
#define vpp_vout_vmode_t struct vpp_vout_vmode_s
struct vpp_vout_edid_s {
vpp_vout_t mode;
int size;
char *buf;
};
#define vpp_vout_edid_t struct vpp_vout_edid_s
struct vpp_vout_cp_info_s {
int num;
unsigned int bksv[2];
};
#define vpp_vout_cp_info_t struct vpp_vout_cp_info_s
#define VPP_VOUT_CP_NUM 336
struct vpp_vout_cp_key_s {
char key[VPP_VOUT_CP_NUM];
};
#define vpp_vout_cp_key_t struct vpp_vout_cp_key_s
struct vpp_mod_parm_t {
vpp_mod_t mod;
int read;
unsigned int parm;
};
#define VPPIO_MAGIC 'f'
/* VPP common ioctl command */
#define VPPIO_VPP_BASE 0x0
#define VPPIO_VPPGET_INFO _IOR(VPPIO_MAGIC, VPPIO_VPP_BASE + 0, vpp_cap_t)
#define VPPIO_VPPSET_INFO _IOW(VPPIO_MAGIC, VPPIO_VPP_BASE + 0, vpp_cap_t)
#define VPPIO_I2CSET_BYTE _IOW(VPPIO_MAGIC, VPPIO_VPP_BASE + 1, vpp_i2c_t)
#define VPPIO_I2CGET_BYTE _IOR(VPPIO_MAGIC, VPPIO_VPP_BASE + 1, vpp_i2c_t)
#define VPPIO_MODSET_CSC \
_IOW(VPPIO_MAGIC, VPPIO_VPP_BASE + 2, struct vpp_mod_parm_t)
#define VPPIO_MODULE_FBINFO \
_IOWR(VPPIO_MAGIC, VPPIO_VPP_BASE + 6, vpp_mod_fbinfo_t)
#define VPPIO_STREAM_ENABLE _IO(VPPIO_MAGIC, VPPIO_VPP_BASE + 12)
#define VPPIO_STREAM_GETFB \
_IOR(VPPIO_MAGIC, VPPIO_VPP_BASE + 13, vdo_framebuf_t)
#define VPPIO_STREAM_PUTFB \
_IOW(VPPIO_MAGIC, VPPIO_VPP_BASE + 13, vdo_framebuf_t)
#define VPPIO_MULTIVD_ENABLE _IO(VPPIO_MAGIC, VPPIO_VPP_BASE + 15)
/* VOUT ioctl command */
#define VPPIO_VOUT_BASE 0x10
#define VPPIO_VOGET_INFO _IOR(VPPIO_MAGIC, VPPIO_VOUT_BASE + 0, vpp_vout_info_t)
#define VPPIO_VOGET_HDMI_3D \
_IOR(VPPIO_MAGIC, VPPIO_VOUT_BASE + 1, struct vpp_vout_parm_s)
#define VPPIO_VOUT_VMODE \
_IOWR(VPPIO_MAGIC, VPPIO_VOUT_BASE + 7, vpp_vout_vmode_t)
#define VPPIO_VOGET_EDID _IOR(VPPIO_MAGIC, VPPIO_VOUT_BASE + 8, vpp_vout_edid_t)
#define VPPIO_VOGET_CP_INFO \
_IOR(VPPIO_MAGIC, VPPIO_VOUT_BASE + 9, vpp_vout_cp_info_t)
#define VPPIO_VOSET_CP_KEY \
_IOW(VPPIO_MAGIC, VPPIO_VOUT_BASE + 10, vpp_vout_cp_key_t)
#define VPPIO_VOSET_AUDIO_PASSTHRU _IO(VPPIO_MAGIC, VPPIO_VOUT_BASE + 11)
#define VPPIO_VOSET_VIRTUAL_FBDEV _IO(VPPIO_MAGIC, VPPIO_VOUT_BASE + 13)
/* SCL ioctl command */
#define VPPIO_SCL_BASE 0x60
#define VPPIO_SCL_SCALE _IOWR(VPPIO_MAGIC, VPPIO_SCL_BASE + 0, vpp_scale_t)
#define VPPIO_SCL_SCALE_ASYNC \
_IOWR(VPPIO_MAGIC, VPPIO_SCL_BASE + 2, vpp_scale_t)
#define VPPIO_SCL_SCALE_FINISH _IO(VPPIO_MAGIC, VPPIO_SCL_BASE + 3)
#define VPPIO_SCLSET_OVERLAP \
_IOW(VPPIO_MAGIC, VPPIO_SCL_BASE + 4, vpp_overlap_t)
#define VPPIO_SCL_SCALE_OVERLAP \
_IOWR(VPPIO_MAGIC, VPPIO_SCL_BASE + 5, vpp_scale_overlap_t)
#define VPPIO_MAX 0x70
#endif /* COM_VPP_H */
|