sdk-hwV1.3/lichee/linux-4.9/drivers/char/sunxi_dspo/dspo_reg.h

566 lines
13 KiB
C
Raw Normal View History

2024-05-07 10:09:20 +00:00
/*
* dspo_reg.h
*
* Copyright (c) 2007-2021 Allwinnertech Co., Ltd.
* Author: zhengxiaobin <zhengxiaobin@allwinnertech.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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 DSPO_REG_H_
#define DSPO_REG_H_
// DSPO(Video data parallel output)
// offset:0x00
typedef union {
__u32 dwval;
struct {
__u32 dspo_mudule_en : 1;
__u32 seperate_sync_en : 1;
__u32 soft_rst : 1;
__u32 dma_aidb_sel : 1;
__u32 bist_mode : 1;
__u32 res00 : 27;
} bits;
} dspo_ctrl_reg;
// DSPO(Video data parallel output)
// offset:0x04
typedef union {
__u32 dwval;
struct {
__u32 output_data_width : 1;
__u32 interlace_mode : 1;
__u32 data_src_sel : 1;
__u32 res00 : 1;
__u32 embedded_sync_fmt : 1;
__u32 res01 : 3;
__u32 data_seq_sel : 2;
__u32 res02 : 22;
} bits;
} dspo_fmt_reg;
// DSPO(Video data parallel output)
// offset:0x08
typedef union {
__u32 dwval;
struct {
__u32 h_blank_pol : 1;
__u32 v_blank_pol : 1;
__u32 field_pol : 1;
__u32 dclk_invert : 1;
__u32 dclk_dly_num : 6;
__u32 dclk_dly_en : 1;
__u32 res00 : 21;
} bits;
} dspo_sync_ctrl_reg;
// DSPO(Video data parallel output)
// offset:0xc
typedef union {
__u32 dwval;
struct {
__u32 line_match_int_en : 1;
__u32 vb_int_en : 1;
__u32 res00 : 2;
__u32 dma_desc_int_en : 1;
__u32 dma_done_int_en : 1;
__u32 line_int_en : 1;
__u32 frame_int_en : 1;
__u32 dma_uv_line_int_en : 1;
__u32 line_buf_uv_underflow_int_en : 1;
__u32 line_buf_y_underflow_int_en : 1;
__u32 line_buf_uv_overflow_int_en : 1;
__u32 line_buf_y_overflow_int_en : 1;
__u32 res01 : 3;
__u32 line_match_int_flag : 1;
__u32 vb_int_flag : 1;
__u32 res02 : 2;
__u32 dma_desc_int_flag : 1;
__u32 dma_done_int_flag : 1;
__u32 line_int_flag : 1;
__u32 frame_int_flag : 1;
__u32 dma_uv_line_int_flag : 1;
__u32 line_buf_uv_underflow_int_flag : 1;
__u32 line_buf_y_underflow_int_flag : 1;
__u32 line_buf_uv_overflow_int_flag : 1;
__u32 line_buf_y_overflow_int_flag : 1;
__u32 res03 : 3;
} bits;
} dspo_int_ctrl_reg;
// DSPO(Video data parallel output)
// offset:0x10
typedef union {
__u32 dwval;
struct {
__u32 int_line_num : 12;
__u32 res00 : 20;
} bits;
} dspo_line_int_num_reg;
// DSPO(Video data parallel output)
// offset:0x14
typedef union {
__u32 dwval;
struct {
__u32 current_line : 13;
__u32 res00 : 3;
__u32 field_pol_sta : 1;
__u32 res010 : 15;
} bits;
} dspo_status_reg;
// DSPO(Video data parallel output)
// offset:0x18
typedef union {
__u32 dwval;
struct {
__u32 cb_hori_spl_type : 3;
__u32 res00 : 1;
__u32 cr_hori_spl_type : 3;
__u32 res01 : 15;
} bits;
} dspo_hor_spl_ctrl_reg;
// DSPO(Video data parallel output)
// offset:0x1c
typedef union {
__u32 dwval;
struct {
__u32 y_val_range_min : 8;
__u32 res00 : 8;
__u32 y_val_range_max : 8;
__u32 res01 : 8;
} bits;
} dspo_clamp_reg0;
// DSPO(Video data parallel output)
// offset:0x20
typedef union {
__u32 dwval;
struct {
__u32 cb_val_range_min : 8;
__u32 res00 : 8;
__u32 cb_val_range_max : 8;
__u32 res01 : 8;
} bits;
} dspo_clamp_reg1;
// DSPO(Video data parallel output)
// offset:0x24
typedef union {
__u32 dwval;
struct {
__u32 cr_val_range_min : 8;
__u32 res00 : 8;
__u32 cr_val_range_max : 8;
__u32 res01 : 8;
} bits;
} dspo_clamp_reg2;
// offset:0x30
typedef union {
__u32 dwval;
struct {
__u32 v_total_para : 13;
__u32 res00 : 2;
__u32 V_total_cfg_auto : 1;
__u32 interlace_mode_op : 1;
__u32 res01 : 15;
} bits;
} dspo_interlace_mode_reg;
// offset:0x34
typedef union {
__u32 dwval;
struct {
__u32 h_sync : 10;
__u32 res00 : 6;
__u32 h_fp : 12;
__u32 res01 : 4;
} bits;
} dspo_h_timing_reg0;
// offset:0x38
typedef union {
__u32 dwval;
struct {
__u32 h_active : 13;
__u32 res00 : 3;
__u32 h_bp : 12;
__u32 res01 : 4;
} bits;
} dspo_h_timing_reg1;
// offset:0x3C
typedef union {
__u32 dwval;
struct {
__u32 v_sync : 10;
__u32 res00 : 6;
__u32 v_fp : 12;
__u32 res01 : 4;
} bits;
} dspo_v_timing_reg0;
// offset:0x40
typedef union {
__u32 dwval;
struct {
__u32 v_active : 12;
__u32 res00 : 4;
__u32 v_bp : 12;
__u32 res01 : 4;
} bits;
} dspo_v_timing_reg1;
// offset:0x44
typedef union {
__u32 dwval;
struct {
__u32 dma_start : 1;
__u32 res01 : 31;
} bits;
} dspo_dma_start_reg;
// offset:0x4C
typedef union {
__u32 dwval;
struct {
__u32 input_data_type : 4;
__u32 res00 : 1;
__u32 dma_block_size_sel : 2;
__u32 descriptor_mode : 1;
__u32 res01 : 1;
__u32 dma_start_check_en : 1;
__u32 res02 : 2;
__u32 dma_start_check : 7;
__u32 res03 : 6;
__u32 tcon_tri_mode : 1;
__u32 tcon_tri : 1;
__u32 tcon_manu : 1;
__u32 tcon_manu_en : 1;
__u32 res04 : 3;
} bits;
} dspo_dma_tcon_ctrl_reg;
// offset:0x50
typedef union {
__u32 dwval;
struct {
__u32 y : 16;
__u32 x : 16;
} bits;
} dspo_dma_size_reg;
// offset:0x54
typedef union {
__u32 dwval;
struct {
__u32 buf0_addr : 32;
} bits;
} dspo_dma_y_base_addr_reg;
// offset:0x58
typedef union {
__u32 dwval;
struct {
__u32 buf1_addr : 32;
} bits;
} dspo_dma_crcb_base_addr_reg;
// offset:0x5C
typedef union {
__u32 dwval;
struct {
__u32 buf0_line_stride : 16;
__u32 buf1_line_stride : 16;
} bits;
} dspo_dma_buf_line_stride_reg;
// offset:0x60
typedef union {
__u32 dwval;
struct {
__u32 desc_base_addr : 32;
} bits;
} dspo_desc_base_addr_reg;
// offset:0x64
typedef union {
__u32 dwval;
struct {
__u32 ceu_en : 1;
} bits;
} dspo_csc_ceu_ctl_reg;
// offset:0x70~0x98
typedef union {
__u32 dwval;
struct {
__u32 ceu_coef_mul_val : 13;
__u32 res00 : 19;
} bits;
} dspo_csc_ceu_coef_mul_reg;
// offset:0xA0~0xA8
typedef union {
__u32 dwval;
struct {
__u32 ceu_coef_add_val : 19;
__u32 res00 : 13;
} bits;
} dspo_csc_ceu_coef_reg;
// offset:0xB0~0xB8
typedef union {
__u32 dwval;
struct {
__u32 ceu_coef_range_max : 8;
__u32 res00 : 8;
__u32 ceu_coef_range_min : 8;
__u32 res01 : 8;
} bits;
} dspo_csc_ceu_coef_rang_reg;
// offset:0xC0
typedef union {
__u32 dwval;
struct {
__u32 dma_mode_lb_y_cap : 12;
__u32 res00 : 20;
} bits;
} dspo_line_buf_rang_reg0;
// offset:0xC4
typedef union {
__u32 dwval;
struct {
__u32 dma_mode_lb_uv_cap : 12;
__u32 res00 : 20;
} bits;
} dspo_line_buf_rang_reg1;
// offset:0xC8
typedef union {
__u32 dwval;
struct {
__u32 aidb_mode_lb_cap : 12;
__u32 res00 : 20;
} bits;
} dspo_line_buf_rang_reg2;
// offset:0xCC
typedef union {
__u32 dwval;
struct {
__u32 line_buf_cap_rdy : 1;
__u32 res00 : 31;
} bits;
} dspo_line_buf_rang_reg3;
// offset:0xD0
typedef union {
__u32 dwval;
struct {
__u32 aidb_capture_en : 1;
__u32 aidb_first_frm_discard : 1;
__u32 res00 : 2;
__u32 aidb_tri_dly : 18;
__u32 res01 : 10;
} bits;
} dspo_aidb_ctrl_reg;
// offset:0xD4
typedef union {
__u32 dwval;
struct {
__u32 aidb_v_blank_num : 31;
} bits;
} dspo_aidb_v_timing_reg0;
// offset:0xD8
typedef union {
__u32 dwval;
struct {
__u32 aidb_v_active_num : 31;
} bits;
} dspo_aidb_v_timing_reg1;
// offset:0xDC
typedef union {
__u32 dwval;
struct {
__u32 aidb_h_blank_num : 31;
} bits;
} dspo_aidb_h_timing_reg0;
// offset:0xE0
typedef union {
__u32 dwval;
struct {
__u32 aidb_h_active_num : 31;
} bits;
} dspo_aidb_h_timing_reg1;
// offset:0x100
typedef union {
__u32 dwval;
struct {
__u32 bist_en : 1;
__u32 bist_wdata_pat : 3;
__u32 bist_addr_mode_sel : 1;
__u32 bist_reg_sel : 3;
__u32 bist_busy : 1;
__u32 bist_stop : 1;
__u32 bist_err_cyc : 2;
__u32 bist_err_pat : 3;
__u32 bist_err_sta : 1;
__u32 res00 : 16;
} bits;
} dspo_bist_ctrl_reg;
// offset:0x104
typedef union {
__u32 dwval;
struct {
__u32 bist_start_addr : 31;
} bits;
} dspo_bist_start_addr_reg;
// offset:0x108
typedef union {
__u32 dwval;
struct {
__u32 bist_end_addr : 31;
} bits;
} dspo_bist_end_addr_reg;
// offset:0x10C
typedef union {
__u32 dwval;
struct {
__u32 bist_data_mask : 31;
} bits;
} dspo_bist_data_mask_reg;
typedef union {
__u32 dwval;
struct {
__u32 res00 : 31;
} bits;
} dspo_res_reg;
typedef struct {
dspo_ctrl_reg module_ctrl; // 0x00
dspo_fmt_reg fmt_ctrl; // 0x04
dspo_sync_ctrl_reg sync_ctrl; // 0x08
dspo_int_ctrl_reg int_ctrl; // 0x0c
dspo_line_int_num_reg line_int_num; // 0x10
dspo_status_reg status; // 0x14
dspo_hor_spl_ctrl_reg hor_spl_ctrl; // 0x18
dspo_clamp_reg0 clamp0; // 0x1c
dspo_clamp_reg1 clamp1; // 0x20
dspo_clamp_reg2 clamp2; // 0x24
dspo_res_reg res000; // 0x28
dspo_res_reg res001; // 0x2C
dspo_interlace_mode_reg interlace_mode; // 0x30
dspo_h_timing_reg0 h_timing0; // 0x34
dspo_h_timing_reg1 h_timing1; // 0x38
dspo_v_timing_reg0 v_timing0; // 0x3C
dspo_v_timing_reg1 v_timing1; // 0x40
dspo_dma_start_reg dma_start; // 0x44
dspo_res_reg res002; // 0x48
dspo_dma_tcon_ctrl_reg dma_tcon_ctrl; // 0x4C
dspo_dma_size_reg dma_size; // 0x50
dspo_dma_y_base_addr_reg dma_y_base_addr; // 0x54
dspo_dma_crcb_base_addr_reg dma_crcb_base_addr; // 0x58
dspo_dma_buf_line_stride_reg dma_buf_line_stride; // 0x5C
dspo_desc_base_addr_reg desc_base_addr; // 0x60
dspo_csc_ceu_ctl_reg csc_ceu_ctl; // 0x64
dspo_res_reg res003; // 0x68
dspo_res_reg res004; // 0x6C
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_rr; // 0x70
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_rg; // 0x74
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_rb; // 0x78
dspo_res_reg res005; // 0x7C
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_gr; // 0x80
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_gg; // 0x84
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_gb; // 0x88
dspo_res_reg res006; // 0x8C
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_br; // 0x90
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_bg; // 0x94
dspo_csc_ceu_coef_mul_reg csc_ceu_coef_mul_bb; // 0x98
dspo_res_reg res007; // 0x9C
dspo_csc_ceu_coef_reg csc_ceu_coef_rc; // 0xA0
dspo_csc_ceu_coef_reg csc_ceu_coef_gc; // 0xA4
dspo_csc_ceu_coef_reg csc_ceu_coef_bc; // 0xA8
dspo_res_reg res008; // 0xAC
dspo_csc_ceu_coef_rang_reg csc_ceu_coef_rang_y; // 0xB0
dspo_csc_ceu_coef_rang_reg csc_ceu_coef_rang_u; // 0xB4
dspo_csc_ceu_coef_rang_reg csc_ceu_coef_rang_v; // 0xB8
dspo_res_reg res009; // 0xBC
dspo_line_buf_rang_reg0 line_buf_rang0; // 0xC0
dspo_line_buf_rang_reg1 line_buf_rang1; // 0xC4
dspo_line_buf_rang_reg2 line_buf_rang2; // 0xC8
dspo_line_buf_rang_reg3 line_buf_rang3; // 0xCC
dspo_aidb_ctrl_reg aidb_ctrl; // 0xD0
dspo_aidb_v_timing_reg0 aidb_v_timing0; // 0xD4
dspo_aidb_v_timing_reg1 aidb_v_timing1; // 0xD8
dspo_aidb_h_timing_reg0 aidb_h_timing0; // 0xDC
dspo_aidb_h_timing_reg1 aidb_h_timing1; // 0xE0
dspo_res_reg res010[7]; // 0xE4~0xFc
dspo_bist_ctrl_reg bist_ctrl; // 0x100
dspo_bist_start_addr_reg bist_start_addr; // 0x104
dspo_bist_end_addr_reg bist_end_addr; // 0x108
dspo_bist_data_mask_reg bist_data_mask; // 0x10C
} __dspo_dev;
extern volatile __dspo_dev *dspo_dev[1];
// function member
void dspo_module_en(u32 dev_sel, u32 module_en, u32 sepa_sync_en);
void dspo_fmt_set(u32 dev_sel, u32 data_seq_sel, u32 sync_fmt, u32 data_width,
u32 interlace);
void dspo_chroma_spl_set(u32 dev_sel, u8 cr_type, u8 cb_type);
void dspo_clamp_set(u32 dev_sel, u16 y_min, u16 y_max, u16 cb_min, u16 cb_max,
u16 cr_min, u16 cr_max);
void dspo_sync_pol_set(u32 dev_sel, u8 hb_pol, u8 vb_pol, u8 field_pol);
void dspo_dclk_adjust(u32 dev_sel, u8 dclk_invt, u8 dly_en, u8 dly_num);
u32 dspo_get_curline(u32 sel);
u32 dspo_get_field(u32 sel);
void dspo_irq_en(u32 sel, u32 int_type, u32 line);
void dspo_irq_disable(u32 sel, u32 int_type);
u32 dspo_irq_process(u32 sel);
u32 dspo_clr_irq(u32 sel, u32 int_type);
void dspo_timing_set(u32 sel, u32 h_active, u32 hbp, u32 hfp, u32 hsync,
u32 v_active, u32 vbp, u32 v_total, u32 vfp, u32 vsync,
u32 interlace, u32 itl_mode);
void dspo_set_reg_base(u32 sel, unsigned long base);
void dspo_yuv_data_src_sel(u32 dev_sel, u32 sel);
void dspo_dma_start(u32 sel);
void dspo_dma_ctrl_set(u32 sel, u32 desc_mode, u32 block_size_sel,
u32 input_data_type);
void dspo_rgb2yuv(u32 sel);
void dspo_dma_start_check_set(u32 sel, u32 start_chk_dly, u32 start_chk_en);
void dspo_dma_size_set(u32 sel, u32 x, u32 y);
void dspo_dma_mode_line_buf_range_set(u32 sel, u32 x);
void dspo_dma_y_addr_set(u32 sel, u32 addr);
void dspo_dma_uv_addr_set(u32 sel, u32 addr);
void dspo_dma_buf_line_stride_set(u32 sel, u32 y_line_stride,
u32 uv_line_stride);
void dspo_ceu_enable(u32 sel, u32 en);
#endif