summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
index 0b105b35a4..72c0268af0 100644
--- a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
@@ -28,12 +28,14 @@
28 28
29static volatile bool _lcd_on = false; 29static volatile bool _lcd_on = false;
30static volatile bool lcd_poweroff = false; 30static volatile bool lcd_poweroff = false;
31static struct mutex lcd_mtx;
31 32
32/* LCD init */ 33/* LCD init */
33void lcd_init_device(void) 34void lcd_init_device(void)
34{ 35{
35 lcd_init_controller(); 36 lcd_init_controller();
36 _lcd_on = true; 37 _lcd_on = true;
38 mutex_init(&lcd_mtx);
37} 39}
38 40
39void lcd_enable(bool state) 41void lcd_enable(bool state)
@@ -57,6 +59,8 @@ bool lcd_enabled(void)
57/* Update a fraction of the display. */ 59/* Update a fraction of the display. */
58void lcd_update_rect(int x, int y, int width, int height) 60void lcd_update_rect(int x, int y, int width, int height)
59{ 61{
62 mutex_lock(&lcd_mtx);
63
60 lcd_set_target(x, y, width, height); 64 lcd_set_target(x, y, width, height);
61 65
62 REG_DMAC_DCCSR(DMA_LCD_CHANNEL) = 0; 66 REG_DMAC_DCCSR(DMA_LCD_CHANNEL) = 0;
@@ -83,6 +87,8 @@ void lcd_update_rect(int x, int y, int width, int height)
83 87
84 while(REG_SLCD_STATE & SLCD_STATE_BUSY); 88 while(REG_SLCD_STATE & SLCD_STATE_BUSY);
85 REG_SLCD_CTRL = 0; 89 REG_SLCD_CTRL = 0;
90
91 mutex_unlock(&lcd_mtx);
86} 92}
87 93
88/* Update the display. 94/* Update the display.