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 #elif defined(CONFIG_PPC) 31 extern int of_i8042_kbd_irq; 32 extern int of_i8042_aux_irq; 33 # define I8042_KBD_IRQ of_i8042_kbd_irq 34 # define I8042_AUX_IRQ of_i8042_aux_irq 35 #else 36 # define I8042_KBD_IRQ 1 37 # define I8042_AUX_IRQ 12 38 #endif 39 40 41 /* 42 * Register numbers. 43 */ 44 45 #define I8042_COMMAND_REG 0x64 46 #define I8042_STATUS_REG 0x64 47 #define I8042_DATA_REG 0x60 48 49 static inline int i8042_read_data(void) 50 { 51 return inb(I8042_DATA_REG); 52 } 53 54 static inline int i8042_read_status(void) 55 { 56 return inb(I8042_STATUS_REG); 57 } 58 59 static inline void i8042_write_data(int val) 60 { 61 outb(val, I8042_DATA_REG); 62 } 63 64 static inline void i8042_write_command(int val) 65 { 66 outb(val, I8042_COMMAND_REG); 67 } 68 69 static inline int i8042_platform_init(void) 70 { 71 /* 72 * On some platforms touching the i8042 data register region can do really 73 * bad things. Because of this the region is always reserved on such boxes. 74 */ 75 #if defined(CONFIG_PPC) 76 if (check_legacy_ioport(I8042_DATA_REG)) 77 return -ENODEV; 78 #endif 79 #if !defined(__sh__) && !defined(__alpha__) 80 if (!request_region(I8042_DATA_REG, 16, "i8042")) 81 return -EBUSY; 82 #endif 83 84 i8042_reset = I8042_RESET_ALWAYS; 85 return 0; 86 } 87 88 static inline void i8042_platform_exit(void) 89 { 90 #if !defined(__sh__) && !defined(__alpha__) 91 release_region(I8042_DATA_REG, 16); 92 #endif 93 } 94 95 #endif /* _I8042_IO_H */ 96