summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2007-05-10 03:08:47 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2007-05-10 03:08:47 +0000
commit1fc2d91a83f6154c11a203c8da993d647799691a (patch)
tree6a741123d3dfc6d6321741dc60924cf2ea7297f9
parentcbf6a66aca5c1428978ac38e103a488f9c6b011d (diff)
downloadrockbox-1fc2d91a83f6154c11a203c8da993d647799691a.tar.gz
rockbox-1fc2d91a83f6154c11a203c8da993d647799691a.zip
More Gigabeat button light fixes. Settings now work properly, startup does not cause the button lights to flash when disabled. Buttonlights are now shutdown on power off.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13368 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/backlight.c73
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c44
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/backlight-target.h1
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/power-meg-fx.c3
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;
109static int button_backlight_timer; 109static int button_backlight_timer;
110static int button_backlight_timeout = 5*HZ; 110static int button_backlight_timeout = 5*HZ;
111 111
112/* internal interface */
113static 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
124void _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 */
137static 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 */
113void button_backlight_on(void) 152void 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 */
139static 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
149static 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
802void remote_backlight_set_on_button_hold(int index) 815void 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
70bool __backlight_init(void) 70bool __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
295void __button_backlight_on(void) 297void __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
305void __button_backlight_off(void) 302void __button_backlight_off(void)
306{ 303{
304 buttonlight_control = BUTTONLIGHT_CONTROL_OFF;
305}
306
307void __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
331void __buttonlight_set_brightness(int brightness) 338void __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 */
55void __backlight_dim(bool dim); 55void __backlight_dim(bool dim);
56void __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}