summaryrefslogtreecommitdiff
path: root/firmware/target/arm/gigabeat
diff options
context:
space:
mode:
authorSteve Gotthardt <gotthardt@rockbox.org>2007-01-04 09:32:49 +0000
committerSteve Gotthardt <gotthardt@rockbox.org>2007-01-04 09:32:49 +0000
commit775c901f765e864a063190203f55ed545e747698 (patch)
tree69cd0c4c635f1769572ac1cf4a3aa379a53018e5 /firmware/target/arm/gigabeat
parent6d101042c62aa7ac204624e4031fed11cded13d1 (diff)
downloadrockbox-775c901f765e864a063190203f55ed545e747698.tar.gz
rockbox-775c901f765e864a063190203f55ed545e747698.zip
Implementing backlight fade for the Gigabeat. Note that fading is the normal behaviour. Settings for LCD off and fade settings will be coming.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11899 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/gigabeat')
-rw-r--r--firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c105
-rw-r--r--firmware/target/arm/gigabeat/meg-fx/backlight-target.h2
2 files changed, 105 insertions, 2 deletions
diff --git a/firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c b/firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c
index ba98dba7d1..12a5b55a3c 100644
--- a/firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c
+++ b/firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c
@@ -24,27 +24,128 @@
24#include "lcd.h" 24#include "lcd.h"
25#include "sc606-meg-fx.h" 25#include "sc606-meg-fx.h"
26 26
27
28static void backlight_fade_service(void);
29static unsigned short backlight_brightness;
30static unsigned short backlight_fading;
31static unsigned short backlight_current;
32static unsigned short backlight_target;
33static unsigned short time_til_fade;
34static unsigned short fade_interval;
35
36
27static int confval = SC606_LOW_FREQ; 37static int confval = SC606_LOW_FREQ;
28 38
39
40
29void __backlight_init(void) 41void __backlight_init(void)
30{ 42{
43 backlight_fading = false;
44
45 /* current is from settings */
46 backlight_current = 50;
47
48 /* put the fade tick on the list */
49 tick_add_task(backlight_fade_service);
31} 50}
32 51
52
53
33void __backlight_on(void) 54void __backlight_on(void)
34{ 55{
35 confval |= (SC606_LED_A1 | SC606_LED_A2); 56 confval |= (SC606_LED_A1 | SC606_LED_A2);
36 sc606_write(SC606_REG_CONF, confval); 57 sc606_write(SC606_REG_CONF, confval);
37} 58}
38 59
60
61
39void __backlight_off(void) 62void __backlight_off(void)
40{ 63{
41 confval &= ~(SC606_LED_A1 | SC606_LED_A2); 64 confval &= ~(SC606_LED_A1 | SC606_LED_A2);
42 sc606_write(SC606_REG_CONF, confval); 65 sc606_write(SC606_REG_CONF, confval);
43} 66}
44 67
68
69
70/* Assumes that the backlight has been initialized */
45void __backlight_set_brightness(int brightness) 71void __backlight_set_brightness(int brightness)
46{ 72{
73 /* stop the interrupt from messing us up */
74 backlight_fading = false;
75
76 backlight_brightness = brightness;
77
78 /* only set the brightness if it is different from the current */
79 if (backlight_brightness != backlight_current)
80 {
81 backlight_target = brightness;
82 fade_interval = time_til_fade = 1;
83 backlight_fading = true;
84 }
85}
86
87
88
89static void backlight_fade_service(void)
90{
91 if (!backlight_fading || --time_til_fade) return;
92
93 if (backlight_target > backlight_current)
94 {
95 backlight_current++;
96 }
97 else
98 {
99 backlight_current--;
100 }
101
47 /* The SC606 LED driver can set the brightness in 64 steps */ 102 /* The SC606 LED driver can set the brightness in 64 steps */
48 brightness &= 0x3F; 103 sc606_write(SC606_REG_A, backlight_current);
49 sc606_write(SC606_REG_A, brightness); 104
105
106 /* have we hit the target? */
107 if (backlight_current == backlight_target)
108 {
109 backlight_fading = false;
110 }
111 else
112 {
113 time_til_fade = fade_interval;
114 }
115
116}
117
118
119
120
121
122void __backlight_dim(bool dim_now)
123{
124 int target;
125
126 /* dont let the interrupt tick happen */
127 backlight_fading = false;
128
129 target = (dim_now == true) ? 0 : backlight_brightness;
130
131 /* only try and fade if the target is different */
132 if (backlight_current != target)
133 {
134 backlight_target = target;
135
136 if (backlight_current > backlight_target)
137 {
138 fade_interval = 4;
139 }
140 else
141 {
142 fade_interval = 1;
143 }
144
145 /* let the tick work */
146 time_til_fade = fade_interval;
147 backlight_fading = true;
148 }
149
50} 150}
151
diff --git a/firmware/target/arm/gigabeat/meg-fx/backlight-target.h b/firmware/target/arm/gigabeat/meg-fx/backlight-target.h
index e72e863ebc..c53d00d8de 100644
--- a/firmware/target/arm/gigabeat/meg-fx/backlight-target.h
+++ b/firmware/target/arm/gigabeat/meg-fx/backlight-target.h
@@ -24,4 +24,6 @@ void __backlight_on(void);
24void __backlight_off(void); 24void __backlight_off(void);
25void __backlight_set_brightness(int val); 25void __backlight_set_brightness(int val);
26 26
27void __backlight_dim(bool dim);
28
27#endif 29#endif