mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
hdmirx: optimize timing format detection
PD#164010: hdmirx: optimize timing format detection Change-Id: Ibf868664d4fda5fa21d4e80cfcc6575b25acd500 Signed-off-by: Hang Cheng <hang.cheng@amlogic.com>
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
#include "../tvin_frontend.h"
|
||||
//#include "hdmirx_repeater.h"
|
||||
//#include "hdmi_rx_pktinfo.h"
|
||||
//#include "hdmi_rx_edid.h"
|
||||
#include "hdmi_rx_edid.h"
|
||||
|
||||
|
||||
#define RX_VER0 "ver.2018-05-17"
|
||||
@@ -41,7 +41,7 @@
|
||||
*
|
||||
*
|
||||
*/
|
||||
#define RX_VER1 "ver.2018/05/10"
|
||||
#define RX_VER1 "ver.2018/05/11"
|
||||
|
||||
|
||||
|
||||
@@ -214,11 +214,11 @@ struct rx_video_info {
|
||||
/** AVI Y1-0, video format */
|
||||
uint8_t colorspace;
|
||||
/** AVI VIC6-0, video identification code */
|
||||
uint8_t hw_vic;
|
||||
enum hdmi_vic_e hw_vic;
|
||||
/** AVI PR3-0, pixel repetition factor */
|
||||
uint8_t repeat;
|
||||
/* for sw info */
|
||||
uint8_t sw_vic;
|
||||
enum hdmi_vic_e sw_vic;
|
||||
uint8_t sw_dvi;
|
||||
unsigned int it_content;
|
||||
/** AVI Q1-0, RGB quantization range */
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
* more details.
|
||||
*
|
||||
*/
|
||||
#ifndef _HDMI_RX_EDID_H_
|
||||
#define _HDMI_RX_EDID_H_
|
||||
|
||||
#define EDID_SIZE 256
|
||||
#define EDID_HDR_SIZE 7
|
||||
@@ -47,6 +49,9 @@
|
||||
#define VSADB_TAG 17 /* Vendor-Specific Audio Data Block */
|
||||
/* extend tag code 18~31: Reserved */
|
||||
#define IFDB_TAG 32 /* infoframe data block */
|
||||
#define HDMI_VIC420_OFFSET 0x100
|
||||
#define HDMI_3D_OFFSET 0x180
|
||||
#define HDMI_VESA_OFFSET 0x200
|
||||
|
||||
|
||||
enum edid_audio_format_e {
|
||||
@@ -419,86 +424,94 @@ struct edid_data_s {
|
||||
|
||||
enum hdmi_vic_e {
|
||||
/* Refer to CEA 861-D */
|
||||
HDMI_Unknown = 0,
|
||||
HDMI_640x480p60_4x3 = 1,
|
||||
HDMI_720x480p60_4x3 = 2,
|
||||
HDMI_720x480p60_16x9 = 3,
|
||||
HDMI_1280x720p60_16x9 = 4,
|
||||
HDMI_1920x1080i60_16x9 = 5,
|
||||
HDMI_720x480i60_4x3 = 6,
|
||||
HDMI_720x480i60_16x9 = 7,
|
||||
HDMI_720x240p60_4x3 = 8,
|
||||
HDMI_720x240p60_16x9 = 9,
|
||||
HDMI_2880x480i60_4x3 = 10,
|
||||
HDMI_UNKNOWN = 0,
|
||||
HDMI_640x480p60 = 1,
|
||||
/* for video format which have two different
|
||||
* aspect ratios, VICs list below that don't
|
||||
* indicate aspect ratio, its aspect ratio
|
||||
* is default. e.g:
|
||||
* HDMI_480p60, means 480p60_4x3
|
||||
* HDMI_720p60, means 720p60_16x9
|
||||
* HDMI_1080p50, means 1080p50_16x9
|
||||
*/
|
||||
HDMI_480p60 = 2,
|
||||
HDMI_480p60_16x9 = 3,
|
||||
HDMI_720p60 = 4,
|
||||
HDMI_1080i60 = 5,
|
||||
HDMI_480i60 = 6,
|
||||
HDMI_480i60_16x9 = 7,
|
||||
HDMI_1440x240p60 = 8,
|
||||
HDMI_1440x240p60_16x9 = 9,
|
||||
HDMI_2880x480i60 = 10,
|
||||
HDMI_2880x480i60_16x9 = 11,
|
||||
HDMI_2880x240p60_4x3 = 12,
|
||||
HDMI_2880x240p60 = 12,
|
||||
HDMI_2880x240p60_16x9 = 13,
|
||||
HDMI_1440x480p60_4x3 = 14,
|
||||
HDMI_1440x480p60 = 14,
|
||||
HDMI_1440x480p60_16x9 = 15,
|
||||
HDMI_1920x1080p60_16x9 = 16,
|
||||
HDMI_720x576p50_4x3 = 17,
|
||||
HDMI_720x576p50_16x9 = 18,
|
||||
HDMI_1280x720p50_16x9 = 19,
|
||||
HDMI_1920x1080i50_16x9 = 20,
|
||||
HDMI_720x576i50_4x3 = 21,
|
||||
HDMI_720x576i50_16x9 = 22,
|
||||
HDMI_720x288p_4x3 = 23,
|
||||
HDMI_720x288p_16x9 = 24,
|
||||
HDMI_2880x576i50_4x3 = 25,
|
||||
HDMI_1080p60 = 16,
|
||||
HDMI_576p50 = 17,
|
||||
HDMI_576p50_16x9 = 18,
|
||||
HDMI_720p50 = 19,
|
||||
HDMI_1080i50 = 20,
|
||||
HDMI_576i50 = 21,
|
||||
HDMI_576i50_16x9 = 22,
|
||||
HDMI_1440x288p50 = 23,
|
||||
HDMI_1440x288p50_16x9 = 24,
|
||||
HDMI_2880x576i50 = 25,
|
||||
HDMI_2880x576i50_16x9 = 26,
|
||||
HDMI_2880x288p50_4x3 = 27,
|
||||
HDMI_2880x288p50 = 27,
|
||||
HDMI_2880x288p50_16x9 = 28,
|
||||
HDMI_1440x576p_4x3 = 29,
|
||||
HDMI_1440x576p_16x9 = 30,
|
||||
HDMI_1920x1080p50_16x9 = 31,
|
||||
HDMI_1920x1080p24_16x9 = 32,
|
||||
HDMI_1920x1080p25_16x9 = 33,
|
||||
HDMI_1920x1080p30_16x9 = 34,
|
||||
HDMI_2880x480p60_4x3 = 35,
|
||||
HDMI_1440x576p50 = 29,
|
||||
HDMI_1440x576p50_16x9 = 30,
|
||||
HDMI_1080p50 = 31,
|
||||
HDMI_1080p24 = 32,
|
||||
HDMI_1080p25 = 33,
|
||||
HDMI_1080p30 = 34,
|
||||
HDMI_2880x480p60 = 35,
|
||||
HDMI_2880x480p60_16x9 = 36,
|
||||
HDMI_2880x576p50_4x3 = 37,
|
||||
HDMI_2880x576p50 = 37,
|
||||
HDMI_2880x576p50_16x9 = 38,
|
||||
HDMI_1920x1080i_t1250_50_16x9 = 39,
|
||||
HDMI_1920x1080i100_16x9 = 40,
|
||||
HDMI_1280x720p100_16x9 = 41,
|
||||
HDMI_720x576p100_4x3 = 42,
|
||||
HDMI_720x576p100_16x9 = 43,
|
||||
HDMI_720x576i100_4x3 = 44,
|
||||
HDMI_720x576i100_16x9 = 45,
|
||||
HDMI_1920x1080i120_16x9 = 46,
|
||||
HDMI_1280x720p120_16x9 = 47,
|
||||
HDMI_720x480p120_4x3 = 48,
|
||||
HDMI_720x480p120_16x9 = 49,
|
||||
HDMI_720x480i120_4x3 = 50,
|
||||
HDMI_720x480i120_16x9 = 51,
|
||||
HDMI_720x576p200_4x3 = 52,
|
||||
HDMI_720x576p200_16x9 = 53,
|
||||
HDMI_720x576i200_4x3 = 54,
|
||||
HDMI_720x576i200_16x9 = 55,
|
||||
HDMI_720x480p240_4x3 = 56,
|
||||
HDMI_720x480p240_16x9 = 57,
|
||||
HDMI_720x480i240_4x3 = 58,
|
||||
HDMI_720x480i240_16x9 = 59,
|
||||
HDMI_1080i50_1250 = 39,
|
||||
HDMI_1080i100 = 40,
|
||||
HDMI_720p100 = 41,
|
||||
HDMI_576p100 = 42,
|
||||
HDMI_576p100_16x9 = 43,
|
||||
HDMI_576i100 = 44,
|
||||
HDMI_576i100_16x9 = 45,
|
||||
HDMI_1080i120 = 46,
|
||||
HDMI_720p120 = 47,
|
||||
HDMI_480p120 = 48,
|
||||
HDMI_480p120_16x9 = 49,
|
||||
HDMI_480i120 = 50,
|
||||
HDMI_480i120_16x9 = 51,
|
||||
HDMI_576p200 = 52,
|
||||
HDMI_576p200_16x9 = 53,
|
||||
HDMI_576i200 = 54,
|
||||
HDMI_576i200_16x9 = 55,
|
||||
HDMI_480p240 = 56,
|
||||
HDMI_480p240_16x9 = 57,
|
||||
HDMI_480i240 = 58,
|
||||
HDMI_480i240_16x9 = 59,
|
||||
/* Refet to CEA 861-F */
|
||||
HDMI_1280x720p24_16x9 = 60,
|
||||
HDMI_1280x720p25_16x9 = 61,
|
||||
HDMI_1280x720p30_16x9 = 62,
|
||||
HDMI_1920x1080p120_16x9 = 63,
|
||||
HDMI_1920x1080p100_16x9 = 64,
|
||||
HDMI_1280x720p24_64x27 = 65,
|
||||
HDMI_1280x720p25_64x27 = 66,
|
||||
HDMI_1280x720p30_64x27 = 67,
|
||||
HDMI_1280x720p50_64x27 = 68,
|
||||
HDMI_1280x720p60_64x27 = 69,
|
||||
HDMI_1280x720p100_64x27 = 70,
|
||||
HDMI_1280x720p120_64x27 = 71,
|
||||
HDMI_1920x1080p24_64x27 = 72,
|
||||
HDMI_1920x1080p25_64x27 = 73,
|
||||
HDMI_1920x1080p30_64x27 = 74,
|
||||
HDMI_1920x1080p50_64x27 = 75,
|
||||
HDMI_1920x1080p60_64x27 = 76,
|
||||
HDMI_1920x1080p100_64x27 = 77,
|
||||
HDMI_1920x1080p120_64x27 = 78,
|
||||
HDMI_720p24 = 60,
|
||||
HDMI_720p25 = 61,
|
||||
HDMI_720p30 = 62,
|
||||
HDMI_1080p120 = 63,
|
||||
HDMI_1080p100 = 64,
|
||||
HDMI_720p24_64x27 = 65,
|
||||
HDMI_720p25_64x27 = 66,
|
||||
HDMI_720p30_64x27 = 67,
|
||||
HDMI_720p50_64x27 = 68,
|
||||
HDMI_720p60_64x27 = 69,
|
||||
HDMI_720p100_64x27 = 70,
|
||||
HDMI_720p120_64x27 = 71,
|
||||
HDMI_1080p24_64x27 = 72,
|
||||
HDMI_1080p25_64x27 = 73,
|
||||
HDMI_1080p30_64x27 = 74,
|
||||
HDMI_1080p50_64x27 = 75,
|
||||
HDMI_1080p60_64x27 = 76,
|
||||
HDMI_1080p100_64x27 = 77,
|
||||
HDMI_1080p120_64x27 = 78,
|
||||
HDMI_1680x720p24_64x27 = 79,
|
||||
HDMI_1680x720p25_64x27 = 80,
|
||||
HDMI_1680x720p30_64x27 = 81,
|
||||
@@ -513,23 +526,75 @@ enum hdmi_vic_e {
|
||||
HDMI_2560x1080p60_64x27 = 90,
|
||||
HDMI_2560x1080p100_64x27 = 91,
|
||||
HDMI_2560x1080p120_64x27 = 92,
|
||||
HDMI_3840x2160p24_16x9 = 93,
|
||||
HDMI_3840x2160p25_16x9 = 94,
|
||||
HDMI_3840x2160p30_16x9 = 95,
|
||||
HDMI_3840x2160p50_16x9 = 96,
|
||||
HDMI_3840x2160p60_16x9 = 97,
|
||||
HDMI_4096x2160p24_256x135 = 98,
|
||||
HDMI_4096x2160p25_256x135 = 99,
|
||||
HDMI_4096x2160p30_256x135 = 100,
|
||||
HDMI_4096x2160p50_256x135 = 101,
|
||||
HDMI_4096x2160p60_256x135 = 102,
|
||||
HDMI_3840x2160p24_64x27 = 103,
|
||||
HDMI_3840x2160p25_64x27 = 104,
|
||||
HDMI_3840x2160p30_64x27 = 105,
|
||||
HDMI_3840x2160p50_64x27 = 106,
|
||||
HDMI_3840x2160p60_64x27 = 107,
|
||||
/* 3840*2160 */
|
||||
HDMI_2160p24_16x9 = 93,
|
||||
HDMI_2160p25_16x9 = 94,
|
||||
HDMI_2160p30_16x9 = 95,
|
||||
HDMI_2160p50_16x9 = 96,
|
||||
HDMI_2160p60_16x9 = 97,
|
||||
/* 4096*2160 */
|
||||
HDMI_4096p24_256x135 = 98,
|
||||
HDMI_4096p25_256x135 = 99,
|
||||
HDMI_4096p30_256x135 = 100,
|
||||
HDMI_4096p50_256x135 = 101,
|
||||
HDMI_4096p60_256x135 = 102,
|
||||
/* 3840*2160 */
|
||||
HDMI_2160p24_64x27 = 103,
|
||||
HDMI_2160p25_64x27 = 104,
|
||||
HDMI_2160p30_64x27 = 105,
|
||||
HDMI_2160p50_64x27 = 106,
|
||||
HDMI_2160p60_64x27 = 107,
|
||||
HDMI_RESERVED = 108,
|
||||
/* VIC 108~255: Reserved for the Future */
|
||||
|
||||
/* the following VICs are for y420 mode,
|
||||
* they are fake VICs that used to diff
|
||||
* from non-y420 mode, and have same VIC
|
||||
* with normal VIC in the lower bytes.
|
||||
*/
|
||||
HDMI_VIC_Y420 = HDMI_VIC420_OFFSET,
|
||||
HDMI_2160p50_16x9_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_2160p50_16x9,
|
||||
HDMI_2160p60_16x9_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_2160p60_16x9,
|
||||
HDMI_4096p50_256x135_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_4096p50_256x135,
|
||||
HDMI_4096p60_256x135_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_4096p60_256x135,
|
||||
HDMI_2160p50_64x27_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_2160p50_64x27,
|
||||
HDMI_2160p60_64x27_Y420 =
|
||||
HDMI_VIC420_OFFSET + HDMI_2160p60_64x27,
|
||||
HDMI_1080p_420,
|
||||
HDMI_VIC_Y420_MAX,
|
||||
|
||||
HDMI_VIC_3D = HDMI_3D_OFFSET,
|
||||
HDMI_480p_FRAMEPACKING,
|
||||
HDMI_576p_FRAMEPACKING,
|
||||
HDMI_720p_FRAMEPACKING,
|
||||
HDMI_1080i_ALTERNATIVE,
|
||||
HDMI_1080i_FRAMEPACKING,
|
||||
HDMI_1080p_ALTERNATIVE,
|
||||
HDMI_1080p_FRAMEPACKING,
|
||||
|
||||
HDMI_800_600 = HDMI_VESA_OFFSET,
|
||||
HDMI_1024_768,
|
||||
HDMI_720_400,
|
||||
HDMI_1280_768,
|
||||
HDMI_1280_800,
|
||||
HDMI_1280_960,
|
||||
HDMI_1280_1024,
|
||||
HDMI_1360_768,
|
||||
HDMI_1366_768,
|
||||
HDMI_1600_900,
|
||||
HDMI_1600_1200,
|
||||
HDMI_1920_1200,
|
||||
HDMI_1440_900,
|
||||
HDMI_1400_1050,
|
||||
HDMI_1680_1050,
|
||||
HDMI_1152_864,
|
||||
HDMI_2560_1440,
|
||||
HDMI_UNSUPPORT,
|
||||
};
|
||||
|
||||
extern int edid_mode;
|
||||
@@ -545,3 +610,4 @@ unsigned char *rx_get_edid(int edid_index);
|
||||
void edid_parse_block0(uint8_t *p_edid, struct edid_info_s *edid_info);
|
||||
void edid_parse_cea_block(uint8_t *p_edid, struct edid_info_s *edid_info);
|
||||
void rx_edid_parse_print(struct edid_info_s *edid_info);
|
||||
#endif
|
||||
|
||||
@@ -67,6 +67,9 @@ static int hpd_wait_max = 20;
|
||||
static int sig_unstable_cnt;
|
||||
static int sig_unstable_max = 80;
|
||||
|
||||
bool vic_check_en;
|
||||
bool dvi_check_en;
|
||||
|
||||
static int sig_unready_cnt;
|
||||
static int sig_unready_max = 5;/* 10; */
|
||||
|
||||
@@ -559,40 +562,44 @@ static unsigned char is_aud_ch_map_change(int pre, int cur)
|
||||
static const struct freq_ref_s freq_ref[] = {
|
||||
/* interlace 420 3d hac vac index */
|
||||
/* 420mode */
|
||||
{0, 3, 0, 1920, 2160, HDMI_3840x2160_420},
|
||||
{0, 3, 0, 2048, 2160, HDMI_4096x2160_420},
|
||||
{0, 3, 0, 1920, 2160, HDMI_2160p50_16x9_Y420},
|
||||
{0, 3, 0, 2048, 2160, HDMI_4096p50_256x135_Y420},
|
||||
{0, 3, 0, 960, 1080, HDMI_1080p_420},
|
||||
/* interlace */
|
||||
{1, 0, 0, 720, 240, HDMI_720x480i},
|
||||
{1, 0, 0, 1440, 240, HDMI_1440x480i},
|
||||
{1, 0, 0, 720, 288, HDMI_720x576i},
|
||||
{1, 0, 0, 1440, 288, HDMI_1440x576i},
|
||||
{1, 0, 0, 1920, 540, HDMI_1080i},
|
||||
/* {1, 0, 0, 720, 240, HDMI_720x480i}, */
|
||||
{1, 0, 0, 1440, 240, HDMI_480i60},
|
||||
/* {1, 0, 0, 720, 288, HDMI_720x576i}, */
|
||||
{1, 0, 0, 1440, 288, HDMI_576i50},
|
||||
{1, 0, 0, 1920, 540, HDMI_1080i50},
|
||||
{1, 0, 2, 1920, 1103, HDMI_1080i_ALTERNATIVE},
|
||||
{1, 0, 1, 1920, 2228, HDMI_1080i_FRAMEPACKING},
|
||||
|
||||
{0, 0, 0, 1440, 240, HDMI_1440x240p},
|
||||
{0, 0, 0, 2880, 240, HDMI_2880x240p},
|
||||
{0, 0, 0, 1440, 288, HDMI_1440x288p},
|
||||
{0, 0, 0, 2880, 288, HDMI_2880x288p},
|
||||
{0, 0, 0, 1440, 240, HDMI_1440x240p60},
|
||||
{0, 0, 0, 2880, 240, HDMI_2880x240p60},
|
||||
{0, 0, 0, 1440, 288, HDMI_1440x288p50},
|
||||
{0, 0, 0, 2880, 288, HDMI_2880x288p50},
|
||||
|
||||
{0, 0, 0, 720, 480, HDMI_720x480p},
|
||||
{0, 0, 0, 1440, 480, HDMI_1440x480p},
|
||||
{0, 0, 0, 720, 480, HDMI_480p60},
|
||||
{0, 0, 0, 1440, 480, HDMI_1440x480p60},
|
||||
{0, 0, 1, 720, 1005, HDMI_480p_FRAMEPACKING},
|
||||
|
||||
{0, 0, 0, 720, 576, HDMI_720x576p},
|
||||
{0, 0, 0, 1440, 576, HDMI_1440x576p},
|
||||
{0, 0, 0, 720, 576, HDMI_576p50},
|
||||
{0, 0, 0, 1440, 576, HDMI_1440x576p50},
|
||||
{0, 0, 1, 720, 1201, HDMI_576p_FRAMEPACKING},
|
||||
|
||||
{0, 0, 0, 1280, 720, HDMI_720p},
|
||||
{0, 0, 0, 1280, 720, HDMI_720p50},
|
||||
{0, 0, 1, 1280, 1470, HDMI_720p_FRAMEPACKING},
|
||||
|
||||
{0, 0, 0, 1920, 1080, HDMI_1080p},
|
||||
{0, 0, 0, 1920, 1080, HDMI_1080p50},
|
||||
{0, 0, 2, 1920, 2160, HDMI_1080p_ALTERNATIVE},
|
||||
{0, 0, 1, 1920, 2205, HDMI_1080p_FRAMEPACKING},
|
||||
|
||||
{1, 0, 0, 2880, 240, HDMI_2880x480i60},
|
||||
{1, 0, 0, 2880, 288, HDMI_2880x576i50},
|
||||
{0, 0, 0, 2880, 480, HDMI_2880x480p60},
|
||||
{0, 0, 0, 2880, 576, HDMI_2880x576p50},
|
||||
/* vesa format*/
|
||||
{0, 0, 0, 640, 480, HDMI_640_480},
|
||||
{0, 0, 0, 640, 480, HDMI_640x480p60},
|
||||
{0, 0, 0, 720, 400, HDMI_720_400},
|
||||
{0, 0, 0, 800, 600, HDMI_800_600},
|
||||
{0, 0, 0, 1024, 768, HDMI_1024_768},
|
||||
@@ -610,45 +617,85 @@ static const struct freq_ref_s freq_ref[] = {
|
||||
{0, 0, 0, 1920, 1200, HDMI_1920_1200},
|
||||
|
||||
/* 4k2k mode */
|
||||
{0, 0, 0, 3840, 2160, HDMI_3840x2160},
|
||||
{0, 0, 0, 4096, 2160, HDMI_4096x2160},
|
||||
{0, 0, 0, 3840, 2160, HDMI_2160p24_16x9},
|
||||
{0, 0, 0, 4096, 2160, HDMI_4096p24_256x135},
|
||||
{0, 0, 0, 2560, 1440, HDMI_2560_1440},
|
||||
{0, 0, 1, 2560, 3488, HDMI_2560_1440},
|
||||
{0, 0, 2, 2560, 2986, HDMI_2560_1440},
|
||||
|
||||
/* for AG-506 */
|
||||
{0, 0, 0, 720, 483, HDMI_720x480p},
|
||||
{0, 0, 0, 720, 483, HDMI_480p60},
|
||||
{0, 0, 0, 0, 0, HDMI_UNKNOWN}
|
||||
};
|
||||
|
||||
static bool fmt_vic_abnormal(void)
|
||||
{
|
||||
/* if format is unknown or unsupported after
|
||||
* timing match, but TX send normal VIC, then
|
||||
* abnormal format is detected.
|
||||
*/
|
||||
if (((rx.pre.sw_vic == HDMI_UNKNOWN) ||
|
||||
(rx.pre.sw_vic == HDMI_UNSUPPORT)) &&
|
||||
(rx.pre.hw_vic != HDMI_UNKNOWN))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
enum tvin_sig_fmt_e hdmirx_hw_get_fmt(void)
|
||||
{
|
||||
enum tvin_sig_fmt_e fmt = TVIN_SIG_FMT_NULL;
|
||||
unsigned int vic = rx.pre.sw_vic;
|
||||
enum hdmi_vic_e vic = HDMI_UNKNOWN;
|
||||
|
||||
if (fmt_vic_abnormal())
|
||||
vic = rx.pre.hw_vic;
|
||||
else
|
||||
vic = rx.pre.sw_vic;
|
||||
if (force_vic)
|
||||
vic = force_vic;
|
||||
|
||||
switch (vic) {
|
||||
case HDMI_640_480:
|
||||
case HDMI_640x480p60:
|
||||
fmt = TVIN_SIG_FMT_HDMI_640X480P_60HZ;
|
||||
break;
|
||||
case HDMI_720x480p:
|
||||
case HDMI_480p60: /*2 */
|
||||
case HDMI_480p60_16x9: /*3 */
|
||||
case HDMI_480p120: /* 48 */
|
||||
case HDMI_480p120_16x9: /* 49 */
|
||||
case HDMI_480p240: /* 56 */
|
||||
case HDMI_480p240_16x9: /* 57 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_720X480P_60HZ;
|
||||
break;
|
||||
case HDMI_1440x480p:
|
||||
case HDMI_1440x480p60: /* 14 */
|
||||
case HDMI_1440x480p60_16x9: /* 15 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X480P_60HZ;
|
||||
break;
|
||||
case HDMI_480p_FRAMEPACKING:
|
||||
fmt = TVIN_SIG_FMT_HDMI_720X480P_60HZ_FRAME_PACKING;
|
||||
break;
|
||||
case HDMI_720p:
|
||||
case HDMI_720p24: /* 60 */
|
||||
case HDMI_720p25: /* 61 */
|
||||
case HDMI_720p30: /* 62 */
|
||||
case HDMI_720p50: /* 19 */
|
||||
case HDMI_720p60: /* 4 */
|
||||
case HDMI_720p100: /* 41 */
|
||||
case HDMI_720p120: /* 47 */
|
||||
case HDMI_720p24_64x27: /* 65 */
|
||||
case HDMI_720p25_64x27: /* 66 */
|
||||
case HDMI_720p30_64x27: /* 67 */
|
||||
case HDMI_720p50_64x27: /* 68 */
|
||||
case HDMI_720p60_64x27: /* 69 */
|
||||
case HDMI_720p100_64x27: /* 70 */
|
||||
case HDMI_720p120_64x27: /* 71 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1280X720P_60HZ;
|
||||
break;
|
||||
case HDMI_720p_FRAMEPACKING:
|
||||
fmt = TVIN_SIG_FMT_HDMI_1280X720P_60HZ_FRAME_PACKING;
|
||||
break;
|
||||
case HDMI_1080i:
|
||||
case HDMI_1080i50: /* 20 */
|
||||
case HDMI_1080i100: /* 40 */
|
||||
case HDMI_1080i60: /* 5 */
|
||||
case HDMI_1080i120: /* 46 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1920X1080I_60HZ;
|
||||
break;
|
||||
case HDMI_1080i_FRAMEPACKING:
|
||||
@@ -657,11 +704,28 @@ enum tvin_sig_fmt_e hdmirx_hw_get_fmt(void)
|
||||
case HDMI_1080i_ALTERNATIVE:
|
||||
fmt = TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE;
|
||||
break;
|
||||
case HDMI_720x480i:
|
||||
case HDMI_1440x480i:
|
||||
case HDMI_480i60: /* 6 */
|
||||
case HDMI_480i60_16x9: /* 7 */
|
||||
case HDMI_480i120: /* 50 */
|
||||
case HDMI_480i120_16x9: /* 51 */
|
||||
case HDMI_480i240: /* 58 */
|
||||
case HDMI_480i240_16x9: /* 59 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X480I_60HZ;
|
||||
break;
|
||||
case HDMI_1080p:
|
||||
case HDMI_1080p24: /* 32 */
|
||||
case HDMI_1080p24_64x27: /* 72 */
|
||||
case HDMI_1080p25: /* 33 */
|
||||
case HDMI_1080p25_64x27: /* 73 */
|
||||
case HDMI_1080p30: /* 34 */
|
||||
case HDMI_1080p30_64x27: /* 74 */
|
||||
case HDMI_1080p50: /* 31 */
|
||||
case HDMI_1080p60: /* 16 */
|
||||
case HDMI_1080p50_64x27: /* 75 */
|
||||
case HDMI_1080p60_64x27: /* 76 */
|
||||
case HDMI_1080p100: /* 64 */
|
||||
case HDMI_1080p120: /* 63 */
|
||||
case HDMI_1080p100_64x27: /* 77 */
|
||||
case HDMI_1080p120_64x27: /* 78 */
|
||||
case HDMI_1080p_420:
|
||||
fmt = TVIN_SIG_FMT_HDMI_1920X1080P_60HZ;
|
||||
break;
|
||||
@@ -671,29 +735,66 @@ enum tvin_sig_fmt_e hdmirx_hw_get_fmt(void)
|
||||
case HDMI_1080p_ALTERNATIVE:
|
||||
fmt = TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE;
|
||||
break;
|
||||
case HDMI_720x576p:
|
||||
case HDMI_1440x576p:
|
||||
case HDMI_576p50: /* 17 */
|
||||
case HDMI_576p50_16x9: /* 18 */
|
||||
case HDMI_576p100: /* 42 */
|
||||
case HDMI_576p100_16x9: /* 43 */
|
||||
case HDMI_576p200: /* 52 */
|
||||
case HDMI_576p200_16x9: /* 53 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_720X576P_50HZ;
|
||||
break;
|
||||
case HDMI_1440x576p50: /* 29 */
|
||||
case HDMI_1440x576p50_16x9: /* 30 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X576P_50HZ;
|
||||
break;
|
||||
case HDMI_576p_FRAMEPACKING:
|
||||
fmt = TVIN_SIG_FMT_HDMI_720X576P_50HZ_FRAME_PACKING;
|
||||
break;
|
||||
case HDMI_720x576i:
|
||||
case HDMI_1440x576i:
|
||||
case HDMI_576i50: /* 21 */
|
||||
case HDMI_576i50_16x9: /* 22 */
|
||||
case HDMI_576i100: /* 44 */
|
||||
case HDMI_576i100_16x9: /* 45 */
|
||||
case HDMI_576i200: /* 54 */
|
||||
case HDMI_576i200_16x9: /* 55 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X576I_50HZ;
|
||||
break;
|
||||
case HDMI_1440x240p:
|
||||
case HDMI_1440x240p60: /* 8 */
|
||||
case HDMI_1440x240p60_16x9: /* 9 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X240P_60HZ;
|
||||
break;
|
||||
case HDMI_2880x240p:
|
||||
case HDMI_2880x240p60: /* 12 */
|
||||
case HDMI_2880x240p60_16x9: /* 13 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X240P_60HZ;
|
||||
break;
|
||||
case HDMI_1440x288p:
|
||||
case HDMI_1440x288p50: /* 23 */
|
||||
case HDMI_1440x288p50_16x9: /* 24 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1440X288P_50HZ;
|
||||
break;
|
||||
case HDMI_2880x288p:
|
||||
case HDMI_2880x288p50: /* 27 */
|
||||
case HDMI_2880x288p50_16x9: /* 28 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X288P_50HZ;
|
||||
break;
|
||||
case HDMI_2880x480i60: /* 10 */
|
||||
case HDMI_2880x480i60_16x9: /* 11 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X480I_60HZ;
|
||||
break;
|
||||
case HDMI_2880x576i50: /* 25 */
|
||||
case HDMI_2880x576i50_16x9: /* 26 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X576I_50HZ;
|
||||
break;
|
||||
case HDMI_2880x480p60: /* 35 */
|
||||
case HDMI_2880x480p60_16x9: /* 36 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X480P_60HZ;
|
||||
break;
|
||||
case HDMI_2880x576p50: /* 37 */
|
||||
case HDMI_2880x576p50_16x9: /* 38 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_2880X576P_50HZ;
|
||||
break;
|
||||
case HDMI_1080i50_1250: /* 39 */
|
||||
fmt = TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B;
|
||||
break;
|
||||
|
||||
/* VESA mode*/
|
||||
case HDMI_800_600:
|
||||
fmt = TVIN_SIG_FMT_HDMI_800X600_00HZ;
|
||||
break;
|
||||
@@ -739,15 +840,32 @@ enum tvin_sig_fmt_e hdmirx_hw_get_fmt(void)
|
||||
case HDMI_1680_1050:
|
||||
fmt = TVIN_SIG_FMT_HDMI_1680X1050_00HZ;
|
||||
break;
|
||||
case HDMI_3840x2160:
|
||||
case HDMI_3840x2160_420:
|
||||
case HDMI_2160p24_16x9:
|
||||
case HDMI_2160p25_16x9:
|
||||
case HDMI_2160p30_16x9:
|
||||
case HDMI_2160p50_16x9:
|
||||
case HDMI_2160p60_16x9:
|
||||
case HDMI_2160p24_64x27:
|
||||
case HDMI_2160p25_64x27:
|
||||
case HDMI_2160p30_64x27:
|
||||
case HDMI_2160p50_64x27:
|
||||
case HDMI_2160p60_64x27:
|
||||
case HDMI_2160p50_16x9_Y420:
|
||||
case HDMI_2160p60_16x9_Y420:
|
||||
case HDMI_2160p50_64x27_Y420:
|
||||
case HDMI_2160p60_64x27_Y420:
|
||||
if (en_4k_timing)
|
||||
fmt = TVIN_SIG_FMT_HDMI_3840_2160_00HZ;
|
||||
else
|
||||
fmt = TVIN_SIG_FMT_NULL;
|
||||
break;
|
||||
case HDMI_4096x2160:
|
||||
case HDMI_4096x2160_420:
|
||||
case HDMI_4096p24_256x135:
|
||||
case HDMI_4096p25_256x135:
|
||||
case HDMI_4096p30_256x135:
|
||||
case HDMI_4096p50_256x135:
|
||||
case HDMI_4096p60_256x135:
|
||||
case HDMI_4096p50_256x135_Y420:
|
||||
case HDMI_4096p60_256x135_Y420:
|
||||
if (en_4k_timing)
|
||||
fmt = TVIN_SIG_FMT_HDMI_4096_2160_00HZ;
|
||||
else
|
||||
@@ -897,7 +1015,7 @@ static int get_timing_fmt(void)
|
||||
int i;
|
||||
int size = sizeof(freq_ref)/sizeof(struct freq_ref_s);
|
||||
|
||||
rx.pre.sw_vic = 0;
|
||||
rx.pre.sw_vic = HDMI_UNKNOWN;
|
||||
rx.pre.sw_dvi = 0;
|
||||
rx.pre.sw_fp = 0;
|
||||
rx.pre.sw_alternative = 0;
|
||||
@@ -914,8 +1032,11 @@ static int get_timing_fmt(void)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (i == size)
|
||||
if (i == size) {
|
||||
/* if format is not matched, sw_vic will be UNSUPPORT */
|
||||
rx.pre.sw_vic = HDMI_UNSUPPORT;
|
||||
return i;
|
||||
}
|
||||
|
||||
rx.pre.sw_vic = freq_ref[i].vic;
|
||||
rx.pre.sw_dvi = rx.pre.hw_dvi;
|
||||
@@ -935,7 +1056,6 @@ static void signal_status_init(void)
|
||||
pll_lock_cnt = 0;
|
||||
sig_unstable_cnt = 0;
|
||||
sig_stable_cnt = 0;
|
||||
sig_stable_cnt = 0;
|
||||
sig_unstable_cnt = 0;
|
||||
sig_unready_cnt = 0;
|
||||
/*rx.wait_no_sig_cnt = 0;*/
|
||||
@@ -1173,6 +1293,8 @@ void fsm_restart(void)
|
||||
esm_set_stable(false);
|
||||
}
|
||||
set_scdc_cfg(1, 0);
|
||||
vic_check_en = true;
|
||||
dvi_check_en = true;
|
||||
rx.state = FSM_INIT;
|
||||
rx_pr("force_fsm_init\n");
|
||||
}
|
||||
@@ -1639,6 +1761,8 @@ void hdmirx_open_port(enum tvin_port_e port)
|
||||
rx.port = (port - TVIN_PORT_HDMI0) & 0xf;
|
||||
//rx.no_signal = false;
|
||||
//rx.wait_no_sig_cnt = 0;
|
||||
vic_check_en = true;
|
||||
dvi_check_en = true;
|
||||
if (hdmirx_repeat_support())
|
||||
rx.hdcp.repeat = repeat_plug;
|
||||
else
|
||||
@@ -1737,6 +1861,8 @@ void rx_5v_monitor(void)
|
||||
#else
|
||||
set_fsm_state(FSM_HPD_LOW);
|
||||
#endif
|
||||
vic_check_en = true;
|
||||
dvi_check_en = true;
|
||||
}
|
||||
}
|
||||
rx.cur_5v_sts = (pwr_sts >> rx.port) & 1;
|
||||
@@ -1927,7 +2053,26 @@ void rx_main_state_machine(void)
|
||||
get_timing_fmt();
|
||||
if (is_unnormal_format(sig_stable_cnt))
|
||||
break;
|
||||
/* if format vic is abnormal, do hw
|
||||
* reset once to try to recover.
|
||||
*/
|
||||
if (fmt_vic_abnormal() &&
|
||||
(vic_check_en == true)) {
|
||||
hdmirx_hw_config();
|
||||
rx.state = FSM_HPD_LOW;
|
||||
vic_check_en = false;
|
||||
break;
|
||||
}
|
||||
sig_unready_cnt = 0;
|
||||
/* if DVI signal is detected, then try
|
||||
* hpd reset once to recovery, to avoid
|
||||
* recognition to DVI of low probability
|
||||
*/
|
||||
if (rx.pre.sw_dvi && dvi_check_en) {
|
||||
rx.state = FSM_HPD_LOW;
|
||||
dvi_check_en = false;
|
||||
break;
|
||||
}
|
||||
rx.skip = 0;
|
||||
rx.state = FSM_SIG_READY;
|
||||
rx.aud_sr_stable_cnt = 0;
|
||||
@@ -1984,6 +2129,7 @@ void rx_main_state_machine(void)
|
||||
rx.hdcp.hdcp_version = HDCP_VER_NONE;
|
||||
rx.state = FSM_WAIT_CLK_STABLE;
|
||||
/* rx.pre_state = FSM_SIG_READY; */
|
||||
vic_check_en = true;
|
||||
rx.skip = 0;
|
||||
rx.aud_sr_stable_cnt = 0;
|
||||
rx.aud_sr_unstable_cnt = 0;
|
||||
@@ -2216,8 +2362,20 @@ void rx_main_state_machine(void)
|
||||
get_timing_fmt();
|
||||
if (is_unnormal_format(sig_stable_cnt))
|
||||
break;
|
||||
if (fmt_vic_abnormal() &&
|
||||
(vic_check_en == true)) {
|
||||
hdmirx_hw_config();
|
||||
rx.state = FSM_HPD_LOW;
|
||||
vic_check_en = false;
|
||||
break;
|
||||
}
|
||||
sig_stable_cnt = 0;
|
||||
sig_unstable_cnt = 0;
|
||||
if (rx.pre.sw_dvi && dvi_check_en) {
|
||||
rx.state = FSM_HPD_LOW;
|
||||
dvi_check_en = false;
|
||||
break;
|
||||
}
|
||||
rx.skip = 0;
|
||||
if ((rx.pre.hdcp14_state == 0) ||
|
||||
(rx.pre.hdcp14_state == 2))
|
||||
@@ -2281,6 +2439,7 @@ void rx_main_state_machine(void)
|
||||
rx.state = FSM_WAIT_CLK_STABLE;
|
||||
rx.pre_state = FSM_SIG_READY;
|
||||
rx.skip = 0;
|
||||
vic_check_en = true;
|
||||
rx.aud_sr_stable_cnt = 0;
|
||||
rx.aud_sr_unstable_cnt = 0;
|
||||
if (hdcp22_on) {
|
||||
@@ -2733,8 +2892,8 @@ void hdmirx_timer_handler(unsigned long arg)
|
||||
rx_pkt_check_content();
|
||||
#ifdef USE_NEW_FSM_METHODE
|
||||
rx_err_monitor();
|
||||
#endif
|
||||
rx_clkrate_monitor();
|
||||
#endif
|
||||
}
|
||||
devp->timer.expires = jiffies + TIMER_STATE_CHECK;
|
||||
add_timer(&devp->timer);
|
||||
|
||||
@@ -55,64 +55,7 @@ struct freq_ref_s {
|
||||
uint8_t type_3d;
|
||||
unsigned int hactive;
|
||||
unsigned int vactive;
|
||||
uint8_t vic;
|
||||
};
|
||||
|
||||
enum video_format_e {
|
||||
|
||||
HDMI_UNKNOWN = 0,
|
||||
HDMI_720x480i,
|
||||
HDMI_1440x480i,
|
||||
HDMI_720x576i,
|
||||
HDMI_1440x576i,
|
||||
|
||||
HDMI_720x480p = 5,
|
||||
HDMI_1440x480p,
|
||||
HDMI_720x576p,
|
||||
HDMI_1440x576p,
|
||||
|
||||
HDMI_1440x240p = 9,
|
||||
HDMI_2880x240p,
|
||||
HDMI_1440x288p,
|
||||
HDMI_2880x288p,
|
||||
|
||||
HDMI_720p = 13,
|
||||
HDMI_1080i,
|
||||
HDMI_1080p,
|
||||
|
||||
HDMI_3840x2160 = 16,
|
||||
HDMI_4096x2160,
|
||||
HDMI_3840x2160_420,
|
||||
HDMI_4096x2160_420,
|
||||
HDMI_1080p_420,
|
||||
|
||||
HDMI_640_480 = 21,
|
||||
HDMI_800_600,
|
||||
HDMI_1024_768,
|
||||
HDMI_720_400,
|
||||
HDMI_1280_768,
|
||||
HDMI_1280_800 = 26,
|
||||
HDMI_1280_960,
|
||||
HDMI_1280_1024,
|
||||
HDMI_1360_768,
|
||||
HDMI_1366_768,
|
||||
HDMI_1600_900 = 31,
|
||||
HDMI_1600_1200,
|
||||
HDMI_1920_1200,
|
||||
HDMI_1440_900,
|
||||
HDMI_1400_1050,
|
||||
HDMI_1680_1050 = 36,
|
||||
HDMI_2560_1440,
|
||||
|
||||
HDMI_480p_FRAMEPACKING,
|
||||
HDMI_576p_FRAMEPACKING,
|
||||
HDMI_720p_FRAMEPACKING,
|
||||
HDMI_1080i_FRAMEPACKING,
|
||||
HDMI_1080i_ALTERNATIVE,
|
||||
HDMI_1080p_ALTERNATIVE,
|
||||
HDMI_1080p_FRAMEPACKING,
|
||||
|
||||
HDMI_UNSUPPORT
|
||||
enum hdmi_vic_e vic;
|
||||
};
|
||||
|
||||
enum fsm_states_e {
|
||||
|
||||
Reference in New Issue
Block a user