summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2010-01-03 16:28:15 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2010-01-03 16:28:15 +0000
commitd3bbe51629212e770b30c701bef1b583b8deae88 (patch)
tree9d60cfcf0dd822882be024ceeec559b3c73bdf85
parent4fdf4ad728ac93336c850c7da8966e8d00bddbf8 (diff)
downloadrockbox-d3bbe51629212e770b30c701bef1b583b8deae88.tar.gz
rockbox-d3bbe51629212e770b30c701bef1b583b8deae88.tar.bz2
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.c23
-rw-r--r--firmware/target/mips/ingenic_jz47xx/lcd-target.h2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c12
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 @@
static volatile bool lcd_is_on = false;
static struct mutex lcd_mtx;
static struct wakeup lcd_wkup;
+static int lcd_count = 0;
+
+void lcd_clock_enable(void)
+{
+ if(++lcd_count == 1)
+ __cpm_start_lcd();
+}
+
+void lcd_clock_disable(void)
+{
+ if(--lcd_count == 0)
+ __cpm_stop_lcd();
+}
/* LCD init */
void lcd_init_device(void)
{
- __cpm_start_lcd();
lcd_init_controller();
- __cpm_stop_lcd();
lcd_is_on = true;
mutex_init(&lcd_mtx);
@@ -55,8 +66,6 @@ void lcd_enable(bool state)
if(lcd_is_on == state)
return;
- __cpm_start_lcd();
-
if(state)
{
lcd_on();
@@ -65,8 +74,6 @@ void lcd_enable(bool state)
else
lcd_off();
- __cpm_stop_lcd();
-
lcd_is_on = state;
}
#endif
@@ -87,7 +94,7 @@ void lcd_update_rect(int x, int y, int width, int height)
mutex_lock(&lcd_mtx);
- __cpm_start_lcd();
+ lcd_clock_enable();
lcd_set_target(x, y, width, height);
@@ -119,7 +126,7 @@ void lcd_update_rect(int x, int y, int width, int height)
while(REG_SLCD_STATE & SLCD_STATE_BUSY);
REG_SLCD_CTRL &= ~SLCD_CTRL_DMA_EN; /* Disable SLCD DMA support */
- __cpm_stop_lcd();
+ lcd_clock_disable();
mutex_unlock(&lcd_mtx);
}
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 @@
void lcd_enable(bool state);
bool lcd_active(void);
void lcd_init_device(void);
+void lcd_clock_enable(void);
+void lcd_clock_disable(void);
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)
void lcd_init_controller(void)
{
+ lcd_clock_enable();
+
#ifdef USB_BOOT
_display_pin_init();
#endif
@@ -204,6 +206,8 @@ void lcd_init_controller(void)
_set_lcd_clock();
SLEEP(1000);
_display_init();
+
+ lcd_clock_disable();
}
void lcd_set_target(int x, int y, int width, int height)
@@ -254,12 +258,20 @@ void lcd_set_flip(bool yesno)
void lcd_on(void)
{
+ lcd_clock_enable();
+
_display_on();
+
+ lcd_clock_disable();
}
void lcd_off(void)
{
+ lcd_clock_enable();
+
_display_off();
+
+ lcd_clock_disable();
}
void lcd_set_contrast(int val)