| #ifndef _I8042_PPCIO_H |
| #define _I8042_PPCIO_H |
| |
| /* |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 as published by |
| * the Free Software Foundation. |
| */ |
| |
| #if defined(CONFIG_WALNUT) |
| |
| #define I8042_KBD_IRQ 25 |
| #define I8042_AUX_IRQ 26 |
| |
| #define I8042_KBD_PHYS_DESC "walnutps2/serio0" |
| #define I8042_AUX_PHYS_DESC "walnutps2/serio1" |
| #define I8042_MUX_PHYS_DESC "walnutps2/serio%d" |
| |
| extern void *kb_cs; |
| extern void *kb_data; |
| |
| #define I8042_COMMAND_REG (*(int *)kb_cs) |
| #define I8042_DATA_REG (*(int *)kb_data) |
| |
| static inline int i8042_read_data(void) |
| { |
| return readb(kb_data); |
| } |
| |
| static inline int i8042_read_status(void) |
| { |
| return readb(kb_cs); |
| } |
| |
| static inline void i8042_write_data(int val) |
| { |
| writeb(val, kb_data); |
| } |
| |
| static inline void i8042_write_command(int val) |
| { |
| writeb(val, kb_cs); |
| } |
| |
| static inline int i8042_platform_init(void) |
| { |
| i8042_reset = 1; |
| return 0; |
| } |
| |
| static inline void i8042_platform_exit(void) |
| { |
| } |
| |
| #elif defined(CONFIG_SPRUCE) |
| |
| #define I8042_KBD_IRQ 22 |
| #define I8042_AUX_IRQ 21 |
| |
| #define I8042_KBD_PHYS_DESC "spruceps2/serio0" |
| #define I8042_AUX_PHYS_DESC "spruceps2/serio1" |
| #define I8042_MUX_PHYS_DESC "spruceps2/serio%d" |
| |
| #define I8042_COMMAND_REG 0xff810000 |
| #define I8042_DATA_REG 0xff810001 |
| |
| static inline int i8042_read_data(void) |
| { |
| unsigned long kbd_data; |
| |
| __raw_writel(0x00000088, 0xff500008); |
| eieio(); |
| |
| __raw_writel(0x03000000, 0xff50000c); |
| eieio(); |
| |
| asm volatile("lis 7,0xff88 \n\ |
| lswi 6,7,0x8 \n\ |
| mr %0,6" |
| : "=r" (kbd_data) :: "6", "7"); |
| |
| __raw_writel(0x00000000, 0xff50000c); |
| eieio(); |
| |
| return (unsigned char)(kbd_data >> 24); |
| } |
| |
| static inline int i8042_read_status(void) |
| { |
| unsigned long kbd_status; |
| |
| __raw_writel(0x00000088, 0xff500008); |
| eieio(); |
| |
| __raw_writel(0x03000000, 0xff50000c); |
| eieio(); |
| |
| asm volatile("lis 7,0xff88 \n\ |
| ori 7,7,0x8 \n\ |
| lswi 6,7,0x8 \n\ |
| mr %0,6" |
| : "=r" (kbd_status) :: "6", "7"); |
| |
| __raw_writel(0x00000000, 0xff50000c); |
| eieio(); |
| |
| return (unsigned char)(kbd_status >> 24); |
| } |
| |
| static inline void i8042_write_data(int val) |
| { |
| *((unsigned char *)0xff810000) = (char)val; |
| } |
| |
| static inline void i8042_write_command(int val) |
| { |
| *((unsigned char *)0xff810001) = (char)val; |
| } |
| |
| static inline int i8042_platform_init(void) |
| { |
| i8042_reset = 1; |
| return 0; |
| } |
| |
| static inline void i8042_platform_exit(void) |
| { |
| } |
| |
| #else |
| |
| #include "i8042-io.h" |
| |
| #endif |
| |
| #endif /* _I8042_PPCIO_H */ |