Onda VX747/VX777: centralise LCD clock en-/disabling.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24168 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2010-01-03 16:28:15 +00:00
parent 4fdf4ad728
commit d3bbe51629
3 changed files with 29 additions and 8 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -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)