diff options
Diffstat (limited to 'firmware')
| -rw-r--r-- | firmware/drivers/lcd-16bit.c | 21 | ||||
| -rw-r--r-- | firmware/export/kernel.h | 1 | ||||
| -rw-r--r-- | firmware/export/lcd.h | 4 | ||||
| -rw-r--r-- | firmware/target/arm/iriver/h10/lcd-h10_20gb.c | 1 | ||||
| -rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c | 1 | ||||
| -rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/lcd-e200.c | 1 | ||||
| -rw-r--r-- | firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c | 1 | ||||
| -rw-r--r-- | firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | 1 | ||||
| -rw-r--r-- | firmware/target/coldfire/iaudio/x5/lcd-x5.c | 1 | ||||
| -rw-r--r-- | firmware/target/coldfire/iriver/h300/lcd-h300.c | 1 |
10 files changed, 33 insertions, 0 deletions
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index c91d222..020d6bf 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c @@ -49,6 +49,10 @@ fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] static fb_data* lcd_backdrop = NULL; static long lcd_backdrop_offset IDATA_ATTR = 0; +#ifdef HAVE_LCD_ENABLE +static void (*lcd_enable_hook)(void) = NULL; +#endif + static struct viewport default_vp = { .x = 0, @@ -84,6 +88,23 @@ void lcd_init(void) scroll_init(); } +/*** Helpers - consolidate optional code ***/ +#ifdef HAVE_LCD_ENABLE +void lcd_set_enable_hook(void (*enable_hook)(void)) +{ + lcd_enable_hook = enable_hook; +} + +/* To be called by target driver after enabling display and refreshing it */ +void lcd_call_enable_hook(void) +{ + void (*enable_hook)(void) = lcd_enable_hook; + + if (enable_hook != NULL) + enable_hook(); +} +#endif + /*** Viewports ***/ void lcd_set_viewport(struct viewport* vp) diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h index 60c37bd..88f3b80 100644 --- a/firmware/export/kernel.h +++ b/firmware/export/kernel.h @@ -45,6 +45,7 @@ #define SYS_EVENT_CLS_FILESYS 3 #define SYS_EVENT_CLS_PLUG 4 #define SYS_EVENT_CLS_MISC 5 +#define SYS_EVENT_CLS_PRIVATE 7 /* For use inside plugins */ /* make sure SYS_EVENT_CLS_BITS has enough range */ /* Bit 31->|S|c...c|i...i| */ diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 3e0ec78..45a6850 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h @@ -341,6 +341,10 @@ void lcd_poweroff(void); /* Enable/disable the main display. */ extern void lcd_enable(bool on); extern bool lcd_enabled(void); +/* Register a hook that is called when the lcd is powered and after the + * framebuffer data is synchronized */ +void lcd_set_enable_hook(void (*enable_hook)(void)); +void lcd_call_enable_hook(void); #endif /* HAVE_LCD_ENABLE */ #ifdef HAVE_LCD_SLEEP diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c index 1ee43c3..7d94266 100644 --- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c +++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c @@ -361,6 +361,7 @@ void lcd_enable(bool on) /* Probably out of sync and we don't wanna pepper the code with lcd_update() calls for this. */ lcd_update(); + lcd_call_enable_hook(); } else { diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c index 7484cae..1833639 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c @@ -287,6 +287,7 @@ void lcd_enable(bool state) lcd_on = true; lcd_update(); + lcd_call_enable_hook(); } else { diff --git a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c index acdb2c9..9f8f580 100644 --- a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c @@ -436,6 +436,7 @@ void lcd_enable(bool on) DEV_EN |= DEV_LCD; /* Enable LCD controller */ lcd_display_on(); /* Turn on display */ lcd_update(); /* Resync display */ + lcd_call_enable_hook(); LCD_REG_6 |= 1; /* Restart DMA */ sleep(HZ/50); /* Wait for a frame to be written */ } diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c index 8a268db..062b178 100644 --- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c +++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c @@ -212,6 +212,7 @@ void lcd_enable(bool on) lcd_display_on(); LCDC_CTRL |= 1; /* controller enable */ lcd_update(); /* Resync display */ + lcd_call_enable_hook(); } else { diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c index a2634f0..b4b76d4 100644 --- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c +++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c @@ -235,6 +235,7 @@ return; { lcd_display_on(false); /* Turn on display */ lcd_update(); /* Resync display */ + lcd_call_enable_hook(); } else { diff --git a/firmware/target/coldfire/iaudio/x5/lcd-x5.c b/firmware/target/coldfire/iaudio/x5/lcd-x5.c index 19faf04..5aecb36 100644 --- a/firmware/target/coldfire/iaudio/x5/lcd-x5.c +++ b/firmware/target/coldfire/iaudio/x5/lcd-x5.c @@ -383,6 +383,7 @@ void lcd_enable(bool on) /* Probably out of sync and we don't wanna pepper the code with lcd_update() calls for this. */ lcd_update(); + lcd_call_enable_hook(); } else { diff --git a/firmware/target/coldfire/iriver/h300/lcd-h300.c b/firmware/target/coldfire/iriver/h300/lcd-h300.c index 5081366..61d0a6c 100644 --- a/firmware/target/coldfire/iriver/h300/lcd-h300.c +++ b/firmware/target/coldfire/iriver/h300/lcd-h300.c @@ -261,6 +261,7 @@ void lcd_enable(bool on) if(on) { _display_on(); + lcd_call_enable_hook(); } else { |