blob: ab9f91479ae62eb76cd35f3ee1d246cf2747cfd6 [file] [log] [blame]
/*
* drivers/amlogic/media/deinterlace/detect3d.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 _DET3D_H
#define _DET3D_H
/* ************************************************ */
/* ******** DET3D REGISTERS ******** */
/* ************************************************ */
#define DET3D_BASE_ADD 0x1734
/* #define NR2_SW_EN 0x174f */
#define DET3D_EN_BIT 5
#define DET3D_EN_WID 1
/* #define DET3D_MOTN_CFG 0x1734 */
#define DET3D_INTR_EN_BIT 16
#define DET3D_INTR_EN_WID 1
#define DET3D_MOTION_MODE_BIT 8
#define DET3D_MOTION_MODE_WID 2
#define DET3D_MOTION_CORE_RATE_BIT 4
#define DET3D_MOTION_CORE_RATE_WID 4
#define DET3D_MOTION_CORE_THRD_BIT 0
#define DET3D_MOTION_CORE_THRD_WID 4
/* #define DET3D_CB_CFG 0x1735 */
#define DET3D_CHESSBD_NHV_OFST_BIT 4
#define DET3D_CHESSBD_NHV_OFST_WID 4
#define DET3D_CHESSBD_HV_OFST_BIT 0
#define DET3D_CHESSBD_HV_OFST_WID 4
/* #define DET3D_SPLT_CFG 0x1736 */
#define DET3D_SPLITVALID_RATIO_BIT 4
#define DET3D_SPLITVALID_RATIO_WID 4
#define DET3D_AVGLDX_RATIO_BIT 0
#define DET3D_AVGLDX_RATIO_WID 4
/* #define DET3D_HV_MUTE 0x1737 */
#define DET3D_EDGE_VER_MUTE_BIT 20
#define DET3D_EDGE_VER_MUTE_WID 4
#define DET3D_EDGE_HOR_MUTE_BIT 16
#define DET3D_EDGE_HOR_MUTE_WID 4
#define DET3D_CHESSBD_VER_MUTE_BIT 12
#define DET3D_CHESSBD_VER_MUTE_WID 4
#define DET3D_CHESSBD_HOR_MUTE_BIT 8
#define DET3D_CHESSBD_HOR_MUTE_WID 4
#define DET3D_STA8X8_VER_MUTE_BIT 4
#define DET3D_STA8X8_VER_MUTE_WID 4
#define DET3D_STA8X8_HOR_MUTE_BIT 0
#define DET3D_STA8X8_HOR_MUTE_WID 4
/* #define DET3D_MAT_STA_P1M1 0x1738 */
#define DET3D_STA8X8_P1_K0_R8_BIT 24
#define DET3D_STA8X8_P1_K0_R8_WID 8
#define DET3D_STA8X8_P1_K1_R7_BIT 16
#define DET3D_STA8X8_P1_K1_R7_WID 8
#define DET3D_STA8X8_M1_K0_R6_BIT 8
#define DET3D_STA8X8_M1_K0_R6_WID 8
#define DET3D_STA8X8_M1_K1_R6_BIT 0
#define DET3D_STA8X8_M1_K1_R6_WID 8
/* #define DET3D_MAT_STA_P1TH 0x1739 */
#define DET3D_STAYUV_P1_TH_L4_BIT 16
#define DET3D_STAYUV_P1_TH_L4_WID 8
#define DET3D_STAEDG_P1_TH_L4_BIT 8
#define DET3D_STAEDG_P1_TH_L4_WID 8
#define DET3D_STAMOT_P1_TH_L4_BIT 0
#define DET3D_STAMOT_P1_TH_L4_WID 8
/* #define DET3D_MAT_STA_M1TH 0x173a */
#define DET3D_STAYUV_M1_TH_L4_BIT 16
#define DET3D_STAYUV_M1_TH_L4_WID 8
#define DET3D_STAEDG_M1_TH_L4_BIT 8
#define DET3D_STAEDG_M1_TH_L4_WID 8
#define DET3D_STAMOT_M1_TH_L4_BIT 0
#define DET3D_STAMOT_M1_TH_L4_WID 8
/* #define DET3D_MAT_STA_RSFT 0x173b */
#define DET3D_STAYUV_RSHFT_BIT 4
#define DET3D_STAYUV_RSHFT_WID 2
#define DET3D_STAEDG_RSHFT_BIT 2
#define DET3D_STAEDG_RSHFT_WID 2
#define DET3D_STAMOT_RSHFT_BIT 0
#define DET3D_STAMOT_RSHFT_WID 2
/* #define DET3D_MAT_SYMTC_TH 0x173c */
#define DET3D_STALUM_SYMTC_TH_BIT 24
#define DET3D_STALUM_SYMTC_TH_WID 8
#define DET3D_STACHR_SYMTC_TH_BIT 16
#define DET3D_STACHR_SYMTC_TH_WID 8
#define DET3D_STAEDG_SYMTC_TH_BIT 8
#define DET3D_STAEDG_SYMTC_TH_WID 8
#define DET3D_STAMOT_SYMTC_TH_BIT 0
#define DET3D_STAMOT_SYMTC_TH_WID 8
/* #define DET3D_RO_DET_CB_HOR 0x173d */
#define DET3D_CHESSBD_NHOR_VALUE_BIT 16
#define DET3D_CHESSBD_NHOR_VALUE_WID 16
#define DET3D_CHESSBD_HOR_VALUE_BIT 0
#define DET3D_CHESSBD_HOR_VALUE_WID 16
/* #define DET3D_RO_DET_CB_VER 0x173e */
#define DET3D_CHESSBD_NVER_VALUE_BIT 16
#define DET3D_CHESSBD_NVER_VALUE_WID 16
#define DET3D_CHESSBD_VER_VALUE_BIT 0
#define DET3D_CHESSBD_VER_VALUE_WID 16
/* #define DET3D_RO_SPLT_HT 0x173f */
#define DET3D_SPLIT_HT_VAILID_BIT 24
#define DET3D_SPLIT_HT_VAILID_WID 1
#define DET3D_SPLIT_HT_PXNUM_BIT 16
#define DET3D_SPLIT_HT_PXNUM_WID 5
#define DET3D_SPLIT_HT_IDXX4_BIT 0
#define DET3D_SPLIT_HT_IDXX4_WID 10
/* #define DET3D_RO_SPLT_HB 0x1780 */
#define DET3D_SPLIT_HB_VAILID_BIT 24
#define DET3D_SPLIT_HB_VAILID_WID 1
#define DET3D_SPLIT_HB_PXNUM_BIT 16
#define DET3D_SPLIT_HB_PXNUM_WID 5
#define DET3D_SPLIT_HB_IDXX4_BIT 0
#define DET3D_SPLIT_HB_IDXX4_WID 10
/* #define DET3D_RO_SPLT_VL 0x1781 */
#define DET3D_SPLIT_VL_VAILID_BIT 24
#define DET3D_SPLIT_VL_VAILID_WID 1
#define DET3D_SPLIT_VL_PXNUM_BIT 16
#define DET3D_SPLIT_VL_PXNUM_WID 5
#define DET3D_SPLIT_VL_IDXX4_BIT 0
#define DET3D_SPLIT_VL_IDXX4_WID 10
/* #define DET3D_RO_SPLT_VR 0x1782 */
#define DET3D_SPLIT_VR_VAILID_BIT 24
#define DET3D_SPLIT_VR_VAILID_WID 1
#define DET3D_SPLIT_VR_PXNUM_BIT 16
#define DET3D_SPLIT_VR_PXNUM_WID 5
#define DET3D_SPLIT_VR_IDXX4_BIT 0
#define DET3D_SPLIT_VR_IDXX4_WID 10
/* #define DET3D_RO_MAT_LUMA_LR 0x1783 */
#define DET3D_LUMA_LR_SUM_BIT 24
#define DET3D_LUMA_LR_SUM_WID 5
#define DET3D_LUMA_LR_SYMTC_BIT 16
#define DET3D_LUMA_LR_SYMTC_WID 8
#define DET3D_LUMA_LR_SCORE_BIT 0
#define DET3D_LUMA_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_LUMA_TB 0x1784 */
#define DET3D_LUMA_TB_SUM_BIT 24
#define DET3D_LUMA_TB_SUM_WID 5
#define DET3D_LUMA_TB_SYMTC_BIT 16
#define DET3D_LUMA_TB_SYMTC_WID 8
#define DET3D_LUMA_TB_SCORE_BIT 0
#define DET3D_LUMA_TB_SCORE_WID 16
/* #define DET3D_RO_MAT_CHRU_LR 0x1785 */
#define DET3D_CHRU_LR_SUM_BIT 24
#define DET3D_CHRU_LR_SUM_WID 5
#define DET3D_CHRU_LR_SYMTC_BIT 16
#define DET3D_CHRU_LR_SYMTC_WID 8
#define DET3D_CHRU_LR_SCORE_BIT 0
#define DET3D_CHRU_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_CHRU_TB 0x1786 */
#define DET3D_CHRU_TB_SUM_BIT 24
#define DET3D_CHRU_TB_SUM_WID 5
#define DET3D_CHRU_TB_SYMTC_BIT 16
#define DET3D_CHRU_TB_SYMTC_WID 8
#define DET3D_CHRU_TB_SCORE_BIT 0
#define DET3D_CHRU_TB_SCORE_WID 16
/* #define DET3D_RO_MAT_CHRV_LR 0x1787 */
#define DET3D_CHRV_LR_SUM_BIT 24
#define DET3D_CHRV_LR_SUM_WID 5
#define DET3D_CHRV_LR_SYMTC_BIT 16
#define DET3D_CHRV_LR_SYMTC_WID 8
#define DET3D_CHRV_LR_SCORE_BIT 0
#define DET3D_CHRV_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_CHRV_TB 0x1788 */
#define DET3D_CHRV_TB_SUM_BIT 24
#define DET3D_CHRV_TB_SUM_WID 5
#define DET3D_CHRV_TB_SYMTC_BIT 16
#define DET3D_CHRV_TB_SYMTC_WID 8
#define DET3D_CHRV_TB_SCORE_BIT 0
#define DET3D_CHRV_TB_SCORE_WID 16
/* #define DET3D_RO_MAT_HEDG_LR 0x1789 */
#define DET3D_HEDG_LR_SUM_BIT 24
#define DET3D_HEDG_LR_SUM_WID 5
#define DET3D_HEDG_LR_SYMTC_BIT 16
#define DET3D_HEDG_LR_SYMTC_WID 8
#define DET3D_HEDG_LR_SCORE_BIT 0
#define DET3D_HEDG_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_HEDG_TB 0x178a */
#define DET3D_HEDG_TB_SUM_BIT 24
#define DET3D_HEDG_TB_SUM_WID 5
#define DET3D_HEDG_TB_SYMTC_BIT 16
#define DET3D_HEDG_TB_SYMTC_WID 8
#define DET3D_HEDG_TB_SCORE_BIT 0
#define DET3D_HEDG_TB_SCORE_WID 16
/* #define DET3D_RO_MAT_VEDG_LR 0x178b */
#define DET3D_VEDG_LR_SUM_BIT 24
#define DET3D_VEDG_LR_SUM_WID 5
#define DET3D_VEDG_LR_SYMTC_BIT 16
#define DET3D_VEDG_LR_SYMTC_WID 8
#define DET3D_VEDG_LR_SCORE_BIT 0
#define DET3D_VEDG_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_VEDG_TB 0x178c */
#define DET3D_VEDG_TB_SUM_BIT 24
#define DET3D_VEDG_TB_SUM_WID 5
#define DET3D_VEDG_TB_SYMTC_BIT 16
#define DET3D_VEDG_TB_SYMTC_WID 8
#define DET3D_VEDG_TB_SCORE_BIT 0
#define DET3D_VEDG_TB_SCORE_WID 16
/* #define DET3D_RO_MAT_MOTN_LR 0x178d */
#define DET3D_MOTN_LR_SUM_BIT 24
#define DET3D_MOTN_LR_SUM_WID 5
#define DET3D_MOTN_LR_SYMTC_BIT 16
#define DET3D_MOTN_LR_SYMTC_WID 8
#define DET3D_MOTN_LR_SCORE_BIT 0
#define DET3D_MOTN_LR_SCORE_WID 16
/* #define DET3D_RO_MAT_MOTN_TB 0x178e */
#define DET3D_MOTN_TB_SUM_BIT 24
#define DET3D_MOTN_TB_SUM_WID 5
#define DET3D_MOTN_TB_SYMTC_BIT 16
#define DET3D_MOTN_TB_SYMTC_WID 8
#define DET3D_MOTN_TB_SCORE_BIT 0
#define DET3D_MOTN_TB_SCORE_WID 16
/* #define DET3D_RO_FRM_MOTN 0x178f */
#define DET3D_FRAME_MOTION_BIT 0
#define DET3D_FRAME_MOTION_WID 16
/* #define DET3D_RAMRD_ADDR_PORT 0x179a */
/* #define DET3D_RAMRD_DATA_PORT 0x179b */
/* *********************************************************** */
/* *** STRUCTURE DEFINATIONS ********************************* */
/* *********************************************************** */
struct det3d_info_s {
/* Frame counter, max number is defined in FRAME_MAX macro */
int nfrm;
/* 3D format */
int tfw_det3d_fmt;
/* signed number, when the score is close to 0,
* it is means we can not confirm if input is LR format;
*/
/* the smaller this score is (when < 0),
* the more likely input is not LR format;
*/
/* the larger this score is (when > 0),
* the more likely input is LR format;
*/
int score_3d_lr;
int score_3d_tb;
/* the last 8 frame score_3d_lr, tscore_3d_lr[0]
* is caculated from current frame data;
*/
int tscore_3d_lr[8];
int tscore_3d_tb[8];
int tscore_3d_lr_accum;
int tscore_3d_tb_accum;
int score_3d_chs;
int score_3d_int;
/* the last 8 frame valid score_3d_chs, chs_valid_his[0]
* is caculated from current frame data;
*/
int chs_valid_his[8];
int int_valid_his[8];
};
#define det3d_info_t struct det3d_info_s
/* **************************************** */
/* ****ENUM DEFINATIONS ******************* */
/* **************************************** */
/*@to modify if it is defined in tvin.h*/
enum det3d_fmt_e {
DET3D_FMT_NULL = 0,
DET3D_FMT_LR,
DET3D_FMT_TB,
DET3D_FMT_INTERLACE,
DET3D_FMT_CHESSBOARD,
};
#define det3d_fmt_t enum det3d_fmt_e
/* *************************************** */
/* ******** GLOBAL FUNCTION CLAIM ******** */
/* *************************************** */
extern void det3d_config(bool flag);
extern enum tvin_trans_fmt det3d_fmt_detect(void);
#define WRITE_DET3D_REG(x, val) aml_write_vcbus(x, val)
#define WRITE_DET3D_REG_BITS(x, val, start, length) \
aml_vcbus_update_bits(x, ((1<<(length))-1)<<(start), val)
#define READ_DET3D_REG(x) aml_read_vcbus(x)
#define READ_DET3D_REG_BITS(x, start, length) \
(aml_read_vcbus(x)&(((1<<(length))-1)<<(start)))
#endif /* _DET3D_H */