summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-02-09 07:01:46 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-02-09 07:01:46 +0000
commitf7a06dd6fc2022876c392e186bcf5037dd5a34bf (patch)
tree98818e2c6dfef6e475158f9f3b54cbf3630ed5d4
parent9f5687c9e633dcc2caef7351747af9ee86689590 (diff)
downloadrockbox-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.h5
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/backlight-imx31.c4
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/lcd-imx31.c35
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
33static volatile bool lcd_on = true; 33static bool lcd_on = true;
34volatile bool lcd_poweroff = false; 34static bool lcd_powered = true;
35static unsigned lcd_yuv_options = 0; 35static 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
102void lcd_sleep(void) 101void 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
109void lcd_enable(bool state) 112void 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
114bool lcd_enabled(void) 132bool 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. */