summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2006-09-17 09:19:50 +0000
committerMichael Sevakis <jethead71@rockbox.org>2006-09-17 09:19:50 +0000
commit69b4e80f2b528648c155e5aa492b889cb01a086e (patch)
tree01918ba0ee713d6693f6b248f8d4228cde62510c
parent815684aced5737a5443da9ba3307d24718d05f3b (diff)
downloadrockbox-69b4e80f2b528648c155e5aa492b889cb01a086e.zip
rockbox-69b4e80f2b528648c155e5aa492b889cb01a086e.tar.gz
rockbox-69b4e80f2b528648c155e5aa492b889cb01a086e.tar.bz2
rockbox-69b4e80f2b528648c155e5aa492b889cb01a086e.tar.xz
x5: No more remote LCD streaks when powering off with remote active. Will not affect hot unplugging of course.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10967 a1c6a512-1295-4272-9138-f99709370657
-rwxr-xr-xfirmware/target/coldfire/iaudio/x5/lcd-remote-target.h1
-rwxr-xr-xfirmware/target/coldfire/iaudio/x5/lcd-remote-x5.c45
-rw-r--r--firmware/target/coldfire/iaudio/x5/power-x5.c2
3 files changed, 29 insertions, 19 deletions
diff --git a/firmware/target/coldfire/iaudio/x5/lcd-remote-target.h b/firmware/target/coldfire/iaudio/x5/lcd-remote-target.h
index 8c20526..783363b 100755
--- a/firmware/target/coldfire/iaudio/x5/lcd-remote-target.h
+++ b/firmware/target/coldfire/iaudio/x5/lcd-remote-target.h
@@ -28,6 +28,7 @@ void lcd_remote_powersave(bool on);
void lcd_remote_set_contrast(int val);
void lcd_remote_on(void);
void lcd_remote_off(void);
+void lcd_remote_poweroff(void); /* for when remote is plugged during shutdown*/
extern bool remote_initialized;
diff --git a/firmware/target/coldfire/iaudio/x5/lcd-remote-x5.c b/firmware/target/coldfire/iaudio/x5/lcd-remote-x5.c
index d707e95..46e1eba 100755
--- a/firmware/target/coldfire/iaudio/x5/lcd-remote-x5.c
+++ b/firmware/target/coldfire/iaudio/x5/lcd-remote-x5.c
@@ -23,23 +23,23 @@
/* The LCD in the iAudio M3/M5/X5 remote control is a Tomato LSI 0350 */
-#define LCD_SET_DUTY_RATIO 0x48
-#define LCD_SELECT_ADC 0xa0
-#define LCD_SELECT_SHL 0xc0
-#define LCD_SET_COM0 0x44
-#define LCD_OSC_ON 0xab
-#define LCD_SELECT_DCDC 0x64
-#define LCD_SELECT_RES 0x20
-#define LCD_SET_VOLUME 0x81
-#define LCD_SET_BIAS 0x50
-#define LCD_CONTROL_POWER 0x28
-#define LCD_DISPLAY_ON 0xae
-#define LCD_SET_INITLINE 0x40
-#define LCD_SET_COLUMN 0x10
-#define LCD_SET_PAGE 0xb0
-#define LCD_SET_GRAY 0x88
-#define LCD_SET_PWM_FRC 0x90
-#define LCD_SET_POWER_SAVE 0xa8
+#define LCD_SET_DUTY_RATIO 0x48
+#define LCD_SELECT_ADC 0xa0
+#define LCD_SELECT_SHL 0xc0
+#define LCD_SET_COM0 0x44
+#define LCD_OSC_ON 0xab
+#define LCD_SELECT_DCDC 0x64
+#define LCD_SELECT_RES 0x20
+#define LCD_SET_VOLUME 0x81
+#define LCD_SET_BIAS 0x50
+#define LCD_CONTROL_POWER 0x28
+#define LCD_DISPLAY_ON 0xae
+#define LCD_SET_INITLINE 0x40
+#define LCD_SET_COLUMN 0x10
+#define LCD_SET_PAGE 0xb0
+#define LCD_SET_GRAY 0x88
+#define LCD_SET_PWM_FRC 0x90
+#define LCD_SET_POWER_SAVE 0xa8
#define LCD_REVERSE 0xa6
#define CS_LO and_l(~0x00000020, &GPIO1_OUT)
@@ -328,7 +328,7 @@ void lcd_remote_init_device(void)
or_l(0x00000020, &GPIO1_OUT);
or_l(0x00000020, &GPIO1_ENABLE);
or_l(0x00000020, &GPIO1_FUNCTION);
-
+
and_l(~0x01000000, &GPIO_OUT);
and_l(~0x01000000, &GPIO_ENABLE);
or_l(0x01000000, &GPIO_FUNCTION);
@@ -339,7 +339,7 @@ void lcd_remote_on(void)
CS_HI;
CLK_HI;
sleep(10);
-
+
lcd_remote_write_command(LCD_SET_DUTY_RATIO);
lcd_remote_write_command(0x70); /* 1/128 */
@@ -382,6 +382,13 @@ void lcd_remote_off(void)
RS_HI;
}
+void lcd_remote_poweroff(void)
+{
+ /* Set power save -> Power OFF (VDD - VSS) .. that's it */
+ if (remote_initialized && remote_detect())
+ lcd_remote_write_command(LCD_SET_POWER_SAVE | 1);
+}
+
/* Update the display.
This must be called after all other LCD functions that change the display. */
void lcd_remote_update(void) ICODE_ATTR;
diff --git a/firmware/target/coldfire/iaudio/x5/power-x5.c b/firmware/target/coldfire/iaudio/x5/power-x5.c
index ee06353..4d44500 100644
--- a/firmware/target/coldfire/iaudio/x5/power-x5.c
+++ b/firmware/target/coldfire/iaudio/x5/power-x5.c
@@ -23,6 +23,7 @@
#include "system.h"
#include "power.h"
#include "pcf50606.h"
+#include "lcd-remote-target.h"
#ifndef SIMULATOR
@@ -58,6 +59,7 @@ bool ide_powered(void)
void power_off(void)
{
+ lcd_remote_poweroff();
set_irq_level(HIGHEST_IRQ_LEVEL);
and_l(~0x00000008, &GPIO_OUT); /* Set KEEPACT low */
asm("halt");