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
This commit is contained in:
Amaury Pouly 2014-02-10 22:29:31 +01:00
parent 935c0ad14a
commit e1003b1536
2 changed files with 10 additions and 3 deletions

View file

@ -43,6 +43,7 @@
#include "version.h" #include "version.h"
#include "powermgmt-imx233.h" #include "powermgmt-imx233.h"
#include "partitions-imx233.h" #include "partitions-imx233.h"
#include "backlight-target.h"
#include "adc.h" #include "adc.h"
#include "usb.h" #include "usb.h"
@ -211,6 +212,12 @@ void main(uint32_t arg, uint32_t addr)
printf("Executing"); printf("Executing");
/* stop what was initialized to start from clean state */ /* stop what was initialized to start from clean state */
system_prepare_fw_start(); 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); disable_interrupt(IRQ_FIQ_STATUS);
commit_discard_idcache(); commit_discard_idcache();
kernel_entry(); kernel_entry();

View file

@ -49,9 +49,6 @@
/* define this if you would like tagcache to build on this target */ /* define this if you would like tagcache to build on this target */
#define HAVE_TAGCACHE #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 /* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE
should be defined as well. should be defined as well.
#define HAVE_LCD_SLEEP #define HAVE_LCD_SLEEP
@ -74,6 +71,9 @@
#endif /* !BOOTLOADER */ #endif /* !BOOTLOADER */
/* define this if you have LCD enable function */
#define HAVE_LCD_ENABLE
/* define this if you have an i.MX23 codec */ /* define this if you have an i.MX23 codec */
#define HAVE_IMX233_CODEC #define HAVE_IMX233_CODEC