diff options
author | Rob Clark <rob@ti.com> | 2012-07-31 17:51:13 -0500 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2012-11-27 11:43:04 +0800 |
commit | 93f59150d1288f3713c0a0d692324fe52572c80e (patch) | |
tree | 50ce718e234486499ed99a9a63d51e3b6b103ca9 | |
parent | 5bfac208ba4adfb97ffdd9b479d0b812d1d6d8a1 (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.c | 8 |
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; |