1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2015, Intel Corporation. 5 */ 6 7 #ifndef __IA_CSS_GC_TYPES_H 8 #define __IA_CSS_GC_TYPES_H 9 10 /* @file 11 * CSS-API header file for Gamma Correction parameters. 12 */ 13 14 #include "isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h" /* FIXME: Needed for ia_css_vamem_type */ 15 16 /* Fractional bits for GAMMA gain */ 17 #define IA_CSS_GAMMA_GAIN_K_SHIFT 13 18 19 /* Number of elements in the gamma table. */ 20 #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2 10 21 #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE BIT(IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2) 22 23 /* Number of elements in the gamma table. */ 24 #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2 8 25 #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE ((1U << IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2) + 1) 26 27 /* Gamma table, used for Y(Luma) Gamma Correction. 28 * 29 * ISP block: GC1 (YUV Gamma Correction) 30 * ISP1: GC1 is used. 31 * (ISP2: GC2(sRGB Gamma Correction) is used.) 32 */ 33 /** IA_CSS_VAMEM_TYPE_1(ISP2300) or 34 IA_CSS_VAMEM_TYPE_2(ISP2400) */ 35 union ia_css_gc_data { 36 u16 vamem_1[IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE]; 37 /** Y(Luma) Gamma table on vamem type 1. u0.8, [0,255] */ 38 u16 vamem_2[IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE]; 39 /** Y(Luma) Gamma table on vamem type 2. u0.8, [0,255] */ 40 }; 41 42 struct ia_css_gamma_table { 43 enum ia_css_vamem_type vamem_type; 44 union ia_css_gc_data data; 45 }; 46 47 /* Gamma Correction configuration (used only for YUV Gamma Correction). 48 * 49 * ISP block: GC1 (YUV Gamma Correction) 50 * ISP1: GC1 is used. 51 * (ISP2: GC2 (sRGB Gamma Correction) is used.) 52 */ 53 struct ia_css_gc_config { 54 u16 gain_k1; /** Gain to adjust U after YUV Gamma Correction. 55 u0.16, [0,65535], 56 default/ineffective 19000(0.29) */ 57 u16 gain_k2; /** Gain to adjust V after YUV Gamma Correction. 58 u0.16, [0,65535], 59 default/ineffective 19000(0.29) */ 60 }; 61 62 /* Chroma Enhancement configuration. 63 * 64 * This parameter specifies range of chroma output level. 65 * The standard range is [0,255] or [16,240]. 66 * 67 * ISP block: CE1 68 * ISP1: CE1 is used. 69 * (ISP2: CE1 is not used.) 70 */ 71 struct ia_css_ce_config { 72 u8 uv_level_min; /** Minimum of chroma output level. 73 u0.8, [0,255], default/ineffective 0 */ 74 u8 uv_level_max; /** Maximum of chroma output level. 75 u0.8, [0,255], default/ineffective 255 */ 76 }; 77 78 /* Multi-Axes Color Correction (MACC) configuration. 79 * 80 * ISP block: MACC2 (MACC by matrix and exponent(ia_css_macc_config)) 81 * (ISP1: MACC1 (MACC by only matrix) is used.) 82 * ISP2: MACC2 is used. 83 */ 84 struct ia_css_macc_config { 85 u8 exp; /** Common exponent of ia_css_macc_table. 86 u8.0, [0,13], default 1, ineffective 1 */ 87 }; 88 89 #endif /* __IA_CSS_GC_TYPES_H */ 90