From d3bbe51629212e770b30c701bef1b583b8deae88 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Sun, 3 Jan 2010 16:28:15 +0000 Subject: Onda VX747/VX777: centralise LCD clock en-/disabling. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24168 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c') 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); } -- cgit v1.2.3