diff options
Diffstat (limited to 'firmware/target')
4 files changed, 55 insertions, 39 deletions
diff --git a/firmware/target/arm/iriver/h10/backlight-h10.c b/firmware/target/arm/iriver/h10/backlight-h10.c index 8033aebf71..5d211d26bf 100644 --- a/firmware/target/arm/iriver/h10/backlight-h10.c +++ b/firmware/target/arm/iriver/h10/backlight-h10.c | |||
@@ -25,8 +25,10 @@ | |||
25 | void _backlight_on(void) | 25 | void _backlight_on(void) |
26 | { | 26 | { |
27 | #ifdef HAVE_LCD_SLEEP | 27 | #ifdef HAVE_LCD_SLEEP |
28 | lcd_enable(true); | 28 | backlight_lcd_sleep_countdown(false); /* stop counter */ |
29 | _lcd_sleep_timer = 0; | 29 | #endif |
30 | #ifdef HAVE_LCD_ENABLE | ||
31 | lcd_enable(true); /* power on lcd + visible display */ | ||
30 | #endif | 32 | #endif |
31 | GPIO_SET_BITWISE(GPIOL_OUTPUT_VAL, 0x20); | 33 | GPIO_SET_BITWISE(GPIOL_OUTPUT_VAL, 0x20); |
32 | } | 34 | } |
@@ -34,15 +36,10 @@ void _backlight_on(void) | |||
34 | void _backlight_off(void) | 36 | void _backlight_off(void) |
35 | { | 37 | { |
36 | GPIO_CLEAR_BITWISE(GPIOL_OUTPUT_VAL, 0x20); | 38 | GPIO_CLEAR_BITWISE(GPIOL_OUTPUT_VAL, 0x20); |
39 | #ifdef HAVE_LCD_ENABLE | ||
40 | lcd_enable(false); /* power off visible display */ | ||
41 | #endif | ||
37 | #ifdef HAVE_LCD_SLEEP | 42 | #ifdef HAVE_LCD_SLEEP |
38 | lcd_enable(false); | 43 | backlight_lcd_sleep_countdown(true); /* start countdown */ |
39 | /* Start LCD sleep countdown */ | ||
40 | if (_lcd_sleep_timeout < 0) | ||
41 | { | ||
42 | _lcd_sleep_timer = 0; /* Setting == Always */ | ||
43 | lcd_sleep(); | ||
44 | } | ||
45 | else | ||
46 | _lcd_sleep_timer = _lcd_sleep_timeout; | ||
47 | #endif | 44 | #endif |
48 | } | 45 | } |
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 076c06b0d8..4fb66549cc 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/backlight-meg-fx.c | |||
@@ -314,11 +314,6 @@ static void led_control_service(void) | |||
314 | sc606_control=SC606_CONTROL_IDLE; | 314 | sc606_control=SC606_CONTROL_IDLE; |
315 | break; | 315 | break; |
316 | } | 316 | } |
317 | |||
318 | if(sc606regCONFval&0x03) | ||
319 | lcd_enable(true); | ||
320 | else | ||
321 | lcd_enable(false); | ||
322 | } | 317 | } |
323 | #endif /* BOOTLOADER */ | 318 | #endif /* BOOTLOADER */ |
324 | 319 | ||
@@ -340,13 +335,22 @@ static void __backlight_dim(bool dim_now) | |||
340 | 335 | ||
341 | void _backlight_on(void) | 336 | void _backlight_on(void) |
342 | { | 337 | { |
343 | lcd_enable(true); | 338 | #ifdef HAVE_LCD_SLEEP |
339 | backlight_lcd_sleep_countdown(false); /* stop counter */ | ||
340 | #endif | ||
341 | #ifdef HAVE_LCD_ENABLE | ||
342 | lcd_enable(true); /* power on lcd + visible display */ | ||
343 | #endif | ||
344 | __backlight_dim(false); | 344 | __backlight_dim(false); |
345 | } | 345 | } |
346 | 346 | ||
347 | void _backlight_off(void) | 347 | void _backlight_off(void) |
348 | { | 348 | { |
349 | __backlight_dim(true); | 349 | __backlight_dim(true); |
350 | #ifdef HAVE_LCD_SLEEP | ||
351 | /* Disable lcd after fade completes (when lcd_sleep timeout expires) */ | ||
352 | backlight_lcd_sleep_countdown(true); /* start countdown */ | ||
353 | #endif | ||
350 | } | 354 | } |
351 | 355 | ||
352 | static inline void __buttonlight_on(void) | 356 | static inline void __buttonlight_on(void) |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c index 37ac903418..5c268f42b8 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c | |||
@@ -26,7 +26,8 @@ | |||
26 | 26 | ||
27 | #define LCDADDR(x, y) (&lcd_framebuffer[(y)][(x)]) | 27 | #define LCDADDR(x, y) (&lcd_framebuffer[(y)][(x)]) |
28 | 28 | ||
29 | static volatile bool lcd_on = true; | 29 | static bool lcd_on = true; |
30 | static bool lcd_powered = true; | ||
30 | static unsigned lcd_yuv_options = 0; | 31 | static unsigned lcd_yuv_options = 0; |
31 | /* | 32 | /* |
32 | ** This is imported from lcd-16bit.c | 33 | ** This is imported from lcd-16bit.c |
@@ -174,6 +175,8 @@ void LCD_SPI_powerdown(void) | |||
174 | 0,0x04,1,0x00 | 175 | 0,0x04,1,0x00 |
175 | }; | 176 | }; |
176 | 177 | ||
178 | lcd_powered = false; | ||
179 | |||
177 | LCD_SPI_start(); | 180 | LCD_SPI_start(); |
178 | 181 | ||
179 | LCD_SPI_send(powerdncmd, sizeof(powerdncmd)); | 182 | LCD_SPI_send(powerdncmd, sizeof(powerdncmd)); |
@@ -198,6 +201,8 @@ void LCD_SPI_powerup(void) | |||
198 | LCD_SPI_send(powerupcmd, sizeof(powerupcmd)); | 201 | LCD_SPI_send(powerupcmd, sizeof(powerupcmd)); |
199 | 202 | ||
200 | LCD_SPI_stop(); | 203 | LCD_SPI_stop(); |
204 | |||
205 | lcd_powered = true; | ||
201 | } | 206 | } |
202 | 207 | ||
203 | void LCD_SPI_init(void) | 208 | void LCD_SPI_init(void) |
@@ -266,23 +271,40 @@ void lcd_init_device(void) | |||
266 | LCD_SPI_init(); | 271 | LCD_SPI_init(); |
267 | } | 272 | } |
268 | 273 | ||
274 | void lcd_sleep(void) | ||
275 | { | ||
276 | if (lcd_powered) | ||
277 | { | ||
278 | /* "not powered" implies "disabled" */ | ||
279 | if (lcd_on) | ||
280 | lcd_enable(false); | ||
281 | |||
282 | LCD_SPI_powerdown(); | ||
283 | } | ||
284 | } | ||
285 | |||
269 | void lcd_enable(bool state) | 286 | void lcd_enable(bool state) |
270 | { | 287 | { |
288 | if (state == lcd_on) | ||
289 | return; | ||
290 | |||
271 | if(state) | 291 | if(state) |
272 | { | 292 | { |
273 | if(!lcd_on) | 293 | /* "enabled" implies "powered" */ |
294 | if (!lcd_powered) | ||
274 | { | 295 | { |
275 | lcd_on = true; | ||
276 | lcd_update(); | ||
277 | LCD_SPI_powerup(); | 296 | LCD_SPI_powerup(); |
297 | /* Wait long enough for a frame to be written - yes, it | ||
298 | * takes awhile. */ | ||
299 | sleep(HZ/5); | ||
278 | } | 300 | } |
301 | |||
302 | lcd_on = true; | ||
303 | lcd_update(); | ||
279 | } | 304 | } |
280 | else | 305 | else |
281 | { | 306 | { |
282 | if(lcd_on) { | 307 | lcd_on = false; |
283 | lcd_on = false; | ||
284 | LCD_SPI_powerdown(); | ||
285 | } | ||
286 | } | 308 | } |
287 | } | 309 | } |
288 | 310 | ||
diff --git a/firmware/target/arm/sandisk/backlight-c200_e200.c b/firmware/target/arm/sandisk/backlight-c200_e200.c index 016751121e..aaec8cf007 100644 --- a/firmware/target/arm/sandisk/backlight-c200_e200.c +++ b/firmware/target/arm/sandisk/backlight-c200_e200.c | |||
@@ -38,11 +38,11 @@ void _backlight_set_brightness(int brightness) | |||
38 | 38 | ||
39 | void _backlight_on(void) | 39 | void _backlight_on(void) |
40 | { | 40 | { |
41 | #ifdef HAVE_LCD_ENABLE | 41 | #ifdef HAVE_LCD_SLEEP |
42 | lcd_enable(true); /* power on lcd */ | 42 | backlight_lcd_sleep_countdown(false); /* stop counter */ |
43 | #endif | 43 | #endif |
44 | #if defined(HAVE_LCD_SLEEP) && !defined(BOOTLOADER) | 44 | #ifdef HAVE_LCD_ENABLE |
45 | _lcd_sleep_timer = 0; /* LCD should be awake already */ | 45 | lcd_enable(true); /* power on lcd + visible display */ |
46 | #endif | 46 | #endif |
47 | pp_i2c_send(AS3514_I2C_ADDR, AS3514_DCDC15, backlight_brightness); | 47 | pp_i2c_send(AS3514_I2C_ADDR, AS3514_DCDC15, backlight_brightness); |
48 | } | 48 | } |
@@ -51,17 +51,10 @@ void _backlight_off(void) | |||
51 | { | 51 | { |
52 | pp_i2c_send(AS3514_I2C_ADDR, AS3514_DCDC15, 0x0); | 52 | pp_i2c_send(AS3514_I2C_ADDR, AS3514_DCDC15, 0x0); |
53 | #ifdef HAVE_LCD_ENABLE | 53 | #ifdef HAVE_LCD_ENABLE |
54 | lcd_enable(false); /* power off lcd */ | 54 | lcd_enable(false); /* power off visible display */ |
55 | #endif | 55 | #endif |
56 | #if defined(HAVE_LCD_SLEEP) && !defined(BOOTLOADER) | 56 | #ifdef HAVE_LCD_SLEEP |
57 | /* Start LCD sleep countdown */ | 57 | backlight_lcd_sleep_countdown(true); /* start countdown */ |
58 | if (_lcd_sleep_timeout < 0) | ||
59 | { | ||
60 | _lcd_sleep_timer = 0; /* Setting == Always */ | ||
61 | lcd_sleep(); | ||
62 | } | ||
63 | else | ||
64 | _lcd_sleep_timer = _lcd_sleep_timeout; | ||
65 | #endif | 58 | #endif |
66 | } | 59 | } |
67 | 60 | ||