OMAP: DSS2: DSI: catch DSI errors in send_bta_sync
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 8 Oct 2010 13:15:25 +0000 (16:15 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 15 Mar 2011 08:54:19 +0000 (14:24 +0530)
dsi_vc_send_bta_sync() waits for BTA interrupt with a 500ms timeout. If
a DSI error happens, no BTA is received and the timeout triggers. This
could be handled much faster by listening to DSI errors also.

This patch uses the ISR support to notice DSI errors while waiting for
the BTA, thus speeding up the fail-path considerably.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/dsi.c

index cd872e9d798981e5e6e2032194a978a990f84e0c..37226628bc0fe6cbf0db760097b857261d5034c5 100644 (file)
@@ -2242,24 +2242,31 @@ int dsi_vc_send_bta_sync(int channel)
        if (r)
                goto err0;
 
-       r = dsi_vc_send_bta(channel);
+       r = dsi_register_isr(dsi_completion_handler, &completion,
+                       DSI_IRQ_ERROR_MASK);
        if (r)
                goto err1;
 
+       r = dsi_vc_send_bta(channel);
+       if (r)
+               goto err2;
+
        if (wait_for_completion_timeout(&completion,
                                msecs_to_jiffies(500)) == 0) {
                DSSERR("Failed to receive BTA\n");
                r = -EIO;
-               goto err1;
+               goto err2;
        }
 
        err = dsi_get_errors();
        if (err) {
                DSSERR("Error while sending BTA: %x\n", err);
                r = -EIO;
-               goto err1;
+               goto err2;
        }
-
+err2:
+       dsi_unregister_isr(dsi_completion_handler, &completion,
+                       DSI_IRQ_ERROR_MASK);
 err1:
        dsi_unregister_isr_vc(channel, dsi_completion_handler,
                        &completion, DSI_VC_IRQ_BTA);