blob: 178c74a0a38757369fd986145c2fdc049714aea7 [file] [log] [blame]
/*
* drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.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 __TVIN_VDIN_CTL_H
#define __TVIN_VDIN_CTL_H
#include "vdin_drv.h"
#define DV_SWAP_EN (1 << 0)
#define DV_BUF_START_RESET (1 << 1)
#define DV_FRAME_BUF_START_RESET (1 << 2)
#define DV_UPDATE_DATA_MODE_DELBY_WORK (1 << 4)
#define DV_CLEAN_UP_MEM (1 << 5)
#define DV_READ_MODE_AXI (1 << 6)
#define DV_CRC_CHECK (1 << 7)
enum vdin_output_mif_e {
VDIN_OUTPUT_TO_MIF = 0,
VDIN_OUTPUT_TO_AFBCE = 1,
};
/* *********************************************************************** */
/* *** enum definitions ********************************************* */
/* *********************************************************************** */
/*
*YUV601: SDTV BT.601 YCbCr (16~235, 16~240, 16~240)
*YUV601F: SDTV BT.601 Full_Range YCbCr ( 0~255, 0~255, 0~255)
*YUV709: HDTV BT.709 YCbCr (16~235, 16~240, 16~240)
*YUV709F: HDTV BT.709 Full_Range YCbCr ( 0~255, 0~255, 0~255)
*RGBS: StudioRGB (16~235, 16~235, 16~235)
*RGB: RGB ( 0~255, 0~255, 0~255)
*/
enum vdin_matrix_csc_e {
VDIN_MATRIX_NULL = 0,
VDIN_MATRIX_XXX_YUV601_BLACK,
VDIN_MATRIX_RGB_YUV601,
VDIN_MATRIX_GBR_YUV601,
VDIN_MATRIX_BRG_YUV601,
VDIN_MATRIX_YUV601_RGB,
VDIN_MATRIX_YUV601_GBR,
VDIN_MATRIX_YUV601_BRG,
VDIN_MATRIX_RGB_YUV601F,
VDIN_MATRIX_YUV601F_RGB,
VDIN_MATRIX_RGBS_YUV601,
VDIN_MATRIX_YUV601_RGBS,
VDIN_MATRIX_RGBS_YUV601F,
VDIN_MATRIX_YUV601F_RGBS,
VDIN_MATRIX_YUV601F_YUV601,
VDIN_MATRIX_YUV601_YUV601F,
VDIN_MATRIX_RGB_YUV709,
VDIN_MATRIX_YUV709_RGB,
VDIN_MATRIX_YUV709_GBR,
VDIN_MATRIX_YUV709_BRG,
VDIN_MATRIX_RGB_YUV709F,
VDIN_MATRIX_YUV709F_RGB,
VDIN_MATRIX_RGBS_YUV709,
VDIN_MATRIX_YUV709_RGBS,
VDIN_MATRIX_RGBS_YUV709F,
VDIN_MATRIX_YUV709F_RGBS,
VDIN_MATRIX_YUV709F_YUV709,
VDIN_MATRIX_YUV709_YUV709F,
VDIN_MATRIX_YUV601_YUV709,
VDIN_MATRIX_YUV709_YUV601,
VDIN_MATRIX_YUV601_YUV709F,
VDIN_MATRIX_YUV709F_YUV601,
VDIN_MATRIX_YUV601F_YUV709,
VDIN_MATRIX_YUV709_YUV601F,
VDIN_MATRIX_YUV601F_YUV709F,
VDIN_MATRIX_YUV709F_YUV601F,
VDIN_MATRIX_RGBS_RGB,
VDIN_MATRIX_RGB_RGBS,
};
/* *************************************************** */
/* *** structure definitions ************************* */
/* *************************************************** */
struct vdin_matrix_lup_s {
unsigned int pre_offset0_1;
unsigned int pre_offset2;
unsigned int coef00_01;
unsigned int coef02_10;
unsigned int coef11_12;
unsigned int coef20_21;
unsigned int coef22;
unsigned int post_offset0_1;
unsigned int post_offset2;
};
#ifdef CONFIG_AML_LOCAL_DIMMING
struct ldim_max_s {
/* general parameters */
int ld_pic_rowmax;
int ld_pic_colmax;
int ld_stamax_hidx[11]; /* U12* 9 */
int ld_stamax_vidx[11]; /* u12x 9 */
};
#endif
extern unsigned int game_mode;
/* ************************************************************************ */
/* ******** GLOBAL FUNCTION CLAIM ******** */
/* ************************************************************************ */
extern void vdin_set_vframe_prop_info(struct vframe_s *vf,
struct vdin_dev_s *devp);
extern void LDIM_Initial_2(int pic_h, int pic_v, int BLK_Vnum,
int BLK_Hnum, int BackLit_mode, int ldim_bl_en, int ldim_hvcnt_bypass);
extern void vdin_get_format_convert(struct vdin_dev_s *devp);
extern enum vdin_format_convert_e vdin_get_format_convert_matrix0(
struct vdin_dev_s *devp);
extern enum vdin_format_convert_e vdin_get_format_convert_matrix1(
struct vdin_dev_s *devp);
extern void vdin_set_prob_xy(unsigned int offset, unsigned int x,
unsigned int y, struct vdin_dev_s *devp);
extern void vdin_get_prob_rgb(unsigned int offset, unsigned int *r,
unsigned int *g, unsigned int *b);
extern void vdin_set_all_regs(struct vdin_dev_s *devp);
extern void vdin_set_default_regmap(unsigned int offset);
extern void vdin_set_def_wr_canvas(struct vdin_dev_s *devp);
extern void vdin_hw_enable(unsigned int offset);
extern void vdin_hw_disable(unsigned int offset);
extern unsigned int vdin_get_field_type(unsigned int offset);
extern int vdin_vsync_reset_mif(int index);
extern void vdin_set_cutwin(struct vdin_dev_s *devp);
extern void vdin_set_decimation(struct vdin_dev_s *devp);
extern void vdin_fix_nonstd_vsync(struct vdin_dev_s *devp);
extern unsigned int vdin_get_meas_hcnt64(unsigned int offset);
extern unsigned int vdin_get_meas_vstamp(unsigned int offset);
extern unsigned int vdin_get_active_h(unsigned int offset);
extern unsigned int vdin_get_active_v(unsigned int offset);
extern unsigned int vdin_get_total_v(unsigned int offset);
extern unsigned int vdin_get_canvas_id(unsigned int offset);
extern void vdin_set_canvas_id(struct vdin_dev_s *devp,
unsigned int rdma_enable, unsigned int canvas_id);
extern unsigned int vdin_get_chma_canvas_id(unsigned int offset);
extern void vdin_set_chma_canvas_id(struct vdin_dev_s *devp,
unsigned int rdma_enable, unsigned int canvas_id);
extern void vdin_enable_module(unsigned int offset, bool enable);
extern void vdin_set_matrix(struct vdin_dev_s *devp);
extern void vdin_set_matrixs(struct vdin_dev_s *devp, unsigned char no,
enum vdin_format_convert_e csc);
extern bool vdin_check_cycle(struct vdin_dev_s *devp);
extern bool vdin_write_done_check(unsigned int offset,
struct vdin_dev_s *devp);
extern void vdin_calculate_duration(struct vdin_dev_s *devp);
extern void vdin_wr_reverse(unsigned int offset, bool hreverse,
bool vreverse);
extern void vdin_set_hvscale(struct vdin_dev_s *devp);
extern void vdin_set_bitdepth(struct vdin_dev_s *devp);
extern void vdin_set_cm2(unsigned int offset, unsigned int w,
unsigned int h, unsigned int *data);
extern void vdin_bypass_isp(unsigned int offset);
extern void vdin_set_mpegin(struct vdin_dev_s *devp);
extern void vdin_force_gofiled(struct vdin_dev_s *devp);
extern void vdin_adjust_tvafesnow_brightness(void);
extern void vdin_set_config(struct vdin_dev_s *devp);
extern void vdin_set_wr_mif(struct vdin_dev_s *devp);
extern void vdin_dolby_config(struct vdin_dev_s *devp);
extern void vdin_dolby_buffer_update(struct vdin_dev_s *devp,
unsigned int index);
extern void vdin_dolby_addr_update(struct vdin_dev_s *devp, unsigned int index);
extern void vdin_dolby_addr_alloc(struct vdin_dev_s *devp, unsigned int size);
extern void vdin_dolby_addr_release(struct vdin_dev_s *devp, unsigned int size);
extern int vdin_event_cb(int type, void *data, void *op_arg);
extern void vdin_hdmiin_patch(struct vdin_dev_s *devp);
extern void vdin_set_top(unsigned int offset,
enum tvin_port_e port,
enum tvin_color_fmt_e input_cfmt, unsigned int h,
enum bt_path_e bt_path);
extern void vdin_set_wr_ctrl_vsync(struct vdin_dev_s *devp,
unsigned int offset, enum vdin_format_convert_e format_convert,
unsigned int color_depth_mode, unsigned int source_bitdeth,
unsigned int rdma_enable);
extern void vdin_urgent_patch_resume(unsigned int offset);
extern void vdin_set_drm_data(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern u32 vdin_get_curr_field_type(struct vdin_dev_s *devp);
extern void vdin_set_source_type(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern void vdin_set_source_mode(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern void vdin_set_source_bitdepth(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern void vdin_set_pixel_aspect_ratio(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern void vdin_set_display_ratio(struct vdin_dev_s *devp,
struct vframe_s *vf);
extern void vdin_source_bitdepth_reinit(struct vdin_dev_s *devp);
extern void set_invert_top_bot(bool invert_flag);
extern void vdin_clk_onoff(struct vdin_dev_s *devp, bool onoff);
extern enum tvin_force_color_range_e color_range_force;
extern void vdin_vlock_input_sel(unsigned int type,
enum vframe_source_type_e source_type);
#endif