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