summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/iriver/h10
diff options
context:
space:
mode:
authorBarry Wardell <rockbox@barrywardell.net>2006-09-28 12:06:56 +0000
committerBarry Wardell <rockbox@barrywardell.net>2006-09-28 12:06:56 +0000
commit03aa9c9feac4b74ae4cc82835d6c0cb92decb997 (patch)
tree5a963bbdbbc39eb20816a2f8bcf15502021a0b93 /firmware/target/arm/iriver/h10
parentb2269cce949c217453facfbc3eecadd7ea5ef9bc (diff)
downloadrockbox-03aa9c9feac4b74ae4cc82835d6c0cb92decb997.tar.gz
rockbox-03aa9c9feac4b74ae4cc82835d6c0cb92decb997.tar.bz2
rockbox-03aa9c9feac4b74ae4cc82835d6c0cb92decb997.zip
Apply Mike Sevakis' recent sleep/contrast fixes for the X5 LCD driver to the H10 20GB LCD driver. With this fix, sleeping the LCD on the H10 20GB now works as it should so enable it as an option to save extra battery.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11085 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/iriver/h10')
-rw-r--r--firmware/target/arm/iriver/h10/lcd-h10_20gb.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
index 834149d2a5..0eaa172c40 100644
--- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
+++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
@@ -37,6 +37,8 @@ static bool display_on;
static int y_offset;
/* Reverse flag. Must be remembered when display is turned off. */
static unsigned short disp_control_rev;
+/* Contrast setting << 8 */
+static int lcd_contrast;
/* Forward declarations */
static void lcd_display_off(void);
@@ -138,7 +140,13 @@ void lcd_set_contrast(int val)
else if (val > 30)
val = 30;
- lcd_write_reg(R_POWER_CONTROL5, 0x2018 + (val<<8));
+ lcd_contrast = val << 8;
+
+ if (!power_on)
+ return;
+
+ /* VCOMG=1, VDV4-0=xxxxx, VCM4-0=11000 */
+ lcd_write_reg(R_POWER_CONTROL5, 0x2018 | lcd_contrast);
}
void lcd_set_invert_display(bool yesno)
@@ -184,6 +192,7 @@ void lcd_init_device(void)
display_on = true;
y_offset = 0;
disp_control_rev = 0x0004;
+ lcd_contrast = DEFAULT_CONTRAST_SETTING << 8;
}
static void lcd_power_on(void)
@@ -206,14 +215,14 @@ static void lcd_power_on(void)
lcd_write_reg(R_POWER_CONTROL4, 0x0401);
/* CAD=1 */
lcd_write_reg(R_POWER_CONTROL2, 0x8000);
- /* VCOMG=0, VDV4-0=10011 (19), VCM4-0=11000 */
- lcd_write_reg(R_POWER_CONTROL5, 0x1318);
+ /* VCOMG=0, VDV4-0=xxxxx (19), VCM4-0=11000 */
+ lcd_write_reg(R_POWER_CONTROL5, 0x0018 | lcd_contrast);
/* Instruction (2) for power setting; BT2-0, DC2-0, AP2-0 */
/* BT2-0=000, DC2-0=001, AP2-0=011, SLP=0, STB=0 */
lcd_write_reg(R_POWER_CONTROL1, 0x002c);
/* Instruction (3) for power setting; VCOMG = "1" */
- /* VCOMG=1, VDV4-0=10011 (19), VCM4-0=11000 */
- lcd_write_reg(R_POWER_CONTROL5, 0x3318);
+ /* VCOMG=1, VDV4-0=xxxxx (19), VCM4-0=11000 */
+ lcd_write_reg(R_POWER_CONTROL5, 0x2018 | lcd_contrast);
/* 40ms or more; time for step-up circuits 1,2 to stabilize */
sleep(HZ/25);
@@ -291,7 +300,7 @@ static void lcd_power_off(void)
/* VRL3-0=0100, PON=0, VRH3-0=0001 */
lcd_write_reg(R_POWER_CONTROL4, 0x0401);
/* VCOMG=0, VDV4-0=10011, VCM4-0=11000 */
- lcd_write_reg(R_POWER_CONTROL5, 0x1318);
+ lcd_write_reg(R_POWER_CONTROL5, 0x0018 | lcd_contrast);
/* Wait 100ms or more */
sleep(HZ/10);