summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233')
-rw-r--r--firmware/target/arm/imx233/lcdif-imx233.c21
-rw-r--r--firmware/target/arm/imx233/lcdif-imx233.h2
2 files changed, 23 insertions, 0 deletions
diff --git a/firmware/target/arm/imx233/lcdif-imx233.c b/firmware/target/arm/imx233/lcdif-imx233.c
index ea4fcf8a63..01c7ec71e4 100644
--- a/firmware/target/arm/imx233/lcdif-imx233.c
+++ b/firmware/target/arm/imx233/lcdif-imx233.c
@@ -25,6 +25,7 @@
25#if IMX233_SUBTARGET >= 3700 25#if IMX233_SUBTARGET >= 3700
26static lcdif_irq_cb_t g_cur_frame_cb = NULL; 26static lcdif_irq_cb_t g_cur_frame_cb = NULL;
27static lcdif_irq_cb_t g_vsync_edge_cb = NULL; 27static lcdif_irq_cb_t g_vsync_edge_cb = NULL;
28static lcdif_irq_cb_t g_underflow_cb = NULL;
28#endif 29#endif
29 30
30/* for some crazy reason, all "non-dma" interrupts are routed to the ERROR irq */ 31/* for some crazy reason, all "non-dma" interrupts are routed to the ERROR irq */
@@ -43,6 +44,12 @@ void INT_LCDIF_ERROR(void)
43 g_vsync_edge_cb(); 44 g_vsync_edge_cb();
44 BF_CLR(LCDIF_CTRL1, VSYNC_EDGE_IRQ); 45 BF_CLR(LCDIF_CTRL1, VSYNC_EDGE_IRQ);
45 } 46 }
47 if(BF_RD(LCDIF_CTRL1, UNDERFLOW_IRQ))
48 {
49 if(g_underflow_cb)
50 g_underflow_cb();
51 BF_CLR(LCDIF_CTRL1, UNDERFLOW_IRQ);
52 }
46} 53}
47#endif 54#endif
48 55
@@ -341,6 +348,20 @@ void imx233_lcdif_set_vsync_edge_cb(lcdif_irq_cb_t cb)
341{ 348{
342 g_vsync_edge_cb = cb; 349 g_vsync_edge_cb = cb;
343} 350}
351
352void imx233_lcdif_enable_underflow_irq(bool en)
353{
354 if(en)
355 BF_SET(LCDIF_CTRL1, UNDERFLOW_IRQ_EN);
356 else
357 BF_CLR(LCDIF_CTRL1, UNDERFLOW_IRQ_EN);
358 BF_CLR(LCDIF_CTRL1, UNDERFLOW_IRQ);
359}
360
361void imx233_lcdif_set_underflow_cb(lcdif_irq_cb_t cb)
362{
363 g_underflow_cb = cb;
364}
344#endif 365#endif
345 366
346#if IMX233_SUBTARGET >= 3780 367#if IMX233_SUBTARGET >= 3780
diff --git a/firmware/target/arm/imx233/lcdif-imx233.h b/firmware/target/arm/imx233/lcdif-imx233.h
index 3554c86e06..b45830f3d3 100644
--- a/firmware/target/arm/imx233/lcdif-imx233.h
+++ b/firmware/target/arm/imx233/lcdif-imx233.h
@@ -65,6 +65,8 @@ void imx233_lcdif_enable_frame_done_irq(bool en);
65void imx233_lcdif_set_frame_done_cb(lcdif_irq_cb_t cb); 65void imx233_lcdif_set_frame_done_cb(lcdif_irq_cb_t cb);
66void imx233_lcdif_enable_vsync_edge_irq(bool en); 66void imx233_lcdif_enable_vsync_edge_irq(bool en);
67void imx233_lcdif_set_vsync_edge_cb(lcdif_irq_cb_t cb); 67void imx233_lcdif_set_vsync_edge_cb(lcdif_irq_cb_t cb);
68void imx233_lcdif_enable_underflow_irq(bool en);
69void imx233_lcdif_set_underflow_cb(lcdif_irq_cb_t cb);
68void imx233_lcdif_enable_sync_signals(bool en); 70void imx233_lcdif_enable_sync_signals(bool en);
69#endif 71#endif
70 72