diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c index 47efcb5ad0ab..35b60971999e 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c @@ -1386,24 +1386,23 @@ static int hdmitx_edid_block_parse(struct hdmitx_dev *hdmitx_device, offset++; if ((BlockBuf[offset] == 0x03) && (BlockBuf[offset+1] == 0x0c) && - (BlockBuf[offset+2] == 0x00)) + (BlockBuf[offset+2] == 0x00)) { pRXCap->IEEEOUI = 0x000c03; - else - goto case_hf; - pRXCap->ColorDeepSupport = - (unsigned long)BlockBuf[offset+5]; - pRXCap->Max_TMDS_Clock1 = - (unsigned long)BlockBuf[offset+6]; - if (count > 7) { - tmp = BlockBuf[offset+7]; - idx = offset + 8; - if (tmp & (1<<6)) - idx += 2; - if (tmp & (1<<7)) - idx += 2; - if (tmp & (1<<5)) { - idx += 1; - /* valid 4k */ + pRXCap->ColorDeepSupport = + (count > 5) ? BlockBuf[offset+5] : 0; + pRXCap->Max_TMDS_Clock1 = + (count > 6) ? BlockBuf[offset+6] : 0; + + if (count > 7) { + tmp = BlockBuf[offset+7]; + idx = offset + 8; + if (tmp & (1<<6)) + idx += 2; + if (tmp & (1<<7)) + idx += 2; + if (tmp & (1<<5)) { + idx += 1; + /* valid 4k */ if (BlockBuf[idx] & 0xe0) { hdmitx_edid_4k2k_parse( pRXCap, @@ -1417,24 +1416,23 @@ static int hdmitx_edid_block_parse(struct hdmitx_dev *hdmitx_device, &BlockBuf[offset+7], count - 7); } + } } - } - goto case_next; -case_hf: - if ((BlockBuf[offset] == 0xd8) && + } else if ((BlockBuf[offset] == 0xd8) && (BlockBuf[offset+1] == 0x5d) && - (BlockBuf[offset+2] == 0xc4)) + (BlockBuf[offset+2] == 0xc4)) { pRXCap->HF_IEEEOUI = 0xd85dc4; - pRXCap->Max_TMDS_Clock2 = BlockBuf[offset+4]; - pRXCap->scdc_present = - !!(BlockBuf[offset+5] & (1 << 7)); - pRXCap->scdc_rr_capable = - !!(BlockBuf[offset+5] & (1 << 6)); - pRXCap->lte_340mcsc_scramble = - !!(BlockBuf[offset+5] & (1 << 3)); - set_vsdb_dc_420_cap(&hdmitx_device->RXCap, - &BlockBuf[offset]); -case_next: + pRXCap->Max_TMDS_Clock2 = BlockBuf[offset+4]; + pRXCap->scdc_present = + !!(BlockBuf[offset+5] & (1 << 7)); + pRXCap->scdc_rr_capable = + !!(BlockBuf[offset+5] & (1 << 6)); + pRXCap->lte_340mcsc_scramble = + !!(BlockBuf[offset+5] & (1 << 3)); + set_vsdb_dc_420_cap(&hdmitx_device->RXCap, + &BlockBuf[offset]); + } + offset += count; /* ignore the remaind. */ break; diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h index 47df648fecbe..832c03218473 100644 --- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h +++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h @@ -79,7 +79,7 @@ struct rx_cap { unsigned char RxSpeakerAllocation; /*vendor*/ unsigned int IEEEOUI; - unsigned int Max_TMDS_Clock1; /* HDMI1.4b TMDS_CLK */ + unsigned char Max_TMDS_Clock1; /* HDMI1.4b TMDS_CLK */ unsigned int HF_IEEEOUI; /* For HDMI Forum */ unsigned int Max_TMDS_Clock2; /* HDMI2.0 TMDS_CLK */ /* CEA861-F, Table 56, Colorimetry Data Block */ @@ -112,7 +112,7 @@ struct rx_cap { unsigned char physcial_height; unsigned char edid_version; unsigned char edid_revision; - unsigned int ColorDeepSupport; + unsigned char ColorDeepSupport; unsigned int Video_Latency; unsigned int Audio_Latency; unsigned int Interlaced_Video_Latency;