rk3368 lcdc: overlay mode depend on screen color mode
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / iep / iep.h
1 #ifndef _IEP_H_
2 #define _IEP_H_
3
4 #define IEP_IOC_MAGIC 'i'
5
6 #define IEP_SET_PARAMETER_REQ           _IOW(IEP_IOC_MAGIC, 1, unsigned long)
7 #define IEP_SET_PARAMETER_DEINTERLACE   _IOW(IEP_IOC_MAGIC, 2, unsigned long)
8 #define IEP_SET_PARAMETER_ENHANCE       _IOW(IEP_IOC_MAGIC, 3, unsigned long)
9 #define IEP_SET_PARAMETER_CONVERT       _IOW(IEP_IOC_MAGIC, 4, unsigned long)
10 #define IEP_SET_PARAMETER_SCALE         _IOW(IEP_IOC_MAGIC, 5, unsigned long)
11 #define IEP_GET_RESULT_SYNC             _IOW(IEP_IOC_MAGIC, 6, unsigned long)
12 #define IEP_GET_RESULT_ASYNC            _IOW(IEP_IOC_MAGIC, 7, unsigned long)
13 #define IEP_SET_PARAMETER               _IOW(IEP_IOC_MAGIC, 8, unsigned long)
14 #define IEP_RELEASE_CURRENT_TASK        _IOW(IEP_IOC_MAGIC, 9, unsigned long)
15
16 #ifdef CONFIG_COMPAT
17 #define COMPAT_IEP_SET_PARAMETER_REQ            _IOW(IEP_IOC_MAGIC, 1, u32)
18 #define COMPAT_IEP_SET_PARAMETER_DEINTERLACE    _IOW(IEP_IOC_MAGIC, 2, u32)
19 #define COMPAT_IEP_SET_PARAMETER_ENHANCE        _IOW(IEP_IOC_MAGIC, 3, u32)
20 #define COMPAT_IEP_SET_PARAMETER_CONVERT        _IOW(IEP_IOC_MAGIC, 4, u32)
21 #define COMPAT_IEP_SET_PARAMETER_SCALE          _IOW(IEP_IOC_MAGIC, 5, u32)
22 #define COMPAT_IEP_GET_RESULT_SYNC              _IOW(IEP_IOC_MAGIC, 6, u32)
23 #define COMPAT_IEP_GET_RESULT_ASYNC             _IOW(IEP_IOC_MAGIC, 7, u32)
24 #define COMPAT_IEP_SET_PARAMETER                _IOW(IEP_IOC_MAGIC, 8, u32)
25 #define COMPAT_IEP_RELEASE_CURRENT_TASK         _IOW(IEP_IOC_MAGIC, 9, u32)
26 #endif
27
28 /* Driver information */
29 #define DRIVER_DESC             "IEP Device Driver"
30 #define DRIVER_NAME             "iep"
31
32 #define DEBUG
33 #ifdef DEBUG
34 #define iep_debug(level, fmt, args...)                          \
35         do {                                                    \
36                 if (debug >= level)                             \
37                         pr_info("%s:%d: " fmt,                  \
38                                  __func__, __LINE__, ##args);   \
39         } while (0)
40 #else
41 #define iep_debug(level, fmt, args...)
42 #endif
43
44 #define iep_debug_enter() vpu_debug(4, "enter\n")
45 #define iep_debug_leave() vpu_debug(4, "leave\n")
46
47 #define iep_err(fmt, args...)                           \
48                 pr_err("%s:%d: " fmt, __func__, __LINE__, ##args)
49
50 /* Logging */
51 #define IEP_DEBUG 0
52 #if IEP_DEBUG
53 #define IEP_DBG(format, args...)        printk("%s: " format, DRIVER_NAME, ## args)
54 #else
55 #define IEP_DBG(format, args...)
56 #endif
57
58 #define IEP_INFORMATION 1
59 #if IEP_INFORMATION
60 #define IEP_INFO(format, args...)       printk(format, ## args)
61 #else
62 #define IEP_INFO(format, args...)
63 #endif
64
65 #define IEP_ERR(format, args...)        printk(KERN_ERR "%s: " format, DRIVER_NAME, ## args)
66 #define IEP_WARNING(format, args...)    printk(KERN_WARNING "%s: " format, DRIVER_NAME, ## args)
67
68 enum {
69         yuv2rgb_BT_601_l = 0x0,     /* BT.601_1 */
70         yuv2rgb_BT_601_f = 0x1,     /* BT.601_f */
71         yuv2rgb_BT_709_l = 0x2,     /* BT.709_1 */
72         yuv2rgb_BT_709_f = 0x3,     /* BT.709_f */
73 };
74
75 enum {
76         rgb2yuv_BT_601_l = 0x0,     /* BT.601_1 */
77         rgb2yuv_BT_601_f = 0x1,     /* BT.601_f */
78         rgb2yuv_BT_709_l = 0x2,     /* BT.709_1 */
79         rgb2yuv_BT_709_f = 0x3,     /* BT.709_f */
80 };
81
82 enum {
83         dein_mode_bypass_dis         = 0x0,
84         dein_mode_I4O2               = 0x1,
85         dein_mode_I4O1B              = 0x2,
86         dein_mode_I4O1T              = 0x3,
87         dein_mode_I2O1B              = 0x4,
88         dein_mode_I2O1T              = 0x5,
89         dein_mode_bypass             = 0x6,
90 };
91
92 enum IEP_FIELD_ORDER {
93         FIELD_ORDER_TOP_FIRST,
94         FIELD_ORDER_BOTTOM_FIRST
95 };
96
97 enum IEP_YUV_DEINTERLACE_MODE {
98         IEP_DEINTERLACE_MODE_DISABLE,
99         IEP_DEINTERLACE_MODE_I2O1,
100         IEP_DEINTERLACE_MODE_I4O1,
101         IEP_DEINTERLACE_MODE_I4O2,
102         IEP_DEINTERLACE_MODE_BYPASS
103 };
104
105 enum {
106         rgb_enhance_bypass          = 0x0,
107         rgb_enhance_denoise         = 0x1,
108         rgb_enhance_detail          = 0x2,
109         rgb_enhance_edge            = 0x3,
110 };/* for rgb_enhance_mode */
111
112 enum {
113         rgb_contrast_CC_P_DDE          = 0x0, /* cg prior to dde */
114         rgb_contrast_DDE_P_CC          = 0x1, /* dde prior to cg */
115 }; /* for rgb_contrast_enhance_mode */
116
117 enum {
118         black_screen                   = 0x0,
119         blue_screen                    = 0x1,
120         color_bar                      = 0x2,
121         normal_mode                    = 0x3,
122 }; /* for video mode */
123
124 /*
125           Alpha    Red     Green   Blue  
126 {  4, 32, {{32,24,   24,16,  16, 8,  8, 0 }}, GGL_RGBA },    IEP_FORMAT_ARGB_8888
127 {  4, 32, {{32,24,   8, 0,  16, 8,  24,16 }}, GGL_RGB  },    IEP_FORMAT_ABGR_8888
128 {  4, 32, {{ 8, 0,  32,24,  24,16,  16, 8 }}, GGL_RGB  },    IEP_FORMAT_RGBA_8888
129 {  4, 32, {{ 8, 0,  16, 8,  24,16,  32,24 }}, GGL_BGRA },    IEP_FORMAT_BGRA_8888
130 {  2, 16, {{ 0, 0,  16,11,  11, 5,   5, 0 }}, GGL_RGB  },    IEP_FORMAT_RGB_565
131 {  2, 16, {{ 0, 0,   5, 0,  11, 5,  16,11 }}, GGL_RGB  },    IEP_FORMAT_RGB_565
132 */
133 enum {
134         IEP_FORMAT_ARGB_8888    = 0x0,
135         IEP_FORMAT_ABGR_8888    = 0x1,
136         IEP_FORMAT_RGBA_8888    = 0x2,
137         IEP_FORMAT_BGRA_8888    = 0x3,
138         IEP_FORMAT_RGB_565      = 0x4,
139         IEP_FORMAT_BGR_565      = 0x5,
140
141         IEP_FORMAT_YCbCr_422_SP = 0x10,
142         IEP_FORMAT_YCbCr_422_P  = 0x11,
143         IEP_FORMAT_YCbCr_420_SP = 0x12,
144         IEP_FORMAT_YCbCr_420_P  = 0x13,
145         IEP_FORMAT_YCrCb_422_SP = 0x14,
146         IEP_FORMAT_YCrCb_422_P  = 0x15,/* same as IEP_FORMAT_YCbCr_422_P */
147         IEP_FORMAT_YCrCb_420_SP = 0x16,
148         IEP_FORMAT_YCrCb_420_P  = 0x17,/* same as IEP_FORMAT_YCbCr_420_P */
149 }; /* for format */
150
151 struct iep_img
152 {
153         u16 act_w;      /* act_width */
154         u16 act_h;      /* act_height */
155         s16 x_off;      /* x offset for the vir,word unit */
156         s16 y_off;      /* y offset for the vir,word unit */
157
158         u16 vir_w;      /* unit :pix */
159         u16 vir_h;      /* unit :pix */
160         u32 format;
161         u32 mem_addr;
162         u32 uv_addr;
163         u32 v_addr;
164
165         u8 rb_swap;     /* not be used */
166         u8 uv_swap;     /* not be used */
167
168         u8 alpha_swap;  /* not be used */
169 };
170
171
172 struct IEP_MSG {
173         struct iep_img src;
174         struct iep_img dst;
175
176         struct iep_img src1;   
177         struct iep_img dst1;
178
179         struct iep_img src_itemp;
180         struct iep_img src_ftemp;
181
182         struct iep_img dst_itemp;
183         struct iep_img dst_ftemp;
184
185         u8 dither_up_en;
186         u8 dither_down_en;/* not to be used */
187
188         u8 yuv2rgb_mode;
189         u8 rgb2yuv_mode;
190
191         u8 global_alpha_value;
192
193         u8 rgb2yuv_clip_en;
194         u8 yuv2rgb_clip_en;
195
196         u8 lcdc_path_en;
197         s32 off_x;
198         s32 off_y;
199         s32 width;
200         s32 height;
201         s32 layer;
202
203         u8 yuv_3D_denoise_en;
204
205         /* yuv color enhance */
206         u8 yuv_enhance_en;
207         s32 sat_con_int;
208         s32 contrast_int;
209         s32 cos_hue_int;
210         s32 sin_hue_int;
211         s8 yuv_enh_brightness;  /*-32<brightness<31*/
212         u8 video_mode;          /*0-3*/
213         u8 color_bar_y; /*0-127*/
214         u8 color_bar_u; /*0-127*/
215         u8 color_bar_v; /*0-127*/
216
217
218         u8 rgb_enhance_en;/*i don't konw what is used*/
219
220         u8 rgb_color_enhance_en;/*sw_rgb_color_enh_en*/
221         u32 rgb_enh_coe;
222
223         u8 rgb_enhance_mode;/*sw_rgb_enh_sel,dde sel*/
224
225         u8 rgb_cg_en;/*sw_rgb_con_gam_en*/
226         u32 cg_tab[192];
227
228         /*sw_con_gam_order;0 cg prior to dde,1 dde prior to cg*/
229         u8 rgb_contrast_enhance_mode;
230
231         s32 enh_threshold;
232         s32 enh_alpha;
233         s32 enh_radius;
234
235         u8 scale_up_mode;
236
237         u8 field_order;
238         u8 dein_mode;
239         /*DIL HF*/
240         u8 dein_high_fre_en;
241         u8 dein_high_fre_fct;
242         /*DIL EI*/
243         u8 dein_ei_mode;
244         u8 dein_ei_smooth;
245         u8 dein_ei_sel;
246         u8 dein_ei_radius;/*when dein_ei_sel=0 will be used*/
247
248         u8 vir_addr_enable;
249
250         void *base;
251 };
252
253 #endif