Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
/* 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