Index: firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c =================================================================== --- firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c (Revision 19391) +++ firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c (Arbeitskopie) @@ -40,14 +40,6 @@ static bool display_flipped = false; static int xoffset = 20; /* needed for flip */ -/* TODO: Implement this function */ -static void lcd_delay(int x) -{ - /* This is just arbitrary - the OF does something more complex */ - x *= 1024; - while (x--); -} - static void as3525_dbop_init(void) { CGU_DBOP = (1<<3) | CLK_DIV(AS3525_PCLK_FREQ, AS3525_DBOP_FREQ); @@ -146,23 +138,14 @@ lcd_write_reg(0x07, 0); lcd_write_reg(0x13, 0); - lcd_delay(10); - lcd_write_reg(0x11, 0x3704); lcd_write_reg(0x14, 0x1a1b); lcd_write_reg(0x10, 0x3860); lcd_write_reg(0x13, 0x40); - lcd_delay(10); - lcd_write_reg(0x13, 0x60); - lcd_delay(50); - lcd_write_reg(0x13, 0x70); - - lcd_delay(40); - lcd_write_reg(0x01, 277); lcd_write_reg(0x02, (7<<8)); lcd_write_reg(R_ENTRY_MODE, R_ENTRY_MODE_HORZ); @@ -190,65 +173,34 @@ lcd_write_reg(0x48, 0x0); lcd_write_reg(0x07, 0x11); - - lcd_delay(40); - lcd_write_reg(0x07, 0x17); display_on = true; /* must be done before calling lcd_update() */ lcd_update(); } -/* I'm guessing this function is lcd_enable, but it may not be... */ void lcd_enable(bool on) { - int r0 = on; -#if 0 - r4 = 0x1db12; - [r4] = 1; -#endif - - if (r0 != 0) { + if (display_on == on) + return; /* nothing to do */ + if (on) { lcd_write_reg(0, 1); - - lcd_delay(10); - lcd_write_reg(0x10, 0); lcd_write_reg(0x11, 0x3704); lcd_write_reg(0x14, 0x1a1b); lcd_write_reg(0x10, 0x3860); lcd_write_reg(0x13, 0x40); - - lcd_delay(10); - lcd_write_reg(0x13, 0x60); - - lcd_delay(50); - lcd_write_reg(0x13, 112); - - lcd_delay(40); - lcd_write_reg(0x07, 0x11); - - lcd_delay(40); - lcd_write_reg(0x07, 0x17); + display_on = true; } else { lcd_write_reg(0x07, 0x22); - - lcd_delay(40); - lcd_write_reg(0x07, 0); - - lcd_delay(40); - lcd_write_reg(0x10, 1); + display_on = false; } - -#if 0 - [r4] = 0; -#endif } bool lcd_enabled(void) @@ -298,13 +250,7 @@ GPIOA_DIR |= (1<<7); GPIOA_PIN(7) = 0; - - lcd_delay(1); - GPIOA_PIN(5) = (1<<5); - - lcd_delay(1); - _display_on(); } @@ -324,6 +270,7 @@ lcd_write_reg(0x47, ymax); lcd_write_reg(0x48, ymin); lcd_write_reg(0x21, ymin); + lcd_write_cmd(0x22); } /* Update the display. @@ -365,7 +312,7 @@ width = xmax - x + 1; /* Fix width */ ymax = y + height - 1; - if (ymax > LCD_HEIGHT) + if (ymax >= LCD_HEIGHT) ymax = LCD_HEIGHT - 1; /* Clip bottom */ if (y < 0) y = 0; /* Clip top */ @@ -387,5 +334,5 @@ lcd_write_data(ptr, width); ptr += LCD_WIDTH; } - while (++y < ymax); + while (++y <= ymax); }