summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bootloader/main-pp.c13
-rw-r--r--firmware/target/arm/samsung/yh925/lcd-yh925.c12
2 files changed, 24 insertions, 1 deletions
diff --git a/bootloader/main-pp.c b/bootloader/main-pp.c
index c213a65121..ef0e199e3a 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 edeef49d40..7509deff36 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)
{