diff options
-rw-r--r-- | firmware/backlight.c | 73 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c | 44 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h | 1 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c | 3 |
4 files changed, 72 insertions, 49 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index d695d1ee19..d7e2fb1a81 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c | |||
@@ -109,6 +109,45 @@ static int backlight_on_button_hold = 0; | |||
109 | static int button_backlight_timer; | 109 | static int button_backlight_timer; |
110 | static int button_backlight_timeout = 5*HZ; | 110 | static int button_backlight_timeout = 5*HZ; |
111 | 111 | ||
112 | /* internal interface */ | ||
113 | static void _button_backlight_on(void) | ||
114 | { | ||
115 | #ifndef SIMULATOR | ||
116 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS | ||
117 | __button_backlight_dim(false); | ||
118 | #else | ||
119 | __button_backlight_on(); | ||
120 | #endif | ||
121 | #endif | ||
122 | } | ||
123 | |||
124 | void _button_backlight_off(void) | ||
125 | { | ||
126 | #ifndef SIMULATOR | ||
127 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS | ||
128 | if(button_backlight_timeout>0) | ||
129 | __button_backlight_dim(true); | ||
130 | else | ||
131 | #endif | ||
132 | __button_backlight_off(); | ||
133 | #endif | ||
134 | } | ||
135 | |||
136 | /* Update state of buttonlight according to timeout setting */ | ||
137 | static void buttonlight_update_state(void) | ||
138 | { | ||
139 | button_backlight_timer = button_backlight_timeout; | ||
140 | |||
141 | /* Buttonlight == OFF in the setting? */ | ||
142 | if (button_backlight_timer < 0) | ||
143 | { | ||
144 | button_backlight_timer = 0; /* Disable the timeout */ | ||
145 | _button_backlight_off(); | ||
146 | } | ||
147 | else | ||
148 | _button_backlight_on(); | ||
149 | } | ||
150 | |||
112 | /* external interface */ | 151 | /* external interface */ |
113 | void button_backlight_on(void) | 152 | void button_backlight_on(void) |
114 | { | 153 | { |
@@ -127,33 +166,7 @@ void button_backlight_set_timeout(int index) | |||
127 | /* if given a weird value, use default */ | 166 | /* if given a weird value, use default */ |
128 | index = 6; | 167 | index = 6; |
129 | button_backlight_timeout = HZ * backlight_timeout_value[index]; | 168 | button_backlight_timeout = HZ * backlight_timeout_value[index]; |
130 | if (index == 0) /* off */ | 169 | buttonlight_update_state(); |
131 | button_backlight_off(); | ||
132 | else if (index == 1) /* on */ | ||
133 | button_backlight_on(); | ||
134 | |||
135 | button_backlight_timer = button_backlight_timeout; | ||
136 | } | ||
137 | |||
138 | /* internal interface */ | ||
139 | static void _button_backlight_on(void) | ||
140 | { | ||
141 | if (button_backlight_timeout < 0) | ||
142 | return; | ||
143 | button_backlight_timer = button_backlight_timeout; | ||
144 | #ifndef SIMULATOR | ||
145 | __button_backlight_on(); | ||
146 | #endif | ||
147 | } | ||
148 | |||
149 | static void _button_backlight_off(void) | ||
150 | { | ||
151 | if (button_backlight_timeout == 0) | ||
152 | return; | ||
153 | button_backlight_timer = 0; | ||
154 | #ifndef SIMULATOR | ||
155 | __button_backlight_off(); | ||
156 | #endif | ||
157 | } | 170 | } |
158 | 171 | ||
159 | #endif | 172 | #endif |
@@ -511,9 +524,10 @@ void backlight_thread(void) | |||
511 | #endif | 524 | #endif |
512 | #ifdef HAVE_BUTTON_LIGHT | 525 | #ifdef HAVE_BUTTON_LIGHT |
513 | case BUTTON_LIGHT_ON: | 526 | case BUTTON_LIGHT_ON: |
514 | _button_backlight_on(); | 527 | buttonlight_update_state(); |
515 | break; | 528 | break; |
516 | case BUTTON_LIGHT_OFF: | 529 | case BUTTON_LIGHT_OFF: |
530 | button_backlight_timer = 0; | ||
517 | _button_backlight_off(); | 531 | _button_backlight_off(); |
518 | break; | 532 | break; |
519 | #endif | 533 | #endif |
@@ -796,7 +810,6 @@ void remote_backlight_hold_changed(bool rc_hold_button) | |||
796 | remote_backlight_off(); /* setting == Off */ | 810 | remote_backlight_off(); /* setting == Off */ |
797 | else /* setting == On, Normal, no hold button, or anything else */ | 811 | else /* setting == On, Normal, no hold button, or anything else */ |
798 | remote_backlight_on(); | 812 | remote_backlight_on(); |
799 | |||
800 | } | 813 | } |
801 | 814 | ||
802 | void remote_backlight_set_on_button_hold(int index) | 815 | void remote_backlight_set_on_button_hold(int index) |
@@ -863,6 +876,8 @@ void buttonlight_set_brightness(int val) | |||
863 | val = MAX_BRIGHTNESS_SETTING; | 876 | val = MAX_BRIGHTNESS_SETTING; |
864 | 877 | ||
865 | __buttonlight_set_brightness(val); | 878 | __buttonlight_set_brightness(val); |
879 | if(button_backlight_timeout<0) | ||
880 | _button_backlight_off(); | ||
866 | } | 881 | } |
867 | #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ | 882 | #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ |
868 | 883 | ||
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c index 40b093c689..7e2ec5c6b9 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c | |||
@@ -69,6 +69,7 @@ unsigned char charging_leds[] = { 0x00, 0x20, 0x38, 0x3C }; | |||
69 | 69 | ||
70 | bool __backlight_init(void) | 70 | bool __backlight_init(void) |
71 | { | 71 | { |
72 | buttonlight_brightness=DEFAULT_BRIGHTNESS_SETTING; | ||
72 | backlight_brightness=DEFAULT_BRIGHTNESS_SETTING; | 73 | backlight_brightness=DEFAULT_BRIGHTNESS_SETTING; |
73 | backlight_control = BACKLIGHT_CONTROL_IDLE; | 74 | backlight_control = BACKLIGHT_CONTROL_IDLE; |
74 | 75 | ||
@@ -152,9 +153,9 @@ static void led_control_service(void) | |||
152 | sc606regAval=DEFAULT_BRIGHTNESS_SETTING, | 153 | sc606regAval=DEFAULT_BRIGHTNESS_SETTING, |
153 | sc606regBval=DEFAULT_BRIGHTNESS_SETTING, | 154 | sc606regBval=DEFAULT_BRIGHTNESS_SETTING, |
154 | sc606regCval=DEFAULT_BRIGHTNESS_SETTING, | 155 | sc606regCval=DEFAULT_BRIGHTNESS_SETTING, |
155 | sc606regCONFval=3; | 156 | sc606regCONFval=0x03; |
156 | 157 | ||
157 | static bool sc606_changed=true; | 158 | static bool sc606_changed=false; |
158 | 159 | ||
159 | if(sc606_changed==false) | 160 | if(sc606_changed==false) |
160 | { | 161 | { |
@@ -174,9 +175,9 @@ static void led_control_service(void) | |||
174 | backlight_control = BACKLIGHT_CONTROL_IDLE; | 175 | backlight_control = BACKLIGHT_CONTROL_IDLE; |
175 | break; | 176 | break; |
176 | case BACKLIGHT_CONTROL_SET: | 177 | case BACKLIGHT_CONTROL_SET: |
177 | sc606regAval=backlight_brightness; | ||
178 | sc606_changed=true; | 178 | sc606_changed=true; |
179 | backlight_control = BACKLIGHT_CONTROL_ON; | 179 | sc606regAval=backlight_brightness; |
180 | backlight_control = BACKLIGHT_CONTROL_IDLE; | ||
180 | break; | 181 | break; |
181 | case BACKLIGHT_CONTROL_FADE: | 182 | case BACKLIGHT_CONTROL_FADE: |
182 | /* Was this mode set while the backlight is already on/off? */ | 183 | /* Was this mode set while the backlight is already on/off? */ |
@@ -212,24 +213,25 @@ static void led_control_service(void) | |||
212 | case BUTTONLIGHT_CONTROL_OFF: | 213 | case BUTTONLIGHT_CONTROL_OFF: |
213 | sc606_changed=true; | 214 | sc606_changed=true; |
214 | sc606regCONFval &= ~0x3C; | 215 | sc606regCONFval &= ~0x3C; |
216 | sc606regBval=sc606regCval=0; | ||
215 | buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; | 217 | buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; |
216 | break; | 218 | break; |
217 | case BUTTONLIGHT_CONTROL_ON: | 219 | case BUTTONLIGHT_CONTROL_ON: |
218 | sc606_changed=true; | 220 | sc606_changed=true; |
219 | sc606regBval=sc606regCval=buttonlight_brightness; | ||
220 | sc606regCONFval |= 0x3C; | 221 | sc606regCONFval |= 0x3C; |
222 | sc606regBval=sc606regCval=buttonlight_brightness; | ||
221 | buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; | 223 | buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; |
222 | break; | 224 | break; |
223 | case BUTTONLIGHT_CONTROL_SET: | 225 | case BUTTONLIGHT_CONTROL_SET: |
224 | sc606regBval=sc606regCval=buttonlight_brightness; | ||
225 | sc606_changed=true; | 226 | sc606_changed=true; |
226 | buttonlight_control = BUTTONLIGHT_CONTROL_ON; | 227 | sc606regBval=sc606regCval=buttonlight_brightness; |
228 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; | ||
227 | break; | 229 | break; |
228 | case BUTTONLIGHT_CONTROL_FADE: | 230 | case BUTTONLIGHT_CONTROL_FADE: |
229 | /* Was this mode set while the button light is already on/off? */ | 231 | /* Was this mode set while the button light is already on/off? */ |
230 | if(buttonlight_target==sc606regBval) | 232 | if(buttonlight_target==sc606regBval) |
231 | { | 233 | { |
232 | buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; | 234 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; |
233 | break; | 235 | break; |
234 | } | 236 | } |
235 | sc606_changed=true; | 237 | sc606_changed=true; |
@@ -243,7 +245,7 @@ static void led_control_service(void) | |||
243 | else | 245 | else |
244 | { | 246 | { |
245 | sc606regCval=--sc606regBval; | 247 | sc606regCval=--sc606regBval; |
246 | if(buttonlight_target==sc606regBval) | 248 | if(sc606regBval==0) |
247 | buttonlight_control = BUTTONLIGHT_CONTROL_OFF; | 249 | buttonlight_control = BUTTONLIGHT_CONTROL_OFF; |
248 | } | 250 | } |
249 | 251 | ||
@@ -294,20 +296,25 @@ static void led_control_service(void) | |||
294 | 296 | ||
295 | void __button_backlight_on(void) | 297 | void __button_backlight_on(void) |
296 | { | 298 | { |
297 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; | 299 | buttonlight_control = BUTTONLIGHT_CONTROL_ON; |
298 | buttonlight_target = buttonlight_brightness; | ||
299 | if(buttonlight_brightness==0) | ||
300 | buttonlight_control = BUTTONLIGHT_CONTROL_ON; | ||
301 | else | ||
302 | buttonlight_control = BUTTONLIGHT_CONTROL_FADE; | ||
303 | } | 300 | } |
304 | 301 | ||
305 | void __button_backlight_off(void) | 302 | void __button_backlight_off(void) |
306 | { | 303 | { |
304 | buttonlight_control = BUTTONLIGHT_CONTROL_OFF; | ||
305 | } | ||
306 | |||
307 | void __button_backlight_dim(bool dim_now) | ||
308 | { | ||
307 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; | 309 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; |
308 | buttonlight_target = 0; | 310 | buttonlight_target = (dim_now == true) ? 0 : buttonlight_brightness; |
309 | if(buttonlight_brightness==0) | 311 | if(buttonlight_target==0 && buttonlight_brightness==0) |
310 | buttonlight_control = BUTTONLIGHT_CONTROL_OFF; | 312 | { |
313 | if(dim_now == false) | ||
314 | buttonlight_control = BUTTONLIGHT_CONTROL_ON; | ||
315 | else | ||
316 | buttonlight_control = BUTTONLIGHT_CONTROL_OFF; | ||
317 | } | ||
311 | else | 318 | else |
312 | buttonlight_control = BUTTONLIGHT_CONTROL_FADE; | 319 | buttonlight_control = BUTTONLIGHT_CONTROL_FADE; |
313 | } | 320 | } |
@@ -330,7 +337,6 @@ void __backlight_dim(bool dim_now) | |||
330 | 337 | ||
331 | void __buttonlight_set_brightness(int brightness) | 338 | void __buttonlight_set_brightness(int brightness) |
332 | { | 339 | { |
333 | /* stop the interrupt from messing us up */ | ||
334 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; | 340 | buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; |
335 | buttonlight_brightness = brightness; | 341 | buttonlight_brightness = brightness; |
336 | buttonlight_control = BUTTONLIGHT_CONTROL_SET; | 342 | buttonlight_control = BUTTONLIGHT_CONTROL_SET; |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h index 86b01a7c50..c51d8f20f0 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h +++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h | |||
@@ -53,5 +53,6 @@ void __button_backlight_off(void); | |||
53 | 53 | ||
54 | /* true: backlight fades off - false: backlight fades on */ | 54 | /* true: backlight fades off - false: backlight fades on */ |
55 | void __backlight_dim(bool dim); | 55 | void __backlight_dim(bool dim); |
56 | void __button_backlight_dim(bool dim_now); | ||
56 | 57 | ||
57 | #endif | 58 | #endif |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c index eb2ffb5238..a8a86479ab 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c | |||
@@ -60,7 +60,8 @@ void power_off(void) | |||
60 | { | 60 | { |
61 | /* turn off backlight and wait for 1 second */ | 61 | /* turn off backlight and wait for 1 second */ |
62 | __backlight_off(); | 62 | __backlight_off(); |
63 | sleep(HZ/2); | 63 | __button_backlight_off(); |
64 | sleep(HZ); | ||
64 | /* set SLEEP bit to on in CLKCON to turn off */ | 65 | /* set SLEEP bit to on in CLKCON to turn off */ |
65 | CLKCON |=(1<<3); | 66 | CLKCON |=(1<<3); |
66 | } | 67 | } |