| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- #ifndef __HDMI_DRV_H__
- #define __HDMI_DRV_H__
- #ifdef HDMI_MT8193_SUPPORT
- #include "mt8193hdmictrl.h"
- #include "mt8193edid.h"
- #include "mt8193cec.h"
- #define AVD_TMR_ISR_TICKS 10
- #define MDI_BOUCING_TIMING 50 /* 20 //20ms */
- enum HDMI_TASK_COMMAND_TYPE_T {
- HDMI_CEC_CMD = 0,
- HDMI_PLUG_DETECT_CMD,
- HDMI_HDCP_PROTOCAL_CMD,
- HDMI_DISABLE_HDMI_TASK_CMD,
- MAX_HDMI_TMR_NUMBER
- };
- #endif
- #ifndef ARY_SIZE
- #define ARY_SIZE(x) (sizeof((x)) / sizeof((x[0])))
- #endif
- enum HDMI_POLARITY {
- HDMI_POLARITY_RISING = 0,
- HDMI_POLARITY_FALLING = 1
- };
- enum HDMI_CLOCK_PHASE {
- HDMI_CLOCK_PHASE_0 = 0,
- HDMI_CLOCK_PHASE_90 = 1
- };
- enum HDMI_COLOR_ORDER {
- HDMI_COLOR_ORDER_RGB = 0,
- HDMI_COLOR_ORDER_BGR = 1
- };
- enum IO_DRIVING_CURRENT {
- IO_DRIVING_CURRENT_8MA = (1 << 0),
- IO_DRIVING_CURRENT_4MA = (1 << 1),
- IO_DRIVING_CURRENT_2MA = (1 << 2),
- IO_DRIVING_CURRENT_SLEW_CNTL = (1 << 3),
- };
- #if !defined(HDMI_MT8193_SUPPORT)
- enum HDMI_VIDEO_RESOLUTION {
- HDMI_VIDEO_720x480p_60Hz = 0,
- HDMI_VIDEO_1440x480i_60Hz = 1,
- HDMI_VIDEO_1280x720p_60Hz = 2,
- HDMI_VIDEO_1920x1080i_60Hz = 5,
- HDMI_VIDEO_1920x1080p_30Hz = 6,
- HDMI_VIDEO_720x480i_60Hz = 0xD,
- HDMI_VIDEO_1920x1080p_60Hz = 0x0b,
- HDMI_VIDEO_RESOLUTION_NUM
- };
- #endif
- enum TEST_CASE_TYPE {
- Test_RGB888 = 0
- , Test_YUV422 = 1
- , Test_YUV444 = 2
- , Test_Reserved = 3
- };
- enum HDMI_VIDEO_INPUT_FORMAT {
- HDMI_VIN_FORMAT_RGB565,
- HDMI_VIN_FORMAT_RGB666,
- HDMI_VIN_FORMAT_RGB888,
- };
- enum HDMI_VIDEO_OUTPUT_FORMAT {
- HDMI_VOUT_FORMAT_RGB888,
- HDMI_VOUT_FORMAT_YUV422,
- HDMI_VOUT_FORMAT_YUV444,
- HDMI_VOUT_FORMAT_2D = 1<<16,
- HDMI_VOUT_FORMAT_3D_SBS = 1<<17,
- HDMI_VOUT_FORMAT_3D_TAB = 1<<18,
- };
- /* Must align to MHL Tx chip driver define */
- enum HDMI_AUDIO_FORMAT {
- HDMI_AUDIO_32K_2CH = 0x01,
- HDMI_AUDIO_44K_2CH = 0x02,
- HDMI_AUDIO_48K_2CH = 0x03,
- HDMI_AUDIO_96K_2CH = 0x05,
- HDMI_AUDIO_192K_2CH = 0x07,
- HDMI_AUDIO_32K_8CH = 0x81,
- HDMI_AUDIO_44K_8CH = 0x82,
- HDMI_AUDIO_48K_8CH = 0x83,
- HDMI_AUDIO_96K_8CH = 0x85,
- HDMI_AUDIO_192K_8CH = 0x87,
- HDMI_AUDIO_INITIAL = 0xFF
- };
- struct HDMI_CONFIG {
- enum HDMI_VIDEO_RESOLUTION vformat;
- enum HDMI_VIDEO_INPUT_FORMAT vin;
- enum HDMI_VIDEO_OUTPUT_FORMAT vout;
- enum HDMI_AUDIO_FORMAT aformat;
- };
- enum HDMI_OUTPUT_MODE {
- HDMI_OUTPUT_MODE_LCD_MIRROR,
- HDMI_OUTPUT_MODE_VIDEO_MODE,
- HDMI_OUTPUT_MODE_DPI_BYPASS
- };
- enum HDMI_CABLE_TYPE {
- HDMI_CABLE,
- MHL_CABLE,
- MHL_SMB_CABLE,
- MHL_2_CABLE, /* /MHL 2.0 */
- MHL_3D_GLASSES
- };
- enum HDMI_3D_FORMAT_ENUM {
- HDMI_2D,
- HDMI_3D_SBS,
- HDMI_3D_TAB,
- HDMI_3D_FP
- };
- struct HDMI_PARAMS {
- unsigned int width;
- unsigned int height;
- struct HDMI_CONFIG init_config;
- /* polarity parameters */
- enum HDMI_POLARITY clk_pol;
- enum HDMI_POLARITY de_pol;
- enum HDMI_POLARITY vsync_pol;
- enum HDMI_POLARITY hsync_pol;
- /* timing parameters */
- unsigned int hsync_pulse_width;
- unsigned int hsync_back_porch;
- unsigned int hsync_front_porch;
- unsigned int vsync_pulse_width;
- unsigned int vsync_back_porch;
- unsigned int vsync_front_porch;
- /* output format parameters */
- enum HDMI_COLOR_ORDER rgb_order;
- /* intermediate buffers parameters */
- unsigned int intermediat_buffer_num; /* 2..3 */
- /* iopad parameters */
- enum IO_DRIVING_CURRENT io_driving_current;
- enum HDMI_OUTPUT_MODE output_mode;
- int is_force_awake;
- int is_force_landscape;
- unsigned int scaling_factor; /* determine the scaling of output screen size, valid value 0~10 */
- /* 0 means no scaling, 5 means scaling to 95%, 10 means 90% */
- enum HDMI_CABLE_TYPE cabletype;
- unsigned int HDCPSupported;
- #ifdef CONFIG_MTK_HDMI_3D_SUPPORT
- int is_3d_support;
- #endif
- unsigned int input_clock;
- };
- enum HDMI_STATE {
- HDMI_STATE_NO_DEVICE,
- HDMI_STATE_ACTIVE,
- HDMI_STATE_CONNECTING,
- HDMI_STATE_PLUGIN_ONLY,
- HDMI_STATE_EDID_UPDATE,
- HDMI_STATE_CEC_UPDATE
- };
- /* --------------------------------------------------------------------------- */
- struct HDMI_UTIL_FUNCS {
- void (*set_reset_pin)(unsigned int value);
- int (*set_gpio_out)(unsigned int gpio, unsigned int value);
- void (*udelay)(unsigned int us);
- void (*mdelay)(unsigned int ms);
- void (*wait_transfer_done)(void);
- void (*state_callback)(enum HDMI_STATE state);
- };
- #define SINK_480P (1 << 0)
- #define SINK_720P60 (1 << 1)
- #define SINK_1080I60 (1 << 2)
- #define SINK_1080P60 (1 << 3)
- #define SINK_480P_1440 (1 << 4)
- #define SINK_480P_2880 (1 << 5)
- #define SINK_480I (1 << 6)
- #define SINK_480I_1440 (1 << 7)
- #define SINK_480I_2880 (1 << 8)
- #define SINK_1080P30 (1 << 9)
- #define SINK_576P (1 << 10)
- #define SINK_720P50 (1 << 11)
- #define SINK_1080I50 (1 << 12)
- #define SINK_1080P50 (1 << 13)
- #define SINK_576P_1440 (1 << 14)
- #define SINK_576P_2880 (1 << 15)
- #define SINK_576I (1 << 16)
- #define SINK_576I_1440 (1 << 17)
- #define SINK_576I_2880 (1 << 18)
- #define SINK_1080P25 (1 << 19)
- #define SINK_1080P24 (1 << 20)
- #define SINK_1080P23976 (1 << 21)
- #define SINK_1080P2997 (1 << 22)
- #if !defined(HDMI_MT8193_SUPPORT)
- struct HDMI_EDID_INFO_T {
- unsigned int ui4_ntsc_resolution; /* use EDID_VIDEO_RES_T, there are many resolution */
- unsigned int ui4_pal_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_native_ntsc_resolution;
- unsigned int ui4_sink_native_pal_resolution;
- unsigned int ui4_sink_cea_ntsc_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_cea_pal_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_dtd_ntsc_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_dtd_pal_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_1st_dtd_ntsc_resolution; /* use EDID_VIDEO_RES_T */
- unsigned int ui4_sink_1st_dtd_pal_resolution; /* use EDID_VIDEO_RES_T */
- unsigned short ui2_sink_colorimetry; /* use EDID_VIDEO_COLORIMETRY_T */
- unsigned char ui1_sink_rgb_color_bit; /* color bit for RGB */
- unsigned char ui1_sink_ycbcr_color_bit; /* color bit for YCbCr */
- unsigned short ui2_sink_aud_dec; /* use EDID_AUDIO_DECODER_T */
- unsigned char ui1_sink_is_plug_in; /* 1: Plug in 0:Plug Out */
- unsigned int ui4_hdmi_pcm_ch_type; /* use EDID_A_FMT_CH_TYPE */
- unsigned int ui4_hdmi_pcm_ch3ch4ch5ch7_type; /* use EDID_A_FMT_CH_TYPE1 */
- unsigned int ui4_dac_pcm_ch_type; /* use EDID_A_FMT_CH_TYPE */
- unsigned char ui1_sink_i_latency_present;
- unsigned char ui1_sink_p_audio_latency;
- unsigned char ui1_sink_p_video_latency;
- unsigned char ui1_sink_i_audio_latency;
- unsigned char ui1_sink_i_video_latency;
- unsigned char ui1ExtEdid_Revision;
- unsigned char ui1Edid_Version;
- unsigned char ui1Edid_Revision;
- unsigned char ui1_Display_Horizontal_Size;
- unsigned char ui1_Display_Vertical_Size;
- unsigned int ui4_ID_Serial_Number;
- unsigned int ui4_sink_cea_3D_resolution;
- unsigned char ui1_sink_support_ai; /* 0: not support AI, 1:support AI */
- unsigned short ui2_sink_cec_address;
- unsigned short ui1_sink_max_tmds_clock;
- unsigned short ui2_sink_3D_structure;
- unsigned int ui4_sink_cea_FP_SUP_3D_resolution;
- unsigned int ui4_sink_cea_TOB_SUP_3D_resolution;
- unsigned int ui4_sink_cea_SBS_SUP_3D_resolution;
- unsigned short ui2_sink_ID_manufacturer_name; /* (08H~09H) */
- unsigned short ui2_sink_ID_product_code; /* (0aH~0bH) */
- unsigned int ui4_sink_ID_serial_number; /* (0cH~0fH) */
- unsigned char ui1_sink_week_of_manufacture; /* (10H) */
- unsigned char ui1_sink_year_of_manufacture; /* (11H) base on year 1990 */
- };
- #endif
- typedef void (*CABLE_INSERT_CALLBACK)(enum HDMI_STATE state);
- struct HDMI_DRIVER {
- void (*set_util_funcs)(const struct HDMI_UTIL_FUNCS *util);
- void (*get_params)(struct HDMI_PARAMS *params);
- int (*init)(void);
- int (*enter)(void);
- int (*exit)(void);
- void (*suspend)(void);
- void (*resume)(void);
- int (*audio_config)(enum HDMI_AUDIO_FORMAT aformat, int bitWidth);
- #ifdef CONFIG_MTK_HDMI_3D_SUPPORT
- int (*video_config)(enum HDMI_VIDEO_RESOLUTION vformat, enum HDMI_VIDEO_INPUT_FORMAT vin, int vou);
- #else
- int (*video_config)(enum HDMI_VIDEO_RESOLUTION vformat, enum HDMI_VIDEO_INPUT_FORMAT vin,
- enum HDMI_VIDEO_OUTPUT_FORMAT vou);
- #endif
- int (*video_enable)(bool enable);
- int (*audio_enable)(bool enable);
- int (*irq_enable)(bool enable);
- int (*power_on)(void);
- void (*power_off)(void);
- enum HDMI_STATE (*get_state)(void);
- void (*set_mode)(unsigned char ucMode);
- void (*dump)(void);
- int (*get_external_device_capablity)(void);
- void (*force_on)(int from_uart_drv);
- void (*register_callback)(CABLE_INSERT_CALLBACK cb);
- void (*unregister_callback)(CABLE_INSERT_CALLBACK cb);
- #if !defined(HDMI_MT8193_SUPPORT)
- void (*read)(unsigned char u8Reg);
- void (*write)(unsigned char u8Reg, unsigned char u8Data);
- void (*log_enable)(bool enable);
- void (*getedid)(void *pv_get_info);
- #else
- void (*read)(u16 u2Reg, u32 *p4Data);
- void (*write)(u16 u2Reg, u32 u4Data);
- void (*log_enable)(u16 enable);
- void (*InfoframeSetting)(u8 i1typemode, u8 i1typeselect);
- void (*checkedid)(u8 i1noedid);
- void (*colordeep)(u8 u1colorspace, u8 u1deepcolor);
- void (*enablehdcp)(u8 u1hdcponoff);
- void (*setcecrxmode)(u8 u1cecrxmode);
- void (*hdmistatus)(void);
- void (*hdcpkey)(u8 *pbhdcpkey);
- #if defined(HDMI_MT8193_SUPPORT)
- void (*getedid)(HDMI_EDID_T *pv_get_info);
- #else
- void (*getedid)(void *pv_get_info);
- #endif
- void (*setcecla)(CEC_DRV_ADDR_CFG_T *prAddr);
- void (*sendsltdata)(u8 *pu1Data);
- void (*getceccmd)(CEC_FRAME_DESCRIPTION *frame);
- void (*getsltdata)(CEC_SLT_DATA *rCecSltData);
- void (*setceccmd)(CEC_SEND_MSG_T *msg);
- void (*cecenable)(u8 u1EnCec);
- void (*getcecaddr)(CEC_ADDRESS *cecaddr);
- void (*mutehdmi)(u8 u1flagvideomute, u8 u1flagaudiomute);
- u8 (*checkedidheader)(void);
- #endif
- };
- /* --------------------------------------------------------------------------- */
- /* HDMI Driver Functions */
- /* --------------------------------------------------------------------------- */
- const struct HDMI_DRIVER *HDMI_GetDriver(void);
- void Notify_AP_MHL_TX_Event(unsigned int event, unsigned int event_param, void *param);
- extern int chip_device_id;
- extern bool need_reset_usb_switch;
- #endif /* __HDMI_DRV_H__ */
|