}
}
+static void get_latency(struct rx_cap *pRXCap, unsigned char *val)
+{
+ if (val[0] == 0)
+ pRXCap->vLatency = LATENCY_INVALID_UNKNOWN;
+ else if (val[0] == 0xFF)
+ pRXCap->vLatency = LATENCY_NOT_SUPPORT;
+ else
+ pRXCap->vLatency = (val[0] - 1) * 2;
+
+ if (val[1] == 0)
+ pRXCap->aLatency = LATENCY_INVALID_UNKNOWN;
+ else if (val[1] == 0xFF)
+ pRXCap->aLatency = LATENCY_NOT_SUPPORT;
+ else
+ pRXCap->aLatency = (val[1] - 1) * 2;
+}
+
+static void get_ilatency(struct rx_cap *pRXCap, unsigned char *val)
+{
+ if (val[0] == 0)
+ pRXCap->i_vLatency = LATENCY_INVALID_UNKNOWN;
+ else if (val[0] == 0xFF)
+ pRXCap->i_vLatency = LATENCY_NOT_SUPPORT;
+ else
+ pRXCap->i_vLatency = val[0] * 2 - 1;
+
+ if (val[1] == 0)
+ pRXCap->i_aLatency = LATENCY_INVALID_UNKNOWN;
+ else if (val[1] == 0xFF)
+ pRXCap->i_aLatency = LATENCY_NOT_SUPPORT;
+ else
+ pRXCap->i_aLatency = val[1] * 2 - 1;
+}
+
static int hdmitx_edid_block_parse(struct hdmitx_dev *hdmitx_device,
unsigned char *BlockBuf)
{
if (count > 7) {
tmp = BlockBuf[offset+7];
idx = offset + 8;
- if (tmp & (1<<6))
+ if (tmp & (1<<6)) {
+ unsigned char val[2];
+
+ val[0] = BlockBuf[idx];
+ val[1] = BlockBuf[idx + 1];
+ get_latency(pRXCap, val);
idx += 2;
- if (tmp & (1<<7))
+ }
+ if (tmp & (1<<7)) {
+ unsigned char val[2];
+
+ val[0] = BlockBuf[idx];
+ val[1] = BlockBuf[idx + 1];
+ get_ilatency(pRXCap, val);
idx += 2;
+ }
if (tmp & (1<<5)) {
idx += 1;
/* valid 4k */
} else
dump_dtd_info(t);
}
+
static void hdrinfo_to_vinfo(struct vinfo_s *info, struct rx_cap *pRXCap)
{
unsigned int k, l;
info->hdr_info.hdr_support);
}
+static void rxlatency_to_vinfo(struct vinfo_s *info, struct rx_cap *rx)
+{
+ if (!info || !rx)
+ return;
+ info->rx_latency.vLatency = rx->vLatency;
+ info->rx_latency.aLatency = rx->aLatency;
+ info->rx_latency.i_vLatency = rx->i_vLatency;
+ info->rx_latency.i_aLatency = rx->i_aLatency;
+}
int hdmitx_edid_parse(struct hdmitx_dev *hdmitx_device)
{
if (info) {
if (!((strncmp(info->name, "480cvbs", 7) == 0) ||
(strncmp(info->name, "576cvbs", 7) == 0) ||
- (strncmp(info->name, "null", 4) == 0)))
+ (strncmp(info->name, "null", 4) == 0))) {
hdrinfo_to_vinfo(info, pRXCap);
+ rxlatency_to_vinfo(info, pRXCap);
+ }
}
return 0;
pos += snprintf(buffer+pos, buffer_len-pos,
"MaxTMDSClock2 %d MHz\n", pRXCap->Max_TMDS_Clock2 * 5);
}
+
+ pos += snprintf(buffer+pos, buffer_len-pos, "vLatency: ");
+ if (pRXCap->vLatency == LATENCY_INVALID_UNKNOWN)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " Invalid/Unknown\n");
+ else if (pRXCap->vLatency == LATENCY_NOT_SUPPORT)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " UnSupported\n");
+ else
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " %d\n", pRXCap->vLatency);
+
+ pos += snprintf(buffer+pos, buffer_len-pos, "aLatency: ");
+ if (pRXCap->aLatency == LATENCY_INVALID_UNKNOWN)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " Invalid/Unknown\n");
+ else if (pRXCap->aLatency == LATENCY_NOT_SUPPORT)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " UnSupported\n");
+ else
+ pos += snprintf(buffer+pos, buffer_len-pos, " %d\n",
+ pRXCap->aLatency);
+
+ pos += snprintf(buffer+pos, buffer_len-pos, "i_vLatency: ");
+ if (pRXCap->i_vLatency == LATENCY_INVALID_UNKNOWN)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " Invalid/Unknown\n");
+ else if (pRXCap->i_vLatency == LATENCY_NOT_SUPPORT)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " UnSupported\n");
+ else
+ pos += snprintf(buffer+pos, buffer_len-pos, " %d\n",
+ pRXCap->i_vLatency);
+
+ pos += snprintf(buffer+pos, buffer_len-pos, "i_aLatency: ");
+ if (pRXCap->i_aLatency == LATENCY_INVALID_UNKNOWN)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " Invalid/Unknown\n");
+ else if (pRXCap->i_aLatency == LATENCY_NOT_SUPPORT)
+ pos += snprintf(buffer+pos, buffer_len-pos,
+ " UnSupported\n");
+ else
+ pos += snprintf(buffer+pos, buffer_len-pos, " %d\n",
+ pRXCap->i_aLatency);
+
if (pRXCap->colorimetry_data)
pos += snprintf(buffer+pos, buffer_len-pos,
"ColorMetry: 0x%x\n", pRXCap->colorimetry_data);
info->hdr_info.hdr_support);
}
+static void rxlatency_to_vinfo(struct vinfo_s *info, struct rx_cap *rx)
+{
+ if (!info || !rx)
+ return;
+ info->rx_latency.vLatency = rx->vLatency;
+ info->rx_latency.aLatency = rx->aLatency;
+ info->rx_latency.i_vLatency = rx->i_vLatency;
+ info->rx_latency.i_aLatency = rx->i_aLatency;
+}
+
static int set_disp_mode_auto(void)
{
int ret = -1;
if (!((strncmp(info->name, "480cvbs", 7) == 0) ||
(strncmp(info->name, "576cvbs", 7) == 0) ||
- (strncmp(info->name, "null", 4) == 0)))
+ (strncmp(info->name, "null", 4) == 0))) {
hdrinfo_to_vinfo(info, hdev);
+ rxlatency_to_vinfo(info, &hdev->RXCap);
+ }
hdmi_physcial_size_update(hdev);
return -1;
}
strncpy(mode, info->name, sizeof(mode));
+ mode[31] = '\0';
if (strstr(mode, "fp")) {
int i = 0;
mutex_unlock(&setclk_mutex);
}
-static void clear_hdr_info(struct hdmitx_dev *hdev)
+static void clear_rx_vinfo(struct hdmitx_dev *hdev)
{
struct vinfo_s *info = hdmitx_get_current_vinfo();
- unsigned int i;
if (info) {
- info->hdr_info.hdr_support = 0;
- for (i = 0; i < 4; i++)
- memset(&(info->hdr_info.dynamic_info[i]),
- 0, sizeof(struct hdr_dynamic));
- info->hdr_info.colorimetry_support = 0;
- info->hdr_info.lumi_max = 0;
- info->hdr_info.lumi_avg = 0;
- info->hdr_info.lumi_min = 0;
- pr_info(SYS "clear RX hdr info\n");
+ memset(&info->hdr_info, 0, sizeof(info->hdr_info));
+ memset(&info->rx_latency, 0, sizeof(info->rx_latency));
}
}
hdev->HWOp.CntlMisc(hdev, MISC_TMDS_PHY_OP, TMDS_PHY_DISABLE);
hdev->hdmitx_event &= ~HDMI_TX_HPD_PLUGOUT;
hdev->HWOp.CntlMisc(hdev, MISC_ESM_RESET, 0);
- clear_hdr_info(hdev);
+ clear_rx_vinfo(hdev);
rx_edid_physical_addr(0, 0, 0, 0);
hdmitx_edid_clear(hdev);
hdmi_physcial_size_update(hdev);