diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/imx233/lcdif-imx233.c | 21 | ||||
-rw-r--r-- | firmware/target/arm/imx233/lcdif-imx233.h | 2 |
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 |
26 | static lcdif_irq_cb_t g_cur_frame_cb = NULL; | 26 | static lcdif_irq_cb_t g_cur_frame_cb = NULL; |
27 | static lcdif_irq_cb_t g_vsync_edge_cb = NULL; | 27 | static lcdif_irq_cb_t g_vsync_edge_cb = NULL; |
28 | static 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 | |||
352 | void 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 | |||
361 | void 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); | |||
65 | void imx233_lcdif_set_frame_done_cb(lcdif_irq_cb_t cb); | 65 | void imx233_lcdif_set_frame_done_cb(lcdif_irq_cb_t cb); |
66 | void imx233_lcdif_enable_vsync_edge_irq(bool en); | 66 | void imx233_lcdif_enable_vsync_edge_irq(bool en); |
67 | void imx233_lcdif_set_vsync_edge_cb(lcdif_irq_cb_t cb); | 67 | void imx233_lcdif_set_vsync_edge_cb(lcdif_irq_cb_t cb); |
68 | void imx233_lcdif_enable_underflow_irq(bool en); | ||
69 | void imx233_lcdif_set_underflow_cb(lcdif_irq_cb_t cb); | ||
68 | void imx233_lcdif_enable_sync_signals(bool en); | 70 | void imx233_lcdif_enable_sync_signals(bool en); |
69 | #endif | 71 | #endif |
70 | 72 | ||