From af00c3ca87650e2d354c8f9b22546b6901eec6f1 Mon Sep 17 00:00:00 2001 From: kugel Date: Tue, 8 Sep 2009 13:57:13 +0000 Subject: [PATCH] Samsung YH925: Reset the LCD orientation to what the OF expects before branching to it in dualbooting Author: Mark Arigo git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22659 a1c6a512-1295-4272-9138-f99709370657 --- bootloader/main-pp.c | 13 ++++++++++++- firmware/target/arm/samsung/yh925/lcd-yh925.c | 12 ++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/bootloader/main-pp.c b/bootloader/main-pp.c index c213a6512..ef0e199e3 100644 --- a/bootloader/main-pp.c +++ b/bootloader/main-pp.c @@ -47,6 +47,11 @@ #include "usb.h" #include "usb_drv.h" #endif +#if defined(SAMSUNG_YH925) +/* this function (in lcd-yh925.c) resets the screen orientation for the OF + * for use with dualbooting */ +void lcd_reset(void); +#endif /* Show the Rockbox logo - in show_logo.c */ extern int show_logo(void); @@ -575,7 +580,7 @@ void* main(void) The rest of the loading is done in crt0.S. 1) First try reading from the hidden partition (on Sansa only). 2) Next try a decrypted mi4 file in /System/OF.mi4 - 3) Finally, try a raw firmware binary in /System/OF.mi4. It should be + 3) Finally, try a raw firmware binary in /System/OF.bin. It should be a mi4 firmware decrypted and header stripped using mi4code. */ printf("Loading original firmware..."); @@ -615,6 +620,9 @@ void* main(void) printf("Can't load /System/OF.mi4"); printf(strerror(rc)); } else { +#if defined(SAMSUNG_YH925) + lcd_reset(); +#endif return (void*)loadbuffer; } @@ -624,6 +632,9 @@ void* main(void) printf("Can't load /System/OF.bin"); printf(strerror(rc)); } else { +#if defined(SAMSUNG_YH925) + lcd_reset(); +#endif return (void*)loadbuffer; } diff --git a/firmware/target/arm/samsung/yh925/lcd-yh925.c b/firmware/target/arm/samsung/yh925/lcd-yh925.c index edeef49d4..7509deff3 100644 --- a/firmware/target/arm/samsung/yh925/lcd-yh925.c +++ b/firmware/target/arm/samsung/yh925/lcd-yh925.c @@ -190,6 +190,18 @@ void lcd_set_flip(bool flip) lcd_write_reg(R_ENTRY_MODE, 0x1028); } +/* Reset the LCD prior to booting the OF */ +#ifdef BOOTLOADER +void lcd_reset(void) +{ + lcd_write_reg(R_DRV_OUTPUT_CONTROL, 0x0315); + lcd_write_reg(R_ENTRY_MODE, 0x1028); + lcd_write_reg(R_HORIZ_RAM_ADDR_POS, 0x7f00); + lcd_write_reg(R_VERT_RAM_ADDR_POS, 0xaf10); + lcd_write_reg(R_RAM_ADDR_SET, 0x0000); +} +#endif + /* LCD init */ void lcd_init_device(void) { -- 2.11.4.GIT