nt9856x/code/hdal/drivers/k_driver/include/rtos_na51089/hdmitx.h
2023-03-28 15:07:53 +08:00

592 lines
30 KiB
C
Executable File

/**
Header file for HDMI module
Header file for HDMI module.
The user can reference this section for the detail description of the each driver API usage
and also the parameter descriptions and its limitations.
The overall combinational usage flow is introduced in the application note document,
and the user must reference to the application note for the driver usage flow.
@file hdmitx.h
@ingroup mIDrvDisp_HDMITx
@note Nothing.
Copyright Novatek Microelectronics Corp. 2017. All rights reserved.
*/
#ifndef _HDMITX_H
#define _HDMITX_H
#if defined __KERNEL__
#include "kwrap/type.h"
#elif defined __FREERTOS
#include "kwrap/type.h"
#else
#include "Type.h"
#include "Driver.h"
#endif
/**
@addtogroup mIDrvDisp_HDMITx
*/
//@{
/**
HDMI-Tx output Video Format ID
This enumeration is used in hdmitx_set_config(HDMI_CONFIG_ID_VIDEO) to specify the HDMI output video resolution,
and also used in the display device object control code "SET_HDMIMODE" to specify the video mode.
These definitions are from the TV standard CEA-861D and all of the output timngs such as frame rate/blanking/...
are the same as the CEA-861D listed.
*/
typedef enum {
HDMI_640X480P60 = 1, ///< HDMI Video format is 640x480 & Progressive 60fps
HDMI_720X480P60 = 2, ///< HDMI Video format is 720x480 & Progressive 60fps & 4:3
HDMI_720X480P60_16X9 = 3, ///< HDMI Video format is 720x480 & Progressive 60fps & 16:9
HDMI_1280X720P60 = 4, ///< HDMI Video format is 1280x720 & Progressive 60fps
HDMI_1920X1080I60 = 5, ///< HDMI Video format is 1920x1080 & Interlaced 60fps
HDMI_720X480I60 = 6, ///< HDMI Video format is 720x480 & Interlaced 60fps
HDMI_720X480I60_16X9 = 7, ///< HDMI Video format is 720x480 & Interlaced 60fps & 16:9
HDMI_720X240P60 = 8, ///< HDMI Video format is 720x240 & Progressive 60fps
HDMI_720X240P60_16X9 = 9, ///< HDMI Video format is 720x240 & Progressive 60fps & 16:9
HDMI_1440X480I60 = 10, ///< HDMI Video format is 1440x480 & Interlaced 60fps
HDMI_1440X480I60_16X9 = 11, ///< HDMI Video format is 1440x480 & Interlaced 60fps & 16:9
HDMI_1440X240P60 = 12, ///< HDMI Video format is 1440x240 & Progressive 60fps
HDMI_1440X240P60_16X9 = 13, ///< HDMI Video format is 1440x240 & Progressive 60fps & 16:9
HDMI_1440X480P60 = 14, ///< HDMI Video format is 1440x480 & Progressive 60fps
HDMI_1440X480P60_16X9 = 15, ///< HDMI Video format is 1440x480 & Progressive 60fps & 16:9
HDMI_1920X1080P60 = 16, ///< HDMI Video format is 1920x1080 & Progressive 60fps
HDMI_720X576P50 = 17, ///< HDMI Video format is 720x576 & Progressive 50fps
HDMI_720X576P50_16X9 = 18, ///< HDMI Video format is 720x576 & Progressive 50fps & 16:9
HDMI_1280X720P50 = 19, ///< HDMI Video format is 1280x720 & Progressive 50fps
HDMI_1920X1080I50 = 20, ///< HDMI Video format is 1920x1080 & Interlaced 50fps
HDMI_720X576I50 = 21, ///< HDMI Video format is 720x576 & Interlaced 50fps
HDMI_720X576I50_16X9 = 22, ///< HDMI Video format is 720x576 & Interlaced 50fps & 16:9
HDMI_720X288P50 = 23, ///< HDMI Video format is 720x288 & Progressive 50fps
HDMI_720X288P50_16X9 = 24, ///< HDMI Video format is 720x288 & Progressive 50fps & 16:9
HDMI_1440X576I50 = 25, ///< HDMI Video format is 1440x576 & Interlaced 50fps
HDMI_1440X576I50_16X9 = 26, ///< HDMI Video format is 1440x576 & Interlaced 50fps & 16:9
HDMI_1440X288P50 = 27, ///< HDMI Video format is 1440x288 & Progressive 50fps
HDMI_1440X288P50_16X9 = 28, ///< HDMI Video format is 1440x288 & Progressive 50fps & 16:9
HDMI_1440X576P50 = 29, ///< HDMI Video format is 1440x576 & Progressive 50fps
HDMI_1440X576P50_16X9 = 30, ///< HDMI Video format is 1440x576 & Progressive 50fps & 16:9
HDMI_1920X1080P50 = 31, ///< HDMI Video format is 1920x1080 & Progressive 50fps
HDMI_1920X1080P24 = 32, ///< HDMI Video format is 1920x1080 & Progressive 24fps
HDMI_1920X1080P25 = 33, ///< HDMI Video format is 1920x1080 & Progressive 25fps
HDMI_1920X1080P30 = 34, ///< HDMI Video format is 1920x1080 & Progressive 30fps
HDMI_1920X1080I50_VT1250 = 39, ///< HDMI Video format is 1920x1080 & Interlaced 50fps & V-total is 1250 lines
HDMI_1920X1080I100 = 40, ///< HDMI Video format is 1920x1080 & Interlaced 100fps
HDMI_1280X720P100 = 41, ///< HDMI Video format is 1280X720 & Progressive 100fps
HDMI_720X576P100 = 42, ///< HDMI Video format is 720X576 & Progressive 100fps
HDMI_720X576P100_16X9 = 43, ///< HDMI Video format is 720X576 & Progressive 100fps & 16:9
HDMI_720X576I100 = 44, ///< HDMI Video format is 720X576 & Interlaced 100fps
HDMI_720X576I100_16X9 = 45, ///< HDMI Video format is 720X576 & Interlaced 100fps & 16:9
HDMI_1920X1080I120 = 46, ///< HDMI Video format is 1920X1080 & Interlaced 120fps
HDMI_1280X720P120 = 47, ///< HDMI Video format is 1280X720 & Progressive 120fps
HDMI_720X480P120 = 48, ///< HDMI Video format is 720X480 & Progressive 120fps
HDMI_720X480P120_16X9 = 49, ///< HDMI Video format is 720X480 & Progressive 120fps & 16:9
HDMI_720X480I120 = 50, ///< HDMI Video format is 720X480 & Interlaced 120fps
HDMI_720X480I120_16X9 = 51, ///< HDMI Video format is 720X480 & Interlaced 120fps & 16:9
HDMI_720X576P200 = 52, ///< HDMI Video format is 720X576 & Progressive 200fps
HDMI_720X576P200_16X9 = 53, ///< HDMI Video format is 720X576 & Progressive 200fps & 16:9
HDMI_720X576I200 = 54, ///< HDMI Video format is 720X576 & Interlaced 200fps
HDMI_720X576I200_16X9 = 55, ///< HDMI Video format is 720X576 & Interlaced 200fps & 16:9
HDMI_720X480P240 = 56, ///< HDMI Video format is 720X480 & Progressive 240fps
HDMI_720X480P240_16X9 = 57, ///< HDMI Video format is 720X480 & Progressive 240fps & 16:9
HDMI_720X480I240 = 58, ///< HDMI Video format is 720X480 & Interlaced 240fps
HDMI_720X480I240_16X9 = 59, ///< HDMI Video format is 720X480 & Interlaced 240fps & 16:9
HDMI_3840X2160P24 = 93, ///< HDMI Video format is 3840x2160 & Progressive 24fps
HDMI_3840X2160P25 = 94, ///< HDMI Video format is 3840x2160 & Progressive 25fps
HDMI_3840X2160P30 = 95, ///< HDMI Video format is 3840x2160 & Progressive 30fps
HDMI_4096X2160P24 = 98, ///< HDMI Video format is 4096x2160 & Progressive 24fps
HDMI_4096X2160P25 = 99, ///< HDMI Video format is 4096x2160 & Progressive 25fps
HDMI_4096X2160P30 = 100, ///< HDMI Video format is 4096x2160 & Progressive 30fps
HDMI14B_3840X2160P30 = 95+128,///< HDMI 1.4B Extended foramt HDMI_VIC=1. Video format is 3840x2160 & Progressive 30fps
HDMI14B_3840X2160P25 = 94+128,///< HDMI 1.4B Extended foramt HDMI_VIC=2. Video format is 3840x2160 & Progressive 30fps
HDMI14B_3840X2160P24 = 93+128,///< HDMI 1.4B Extended foramt HDMI_VIC=3. Video format is 3840x2160 & Progressive 24fps
HDMI14B_4096X2160P24 = 98+128,///< HDMI 1.4B Extended foramt HDMI_VIC=4. Video format is 4096x2160 & Progressive 24fps
// Non-std HDMI formats
HDMI_1024X768P60 = 35+128,///< HDMI Video format is 1024X768 & Progressive 60fps
HDMI_1280X1024P60 = 36+128,///< HDMI Video format is 1280X1024 & Progressive 60fps
HDMI_1600X1200P60 = 37+128,///< HDMI Video format is 1600X1200 & Progressive 60fps
HDMI_2560X1440P60 = 38+128,///< HDMI Video format is 2560X1440 & Progressive 60fps
HDMI_VID_NO_CHANGE = 0xFF, ///< HDMI Video format use current setting
ENUM_DUMMY4WORD(HDMI_VIDEOID)
} HDMI_VIDEOID;
/**
HDMI-Tx input audio format
This structure is used in hdmitx_set_config(HDMI_CONFIG_ID_AUDIO) to specify the Audio Sampling Rate in HDMI audio stream.
This definition would be used in the HDMI audio infoFrame. Only these three audio modes are maindatory modes in HDMI specification,
so sampling rates less than 32KHz are not supported in HDMI audio.
Besides, we must also note that the HDMI has only the Stereo Audio Channels. The Mono channel can only playback to left ot right channel
on the HDMI audio. The audio channel number larger than two are not supported in current chip version.
*/
typedef enum {
HDMI_AUDIO32KHZ, ///< HDMI Audio sampling rate uses 32KHz.
HDMI_AUDIO44_1KHZ, ///< HDMI Audio sampling rate uses 44.1KHz.
HDMI_AUDIO48KHZ, ///< HDMI Audio sampling rate uses 48KHz.
HDMI_AUDIO_NO_CHANGE = 0xFF, ///< Reserve the curretn HDMI audio sampling rate.
ENUM_DUMMY4WORD(HDMI_AUDIOFMT)
} HDMI_AUDIOFMT;
/**
HDMI-Tx Video Ability Structure
This structure is used in hdmitx_getVideoAbility() to get the 3D abilities of the TV/Display.
*/
typedef struct {
HDMI_VIDEOID video_id; ///< The Video Format which TV supports.
UINT32 vdo_3d_ability; ///< The 3D format supported for this video ID. The format uses the "bit-wise OR" of HDMI_3DFMT.
} HDMI_VDOABI, *PHDMI_VDOABI;
/**
HDMI-Tx 3D Format Type
This is used in hdmitx_set_config(HDMI_CONFIG_ID_3D_FMT) and "HDMI_VDOABI" to specify the HDMI 3D format.
*/
typedef enum {
HDMI3D_NONE = 0x00, ///< None of the 3D function.
HDMI3D_SIDEBYSIDE_HALF = 0x01, ///< 3D Format: Side-by-Side-half. This results in the half of the horizontal resolution.
HDMI3D_TOPANDBOTTOM = 0x02, ///< 3D Format: Top-and-Bottom. This results in the half of the vertical resolution.
ENUM_DUMMY4WORD(HDMI_3DFMT)
} HDMI_3DFMT;
/**
HDMI EDID flags
Each bit represents TV device support this feature or not.
These flags are used for hdmitx_get_edid_info() to determine the TV supported audio/video formats.
All the information below is from TV's EDID.
This information is used in the hdmi display device object for function control information.
@name HDMI EDID parsing results flags
*/
//@{
#define HDMITX_DTD1080P60 0x0001 ///< Video as 1080P60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD720P60 0x0002 ///< Video as 720P60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD640X480P60 0x0004 ///< Video as 480P60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD720X480P60 0x0008 ///< Video as 480P60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD1080I60 0x0010 ///< Video as 1080I60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD720X480I60 0x0020 ///< Video as 480I60 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD1080P50 0x0100 ///< Video as 1080P50 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD720P50 0x0200 ///< Video as 720P50 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD576P50 0x0400 ///< Video as 576P50 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD1080I50 0x1000 ///< Video as 1080I50 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD576I50 0x2000 ///< Video as 576I50 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD3840X2160P30 0x10000000 ///< Video as 3840x2160P30 from EDID's Detailed Timing Descriptor.
#define HDMITX_DTD4096X2160P30 0x20000000 ///< Video as 3840x2160P30 from EDID's Detailed Timing Descriptor.
#define HDMITX_TV_YCBCR444 0x10000 ///< TV Support Video format: YCbCr-444.
#define HDMITX_TV_YCBCR422 0x20000 ///< TV Support Video format: YCbCr-422.
#define HDMITX_TV_UNDERSCAN 0x40000 ///< TV Support under_scan.
#define HDMITX_TV_HDMI 0x80000 ///< TV Support HDMI. If not, it is DVI device.
#define HDMITX_ADO_32KHZ 0x100000 ///< TV Support Audio Sampling Rate 32Khz.
#define HDMITX_ADO_44KHZ 0x200000 ///< TV Support Audio Sampling Rate 44.1Khz.
#define HDMITX_ADO_48KHZ 0x400000 ///< TV Support Audio Sampling Rate 48Khz.
#define HDMITX_ADO_MORE 0x800000 ///< TV Support Advanced Audio Format.
//@}
//
// HDMI CEC related header
//
/**
HDMI CEC configuration identifications
These definitions are used in the hdmicec_setConfig() and hdmicec_get_config() to configure the CEC functionalities.
*/
typedef enum {
CEC_CONFIG_ID_FREECNT1, ///< Configure the Free Count-1 in the CEC Standard. Unit in CEC bit time.
///< The free-count-1 is previous command sent successfully and want to send another command,
///< the initiator must wait this duration. Default value is 0x7.
CEC_CONFIG_ID_FREECNT2, ///< Configure the Free Count-2 in the CEC Standard. Unit in CEC bit time.
///< The free-count-2 is the new initiator must wait the bus idle time duration,
///< and then be allowed to send command. Default value is 0x5.
CEC_CONFIG_ID_FREECNT3, ///< Configure the Free Count-3 in the CEC Standard. Unit in CEC bit time.
///< The free-count-3 is when previous attemp to send failed, the initiator
///< can wait this duration for the next bus idle time. Default value is 0x3.
CEC_CONFIG_ID_RETRY_CNT, ///< Configure the Re-Try times after command transmit failed.
CEC_CONFIG_ID_TX_TRIG, ///< Trigger the CEC command transmit. The interrupt status "CEC_TXFRM" would be triggered after transmitting done.
CEC_CONFIG_ID_LOCAL_ADDR, ///< Configure the CEC Local Address. The CEC controller would receive the CEC bus command's destination address matched with the local address.
CEC_CONFIG_ID_SRC_ADDR, ///< Configure the CEC source address. After CEC command is sent, the source address is used to notify the destination device where the command is from.
CEC_CONFIG_ID_DEST_ADDR, ///< Configure the CEC destination address. This is used to assign the command destination device address.
CEC_CONFIG_ID_TXRISE_OFS, ///< Configure the CEC command transmit timing Rise Offset. The value of 128 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_TXFALL_OFS, ///< Configure the CEC command transmit timing Fall Offset. The value of 128 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_RXRISE_OFS, ///< Configure the CEC command receive timing Rise Offset. The value of 20 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_RXFALL_OFS, ///< Configure the CEC command receive timing Fall Offset. The value of 35 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_RXSTART_OFS, ///< Configure the CEC command receive timing Start Bit Offset. The value of 20 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_RXSMPL_OFS, ///< Configure the CEC command receive sample timing Offset. The value of 128 would be the standard value in the CEC standard. Unit in 10us.
CEC_CONFIG_ID_DEGLITCH, ///< Configure the De-Glitch Time. Unit in 10us.
CEC_CONFIG_ID_ERROR_LOW, ///< Please set this value to 0x168 according to the CEC standard.
CEC_CONFIG_ID_NACK_CTRL, ///< If the NACK_CTRL is enabled, the CEC controller would NACK the in-coming command and cause the Tx re-transmit.
CEC_CONFIG_ID_ARBI_RANGE, ///< Configure the CEC arbitration lost judgement delay. The selection value would be "(ui_config)x20" us. Default value is 3(60us). Valid Range from 0x0 to 0xF.
CEC_CONFIG_ID_PHY_ADDR, ///< Set the CEC physical address, this address is from the TV EDID information.
ENUM_DUMMY4WORD(CEC_CONFIG_ID)
} CEC_CONFIG_ID;
/**
HDMI configuration identifications
These definitions are used in the hdmitx_set_config() and hdmitx_get_config() to configure the HDMI functionalities.
*/
typedef enum {
HDMI_CONFIG_ID_VIDEO, ///< Specify the HDMI video format. The input parameter must use one of the HDMI_VIDEOID definition.
HDMI_CONFIG_ID_AUDIO, ///< Specify the HDMI audio format. The input parameter must use one of the HDMI_AUDIO32KHZ / HDMI_AUDIO44_1KHZ / HDMI_AUDIO48KHZ.
HDMI_CONFIG_ID_OE, ///< Configure HDMI output enable. When setting to disable, the output pad power would be close together for power saving.
HDMI_CONFIG_ID_AV_MUTE, ///< Set the HDMI AV_MUTE flag in the general control packet in the HDMI standard. This would mute both the HDMI video and audio.
HDMI_CONFIG_ID_AUDIO_MUTE, ///< Set the Audio Mute Enable/Disable.
HDMI_CONFIG_ID_AUDIO_STREAM_EN, ///< Enable/Disable the HDMI controller internal audio stream.
HDMI_CONFIG_ID_SOURCE, ///< The HDMI can be selected from IDE/IDE2 by the definition "HDMI_SOURCE".
HDMI_CONFIG_ID_3D_FMT, ///< This can be used to notify the TV/Display which of the 3D content in the HDMI streaming. Use the "HDMI_3DFMT" as input parameter.
HDMI_CONFIG_ID_FORCE_RGB, ///< Set ENABLE would force the HDMI output as RGB format. If set to DISABLE, the HDMI would output RGB or YUV format accrording to the EDID information.
HDMI_CONFIG_ID_FORCE_UNDERSCAN, ///< Set ENABLE would force the HDMI output as under_scan. If set to DISABLE, the HDMI would output under_scan or OverScan accrording to the EDID information.
HDMI_CONFIG_ID_VERIFY_VIDEOID, ///< Enable/Disable the HDMI driver to verify video ID is supported by the TV/Display. If no support, the driver would map the video format to HDMI basic format.
HDMI_CONFIG_ID_MANUFACTURER_ID, ///< Get TV/Display Manufacturer-id from EDID information. This definition is for hdmitx_get_config() only.
HDMI_CONFIG_ID_SWING_CTRL, ///< Set HDMI Output Swing Control Setting value. Please use HDMI_SWING_CTRL as input parameter.
HDMI_CONFIG_ID_SEL_BGR, ///< Get Current select BGR Setting value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_REG_BGR_EN, ///< Get Current HDMI PHY REG_BGR_EN Value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_BGR_CTRL, ///< Set HDMI PHY Output Voltage adjustment. Default value is 0x4. Valid range is 0x0 to 0x7.
HDMI_CONFIG_ID_BGR_TEST, ///< Get Current HDMI PHY BGR TEST Value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_CLKDETECT, ///< Get HDMI Clock Detect Enable. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_PHY_PDB, ///< Get HDMI PHY PDB Bit Status. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_TERM_EN, ///< Get HDMI Internal Source Terminator Enable. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_BW_CTRL, ///< Get HDMI PHY PLL bandwidth control setup value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_CKSW_CTRL, ///< Get HDMI PHY CKSW Control setup value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_PHYREG_PD, ///< Get HDMI PHY REG_PD setup value. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_RXSENSE, ///< Get HDMI Receiver Sense. The return value TRUE means the Rx terminator is ON. This can be used in hdmitx_get_config() only.
HDMI_CONFIG_ID_HWDDC, ///< Select the DDC Channel is using HW I2C controller or SW GPIO control. Default value is TRUE (HW I2C Control).
///< Input Parameter TRUE is HW I2C controller and FALSE is SW GPIO control and the user must assign the GPIO pin locations.
HDMI_CONFIG_ID_SWDDC_SCL, ///< Assign SW DDC SCL pin's GPIO location. This is valid only if HDMI_CONFIG_ID_HWDDC set to FALSE.
HDMI_CONFIG_ID_SWDDC_SDA, ///< Assign SW DDC SDA pin's GPIO location. This is valid only if HDMI_CONFIG_ID_HWDDC set to FALSE.
HDMI_CONFIG_ID_TRIM_RSEL, ///< Calibrated Resistor Select value.
HDMI_CONFIG_ID_VSYNC_INVERT, ///< Disable is Active Low. Enable is Active High
HDMI_CONFIG_ID_HSYNC_INVERT, ///< Disable is Active Low. Enable is Active High
HDMI_CONFIG_ID_COMPONENT0, ///< Set HDMI TX CHANNEL COMPONENT 0 SWAP.
HDMI_CONFIG_ID_COMPONENT1, ///< Set HDMI TX CHANNEL COMPONENT 1 SWAP.
HDMI_CONFIG_ID_COMPONENT2, ///< Set HDMI TX CHANNEL COMPONENT 2 SWAP.
HDMI_CONFIG_ID_SCRAMBLE_EN, ///< Enable/Disable the Scrambling function.
HDMI_CONFIG_ID_PIXCLK_DIVIDE4, ///< Enable/Disable the PHY PIXCLK Divide by 4.
HDMI_CONFIG_ID_SCDC_DUMP, ///< Dump Connected display device's SCDC registers if device supported.
HDMI_CONFIG_ID_SCDC_ENABLE, ///< SCDC function enable/disable if device support RR.
HDMI_CONFIG_ID_EDIDMSG, ///< ENABLE/DISABLE the EDID information printing during hdmi open.
HDMI_CONFIG_ID_SCDC_WRITE, // Valid for verification only. Useless at normal usages.
ENUM_DUMMY4WORD(HDMI_CONFIG_ID)
} HDMI_CONFIG_ID;
/**
HDMI Video Source
This is used as the input parameter in the hdmitx_set_config(HDMI_CONFIG_ID_SOURCE) to select the HDMI video source.
*/
typedef enum {
HDMI_SOURCE_IDE, ///< Select HDMI video stream source from IDE.
HDMI_SOURCE_IDE2, ///< Select HDMI video stream source from IDE2.
ENUM_DUMMY4WORD(HDMI_SOURCE)
} HDMI_SOURCE;
/**
HDMI Interrupt identifications
Some of the definitions are used in HDMI-CEC ISR callback identifications.
*/
typedef enum {
CEC_RXFRM = 0x00100000, ///< CEC Receive a command.
CEC_RXPOLL = 0x00200000, ///< CEC Receive a polling command.
CEC_TXFRM = 0x00400000, ///< CEC Transmit a command successfully.
CEC_RETRY = 0x00800000, ///< CEC Transmit a command fail.
CEC_AL = 0x01000000, ///< CEC Transmit a command fail with arbitration lost condition.
CEC_RXTIMEOUT = 0x02000000, ///< CEC Receive command with timeout error occured.
CEC_ERROR = 0x04000000, ///< CEC Bus error.
CEC_INTALL = 0x07F00000, ///< The bit mask of all the CEC interrupt status.
OVER_RUN = 0x00000001, ///< Reserved for internal usage.
RSEN = 0x00000002, ///< Reserved for internal usage.
HPD = 0x00000004, ///< Reserved for internal usage.
VSYNC_REC = 0x00000008, ///< Reserved for internal usage.
PIXCLK_STBL = 0x00000010, ///< Reserved for internal usage.
ACR_OVR = 0x00000020, ///< Reserved for internal usage.
CTS_CHG = 0x00000040, ///< Reserved for internal usage.
GCP_CHG_MUTE = 0x00000080, ///< Reserved for internal usage.
HDMI_INTALL = 0x000000FF, ///< Reserved for internal usage.
ENUM_DUMMY4WORD(HDMI_INT_TYPE)
} HDMI_INT_TYPE;
//
// HDMI Extern API Definitions
//
/**
Open HDMI Transmitter Driver
Open HDMI Transmitter and then intialize the source clock / DDC / interrupt for usage.
Besides, this would also read the TV/Display's EDID information from DDC channel and parsing the EDID.
The user can get the EDID information after hdmitx_open() by the api hdmitx_get_edid_info().
The driver is opened or not can be checked by the hdmitx_is_opened.
The behavior of the re-open of the HDMI driver in under save protection in the driver design.\n
In the system design, the DDC channel is using the I2C2 controller in normal operation.
The user must remember opening the I2C2 pinmux in the systemInit phase.
@return
- @b E_OK: Done and success
*/
extern ER hdmitx_open(void);
/**
Close the HDMI-Tx module
Close the HDMI-Tx module, this api would power down the hdmi-tx module and also close the I2C2(DDC) usage.
@return void
- @b E_OK: Done and success
*/
extern ER hdmitx_close(void);
/**
Check the HDMI-Tx driver is opened or not
Check the HDMI-Tx driver is opened or not
@return
- @b TRUE: Already opened.
- @b FALSE: Have not opened yet.
*/
extern BOOL hdmitx_is_opened(void);
/**
Set HDMI functionality configuration
This is used to configure the main functions of the HDMI controller, including the Video/Audio formats, output-enable,
video-source, 3D-format, ...etc. Please reference to the "HDMI_CONFIG_ID" and the application note for the control function details.
@param[in] config_id Control function selection ID.
@param[in] ui_config Please reference to the "HDMI_CONFIG_ID" and the application note for the control function parameter details.
@return void
*/
extern void hdmitx_set_config(HDMI_CONFIG_ID config_id, UINT32 ui_config);
/**
Get HDMI functionality configuration
Use this api to get the current HDMI function configuration.
@param[in] config_id Get which Control function configuration selection.
@return Please reference to the "HDMI_CONFIG_ID" for the control function parameter details.
*/
extern UINT32 hdmitx_get_config(HDMI_CONFIG_ID config_id);
/**
Check if HDMI's video Clock is stable or not
This api is used in the HDMI display device object to check if the hdmi input video clock is stable or not after
opening the IDE Pixel clock. If the none of the video clock or the clock is not stable, this api would output the
warning message "HDMI Video Clock Not Stable! Timeout!!" on console.
@return void
*/
extern void hdmitx_check_video_stable(void);
/**
Check hotplug or not
This is used to check if the HDMI cable is plugged or not.
@return
- @b TRUE: Hotplug attached.
- @b FALSE: Hotplug detached.
*/
extern BOOL hdmitx_check_hotplug(void);
/**
Get HDMI EDID information
Get HDMI EDID Parsing results flags.
This information is used in the HDMI display device object to control the hdmi functionality.
@return The parsing results bit-wise Flags.
*/
//extern UINT32 hdmitx_get_edid_info(void);
/**
Verify HDMI Video ID Validation
This api would verify the user desired video format is supported by TV/Display or not.
The supported list is from the TV/Display's EDID's Short Timing Descriptor(STD).
If the desired VID is not supported, the basic format would be outputed.(720x480P60 / 640x480P60)
@param[in,out] vid_code Video-ID defined in CEA-861D, please refer to hdmitx.h for details.
@return void
*/
extern void hdmitx_verify_video_id(HDMI_VIDEOID *vid_code);
/**
Dump HDMI Information
Dump HDMI debug information. The information includes EDID native and result flags
and also the video format supported by the TV/Display from EDID descriptions.
@return void
*/
extern void hdmitx_dump_info(void);
/**
Get the HDMI Video Format Support Ability
This api is used to get the HDMI Video Format Support Ability inlcudes the 2D/3D format supporting capability.
The user provided "pVdoAbility" buffer should contains at least 30 entries in safety.
@param[out] pLen Number of video formats supported by the TV/Display.
@param[out] pVdoAbility The structure of the supported video format and its 3D ability.
@return void
*/
//extern void hdmitx_get_video_ability(UINT32 *p_len, PHDMI_VDOABI vdo_ability);
/**
Check if the HDMI RX's DDC Channel is available or not.
This api is used to check if the HDMI Rx is available or not.
@return
- @b TRUE: The HDMI RX's DDC Channel is available.
- @b FALSE: The HDMI RX's DDC Channel is NOT available.
*/
extern BOOL hdmitx_check_ddc(void);
//
// CEC Extern API Definitions
//
/**
Open Consumer Electronics Control (CEC) controller Driver
The user must open HDMI controller by the api hdmitx_open() first.
This api would open the CEC controller needed operating source clock and intialize
the interrupt for cec usage.
@return
-@b E_OK: Done and Success.
-@b E_SYS: HDMI is not opened yet! CEC can be opened after HDMI is opened only.
*/
extern ER hdmicec_open(void);
/**
Close CEC module driver
It is better to close the CEC driver before the HDMI controller to avoid un-predictable events.
@return
-@b E_OK: Done and Success.
*/
extern ER hdmicec_close(void);
/**
Hook CEC ISR callback
Hook CEC ISR callback handler.
@param[in] IsrCB ISR callback function for CEC.
@return void
*/
//extern void hdmicec_hook_callback(DRV_CB isr_cb);
/**
Set HDMI CEC functional configurations
This api is used to configure the function configuration of the CEC controller, including CEC bus transmit/receive timing,
bus free count 1/2/3, retry count, ...etc.
@param[in] config_id Control function selection ID.
@param[in] ui_config Please reference to the "CEC_CONFIG_ID" and the application note for the control function parameter details.
@return void
*/
extern void hdmicec_set_config(CEC_CONFIG_ID config_id, UINT32 ui_config);
/**
Get HDMI CEC functional configurations
Get HDMI CEC functional configurations
@param[in] config_id Control function selection ID.
@return Please reference to the "CEC_CONFIG_ID" for the control function parameter details.
*/
extern UINT32 hdmicec_get_config(CEC_CONFIG_ID config_id);
/**
Set CEC Transmit Command Data
Set CEC Transmit Command Data, including the Data Size and the data buffer address.
The first uiTxDataSize bytes of the data buffer address would be assign to the transmit register of the CEC controller.
After using this api, the user should call hdmicec_setConfig(CEC_CONFIG_ID_TX_TRIG, TRUE) to trigger the transmit operation.
After the transmission is done, the interrupt status CEC_TXFRM would be issued and the user can identify it at the callback handler.
If setting the uiTxDataSize to 0x0 means none of the Data Bytes would transmit, this is still the valid packet on the CEC bus because
only the header byte would be sent and this is called the polling or ping command in the CEC standard.
@param[in] uiTxDataSize Number of the CEC Tx command bytes. Valid range from 0 to 15.
@param[in] uiDataBufAddr CEC command data buffer address. The first uiTxDataSize bytes of the data buffer address would be assign to the transmit register of the CEC controller.
@return void
*/
extern void hdmicec_set_tx_data(UINT32 ui_tx_data_size, UINT32 ui_data_buf_addr);
/**
Get the CEC received Data Command
Get CEC Received Command Data, including the Command Data length.
The puiRxDataSize contains the number of received command byte count.
The uiDataBufAddr is the buffer address and the first byte of the buffer contans the CEC header byte which indicating
the source and destination device address. The user can reference to the CEC standard for the details.
@param[out] puiRxDataSize Number of the CEC received command bytes. Valid range from 1 to 16.
@param[out] uiDataBufAddr The returned CEC command data buffer address.
@return void
*/
extern void hdmicec_get_rx_data(UINT32 *pui_rx_data_size, UINT32 ui_data_buf_addr);
//@}
#endif