• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * @c0_last: color0 lut_last component
237  * @c1_last: color1 lut_last component
238  * @c2_last: color2 lut_last component
239  */
240 struct drm_msm_igc_lut {
241 	__u64 flags;
242 	__u32 c0[IGC_TBL_LEN];
243 	__u32 c1[IGC_TBL_LEN];
244 	__u32 c2[IGC_TBL_LEN];
245 	__u32 strength;
246 	__u32 c0_last;
247 	__u32 c1_last;
248 	__u32 c2_last;
249 };
250 #define LAST_LUT 2
251 
252 #define HIST_V_SIZE 256
253 /**
254  * struct drm_msm_hist - histogram feature structure
255  * @flags: for customizing operations
256  * @data: histogram data
257  */
258 struct drm_msm_hist {
259 	__u64 flags;
260 	__u32 data[HIST_V_SIZE];
261 };
262 
263 #define AD4_LUT_GRP0_SIZE 33
264 #define AD4_LUT_GRP1_SIZE 32
265 /*
266  * struct drm_msm_ad4_init - ad4 init structure set by user-space client.
267  *                           Init param values can change based on tuning
268  *                           hence it is passed by user-space clients.
269  */
270 struct drm_msm_ad4_init {
271 	__u32 init_param_001[AD4_LUT_GRP0_SIZE];
272 	__u32 init_param_002[AD4_LUT_GRP0_SIZE];
273 	__u32 init_param_003[AD4_LUT_GRP0_SIZE];
274 	__u32 init_param_004[AD4_LUT_GRP0_SIZE];
275 	__u32 init_param_005[AD4_LUT_GRP1_SIZE];
276 	__u32 init_param_006[AD4_LUT_GRP1_SIZE];
277 	__u32 init_param_007[AD4_LUT_GRP0_SIZE];
278 	__u32 init_param_008[AD4_LUT_GRP0_SIZE];
279 	__u32 init_param_009;
280 	__u32 init_param_010;
281 	__u32 init_param_011;
282 	__u32 init_param_012;
283 	__u32 init_param_013;
284 	__u32 init_param_014;
285 	__u32 init_param_015;
286 	__u32 init_param_016;
287 	__u32 init_param_017;
288 	__u32 init_param_018;
289 	__u32 init_param_019;
290 	__u32 init_param_020;
291 	__u32 init_param_021;
292 	__u32 init_param_022;
293 	__u32 init_param_023;
294 	__u32 init_param_024;
295 	__u32 init_param_025;
296 	__u32 init_param_026;
297 	__u32 init_param_027;
298 	__u32 init_param_028;
299 	__u32 init_param_029;
300 	__u32 init_param_030;
301 	__u32 init_param_031;
302 	__u32 init_param_032;
303 	__u32 init_param_033;
304 	__u32 init_param_034;
305 	__u32 init_param_035;
306 	__u32 init_param_036;
307 	__u32 init_param_037;
308 	__u32 init_param_038;
309 	__u32 init_param_039;
310 	__u32 init_param_040;
311 	__u32 init_param_041;
312 	__u32 init_param_042;
313 	__u32 init_param_043;
314 	__u32 init_param_044;
315 	__u32 init_param_045;
316 	__u32 init_param_046;
317 	__u32 init_param_047;
318 	__u32 init_param_048;
319 	__u32 init_param_049;
320 	__u32 init_param_050;
321 	__u32 init_param_051;
322 	__u32 init_param_052;
323 	__u32 init_param_053;
324 	__u32 init_param_054;
325 	__u32 init_param_055;
326 	__u32 init_param_056;
327 	__u32 init_param_057;
328 	__u32 init_param_058;
329 	__u32 init_param_059;
330 	__u32 init_param_060;
331 	__u32 init_param_061;
332 	__u32 init_param_062;
333 	__u32 init_param_063;
334 	__u32 init_param_064;
335 	__u32 init_param_065;
336 	__u32 init_param_066;
337 	__u32 init_param_067;
338 	__u32 init_param_068;
339 	__u32 init_param_069;
340 	__u32 init_param_070;
341 	__u32 init_param_071;
342 	__u32 init_param_072;
343 	__u32 init_param_073;
344 	__u32 init_param_074;
345 	__u32 init_param_075;
346 };
347 
348 /*
349  * struct drm_msm_ad4_cfg - ad4 config structure set by user-space client.
350  *                           Config param values can vary based on tuning,
351  *                           hence it is passed by user-space clients.
352  */
353 struct drm_msm_ad4_cfg {
354 	__u32 cfg_param_001;
355 	__u32 cfg_param_002;
356 	__u32 cfg_param_003;
357 	__u32 cfg_param_004;
358 	__u32 cfg_param_005;
359 	__u32 cfg_param_006;
360 	__u32 cfg_param_007;
361 	__u32 cfg_param_008;
362 	__u32 cfg_param_009;
363 	__u32 cfg_param_010;
364 	__u32 cfg_param_011;
365 	__u32 cfg_param_012;
366 	__u32 cfg_param_013;
367 	__u32 cfg_param_014;
368 	__u32 cfg_param_015;
369 	__u32 cfg_param_016;
370 	__u32 cfg_param_017;
371 	__u32 cfg_param_018;
372 	__u32 cfg_param_019;
373 	__u32 cfg_param_020;
374 	__u32 cfg_param_021;
375 	__u32 cfg_param_022;
376 	__u32 cfg_param_023;
377 	__u32 cfg_param_024;
378 	__u32 cfg_param_025;
379 	__u32 cfg_param_026;
380 	__u32 cfg_param_027;
381 	__u32 cfg_param_028;
382 	__u32 cfg_param_029;
383 	__u32 cfg_param_030;
384 	__u32 cfg_param_031;
385 	__u32 cfg_param_032;
386 	__u32 cfg_param_033;
387 	__u32 cfg_param_034;
388 	__u32 cfg_param_035;
389 	__u32 cfg_param_036;
390 	__u32 cfg_param_037;
391 	__u32 cfg_param_038;
392 	__u32 cfg_param_039;
393 	__u32 cfg_param_040;
394 	__u32 cfg_param_041;
395 	__u32 cfg_param_042;
396 	__u32 cfg_param_043;
397 	__u32 cfg_param_044;
398 	__u32 cfg_param_045;
399 	__u32 cfg_param_046;
400 	__u32 cfg_param_047;
401 	__u32 cfg_param_048;
402 	__u32 cfg_param_049;
403 	__u32 cfg_param_050;
404 	__u32 cfg_param_051;
405 	__u32 cfg_param_052;
406 	__u32 cfg_param_053;
407 };
408 
409 #define DITHER_MATRIX_SZ 16
410 
411 /**
412  * struct drm_msm_dither - dither feature structure
413  * @flags: for customizing operations
414  * @temporal_en: temperal dither enable
415  * @c0_bitdepth: c0 component bit depth
416  * @c1_bitdepth: c1 component bit depth
417  * @c2_bitdepth: c2 component bit depth
418  * @c3_bitdepth: c2 component bit depth
419  * @matrix: dither strength matrix
420  */
421 struct drm_msm_dither {
422 	__u64 flags;
423 	__u32 temporal_en;
424 	__u32 c0_bitdepth;
425 	__u32 c1_bitdepth;
426 	__u32 c2_bitdepth;
427 	__u32 c3_bitdepth;
428 	__u32 matrix[DITHER_MATRIX_SZ];
429 };
430 
431 /**
432  * struct drm_msm_pa_dither - dspp dither feature structure
433  * @flags: for customizing operations
434  * @strength: dither strength
435  * @offset_en: offset enable bit
436  * @matrix: dither data matrix
437  */
438 #define DRM_MSM_PA_DITHER
439 struct drm_msm_pa_dither {
440 	__u64 flags;
441 	__u32 strength;
442 	__u32 offset_en;
443 	__u32 matrix[DITHER_MATRIX_SZ];
444 };
445 
446 /**
447  * struct drm_msm_ad4_roi_cfg - ad4 roi params config set
448  * by user-space client.
449  * @h_x - hotizontal direction start
450  * @h_y - hotizontal direction end
451  * @v_x - vertical direction start
452  * @v_y - vertical direction end
453  * @factor_in - the alpha value for inside roi region
454  * @factor_out - the alpha value for outside roi region
455  */
456 #define DRM_MSM_AD4_ROI
457 struct drm_msm_ad4_roi_cfg {
458 	__u32 h_x;
459 	__u32 h_y;
460 	__u32 v_x;
461 	__u32 v_y;
462 	__u32 factor_in;
463 	__u32 factor_out;
464 };
465 
466 /**
467  * struct drm_msm_ad4_manual_str_cfg - ad4 manual strength config set
468  * by user-space client.
469  * @in_str - strength for inside roi region
470  * @out_str - strength for outside roi region
471  */
472 #define DRM_MSM_AD4_MANUAL_STRENGTH
473 struct drm_msm_ad4_manual_str_cfg {
474 	__u32 in_str;
475 	__u32 out_str;
476 };
477 #endif /* _MSM_DRM_PP_H_ */
478