blob: 9ddb492a49e0776ce0614150d047abadba32b4d6 [file] [log] [blame]
/*
* include/linux/amlogic/media/amvecm/ve.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef __VE_H
#define __VE_H
/* ******************************************************************* */
/* *** enum definitions ********************************************* */
/* ******************************************************************* */
enum ve_demo_pos_e {
VE_DEMO_POS_TOP = 0,
VE_DEMO_POS_BOTTOM,
VE_DEMO_POS_LEFT,
VE_DEMO_POS_RIGHT,
};
enum ve_dnlp_rt_e {
VE_DNLP_RT_0S = 0,
VE_DNLP_RT_1S = 6,
VE_DNLP_RT_2S,
VE_DNLP_RT_4S,
VE_DNLP_RT_8S,
VE_DNLP_RT_16S,
VE_DNLP_RT_32S,
VE_DNLP_RT_64S,
VE_DNLP_RT_FREEZE,
};
/* ******************************************************************* */
/* *** struct definitions ********************************************* */
/* ******************************************************************* */
struct ve_bext_s {
unsigned char en;
unsigned char start;
unsigned char slope1;
unsigned char midpt;
unsigned char slope2;
};
#if defined(CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_VECM)
#define DNLP_SCURV_LEN 65
#define GAIN_VAR_LUT_LEN 49
#define WEXT_GAIN_LEN 48
#define ADP_THRD_LEN 33
#define REG_BLK_BOOST_LEN 13
#define REG_ADP_OFSET_LEN 20
#define REG_MONO_PROT_LEN 6
#define TREND_WHT_EXP_LUT_LEN 9
#define DNLP_PARM_MAX_NUM 100
#define DNLP_VPP_HIST_BIN_NUM 64
struct ve_dnlp_s {
unsigned int en;
unsigned int rt; /* 0 ~ 255, */
unsigned int rl; /* 0 ~ 15, 1.0000x ~ 1.9375x, step 0.0625x */
unsigned int black; /* 0 ~ 16, weak ~ strong */
unsigned int white; /* 0 ~ 16, weak ~ strong */
};
struct ve_hist_s {
unsigned int sum;
int width;
int height;
int ave;
};
struct vpp_hist_param_s {
unsigned int vpp_hist_pow;
unsigned int vpp_luma_sum;
unsigned int vpp_pixel_sum;
unsigned short vpp_histgram[DNLP_VPP_HIST_BIN_NUM];
};
struct ve_dnlp_curve_param_s {
unsigned int ve_dnlp_scurv_low[DNLP_SCURV_LEN];
unsigned int ve_dnlp_scurv_mid1[DNLP_SCURV_LEN];
unsigned int ve_dnlp_scurv_mid2[DNLP_SCURV_LEN];
unsigned int ve_dnlp_scurv_hgh1[DNLP_SCURV_LEN];
unsigned int ve_dnlp_scurv_hgh2[DNLP_SCURV_LEN];
unsigned int ve_gain_var_lut49[GAIN_VAR_LUT_LEN];
unsigned int ve_wext_gain[WEXT_GAIN_LEN];
unsigned int ve_adp_thrd[ADP_THRD_LEN];
unsigned int ve_reg_blk_boost_12[REG_BLK_BOOST_LEN];
unsigned int ve_reg_adp_ofset_20[REG_ADP_OFSET_LEN];
unsigned int ve_reg_mono_protect[REG_MONO_PROT_LEN];
unsigned int ve_reg_trend_wht_expand_lut8[TREND_WHT_EXP_LUT_LEN];
unsigned int param[DNLP_PARM_MAX_NUM];
};
enum dnlp_param_e {
ve_dnlp_enable = 0,
ve_dnlp_respond,
ve_dnlp_sel,
ve_dnlp_respond_flag,
ve_dnlp_smhist_ck,
ve_dnlp_mvreflsh,
ve_dnlp_pavg_btsft,
ve_dnlp_dbg_i2r,
ve_dnlp_cuvbld_min,
ve_dnlp_cuvbld_max,
ve_dnlp_schg_sft,
ve_dnlp_bbd_ratio_low,
ve_dnlp_bbd_ratio_hig,
ve_dnlp_limit_rng,
ve_dnlp_range_det,
ve_dnlp_blk_cctr,
ve_dnlp_brgt_ctrl,
ve_dnlp_brgt_range,
ve_dnlp_brght_add,
ve_dnlp_brght_max,
ve_dnlp_dbg_adjavg,
ve_dnlp_auto_rng,
ve_dnlp_lowrange,
ve_dnlp_hghrange,
ve_dnlp_satur_rat,
ve_dnlp_satur_max,
ve_dnlp_set_saturtn,
ve_dnlp_sbgnbnd,
ve_dnlp_sendbnd,
ve_dnlp_clashBgn,
ve_dnlp_clashEnd,
ve_dnlp_var_th,
ve_dnlp_clahe_gain_neg,
ve_dnlp_clahe_gain_pos,
ve_dnlp_clahe_gain_delta,
ve_dnlp_mtdbld_rate,
ve_dnlp_adpmtd_lbnd,
ve_dnlp_adpmtd_hbnd,
ve_dnlp_blkext_ofst,
ve_dnlp_whtext_ofst,
ve_dnlp_blkext_rate,
ve_dnlp_whtext_rate,
ve_dnlp_bwext_div4x_min,
ve_dnlp_iRgnBgn,
ve_dnlp_iRgnEnd,
ve_dnlp_dbg_map,
ve_dnlp_final_gain,
ve_dnlp_cliprate_v3,
ve_dnlp_cliprate_min,
ve_dnlp_adpcrat_lbnd,
ve_dnlp_adpcrat_hbnd,
ve_dnlp_scurv_low_th,
ve_dnlp_scurv_mid1_th,
ve_dnlp_scurv_mid2_th,
ve_dnlp_scurv_hgh1_th,
ve_dnlp_scurv_hgh2_th,
ve_dnlp_mtdrate_adp_en,
ve_dnlp_clahe_method,
ve_dnlp_ble_en,
ve_dnlp_norm,
ve_dnlp_scn_chg_th,
ve_dnlp_step_th,
ve_dnlp_iir_step_mux,
ve_dnlp_single_bin_bw,
ve_dnlp_single_bin_method,
ve_dnlp_reg_max_slop_1st,
ve_dnlp_reg_max_slop_mid,
ve_dnlp_reg_max_slop_fin,
ve_dnlp_reg_min_slop_1st,
ve_dnlp_reg_min_slop_mid,
ve_dnlp_reg_min_slop_fin,
ve_dnlp_reg_trend_wht_expand_mode,
ve_dnlp_reg_trend_blk_expand_mode,
ve_dnlp_ve_hist_cur_gain,
ve_dnlp_ve_hist_cur_gain_precise,
ve_dnlp_reg_mono_binrang_st,
ve_dnlp_reg_mono_binrang_ed,
ve_dnlp_param_max,
};
enum dnlp_curve_e {
ve_scurv_low = 1000,
ve_scurv_mid1,
ve_scurv_mid2,
ve_scurv_hgh1,
ve_scurv_hgh2,
ve_curv_var_lut49,
ve_curv_wext_gain,
ve_adp_thrd = 1013,
ve_reg_blk_boost_12,
ve_reg_adp_ofset_20,
ve_reg_mono_protect,
ve_reg_trend_wht_expand_lut8,
};
#else
struct ve_dnlp_s {
unsigned char en;
enum ve_dnlp_rt_e rt;
unsigned char gamma[64];
};
#endif
struct ve_lc_curve_parm_s {
unsigned int ve_lc_saturation[63];
unsigned int ve_lc_yminval_lmt[12];
unsigned int ve_lc_ypkbv_ymaxval_lmt[12];
unsigned int ve_lc_ypkbv_ratio[4];
unsigned int param[100];
};
enum lc_alg_param_e {
lc_dbg_parm0 = 0,
lc_dbg_parm1,
lc_dbg_parm2,
lc_dbg_parm3,
lc_dbg_parm4,
lc_dbg_parm_max,
};
struct ve_hsvs_s {
unsigned char en;
unsigned char peak_gain_h1;
unsigned char peak_gain_h2;
unsigned char peak_gain_h3;
unsigned char peak_gain_h4;
unsigned char peak_gain_h5;
unsigned char peak_gain_v1;
unsigned char peak_gain_v2;
unsigned char peak_gain_v3;
unsigned char peak_gain_v4;
unsigned char peak_gain_v5;
unsigned char peak_gain_v6;
unsigned char hpeak_slope1;
unsigned char hpeak_slope2;
unsigned char hpeak_thr1;
unsigned char hpeak_thr2;
unsigned char hpeak_nlp_cor_thr;
unsigned char hpeak_nlp_gain_pos;
unsigned char hpeak_nlp_gain_neg;
unsigned char vpeak_slope1;
unsigned char vpeak_slope2;
unsigned char vpeak_thr1;
unsigned char vpeak_thr2;
unsigned char vpeak_nlp_cor_thr;
unsigned char vpeak_nlp_gain_pos;
unsigned char vpeak_nlp_gain_neg;
unsigned char speak_slope1;
unsigned char speak_slope2;
unsigned char speak_thr1;
unsigned char speak_thr2;
unsigned char speak_nlp_cor_thr;
unsigned char speak_nlp_gain_pos;
unsigned char speak_nlp_gain_neg;
unsigned char peak_cor_gain;
unsigned char peak_cor_thr_l;
unsigned char peak_cor_thr_h;
unsigned char vlti_step;
unsigned char vlti_step2;
unsigned char vlti_thr;
unsigned char vlti_gain_pos;
unsigned char vlti_gain_neg;
unsigned char vlti_blend_factor;
unsigned char hlti_step;
unsigned char hlti_thr;
unsigned char hlti_gain_pos;
unsigned char hlti_gain_neg;
unsigned char hlti_blend_factor;
unsigned char vlimit_coef_h;
unsigned char vlimit_coef_l;
unsigned char hlimit_coef_h;
unsigned char hlimit_coef_l;
unsigned char cti_444_422_en;
unsigned char cti_422_444_en;
unsigned char cti_blend_factor;
unsigned char vcti_buf_en;
unsigned char vcti_buf_mode_c5l;
unsigned char vcti_filter;
unsigned char hcti_step;
unsigned char hcti_step2;
unsigned char hcti_thr;
unsigned char hcti_gain;
unsigned char hcti_mode_median;
};
struct ve_ccor_s {
unsigned char en;
unsigned char slope;
unsigned char thr;
};
struct ve_benh_s {
unsigned char en;
unsigned char cb_inc;
unsigned char cr_inc;
unsigned char gain_cr;
unsigned char gain_cb4cr;
unsigned char luma_h;
unsigned char err_crp;
unsigned char err_crn;
unsigned char err_cbp;
unsigned char err_cbn;
};
struct ve_cbar_s {
unsigned char en;
unsigned char wid;
unsigned char cr;
unsigned char cb;
unsigned char y;
};
struct ve_demo_s {
unsigned char bext;
unsigned char dnlp;
unsigned char hsvs;
unsigned char ccor;
unsigned char benh;
enum ve_demo_pos_e pos;
unsigned long wid;
struct ve_cbar_s cbar;
};
struct vdo_meas_s {
/* ... */
};
struct ve_regmap_s {
unsigned long reg[43];
};
#define EOTF_LUT_SIZE 33
#define OSD_OETF_LUT_SIZE 41
/********************OSD HDR registers backup********************************/
struct hdr_osd_lut_s {
uint32_t r_map[33];
uint32_t g_map[33];
uint32_t b_map[33];
uint32_t or_map[41];
uint32_t og_map[41];
uint32_t ob_map[41];
};
struct hdr_osd_reg_s {
uint32_t viu_osd1_matrix_ctrl; /* 0x1a90 */
uint32_t viu_osd1_matrix_coef00_01; /* 0x1a91 */
uint32_t viu_osd1_matrix_coef02_10; /* 0x1a92 */
uint32_t viu_osd1_matrix_coef11_12; /* 0x1a93 */
uint32_t viu_osd1_matrix_coef20_21; /* 0x1a94 */
uint32_t viu_osd1_matrix_colmod_coef42; /* 0x1a95 */
uint32_t viu_osd1_matrix_offset0_1; /* 0x1a96 */
uint32_t viu_osd1_matrix_offset2; /* 0x1a97 */
uint32_t viu_osd1_matrix_pre_offset0_1; /* 0x1a98 */
uint32_t viu_osd1_matrix_pre_offset2; /* 0x1a99 */
uint32_t viu_osd1_matrix_coef22_30; /* 0x1a9d */
uint32_t viu_osd1_matrix_coef31_32; /* 0x1a9e */
uint32_t viu_osd1_matrix_coef40_41; /* 0x1a9f */
uint32_t viu_osd1_eotf_ctl; /* 0x1ad4 */
uint32_t viu_osd1_eotf_coef00_01; /* 0x1ad5 */
uint32_t viu_osd1_eotf_coef02_10; /* 0x1ad6 */
uint32_t viu_osd1_eotf_coef11_12; /* 0x1ad7 */
uint32_t viu_osd1_eotf_coef20_21; /* 0x1ad8 */
uint32_t viu_osd1_eotf_coef22_rs; /* 0x1ad9 */
uint32_t VIU_OSD1_EOTF_3X3_OFST_0; /* 0x1aa0*/
uint32_t VIU_OSD1_EOTF_3X3_OFST_1; /* 0x1aa1*/
uint32_t viu_osd1_oetf_ctl; /* 0x1adc */
struct hdr_osd_lut_s lut_val;
/* -1: invalid, 0: not shadow, >1: delay count */
int32_t shadow_mode;
};
extern struct hdr_osd_reg_s hdr_osd_reg;
/***********************OSD HDR registers*******************************/
/* ******************************************************************* */
/* *** MACRO definitions ********** */
/* ******************************************************************* */
/* ******************************************************************* */
/* *** FUNCTION definitions ********** */
/* ******************************************************************* */
#endif /* _VE_H */