summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/backlight.c73
1 files changed, 42 insertions, 31 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c
index bf2baeb1c3..7e7f745298 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -44,7 +44,6 @@
44#include "backlight-target.h" 44#include "backlight-target.h"
45#endif 45#endif
46 46
47
48#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ 47#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
49 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) 48 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
50#include "backlight-sw-fading.h" 49#include "backlight-sw-fading.h"
@@ -94,6 +93,8 @@ static inline void _remote_backlight_off(void)
94 93
95#if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) 94#if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT)
96 95
96#define BACKLIGHT_THREAD_TIMEOUT HZ
97
97enum { 98enum {
98 BACKLIGHT_ON, 99 BACKLIGHT_ON,
99 BACKLIGHT_OFF, 100 BACKLIGHT_OFF,
@@ -138,6 +139,7 @@ static int backlight_timeout_plugged = 5*HZ;
138#ifdef HAS_BUTTON_HOLD 139#ifdef HAS_BUTTON_HOLD
139static int backlight_on_button_hold = 0; 140static int backlight_on_button_hold = 0;
140#endif 141#endif
142static void backlight_timeout_handler(void);
141 143
142#ifdef HAVE_BUTTON_LIGHT 144#ifdef HAVE_BUTTON_LIGHT
143static int buttonlight_timer; 145static int buttonlight_timer;
@@ -534,6 +536,16 @@ static void remote_backlight_update_state(void)
534 } 536 }
535} 537}
536#endif /* HAVE_REMOTE_LCD */ 538#endif /* HAVE_REMOTE_LCD */
539static inline void do_backlight_off(void)
540{
541 backlight_timer = 0;
542#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
543 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
544 backlight_setup_fade_down();
545#else
546 _backlight_off();
547#endif /* CONFIG_BACKLIGHT_FADING */
548}
537 549
538void backlight_thread(void) 550void backlight_thread(void)
539{ 551{
@@ -544,11 +556,11 @@ void backlight_thread(void)
544 { 556 {
545#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ 557#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
546 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) 558 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
547 if (backlight_fading_state) 559 if (backlight_fading_state != NOT_FADING)
548 queue_wait_w_tmo(&backlight_queue, &ev, FADE_DELAY); 560 queue_wait_w_tmo(&backlight_queue, &ev, FADE_DELAY);
549 else 561 else
550#endif 562#endif
551 queue_wait(&backlight_queue, &ev); 563 queue_wait_w_tmo(&backlight_queue, &ev, BACKLIGHT_THREAD_TIMEOUT);
552 switch(ev.id) 564 switch(ev.id)
553 { /* These events must always be processed */ 565 { /* These events must always be processed */
554#ifdef _BACKLIGHT_FADE_BOOST 566#ifdef _BACKLIGHT_FADE_BOOST
@@ -585,8 +597,6 @@ void backlight_thread(void)
585#endif /* HAVE_REMOTE_LCD/ HAVE_REMOTE_LCD_AS_MAIN */ 597#endif /* HAVE_REMOTE_LCD/ HAVE_REMOTE_LCD_AS_MAIN */
586#endif /* !SIMULATOR */ 598#endif /* !SIMULATOR */
587 case SYS_USB_CONNECTED: 599 case SYS_USB_CONNECTED:
588 /* Tell the USB thread that we are safe */
589 DEBUGF("backlight_thread got SYS_USB_CONNECTED\n");
590 usb_acknowledge(SYS_USB_CONNECTED_ACK); 600 usb_acknowledge(SYS_USB_CONNECTED_ACK);
591 break; 601 break;
592 602
@@ -623,13 +633,7 @@ void backlight_thread(void)
623 break; 633 break;
624 634
625 case BACKLIGHT_OFF: 635 case BACKLIGHT_OFF:
626 backlight_timer = 0; /* Disable the timeout */ 636 do_backlight_off();
627#if (CONFIG_BACKLIGHT_FADING != BACKLIGHT_FADING_SW_SETTING) \
628 && (CONFIG_BACKLIGHT_FADING != BACKLIGHT_FADING_SW_HW_REG)
629 _backlight_off();
630#else
631 backlight_setup_fade_down();
632#endif /* CONFIG_BACKLIGHT_FADING */
633 break; 637 break;
634#ifdef HAVE_LCD_SLEEP 638#ifdef HAVE_LCD_SLEEP
635 case LCD_SLEEP: 639 case LCD_SLEEP:
@@ -660,51 +664,59 @@ void backlight_thread(void)
660 remote_backlight_update_state(); 664 remote_backlight_update_state();
661#endif 665#endif
662 break; 666 break;
667 case SYS_TIMEOUT:
663#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ 668#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \
664 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) 669 || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG)
665 case SYS_TIMEOUT: 670 if (backlight_fading_state != NOT_FADING)
666 if ((_backlight_fade_step(backlight_fading_state))) 671 {
667 backlight_fading_state = NOT_FADING; /* finished fading */ 672 if ((_backlight_fade_step(backlight_fading_state)))
668 break; 673 backlight_fading_state = NOT_FADING; /* finished fading */
674 }
675 else
669#endif /* CONFIG_BACKLIGHT_FADING */ 676#endif /* CONFIG_BACKLIGHT_FADING */
677 backlight_timeout_handler();
678 break;
670 } 679 }
671 } /* end while */ 680 } /* end while */
672} 681}
673 682
674static void backlight_tick(void) 683static void backlight_timeout_handler(void)
675{ 684{
676 if(backlight_timer) 685 if(backlight_timer > 0)
677 { 686 {
678 if(--backlight_timer == 0) 687 backlight_timer -= BACKLIGHT_THREAD_TIMEOUT;
688 if(backlight_timer <= 0)
679 { 689 {
680 backlight_off(); 690 do_backlight_off();
681 } 691 }
682 } 692 }
683#ifdef HAVE_LCD_SLEEP 693#ifdef HAVE_LCD_SLEEP
684 else if(lcd_sleep_timer) 694 else if(lcd_sleep_timer > 0)
685 { 695 {
686 if(--lcd_sleep_timer == 0) 696 lcd_sleep_timer -= BACKLIGHT_THREAD_TIMEOUT;
697 if(lcd_sleep_timer <= 0)
687 { 698 {
688 /* Queue on bl thread or freeze! */ 699 lcd_sleep();
689 queue_post(&backlight_queue, LCD_SLEEP, 0);
690 } 700 }
691 } 701 }
692#endif /* HAVE_LCD_SLEEP */ 702#endif /* HAVE_LCD_SLEEP */
693#ifdef HAVE_REMOTE_LCD 703#ifdef HAVE_REMOTE_LCD
694 if(remote_backlight_timer) 704 if(remote_backlight_timer > 0)
695 { 705 {
696 if(--remote_backlight_timer == 0) 706 remote_backlight_timer -= BACKLIGHT_THREAD_TIMEOUT;
707 if(remote_backlight_timer <= 0)
697 { 708 {
698 remote_backlight_off(); 709 _remote_backlight_off();
699 } 710 }
700 } 711 }
701#endif /* HAVE_REMOVE_LCD */ 712#endif /* HAVE_REMOVE_LCD */
702#ifdef HAVE_BUTTON_LIGHT 713#ifdef HAVE_BUTTON_LIGHT
703 if (buttonlight_timer) 714 if (buttonlight_timer > 0)
704 { 715 {
705 if (--buttonlight_timer == 0) 716 buttonlight_timer -= BACKLIGHT_THREAD_TIMEOUT;
717 if (buttonlight_timer <= 0)
706 { 718 {
707 buttonlight_off(); 719 _buttonlight_off();
708 } 720 }
709 } 721 }
710#endif /* HAVE_BUTTON_LIGHT */ 722#endif /* HAVE_BUTTON_LIGHT */
@@ -734,7 +746,6 @@ void backlight_init(void)
734 sizeof(backlight_stack), 0, backlight_thread_name 746 sizeof(backlight_stack), 0, backlight_thread_name
735 IF_PRIO(, PRIORITY_USER_INTERFACE) 747 IF_PRIO(, PRIORITY_USER_INTERFACE)
736 IF_COP(, CPU)); 748 IF_COP(, CPU));
737 tick_add_task(backlight_tick);
738} 749}
739 750
740#ifdef BACKLIGHT_DRIVER_CLOSE 751#ifdef BACKLIGHT_DRIVER_CLOSE