hdmitx: edid: add suitable case for DolbyVision [1/1]

PD#SWPL-7888

Problem:
DV tests add more EDID cases
v2_yuv444_2_yuv422_0_int_3_12Byte.xml
v2_yuv444_0_yuv422_0_int_2_13Byte.xml
v2_yuv444_0_yuv422_0_int_2_16Byte.xml

Solution:
add suitable case for DolbyVision

Verify:
G12/U212

Change-Id: I323d49ad34b12b6a12ba93f0349f0398f2516bcb
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>
This commit is contained in:
Zongdong Jiao
2019-05-30 20:08:41 +08:00
committed by Luan Yuan
parent f69c173336
commit 2ea291ce2e
2 changed files with 18 additions and 12 deletions

View File

@@ -893,7 +893,8 @@ static void Edid_ParsingVendSpec(struct rx_cap *pRXCap,
dv->block_flag = ERROR_LENGTH;
}
if (dv->ver == 2) {
if (dv->length == 0x0B) {
if ((dv->length == 0xB) || (dv->length == 0xC)
|| (dv->length == 0xF)) {
dv->sup_2160p60hz = 0x1;/*default*/
dv->dm_version = (dat[pos] >> 2) & 0x7;
dv->sup_yuv422_12bit = dat[pos] & 0x1;
@@ -922,7 +923,7 @@ static void Edid_ParsingVendSpec(struct rx_cap *pRXCap,
dv->block_flag = ERROR_LENGTH;
}
if (pos > dv->length)
if (pos > (dv->length + 1))
pr_info("hdmitx: edid: maybe invalid dv%d data\n", dv->ver);
}
@@ -2347,6 +2348,7 @@ bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
{
bool valid = 0;
struct rx_cap *pRXCap = NULL;
const struct dv_info *dv = &(hdev->RXCap.dv_info);
unsigned int rx_max_tmds_clk = 0;
unsigned int calc_tmds_clk = 0;
int i = 0;
@@ -2441,9 +2443,11 @@ bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
/* Rx may not support Y444 */
if (!(pRXCap->native_Mode & (1 << 5)))
return 0;
if (pRXCap->dc_y444 && pRXCap->dc_30bit)
if ((pRXCap->dc_y444 && pRXCap->dc_30bit)
|| (dv->sup_10b_12b_444 == 0x1))
rx_y444_max_dc = COLORDEPTH_30B;
if (pRXCap->dc_y444 && pRXCap->dc_36bit)
if ((pRXCap->dc_y444 && pRXCap->dc_36bit)
|| (dv->sup_10b_12b_444 == 0x2))
rx_y444_max_dc = COLORDEPTH_36B;
if (para->cd <= rx_y444_max_dc)
valid = 1;
@@ -2457,7 +2461,8 @@ bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
return 0;
if (pRXCap->dc_y444 && pRXCap->dc_30bit)
rx_y422_max_dc = COLORDEPTH_30B;
if (pRXCap->dc_y444 && pRXCap->dc_36bit)
if ((pRXCap->dc_y444 && pRXCap->dc_36bit)
|| (dv->sup_yuv422_12bit))
rx_y422_max_dc = COLORDEPTH_36B;
if (para->cd <= rx_y422_max_dc)
valid = 1;
@@ -2467,9 +2472,9 @@ bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
}
if (para->cs == COLORSPACE_RGB444) {
/* Always assume RX supports RGB444 */
if (pRXCap->dc_30bit)
if ((pRXCap->dc_30bit) || (dv->sup_10b_12b_444 == 0x1))
rx_rgb_max_dc = COLORDEPTH_30B;
if (pRXCap->dc_36bit)
if ((pRXCap->dc_36bit) || (dv->sup_10b_12b_444 == 0x2))
rx_rgb_max_dc = COLORDEPTH_36B;
if (para->cd <= rx_rgb_max_dc)
valid = 1;

View File

@@ -2409,6 +2409,7 @@ static ssize_t show_dc_cap(struct device *dev,
enum hdmi_vic vic = HDMI_Unknown;
int pos = 0;
struct rx_cap *pRXCap = &(hdmitx_device.RXCap);
const struct dv_info *dv = &(hdmitx_device.RXCap.dv_info);
#if 0
if (pRXCap->dc_48bit_420)
@@ -2443,9 +2444,9 @@ static ssize_t show_dc_cap(struct device *dev,
}
next444:
if (pRXCap->dc_y444) {
if (pRXCap->dc_36bit)
if ((pRXCap->dc_36bit) || (dv->sup_10b_12b_444 == 0x2))
pos += snprintf(buf + pos, PAGE_SIZE, "444,12bit\n");
if (pRXCap->dc_30bit) {
if ((pRXCap->dc_30bit) || (dv->sup_10b_12b_444 == 0x1)) {
pos += snprintf(buf + pos, PAGE_SIZE, "444,10bit\n");
pos += snprintf(buf + pos, PAGE_SIZE, "444,8bit\n");
}
@@ -2453,7 +2454,7 @@ next444:
if (pRXCap->dc_48bit)
pos += snprintf(buf + pos, PAGE_SIZE, "444,16bit\n");
#endif
if (pRXCap->dc_36bit)
if ((pRXCap->dc_36bit) || (dv->sup_yuv422_12bit))
pos += snprintf(buf + pos, PAGE_SIZE, "422,12bit\n");
if (pRXCap->dc_30bit) {
pos += snprintf(buf + pos, PAGE_SIZE, "422,10bit\n");
@@ -2471,9 +2472,9 @@ nextrgb:
if (pRXCap->dc_48bit)
pos += snprintf(buf + pos, PAGE_SIZE, "rgb,16bit\n");
#endif
if (pRXCap->dc_36bit)
if ((pRXCap->dc_36bit) || (dv->sup_10b_12b_444 == 0x2))
pos += snprintf(buf + pos, PAGE_SIZE, "rgb,12bit\n");
if (pRXCap->dc_30bit)
if ((pRXCap->dc_30bit) || (dv->sup_10b_12b_444 == 0x1))
pos += snprintf(buf + pos, PAGE_SIZE, "rgb,10bit\n");
pos += snprintf(buf + pos, PAGE_SIZE, "rgb,8bit\n");
return pos;