1 #ifndef _MSM_DRM_PP_H_ 2 #define _MSM_DRM_PP_H_ 3 4 #include <linux/types.h> 5 /** 6 * struct drm_msm_pcc_coeff - PCC coefficient structure for each color 7 * component. 8 * @c: constant coefficient. 9 * @r: red coefficient. 10 * @g: green coefficient. 11 * @b: blue coefficient. 12 * @rg: red green coefficient. 13 * @gb: green blue coefficient. 14 * @rb: red blue coefficient. 15 * @rgb: red blue green coefficient. 16 */ 17 18 struct drm_msm_pcc_coeff { 19 __u32 c; 20 __u32 r; 21 __u32 g; 22 __u32 b; 23 __u32 rg; 24 __u32 gb; 25 __u32 rb; 26 __u32 rgb; 27 }; 28 29 /** 30 * struct drm_msm_pcc - pcc feature structure 31 * @flags: for customizing operations 32 * @r: red coefficients. 33 * @g: green coefficients. 34 * @b: blue coefficients. 35 * @r_rr: second order coefficients 36 * @r_gg: second order coefficients 37 * @r_bb: second order coefficients 38 * @g_rr: second order coefficients 39 * @g_gg: second order coefficients 40 * @g_bb: second order coefficients 41 * @b_rr: second order coefficients 42 * @b_gg: second order coefficients 43 * @b_bb: second order coefficients 44 */ 45 #define DRM_MSM_PCC3 46 struct drm_msm_pcc { 47 __u64 flags; 48 struct drm_msm_pcc_coeff r; 49 struct drm_msm_pcc_coeff g; 50 struct drm_msm_pcc_coeff b; 51 __u32 r_rr; 52 __u32 r_gg; 53 __u32 r_bb; 54 __u32 g_rr; 55 __u32 g_gg; 56 __u32 g_bb; 57 __u32 b_rr; 58 __u32 b_gg; 59 __u32 b_bb; 60 }; 61 62 /* struct drm_msm_pa_vlut - picture adjustment vLUT structure 63 * flags: for customizing vlut operation 64 * val: vLUT values 65 */ 66 #define PA_VLUT_SIZE 256 67 struct drm_msm_pa_vlut { 68 __u64 flags; 69 __u32 val[PA_VLUT_SIZE]; 70 }; 71 72 #define PA_HSIC_HUE_ENABLE (1 << 0) 73 #define PA_HSIC_SAT_ENABLE (1 << 1) 74 #define PA_HSIC_VAL_ENABLE (1 << 2) 75 #define PA_HSIC_CONT_ENABLE (1 << 3) 76 /** 77 * struct drm_msm_pa_hsic - pa hsic feature structure 78 * @flags: flags for the feature customization, values can be: 79 * - PA_HSIC_HUE_ENABLE: Enable hue adjustment 80 * - PA_HSIC_SAT_ENABLE: Enable saturation adjustment 81 * - PA_HSIC_VAL_ENABLE: Enable value adjustment 82 * - PA_HSIC_CONT_ENABLE: Enable contrast adjustment 83 * 84 * @hue: hue setting 85 * @saturation: saturation setting 86 * @value: value setting 87 * @contrast: contrast setting 88 */ 89 #define DRM_MSM_PA_HSIC 90 struct drm_msm_pa_hsic { 91 __u64 flags; 92 __u32 hue; 93 __u32 saturation; 94 __u32 value; 95 __u32 contrast; 96 }; 97 98 #define MEMCOL_PROT_HUE (1 << 0) 99 #define MEMCOL_PROT_SAT (1 << 1) 100 #define MEMCOL_PROT_VAL (1 << 2) 101 #define MEMCOL_PROT_CONT (1 << 3) 102 #define MEMCOL_PROT_SIXZONE (1 << 4) 103 #define MEMCOL_PROT_BLEND (1 << 5) 104 /* struct drm_msm_memcol - Memory color feature structure. 105 * Skin, sky, foliage features are supported. 106 * @prot_flags: Bit mask for enabling protection feature. 107 * @color_adjust_p0: Adjustment curve. 108 * @color_adjust_p1: Adjustment curve. 109 * @color_adjust_p2: Adjustment curve. 110 * @blend_gain: Blend gain weightage from othe PA features. 111 * @sat_hold: Saturation hold value. 112 * @val_hold: Value hold info. 113 * @hue_region: Hue qualifier. 114 * @sat_region: Saturation qualifier. 115 * @val_region: Value qualifier. 116 */ 117 #define DRM_MSM_MEMCOL 118 struct drm_msm_memcol { 119 __u64 prot_flags; 120 __u32 color_adjust_p0; 121 __u32 color_adjust_p1; 122 __u32 color_adjust_p2; 123 __u32 blend_gain; 124 __u32 sat_hold; 125 __u32 val_hold; 126 __u32 hue_region; 127 __u32 sat_region; 128 __u32 val_region; 129 }; 130 131 #define DRM_MSM_SIXZONE 132 #define SIXZONE_LUT_SIZE 384 133 #define SIXZONE_HUE_ENABLE (1 << 0) 134 #define SIXZONE_SAT_ENABLE (1 << 1) 135 #define SIXZONE_VAL_ENABLE (1 << 2) 136 /* struct drm_msm_sixzone_curve - Sixzone HSV adjustment curve structure. 137 * @p0: Hue adjustment. 138 * @p1: Saturation/Value adjustment. 139 */ 140 struct drm_msm_sixzone_curve { 141 __u32 p1; 142 __u32 p0; 143 }; 144 145 /* struct drm_msm_sixzone - Sixzone feature structure. 146 * @flags: for feature customization, values can be: 147 * - SIXZONE_HUE_ENABLE: Enable hue adjustment 148 * - SIXZONE_SAT_ENABLE: Enable saturation adjustment 149 * - SIXZONE_VAL_ENABLE: Enable value adjustment 150 * @threshold: threshold qualifier. 151 * @adjust_p0: Adjustment curve. 152 * @adjust_p1: Adjustment curve. 153 * @sat_hold: Saturation hold info. 154 * @val_hold: Value hold info. 155 * @curve: HSV adjustment curve lut. 156 */ 157 struct drm_msm_sixzone { 158 __u64 flags; 159 __u32 threshold; 160 __u32 adjust_p0; 161 __u32 adjust_p1; 162 __u32 sat_hold; 163 __u32 val_hold; 164 struct drm_msm_sixzone_curve curve[SIXZONE_LUT_SIZE]; 165 }; 166 167 #define GAMUT_3D_MODE_17 1 168 #define GAMUT_3D_MODE_5 2 169 #define GAMUT_3D_MODE_13 3 170 171 #define GAMUT_3D_MODE17_TBL_SZ 1229 172 #define GAMUT_3D_MODE5_TBL_SZ 32 173 #define GAMUT_3D_MODE13_TBL_SZ 550 174 #define GAMUT_3D_SCALE_OFF_SZ 16 175 #define GAMUT_3D_SCALEB_OFF_SZ 12 176 #define GAMUT_3D_TBL_NUM 4 177 #define GAMUT_3D_SCALE_OFF_TBL_NUM 3 178 #define GAMUT_3D_MAP_EN (1 << 0) 179 180 /** 181 * struct drm_msm_3d_col - 3d gamut color component structure 182 * @c0: Holds c0 value 183 * @c2_c1: Holds c2/c1 values 184 */ 185 struct drm_msm_3d_col { 186 __u32 c2_c1; 187 __u32 c0; 188 }; 189 /** 190 * struct drm_msm_3d_gamut - 3d gamut feature structure 191 * @flags: flags for the feature values are: 192 * 0 - no map 193 * GAMUT_3D_MAP_EN - enable map 194 * @mode: lut mode can take following values: 195 * - GAMUT_3D_MODE_17 196 * - GAMUT_3D_MODE_5 197 * - GAMUT_3D_MODE_13 198 * @scale_off: Scale offset table 199 * @col: Color component tables 200 */ 201 struct drm_msm_3d_gamut { 202 __u64 flags; 203 __u32 mode; 204 __u32 scale_off[GAMUT_3D_SCALE_OFF_TBL_NUM][GAMUT_3D_SCALE_OFF_SZ]; 205 struct drm_msm_3d_col col[GAMUT_3D_TBL_NUM][GAMUT_3D_MODE17_TBL_SZ]; 206 }; 207 208 #define PGC_TBL_LEN 512 209 #define PGC_8B_ROUND (1 << 0) 210 /** 211 * struct drm_msm_pgc_lut - pgc lut feature structure 212 * @flags: flags for the featue values can be: 213 * - PGC_8B_ROUND 214 * @c0: color0 component lut 215 * @c1: color1 component lut 216 * @c2: color2 component lut 217 */ 218 struct drm_msm_pgc_lut { 219 __u64 flags; 220 __u32 c0[PGC_TBL_LEN]; 221 __u32 c1[PGC_TBL_LEN]; 222 __u32 c2[PGC_TBL_LEN]; 223 }; 224 225 #define IGC_TBL_LEN 256 226 #define IGC_DITHER_ENABLE (1 << 0) 227 /** 228 * struct drm_msm_igc_lut - igc lut feature structure 229 * @flags: flags for the feature customization, values can be: 230 * - IGC_DITHER_ENABLE: Enable dither functionality 231 * @c0: color0 component lut 232 * @c1: color1 component lut 233 * @c2: color2 component lut 234 * @strength: dither strength, considered valid when IGC_DITHER_ENABLE 235 * is set in flags. Strength value based on source bit width. 236 */ 237 struct drm_msm_igc_lut { 238 __u64 flags; 239 __u32 c0[IGC_TBL_LEN]; 240 __u32 c1[IGC_TBL_LEN]; 241 __u32 c2[IGC_TBL_LEN]; 242 __u32 strength; 243 }; 244 245 #define HIST_V_SIZE 256 246 /** 247 * struct drm_msm_hist - histogram feature structure 248 * @flags: for customizing operations 249 * @data: histogram data 250 */ 251 struct drm_msm_hist { 252 __u64 flags; 253 __u32 data[HIST_V_SIZE]; 254 }; 255 256 #define AD4_LUT_GRP0_SIZE 33 257 #define AD4_LUT_GRP1_SIZE 32 258 /* 259 * struct drm_msm_ad4_init - ad4 init structure set by user-space client. 260 * Init param values can change based on tuning 261 * hence it is passed by user-space clients. 262 */ 263 struct drm_msm_ad4_init { 264 __u32 init_param_001[AD4_LUT_GRP0_SIZE]; 265 __u32 init_param_002[AD4_LUT_GRP0_SIZE]; 266 __u32 init_param_003[AD4_LUT_GRP0_SIZE]; 267 __u32 init_param_004[AD4_LUT_GRP0_SIZE]; 268 __u32 init_param_005[AD4_LUT_GRP1_SIZE]; 269 __u32 init_param_006[AD4_LUT_GRP1_SIZE]; 270 __u32 init_param_007[AD4_LUT_GRP0_SIZE]; 271 __u32 init_param_008[AD4_LUT_GRP0_SIZE]; 272 __u32 init_param_009; 273 __u32 init_param_010; 274 __u32 init_param_011; 275 __u32 init_param_012; 276 __u32 init_param_013; 277 __u32 init_param_014; 278 __u32 init_param_015; 279 __u32 init_param_016; 280 __u32 init_param_017; 281 __u32 init_param_018; 282 __u32 init_param_019; 283 __u32 init_param_020; 284 __u32 init_param_021; 285 __u32 init_param_022; 286 __u32 init_param_023; 287 __u32 init_param_024; 288 __u32 init_param_025; 289 __u32 init_param_026; 290 __u32 init_param_027; 291 __u32 init_param_028; 292 __u32 init_param_029; 293 __u32 init_param_030; 294 __u32 init_param_031; 295 __u32 init_param_032; 296 __u32 init_param_033; 297 __u32 init_param_034; 298 __u32 init_param_035; 299 __u32 init_param_036; 300 __u32 init_param_037; 301 __u32 init_param_038; 302 __u32 init_param_039; 303 __u32 init_param_040; 304 __u32 init_param_041; 305 __u32 init_param_042; 306 __u32 init_param_043; 307 __u32 init_param_044; 308 __u32 init_param_045; 309 __u32 init_param_046; 310 __u32 init_param_047; 311 __u32 init_param_048; 312 __u32 init_param_049; 313 __u32 init_param_050; 314 __u32 init_param_051; 315 __u32 init_param_052; 316 __u32 init_param_053; 317 __u32 init_param_054; 318 __u32 init_param_055; 319 __u32 init_param_056; 320 __u32 init_param_057; 321 __u32 init_param_058; 322 __u32 init_param_059; 323 __u32 init_param_060; 324 __u32 init_param_061; 325 __u32 init_param_062; 326 __u32 init_param_063; 327 __u32 init_param_064; 328 __u32 init_param_065; 329 __u32 init_param_066; 330 __u32 init_param_067; 331 __u32 init_param_068; 332 __u32 init_param_069; 333 __u32 init_param_070; 334 __u32 init_param_071; 335 __u32 init_param_072; 336 __u32 init_param_073; 337 __u32 init_param_074; 338 __u32 init_param_075; 339 }; 340 341 /* 342 * struct drm_msm_ad4_cfg - ad4 config structure set by user-space client. 343 * Config param values can vary based on tuning, 344 * hence it is passed by user-space clients. 345 */ 346 struct drm_msm_ad4_cfg { 347 __u32 cfg_param_001; 348 __u32 cfg_param_002; 349 __u32 cfg_param_003; 350 __u32 cfg_param_004; 351 __u32 cfg_param_005; 352 __u32 cfg_param_006; 353 __u32 cfg_param_007; 354 __u32 cfg_param_008; 355 __u32 cfg_param_009; 356 __u32 cfg_param_010; 357 __u32 cfg_param_011; 358 __u32 cfg_param_012; 359 __u32 cfg_param_013; 360 __u32 cfg_param_014; 361 __u32 cfg_param_015; 362 __u32 cfg_param_016; 363 __u32 cfg_param_017; 364 __u32 cfg_param_018; 365 __u32 cfg_param_019; 366 __u32 cfg_param_020; 367 __u32 cfg_param_021; 368 __u32 cfg_param_022; 369 __u32 cfg_param_023; 370 __u32 cfg_param_024; 371 __u32 cfg_param_025; 372 __u32 cfg_param_026; 373 __u32 cfg_param_027; 374 __u32 cfg_param_028; 375 __u32 cfg_param_029; 376 __u32 cfg_param_030; 377 __u32 cfg_param_031; 378 __u32 cfg_param_032; 379 __u32 cfg_param_033; 380 __u32 cfg_param_034; 381 __u32 cfg_param_035; 382 __u32 cfg_param_036; 383 __u32 cfg_param_037; 384 __u32 cfg_param_038; 385 __u32 cfg_param_039; 386 __u32 cfg_param_040; 387 __u32 cfg_param_041; 388 __u32 cfg_param_042; 389 __u32 cfg_param_043; 390 __u32 cfg_param_044; 391 __u32 cfg_param_045; 392 __u32 cfg_param_046; 393 __u32 cfg_param_047; 394 __u32 cfg_param_048; 395 __u32 cfg_param_049; 396 __u32 cfg_param_050; 397 __u32 cfg_param_051; 398 __u32 cfg_param_052; 399 __u32 cfg_param_053; 400 }; 401 402 #define DITHER_MATRIX_SZ 16 403 404 /** 405 * struct drm_msm_dither - dither feature structure 406 * @flags: for customizing operations 407 * @temporal_en: temperal dither enable 408 * @c0_bitdepth: c0 component bit depth 409 * @c1_bitdepth: c1 component bit depth 410 * @c2_bitdepth: c2 component bit depth 411 * @c3_bitdepth: c2 component bit depth 412 * @matrix: dither strength matrix 413 */ 414 struct drm_msm_dither { 415 __u64 flags; 416 __u32 temporal_en; 417 __u32 c0_bitdepth; 418 __u32 c1_bitdepth; 419 __u32 c2_bitdepth; 420 __u32 c3_bitdepth; 421 __u32 matrix[DITHER_MATRIX_SZ]; 422 }; 423 424 /** 425 * struct drm_msm_pa_dither - dspp dither feature structure 426 * @flags: for customizing operations 427 * @strength: dither strength 428 * @offset_en: offset enable bit 429 * @matrix: dither data matrix 430 */ 431 #define DRM_MSM_PA_DITHER 432 struct drm_msm_pa_dither { 433 __u64 flags; 434 __u32 strength; 435 __u32 offset_en; 436 __u32 matrix[DITHER_MATRIX_SZ]; 437 }; 438 439 #endif /* _MSM_DRM_PP_H_ */ 440