diff options
author | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2010-01-03 16:28:15 +0000 |
---|---|---|
committer | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2010-01-03 16:28:15 +0000 |
commit | d3bbe51629212e770b30c701bef1b583b8deae88 (patch) | |
tree | 9d60cfcf0dd822882be024ceeec559b3c73bdf85 | |
parent | 4fdf4ad728ac93336c850c7da8966e8d00bddbf8 (diff) | |
download | rockbox-d3bbe51629212e770b30c701bef1b583b8deae88.tar.gz rockbox-d3bbe51629212e770b30c701bef1b583b8deae88.zip |
Onda VX747/VX777: centralise LCD clock en-/disabling.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24168 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | 23 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/lcd-target.h | 2 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c | 12 |
3 files changed, 29 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 @@ | |||
35 | static volatile bool lcd_is_on = false; | 35 | static volatile bool lcd_is_on = false; |
36 | static struct mutex lcd_mtx; | 36 | static struct mutex lcd_mtx; |
37 | static struct wakeup lcd_wkup; | 37 | static struct wakeup lcd_wkup; |
38 | static int lcd_count = 0; | ||
39 | |||
40 | void lcd_clock_enable(void) | ||
41 | { | ||
42 | if(++lcd_count == 1) | ||
43 | __cpm_start_lcd(); | ||
44 | } | ||
45 | |||
46 | void lcd_clock_disable(void) | ||
47 | { | ||
48 | if(--lcd_count == 0) | ||
49 | __cpm_stop_lcd(); | ||
50 | } | ||
38 | 51 | ||
39 | /* LCD init */ | 52 | /* LCD init */ |
40 | void lcd_init_device(void) | 53 | void 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 | } |
diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-target.h b/firmware/target/mips/ingenic_jz47xx/lcd-target.h index 95ce7acbb5..03f779b2a1 100644 --- a/firmware/target/mips/ingenic_jz47xx/lcd-target.h +++ b/firmware/target/mips/ingenic_jz47xx/lcd-target.h | |||
@@ -26,6 +26,8 @@ | |||
26 | void lcd_enable(bool state); | 26 | void lcd_enable(bool state); |
27 | bool lcd_active(void); | 27 | bool lcd_active(void); |
28 | void lcd_init_device(void); | 28 | void lcd_init_device(void); |
29 | void lcd_clock_enable(void); | ||
30 | void lcd_clock_disable(void); | ||
29 | 31 | ||
30 | 32 | ||
31 | void lcd_init_controller(void); | 33 | void lcd_init_controller(void); |
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c index b2ed9bc439..12c1f3eb09 100644 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c | |||
@@ -197,6 +197,8 @@ static void _set_lcd_clock(void) | |||
197 | 197 | ||
198 | void lcd_init_controller(void) | 198 | void lcd_init_controller(void) |
199 | { | 199 | { |
200 | lcd_clock_enable(); | ||
201 | |||
200 | #ifdef USB_BOOT | 202 | #ifdef USB_BOOT |
201 | _display_pin_init(); | 203 | _display_pin_init(); |
202 | #endif | 204 | #endif |
@@ -204,6 +206,8 @@ void lcd_init_controller(void) | |||
204 | _set_lcd_clock(); | 206 | _set_lcd_clock(); |
205 | SLEEP(1000); | 207 | SLEEP(1000); |
206 | _display_init(); | 208 | _display_init(); |
209 | |||
210 | lcd_clock_disable(); | ||
207 | } | 211 | } |
208 | 212 | ||
209 | void lcd_set_target(int x, int y, int width, int height) | 213 | void lcd_set_target(int x, int y, int width, int height) |
@@ -254,12 +258,20 @@ void lcd_set_flip(bool yesno) | |||
254 | 258 | ||
255 | void lcd_on(void) | 259 | void lcd_on(void) |
256 | { | 260 | { |
261 | lcd_clock_enable(); | ||
262 | |||
257 | _display_on(); | 263 | _display_on(); |
264 | |||
265 | lcd_clock_disable(); | ||
258 | } | 266 | } |
259 | 267 | ||
260 | void lcd_off(void) | 268 | void lcd_off(void) |
261 | { | 269 | { |
270 | lcd_clock_enable(); | ||
271 | |||
262 | _display_off(); | 272 | _display_off(); |
273 | |||
274 | lcd_clock_disable(); | ||
263 | } | 275 | } |
264 | 276 | ||
265 | void lcd_set_contrast(int val) | 277 | void lcd_set_contrast(int val) |