summaryrefslogtreecommitdiff
path: root/firmware/backlight.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-05-10 18:00:11 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-05-10 18:00:11 +0000
commit80278e45aa79cee66596c257c5d3870765233e00 (patch)
tree3a974d996f2bcf7f176175c904cf22edf9132ac9 /firmware/backlight.c
parent6e812b1d2e7941ee1f3e7abdbc2a2eba601f17e3 (diff)
downloadrockbox-80278e45aa79cee66596c257c5d3870765233e00.tar.gz
rockbox-80278e45aa79cee66596c257c5d3870765233e00.zip
Bring Gigabeat S bootloader one step close to a release version.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17442 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r--firmware/backlight.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c
index 4a00f86f39..74cdee1205 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -39,6 +39,11 @@
39#include "backlight-target.h" 39#include "backlight-target.h"
40#endif 40#endif
41 41
42#if !defined(BOOTLOADER)
43/* The whole driver should be built */
44#define BACKLIGHT_FULL_INIT
45#endif
46
42#ifdef SIMULATOR 47#ifdef SIMULATOR
43/* TODO: find a better way to do it but we need a kernel thread somewhere to 48/* TODO: find a better way to do it but we need a kernel thread somewhere to
44 handle this */ 49 handle this */
@@ -85,7 +90,7 @@ static inline void _remote_backlight_off(void)
85 90
86#endif /* SIMULATOR */ 91#endif /* SIMULATOR */
87 92
88#if defined(HAVE_BACKLIGHT) && !defined(BOOTLOADER) 93#if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT)
89 94
90enum { 95enum {
91 BACKLIGHT_ON, 96 BACKLIGHT_ON,
@@ -104,12 +109,18 @@ enum {
104 BUTTON_LIGHT_ON, 109 BUTTON_LIGHT_ON,
105 BUTTON_LIGHT_OFF, 110 BUTTON_LIGHT_OFF,
106#endif 111#endif
112#ifdef BACKLIGHT_DRIVER_CLOSE
113 BACKLIGHT_QUIT,
114#endif
107}; 115};
108 116
109static void backlight_thread(void); 117static void backlight_thread(void);
110static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; 118static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)];
111static const char backlight_thread_name[] = "backlight"; 119static const char backlight_thread_name[] = "backlight";
112static struct event_queue backlight_queue; 120static struct event_queue backlight_queue;
121#ifdef BACKLIGHT_DRIVER_CLOSE
122static struct thread_entry *backlight_thread_p = NULL;
123#endif
113 124
114static int backlight_timer SHAREDBSS_ATTR; 125static int backlight_timer SHAREDBSS_ATTR;
115static int backlight_timeout SHAREDBSS_ATTR; 126static int backlight_timeout SHAREDBSS_ATTR;
@@ -158,7 +169,7 @@ void buttonlight_set_timeout(int value)
158 buttonlight_update_state(); 169 buttonlight_update_state();
159} 170}
160 171
161#endif 172#endif /* HAVE_BUTTON_LIGHT */
162 173
163#ifdef HAVE_REMOTE_LCD 174#ifdef HAVE_REMOTE_LCD
164static int remote_backlight_timer; 175static int remote_backlight_timer;
@@ -170,7 +181,7 @@ static int remote_backlight_timeout_plugged = 5*HZ;
170#ifdef HAS_REMOTE_BUTTON_HOLD 181#ifdef HAS_REMOTE_BUTTON_HOLD
171static int remote_backlight_on_button_hold = 0; 182static int remote_backlight_on_button_hold = 0;
172#endif 183#endif
173#endif 184#endif /* HAVE_REMOTE_LCD */
174 185
175#ifdef HAVE_LCD_SLEEP 186#ifdef HAVE_LCD_SLEEP
176const signed char lcd_sleep_timeout_value[10] = 187const signed char lcd_sleep_timeout_value[10] =
@@ -494,6 +505,12 @@ void backlight_thread(void)
494 case SYS_USB_DISCONNECTED: 505 case SYS_USB_DISCONNECTED:
495 usb_acknowledge(SYS_USB_DISCONNECTED_ACK); 506 usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
496 break; 507 break;
508
509#ifdef BACKLIGHT_DRIVER_CLOSE
510 /* Get out of here */
511 case BACKLIGHT_QUIT:
512 return;
513#endif
497 } 514 }
498 if (locked) 515 if (locked)
499 continue; 516 continue;
@@ -613,7 +630,9 @@ void backlight_init(void)
613 /* Leave all lights as set by the bootloader here. The settings load will 630 /* Leave all lights as set by the bootloader here. The settings load will
614 * call the appropriate backlight_set_*() functions, only changing light 631 * call the appropriate backlight_set_*() functions, only changing light
615 * status if necessary. */ 632 * status if necessary. */
616 633#ifdef BACKLIGHT_DRIVER_CLOSE
634 backlight_thread_p =
635#endif
617 create_thread(backlight_thread, backlight_stack, 636 create_thread(backlight_thread, backlight_stack,
618 sizeof(backlight_stack), 0, backlight_thread_name 637 sizeof(backlight_stack), 0, backlight_thread_name
619 IF_PRIO(, PRIORITY_USER_INTERFACE) 638 IF_PRIO(, PRIORITY_USER_INTERFACE)
@@ -621,6 +640,22 @@ void backlight_init(void)
621 tick_add_task(backlight_tick); 640 tick_add_task(backlight_tick);
622} 641}
623 642
643#ifdef BACKLIGHT_DRIVER_CLOSE
644void backlight_close(void)
645{
646 struct thread_entry *thread = backlight_thread_p;
647
648 /* Wait for thread to exit */
649 if (thread == NULL)
650 return;
651
652 backlight_thread_p = NULL;
653
654 queue_post(&backlight_queue, BACKLIGHT_QUIT, 0);
655 thread_wait(thread);
656}
657#endif /* BACKLIGHT_DRIVER_CLOSE */
658
624void backlight_on(void) 659void backlight_on(void)
625{ 660{
626 queue_remove_from_head(&backlight_queue, BACKLIGHT_ON); 661 queue_remove_from_head(&backlight_queue, BACKLIGHT_ON);
@@ -788,10 +823,10 @@ void buttonlight_set_brightness(int val)
788} 823}
789#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ 824#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
790 825
791#else /* !defined(HAVE_BACKLIGHT) || defined(BOOTLOADER) 826#else /* !defined(HAVE_BACKLIGHT) || !defined(BACKLIGHT_FULL_INIT)
792 -- no backlight, empty dummy functions */ 827 -- no backlight, empty dummy functions */
793 828
794#if defined(BOOTLOADER) && defined(HAVE_BACKLIGHT) 829#if defined(HAVE_BACKLIGHT) && !defined(BACKLIGHT_FULL_INIT)
795void backlight_init(void) 830void backlight_init(void)
796{ 831{
797 (void)_backlight_init(); 832 (void)_backlight_init();
@@ -826,4 +861,4 @@ void backlight_set_brightness(int val) { (void)val; }
826#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS 861#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
827void buttonlight_set_brightness(int val) { (void)val; } 862void buttonlight_set_brightness(int val) { (void)val; }
828#endif 863#endif
829#endif /* defined(HAVE_BACKLIGHT) && !defined(BOOTLOADER) */ 864#endif /* defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) */