nt9856x/BSP/u-boot/board/novatek/common/include/nvt_panel_init.h
2023-03-28 15:07:53 +08:00

329 lines
9.8 KiB
C
Executable File

/*
* nvt_panel_init.h
*
* Created: Mar 22, 2016
* Copyright: Novatek Inc.
*
*/
#ifndef __NVT_PANEL_INIT_H__
#define __NVT_PANEL_INIT_H__
#define TRUE 1
#define FALSE 0
#define BLEND_OSD_MODE 0
#define SEPARATE_OSD_MODE 1
#define _ENABLE_ 1
#define _DISABLE_ 0
#define _DEFAULT_ 0
#define PANEL_OUTPUT_LVDS_MODE ( 0x80 )
#define PANEL_OUTPUT_VX1_MODE ( 0x55 )
#define SYS_MPLL_PAGE_EN *((volatile unsigned long *)(SYS_CLK_REG_BASE + 0xBC))
#define SYS_CLK_REG_BASE (0xfd020000)
#define _SYS_MPLL_PAGE_B_EN 0x00000001
#define _SYS_MPLL_PAGE_0_EN 0x00000002
#define LCDSEL_SHIFTBITS 2
#define FHDSEL_SHIFTBITS 1
#define JEIDASEL_SHIFTBITS 0
#define HAL_READ_UINT32( _register_, _value_ ) \
((_value_) = *((volatile unsigned int *)(_register_)))
#define HAL_WRITE_UINT32( _register_, _value_ ) \
(*((volatile unsigned int *)(_register_)) = (_value_))
#define _MPLL_EnablePage0() \
SYS_MPLL_PAGE_EN = _SYS_MPLL_PAGE_0_EN;
#define GPE_DIR_OUTPUT(index) ((*(volatile unsigned long*)REG_GPE_DIR) |= (1<<(index)))
#define GPE_OUTPUT_SET(index) ((*(volatile unsigned long*)REG_GPE_SET) |= (1<<(index)))
#define REG_GPE_BASE (0xFD100000)
#define REG_GPE_SET (REG_GPE_BASE+0x04)
#define REG_GPE_DIR (REG_GPE_BASE+0x08)
#define GPB_DIR_OUTPUT(index) ((*(volatile unsigned long*)REG_GPB_DIR) |= (1<<(index)))
#define GPB_OUTPUT_SET(index) ((*(volatile unsigned long*)REG_GPB_SET) |= (1<<(index)))
#define GPB_OUTPUT_CLEAR(index) ((*(volatile unsigned long*)REG_GPB_CLEAR) = (0x00|(1<<(index))))
#define GPB_FUN_SET(index) ((*(volatile unsigned long*)REG_GPB_FUN) |= (1<<(index)))
#define REG_GPB_BASE (0xFD0F0000)
#define REG_GPB_SET (REG_GPB_BASE+0x44)
#define REG_GPB_DIR (REG_GPB_BASE+0x48)
#define REG_GPB_CLEAR (REG_GPB_BASE+0x40)
#define REG_GPB_FUN (REG_GPB_BASE+0x64)
#define REG_GPC_BASE (0xFD100000)
#define REG_GPC_CLEAR (REG_GPC_BASE+0x00)
#define REG_GPC_SET (REG_GPC_BASE+0x04)
#define REG_GPC_DIR (REG_GPC_BASE+0x08)
#define GPC_DIR_OUTPUT(index) ((*(volatile unsigned long*)REG_GPC_DIR) |= (1<<(index)))
#define GPC_OUTPUT_SET(index) ((*(volatile unsigned long*)REG_GPC_SET) |= (1<<(index)) )
#define GPC_OUTPUT_CLR(index) ((*(volatile unsigned long*)REG_GPC_CLEAR) |= (1<<(index)) )
#define P1C0B0X ( 0xFC0B0000 ) // T-Con
#define P1C0D00 ( 0xFC0D0000 ) // OSD...
#define P1D0600 ( 0xFD060000 )
#define P1D1001 ( 0xFD100100 ) // LVDS
#define P1D100C ( 0xFD100C00 )
#define P1D1010 ( 0xFD101000 )
#define P0F ( 0xFE000F00 )
#define P34 ( 0xFE003400 )
#define P7F ( 0xFE007F00 )
#define P1D6A00 ( 0xFD6A0000 )
#define P1D0200 ( 0xFD020000 )
#define P1D6800 (0xFD680000)
#define P1C1E00 (0xFC1E0000)
#define P1C1E01 (0xFC1E0100)
#define P1D0600R04 ( P1D0600 + 0x04 )
#define P1D1001R04 ( P1D1001 + 0x04 )
#define P1D1001R08 ( P1D1001 + 0x08 )
#define P1D1001R0C ( P1D1001 + 0x0C )
#define P1D1001R10 ( P1D1001 + 0x10 )
#define P1D1001R14 ( P1D1001 + 0x14 )
#define P1D100CR00 ( P1D100C + 0x00 )
#define P1D100CR04 ( P1D100C + 0x04 )
#define P1D100CR08 ( P1D100C + 0x08 )
#define P1D100CR0C ( P1D100C + 0x0C )
#define P1D100CR10 ( P1D100C + 0x10 )
#define P1D1010R1C ( P1D1010 + 0x1C )
#define P1D100CR18 ( P1D100C + 0x18 )
#define P1D0200RFC ( P1D0200 + 0xFC )
#define P0FR00 ( P0F + 0x00 )
#define P0FR04 ( P0F + 0x04 )
#define P0FR08 ( P0F + 0x08 )
#define P0FR0C ( P0F + 0x0C )
#define P0FR10 ( P0F + 0x10 )
#define P0FR14 ( P0F + 0x14 )
#define P0FR18 ( P0F + 0x18 )
#define P0FR1C ( P0F + 0x1C )
#define P0FR20 ( P0F + 0x20 )
#define P0FR28 ( P0F + 0x28 )
#define P0FR2C ( P0F + 0x2C )
#define P0FR30 ( P0F + 0x30 )
#define P0FR34 ( P0F + 0x34 )
#define P0FR38 ( P0F + 0x38 )
#define P0FR3C ( P0F + 0x3C )
#define P0FR40 ( P0F + 0x40 )
#define P0FR44 ( P0F + 0x44 )
#define P0FR48 ( P0F + 0x48 )
#define P0FR5C ( P0F + 0x5C )
#define P0FR60 ( P0F + 0x60 )
#define P0FREC ( P0F + 0xEC )
#define P0FRFC ( P0F + 0xFC )
#define P1C1E00R00 ( P1C1E00 + 0x00 )
#define P1C1E01R0C ( P1C1E01 + 0x0C )
typedef enum _PANEL_SEL
{
LED_1366x768,
LED_1920x1080,
LED_3840x2160,
PDP_1920x1080,
PDP_1024x768,
PDP_852x480
}PANEL_SEL;
typedef enum _EN_DRV_SCLR_VIDEO_OUTPUT_DITHER
{
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_SCALER_DITHER_10BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_SCALER_DITHER_8BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_SCALER_DITHER_6BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_DP_DITHER_10BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_DP_DITHER_8BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_DP_DITHER_6BITS,
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER_TOTAL
} EN_DRV_SCLR_VIDEO_OUTPUT_DITHER;
typedef enum _EN_DRV_SCLR_LVDS_OUT
{
EN_DRV_SCLR_LVDS_OUT_SINGLE,
EN_DRV_SCLR_LVDS_OUT_DUAL,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_1PORT_3PAIR_6X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_1PORT_6PAIR_6X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_2PORT_3PAIR_6X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_1PORT_3PAIR_8X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_1PORT_6PAIR_8X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_2PORT_3PAIR_8X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_2PORT_6PAIR_6X,
EN_DRV_SCLR_LVDS_OUT_MINI_LVDS_2PORT_6PAIR_8X,
EN_DRV_SCLR_VX1_OUT_VIDEO_8LAN_OSD_4LAN, // Video 4K2k 60 OSD 4k2k30
EN_DRV_SCLR_VX1_OUT_VIDEO_8LAN_OSD_2LAN, // Video 4K2k 60 OSD FULL HD
EN_DRV_SCLR_VX1_OUT_VIDEO_4LAN_OSD_4LAN, // Video 4K2k 30 OSD 4k2k30
EN_DRV_SCLR_VX1_OUT_VIDEO_4LAN_OSD_2LAN, // Video 4K2k 30 OSD FULL HD
EN_DRV_SCLR_VX1_OUT_VIDEO_2LAN_OSD_2LAN, // Video FULL HD OSD FULL HD
EN_DRV_SCLR_LVDS_OUT_TOTAL
} EN_DRV_SCLR_LVDS_OUT;
typedef enum _EN_DRV_SCLR_VX1_COMB
{
EN_DRV_SCLR_VX1_COMB_1LAN_NOOSD = 0x00, // 74.25MHz Video
EN_DRV_SCLR_VX1_COMB_1LAN_1LANOSD = 0x01, // 74.25MHz Video / OSD
EN_DRV_SCLR_VX1_COMB_2LAN_NOOSD = 0x02, // 148.5MHz Video
EN_DRV_SCLR_VX1_COMB_2LAN_1LANOSD = 0x03, // 148.5MHz Video; 74.25MHz OSD
EN_DRV_SCLR_VX1_COMB_2LAN_2LANOSD = 0x04, // 148.5MHz Video; 148.5MHz OSD
EN_DRV_SCLR_VX1_COMB_4LAN_NOOSD = 0x10, // 4K2K30 Video
EN_DRV_SCLR_VX1_COMB_4LAN_1LANOSD = 0x11, // 4K2K30 Video / 74.25MHz OSD,
EN_DRV_SCLR_VX1_COMB_4LAN_2LANOSD = 0x12, // 4K2K30 Video / FULL HD OSD,
EN_DRV_SCLR_VX1_COMB_4LAN_4LANOSD = 0x15, // 4K2K30 Video / 4K2K30 OSD,
EN_DRV_SCLR_VX1_COMB_8LAN_NOOSD = 0x16, // 4K2K60 Video
EN_DRV_SCLR_VX1_COMB_8LAN_1LANOSD = 0x17, // 4K2K60 Video / 74.25MHz OSD,
EN_DRV_SCLR_VX1_COMB_8LAN_2LANOSD = 0x18, // 4K2K60 Video / FULL HD OSD,
EN_DRV_SCLR_VX1_COMB_8LAN_4LANOSD = 0x1B, // 4K2K60 Video / 4K2K30 OSD,
EN_DRV_SCLR_VX1_COMB_TOTAL
} EN_DRV_SCLR_VX1COMB;
typedef enum _EN_DRV_SCLR_LVDS_FMT
{
#if defined(CONFIG_OLD_PANEL_PARAM)
EN_DRV_SCLR_LVDS_FMT_10BITS_NS,
EN_DRV_SCLR_LVDS_FMT_10BITS_JEIDA,
EN_DRV_SCLR_LVDS_FMT_10BITS_VESA,
EN_DRV_SCLR_LVDS_FMT_8BITS_VESA,
EN_DRV_SCLR_LVDS_FMT_8BITS_JEIDA,
#else
EN_DRV_SCLR_LVDS_FMT_8BITS_JEIDA,
EN_DRV_SCLR_LVDS_FMT_8BITS_VESA,
EN_DRV_SCLR_LVDS_FMT_10BITS_JEIDA,
EN_DRV_SCLR_LVDS_FMT_10BITS_VESA,
EN_DRV_SCLR_LVDS_FMT_10BITS_NS,
#endif
EN_DRV_SCLR_LVDS_FMT_TOTAL
} EN_DRV_SCLR_LVDS_FMT;
typedef enum _EN_DRV_SCLR_PANEL_RBSWAP
{
EN_DRV_SCLR_PANEL_RBSWAP_NORMAL,
EN_DRV_SCLR_PANEL_RBSWAP_SWAP,
EN_DRV_SCLR_PANEL_RBSWAP_TOTAL
} EN_DRV_SCLR_PANEL_RBSWAP;
typedef enum _EN_DRV_SCLR_LVDS_ABSWAP
{
EN_DRV_SCLR_LVDS_ABSWAP_NORMAL,
EN_DRV_SCLR_LVDS_ABSWAP_SWAP,
EN_DRV_SCLR_LVDS_ABSWAP_TOTAL
} EN_DRV_SCLR_LVDS_ABSWAP;
typedef enum _EN_DRV_SCLR_LVDS_SINGLE_PORT_SWAP
{
EN_DRV_SCLR_LVDS_SINGLE_PORT_SWAP_NORMAL,
EN_DRV_SCLR_LVDS_SINGLE_PORT_SWAP_SWAP,
EN_DRV_SCLR_LVDS_SINGLE_PORT_SWAP_TOTAL
} EN_DRV_SCLR_LVDS_SINGLE_PORT_SWAP;
struct ST_KER_VID_PANEL_SETTING
{
u8 VX1;
u8 FRC;
u8 SEP;
u16 u16Width;
u16 u16Height;
u16 u16TypHTotal;
u8 u8MinHSyncWidth;
u16 u16MinHSyncBackPorch; // Reserved for future use
u16 u16HSyncStart;
u16 u16TypVTotal;
u16 u16MaxVTotal;
u8 u8MinVSyncWidth;
u16 u16MinVSyncBackPorch; // Reserved for future use
u16 u16VSyncStart;
u8 u8Phase;
bool b8DualPixelOutput;
bool b8ABSwap;
bool b8ChannelSwap; // Reserved for future use
bool b8FrameSyncEnable;
u8 u8FrameSyncMode;
u8 u8MISC;
bool b8Mode10Bits;
bool b8JIEDA;
bool b8RBSwap;
u32 u32PLL; // 0.01MHz
EN_DRV_SCLR_VIDEO_OUTPUT_DITHER eDitheringBit;
u16 u16LVDSPhase;
bool DPLL;
u8 enLvdsFormat;
u16 PanelPowerOnDelay1;
u8 u8Tcon;
u16 u16PanelPowerGPIO;
u16 u16PanelBackLightGPIO;
u8 u8PanelType;
u16 u16VX1SwingG1;
u16 u16VX1PreEmphasisG1;
u8 u8LocalDIMControl;
u8 u8PanelI2cPortNum;
u8 u8PanelI2cSlaveAddr;
u16 PanelPowerOnDelay4;
u8 PanelIOMode;
};
struct PST_OSD_DISP_FORMAT
{
u32 ulVertical_Start;
u32 ulHorizontal_Start ;
u32 ulSrcWidth;
u32 ulSrcHeight;
u32 ulDestWidth;
u32 ulDestHeight;
u32 ulLineOffset;
u8 ucColorFormat;
u8 ucPlaneID;
u8 ucVFlip_Enable;
u32* pulBimpAddr;
};
typedef enum _EN_DRV_SCLR_GPIO_GROUP
{
EN_DRV_SCLR_GPIO_GROUP_A = 0,
EN_DRV_SCLR_GPIO_GROUP_B = 1,
EN_DRV_SCLR_GPIO_GROUP_C = 2,
EN_DRV_SCLR_GPIO_GROUP_D = 3,
EN_DRV_SCLR_GPIO_GROUP_E = 4,
EN_DRV_SCLR_GPIO_GROUP_F = 5,
EN_DRV_SCLR_GPIO_GROUP_G = 6,
EN_DRV_SCLR_GPIO_GROUP_H = 7,
EN_DRV_SCLR_GPIO_GROUP_I = 8,
} EN_DRV_SCLR_GPIO_GROUP;
u32 UTL_SHL_GetValue( u32 u32Val, u32 u32Msb, u32 u32Lsb );
u32 UTL_SHL_GetValue( u32 u32Val, u32 u32Msb, u32 u32Lsb );
void UTL_SHL_WriteClockGenRegMask( u32 u32Addr, u32 u32Msb, u32 u32Lsb, u32 u32Val );
void _Out_P_SetVx1On(bool bLvdsOn);
void _Vx1PhyInitSetting( EN_DRV_SCLR_VX1COMB enOutput );
bool _VID_PowerON_Sequence(void);
void panel_init_late(void);
#endif