mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
hdmirx: optimize for devices which send signal slowly
PD#168494: hdmirx: optimize for devices which send signal slowly 1.avoid rapid phy reset interference signal recognition 2.add 3d information parse of edid Change-Id: Iafa38bad6907f287c0e021d5fb32d11e43c489a0 Signed-off-by: Hang Cheng <hang.cheng@amlogic.com>
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
#include "hdmi_rx_edid.h"
|
||||
|
||||
|
||||
#define RX_VER0 "ver.2018-06-13"
|
||||
#define RX_VER0 "ver.2018/06/21"
|
||||
/*
|
||||
*
|
||||
*
|
||||
|
||||
@@ -353,6 +353,51 @@ const char *hdmi_fmt[] = {
|
||||
"HDMI_RESERVED",
|
||||
};
|
||||
|
||||
const char *_3d_structure[] = {
|
||||
/* hdmi1.4 spec, Table H-7 */
|
||||
/* value: 0x0000 */
|
||||
"Frame packing",
|
||||
"Field alternative",
|
||||
"Line alternative",
|
||||
"Side-by-Side(Full)",
|
||||
"L + depth",
|
||||
"L + depth + graphics + graphics-depth",
|
||||
"Top-and-Bottom",
|
||||
/* value 0x0111: Reserved for future use */
|
||||
"Resvrd",
|
||||
/* value 0x1000 */
|
||||
"Side-by-Side(Half) with horizontal sub-sampling",
|
||||
/* value 0x1001-0x1110:Reserved for future use */
|
||||
"Resvrd",
|
||||
"Resvrd",
|
||||
"Resvrd",
|
||||
"Resvrd",
|
||||
"Resvrd",
|
||||
"Resvrd",
|
||||
"Side-by-Side(Half) with all quincunx sub-sampling",
|
||||
};
|
||||
|
||||
const char *_3d_detail_x[] = {
|
||||
/* hdmi1.4 spec, Table H-8 */
|
||||
/* value: 0x0000 */
|
||||
"All horizontal sub-sampling and quincunx matrix",
|
||||
"Horizontal sub-sampling",
|
||||
"Not_in_Use1",
|
||||
"Not_in_Use2",
|
||||
"Not_in_Use3",
|
||||
"Not_in_Use4",
|
||||
"All_Quincunx",
|
||||
"ODD_left_ODD_right",
|
||||
"ODD_left_EVEN_right",
|
||||
"EVEN_left_ODD_right",
|
||||
"EVEN_left_EVEN_right",
|
||||
"Resvrd1",
|
||||
"Resvrd2",
|
||||
"Resvrd3",
|
||||
"Resvrd4",
|
||||
"Resvrd5",
|
||||
};
|
||||
|
||||
const char *aud_fmt[] = {
|
||||
"HEADER",
|
||||
"L-PCM",
|
||||
@@ -846,6 +891,28 @@ unsigned int hdmi_rx_top_edid_update(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
void rx_edid_print_vic_fmt(unsigned char i,
|
||||
unsigned char hdmi_vic)
|
||||
{
|
||||
/* CTA-861-G: Table-18 */
|
||||
/* SVD = 128, 254, 255 are reserved */
|
||||
if ((hdmi_vic >= 1) && (hdmi_vic <= 64)) {
|
||||
rx_pr("\tSVD#%2d: vic(%3d), format: %s\n",
|
||||
i+1, hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 65) && (hdmi_vic <= 107)) {
|
||||
/* from first new set */
|
||||
rx_pr("\tSVD#%2d: vic(%3d), format: %s\n",
|
||||
i+1, hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 108) && (hdmi_vic <= 127)) {
|
||||
/* from first new set: 8bit VIC */
|
||||
} else if ((hdmi_vic >= 129) && (hdmi_vic <= 192)) {
|
||||
hdmi_vic &= 0x7F;
|
||||
rx_pr("\tSVD#%2d: vic(%3d), native format: %s\n",
|
||||
i+1, hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 193) && (hdmi_vic <= 253)) {
|
||||
/* from second new set: 8bit VIC */
|
||||
}
|
||||
}
|
||||
|
||||
/* edid header of base block
|
||||
* offset 0x00 ~ 0x07
|
||||
@@ -980,11 +1047,11 @@ static void get_edid_established_timings(unsigned char *buff,
|
||||
rx_pr("established timing:\n");
|
||||
/* each bit for an established timing */
|
||||
if (buff[start] & (1 << 5))
|
||||
rx_pr("640*480p60hz is supported\n");
|
||||
rx_pr("\t640*480p60hz\n");
|
||||
if (buff[start] & (1 << 0))
|
||||
rx_pr("800*600p60hz is supported\n");
|
||||
rx_pr("\t800*600p60hz\n");
|
||||
if (buff[start+1] & (1 << 3))
|
||||
rx_pr("1024*768p60hz is supported\n");
|
||||
rx_pr("\t1024*768p60hz\n");
|
||||
}
|
||||
|
||||
/* Standard timings are those either recognized by VESA
|
||||
@@ -1019,7 +1086,7 @@ static void get_edid_standard_timing(unsigned char *buff, unsigned char start,
|
||||
vactive_pixel =
|
||||
hactive_pixel*asp_ratio[img_aspect_ratio]/80;
|
||||
refresh_rate = (int)(buff[start+i+1] & 0x3F) + 60;
|
||||
rx_pr("%d*%dP%dHz\n", hactive_pixel,
|
||||
rx_pr("\t%d*%dP%dHz\n", hactive_pixel,
|
||||
vactive_pixel, refresh_rate);
|
||||
}
|
||||
}
|
||||
@@ -1317,8 +1384,14 @@ static void get_edid_vsdb(unsigned char *buff, unsigned char start,
|
||||
unsigned char _3d_present_offset;
|
||||
unsigned char hdmi_vic_len;
|
||||
unsigned char hdmi_vic_offset;
|
||||
unsigned char i;
|
||||
unsigned char i, j;
|
||||
unsigned int ieee_oui;
|
||||
unsigned char _3d_struct_all_offset;
|
||||
unsigned char hdmi_3d_len;
|
||||
unsigned char _3d_struct;
|
||||
unsigned char _2d_vic_order_offset;
|
||||
unsigned char temp_3d_len;
|
||||
|
||||
/* basic 5 bytes; others: extension fields */
|
||||
if (len < 5) {
|
||||
rx_pr("invalid VSDB length: %d!\n", len);
|
||||
@@ -1404,6 +1477,10 @@ static void get_edid_vsdb(unsigned char *buff, unsigned char start,
|
||||
if (edid_info->vsdb.hdmi_video_present) {
|
||||
/* if hdmi video present,
|
||||
* 2 additonal bytes at least will present
|
||||
* 1 byte containing the 3D_present flag and other flags
|
||||
* 1 byte with length fields HDMI_VIC_LEN and HDMI_3D_LEN
|
||||
* 0 or more bytes for info about HDMI_VIC formats supported
|
||||
* 0 or more bytes for info about 3D formats supported
|
||||
*/
|
||||
if (len < _3d_present_offset + 2) {
|
||||
rx_pr("invalid vsdb length for hdmi video: %d\n", len);
|
||||
@@ -1422,10 +1499,16 @@ static void get_edid_vsdb(unsigned char *buff, unsigned char start,
|
||||
/* parse 4k2k video format, 4 4k2k format maximum*/
|
||||
hdmi_vic_offset = _3d_present_offset + 2;
|
||||
hdmi_vic_len = edid_info->vsdb.hdmi_vic_len;
|
||||
if ((hdmi_vic_len > 4) || (hdmi_vic_len == 0)) {
|
||||
if (hdmi_vic_len > 4) {
|
||||
rx_pr("invalid hdmi vic len: %d\n",
|
||||
edid_info->vsdb.hdmi_vic_len);
|
||||
return;
|
||||
} else {
|
||||
/* HDMI_VIC_LEN may be 0 */
|
||||
if (len < hdmi_vic_offset + hdmi_vic_len) {
|
||||
rx_pr("invalid length for 4k2k: %d\n", len);
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < hdmi_vic_len; i++) {
|
||||
if (buff[start+hdmi_vic_offset+i] == 1)
|
||||
edid_info->vsdb.hdmi_4k2k_30hz_sup = 1;
|
||||
@@ -1437,7 +1520,82 @@ static void get_edid_vsdb(unsigned char *buff, unsigned char start,
|
||||
edid_info->vsdb.hdmi_smpte_sup = 1;
|
||||
}
|
||||
}
|
||||
/* 3D:todo */
|
||||
|
||||
/* 3D info parse */
|
||||
_3d_struct_all_offset =
|
||||
hdmi_vic_offset + hdmi_vic_len;
|
||||
hdmi_3d_len = edid_info->vsdb.hdmi_3d_len;
|
||||
/* there may be additional 0 present after 3D info */
|
||||
if (len < _3d_struct_all_offset + hdmi_3d_len) {
|
||||
rx_pr("invalid vsdb length for 3d: %d\n", len);
|
||||
return;
|
||||
}
|
||||
/* 3d_multi_present: hdmi1.4 spec page155:
|
||||
* 0: neither structure or mask present,
|
||||
* 1: only 3D_Structure_ALL_15¡0 is present
|
||||
* and assigns 3D formats to all of the
|
||||
* VICs listed in the first 16 entries
|
||||
* in the EDID
|
||||
* 2: 3D_Structure_ALL_15¡0 and 3D_MASK_15¡0
|
||||
* are present and assign 3D formats to
|
||||
* some of the VICs listed in the first
|
||||
* 16 entries in the EDID.
|
||||
* 3: neither structure or mask present,
|
||||
* Reserved for future use.
|
||||
*/
|
||||
if (edid_info->vsdb._3d_multi_present == 1) {
|
||||
edid_info->vsdb._3d_struct_all =
|
||||
(buff[start+_3d_struct_all_offset] << 8) +
|
||||
buff[start+_3d_struct_all_offset+1];
|
||||
_2d_vic_order_offset =
|
||||
_3d_struct_all_offset + 2;
|
||||
temp_3d_len = 2;
|
||||
} else if (edid_info->vsdb._3d_multi_present == 2) {
|
||||
edid_info->vsdb._3d_struct_all =
|
||||
(buff[start+_3d_struct_all_offset] << 8) +
|
||||
buff[start+_3d_struct_all_offset+1];
|
||||
edid_info->vsdb._3d_mask_15_0 =
|
||||
(buff[start+_3d_struct_all_offset+2] << 8) +
|
||||
buff[start+_3d_struct_all_offset+3];
|
||||
_2d_vic_order_offset =
|
||||
_3d_struct_all_offset + 4;
|
||||
temp_3d_len = 4;
|
||||
} else {
|
||||
_2d_vic_order_offset =
|
||||
_3d_struct_all_offset;
|
||||
temp_3d_len = 0;
|
||||
}
|
||||
i = _2d_vic_order_offset;
|
||||
for (j = 0; (temp_3d_len < hdmi_3d_len)
|
||||
&& (j < 16); j++) {
|
||||
edid_info->vsdb._2d_vic[j]._2d_vic_order =
|
||||
(buff[start+i] >> 4) & 0xF;
|
||||
edid_info->vsdb._2d_vic[j]._3d_struct =
|
||||
buff[start+i] & 0xF;
|
||||
_3d_struct =
|
||||
edid_info->vsdb._2d_vic[j]._3d_struct;
|
||||
/* hdmi1.4 spec page156
|
||||
* if 3D_Structure_X is 0000~0111,
|
||||
* 3D_Detail_X shall not be present,
|
||||
* otherwise shall be present
|
||||
*/
|
||||
if ((_3d_struct >= 0x8) &&
|
||||
(_3d_struct <= 0xF)) {
|
||||
edid_info->vsdb._2d_vic[j]._3d_detail =
|
||||
(buff[start+i+1] >> 4) & 0xF;
|
||||
i += 2;
|
||||
temp_3d_len += 2;
|
||||
if (temp_3d_len > hdmi_3d_len) {
|
||||
rx_pr("invalid len for 3d_detail: %d\n",
|
||||
len);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
i++;
|
||||
temp_3d_len++;
|
||||
}
|
||||
}
|
||||
edid_info->vsdb._2d_vic_num = j;
|
||||
return;
|
||||
}
|
||||
hf_vsdb:
|
||||
@@ -1769,10 +1927,14 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
unsigned char hdmi_vic;
|
||||
enum edid_audio_format_e fmt;
|
||||
union bit_rate_u *bit_rate;
|
||||
unsigned char svd_num;
|
||||
unsigned char _2d_vic_order;
|
||||
unsigned char _3d_struct;
|
||||
unsigned char _3d_detail;
|
||||
|
||||
if (!edid_info)
|
||||
return;
|
||||
rx_pr("----EDID Basic Block----\n");
|
||||
rx_pr("****EDID Basic Block****\n");
|
||||
rx_pr("manufacturer_name: %s\n", edid_info->manufacturer_name);
|
||||
rx_pr("product code: 0x%04x\n", edid_info->product_code);
|
||||
rx_pr("serial_number: 0x%08x\n", edid_info->serial_number);
|
||||
@@ -1788,37 +1950,22 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
rx_pr("extension_flag: %d\n", edid_info->extension_flag);
|
||||
rx_pr("block0_chk_sum: 0x%x\n", edid_info->block0_chk_sum);
|
||||
|
||||
rx_pr("----CEA block header----\n");
|
||||
rx_pr("****CEA block header****\n");
|
||||
rx_pr("underscan_sup: %d\n", edid_info->underscan_sup);
|
||||
rx_pr("basic_aud_sup: %d\n", edid_info->basic_aud_sup);
|
||||
rx_pr("ycc444_sup: %d\n", edid_info->ycc444_sup);
|
||||
rx_pr("ycc422_sup: %d\n", edid_info->ycc422_sup);
|
||||
rx_pr("native_dtd_num: %d\n", edid_info->native_dtd_num);
|
||||
|
||||
rx_pr("----Video Data Block----\n");
|
||||
rx_pr("****Video Data Block****\n");
|
||||
rx_pr("support SVD list:\n");
|
||||
svd_num = edid_info->video_db.svd_num;
|
||||
for (i = 0; i < edid_info->video_db.svd_num; i++) {
|
||||
hdmi_vic = edid_info->video_db.hdmi_vic[i];
|
||||
/* SVD = 128, 254, 255 are reserved*/
|
||||
if ((hdmi_vic >= 1) && (hdmi_vic <= 64)) {
|
||||
rx_pr("vic: %3d, format: %s\n",
|
||||
hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 65) && (hdmi_vic <= 107)) {
|
||||
/* from first new set */
|
||||
rx_pr("vic: %3d, format: %s\n",
|
||||
hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 108) && (hdmi_vic <= 127)) {
|
||||
/* from first new set: 8bit VIC */
|
||||
} else if ((hdmi_vic >= 129) && (hdmi_vic <= 192)) {
|
||||
hdmi_vic &= 0x7F;
|
||||
rx_pr("vic: %3d, native format: %s\n",
|
||||
hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
} else if ((hdmi_vic >= 193) && (hdmi_vic <= 253)) {
|
||||
/* from second new set */
|
||||
}
|
||||
rx_edid_print_vic_fmt(i, hdmi_vic);
|
||||
}
|
||||
|
||||
rx_pr("----Audio Data Block----\n");
|
||||
rx_pr("****Audio Data Block****\n");
|
||||
for (fmt = AUDIO_FORMAT_LPCM; fmt <= AUDIO_FORMAT_WMAPRO; fmt++) {
|
||||
if (edid_info->audio_db.aud_fmt_sup[fmt]) {
|
||||
rx_pr("audio fmt: %s\n", aud_fmt[fmt]);
|
||||
@@ -1849,16 +1996,16 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
rx_pr("\t24bit\n");
|
||||
} else if ((fmt >= AUDIO_FORMAT_AC3) &&
|
||||
(fmt <= AUDIO_FORMAT_ATRAC)) {
|
||||
rx_pr("max bit rate: %dkHz\n",
|
||||
rx_pr("\tmax bit rate: %dkHz\n",
|
||||
bit_rate->others*8);
|
||||
} else {
|
||||
rx_pr("format dependent value: 0x%x\n",
|
||||
rx_pr("\tformat dependent value: 0x%x\n",
|
||||
bit_rate->others);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rx_pr("----Speaker Allocation Data Block----\n");
|
||||
rx_pr("****Speaker Allocation Data Block****\n");
|
||||
if (edid_info->speaker_alloc.flw_frw)
|
||||
rx_pr("FLW/FRW\n");
|
||||
if (edid_info->speaker_alloc.rlc_rrc)
|
||||
@@ -1882,7 +2029,7 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
if (edid_info->speaker_alloc.flh_frh)
|
||||
rx_pr("FLH_FRH\n");
|
||||
|
||||
rx_pr("----Vender Specific Data Block----\n");
|
||||
rx_pr("****Vender Specific Data Block****\n");
|
||||
rx_pr("IEEE OUI: %06X\n",
|
||||
edid_info->vsdb.ieee_oui);
|
||||
rx_pr("phy addr: %d.%d.%d.%d\n",
|
||||
@@ -1904,25 +2051,102 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
edid_info->vsdb.max_tmds_clk*5);
|
||||
rx_pr("hdmi_video_present: %d\n",
|
||||
edid_info->vsdb.hdmi_video_present);
|
||||
rx_pr("cnc3=%d,cnc2=%d,cnc1=%d,cnc0=%d\n",
|
||||
edid_info->vsdb.cnc3,
|
||||
edid_info->vsdb.cnc2,
|
||||
edid_info->vsdb.cnc1,
|
||||
edid_info->vsdb.cnc0);
|
||||
rx_pr("supproted hdmi vic:\n");
|
||||
rx_pr("Content types:\n");
|
||||
if (edid_info->vsdb.cnc3)
|
||||
rx_pr("\tcnc3: Game\n");
|
||||
if (edid_info->vsdb.cnc2)
|
||||
rx_pr("\tcnc2: Cinema\n");
|
||||
if (edid_info->vsdb.cnc1)
|
||||
rx_pr("\tcnc1: Photo\n");
|
||||
if (edid_info->vsdb.cnc0)
|
||||
rx_pr("\tcnc0: Grahpics(text)\n");
|
||||
|
||||
if (edid_info->vsdb.hdmi_vic_len > 0)
|
||||
rx_pr("Supproted 4k2k format:\n");
|
||||
if (edid_info->vsdb.hdmi_4k2k_30hz_sup)
|
||||
rx_pr("hdmi vic1: 4k30hz\n");
|
||||
rx_pr("\thdmi vic1: 4k30hz\n");
|
||||
if (edid_info->vsdb.hdmi_4k2k_25hz_sup)
|
||||
rx_pr("hdmi vic2: 4k25hz\n");
|
||||
rx_pr("\thdmi vic2: 4k25hz\n");
|
||||
if (edid_info->vsdb.hdmi_4k2k_24hz_sup)
|
||||
rx_pr("hdmi vic3: 4k24hz\n");
|
||||
rx_pr("\thdmi vic3: 4k24hz\n");
|
||||
if (edid_info->vsdb.hdmi_smpte_sup)
|
||||
rx_pr("hdmi vic4: smpte\n");
|
||||
rx_pr("3D present: %d\n",
|
||||
edid_info->vsdb._3d_present);
|
||||
rx_pr("\thdmi vic4: smpte\n");
|
||||
/* Mandatory 3D format: HDMI1.4 spec page157 */
|
||||
if (edid_info->vsdb._3d_present) {
|
||||
rx_pr("Basic(Mandatory) 3D formats supported\n");
|
||||
rx_pr("Image Size:\n");
|
||||
switch (edid_info->vsdb.image_size) {
|
||||
case 0:
|
||||
rx_pr("\tNo additional information\n");
|
||||
break;
|
||||
case 1:
|
||||
rx_pr("\tOnly indicate correct aspect ratio\n");
|
||||
break;
|
||||
case 2:
|
||||
rx_pr("\tCorrect size: Accurate to 1(cm)\n");
|
||||
break;
|
||||
case 3:
|
||||
rx_pr("\tCorrect size: multiply by 5(cm)\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else
|
||||
rx_pr("No 3D support\n");
|
||||
if (edid_info->vsdb._3d_multi_present == 1) {
|
||||
/* For each bit in _3d_struct which is set (=1),
|
||||
* Sink supports the corresponding 3D_Structure
|
||||
* for all of the VICs listed in the first 16
|
||||
* entries in the EDID.
|
||||
*/
|
||||
rx_pr("General 3D format, on the first 16 SVDs:\n");
|
||||
for (i = 0; i < 16; i++) {
|
||||
if ((edid_info->vsdb._3d_struct_all >> i) & 0x1)
|
||||
rx_pr("\t%s\n", _3d_structure[i]);
|
||||
}
|
||||
} else if (edid_info->vsdb._3d_multi_present == 2) {
|
||||
/* Where a bit is set (=1), for the corresponding
|
||||
* VIC within the first 16 entries in the EDID,
|
||||
* the Sink indicates 3D support as designate
|
||||
* by the 3D_Structure_ALL_15¡0 field.
|
||||
*/
|
||||
rx_pr("General 3D format, on the SVDs below:\n");
|
||||
for (i = 0; i < 16; i++) {
|
||||
if ((edid_info->vsdb._3d_struct_all >> i) & 0x1)
|
||||
rx_pr("\t%s\n", _3d_structure[i]);
|
||||
}
|
||||
rx_pr("For SVDs:\n");
|
||||
for (i = 0; (i < svd_num) && (i < 16); i++) {
|
||||
hdmi_vic = edid_info->video_db.hdmi_vic[i];
|
||||
if ((edid_info->vsdb._3d_mask_15_0 >> i) & 0x1)
|
||||
rx_edid_print_vic_fmt(i, hdmi_vic);
|
||||
}
|
||||
}
|
||||
|
||||
if (edid_info->vsdb._2d_vic_num > 0)
|
||||
rx_pr("Specific VIC 3D information:\n");
|
||||
for (i = 0; (i < edid_info->vsdb._2d_vic_num)
|
||||
&& (i < svd_num) && (i < 16); i++) {
|
||||
_2d_vic_order =
|
||||
edid_info->vsdb._2d_vic[i]._2d_vic_order;
|
||||
_3d_struct =
|
||||
edid_info->vsdb._2d_vic[i]._3d_struct;
|
||||
hdmi_vic =
|
||||
edid_info->video_db.hdmi_vic[_2d_vic_order];
|
||||
rx_edid_print_vic_fmt(_2d_vic_order, hdmi_vic);
|
||||
rx_pr("\t\t3d format: %s\n",
|
||||
_3d_structure[_3d_struct]);
|
||||
if ((_3d_struct >= 0x8) &&
|
||||
(_3d_struct <= 0xF)) {
|
||||
_3d_detail =
|
||||
edid_info->vsdb._2d_vic[i]._3d_detail;
|
||||
rx_pr("\t\t3d_detail: %s\n",
|
||||
_3d_detail_x[_3d_detail]);
|
||||
}
|
||||
}
|
||||
|
||||
if (edid_info->contain_hf_vsdb) {
|
||||
rx_pr("----HF-VSDB----\n");
|
||||
rx_pr("****HF-VSDB****\n");
|
||||
rx_pr("IEEE OUI: %06X\n",
|
||||
edid_info->hf_vsdb.ieee_oui);
|
||||
rx_pr("hf-vsdb version: %d\n",
|
||||
@@ -1951,18 +2175,74 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
}
|
||||
|
||||
if (edid_info->contain_vcdb) {
|
||||
rx_pr("----Video Cap Data Block----\n");
|
||||
rx_pr("quant_range selectable ycc:%d, rgb:%d\n",
|
||||
edid_info->vcdb.quanti_range_ycc,
|
||||
edid_info->vcdb.quanti_range_rgb);
|
||||
rx_pr("scan mode for PT:%d, IT:%d, CE:%d\n",
|
||||
edid_info->vcdb.s_PT,
|
||||
edid_info->vcdb.s_IT,
|
||||
edid_info->vcdb.s_CE);
|
||||
rx_pr("****Video Cap Data Block****\n");
|
||||
rx_pr("YCC Quant Range:\n");
|
||||
if (edid_info->vcdb.quanti_range_ycc)
|
||||
rx_pr("\tSelectable(via AVI YQ)\n");
|
||||
else
|
||||
rx_pr("\tNo Data\n");
|
||||
|
||||
rx_pr("RGB Quant Range:\n");
|
||||
if (edid_info->vcdb.quanti_range_rgb)
|
||||
rx_pr("\tSelectable(via AVI Q)\n");
|
||||
else
|
||||
rx_pr("\tNo Data\n");
|
||||
|
||||
rx_pr("PT Scan behavior:\n");
|
||||
switch (edid_info->vcdb.s_PT) {
|
||||
case 0:
|
||||
rx_pr("\trefer to CE/IT fields\n");
|
||||
break;
|
||||
case 1:
|
||||
rx_pr("\tAlways Overscanned\n");
|
||||
break;
|
||||
case 2:
|
||||
rx_pr("\tAlways Underscanned\n");
|
||||
break;
|
||||
case 3:
|
||||
rx_pr("\tSupport both over and underscan\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rx_pr("IT Scan behavior:\n");
|
||||
switch (edid_info->vcdb.s_IT) {
|
||||
case 0:
|
||||
rx_pr("\tIT video format not support\n");
|
||||
break;
|
||||
case 1:
|
||||
rx_pr("\tAlways Overscanned\n");
|
||||
break;
|
||||
case 2:
|
||||
rx_pr("\tAlways Underscanned\n");
|
||||
break;
|
||||
case 3:
|
||||
rx_pr("\tSupport both over and underscan\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rx_pr("CE Scan behavior:\n");
|
||||
switch (edid_info->vcdb.s_CE) {
|
||||
case 0:
|
||||
rx_pr("\tCE video format not support\n");
|
||||
break;
|
||||
case 1:
|
||||
rx_pr("\tAlways Overscanned\n");
|
||||
break;
|
||||
case 2:
|
||||
rx_pr("\tAlways Underscanned\n");
|
||||
break;
|
||||
case 3:
|
||||
rx_pr("\tSupport both over and underscan\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (edid_info->contain_vsvdb) {
|
||||
rx_pr("----VSVDB(dolby vision)----\n");
|
||||
rx_pr("****VSVDB(dolby vision)****\n");
|
||||
rx_pr("IEEE_OUI: %06X\n",
|
||||
edid_info->dv_vsvdb.ieee_oui);
|
||||
rx_pr("vsvdb version: %d\n",
|
||||
@@ -2001,38 +2281,38 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
}
|
||||
|
||||
if (edid_info->contain_cdb) {
|
||||
rx_pr("----Colorimetry Data Block----\n");
|
||||
rx_pr("****Colorimetry Data Block****\n");
|
||||
rx_pr("supported colorimetry:\n");
|
||||
if (edid_info->color_db.BT2020_RGB)
|
||||
rx_pr("BT2020_RGB\n");
|
||||
rx_pr("\tBT2020_RGB\n");
|
||||
if (edid_info->color_db.BT2020_YCC)
|
||||
rx_pr("BT2020_YCC\n");
|
||||
rx_pr("\tBT2020_YCC\n");
|
||||
if (edid_info->color_db.BT2020_cYCC)
|
||||
rx_pr("BT2020_cYCC\n");
|
||||
rx_pr("\tBT2020_cYCC\n");
|
||||
if (edid_info->color_db.Adobe_RGB)
|
||||
rx_pr("Adobe_RGB\n");
|
||||
rx_pr("\tAdobe_RGB\n");
|
||||
if (edid_info->color_db.Adobe_YCC601)
|
||||
rx_pr("Adobe_YCC601\n");
|
||||
rx_pr("\tAdobe_YCC601\n");
|
||||
if (edid_info->color_db.sYCC601)
|
||||
rx_pr("sYCC601\n");
|
||||
rx_pr("\tsYCC601\n");
|
||||
if (edid_info->color_db.xvYCC709)
|
||||
rx_pr("xvYCC709\n");
|
||||
rx_pr("\txvYCC709\n");
|
||||
if (edid_info->color_db.xvYCC601)
|
||||
rx_pr("xvYCC601\n");
|
||||
rx_pr("\txvYCC601\n");
|
||||
|
||||
rx_pr("supported colorimetry metadata:\n");
|
||||
if (edid_info->color_db.MD3)
|
||||
rx_pr("MD3\n");
|
||||
rx_pr("\tMD3\n");
|
||||
if (edid_info->color_db.MD2)
|
||||
rx_pr("MD2\n");
|
||||
rx_pr("\tMD2\n");
|
||||
if (edid_info->color_db.MD1)
|
||||
rx_pr("MD1\n");
|
||||
rx_pr("\tMD1\n");
|
||||
if (edid_info->color_db.MD0)
|
||||
rx_pr("MD0\n");
|
||||
rx_pr("\tMD0\n");
|
||||
}
|
||||
|
||||
if (edid_info->contain_hdr_db) {
|
||||
rx_pr("----HDR Static Metadata Data Block----\n");
|
||||
rx_pr("****HDR Static Metadata Data Block****\n");
|
||||
rx_pr("eotf_hlg: %d\n",
|
||||
edid_info->hdr_db.eotf_hlg);
|
||||
rx_pr("eotf_smpte_st_2084: %d\n",
|
||||
@@ -2046,22 +2326,21 @@ void rx_edid_parse_print(struct edid_info_s *edid_info)
|
||||
}
|
||||
|
||||
if (edid_info->contain_y420_vdb) {
|
||||
rx_pr("----Y420 Video Data Block----\n");
|
||||
rx_pr("****Y420 Video Data Block****\n");
|
||||
for (i = 0; i < edid_info->y420_vic_len; i++)
|
||||
rx_pr("y420 vic: %3d\n",
|
||||
edid_info->y420_vdb_vic[i]);
|
||||
rx_edid_print_vic_fmt(i,
|
||||
edid_info->y420_vdb_vic[i]);
|
||||
}
|
||||
|
||||
if (edid_info->contain_y420_cmdb) {
|
||||
rx_pr("----Yc420 capability map----\n");
|
||||
rx_pr("****Yc420 capability map****\n");
|
||||
if (edid_info->y420_all_vic)
|
||||
rx_pr("all vic support y420\n");
|
||||
else {
|
||||
for (i = 0; i < 31; i++) {
|
||||
hdmi_vic = edid_info->y420_cmdb_vic[i];
|
||||
if (hdmi_vic) {
|
||||
rx_pr("y420cmdb vic:%3d, format: %s\n",
|
||||
hdmi_vic, hdmi_fmt[hdmi_vic]);
|
||||
rx_edid_print_vic_fmt(i, hdmi_vic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +167,13 @@ struct speaker_alloc_db_s {
|
||||
unsigned char resvd2;
|
||||
};
|
||||
|
||||
struct specific_vic_3d {
|
||||
unsigned char _2d_vic_order:4;
|
||||
unsigned char _3d_struct:4;
|
||||
unsigned char _3d_detail:4;
|
||||
unsigned char resvrd:4;
|
||||
};
|
||||
|
||||
struct vsdb_s {
|
||||
unsigned int ieee_oui;
|
||||
/* phy addr 2 bytes */
|
||||
@@ -226,6 +233,10 @@ struct vsdb_s {
|
||||
unsigned char hdmi_smpte_sup;
|
||||
|
||||
/*3D*/
|
||||
uint16_t _3d_struct_all;
|
||||
uint16_t _3d_mask_15_0;
|
||||
struct specific_vic_3d _2d_vic[16];
|
||||
unsigned char _2d_vic_num;
|
||||
};
|
||||
|
||||
struct hf_vsdb_s {
|
||||
|
||||
@@ -111,7 +111,7 @@ int log_level = LOG_EN;/*| HDCP_LOG;*/
|
||||
static bool auto_switch_off; /* only for hardware test */
|
||||
|
||||
int clk_unstable_cnt;
|
||||
static int clk_unstable_max = 100;
|
||||
static int clk_unstable_max = 200;
|
||||
|
||||
int clk_stable_cnt;
|
||||
static int clk_stable_max = 3;
|
||||
|
||||
Reference in New Issue
Block a user