summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 22:29:31 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:27 +0100
commite1003b1536091a7bdc421e05bd9eefcddd366bfe (patch)
tree6f4a32e398560e1a55506a870d0c63c0ebfe9525
parent935c0ad14a6f7840c12c3c7fd706e8166cd73f6a (diff)
zen/bootloader: power down the LCD at the end of the bootloader if needed
On the ZEN, the LCD is fed continuously by the DMA and this refresh needs to be stop when the bootloader gives control to the firmware, otherwise the DMA will source data from invalid region and it might even lock-up if the new code touches the memory setup. Work around this by properly stopping the LCD driver: the bootloader assumes that if the target defines HAVE_LCD_ENABLE in bootloader build (which is unusual) then it needs to stop the LCD. Since stopping the LCD could produce funny screens, power down backlight which is expected to power down the LCD too, giving a nice black screen instead of some random pixels. Change-Id: I7ce5ba9bfd08e596907c4ff8f80feb189f0576ce
-rw-r--r--bootloader/imx233.c7
-rw-r--r--firmware/export/config/creativezen.h6
2 files changed, 10 insertions, 3 deletions
diff --git a/bootloader/imx233.c b/bootloader/imx233.c
index 6dc503bb16..1169b392aa 100644
--- a/bootloader/imx233.c
+++ b/bootloader/imx233.c
@@ -43,6 +43,7 @@
#include "version.h"
#include "powermgmt-imx233.h"
#include "partitions-imx233.h"
+#include "backlight-target.h"
#include "adc.h"
#include "usb.h"
@@ -211,6 +212,12 @@ void main(uint32_t arg, uint32_t addr)
printf("Executing");
/* stop what was initialized to start from clean state */
system_prepare_fw_start();
+ /* if target defines lcd_enable() in bootloader, take this as a hint that
+ * we should use it to properly stop the lcd before moving one, the
+ * _backlight_off() routine is supposed to disable the lcd at the same time */
+#ifdef HAVE_LCD_ENABLE
+ _backlight_off();
+#endif
disable_interrupt(IRQ_FIQ_STATUS);
commit_discard_idcache();
kernel_entry();
diff --git a/firmware/export/config/creativezen.h b/firmware/export/config/creativezen.h
index 0caf499379..004e1403b7 100644
--- a/firmware/export/config/creativezen.h
+++ b/firmware/export/config/creativezen.h
@@ -49,9 +49,6 @@
/* define this if you would like tagcache to build on this target */
#define HAVE_TAGCACHE
-/* define this if you have LCD enable function */
-#define HAVE_LCD_ENABLE
-
/* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE
should be defined as well.
#define HAVE_LCD_SLEEP
@@ -74,6 +71,9 @@
#endif /* !BOOTLOADER */
+/* define this if you have LCD enable function */
+#define HAVE_LCD_ENABLE
+
/* define this if you have an i.MX23 codec */
#define HAVE_IMX233_CODEC