Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: i8042 - add SNI RM support

SNI RM200 don't have the i8042 controller connected to the EISA bus,
but have a second address range for onboard devices. This patch handles
the two possible address ranges for the i8042 on SNI RMs.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

authored by

Thomas Bogendoerfer and committed by
Dmitry Torokhov
f1782447 2a2dcd65

+77
+75
drivers/input/serio/i8042-snirm.h
··· 1 + #ifndef _I8042_SNIRM_H 2 + #define _I8042_SNIRM_H 3 + 4 + #include <asm/sni.h> 5 + 6 + /* 7 + * This program is free software; you can redistribute it and/or modify it 8 + * under the terms of the GNU General Public License version 2 as published by 9 + * the Free Software Foundation. 10 + */ 11 + 12 + /* 13 + * Names. 14 + */ 15 + 16 + #define I8042_KBD_PHYS_DESC "onboard/serio0" 17 + #define I8042_AUX_PHYS_DESC "onboard/serio1" 18 + #define I8042_MUX_PHYS_DESC "onboard/serio%d" 19 + 20 + /* 21 + * IRQs. 22 + */ 23 + static int i8042_kbd_irq; 24 + static int i8042_aux_irq; 25 + #define I8042_KBD_IRQ i8042_kbd_irq 26 + #define I8042_AUX_IRQ i8042_aux_irq 27 + 28 + static void __iomem *kbd_iobase; 29 + 30 + #define I8042_COMMAND_REG (kbd_iobase + 0x64UL) 31 + #define I8042_DATA_REG (kbd_iobase + 0x60UL) 32 + 33 + static inline int i8042_read_data(void) 34 + { 35 + return readb(kbd_iobase + 0x60UL); 36 + } 37 + 38 + static inline int i8042_read_status(void) 39 + { 40 + return readb(kbd_iobase + 0x64UL); 41 + } 42 + 43 + static inline void i8042_write_data(int val) 44 + { 45 + writeb(val, kbd_iobase + 0x60UL); 46 + } 47 + 48 + static inline void i8042_write_command(int val) 49 + { 50 + writeb(val, kbd_iobase + 0x64UL); 51 + } 52 + static inline int i8042_platform_init(void) 53 + { 54 + /* RM200 is strange ... */ 55 + if (sni_brd_type == SNI_BRD_RM200) { 56 + kbd_iobase = ioremap(0x16000000, 4); 57 + i8042_kbd_irq = 33; 58 + i8042_aux_irq = 44; 59 + } else { 60 + kbd_iobase = ioremap(0x14000000, 4); 61 + i8042_kbd_irq = 1; 62 + i8042_aux_irq = 12; 63 + } 64 + if (!kbd_iobase) 65 + return -ENOMEM; 66 + 67 + return 0; 68 + } 69 + 70 + static inline void i8042_platform_exit(void) 71 + { 72 + 73 + } 74 + 75 + #endif /* _I8042_SNIRM_H */
+2
drivers/input/serio/i8042.h
··· 18 18 #include "i8042-jazzio.h" 19 19 #elif defined(CONFIG_SGI_HAS_I8042) 20 20 #include "i8042-ip22io.h" 21 + #elif defined(CONFIG_SNI_RM) 22 + #include "i8042-snirm.h" 21 23 #elif defined(CONFIG_PPC) 22 24 #include "i8042-ppcio.h" 23 25 #elif defined(CONFIG_SPARC)