--- hijack/arch/arm/special/empeg_display.c.orig 2008-06-04 13:17:32.000000000 -0400
+++ hijack/arch/arm/special/empeg_display.c 2014-02-02 14:56:11.467315647 -0500
@@ -879,11 +879,13 @@
static int sendcontrol_busy = 0;
static unsigned long sendcontrol_timestamp = 0;
extern unsigned long jiffies_since(unsigned long);
+extern int hijack_hispeed_button_pic;
-int display_sendcontrol_part2(int b)
+int display_sendcontrol_part2(unsigned char b)
{
- int bit;
+ unsigned char bit;
unsigned long flags;
+ unsigned int inter_bit_delay = hijack_hispeed_button_pic ? 7 : 15;
/* Send a byte to the display serially via control line (mk2 only) */
if (empeg_hardwarerevision()<6) return 0;
@@ -896,30 +898,33 @@
save_flags_clif(flags);
/* Send 8 bits */
- for(bit=7;bit>=0;bit--) {
+ for (bit = 0x80; bit; bit >>= 1) {
/* Set line low */
GPCR=EMPEG_DISPLAYCONTROL;
/* Check the bit */
- if (b&(1<<bit)) {
+ if (b & bit) {
/* High - 15us of low */
- udelay(15);
+ udelay (inter_bit_delay);
} else {
/* Low - 2us of low */
- //udelay(1);
- { int a; for(a=0;a<50;a++); }
+ int a, delay = hijack_hispeed_button_pic ? 22 : 50;
+ for (a = 0; a < delay; a++);
}
/* Set line high */
GPSR=EMPEG_DISPLAYCONTROL;
/* Inter-bit delay */
- udelay(15);
+ udelay(inter_bit_delay);
}
/* End of transmission, line low */
GPCR=EMPEG_DISPLAYCONTROL;
- udelay( (sendcontrol_busy == 1) ? 5 : 40 );
+ if (hijack_hispeed_button_pic)
+ udelay( (sendcontrol_busy == 1) ? 2 : 20 );
+ else
+ udelay( (sendcontrol_busy == 1) ? 5 : 40 );
/* Reenable IRQs */
sendcontrol_busy = 0;
--- hijack/arch/arm/special/hijack.c.orig 2011-07-20 06:22:58.000000000 -0700
+++ hijack/arch/arm/special/hijack.c 2014-02-01 08:12:48.163697927 -0800
@@ -548,6 +548,7 @@
//
static int hijack_buttonled_off_level; // button brightness when player is "off"
static int hijack_buttonled_dim_level; // when non-zero, button brightness when headlights are on
+ int hijack_hispeed_button_pic; // 1 == change timing to work with a 40 MHz button PIC
static int hijack_dc_servers; // 1 == allow kftpd/khttpd when on DC power
static int hijack_decimal_fidentry; // 1 == fidentry uses base10 instead of hex
int hijack_disable_emplode; // 1 == block TCP port 8300 (Emplode/Emptool)
@@ -665,6 +666,7 @@
//=========================== ========================== ========= ======= === ================
{"buttonled_off", &hijack_buttonled_off_level, 1, 1, 0, 7},
{"buttonled_dim", &hijack_buttonled_dim_level, 0, 1, 0, 7},
+{"hispeed_button_pic", &hijack_hispeed_button_pic, 0, 1, 0, 1},
{"dc_servers", &hijack_dc_servers, 0, 1, 0, 1},
{"decimal_fidentry", &hijack_decimal_fidentry, 0, 1, 0, 1},
{"disable_emplode", &hijack_disable_emplode, 0, 1, 0, 1},