From: Gjorgji Rosikopulos <gjorgjix.rosikopulos@xxxxxxxxx> ISP parameters passed to the “keembay-metadata-params” metadata output video node Signed-off-by: Gjorgji Rosikopulos <gjorgjix.rosikopulos@xxxxxxxxx> Co-developed-by: Ivan Dimitrov <ivanx.dimitrov@xxxxxxxxx> Signed-off-by: Ivan Dimitrov <ivanx.dimitrov@xxxxxxxxx> Co-developed-by: Martina Krasteva <martinax.krasteva@xxxxxxxxx> Signed-off-by: Martina Krasteva <martinax.krasteva@xxxxxxxxx> Acked-by: Paul J. Murphy <paul.j.murphy@xxxxxxxxx> Acked-by: Daniele Alessandrelli <daniele.alessandrelli@xxxxxxxxx> --- MAINTAINERS | 1 + include/uapi/linux/keembay-isp-ctl.h | 796 +++++++++++++++++++++++++++++++++++ 2 files changed, 797 insertions(+) create mode 100644 include/uapi/linux/keembay-isp-ctl.h diff --git a/MAINTAINERS b/MAINTAINERS index 76082714a76f..955f9f6a195d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1973,6 +1973,7 @@ S: Maintained T: git git://linuxtv.org/media_tree.git F: Documentation/devicetree/bindings/media/intel,keembay-camera.yaml F: drivers/media/platform/keembay-camera/ +F: include/uapi/linux/keembay-isp-ctl.h ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT M: Lennert Buytenhek <kernel@xxxxxxxxxxxxxx> diff --git a/include/uapi/linux/keembay-isp-ctl.h b/include/uapi/linux/keembay-isp-ctl.h new file mode 100644 index 000000000000..86e1654067f0 --- /dev/null +++ b/include/uapi/linux/keembay-isp-ctl.h @@ -0,0 +1,796 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/* + * Intel Keem Bay camera control parameters and statistics + * + * Copyright (C) 2021 Intel Corporation + */ +#ifndef KEEMBAY_ISP_CTL_H +#define KEEMBAY_ISP_CTL_H + +#include <linux/types.h> +#include <linux/videodev2.h> + +#define KMB_CAM_MAX_EXPOSURES 3 + +/* Table max sizes */ +#define KMB_CAM_LCA_MESH_SIZE (32 * 24) +#define KMB_CAM_SHARPEN_RADIAL_SIZE 256 +#define KMB_CAM_LUT3D_SIZE (16 * 16 * 16 * 4) +#define KMB_CAM_LSC_SIZE ((64 + 4) * 64 * 4) +#define KMB_CAM_GAMMA_SIZE (512 * 4) +#define KMB_CAM_STATIC_DEFECT_SIZE 1000 +#define KMB_CAM_CHROMA_LUT_SIZE 1024 +#define KMB_CAM_WARP_MESH_SIZE (480 * 270) +#define KMB_CAM_HDR_TM_LUTS_SIZE (((67 * 16) + 63) & ~63) + +/* Statistics max sizes */ +#define KMB_CAM_AE_AWB_STATS_SIZE (64 * 64) +#define KMB_CAM_AF_STATS_SIZE (64 * 64) +#define KMB_CAM_HIST_LUMA_SIZE 256 +#define KMB_CAM_HIST_RGB_SIZE (3 * 128) +#define KMB_CAM_FLICKER_ROWS_SIZE (65535 + 1) /* align to 64 */ +#define MAX_DHZ_AIRLIGHT_STATS_SIZE (4 * 128) + +/** + * enum kmb_vpu_isp_bayer_order - KMB sensor Bayer arrangement format types + * + * @KMB_ISP_BAYER_ORDER_GRBG: Gr R B Gr + * @KMB_ISP_BAYER_ORDER_RGGB: R Gr Gr B + * @KMB_ISP_BAYER_ORDER_GBRG: Gr B R Gr + * @KMB_ISP_BAYER_ORDER_BGGR: B Gr Gr R + */ +enum kmb_isp_bayer_order { + KMB_ISP_BAYER_ORDER_GRBG = 0, + KMB_ISP_BAYER_ORDER_RGGB = 1, + KMB_ISP_BAYER_ORDER_GBRG = 2, + KMB_ISP_BAYER_ORDER_BGGR = 3, +} __packed; + +/** + * struct kmb_blc_params - KMB Black Level Correction parameters + * + * @coeff1: Black level correction coefficient parameter. Range [0 - 4096] + * @coeff2: Black level correction coefficient parameter. Range [0 - 4096] + * @coeff3: Black level correction coefficient parameter. Range [0 - 4096] + * @coeff4: Black level correction coefficient parameter. Range [0 - 4096] + */ +struct kmb_blc_params { + __u32 coeff1; + __u32 coeff2; + __u32 coeff3; + __u32 coeff4; +} __packed; + +/** + * struct kmb_sigma_dns_params - KMB Sigma Denoise parameters + * + * @noise: Sigma denoise noise parameter. Range [0 - 65535] + * @threshold1: Sigma denoise min threshold1 parameter. Range [0 - 255] + * @threshold2: Sigma denoise max threshold2 parameter. Range [0 - 255] + * @threshold3: Sigma denoise min threshold3 parameter. Range [0 - 255] + * @threshold4: Sigma denoise max threshold4 parameter. Range [0 - 255] + * @threshold5: Sigma denoise min threshold5 parameter. Range [0 - 255] + * @threshold6: Sigma denoise max threshold6 parameter. Range [0 - 255] + * @threshold7: Sigma denoise min threshold7 parameter. Range [0 - 255] + * @threshold8: Sigma denoise max threshold8 parameter. Range [0 - 255] + */ +struct kmb_sigma_dns_params { + __u32 noise; + __u32 threshold1; + __u32 threshold2; + __u32 threshold3; + __u32 threshold4; + __u32 threshold5; + __u32 threshold6; + __u32 threshold7; + __u32 threshold8; +} __packed; + +/** + * struct kmb_lsc_params - KMB Lens Shading Correction parameters + * + * @threshold: Lens shading correction threshold parameter + * @width: Lens shading correction gain1 parameter. Range [1 - 64]. + * Must be a multiple of 4 + * @height: Lens shading correction gain2 parameter. Range [1 - 64]. + * Must be an even number + * @gain_mesh: Lens shading correction gain mesh table + */ +struct kmb_lsc_params { + __u32 threshold; + __u32 width; + __u32 height; + __u8 gain_mesh[KMB_CAM_LSC_SIZE]; +} __packed; + +/** + * struct kmb_raw_params - KMB Raw parameters + * + * @awb_stats_en: Enable AE/AWB stats output + * @awb_rgb_hist_en: Enable RGB histogram output + * @af_stats_en: Enable AF stats output + * @luma_hist_en: Enable Luma histogram output + * @flicker_accum_en: Enable flicker detection row accumulation output + * @bad_pixel_fix_en: Enable Hot/Cold pixel suppression + * @grgb_imb_en: Enable Gr/Gb imbalance correction + * @mono_imbalance_en: Enable mono imbalance correction + * @gain1: Raw gain1 parameter + * @gain2: Raw gain2 parameter + * @gain3: Raw gain3 parameter + * @gain4: Raw gain4 parameter + * @stop1: Raw stop1 parameter + * @stop2: Raw stop2 parameter + * @stop3: Raw stop3 parameter + * @stop4: Raw stop4 parameter + * @threshold1: Raw threshold1 parameter + * @alpha1: Raw alpha1 parameter. Range [0 - 15] + * @alpha2: Raw alpha2 parameter. Range [0 - 15] + * @alpha3: Raw alpha3 parameter. Range [0 - 15] + * @alpha4: Raw alpha4 parameter. Range [0 - 15] + * @threshold2: Raw threshold2 parameter. Range [0 - 2047] + * @static_defect_size: static_defect_map size parameter. Range [0 - 65536] + * @static_defect_map: Static defect map + * @start_row: Raw start_row parameter + * @end_row: Raw end_row parameter + */ +struct kmb_raw_params { + __u32 awb_stats_en; + __u32 awb_rgb_hist_en; + __u32 af_stats_en; + __u32 luma_hist_en; + __u32 flicker_accum_en; + __u32 bad_pixel_fix_en; + __u32 grgb_imb_en; + __u32 mono_imbalance_en; + __u32 gain1; + __u32 gain2; + __u32 gain3; + __u32 gain4; + __u32 stop1; + __u32 stop2; + __u32 stop3; + __u32 stop4; + __u32 threshold1; + __u32 alpha1; + __u32 alpha2; + __u32 alpha3; + __u32 alpha4; + __u32 threshold2; + __u32 static_defect_size; + __u8 static_defect_map[KMB_CAM_STATIC_DEFECT_SIZE]; + __u32 start_row; + __u32 end_row; +} __packed; + +/** + * struct kmb_ae_awb_params - KMB AE/AWB statistics parameters + * + * @start_x: AE/AWB start_x parameter + * @start_y: AE/AWB start_y parameter + * @width: AE/AWB width parameter + * @height: AE/AWB height parameter + * @skip_x: AE/AWB skip_x parameter + * @skip_y: AE/AWB skip_y parameter + * @patches_x: AE/AWB patches_x parameter + * @patches_y: AE/AWB patches_y parameter + * @threshold1: AE/AWB threshold1 parameter + * @threshold2: AE/AWB threshold2 parameter + */ +struct kmb_ae_awb_params { + __u32 start_x; + __u32 start_y; + __u32 width; + __u32 height; + __u32 skip_x; + __u32 skip_y; + __u32 patches_x; + __u32 patches_y; + __u16 threshold1; + __u16 threshold2; +} __packed; + +/** + * struct kmb_af_params - KMB Auto Focus parameters + * + * @start_x: AF start_x parameter + * @start_y: AF start_y parameter + * @width: AF width parameter + * @height: AF height parameter + * @patches_x: AF patches_x parameter + * @patches_y: AF patches_y parameter + * @coeff: AF filter coeff parameter + * @threshold1: AF filer threshold1 parameter + * @threshold2: AF filer threshold2 parameter + * @coeffs1: AF filter coeffs1 parameter + * @coeffs2: AF filter coeffs2 parameter + */ +struct kmb_af_params { + __u32 start_x; + __u32 start_y; + __u32 width; + __u32 height; + __u32 patches_x; + __u32 patches_y; + __s32 coeff; + __s32 threshold1; + __s32 threshold2; + __s32 coeffs1[11]; + __s32 coeffs2[11]; +} __packed; + +/** + * struct kmb_hist_params - KMB Hist parameters + * + * @start_x: Hist start_x parameter. Range [0 - 1] + * @start_y: Hist start_y parameter. Range [0 - 1] + * @end_x: Hist end_x parameter. Range [0 - 1] + * @end_y: Hist end_y parameter. Range [0 - 1] + * @matrix: Hist matrix parameter. Range [0.0 - 8.0] + * @weight: Hist weight parameter. Range [0.0 - 1.0] + */ +struct kmb_hist_params { + __u32 start_x; + __u32 start_y; + __u32 end_x; + __u32 end_y; + __u16 matrix[9]; + __u16 weight[3]; +} __packed; + +/** + * struct kmb_lca_params - KMB Lateral Chromatic Aberration parameters + * + * @coeff: LCA coeff parameter + */ +struct kmb_lca_params { + __u8 coeff[KMB_CAM_LCA_MESH_SIZE]; +} __packed; + +/** + * struct kmb_debayer_params - KMB Debayer parameters + * + * @coeff1: Filter coeff1 parameter + * @multiplier1: Filter multiplier1 parameter + * @multiplier2: Filter multiplier2 parameter + * @coeff2: Filter coeff2 parameter + * @coeff3: Filter coeff3 parameter + * @coeff4: Filter coeff4 parameter + */ +struct kmb_debayer_params { + __s32 coeff1; + __u32 multiplier1; + __u32 multiplier2; + __s32 coeff2; + __s32 coeff3; + __s32 coeff4; +} __packed; + +/** + * struct kmb_hdr_params - KMB HDR parameters + * + * @ratio: HDR ratio parameter. Range [0 - 65536] + * @scale: HDR scale parameter + * @offset1: HDR offset1 parameter. Range [-4095 - 0] + * @slope1: HDR slope1 parameter. Range [0 - 4095] + * @offset2: HDR offset2 parameter. Range [-4095 - 0] + * @slope2: HDR slope2 parameter. Range [0 - 4095] + * @offset3: HDR offset3 parameter. Range [0 - 4095] + * @slope3: HDR slope3 parameter. Range [0 - 4095] + * @offset4: HDR offset4 parameter. Range [0 - 4095] + * @gain1: HDR gain1 parameter. Range [0 - 4095] + * @blur1: HDR blur1 parameter. Range [0.0 - 255.0] + * @blur2: HDR blur2 parameter. Range [0 - 255] + * @contrast1: HDR contrast1 parameter + * @contrast2: HDR contrast2 parameter + * @enable1: HDR enable1 parameter + * @enable2: HDR enable2 parameter + * @offset5: HDR offset5 parameter + * @gain2: HDR gain2 parameter + * @offset6: HDR offset6 parameter. Range [0 - 1024] + * @strength: HDR strength parameter. Range [0 - 65536] + * @tm_lut: HDR tm lut parameter + * @offset7: HDR offset7 parameter. Range [0 - 65536] + * @shift: HDR shift parameter + * @field1: HDR filed1 parameter + * @field2: HDR field2 parameter + * @gain3: HDR gain3 parameter. Range [0 - 255] + * @min: HDR min parameter. Range [0 - 4095] + */ +struct kmb_hdr_params { + __u32 ratio[2]; + __u32 scale[3]; + __s32 offset1; + __u32 slope1; + __s32 offset2; + __u32 slope2; + __s32 offset3; + __u32 slope3; + __s32 offset4; + __u32 gain1; + __u32 blur1[3]; + __u32 blur2[5]; + __u32 contrast1; + __u32 contrast2; + __u32 enable1; + __u32 enable2; + __s32 offset5; + __u32 gain2; + __s32 offset6; + __u32 strength; + __u8 tm_lut[KMB_CAM_HDR_TM_LUTS_SIZE]; + __u16 offset7; + __u32 shift; + __u16 field1; + __u16 field2; + __u8 gain3; + __u16 min; +} __packed; + +/** + * struct kmb_dog_dns_params - KMB Difference-of-Gaussians DNS parameters + * + * @threshold: Filter threshold parameter. Range [0 - 255] + * @strength: Filter strength parameter. Range [0 - 255] + * @coeffs11: Filter coeffs11 parameter. Range [0 - 1023] + * @coeffs15: Filter coeffs15 parameter. Range [0 - 1023] + */ +struct kmb_dog_dns_params { + __u32 threshold; + __u32 strength; + __u8 coeffs11[6]; + __u8 coeffs15[8]; +} __packed; + +/** + * struct kmb_luma_dns_params - KMB Luma DNS parameters + * + * @threshold: Luma DNS threshold parameter. Range [0 - 32768] + * @slope: Luma DNS slope parameter. Range [0 - 2048] + * @shift: Luma DNS shift parameter. Range [0 - 255] + * @alpha: Luma DNS alpha parameter. Range [0 - 127] + * @weight: Luma DNS weight parameter. Range [0 - 4294967295] + * @per_pixel_alpha_en: Enable adapt alpha + * @gain_bypass_en: Enable gain bypass + */ +struct kmb_luma_dns_params { + __u32 threshold; + __u32 slope; + __u32 shift; + __u32 alpha; + __u32 weight; + __u32 per_pixel_alpha_en; + __u32 gain_bypass_en; +} __packed; + +/** + * struct kmb_sharpen_params - KMB Sharpen parameters + * + * @coeffs1: Filter coeffs1 parameter. Range [0 - 255] + * @coeffs2: Filter coeffs2 parameter. Range [0 - 255] + * @coeffs3: Filter coeffs3 parameter. Range [0 - 255] + * @shift: Filter shift parameter. Range [0 - 255] + * @gain1: Filter gain1 parameter. Range [0 - 2047] + * @gain2: Filter gain2 parameter. Range [0 - 2047] + * @gain3: Filter gain3 parameter. Range [0 - 2047] + * @gain4: Filter gain4 parameter. Range [0 - 2047] + * @gain5: Filter gain5 parameter. Range [0 - 255] + * @stops1: Filter stops1 parameter. Range [0 - 4095] + * @gains: Filter gains parameter. Range [0 - 256] + * @stops2: Filter stops2 parameter. Range [0 - 4095] + * @overshoot: Filter overshoot parameter. Range [0 - 256] + * @undershoot: Filter undershoot parameter. Range [0 - 256] + * @alpha: Filter alpha parameter. Range [0 - 256] + * @gain6: Filter gain6 parameter. Range [0 - 255] + * @offset: Filter offset parameter. Range [0 - 1023] + * @radial_lut: Sharpen radial LUT parameter. Range [0 - 255] + */ +struct kmb_sharpen_params { + __u16 coeffs1[6]; + __u16 coeffs2[6]; + __u16 coeffs3[6]; + __u32 shift; + __u32 gain1; + __u32 gain2; + __u32 gain3; + __u32 gain4; + __u32 gain5; + __u32 stops1[3]; + __u32 gains[3]; + __u32 stops2[4]; + __u32 overshoot; + __u32 undershoot; + __u32 alpha; + __u32 gain6; + __u32 offset; + __u8 radial_lut[KMB_CAM_SHARPEN_RADIAL_SIZE]; +} __packed; + +/** + * struct kmb_chroma_gen_params - KMB Chroma GEN parameters + * + * @epsilon: Chroma GEN epsilon parameter. Range [0 - 255] + * @coeff1: Chroma GEN coeff1 parameter. Range [0 - 1024] + * @coeff2: Chroma GEN coeff2 parameter. Range [0 - 1024] + * @coeff3: Chroma GEN coeff3 parameter. Range [0 - 1024] + * @coeff4: Chroma GEN coeff4 parameter. Range [0 - 255] + * @coeff5: Chroma GEN coeff5 parameter. Range [0 - 255] + * @coeff6: Chroma GEN coeff6 parameter. Range [0 - 255] + * @strength1: Chroma GEN strength1 parameter. Range [0 - 255] + * @strength2: Chroma GEN strength2 parameter. Range [0 - 255] + * @coeffs: Chroma GEN coeffs parameter . Range [0 - 255] + * @offset1: Chroma GEN offset1 parameter. Range [0 - 255] + * @slope1: Chroma GEN slope1 parameter. Range [0 - 255] + * @slope2: Chroma GEN slope2 parameter. Range [0 - 255] + * @offset2: Chroma GEN offset2 parameter. Range [0 - 255] + * @limit: Chroma GEN limit parameter. Range [0 - 767] + */ +struct kmb_chroma_gen_params { + __u32 epsilon; + __u32 coeff1; + __u32 coeff2; + __u32 coeff3; + __u32 coeff4; + __u32 coeff5; + __u32 coeff6; + __u32 strength1; + __u32 strength2; + __u32 coeffs[3]; + __s32 offset1; + __u32 slope1; + __u32 slope2; + __s32 offset2; + __u32 limit; +} __packed; + +/** + * struct kmb_median_params - KMB Median parameters + * + * @size: Filter size parameter. Range [1;3;5;7] + * @slope: Filter slope parameter. Range [0 - 128] + * @offset: Filter offset parameter. Range [-32 - 32] + */ +struct kmb_median_params { + __u32 size; + __u32 slope; + __s32 offset; +} __packed; + +/** + * struct kmb_chroma_dns_params - KMB Chroma Denoise parameters + * + * @limit: Filter limit parameter + * @enable: Filter enable parameter + * @threshold1: Filter threshold1 parameter + * @threshold2: Filter threshold2 parameter + * @threshold3: Filter threshold3 parameter. Range [0 - 255] + * @threshold4: Filter threshold4 parameter. Range [0 - 255] + * @threshold5: Filter threshold5 parameter. Range [0 - 255] + * @threshold6: Filter threshold6 parameter. Range [0 - 255] + * @threshold7: Filter threshold7 parameter. Range [0 - 255] + * @threshold8: Filter threshold8 parameter. Range [0 - 255] + * @slope1: Filter slope1 parameter. Range [0 - 255] + * @offset1: Filter offset1 parameter. Range [0 - 255] + * @slope2: Filter slope2 parameter. Range [0 - 255] + * @offset2: Filter offset2 parameter. Range [0 - 255] + * @grey1: Filter grey1 parameter. Range [0 - 255] + * @grey2: Filter grey2 parameter. Range [0 - 255] + * @grey3: Filter grey3 parameter. Range [0 - 255] + * @coeff1: Filter coeff1 parameter. Range [0 - 255] + * @coeff2: Filter coeff2 parameter. Range [0 - 255] + * @coeff3: Filter coeff3 parameter. Range [0 - 255] + */ +struct kmb_chroma_dns_params { + __u32 limit; + __u32 enable; + __u32 threshold1; + __u32 threshold2; + __u32 threshold3; + __u32 threshold4; + __u32 threshold5; + __u32 threshold6; + __u32 threshold7; + __u32 threshold8; + __u32 slope1; + __s32 offset1; + __u32 slope2; + __s32 offset2; + __u32 grey1; + __u32 grey2; + __u32 grey3; + __u32 coeff1; + __u32 coeff2; + __u32 coeff3; +} __packed; + +/** + * struct kmb_color_comb_params - KMB Color Combine parameters + * + * @matrix: Color combine matrix parameter. Range [-8.0 - 8.0] + * @offsets:Color combine offsets parameter. Range [-1.0 - 1.0] + * @coeff1: Color combine coeff1 parameter. Range [0 - 1023] + * @coeff2: Color combine coeff2 parameter. Range [0 - 1023] + * @coeff3: Color combine coeff3 parameter. Range [0 - 1023] + * @lut_3d: Color combine LUT 3D parameter. Range [0 - 4095] + * @enable: Color combine enable parameter + * @weight1: Color combine weight1 parameter. Range [0 - 255] + * @weight2: Color combine weight2 parameter. Range [0 - 255] + * @weight3: Color combine weight3 parameter. Range [0 - 255] + * @limit1: Color combine limit1 parameter. Range [0 - 32766] + * @limit2: Color combine limit2 parameter. Range [-32766 - 0] + * @offset1: Color combine offset1 parameter. Range [0 - 8192] + * @offset2: Color combine offset2 parameter. Range [0 - 8192] + */ +struct kmb_color_comb_params { + __u16 matrix[9]; + __u16 offsets[3]; + __u32 coeff1; + __u32 coeff2; + __u32 coeff3; + __u8 lut_3d[KMB_CAM_LUT3D_SIZE]; + __u32 enable; + __u32 weight1; + __u32 weight2; + __u32 weight3; + __u32 limit1; + __s32 limit2; + __s32 offset1; + __s32 offset2; +} __packed; + +/** + * struct kmb_lut_params - KMB lut parameters + * + * @size: Lut size parameter. Range [0 - 128] + * @table: Lut table parameter + * @matriix: Lut matrix parameter + * @offsets: Lut offsets pparameter + */ +struct kmb_lut_params { + __u32 size; + __u8 table[KMB_CAM_GAMMA_SIZE]; + __u16 matrix[3 * 3]; + __u16 offsets[3]; +} __packed; + +/** + * struct kmb_tnf_params - KMB Temporal Noise Filter parameters + * + * @factor: Filter factor parameter. Range [0 - 255] + * @gain: Filter gain parameter. Range [0 - 4095] + * @offset1: Filter offset1 parameter. Range [0 - 8192] + * @slope1: Filter slope1 parameter. Range [0 - 512] + * @offset2: Filter offset2 parameter. Range [0 - 8192] + * @slope2: Filter slope2 parameter. Range [0 - 512] + * @min1: Filter min1 parameter. Range [0 - 65535] + * @min2: Filter min2 parameter. Range [0 - 65535] + * @value: Filter value parameter. Range [0 - 255] + * @enable: Filter enable parameter + * @chroma_lut0: First chroma LUT. Range [0 - 4095] + * @chroma_lut1: Second chroma LUT. Range [0 - 4095] + */ +struct kmb_tnf_params { + __u32 factor; + __u32 gain; + __u32 offset1; + __u32 slope1; + __u32 offset2; + __u32 slope2; + __u32 min1; + __u32 min2; + __u32 value; + __u32 enable; + __u8 chroma_lut0[KMB_CAM_CHROMA_LUT_SIZE]; + __u8 chroma_lut1[KMB_CAM_CHROMA_LUT_SIZE]; +} __packed; + +/** + * struct kmb_dehaze_params - KMB dehaze parameters + * + * @gain1: Dehaze gain1 parameter. Range [0 - 1023] + * @min: Dehaze min parameter. Range [0 - 255] + * @strength1: Dehaze strength1 parameter. Range [0 - 255] + * @strength2: Dehaze strength2 parameter. Range [0 - 65535] + * @gain2: Dehaze gain2 parameter. Range [0 - 255] + * @saturation: Dehaze saturation parameter. Range [0 - 127] + * @value1: Dehaze value1 parameter. Range [0 - 4095] + * @value2: Dehaze value2 parameter. Range [0 - 4095] + * @value3: Dehaze value3 parameter. Range [0 - 4095] + * @filter: Dehaze filter parameter. Range [0 - 255] + */ +struct kmb_dehaze_params { + __u32 gain1; + __u32 min; + __u32 strength1; + __u32 strength2; + __u32 gain2; + __u32 saturation; + __u32 value1; + __u32 value2; + __u32 value3; + __u32 filter[3]; +} __packed; + +/** + * struct kmb_warp_params - KMB Warp filter parameters + * + * @type: Warp filter type parameter. Range [0 - 1] + * @relative: Warp filter relative parameter. Range [0 - 1] + * @format: Warp filter format parameter. Range [0 - 1] + * @position: Warp filter position parameter + * @mesh_grid: Warp mesh grid + * @width: Warp filter width parameter + * @height: Warp filter height parameter + * @stride: Warp filter stride parameter + * @enable: Warp filter enable parameter + * @matrix: Warp matrix parameter + * @mode: Warp filter mode parameter. Range [0 - 1] + * @values: Warp filter values parameter. Range [0 - 128] + */ +struct kmb_warp_params { + __u8 type; + __u8 relative; + __u8 format; + __u8 position; + __u8 mesh_grid[KMB_CAM_WARP_MESH_SIZE]; + __u16 width; + __u16 height; + __u32 stride; + __u8 enable; + __u32 matrix[9]; + __u8 mode; + __u16 values[3]; +} __packed; + +/** + * struct kmb_isp_params_flags - Bits to indicate which params + * need to be updated + * + * @blc: 1 = update, 0 = do not update. + * @sigma_dns: 1 = update, 0 = do not update. + * @lsc: 1 = update, 0 = do not update. + * @raw: 1 = update, 0 = do not update. + * @ae_awb: 1 = update, 0 = do not update. + * @af: 1 = update, 0 = do not update. + * @histogram: 1 = update, 0 = do not update. + * @lca: 1 = update, 0 = do not update. + * @debayer: 1 = update, 0 = do not update. + * @dog_dns: 1 = update, 0 = do not update. + * @luma_dns: 1 = update, 0 = do not update. + * @sharpen: 1 = update, 0 = do not update. + * @chroma_gen: 1 = update, 0 = do not update. + * @median: 1 = update, 0 = do not update. + * @chroma_dns: 1 = update, 0 = do not update. + * @color_comb: 1 = update, 0 = do not update. + * @hdr: 1 = update, 0 = do not update. + * @lut: 1 = update, 0 = do not update. + * @tnf: 1 = update, 0 = do not update. + * @dehaze: 1 = update, 0 = do not update. + * @warp: 1 = update, 0 = do not update. + * @reserved: reserved for future use and for alignment + */ +struct kmb_isp_params_flags { + __u32 blc:1; + __u32 sigma_dns:1; + __u32 lsc:1; + __u32 raw:1; + __u32 ae_awb:1; + __u32 af:1; + __u32 histogram:1; + __u32 lca:1; + __u32 debayer:1; + __u32 dog_dns:1; + __u32 luma_dns:1; + __u32 sharpen:1; + __u32 chroma_gen:1; + __u32 median:1; + __u32 chroma_dns:1; + __u32 color_comb:1; + __u32 hdr:1; + __u32 lut:1; + __u32 tnf:1; + __u32 dehaze:1; + __u32 warp:1; + __u32 reserved:11; +} __packed; + +/** + * struct kmb_isp_params - KMB ISP parameters structure + * + * @update: Select which parameters to apply, see kmb_vpu_isp_params_flags + * @blc: Black Level correction parameters + * @sigma_dns: Sigma denoise parameters + * @lsc: Lens Shading Correction parameters + * @raw: Raw parameters + * @ae_awb: Auto exposure/Auto white balance parameters + * @af: Auto focus parameters + * @histogram: Histogram parameters + * @lca: Lateral Chromatic Aberration filter parameters + * @debayer: SIPP Bayer demosaicing filter parameters + * @dog_dns: Difference-of-Gaussians filter parameters + * @luma_dns: Luma denoise parameters + * @sharpen: Sharpen filter parameters + * @chroma_gen: Chroma GEN parameters + * @median: Median hardware filter parameters + * @chroma_dns: Chroma Denoise hardware filter parameters + * @color_comb: Color Combine parameters + * @hdr: HDR parameters applied only in HDR mode + * @lut: LUT parameters + * @tnf: Temporal Noise Filter parameters + * @dehaze: Dehaze parameters + * @warp: Warp filter parameters + * + * Each struct represents a filter and its settings which are applied on the raw + * image. + */ +struct kmb_isp_params { + struct kmb_isp_params_flags update; + struct kmb_blc_params blc[KMB_CAM_MAX_EXPOSURES]; + struct kmb_sigma_dns_params sigma_dns[KMB_CAM_MAX_EXPOSURES]; + struct kmb_lsc_params lsc; + struct kmb_raw_params raw; + struct kmb_ae_awb_params ae_awb; + struct kmb_af_params af; + struct kmb_hist_params histogram; + struct kmb_lca_params lca; + struct kmb_debayer_params debayer; + struct kmb_dog_dns_params dog_dns; + struct kmb_luma_dns_params luma_dns; + struct kmb_sharpen_params sharpen; + struct kmb_chroma_gen_params chroma_gen; + struct kmb_median_params median; + struct kmb_chroma_dns_params chroma_dns; + struct kmb_color_comb_params color_comb; + struct kmb_hdr_params hdr; + struct kmb_lut_params lut; + struct kmb_tnf_params tnf; + struct kmb_dehaze_params dehaze; + struct kmb_warp_params warp; +} __packed; + +/** + * struct kmb_isp_stats_flags - Bits to indicate which stats need to be updated + * + * @ae_awb: 1 = updated, 0 = not updated. + * @af: 1 = updated, 0 = not updated. + * @luma_hist: 1 = updated, 0 = not updated. + * @rgb_hist: 1 = updated, 0 = not updated. + * @flicker_rows: 1 = updated, 0 = not updated. + * @dehaze: 1 = updated, 0 = not updated. + * @reserved: reserved for future use and for alignment + */ +struct kmb_isp_stats_flags { + __u32 ae_awb:1; + __u32 af:1; + __u32 luma_hist:1; + __u32 rgb_hist:1; + __u32 flicker_rows:1; + __u32 dehaze:1; + __u32 reserved:26; +} __packed; + +/** + * struct kmb_isp_stats - KMB ISP raw statistics + * + * @exposure: Array with exposure statistics blocks. When HDR mode is not + * enable only statistics with index 0 are valid. Included stats: + * @exposure.ae_awb_stats: Raw AE/AWB statistics. + * @exposure.af_stats: Raw AF statistics. + * @exposure.hist_luma: Luma histogram. + * @exposure.hist_rgb: RGB histogram. + * @exposure.flicker_rows: Flicker detection rows. + * @dehaze: Dehaze statistics it is collected after HDR Fusion in HDR case. + * @update: Select which stats to update, see kmb_vpu_isp_stats_flags + */ +struct kmb_isp_stats { + struct { + __u8 ae_awb_stats[KMB_CAM_AE_AWB_STATS_SIZE]; + __u8 af_stats[KMB_CAM_AF_STATS_SIZE]; + __u8 hist_luma[KMB_CAM_HIST_LUMA_SIZE]; + __u8 hist_rgb[KMB_CAM_HIST_RGB_SIZE]; + __u8 flicker_rows[KMB_CAM_FLICKER_ROWS_SIZE]; + } exposure[KMB_CAM_MAX_EXPOSURES]; + __u8 dehaze[MAX_DHZ_AIRLIGHT_STATS_SIZE]; + struct kmb_isp_stats_flags update; +} __packed; + +#endif /* KEEMBAY_ISP_CTL_H */ -- 2.11.0