1 #ifndef _I8042_IO_H 2 #define _I8042_IO_H 3 4 /* 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published by 7 * the Free Software Foundation. 8 */ 9 10 /* 11 * Names. 12 */ 13 14 #define I8042_KBD_PHYS_DESC "isa0060/serio0" 15 #define I8042_AUX_PHYS_DESC "isa0060/serio1" 16 #define I8042_MUX_PHYS_DESC "isa0060/serio%d" 17 18 /* 19 * IRQs. 20 */ 21 22 #ifdef __alpha__ 23 # define I8042_KBD_IRQ 1 24 # define I8042_AUX_IRQ (RTC_PORT(0) == 0x170 ? 9 : 12) /* Jensen is special */ 25 #elif defined(__arm__) 26 /* defined in include/asm-arm/arch-xxx/irqs.h */ 27 #include <asm/irq.h> 28 #elif defined(CONFIG_SH_CAYMAN) 29 #include <asm/irq.h> 30 #else 31 # define I8042_KBD_IRQ 1 32 # define I8042_AUX_IRQ 12 33 #endif 34 35 36 /* 37 * Register numbers. 38 */ 39 40 #define I8042_COMMAND_REG 0x64 41 #define I8042_STATUS_REG 0x64 42 #define I8042_DATA_REG 0x60 43 44 static inline int i8042_read_data(void) 45 { 46 return inb(I8042_DATA_REG); 47 } 48 49 static inline int i8042_read_status(void) 50 { 51 return inb(I8042_STATUS_REG); 52 } 53 54 static inline void i8042_write_data(int val) 55 { 56 outb(val, I8042_DATA_REG); 57 } 58 59 static inline void i8042_write_command(int val) 60 { 61 outb(val, I8042_COMMAND_REG); 62 } 63 64 static inline int i8042_platform_init(void) 65 { 66 /* 67 * On some platforms touching the i8042 data register region can do really 68 * bad things. Because of this the region is always reserved on such boxes. 69 */ 70 #if defined(CONFIG_PPC) 71 if (check_legacy_ioport(I8042_DATA_REG)) 72 return -ENODEV; 73 #endif 74 #if !defined(__sh__) && !defined(__alpha__) && !defined(__mips__) 75 if (!request_region(I8042_DATA_REG, 16, "i8042")) 76 return -EBUSY; 77 #endif 78 79 i8042_reset = 1; 80 return 0; 81 } 82 83 static inline void i8042_platform_exit(void) 84 { 85 #if !defined(__sh__) && !defined(__alpha__) 86 release_region(I8042_DATA_REG, 16); 87 #endif 88 } 89 90 #endif /* _I8042_IO_H */ 91