From 50f63e334aa549f868b4b28c389b7ea34ffa9b4f Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Mon, 15 Dec 2003 02:04:18 +0000 Subject: Fix for the LED problem in lcd_write_data(). The r0 register was not preserved for each loop. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4144 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/lcd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'firmware/drivers/lcd.c') diff --git a/firmware/drivers/lcd.c b/firmware/drivers/lcd.c index aaa93b3385..f7fde506e3 100644 --- a/firmware/drivers/lcd.c +++ b/firmware/drivers/lcd.c @@ -82,7 +82,7 @@ * */ -void lcd_write(bool command, int byte) __attribute__ ((section (".icode"))); +//void lcd_write(bool command, int byte) __attribute__ ((section (".icode"))); void lcd_write(bool command, int byte) { asm("and.b %0, @(r0,gbr)" @@ -191,6 +191,8 @@ void lcd_write_data(unsigned char* p_bytes, int count) unsigned sda1; /* precalculated SC=low,SD=1 */ unsigned clk0sda0; /* precalculated SC and SD low */ + byte = *p_bytes++ << 24; /* fetch to MSB position */ + cli(); /* make port modifications atomic */ /* precalculate the values for later bit toggling, init data write */ @@ -211,8 +213,6 @@ void lcd_write_data(unsigned char* p_bytes, int count) /* %5 */ "r"(~LCD_SD) ); - byte = *p_bytes++ << 24; /* fetch to MSB position */ - /* unrolled loop to serialize the byte */ asm ( "mov %4,r0\n" /* we need &PBDRL in r0 for "or.b x,@(r0,gbr)" */ -- cgit v1.2.3