summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s3c2440
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2007-11-12 18:49:53 +0000
committerJens Arnold <amiconn@rockbox.org>2007-11-12 18:49:53 +0000
commitef12b3b5c678e4fa44d60061b0c1bc312e589ba1 (patch)
tree4c2572d7bf3d995be16b33fa2e46ccccad34f4ee /firmware/target/arm/s3c2440
parent8537cbf091634efa57768dccff39049afdf6d288 (diff)
downloadrockbox-ef12b3b5c678e4fa44d60061b0c1bc312e589ba1.tar.gz
rockbox-ef12b3b5c678e4fa44d60061b0c1bc312e589ba1.zip
Hardware controlled backlight brightness for iPod Video and Nano, retaining the software PWM fade in/ fade out. * Backlight handling cleanup, getting rid of one layer of 'lowlevelness'. * Use atomic GPIO bit manipulation for PP502x backlight handling.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15599 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s3c2440')
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c70
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h22
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c4
3 files changed, 52 insertions, 44 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 c132be5f69..ee8801f99b 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c
@@ -67,18 +67,8 @@ static unsigned char buttonlight_target;
67 67
68static unsigned short buttonlight_trigger_now; 68static unsigned short buttonlight_trigger_now;
69 69
70void __backlight_on(void)
71{
72 backlight_control = BACKLIGHT_CONTROL_ON;
73}
74
75void __backlight_off(void)
76{
77 backlight_control = BACKLIGHT_CONTROL_OFF;
78}
79
80/* Assumes that the backlight has been initialized */ 70/* Assumes that the backlight has been initialized */
81void __backlight_set_brightness(int brightness) 71void _backlight_set_brightness(int brightness)
82{ 72{
83 /* stop the interrupt from messing us up */ 73 /* stop the interrupt from messing us up */
84 backlight_control = BACKLIGHT_CONTROL_IDLE; 74 backlight_control = BACKLIGHT_CONTROL_IDLE;
@@ -328,17 +318,44 @@ static void led_control_service(void)
328} 318}
329#endif /* BOOTLOADER */ 319#endif /* BOOTLOADER */
330 320
331void __buttonlight_on(void) 321static void __backlight_dim(bool dim_now)
322{
323 /* dont let the interrupt tick happen */
324 backlight_control = BACKLIGHT_CONTROL_IDLE;
325 backlight_target = (dim_now == true) ? 0 : backlight_brightness;
326 if(backlight_target==0 && backlight_brightness==0)
327 {
328 if(dim_now == false)
329 backlight_control = BACKLIGHT_CONTROL_ON;
330 else
331 backlight_control = BACKLIGHT_CONTROL_OFF;
332 }
333 else
334 backlight_control = BACKLIGHT_CONTROL_FADE;
335}
336
337void _backlight_on(void)
338{
339 lcd_enable(true);
340 __backlight_dim(false);
341}
342
343void _backlight_off(void)
344{
345 __backlight_dim(true);
346}
347
348static inline void __buttonlight_on(void)
332{ 349{
333 buttonlight_control = BUTTONLIGHT_CONTROL_ON; 350 buttonlight_control = BUTTONLIGHT_CONTROL_ON;
334} 351}
335 352
336void __buttonlight_off(void) 353static inline void __buttonlight_off(void)
337{ 354{
338 buttonlight_control = BUTTONLIGHT_CONTROL_OFF; 355 buttonlight_control = BUTTONLIGHT_CONTROL_OFF;
339} 356}
340 357
341void __buttonlight_dim(bool dim_now) 358static void __buttonlight_dim(bool dim_now)
342{ 359{
343 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; 360 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE;
344 buttonlight_target = (dim_now == true) ? 0 : buttonlight_brightness; 361 buttonlight_target = (dim_now == true) ? 0 : buttonlight_brightness;
@@ -353,30 +370,27 @@ void __buttonlight_dim(bool dim_now)
353 buttonlight_control = BUTTONLIGHT_CONTROL_FADE; 370 buttonlight_control = BUTTONLIGHT_CONTROL_FADE;
354} 371}
355 372
356void __backlight_dim(bool dim_now) 373void _buttonlight_on(void)
357{ 374{
358 /* dont let the interrupt tick happen */ 375 __buttonlight_dim(false);
359 backlight_control = BACKLIGHT_CONTROL_IDLE; 376}
360 backlight_target = (dim_now == true) ? 0 : backlight_brightness; 377
361 if(backlight_target==0 && backlight_brightness==0) 378void _buttonlight_off(void)
362 { 379{
363 if(dim_now == false) 380 if(_buttonlight_timeout>0)
364 backlight_control = BACKLIGHT_CONTROL_ON; 381 __buttonlight_dim(true);
365 else
366 backlight_control = BACKLIGHT_CONTROL_OFF;
367 }
368 else 382 else
369 backlight_control = BACKLIGHT_CONTROL_FADE; 383 __buttonlight_off();
370} 384}
371 385
372void __buttonlight_set_brightness(int brightness) 386void _buttonlight_set_brightness(int brightness)
373{ 387{
374 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE; 388 buttonlight_control = BUTTONLIGHT_CONTROL_IDLE;
375 buttonlight_brightness = brightness; 389 buttonlight_brightness = brightness;
376 buttonlight_control = BUTTONLIGHT_CONTROL_SET; 390 buttonlight_control = BUTTONLIGHT_CONTROL_SET;
377} 391}
378 392
379bool __backlight_init(void) 393bool _backlight_init(void)
380{ 394{
381 buttonlight_brightness = DEFAULT_BRIGHTNESS_SETTING; 395 buttonlight_brightness = DEFAULT_BRIGHTNESS_SETTING;
382 backlight_brightness = DEFAULT_BRIGHTNESS_SETTING; 396 backlight_brightness = DEFAULT_BRIGHTNESS_SETTING;
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h
index 0589557791..b899cc977c 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h
@@ -41,18 +41,12 @@ void __buttonlight_trigger(void);
41/* See enum buttonlight_mode for available functions */ 41/* See enum buttonlight_mode for available functions */
42void __buttonlight_mode(enum buttonlight_mode mode); 42void __buttonlight_mode(enum buttonlight_mode mode);
43 43
44bool __backlight_init(void); 44bool _backlight_init(void);
45void __backlight_on(void); 45void _backlight_on(void);
46void __backlight_off(void); 46void _backlight_off(void);
47void __backlight_set_brightness(int brightness); 47void _backlight_set_brightness(int brightness);
48 48
49void __buttonlight_set_brightness(int brightness); 49void _buttonlight_set_brightness(int brightness);
50 50void _buttonlight_on(void);
51void __buttonlight_on(void); 51void _buttonlight_off(void);
52void __buttonlight_off(void);
53
54/* true: backlight fades off - false: backlight fades on */
55void __backlight_dim(bool dim);
56void __buttonlight_dim(bool dim_now);
57
58#endif 52#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 ac37908b05..b9da66e025 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c
@@ -63,8 +63,8 @@ bool ide_powered(void)
63void power_off(void) 63void power_off(void)
64{ 64{
65 /* turn off backlight and wait for 1 second */ 65 /* turn off backlight and wait for 1 second */
66 __backlight_off(); 66 _backlight_off();
67 __buttonlight_off(); 67 _buttonlight_off();
68 sleep(HZ); 68 sleep(HZ);
69 /* set SLEEP bit to on in CLKCON to turn off */ 69 /* set SLEEP bit to on in CLKCON to turn off */
70 CLKCON |=(1<<3); 70 CLKCON |=(1<<3);