From d52bea8a90a4888efae8a8716d0025d3f4238733 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Thu, 29 May 2008 21:41:47 +0000 Subject: [PATCH] Fix FS #8840 for irivers by slowing down the driver some more. Signal quality is obviously varying a lot among the iriver remotes. Speed is now around halfway between pre-r16832 and r17006 when boosted. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17657 a1c6a512-1295-4272-9138-f99709370657 --- .../coldfire/iriver/lcd-remote-as-iriver.S | 42 +++++++++++++------ .../coldfire/iriver/lcd-remote-iriver.c | 4 +- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/firmware/target/coldfire/iriver/lcd-remote-as-iriver.S b/firmware/target/coldfire/iriver/lcd-remote-as-iriver.S index 0325e5176c..df7447a03a 100644 --- a/firmware/target/coldfire/iriver/lcd-remote-as-iriver.S +++ b/firmware/target/coldfire/iriver/lcd-remote-as-iriver.S @@ -81,31 +81,47 @@ eor.l %d6, %d0 /* invert data bit */ move.l %d0, (%a1) /* output data bit7 */ nop + nop 1: .macro bit_out + move.l %d2, (%a0) /* Bit7: set CLK = 1 */ + nop lsl.l #1, %d4 /* Invert data line for bit6 ? */ bcc.s 1f /* no: skip */ eor.l %d6, %d0 /* Invert data bit */ - move.l %d2, (%a0) /* Bit7: set CLK = 1 */ move.l %d1, (%a0) /* set CLK = 0 */ move.l %d0, (%a1) /* Output data bit6 */ - bra.s 2f /* slower than trapf.l - required here */ -1: /* else */ - move.l %d2, (%a0) /* Bit7: set CLK = 1 */ + .word 0x51fa /* trapf.w - shadow next insn */ +1: move.l %d1, (%a0) /* set CLK = 0 */ -2: .endm - bit_out - bit_out - bit_out - bit_out - bit_out - bit_out - bit_out - nop /* Let data line settle */ + bit_out + nop + nop + bit_out + nop + nop + bit_out + nop + nop + bit_out + nop + nop + bit_out + nop + nop + bit_out + nop + nop + bit_out + nop + nop + move.l %d2, (%a0) /* Bit0: Set CLK = 1 */ + nop + nop move.l %d1, (%a0) /* Set CLK = 0 */ move.w %d3, %sr /* Restore interrupt level */ diff --git a/firmware/target/coldfire/iriver/lcd-remote-iriver.c b/firmware/target/coldfire/iriver/lcd-remote-iriver.c index 83b7a022e5..e291771e90 100644 --- a/firmware/target/coldfire/iriver/lcd-remote-iriver.c +++ b/firmware/target/coldfire/iriver/lcd-remote-iriver.c @@ -299,7 +299,7 @@ void lcd_remote_update(void) #ifdef HAVE_REMOTE_LCD_TICKING /* Adjust byte delay for emi reduction. */ - remote_byte_delay = emireduce ? cpu_frequency / 192800 - 100: 0; + remote_byte_delay = emireduce ? cpu_frequency / 206200 - 85: 0; #endif /* Copy display bitmap to hardware */ @@ -333,7 +333,7 @@ void lcd_remote_update_rect(int x, int y, int width, int height) #ifdef HAVE_REMOTE_LCD_TICKING /* Adjust byte delay for emi reduction */ - remote_byte_delay = emireduce ? cpu_frequency / 192800 - 100: 0; + remote_byte_delay = emireduce ? cpu_frequency / 206200 - 85: 0; #endif /* Copy specified rectange bitmap to hardware */