diff -ruP linux-2.6.0-test3.orig/drivers/input/serio/i8042-sparcio.h linux-2.6.0-test3/drivers/input/serio/i8042-sparcio.h
--- linux-2.6.0-test3.orig/drivers/input/serio/i8042-sparcio.h	Sat Aug  9 06:42:17 2003
+++ linux-2.6.0-test3/drivers/input/serio/i8042-sparcio.h	Wed Sep 17 18:25:23 2003
@@ -9,6 +9,8 @@
 #include <asm/ebus.h>
 #endif
 
+#define JAVASTATION_HACKS
+
 static int i8042_kbd_irq = -1;
 static int i8042_aux_irq = -1;
 #define I8042_KBD_IRQ i8042_kbd_irq
@@ -20,27 +22,32 @@
 
 static unsigned long kbd_iobase;
 
-#define I8042_COMMAND_REG	(kbd_iobase + 0x64UL)
-#define I8042_DATA_REG		(kbd_iobase + 0x60UL)
+#ifndef JAVASTATION_HACKS
+ #define I8042_COMMAND_REG	(kbd_iobase + 0x64UL)
+ #define I8042_DATA_REG		(kbd_iobase + 0x60UL)
+#else
+ #define I8042_COMMAND_REG	(kbd_iobase + 0x04UL)
+ #define I8042_DATA_REG		(kbd_iobase + 0x00UL)
+#endif
 
 static inline int i8042_read_data(void)
 {
-	return readb(kbd_iobase + 0x60UL);
+	return readb(I8042_DATA_REG);
 }
 
 static inline int i8042_read_status(void)
 {
-	return readb(kbd_iobase + 0x64UL);
+	return readb(I8042_COMMAND_REG);
 }
 
 static inline void i8042_write_data(int val)
 {
-	writeb(val, kbd_iobase + 0x60UL);
+	writeb(val, I8042_DATA_REG);
 }
 
 static inline void i8042_write_command(int val)
 {
-	writeb(val, kbd_iobase + 0x64UL);
+	writeb(val, I8042_COMMAND_REG);
 }
 
 #define OBP_PS2KBD_NAME1	"kb_ps2"
@@ -85,8 +92,13 @@
 			if (!strcmp(child->prom_name, OBP_PS2KBD_NAME1) ||
 			    !strcmp(child->prom_name, OBP_PS2KBD_NAME2)) {
 				i8042_kbd_irq = child->irqs[0];
+#ifndef JAVASTATION_HACKS
 				kbd_iobase = (unsigned long)
 					ioremap(child->resource[0].start, 8);
+#else
+				kbd_iobase = (unsigned long)
+					child->resource[0].start;
+#endif
 			}
 			if (!strcmp(child->prom_name, OBP_PS2MS_NAME1) ||
 			    !strcmp(child->prom_name, OBP_PS2MS_NAME2))
