From d85c3ec41020a6c56b0d5d95a9ed790f57d73c6e Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Tue, 20 Oct 2009 21:54:59 +0000 Subject: Convert lcd_activation callbacks to use the event system to allow for multiple parallel callbacks (for custom statusbar). Increase maximum event count as we need more (I actually had a report about it during custom statusbar testing). Removed corresponding functions from the core and plugin api. Bump min version and sort. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23302 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/lcd-16bit-vert.c | 21 --------------------- firmware/drivers/lcd-16bit.c | 21 --------------------- firmware/drivers/lcd-1bit-vert.c | 19 ------------------- firmware/events.c | 2 +- firmware/export/events.h | 1 + firmware/export/lcd.h | 10 +++++++--- firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c | 2 +- .../target/arm/as3525/sansa-e200v2/lcd-e200v2.c | 2 +- firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c | 2 +- firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c | 2 +- firmware/target/arm/ipod/video/lcd-video.c | 2 +- firmware/target/arm/iriver/h10/lcd-h10_20gb.c | 2 +- firmware/target/arm/lcd-c200_c200v2.c | 2 +- firmware/target/arm/philips/sa9200/lcd-sa9200.c | 2 +- firmware/target/arm/s3c2440/lcd-s3c2440.c | 2 +- firmware/target/arm/samsung/yh820/lcd-yh820.c | 2 +- firmware/target/arm/samsung/yh925/lcd-yh925.c | 2 +- firmware/target/arm/sandisk/sansa-e200/lcd-e200.c | 2 +- firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c | 2 +- firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c | 2 +- .../arm/tms320dm320/creative-zvm/lcd-creativezvm.c | 2 +- .../target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 2 +- firmware/target/coldfire/iaudio/x5/lcd-x5.c | 2 +- firmware/target/coldfire/iriver/h300/lcd-h300.c | 2 +- firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | 2 +- 25 files changed, 28 insertions(+), 84 deletions(-) (limited to 'firmware') diff --git a/firmware/drivers/lcd-16bit-vert.c b/firmware/drivers/lcd-16bit-vert.c index 887505766c..1e49bb354d 100644 --- a/firmware/drivers/lcd-16bit-vert.c +++ b/firmware/drivers/lcd-16bit-vert.c @@ -75,27 +75,6 @@ static struct viewport* current_vp IDATA_ATTR = &default_vp; struct viewport* current_vp IDATA_ATTR = &default_vp; #endif - -/*** Helpers - consolidate optional code ***/ -#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) -static void (*lcd_activation_hook)(void) = NULL; - -void lcd_activation_set_hook(void (*func)(void)) -{ - lcd_activation_hook = func; -} - -/* To be called by target driver after enabling display and refreshing it */ -void lcd_activation_call_hook(void) -{ - void (*func)(void) = lcd_activation_hook; - - if (func != NULL) - func(); -} - -#endif - /* LCD init */ void lcd_init(void) { diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index 7238d7a923..d1b417a00a 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c @@ -74,27 +74,6 @@ static struct viewport* current_vp IDATA_ATTR = &default_vp; struct viewport* current_vp IDATA_ATTR = &default_vp; #endif - -/*** Helpers - consolidate optional code ***/ -#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) -static void (*lcd_activation_hook)(void) = NULL; - -void lcd_activation_set_hook(void (*func)(void)) -{ - lcd_activation_hook = func; -} - -/* To be called by target driver after enabling display and refreshing it */ -void lcd_activation_call_hook(void) -{ - void (*func)(void) = lcd_activation_hook; - - if (func != NULL) - func(); -} - -#endif - /* LCD init */ void lcd_init(void) { diff --git a/firmware/drivers/lcd-1bit-vert.c b/firmware/drivers/lcd-1bit-vert.c index dd6c7cd354..9607f284aa 100644 --- a/firmware/drivers/lcd-1bit-vert.c +++ b/firmware/drivers/lcd-1bit-vert.c @@ -91,25 +91,6 @@ void LCDFN(init)(void) #endif } -#ifdef MAIN_LCD -#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) -static void (*lcd_activation_hook)(void) = NULL; - -void lcd_activation_set_hook(void (*func)(void)) -{ - lcd_activation_hook = func; -} - -void lcd_activation_call_hook(void) -{ - void (*func)(void) = lcd_activation_hook; - - if (func != NULL) - func(); -} -#endif -#endif - /*** parameter handling ***/ void LCDFN(set_drawmode)(int mode) diff --git a/firmware/events.c b/firmware/events.c index dca612bc7b..74172e1fa0 100644 --- a/firmware/events.c +++ b/firmware/events.c @@ -23,7 +23,7 @@ #include "events.h" #include "panic.h" -#define MAX_SYS_EVENTS 20 +#define MAX_SYS_EVENTS 28 struct sysevent { unsigned short id; diff --git a/firmware/export/events.h b/firmware/export/events.h index 694566a43e..42ddf58441 100644 --- a/firmware/export/events.h +++ b/firmware/export/events.h @@ -37,6 +37,7 @@ #define EVENT_CLASS_PLAYBACK 0x0200 #define EVENT_CLASS_BUFFERING 0x0400 #define EVENT_CLASS_GUI 0x0800 +#define EVENT_CLASS_LCD 0xf000 bool add_event(unsigned short id, bool oneshot, void (*handler)(void *data)); void remove_event(unsigned short id, void (*handler)(void *data)); diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 91217ff76c..89f39437a0 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h @@ -25,6 +25,7 @@ #include #include "cpu.h" #include "config.h" +#include "events.h" #define VP_FLAG_ALIGN_RIGHT 0x01 #define VP_FLAG_ALIGN_CENTER 0x02 @@ -426,13 +427,16 @@ extern void lcd_sleep(void); * framebuffer data is synchronized */ /* Sansa Clip has these function in it's lcd driver, since it's the only * 1-bit display featuring lcd_active, so far */ + +enum { + LCD_EVENT_ACTIVATION = (EVENT_CLASS_LCD|1), +}; + extern bool lcd_active(void); -extern void lcd_activation_set_hook(void (*enable_hook)(void)); -extern void lcd_activation_call_hook(void); #endif #ifdef HAVE_LCD_SHUTDOWN -void lcd_shutdown(void); +extern void lcd_shutdown(void); #endif /* Bitmap formats */ diff --git a/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c b/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c index edc1d9810e..1ca26dd1a1 100644 --- a/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c +++ b/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c @@ -172,7 +172,7 @@ void lcd_enable(bool enable) ascodec_write(AS3514_DCDC15, 1); lcd_write_command(LCD_SET_DISPLAY_ON); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { lcd_write_command(LCD_SET_DISPLAY_OFF); diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c index a063ae4db8..7c3ccc2c0b 100644 --- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c +++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c @@ -372,7 +372,7 @@ void lcd_enable(bool on) if(on) { _display_on(); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c index d8cec6435b..21ecdf8afa 100644 --- a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c +++ b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c @@ -217,7 +217,7 @@ void lcd_enable(bool on) lcd_write_reg(0x07, 0x17); display_on = true; lcd_update(); /* Resync display */ - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); sleep(0); } diff --git a/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c b/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c index c8d8b8a81e..fa1aed0fd6 100644 --- a/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c @@ -122,7 +122,7 @@ void lcd_enable(bool state) lcd_powered = true; lcd_on = true; lcd_update(); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/ipod/video/lcd-video.c b/firmware/target/arm/ipod/video/lcd-video.c index ecd28bb7c3..ea9738b3a4 100644 --- a/firmware/target/arm/ipod/video/lcd-video.c +++ b/firmware/target/arm/ipod/video/lcd-video.c @@ -618,7 +618,7 @@ void lcd_awake(void) tick_add_task(&lcd_tick); wakeup_wait(&(lcd_state.initwakeup), TIMEOUT_BLOCK); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } } diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c index 4e6aebadd2..f6cf4cbcbb 100644 --- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c +++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c @@ -380,7 +380,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_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/lcd-c200_c200v2.c b/firmware/target/arm/lcd-c200_c200v2.c index 3ba1bf0f07..62f1dc20f6 100644 --- a/firmware/target/arm/lcd-c200_c200v2.c +++ b/firmware/target/arm/lcd-c200_c200v2.c @@ -320,7 +320,7 @@ void lcd_enable(bool yesno) { lcd_send_command(R_STANDBY_OFF, 0); lcd_send_command(R_DISPLAY_ON, 0); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/philips/sa9200/lcd-sa9200.c b/firmware/target/arm/philips/sa9200/lcd-sa9200.c index 3937c078c6..51a3cf0f71 100755 --- a/firmware/target/arm/philips/sa9200/lcd-sa9200.c +++ b/firmware/target/arm/philips/sa9200/lcd-sa9200.c @@ -339,7 +339,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_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/s3c2440/lcd-s3c2440.c b/firmware/target/arm/s3c2440/lcd-s3c2440.c index b9f76b7400..d702b5713a 100644 --- a/firmware/target/arm/s3c2440/lcd-s3c2440.c +++ b/firmware/target/arm/s3c2440/lcd-s3c2440.c @@ -323,7 +323,7 @@ void lcd_enable(bool state) lcd_on = true; lcd_update(); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/samsung/yh820/lcd-yh820.c b/firmware/target/arm/samsung/yh820/lcd-yh820.c index 76ecdd293e..f7d971ab76 100644 --- a/firmware/target/arm/samsung/yh820/lcd-yh820.c +++ b/firmware/target/arm/samsung/yh820/lcd-yh820.c @@ -226,7 +226,7 @@ void lcd_enable(bool yesno) { lcd_send_command(R_STANDBY_OFF); lcd_send_command(R_DISPLAY_ON); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/samsung/yh925/lcd-yh925.c b/firmware/target/arm/samsung/yh925/lcd-yh925.c index 7509deff36..9ffcddf33a 100644 --- a/firmware/target/arm/samsung/yh925/lcd-yh925.c +++ b/firmware/target/arm/samsung/yh925/lcd-yh925.c @@ -492,7 +492,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_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c index f31e0792a9..03f6a1b971 100644 --- a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c @@ -448,7 +448,7 @@ void lcd_enable(bool on) DEV_EN |= DEV_LCD; /* Enable LCD controller */ lcd_display_on(); /* Turn on display */ lcd_update(); /* Resync display */ - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); LCD_REG_6 |= 1; /* Restart DMA */ sleep(HZ/50); /* Wait for a frame to be written */ } diff --git a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c index 6da0d2c083..5d2a2b8194 100644 --- a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c +++ b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c @@ -143,7 +143,7 @@ void lcd_enable(bool on) if (on) { _display_on(); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { /** Off sequence according to datasheet, p. 130 **/ lcd_write_reg(R_FRAME_CYCLE_CONTROL, 0x0002); /* EQ=0, 18 clks/line */ diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c index 034a53a022..d5a7e2f142 100644 --- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c +++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c @@ -209,7 +209,7 @@ void lcd_enable(bool on) lcd_display_on(); LCDC_CTRL |= 1; /* controller enable */ lcd_update(); /* Resync display */ - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c index e77c3a2311..3f1e621b54 100644 --- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c +++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c @@ -237,7 +237,7 @@ return; { lcd_display_on(false); /* Turn on display */ lcd_update(); /* Resync display */ - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index 201b6e8063..ac7754f5e9 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c @@ -98,7 +98,7 @@ void lcd_awake(void) sleep(HZ/10); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } } #endif diff --git a/firmware/target/coldfire/iaudio/x5/lcd-x5.c b/firmware/target/coldfire/iaudio/x5/lcd-x5.c index 98eb5deb94..e1504b6e98 100644 --- a/firmware/target/coldfire/iaudio/x5/lcd-x5.c +++ b/firmware/target/coldfire/iaudio/x5/lcd-x5.c @@ -397,7 +397,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_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/coldfire/iriver/h300/lcd-h300.c b/firmware/target/coldfire/iriver/h300/lcd-h300.c index 36f340eab7..ea0819aa3e 100644 --- a/firmware/target/coldfire/iriver/h300/lcd-h300.c +++ b/firmware/target/coldfire/iriver/h300/lcd-h300.c @@ -280,7 +280,7 @@ void lcd_enable(bool on) if (on) { _display_on(); - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); } else { diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c index edde538c99..99ffcf2981 100644 --- a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c @@ -55,7 +55,7 @@ void lcd_enable(bool state) { lcd_on(); #ifdef HAVE_LCD_ENABLE - lcd_activation_call_hook(); + send_event(LCD_EVENT_ACTIVATION, NULL); #endif } else -- cgit v1.2.3