From d1cf51bac0c6f3f88d7dd3b9690aa81d006aa1fb Mon Sep 17 00:00:00 2001 From: kugel Date: Tue, 28 Apr 2009 08:57:38 +0000 Subject: [PATCH] Hopefully fix lcd_sleep() from not be being called for targets without fading at all and being and being called too early for backlight always of on PWM fading targets. Also, clean up the code a bit by renaming the function that initiates fading on PWM. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20820 a1c6a512-1295-4272-9138-f99709370657 --- firmware/backlight.c | 55 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/firmware/backlight.c b/firmware/backlight.c index 375da655f..b8370deaa 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c @@ -53,6 +53,11 @@ #if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) +#define BACKLIGHT_FADE_IN_THREAD \ + (CONFIG_BACKLIGHT_FADING & (BACKLIGHT_FADING_SW_SETTING \ + |BACKLIGHT_FADING_SW_HW_REG \ + |BACKLIGHT_FADING_PWM) ) + #define BACKLIGHT_THREAD_TIMEOUT HZ enum { @@ -334,7 +339,7 @@ static void backlight_dim(int value) backlight_switch(); } -static void _backlight_on(void) +static void backlight_setup_fade_up(void) { if (bl_fade_in_step > 0) { @@ -351,7 +356,7 @@ static void _backlight_on(void) } } -static void _backlight_off(void) +static void backlight_setup_fade_down(void) { if (bl_fade_out_step > 0) { @@ -361,6 +366,9 @@ static void _backlight_off(void) { bl_dim_target = bl_dim_fraction = 0; _backlight_off_normal(); +#ifdef HAVE_LCD_SLEEP + backlight_lcd_sleep_countdown(true); +#endif } } @@ -435,10 +443,28 @@ static void backlight_setup_fade_down(void) * fading up is glitch free */ _backlight_set_brightness(MIN_BRIGHTNESS_SETTING); #endif +#ifdef HAVE_LCD_SLEEP + backlight_lcd_sleep_countdown(true); +#endif } } #endif /* CONFIG_BACKLIGHT_FADING */ +static inline void do_backlight_off(void) +{ + backlight_timer = 0; +#if BACKLIGHT_FADE_IN_THREAD + backlight_setup_fade_down(); +#else + _backlight_off(); + /* targets that have fading need to start the countdown when done with + * fading */ +#ifdef HAVE_LCD_SLEEP + backlight_lcd_sleep_countdown(true); +#endif +#endif +} + /* Update state of backlight according to timeout setting */ static void backlight_update_state(void) { @@ -448,17 +474,11 @@ static void backlight_update_state(void) /* Backlight == OFF in the setting? */ if (UNLIKELY(timeout < 0)) { - backlight_timer = 0; /* Disable the timeout */ -#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ + do_backlight_off(); +#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) - backlight_setup_fade_down(); - /* necessary step to issue fading down when the setting is selected */ + /* necessary step to issue fading down when the setting is selected */ queue_post(&backlight_queue, SYS_TIMEOUT, 0); -#else - _backlight_off(); -#ifdef HAVE_LCD_SLEEP - backlight_lcd_sleep_countdown(true); /* start sleep countdown */ -#endif #endif } else @@ -469,8 +489,7 @@ static void backlight_update_state(void) backlight_lcd_sleep_countdown(false); /* wake up lcd */ #endif -#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ - || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) +#if BACKLIGHT_FADE_IN_THREAD backlight_setup_fade_up(); #else _backlight_on(); @@ -496,16 +515,6 @@ static void remote_backlight_update_state(void) } } #endif /* HAVE_REMOTE_LCD */ -static inline void do_backlight_off(void) -{ - backlight_timer = 0; -#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ - || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) - backlight_setup_fade_down(); -#else - _backlight_off(); -#endif /* CONFIG_BACKLIGHT_FADING */ -} void backlight_thread(void) { -- 2.11.4.GIT