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;
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);
}
{
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;
/* 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;
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;
}
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;
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)
}
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");
}
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");
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;