summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <rob@ti.com>2012-07-31 17:51:13 -0500
committerAndy Green <andy.green@linaro.org>2012-11-27 11:43:04 +0800
commit93f59150d1288f3713c0a0d692324fe52572c80e (patch)
tree50ce718e234486499ed99a9a63d51e3b6b103ca9
parent5bfac208ba4adfb97ffdd9b479d0b812d1d6d8a1 (diff)
OMAPDSS: workaround 'operation stopped while reading edid' errortracking-topic-dss
Signed-off-by: Rob Clark <rob@ti.com>
-rw-r--r--drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index 3050439a887..f152394179a 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -466,7 +466,7 @@ static int hdmi_core_ddc_edid(struct hdmi_ip_data *ip_data,
/* IN_PROG */
if (REG_GET(base, HDMI_CORE_DDC_STATUS, 4, 4) == 0) {
DSSERR("operation stopped when reading edid\n");
- return -EIO;
+ return -EPIPE;
}
t = 0;
@@ -498,7 +498,9 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
u8 *edid, int len)
{
int r, l;
+ int retry = 10;
+again:
if (len < 128)
return -EINVAL;
@@ -507,6 +509,8 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
return r;
r = hdmi_core_ddc_edid(ip_data, edid, 0);
+ if ((r == -EPIPE) && (--retry > 0))
+ goto again;
if (r)
return r;
@@ -514,6 +518,8 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
if (len >= 128 * 2 && edid[0x7e] > 0) {
r = hdmi_core_ddc_edid(ip_data, edid + 0x80, 1);
+ if ((r == -EPIPE) && (--retry > 0))
+ goto again;
if (r)
return r;
l += 128;