summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s3c2440
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s3c2440')
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c39
1 files changed, 34 insertions, 5 deletions
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 7b7e8518ec..40b093c689 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c
@@ -31,6 +31,7 @@
31 31
32static void led_control_service(void); 32static void led_control_service(void);
33static unsigned short backlight_brightness; 33static unsigned short backlight_brightness;
34static unsigned short buttonlight_brightness;
34static unsigned short backlight_target; 35static unsigned short backlight_target;
35static unsigned short buttonlight_target; 36static unsigned short buttonlight_target;
36 37
@@ -57,6 +58,7 @@ enum buttonlight_states
57 BUTTONLIGHT_CONTROL_IDLE, 58 BUTTONLIGHT_CONTROL_IDLE,
58 BUTTONLIGHT_CONTROL_OFF, 59 BUTTONLIGHT_CONTROL_OFF,
59 BUTTONLIGHT_CONTROL_ON, 60 BUTTONLIGHT_CONTROL_ON,
61 BUTTONLIGHT_CONTROL_SET,
60 BUTTONLIGHT_CONTROL_FADE, 62 BUTTONLIGHT_CONTROL_FADE,
61} buttonlight_control; 63} buttonlight_control;
62 64
@@ -214,10 +216,15 @@ static void led_control_service(void)
214 break; 216 break;
215 case BUTTONLIGHT_CONTROL_ON: 217 case BUTTONLIGHT_CONTROL_ON:
216 sc606_changed=true; 218 sc606_changed=true;
217 sc606regBval=sc606regCval=backlight_brightness; 219 sc606regBval=sc606regCval=buttonlight_brightness;
218 sc606regCONFval |= 0x3C; 220 sc606regCONFval |= 0x3C;
219 buttonlight_control=BUTTONLIGHT_CONTROL_IDLE; 221 buttonlight_control=BUTTONLIGHT_CONTROL_IDLE;
220 break; 222 break;
223 case BUTTONLIGHT_CONTROL_SET:
224 sc606regBval=sc606regCval=buttonlight_brightness;
225 sc606_changed=true;
226 buttonlight_control = BUTTONLIGHT_CONTROL_ON;
227 break;
221 case BUTTONLIGHT_CONTROL_FADE: 228 case BUTTONLIGHT_CONTROL_FADE:
222 /* Was this mode set while the button light is already on/off? */ 229 /* Was this mode set while the button light is already on/off? */
223 if(buttonlight_target==sc606regBval) 230 if(buttonlight_target==sc606regBval)
@@ -288,15 +295,21 @@ static void led_control_service(void)
288void __button_backlight_on(void) 295void __button_backlight_on(void)
289{ 296{
290 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; 297 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE;
291 buttonlight_target = backlight_brightness; 298 buttonlight_target = buttonlight_brightness;
292 buttonlight_control = BUTTONLIGHT_CONTROL_FADE; 299 if(buttonlight_brightness==0)
300 buttonlight_control = BUTTONLIGHT_CONTROL_ON;
301 else
302 buttonlight_control = BUTTONLIGHT_CONTROL_FADE;
293} 303}
294 304
295void __button_backlight_off(void) 305void __button_backlight_off(void)
296{ 306{
297 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; 307 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE;
298 buttonlight_target = 0; 308 buttonlight_target = 0;
299 buttonlight_control = BUTTONLIGHT_CONTROL_FADE; 309 if(buttonlight_brightness==0)
310 buttonlight_control = BUTTONLIGHT_CONTROL_OFF;
311 else
312 buttonlight_control = BUTTONLIGHT_CONTROL_FADE;
300} 313}
301 314
302void __backlight_dim(bool dim_now) 315void __backlight_dim(bool dim_now)
@@ -304,5 +317,21 @@ void __backlight_dim(bool dim_now)
304 /* dont let the interrupt tick happen */ 317 /* dont let the interrupt tick happen */
305 backlight_control = BACKLIGHT_CONTROL_IDLE; 318 backlight_control = BACKLIGHT_CONTROL_IDLE;
306 backlight_target = (dim_now == true) ? 0 : backlight_brightness; 319 backlight_target = (dim_now == true) ? 0 : backlight_brightness;
307 backlight_control = BACKLIGHT_CONTROL_FADE; 320 if(backlight_target==0 && backlight_brightness==0)
321 {
322 if(dim_now == false)
323 backlight_control = BACKLIGHT_CONTROL_ON;
324 else
325 backlight_control = BACKLIGHT_CONTROL_OFF;
326 }
327 else
328 backlight_control = BACKLIGHT_CONTROL_FADE;
329}
330
331void __buttonlight_set_brightness(int brightness)
332{
333 /* stop the interrupt from messing us up */
334 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE;
335 buttonlight_brightness = brightness;
336 buttonlight_control = BUTTONLIGHT_CONTROL_SET;
308} 337}