Fix another FS#10130 issue - Set backlight and button light brightness via the backlight thread to avoid potential concurrency issues.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20834 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Boris Gjenero 2009-05-01 03:18:20 +00:00
parent 3c15e78349
commit f4943b90e6

View file

@ -64,6 +64,9 @@ enum {
BACKLIGHT_ON, BACKLIGHT_ON,
BACKLIGHT_OFF, BACKLIGHT_OFF,
BACKLIGHT_TMO_CHANGED, BACKLIGHT_TMO_CHANGED,
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
BACKLIGHT_BRIGHTNESS_CHANGED,
#endif
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
REMOTE_BACKLIGHT_ON, REMOTE_BACKLIGHT_ON,
REMOTE_BACKLIGHT_OFF, REMOTE_BACKLIGHT_OFF,
@ -79,7 +82,10 @@ enum {
BUTTON_LIGHT_ON, BUTTON_LIGHT_ON,
BUTTON_LIGHT_OFF, BUTTON_LIGHT_OFF,
BUTTON_LIGHT_TMO_CHANGED, BUTTON_LIGHT_TMO_CHANGED,
#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
BUTTON_LIGHT_BRIGHTNESS_CHANGED,
#endif #endif
#endif /* HAVE_BUTTON_LIGHT */
#ifdef BACKLIGHT_DRIVER_CLOSE #ifdef BACKLIGHT_DRIVER_CLOSE
BACKLIGHT_QUIT, BACKLIGHT_QUIT,
#endif #endif
@ -604,6 +610,17 @@ void backlight_thread(void)
case BACKLIGHT_OFF: case BACKLIGHT_OFF:
do_backlight_off(); do_backlight_off();
break; break;
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
case BACKLIGHT_BRIGHTNESS_CHANGED:
backlight_brightness = (int)ev.data;
_backlight_set_brightness((int)ev.data);
#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
|| (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
/* receive backlight brightness */
_backlight_fade_update_state((int)ev.data);
#endif
break;
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#ifdef HAVE_LCD_SLEEP #ifdef HAVE_LCD_SLEEP
case LCD_SLEEP: case LCD_SLEEP:
lcd_sleep(); lcd_sleep();
@ -619,7 +636,12 @@ void backlight_thread(void)
buttonlight_timer = 0; buttonlight_timer = 0;
_buttonlight_off(); _buttonlight_off();
break; break;
#endif #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
case BUTTON_LIGHT_BRIGHTNESS_CHANGED:
_buttonlight_set_brightness((int)ev.data);
break;
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
#endif /* HAVE_BUTTON_LIGHT */
case SYS_POWEROFF: /* Lock backlight on poweroff so it doesn't */ case SYS_POWEROFF: /* Lock backlight on poweroff so it doesn't */
locked = true; /* go off before power is actually cut. */ locked = true; /* go off before power is actually cut. */
@ -922,13 +944,7 @@ void backlight_set_brightness(int val)
else if (val > MAX_BRIGHTNESS_SETTING) else if (val > MAX_BRIGHTNESS_SETTING)
val = MAX_BRIGHTNESS_SETTING; val = MAX_BRIGHTNESS_SETTING;
backlight_brightness = val; queue_post(&backlight_queue, BACKLIGHT_BRIGHTNESS_CHANGED, val);
_backlight_set_brightness(val);
#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
|| (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
/* receive backlight brightness */
_backlight_fade_update_state(val);
#endif
} }
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */ #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
@ -940,7 +956,7 @@ void buttonlight_set_brightness(int val)
else if (val > MAX_BRIGHTNESS_SETTING) else if (val > MAX_BRIGHTNESS_SETTING)
val = MAX_BRIGHTNESS_SETTING; val = MAX_BRIGHTNESS_SETTING;
_buttonlight_set_brightness(val); queue_post(&backlight_queue, BUTTON_LIGHT_BRIGHTNESS_CHANGED, val);
} }
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */