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.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
index 7561d593db..29f337b13b 100644
--- a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c
@@ -35,13 +35,24 @@
35static volatile bool lcd_is_on = false; 35static volatile bool lcd_is_on = false;
36static struct mutex lcd_mtx; 36static struct mutex lcd_mtx;
37static struct wakeup lcd_wkup; 37static struct wakeup lcd_wkup;
38static int lcd_count = 0;
39
40void lcd_clock_enable(void)
41{
42 if(++lcd_count == 1)
43 __cpm_start_lcd();
44}
45
46void lcd_clock_disable(void)
47{
48 if(--lcd_count == 0)
49 __cpm_stop_lcd();
50}
38 51
39/* LCD init */ 52/* LCD init */
40void lcd_init_device(void) 53void lcd_init_device(void)
41{ 54{
42 __cpm_start_lcd();
43 lcd_init_controller(); 55 lcd_init_controller();
44 __cpm_stop_lcd();
45 56
46 lcd_is_on = true; 57 lcd_is_on = true;
47 mutex_init(&lcd_mtx); 58 mutex_init(&lcd_mtx);
@@ -55,8 +66,6 @@ void lcd_enable(bool state)
55 if(lcd_is_on == state) 66 if(lcd_is_on == state)
56 return; 67 return;
57 68
58 __cpm_start_lcd();
59
60 if(state) 69 if(state)
61 { 70 {
62 lcd_on(); 71 lcd_on();
@@ -65,8 +74,6 @@ void lcd_enable(bool state)
65 else 74 else
66 lcd_off(); 75 lcd_off();
67 76
68 __cpm_stop_lcd();
69
70 lcd_is_on = state; 77 lcd_is_on = state;
71} 78}
72#endif 79#endif
@@ -87,7 +94,7 @@ void lcd_update_rect(int x, int y, int width, int height)
87 94
88 mutex_lock(&lcd_mtx); 95 mutex_lock(&lcd_mtx);
89 96
90 __cpm_start_lcd(); 97 lcd_clock_enable();
91 98
92 lcd_set_target(x, y, width, height); 99 lcd_set_target(x, y, width, height);
93 100
@@ -119,7 +126,7 @@ void lcd_update_rect(int x, int y, int width, int height)
119 while(REG_SLCD_STATE & SLCD_STATE_BUSY); 126 while(REG_SLCD_STATE & SLCD_STATE_BUSY);
120 REG_SLCD_CTRL &= ~SLCD_CTRL_DMA_EN; /* Disable SLCD DMA support */ 127 REG_SLCD_CTRL &= ~SLCD_CTRL_DMA_EN; /* Disable SLCD DMA support */
121 128
122 __cpm_stop_lcd(); 129 lcd_clock_disable();
123 130
124 mutex_unlock(&lcd_mtx); 131 mutex_unlock(&lcd_mtx);
125} 132}