diff options
author | Steve Gotthardt <gotthardt@rockbox.org> | 2007-01-04 09:32:49 +0000 |
---|---|---|
committer | Steve Gotthardt <gotthardt@rockbox.org> | 2007-01-04 09:32:49 +0000 |
commit | 775c901f765e864a063190203f55ed545e747698 (patch) | |
tree | 69cd0c4c635f1769572ac1cf4a3aa379a53018e5 /firmware | |
parent | 6d101042c62aa7ac204624e4031fed11cded13d1 (diff) | |
download | rockbox-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')
-rw-r--r-- | firmware/target/arm/gigabeat/meg-fx/backlight-meg-fx.c | 105 | ||||
-rw-r--r-- | firmware/target/arm/gigabeat/meg-fx/backlight-target.h | 2 |
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 | |||
28 | static void backlight_fade_service(void); | ||
29 | static unsigned short backlight_brightness; | ||
30 | static unsigned short backlight_fading; | ||
31 | static unsigned short backlight_current; | ||
32 | static unsigned short backlight_target; | ||
33 | static unsigned short time_til_fade; | ||
34 | static unsigned short fade_interval; | ||
35 | |||
36 | |||
27 | static int confval = SC606_LOW_FREQ; | 37 | static int confval = SC606_LOW_FREQ; |
28 | 38 | ||
39 | |||
40 | |||
29 | void __backlight_init(void) | 41 | void __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 | |||
33 | void __backlight_on(void) | 54 | void __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 | |||
39 | void __backlight_off(void) | 62 | void __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 */ | ||
45 | void __backlight_set_brightness(int brightness) | 71 | void __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 | |||
89 | static 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 | |||
122 | void __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); | |||
24 | void __backlight_off(void); | 24 | void __backlight_off(void); |
25 | void __backlight_set_brightness(int val); | 25 | void __backlight_set_brightness(int val); |
26 | 26 | ||
27 | void __backlight_dim(bool dim); | ||
28 | |||
27 | #endif | 29 | #endif |