OMAP: DSS2: DSI: Add error IRQ mask for DSI complexIO
authorTomi Valkeinen <tomi.valkeinen@nokia.com>
Mon, 10 May 2010 11:35:33 +0000 (14:35 +0300)
committerTomi Valkeinen <tomi.valkeinen@nokia.com>
Thu, 5 Aug 2010 13:52:05 +0000 (16:52 +0300)
The code presumed that all ComplexIO interrupts are errors. This is not
the case. This patch adds proper error mask for CIO interrupt handling.

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

index 18fe332..1358d30 100644 (file)
@@ -165,6 +165,14 @@ struct dsi_reg { u16 idx; };
 #define DSI_CIO_IRQ_ERRCONTENTIONLP1_3 (1 << 25)
 #define DSI_CIO_IRQ_ULPSACTIVENOT_ALL0 (1 << 30)
 #define DSI_CIO_IRQ_ULPSACTIVENOT_ALL1 (1 << 31)
+#define DSI_CIO_IRQ_ERROR_MASK \
+       (DSI_CIO_IRQ_ERRSYNCESC1 | DSI_CIO_IRQ_ERRSYNCESC2 | \
+        DSI_CIO_IRQ_ERRSYNCESC3 | DSI_CIO_IRQ_ERRESC1 | DSI_CIO_IRQ_ERRESC2 | \
+        DSI_CIO_IRQ_ERRESC3 | DSI_CIO_IRQ_ERRCONTROL1 | \
+        DSI_CIO_IRQ_ERRCONTROL2 | DSI_CIO_IRQ_ERRCONTROL3 | \
+        DSI_CIO_IRQ_ERRCONTENTIONLP0_1 | DSI_CIO_IRQ_ERRCONTENTIONLP1_1 | \
+        DSI_CIO_IRQ_ERRCONTENTIONLP0_2 | DSI_CIO_IRQ_ERRCONTENTIONLP1_2 | \
+        DSI_CIO_IRQ_ERRCONTENTIONLP0_3 | DSI_CIO_IRQ_ERRCONTENTIONLP1_3)
 
 #define DSI_DT_DCS_SHORT_WRITE_0       0x05
 #define DSI_DT_DCS_SHORT_WRITE_1       0x15
@@ -542,8 +550,12 @@ void dsi_irq_handler(void)
                /* flush posted write */
                dsi_read_reg(DSI_COMPLEXIO_IRQ_STATUS);
 
-               DSSERR("DSI CIO error, cio irqstatus %x\n", ciostatus);
-               print_irq_status_cio(ciostatus);
+               if (ciostatus & DSI_CIO_IRQ_ERROR_MASK) {
+                       DSSERR("DSI CIO error, cio irqstatus %x\n", ciostatus);
+                       print_irq_status_cio(ciostatus);
+               } else if (debug_irq) {
+                       print_irq_status_cio(ciostatus);
+               }
        }
 
        dsi_write_reg(DSI_IRQSTATUS, irqstatus & ~DSI_IRQ_CHANNEL_MASK);
@@ -590,11 +602,8 @@ static void _dsi_initialize_irq(void)
        for (i = 0; i < 4; ++i)
                dsi_write_reg(DSI_VC_IRQENABLE(i), l);
 
-       /* XXX zonda responds incorrectly, causing control error:
-          Exit from LP-ESC mode to LP11 uses wrong transition states on the
-          data lines LP0 and LN0. */
-       dsi_write_reg(DSI_COMPLEXIO_IRQ_ENABLE,
-                       -1 & (~DSI_CIO_IRQ_ERRCONTROL2));
+       l = DSI_CIO_IRQ_ERROR_MASK;
+       dsi_write_reg(DSI_COMPLEXIO_IRQ_ENABLE, l);
 }
 
 static u32 dsi_get_errors(void)