455 lines
8.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/********************************************************************************
*
* Copyright (C) 2017 NEXTCHIP Inc. All rights reserved.
* Module : Jaguar1 Device Driver
* Description : common.h
* Author :
* Date :
* Version : Version 1.0
*
********************************************************************************
* History :
*
*
********************************************************************************/
#ifndef __COMMON_H__
#define __COMMON_H__
unsigned char jaguar1_I2CReadByte8(unsigned char devaddress, unsigned char address);
void jaguar1_I2CWriteByte8(unsigned char devaddress, unsigned char address, unsigned char data);
#define gpio_i2c_read jaguar1_I2CReadByte8
#define gpio_i2c_write jaguar1_I2CWriteByte8
#define DRIVER_VER "1.1.7"
#define JAGUAR1_MAX_CHAN_CNT 4
extern unsigned int jaguar1_i2c_addr[4];
#define HI_CHIPID_BASE 0x12050000
#define HI_CHIPID0 IO_ADDRESS(HI_CHIPID_BASE + 0xEEC)
#define HI_CHIPID1 IO_ADDRESS(HI_CHIPID_BASE + 0xEE8)
#define HI_CHIPID2 IO_ADDRESS(HI_CHIPID_BASE + 0xEE4)
#define HI_CHIPID3 IO_ADDRESS(HI_CHIPID_BASE + 0xEE0)
#define HW_REG(reg) *((volatile unsigned int *)(reg))
#define _SET_BIT(data,bit) ((data)|=(1<<(bit)))
#define _CLE_BIT(data,bit) ((data)&=(~(1<<(bit))))
#define JAGUAR1_BANK_CHANGE(bank) gpio_i2c_write(jaguar1_i2c_addr[0], 0xFF, bank );
#define PORTA 0x00
#define PORTB 0x01
#define PORTC 0x02
#define PORTD 0x03
#define PORTAB 0x04
#define PORTCD 0x05
#define FUNC_ON 0x01
#define FUNC_OFF 0x00
#define BANK_0 0x00
#define BANK_1 0x01
#define BANK_2 0x02
#define BANK_3 0x03
#define BANK_4 0x04
#define BANK_5 0x05
#define BANK_A 0x0A
#define BANK_B 0x0B
#define BANK_11 0x11
#define BANK_13 0x13
#define BANK_20 0x20
#define BANK_21 0x21
#define BANK_22 0x22
typedef struct _decoder_get_information_str
{
unsigned char chip_id[4];
unsigned char chip_rev[4];
unsigned char chip_addr[4];
unsigned char Total_Port_Num;
unsigned char Total_Chip_Cnt;
}decoder_get_information_str;
typedef struct _decoder_dev_ch_info_s
{
unsigned char ch;
unsigned char devnum;
unsigned char fmt_def;
}decoder_dev_ch_info_s;
typedef enum NC_FORMAT_FPS
{
FMT_FPS_UNKNOWN = 0,
FMT_NT = 1,
FMT_PAL,
FMT_12_5P,
FMT_7_5P,
FMT_30P,
FMT_25P,
FMT_50P,
FMT_60P,
FMT_15P,
FMT_18P,
FMT_18_75P,
FMT_20P,
FMT_FPS_MAX,
} NC_FORMAT_FPS;
//#define FMT_AUTO (-1)
typedef enum NC_FORMAT_STANDARD
{
FMT_STD_UNKNOWN = 0,
FMT_SD,
FMT_AHD20,
FMT_AHD30,
FMT_TVI,
FMT_CVI,
FMT_AUTO, // FIXME
FMT_STD_MAX,
} NC_FORMAT_STANDARD;
typedef enum NC_FORMAT_RESOLUTION
{
FMT_RESOL_UNKNOWN = 0,
FMT_SH720,
FMT_H960,
FMT_H1280,
FMT_H1440,
FMT_H960_EX,
FMT_H960_2EX,
FMT_H960_Btype_2EX,
FMT_720P,
FMT_720P_EX,
FMT_720P_Btype,
FMT_720P_Btype_EX,
FMT_1080P,
FMT_3M,
FMT_4M,
FMT_5M,
FMT_5_3M,
FMT_6M,
FMT_8M_X,
FMT_8M,
FMT_960P,
FMT_H960_Btype_2EX_SP,
FMT_720P_Btype_EX_SP,
FMT_RESOL_MAX,
} NC_FORMAT_RESOLUTION;
typedef enum NC_VIVO_CH_FORMATDEF
{
NC_VIVO_CH_FORMATDEF_UNKNOWN = 0,
NC_VIVO_CH_FORMATDEF_AUTO,
AHD20_SD_H960_NT,
AHD20_SD_H960_PAL,
AHD20_SD_SH720_NT,
AHD20_SD_SH720_PAL,
AHD20_SD_H1280_NT,
AHD20_SD_H1280_PAL,
AHD20_SD_H1440_NT,
AHD20_SD_H1440_PAL,
AHD20_SD_H960_EX_NT,
AHD20_SD_H960_EX_PAL,
AHD20_SD_H960_2EX_NT,
AHD20_SD_H960_2EX_PAL,
AHD20_SD_H960_2EX_Btype_NT,
AHD20_SD_H960_2EX_Btype_PAL,
AHD20_1080P_60P, // For Test
AHD20_1080P_50P, // For Test
AHD20_1080P_30P,
AHD20_1080P_25P,
AHD20_720P_60P,
AHD20_720P_50P,
AHD20_720P_30P,
AHD20_720P_25P,
AHD20_720P_30P_EX,
AHD20_720P_25P_EX,
AHD20_720P_30P_EX_Btype,
AHD20_720P_25P_EX_Btype,
AHD20_720P_960P_30P,
AHD20_720P_960P_25P,
AHD30_4M_30P,
AHD30_4M_25P,
AHD30_4M_15P,
AHD30_3M_30P,
AHD30_3M_25P,
AHD30_3M_18P,
AHD30_5M_12_5P,
AHD30_5M_20P,
AHD30_5_3M_20P,
AHD30_6M_18P,
AHD30_6M_20P,
AHD30_8M_X_30P,
AHD30_8M_X_25P,
AHD30_8M_7_5P,
AHD30_8M_12_5P,
AHD30_8M_15P,
TVI_FHD_30P,
TVI_FHD_25P,
TVI_HD_60P,
TVI_HD_50P,
TVI_HD_30P,
TVI_HD_25P,
TVI_HD_30P_EX,
TVI_HD_25P_EX,
TVI_HD_B_30P,
TVI_HD_B_25P,
TVI_HD_B_30P_EX,
TVI_HD_B_25P_EX,
TVI_3M_18P,
TVI_5M_12_5P,
TVI_4M_30P,
TVI_4M_25P,
TVI_4M_15P,
CVI_FHD_30P,
CVI_FHD_25P,
CVI_HD_60P,
CVI_HD_50P,
CVI_HD_30P,
CVI_HD_25P,
CVI_HD_30P_EX,
CVI_HD_25P_EX,
CVI_4M_30P,
CVI_4M_25P,
CVI_8M_15P,
CVI_8M_12_5P,
AHD20_SD_H960_2EX_Btype_SP_NT,
AHD20_SD_H960_2EX_Btype_SP_PAL,
AHD20_720P_30P_EX_Btype_SP,
AHD20_720P_25P_EX_Btype_SP,
NC_VIVO_CH_FORMATDEF_MAX,
} NC_VIVO_CH_FORMATDEF;
typedef enum NC_OUTPUT_MUX_MODE
{
NC_MX_MUX1 = 0,
NC_MX_MUX2,
NC_MX_MUX4,
} NC_OUTPUT_MUX_MODE;
typedef enum NC_OUTPUT_INTERFACE
{
NC_OI_BT656 = 0, /* ITU-R BT.656 YUV4:2:2 */
NC_OI_BT601, /* ITU-R BT.601 YUV4:2:2 */
NC_OI_DIGITAL_CAMERA, /* digatal camera mode */
NC_OI_BT1120_STANDARD, /* BT.1120 progressive mode */
NC_OI_BT1120_INTERLEAVED, /* BT.1120 interstage mode */
} NC_OUTPUT_INTERFACE;
typedef enum NC_OUTPUT_EDGE
{
NC_OE_SINGLE_UP = 0, /* single-edge mode and in rising edge */
NC_OE_SINGLE_DOWN, /* single-edge mode and in falling edge */
NC_OE_DOUBLE ,
} NC_OUTPUT_EDGE;
typedef enum NC_ANALOG_INPUT
{
SINGLE_ENDED = 0,
DIFFERENTIAL,
} NC_ANALOG_INPUT;
typedef enum NC_CABLE
{
CABLE_A = 0,
CABLE_B,
CABLE_C,
CABLE_D,
} NC_CABLE;
typedef enum NC_STAGE
{
STAGE_0 = 0,
STAGE_1,
STAGE_2,
STAGE_3,
STAGE_4,
STAGE_5,
} NC_STAGE;
typedef enum NC_JAGUAR1_EQ
{
NC_EQ_SETTING_FMT_UNKNOWN = 0,
AHD20_SD_H720_NT_SINGLE_ENDED,
AHD20_SD_H720_NT_DIFFERENTIAL,
AHD20_SD_H720_PAL_SINGLE_ENDED,
AHD20_SD_H720_PAL_DIFFERENTIAL,
AHD20_SD_H960_2EX_Btype_NT_SINGLE_ENDED,
AHD20_SD_H960_2EX_Btype_NT_DIFFERENTIAL,
AHD20_SD_H960_2EX_Btype_PAL_SINGLE_ENDED,
AHD20_SD_H960_2EX_Btype_PAL_DIFFERENTIAL,
AHD20_SD_H1440_NT_SINGLE_ENDED,
AHD20_SD_H1440_NT_DIFFERENTIAL,
AHD20_SD_H1440_PAL_SINGLE_ENDED,
AHD20_SD_H1440_PAL_DIFFERENTIAL,
AHD20_1080P_30P_SINGLE_ENDED,
AHD20_1080P_30P_DIFFERENTIAL,
AHD20_1080P_25P_SINGLE_ENDED,
AHD20_1080P_25P_DIFFERENTIAL,
AHD20_720P_60P_SINGLE_ENDED,
AHD20_720P_60P_DIFFERENTIAL,
AHD20_720P_50P_SINGLE_ENDED,
AHD20_720P_50P_DIFFERENTIAL,
AHD20_720P_30P_SINGLE_ENDED,
AHD20_720P_30P_DIFFERENTIAL,
AHD20_720P_25P_SINGLE_ENDED,
AHD20_720P_25P_DIFFERENTIAL,
AHD20_720P_30P_EX_SINGLE_ENDED,
AHD20_720P_30P_EX_DIFFERENTIAL,
AHD20_720P_25P_EX_SINGLE_ENDED,
AHD20_720P_25P_EX_DIFFERENTIAL,
AHD20_720P_30P_EX_Btype_SINGLE_ENDED,
AHD20_720P_30P_EX_Btype_DIFFERENTIAL,
AHD20_720P_25P_EX_Btype_SINGLE_ENDED,
AHD20_720P_25P_EX_Btype_DIFFERENTIAL,
AHD20_960P_30P_SINGLE_ENDED,
AHD20_960P_30P_DIFFERENTIAL,
AHD20_960P_25P_SINGLE_ENDED,
AHD20_960P_25P_DIFFERENTIAL,
TVI_FHD_30P_SINGLE_ENDED,
TVI_FHD_30P_DIFFERENTIAL,
TVI_FHD_25P_SINGLE_ENDED,
TVI_FHD_25P_DIFFERENTIAL,
TVI_HD_60P_SINGLE_ENDED,
TVI_HD_60P_DIFFERENTIAL,
TVI_HD_50P_SINGLE_ENDED,
TVI_HD_50P_DIFFERENTIAL,
TVI_HD_30P_SINGLE_ENDED,
TVI_HD_30P_DIFFERENTIAL,
TVI_HD_25P_SINGLE_ENDED,
TVI_HD_25P_DIFFERENTIAL,
TVI_HD_30P_EX_SINGLE_ENDED,
TVI_HD_30P_EX_DIFFERENTIAL,
TVI_HD_25P_EX_SINGLE_ENDED,
TVI_HD_25P_EX_DIFFERENTIAL,
TVI_HD_B_30P_SINGLE_ENDED,
TVI_HD_B_30P_DIFFERENTIAL,
TVI_HD_B_25P_SINGLE_ENDED,
TVI_HD_B_25P_DIFFERENTIAL,
TVI_HD_B_30P_EX_SINGLE_ENDED,
TVI_HD_B_30P_EX_DIFFERENTIAL,
TVI_HD_B_25P_EX_SINGLE_ENDED,
TVI_HD_B_25P_EX_DIFFERENTIAL,
CVI_FHD_30P_SINGLE_ENDED,
CVI_FHD_30P_DIFFERENTIAL,
CVI_FHD_25P_SINGLE_ENDED,
CVI_FHD_25P_DIFFERENTIAL,
CVI_HD_60P_SINGLE_ENDED,
CVI_HD_60P_DIFFERENTIAL,
CVI_HD_50P_SINGLE_ENDED,
CVI_HD_50P_DIFFERENTIAL,
CVI_HD_30P_SINGLE_ENDED,
CVI_HD_30P_DIFFERENTIAL,
CVI_HD_25P_SINGLE_ENDED,
CVI_HD_25P_DIFFERENTIAL,
CVI_HD_30P_EX_SINGLE_ENDED,
CVI_HD_30P_EX_DIFFERENTIAL,
CVI_HD_25P_EX_SINGLE_ENDED,
CVI_HD_25P_EX_DIFFERENTIAL,
NC_EQ_SETTING_FMT_MAX,
}NC_JAGUAR1_EQ;
typedef enum NC_D2S_OUTPUT_INTERFACE
{
DISABLE = 0,
YUV_422,
YUV_420,
YUV_420_LEGACY,
} NC_D2S_OUTPUT_INTERFACE;
typedef struct _NC_DEOCDER_SET_STR
{
NC_VIVO_CH_FORMATDEF FmtDef;
NC_FORMAT_STANDARD fmt_std;
NC_FORMAT_RESOLUTION fmt_res;
NC_FORMAT_FPS fmt_fps;
NC_ANALOG_INPUT input;
NC_D2S_OUTPUT_INTERFACE interface;
}NC_DEOCDER_SET_STR;
#define UNUSED(x) ((void)(x))
#if 0
#define dbg_printk(...) _kernel_dbg_printk( __VA_ARGS__)
static void _kernel_dbg_printk(const char* s, ...)
{
unsigned char buffer[128];
char *pS = buffer;
va_list args;
va_start(args, s);
vsprintf(buffer, s, args);
va_end(args);
while(*pS) { if( *pS == '\n' ) *pS= ' '; pS++; }
printk("\033[33m\033[1m [KERNEL] \033[0m:\033[32m\033[1m %s \033[0m\n", buffer);
}
#endif
#endif