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