diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2009-02-09 07:01:46 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2009-02-09 07:01:46 +0000 |
commit | f7a06dd6fc2022876c392e186bcf5037dd5a34bf (patch) | |
tree | 98818e2c6dfef6e475158f9f3b54cbf3630ed5d4 | |
parent | 9f5687c9e633dcc2caef7351747af9ee86689590 (diff) | |
download | rockbox-f7a06dd6fc2022876c392e186bcf5037dd5a34bf.tar.gz rockbox-f7a06dd6fc2022876c392e186bcf5037dd5a34bf.zip |
Gigabeat S: Try to save some power. Implement lcd_enable and turn off LCD DMA channel when backlight is off.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19953 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/export/config-gigabeat-s.h | 5 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c | 4 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c | 35 |
3 files changed, 32 insertions, 12 deletions
diff --git a/firmware/export/config-gigabeat-s.h b/firmware/export/config-gigabeat-s.h index e5654fe0a2..f55a4fd382 100644 --- a/firmware/export/config-gigabeat-s.h +++ b/firmware/export/config-gigabeat-s.h | |||
@@ -104,11 +104,10 @@ | |||
104 | * turned off */ | 104 | * turned off */ |
105 | #define LCD_SLEEP_TIMEOUT (2*HZ) | 105 | #define LCD_SLEEP_TIMEOUT (2*HZ) |
106 | 106 | ||
107 | #ifndef BOOTLOADER | ||
108 | #if 0 | ||
109 | /* Define this if your LCD can be enabled/disabled */ | 107 | /* Define this if your LCD can be enabled/disabled */ |
110 | #define HAVE_LCD_ENABLE | 108 | #define HAVE_LCD_ENABLE |
111 | #endif | 109 | |
110 | #ifndef BOOTLOADER | ||
112 | 111 | ||
113 | #define HAVE_BACKLIGHT_BRIGHTNESS | 112 | #define HAVE_BACKLIGHT_BRIGHTNESS |
114 | 113 | ||
diff --git a/firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c b/firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c index 8b4459c3a9..8f75b72f58 100644 --- a/firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include "backlight.h" | 23 | #include "backlight.h" |
24 | #include "mc13783.h" | 24 | #include "mc13783.h" |
25 | #include "backlight-target.h" | 25 | #include "backlight-target.h" |
26 | #include "lcd.h" | ||
26 | 27 | ||
27 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS | 28 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS |
28 | /* Table that uses combinations of current level and pwm fraction to get | 29 | /* Table that uses combinations of current level and pwm fraction to get |
@@ -129,6 +130,9 @@ void _backlight_on(void) | |||
129 | #ifdef HAVE_LCD_SLEEP | 130 | #ifdef HAVE_LCD_SLEEP |
130 | backlight_lcd_sleep_countdown(false); /* stop counter */ | 131 | backlight_lcd_sleep_countdown(false); /* stop counter */ |
131 | #endif | 132 | #endif |
133 | #ifdef HAVE_LCD_ENABLE | ||
134 | lcd_enable(true); | ||
135 | #endif | ||
132 | 136 | ||
133 | /* Set/clear LEDRAMPUP bit, clear LEDRAMPDOWN bit, | 137 | /* Set/clear LEDRAMPUP bit, clear LEDRAMPDOWN bit, |
134 | * Ensure LED supply is on. */ | 138 | * Ensure LED supply is on. */ |
diff --git a/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c b/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c index c353380221..47834b3b19 100644 --- a/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c | |||
@@ -30,8 +30,8 @@ | |||
30 | #define MAIN_LCD_IDMAC_CHANNEL 14 | 30 | #define MAIN_LCD_IDMAC_CHANNEL 14 |
31 | #define LCDADDR(x, y) (&lcd_framebuffer[(y)][(x)]) | 31 | #define LCDADDR(x, y) (&lcd_framebuffer[(y)][(x)]) |
32 | 32 | ||
33 | static volatile bool lcd_on = true; | 33 | static bool lcd_on = true; |
34 | volatile bool lcd_poweroff = false; | 34 | static bool lcd_powered = true; |
35 | static unsigned lcd_yuv_options = 0; | 35 | static unsigned lcd_yuv_options = 0; |
36 | /* | 36 | /* |
37 | ** This is imported from lcd-16bit.c | 37 | ** This is imported from lcd-16bit.c |
@@ -98,24 +98,41 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | #ifdef HAVE_LCD_SLEEP | ||
102 | void lcd_sleep(void) | 101 | void lcd_sleep(void) |
103 | { | 102 | { |
104 | _backlight_lcd_sleep(); | 103 | if (lcd_powered) |
104 | { | ||
105 | lcd_enable(false); | ||
106 | lcd_powered = false; | ||
107 | IPU_IDMAC_CHA_EN &= ~(1ul << MAIN_LCD_IDMAC_CHANNEL); | ||
108 | _backlight_lcd_sleep(); | ||
109 | } | ||
105 | } | 110 | } |
106 | #endif /* HAVE_LCD_SLEEP */ | ||
107 | 111 | ||
108 | #if 0 | ||
109 | void lcd_enable(bool state) | 112 | void lcd_enable(bool state) |
110 | { | 113 | { |
111 | (void)state; | 114 | if (state == lcd_on) |
115 | return; | ||
116 | |||
117 | if (state) | ||
118 | { | ||
119 | IPU_IDMAC_CHA_EN |= 1ul << MAIN_LCD_IDMAC_CHANNEL; | ||
120 | sleep(HZ/50); | ||
121 | lcd_powered = true; | ||
122 | lcd_on = true; | ||
123 | lcd_update(); | ||
124 | lcd_call_enable_hook(); | ||
125 | } | ||
126 | else | ||
127 | { | ||
128 | lcd_on = false; | ||
129 | } | ||
112 | } | 130 | } |
113 | 131 | ||
114 | bool lcd_enabled(void) | 132 | bool lcd_enabled(void) |
115 | { | 133 | { |
116 | return true; | 134 | return lcd_on; |
117 | } | 135 | } |
118 | #endif | ||
119 | 136 | ||
120 | /* Update the display. | 137 | /* Update the display. |
121 | This must be called after all other LCD functions that change the display. */ | 138 | This must be called after all other LCD functions that change the display. */ |