From 2d5e6e1a8792c71c765e2c8f6956cf71e6178b01 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Sun, 5 Oct 2008 20:01:25 +0000 Subject: LCD driver for meizu M3, new type (older M3s are not yet supported) Thanks to Denes Balatoni git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18719 a1c6a512-1295-4272-9138-f99709370657 --- bootloader/meizu_m3.c | 29 ++++++ firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | 127 +++++++++++++++++++++----- 2 files changed, 134 insertions(+), 22 deletions(-) diff --git a/bootloader/meizu_m3.c b/bootloader/meizu_m3.c index cc9fbab88d..1c1f45a40a 100644 --- a/bootloader/meizu_m3.c +++ b/bootloader/meizu_m3.c @@ -101,6 +101,26 @@ void bl_debug_int(unsigned int input,unsigned int count) void main(void) { + char mystring[64]; + int tmpval; + + /* set clock to 200 MHz */ + CLKCON = 0x00800080; + CLKCON2= 0x00; + PLL0PMS = 0x1ad200; + PLLCON = 1; + while (!(PLLLOCK & 1)) ; + CLKCON = 0x20802080; + + /* mask all interrupts + this is done, because the lcd framebuffer + overwrites some stuff, which leads to a freeze + when an irq is generated after the dfu upload. + crt0 should have disabled irqs, + but the bootrom hands us execution in + user mode so we can't switch interrupts off */ + INTMSK = 0; + //Set backlight pin to output and enable int oldval = PCON0; PCON0 = ((oldval & ~(3 << 4)) | (1 << 4)); @@ -110,6 +130,15 @@ void main(void) oldval = PCON1; PCON1 = ((oldval & ~(0xf << 16)) | (0 << 16)); + asm volatile("mrs %0, cpsr \n\t" + : "=r" (tmpval) + ); + + lcd_init(); + snprintf(mystring, 64, "tmpval: %x", tmpval); + lcd_putsxy(0,0,mystring); + lcd_update(); + init_qt1106(); // Wait for play to be pressed diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c index 1affab3b01..3c2e8c646c 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c +++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c @@ -25,12 +25,14 @@ #include "lcd.h" #include "system.h" #include "cpu.h" +#include "inttypes.h" +#include "s5l8700.h" /*** definitions ***/ /** globals **/ - +static uint8_t lcd_type; static int xoffset; /* needed for flip */ /*** hardware configuration ***/ @@ -64,10 +66,88 @@ void lcd_set_flip(bool yesno) } } +static void lcd_sleep(uint32_t t) { + uint32_t i; + + for(i=0;i> 3; - y >>= 3; - - if(x + width > LCD_WIDTH) - width = LCD_WIDTH - x; - if (width <= 0) - return; /* nothing left to do, 0 is harmful to lcd_write_data() */ - if(ymax >= LCD_FBHEIGHT) - ymax = LCD_FBHEIGHT-1; - - /* Copy specified rectange bitmap to hardware */ - for (; y <= ymax; y++) - { - } + lcd_update(); } -- cgit v1.2.3