summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Gjenero <dreamlayers@rockbox.org>2009-05-01 03:18:20 +0000
committerBoris Gjenero <dreamlayers@rockbox.org>2009-05-01 03:18:20 +0000
commitf4943b90e69e75cc2301238969520914553d7ae5 (patch)
tree67c6e8dcad7ed62416bdf32141d86bc551ca64cd
parent3c15e783499675c6efce5e54f81ce8972b616f2e (diff)
downloadrockbox-f4943b90e69e75cc2301238969520914553d7ae5.tar.gz
rockbox-f4943b90e69e75cc2301238969520914553d7ae5.zip
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
-rw-r--r--firmware/backlight.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c
index b8370deaa1..2a2155df8a 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -64,6 +64,9 @@ enum {
64 BACKLIGHT_ON, 64 BACKLIGHT_ON,
65 BACKLIGHT_OFF, 65 BACKLIGHT_OFF,
66 BACKLIGHT_TMO_CHANGED, 66 BACKLIGHT_TMO_CHANGED,
67#ifdef HAVE_BACKLIGHT_BRIGHTNESS
68 BACKLIGHT_BRIGHTNESS_CHANGED,
69#endif
67#ifdef HAVE_REMOTE_LCD 70#ifdef HAVE_REMOTE_LCD
68 REMOTE_BACKLIGHT_ON, 71 REMOTE_BACKLIGHT_ON,
69 REMOTE_BACKLIGHT_OFF, 72 REMOTE_BACKLIGHT_OFF,
@@ -79,7 +82,10 @@ enum {
79 BUTTON_LIGHT_ON, 82 BUTTON_LIGHT_ON,
80 BUTTON_LIGHT_OFF, 83 BUTTON_LIGHT_OFF,
81 BUTTON_LIGHT_TMO_CHANGED, 84 BUTTON_LIGHT_TMO_CHANGED,
85#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
86 BUTTON_LIGHT_BRIGHTNESS_CHANGED,
82#endif 87#endif
88#endif /* HAVE_BUTTON_LIGHT */
83#ifdef BACKLIGHT_DRIVER_CLOSE 89#ifdef BACKLIGHT_DRIVER_CLOSE
84 BACKLIGHT_QUIT, 90 BACKLIGHT_QUIT,
85#endif 91#endif
@@ -604,6 +610,17 @@ void backlight_thread(void)
604 case BACKLIGHT_OFF: 610 case BACKLIGHT_OFF:
605 do_backlight_off(); 611 do_backlight_off();
606 break; 612 break;
613#ifdef HAVE_BACKLIGHT_BRIGHTNESS
614 case BACKLIGHT_BRIGHTNESS_CHANGED:
615 backlight_brightness = (int)ev.data;
616 _backlight_set_brightness((int)ev.data);
617#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
618 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
619 /* receive backlight brightness */
620 _backlight_fade_update_state((int)ev.data);
621#endif
622 break;
623#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
607#ifdef HAVE_LCD_SLEEP 624#ifdef HAVE_LCD_SLEEP
608 case LCD_SLEEP: 625 case LCD_SLEEP:
609 lcd_sleep(); 626 lcd_sleep();
@@ -619,7 +636,12 @@ void backlight_thread(void)
619 buttonlight_timer = 0; 636 buttonlight_timer = 0;
620 _buttonlight_off(); 637 _buttonlight_off();
621 break; 638 break;
622#endif 639#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
640 case BUTTON_LIGHT_BRIGHTNESS_CHANGED:
641 _buttonlight_set_brightness((int)ev.data);
642 break;
643#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
644#endif /* HAVE_BUTTON_LIGHT */
623 645
624 case SYS_POWEROFF: /* Lock backlight on poweroff so it doesn't */ 646 case SYS_POWEROFF: /* Lock backlight on poweroff so it doesn't */
625 locked = true; /* go off before power is actually cut. */ 647 locked = true; /* go off before power is actually cut. */
@@ -922,13 +944,7 @@ void backlight_set_brightness(int val)
922 else if (val > MAX_BRIGHTNESS_SETTING) 944 else if (val > MAX_BRIGHTNESS_SETTING)
923 val = MAX_BRIGHTNESS_SETTING; 945 val = MAX_BRIGHTNESS_SETTING;
924 946
925 backlight_brightness = val; 947 queue_post(&backlight_queue, BACKLIGHT_BRIGHTNESS_CHANGED, val);
926 _backlight_set_brightness(val);
927#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
928 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
929 /* receive backlight brightness */
930 _backlight_fade_update_state(val);
931#endif
932} 948}
933#endif /* HAVE_BACKLIGHT_BRIGHTNESS */ 949#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
934 950
@@ -940,7 +956,7 @@ void buttonlight_set_brightness(int val)
940 else if (val > MAX_BRIGHTNESS_SETTING) 956 else if (val > MAX_BRIGHTNESS_SETTING)
941 val = MAX_BRIGHTNESS_SETTING; 957 val = MAX_BRIGHTNESS_SETTING;
942 958
943 _buttonlight_set_brightness(val); 959 queue_post(&backlight_queue, BUTTON_LIGHT_BRIGHTNESS_CHANGED, val);
944} 960}
945#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ 961#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
946 962