bk://kernel.bkbits.net/vojtech/input vojtech@suse.cz|ChangeSet|20040921141218|14729 vojtech # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/09/21 21:19:36-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # drivers/usb/input/hid-core.c # 2004/09/21 21:19:32-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/char/keyboard.c # 2004/09/21 21:19:32-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/21 21:18:33-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/serial/sunsu.c # 2004/09/21 21:18:28-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/21 16:12:18+02:00 vojtech@suse.cz # input: Add AT-compatible rawmode generation for ARM. # # Signed-off-by: Vojtech Pavlik # Patch-by: Woody Suwalski # # drivers/char/keyboard.c # 2004/09/21 16:12:11+02:00 vojtech@suse.cz +4 -1 # input: Add AT-compatible rawmode generation for ARM. # # Signed-off-by: Vojtech Pavlik # Patch-by: Woody Suwalski # # ChangeSet # 2004/09/21 15:48:50+02:00 petero2@telia.com # input: Add ALPS touchpad driver, driver by Neil Brown, Peter Osterlund # and Dmitry Torokhov, some fixes by Vojtech Pavlik. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Osterlund # # drivers/input/mouse/alps.h # 2004/09/21 15:48:43+02:00 petero2@telia.com +17 -0 # # drivers/input/mouse/alps.h # 2004/09/21 15:48:43+02:00 petero2@telia.com +0 -0 # BitKeeper file /data2/bk/input/drivers/input/mouse/alps.h # # drivers/input/mouse/alps.c # 2004/09/21 15:48:42+02:00 petero2@telia.com +422 -0 # # drivers/input/mousedev.c # 2004/09/21 15:48:42+02:00 petero2@telia.com +10 -4 # input: Add ALPS touchpad driver, driver by Neil Brown, Peter Osterlund # and Dmitry Torokhov, some fixes by Vojtech Pavlik. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Osterlund # # drivers/input/mouse/psmouse.h # 2004/09/21 15:48:42+02:00 petero2@telia.com +3 -0 # input: Add ALPS touchpad driver, driver by Neil Brown, Peter Osterlund # and Dmitry Torokhov, some fixes by Vojtech Pavlik. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Osterlund # # drivers/input/mouse/psmouse-base.c # 2004/09/21 15:48:42+02:00 petero2@telia.com +22 -1 # input: Add ALPS touchpad driver, driver by Neil Brown, Peter Osterlund # and Dmitry Torokhov, some fixes by Vojtech Pavlik. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Osterlund # # drivers/input/mouse/alps.c # 2004/09/21 15:48:42+02:00 petero2@telia.com +0 -0 # BitKeeper file /data2/bk/input/drivers/input/mouse/alps.c # # drivers/input/mouse/Makefile # 2004/09/21 15:48:42+02:00 petero2@telia.com +1 -1 # input: Add ALPS touchpad driver, driver by Neil Brown, Peter Osterlund # and Dmitry Torokhov, some fixes by Vojtech Pavlik. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Osterlund # # ChangeSet # 2004/09/21 15:27:54+02:00 pmaydell@chiark.greenend.org.uk # input: Add support for Kensington ThinkingMouse PS/2 protocol. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Maydell # # drivers/input/mouse/psmouse.h # 2004/09/21 15:27:48+02:00 pmaydell@chiark.greenend.org.uk +11 -7 # input: Add support for Kensington ThinkingMouse PS/2 protocol. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Maydell # # drivers/input/mouse/psmouse-base.c # 2004/09/21 15:27:48+02:00 pmaydell@chiark.greenend.org.uk +50 -5 # input: Add support for Kensington ThinkingMouse PS/2 protocol. # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Maydell # # ChangeSet # 2004/09/21 10:04:06+02:00 vojtech@suse.cz # input: Some HID devices have problems returning the HID class descriptor. # Try a few times before giving up. # # Signed-off-by: Vojtech Pavlik # # drivers/usb/input/hid-core.c # 2004/09/21 10:04:00+02:00 vojtech@suse.cz +8 -3 # input: Some HID devices have problems returning the HID class descriptor. # Try a few times before giving up. # # Signed-off-by: Vojtech Pavlik # # ChangeSet # 2004/09/21 09:24:21+02:00 pnelson@suse.cz # input: Fix oops in gamecon # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Nelson # # drivers/input/joystick/gamecon.c # 2004/09/21 09:24:14+02:00 pnelson@suse.cz +3 -3 # input: Fix oops in gamecon # # Signed-off-by: Vojtech Pavlik # Patch-by: Peter Nelson # # ChangeSet # 2004/09/19 21:58:28-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/input/serio/Kconfig # 2004/09/19 21:58:24-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/19 13:46:50+02:00 olh@suse.de # input: Joydump depends on gameport # # Signed-off-by: Vojtech Pavlik # Patch-by: Olaf Hering # # drivers/input/joystick/Kconfig # 2004/09/19 13:46:33+02:00 olh@suse.de +1 -1 # input: Joydump depends on gameport # # Signed-off-by: Vojtech Pavlik # Patch-by: Olaf Hering # # ChangeSet # 2004/09/17 13:30:06-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # Documentation/kernel-parameters.txt # 2004/09/17 13:30:02-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/16 16:27:12-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # include/linux/hiddev.h # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # fs/compat_ioctl.c # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hiddev.c # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/serio/Kconfig # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/09/16 16:27:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/08 12:29:01-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # include/linux/hiddev.h # 2004/09/08 12:28:56-07:00 akpm@bix.(none) +0 -7 # Auto merged # # drivers/usb/input/hiddev.c # 2004/09/08 12:28:56-07:00 akpm@bix.(none) +0 -6 # Auto merged # # drivers/Makefile # 2004/09/08 12:28:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/07 21:06:53-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/09/07 21:06:48-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/09/07 21:06:47-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/09/03 14:23:28-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # MAINTAINERS # 2004/09/03 14:23:24-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/31 14:02:33-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # MAINTAINERS # 2004/08/31 14:02:26-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/28 16:27:11-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # MAINTAINERS # 2004/08/28 16:27:07-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/27 23:57:20-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/input/serio/Kconfig # 2004/08/27 23:57:14-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/08/27 23:57:14-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/27 13:41:40-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # MAINTAINERS # 2004/08/27 13:41:36-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/08/27 13:41:36-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/25 19:45:04-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # MAINTAINERS # 2004/08/25 19:44:59-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/25 14:17:06-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # include/linux/compat_ioctl.h # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-core.c # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/serio/gscps2.c # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/gameport/vortex.c # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/gameport/emu10k1-gp.c # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/08/25 14:17:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/24 17:54:26-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/input/serio/gscps2.c # 2004/08/24 17:54:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/08/24 17:54:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/08/24 17:54:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/23 16:53:47-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/usb/input/hid-core.c # 2004/08/23 16:53:43-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/gameport/vortex.c # 2004/08/23 16:53:43-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/gameport/emu10k1-gp.c # 2004/08/23 16:53:43-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/08/23 16:53:43-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/08/23 16:53:42-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/23 14:14:32-07:00 akpm@bix.(none) # Merge # # MAINTAINERS # 2004/08/23 14:14:28-07:00 akpm@bix.(none) +0 -0 # SCCS merged # # fs/compat_ioctl.c # 2004/08/23 14:07:45-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-core.c # 2004/08/23 14:07:44-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/08/23 14:07:44-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/dmi_scan.c # 2004/08/23 14:07:44-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/23 14:06:49-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # include/linux/compat_ioctl.h # 2004/08/23 14:06:45-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/08/23 14:06:45-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/22 21:20:58-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # include/linux/compat_ioctl.h # 2004/08/22 21:20:54-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/15 01:07:14-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # arch/i386/kernel/dmi_scan.c # 2004/08/15 01:07:10-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/04 17:51:18-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/08/04 17:51:15-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/04 11:19:18-07:00 vojtech@kernel.bkbits.net # Merge kernel.bkbits.net:/home/vojtech/linus # into kernel.bkbits.net:/home/vojtech/input # # fs/compat_ioctl.c # 2004/08/04 11:19:12-07:00 vojtech@kernel.bkbits.net +0 -0 # Auto merged # # ChangeSet # 2004/07/29 23:23:37-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/07/29 23:23:33-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hiddev.c # 2004/07/29 23:23:33-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-core.c # 2004/07/29 23:23:33-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/07/29 23:23:33-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/29 23:22:42-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/07/29 23:22:38-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/27 12:48:04-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # drivers/serial/sunsu.c # 2004/07/27 12:48:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/keyboard/sunkbd.c # 2004/07/27 12:48:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/joystick/analog.c # 2004/07/27 12:48:01-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/26 22:48:28-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/serial/sunsu.c # 2004/07/26 22:48:25-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/keyboard/sunkbd.c # 2004/07/26 22:48:25-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/joystick/analog.c # 2004/07/26 22:48:25-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/25 16:28:12-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/07/25 16:28:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-core.c # 2004/07/25 16:28:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/07/25 16:28:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/16 18:31:00-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/usb/input/hid-core.c # 2004/07/16 18:30:57-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/Makefile # 2004/07/16 18:30:57-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/13 12:40:25-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/07/13 12:40:21-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/11 23:41:44-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hiddev.c # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-tmff.c # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/serio/i8042-io.h # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/char/keyboard.c # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/dmi_scan.c # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/07/11 23:41:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/11 13:33:39-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # arch/i386/kernel/dmi_scan.c # 2004/07/11 13:33:36-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/07/11 13:33:36-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/08 14:24:00-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # include/linux/compat_ioctl.h # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # fs/compat_ioctl.c # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hiddev.c # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-tmff.c # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/input/serio/i8042-io.h # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/char/keyboard.c # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/dmi_scan.c # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/07/08 14:23:56-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/06 23:59:45-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # include/linux/compat_ioctl.h # 2004/07/06 23:59:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # fs/compat_ioctl.c # 2004/07/06 23:59:41-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/05 13:01:11-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input # # drivers/usb/input/hiddev.c # 2004/07/05 13:01:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/dmi_scan.c # 2004/07/05 13:01:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # Documentation/kernel-parameters.txt # 2004/07/05 13:01:08-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/06/30 11:25:44-07:00 akpm@bix.(none) # Merge bk://kernel.bkbits.net/vojtech/input # into bix.(none):/usr/src/bk-input # # fs/compat_ioctl.c # 2004/06/30 11:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/usb/input/hid-tmff.c # 2004/06/30 11:25:40-07:00 akpm@bix.(none) +0 -1 # Auto merged # # drivers/input/serio/i8042-io.h # 2004/06/30 11:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/char/keyboard.c # 2004/06/30 11:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # diff -Nru a/drivers/char/keyboard.c b/drivers/char/keyboard.c --- a/drivers/char/keyboard.c 2004-09-21 21:20:42 -07:00 +++ b/drivers/char/keyboard.c 2004-09-21 21:20:42 -07:00 @@ -939,7 +939,10 @@ tasklet_enable(&keyboard_tasklet); } -#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) || defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) || defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) +#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\ + defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC32) ||\ + defined(CONFIG_SPARC64) || defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\ + (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_RPC)) #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\ ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001)) diff -Nru a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig --- a/drivers/input/joystick/Kconfig 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/joystick/Kconfig 2004-09-21 21:20:42 -07:00 @@ -249,7 +249,7 @@ config JOYSTICK_JOYDUMP tristate "Gameport data dumper" - depends on INPUT && INPUT_JOYSTICK + depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you want to dump data from your joystick into the system log for debugging purposes. Say N if you are making a production diff -Nru a/drivers/input/joystick/gamecon.c b/drivers/input/joystick/gamecon.c --- a/drivers/input/joystick/gamecon.c 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/joystick/gamecon.c 2004-09-21 21:20:42 -07:00 @@ -89,7 +89,7 @@ static int gc_status_bit[] = { 0x40, 0x80, 0x20, 0x10, 0x08 }; static char *gc_names[] = { NULL, "SNES pad", "NES pad", "NES FourPort", "Multisystem joystick", - "Multisystem 2-button joystick", "N64 controller", "PSX controller" + "Multisystem 2-button joystick", "N64 controller", "PSX controller", "PSX DDR controller" }; /* * N64 support. @@ -271,7 +271,7 @@ udelay(gc_psx_delay); read = parport_read_status(gc->pd->port) ^ 0x80; for (j = 0; j < 5; j++) - data[j] |= (read & gc_status_bit[j] & gc->pads[GC_PSX]) ? (1 << i) : 0; + data[j] |= (read & gc_status_bit[j] & (gc->pads[GC_PSX] | gc->pads[GC_DDR])) ? (1 << i) : 0; parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER); udelay(gc_psx_delay); } @@ -300,7 +300,7 @@ gc_psx_command(gc, 0, data2); /* Dump status */ for (i =0; i < 5; i++) /* Find the longest pad */ - if((gc_status_bit[i] & gc->pads[GC_PSX]) && (GC_PSX_LEN(id[i]) > max_len)) + if((gc_status_bit[i] & (gc->pads[GC_PSX] | gc->pads[GC_DDR])) && (GC_PSX_LEN(id[i]) > max_len)) max_len = GC_PSX_LEN(id[i]); for (i = 0; i < max_len * 2; i++) { /* Read in all the data */ diff -Nru a/drivers/input/mouse/Makefile b/drivers/input/mouse/Makefile --- a/drivers/input/mouse/Makefile 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/mouse/Makefile 2004-09-21 21:20:42 -07:00 @@ -14,4 +14,4 @@ obj-$(CONFIG_MOUSE_SERIAL) += sermouse.o obj-$(CONFIG_MOUSE_VSXXXAA) += vsxxxaa.o -psmouse-objs := psmouse-base.o logips2pp.o synaptics.o +psmouse-objs := psmouse-base.o alps.o logips2pp.o synaptics.o diff -Nru a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/drivers/input/mouse/alps.c 2004-09-21 21:20:42 -07:00 @@ -0,0 +1,422 @@ +/* + * ALPS touchpad PS/2 mouse driver + * + * Copyright (c) 2003 Neil Brown + * Copyright (c) 2003 Peter Osterlund + * Copyright (c) 2004 Dmitry Torokhov + * + * ALPS detection, tap switching and status querying info is taken from + * tpconfig utility (by C. Scott Ananian and Bruce Kall). + * + * 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. + */ + +#include +#include + +#include "psmouse.h" +#include "alps.h" + +#undef DEBUG +#ifdef DEBUG +#define dbg(format, arg...) printk(KERN_INFO "alps.c: " format "\n", ## arg) +#else +#define dbg(format, arg...) do {} while (0) +#endif + +#define ALPS_MODEL_GLIDEPOINT 1 +#define ALPS_MODEL_DUALPOINT 2 + +struct alps_model_info { + unsigned char signature[3]; + unsigned char model; +} alps_model_data[] = { + { { 0x33, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, + { { 0x53, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, + { { 0x53, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x73, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, + { { 0x73, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x28 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x3c }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x50 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x63, 0x02, 0x64 }, ALPS_MODEL_GLIDEPOINT }, + { { 0x20, 0x02, 0x0e }, ALPS_MODEL_DUALPOINT }, + { { 0x22, 0x02, 0x0a }, ALPS_MODEL_DUALPOINT }, + { { 0x22, 0x02, 0x14 }, ALPS_MODEL_DUALPOINT }, +}; + +/* + * ALPS abolute Mode + * byte 0: 1 1 1 1 1 mid0 rig0 lef0 + * byte 1: 0 x6 x5 x4 x3 x2 x1 x0 + * byte 2: 0 x10 x9 x8 x7 up1 fin ges + * byte 3: 0 y9 y8 y7 1 mid1 rig1 lef1 + * byte 4: 0 y6 y5 y4 y3 y2 y1 y0 + * byte 5: 0 z6 z5 z4 z3 z2 z1 z0 + * + * On a dualpoint, {mid,rig,lef}0 are the stick, 1 are the pad. + * We just 'or' them together for now. + * + * We used to send 'ges'tures as BTN_TOUCH but this made it impossible + * to disable tap events in the synaptics driver since the driver + * was unable to distinguish a gesture tap from an actual button click. + * A tap gesture now creates an emulated touch that the synaptics + * driver can interpret as a tap event, if MaxTapTime=0 and + * MaxTapMove=0 then the driver will ignore taps. + * + * The touchpad on an 'Acer Aspire' has 4 buttons: + * left,right,up,down. + * This device always sets {mid,rig,lef}0 to 1 and + * reflects left,right,down,up in lef1,rig1,mid1,up1. + */ + +static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) +{ + unsigned char *packet = psmouse->packet; + struct input_dev *dev = &psmouse->dev; + int x, y, z; + int left = 0, right = 0, middle = 0; + + input_regs(dev, regs); + + if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ + x = packet[1]; + if (packet[0] & 0x10) + x = x - 256; + y = packet[2]; + if (packet[0] & 0x20) + y = y - 256; + left = (packet[0] ) & 1; + right = (packet[0] >> 1) & 1; + + input_report_rel(dev, REL_X, x); + input_report_rel(dev, REL_Y, -y); + input_report_key(dev, BTN_A, left); + input_report_key(dev, BTN_B, right); + input_sync(dev); + return; + } + + x = (packet[1] & 0x7f) | ((packet[2] & 0x78)<<(7-3)); + y = (packet[4] & 0x7f) | ((packet[3] & 0x70)<<(7-4)); + z = packet[5]; + + if (z == 127) { /* DualPoint stick is relative, not absolute */ + if (x > 383) + x = x - 768; + if (y > 255) + y = y - 512; + left = packet[3] & 1; + right = (packet[3] >> 1) & 1; + + input_report_rel(dev, REL_X, x); + input_report_rel(dev, REL_Y, -y); + input_report_key(dev, BTN_LEFT, left); + input_report_key(dev, BTN_RIGHT, right); + input_sync(dev); + return; + } + + if (z > 30) input_report_key(dev, BTN_TOUCH, 1); + if (z < 25) input_report_key(dev, BTN_TOUCH, 0); + + if (z > 0) { + input_report_abs(dev, ABS_X, x); + input_report_abs(dev, ABS_Y, y); + } + input_report_abs(dev, ABS_PRESSURE, z); + input_report_key(dev, BTN_TOOL_FINGER, z > 0); + + left |= (packet[2] ) & 1; + left |= (packet[3] ) & 1; + right |= (packet[3] >> 1) & 1; + if (packet[0] == 0xff) { + int back = (packet[3] >> 2) & 1; + int forward = (packet[2] >> 2) & 1; + if (back && forward) { + middle = 1; + back = 0; + forward = 0; + } + input_report_key(dev, BTN_BACK, back); + input_report_key(dev, BTN_FORWARD, forward); + } else { + left |= (packet[0] ) & 1; + right |= (packet[0] >> 1) & 1; + middle |= (packet[0] >> 2) & 1; + middle |= (packet[3] >> 2) & 1; + } + + input_report_key(dev, BTN_LEFT, left); + input_report_key(dev, BTN_RIGHT, right); + input_report_key(dev, BTN_MIDDLE, middle); + + input_sync(dev); +} + +static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs *regs) +{ + if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ + if (psmouse->pktcnt == 3) { + alps_process_packet(psmouse, regs); + return PSMOUSE_FULL_PACKET; + } + return PSMOUSE_GOOD_DATA; + } + + /* ALPS absolute mode packets start with 0b11111mrl */ + if ((psmouse->packet[0] & 0xf8) != 0xf8) + return PSMOUSE_BAD_DATA; + + /* Bytes 2 - 6 should have 0 in the highest bit */ + if (psmouse->pktcnt > 1 && psmouse->pktcnt <= 6 && + (psmouse->packet[psmouse->pktcnt] & 0x80)) + return PSMOUSE_BAD_DATA; + + if (psmouse->pktcnt == 6) { + alps_process_packet(psmouse, regs); + return PSMOUSE_FULL_PACKET; + } + + return PSMOUSE_GOOD_DATA; +} + +int alps_get_model(struct psmouse *psmouse) +{ + unsigned char param[4]; + int i; + + /* + * First try "E6 report". + * ALPS should return 0x00,0x00,0x0a or 0x00,0x00,0x64 + */ + param[0] = 0; + if (psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) + return -1; + + param[0] = param[1] = param[2] = 0xff; + if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) + return -1; + + dbg("E6 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); + + if (param[0] != 0x00 || param[1] != 0x00 || (param[2] != 0x0a && param[2] != 0x64)) + return -1; + + /* Now try "E7 report". ALPS should return 0x33 in byte 1 */ + param[0] = 0; + if (psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21)) + return -1; + + param[0] = param[1] = param[2] = 0xff; + if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) + return -1; + + dbg("E7 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); + + for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) + if (!memcmp(param, alps_model_data[i].signature, sizeof(alps_model_data[i].signature))) + return alps_model_data[i].model; + + return -1; +} + +/* + * For DualPoint devices select the device that should respond to + * subsequent commands. It looks like glidepad is behind stickpointer, + * I'd thought it would be other way around... + */ +static int alps_passthrough_mode(struct psmouse *psmouse, int enable) +{ + unsigned char param[3]; + int cmd = enable ? PSMOUSE_CMD_SETSCALE21 : PSMOUSE_CMD_SETSCALE11; + + if (psmouse_command(psmouse, NULL, cmd) || + psmouse_command(psmouse, NULL, cmd) || + psmouse_command(psmouse, NULL, cmd) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE)) + return -1; + + /* we may get 3 more bytes, just ignore them */ + psmouse_command(psmouse, param, 0x0300); + + return 0; +} + +static int alps_magic_knock(struct psmouse *psmouse) +{ + /* Try ALPS magic knock - 4 disable before enable */ + if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_ENABLE)) + return -1; + return 0; +} + +static int alps_absolute_mode(struct psmouse *psmouse) +{ + if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_RESET_DIS)) + return -1; + + if (alps_passthrough_mode(psmouse, 1)) + return -1; + + if (alps_magic_knock(psmouse)) + return -1; + + if (alps_passthrough_mode(psmouse, 0)) + return -1; + + if (alps_magic_knock(psmouse)) + return -1; + + /* + * Switch mouse to poll (remote) mode so motion data will not + * get in our way + */ + return psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETPOLL); +} + +static int alps_get_status(struct psmouse *psmouse, char *param) +{ + /* Get status: 0xF5 0xF5 0xF5 0xE9 */ + if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) + return -1; + + dbg("Status: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); + + return 0; +} + +/* + * Turn touchpad tapping on or off. The sequences are: + * 0xE9 0xF5 0xF5 0xF3 0x0A to enable, + * 0xE9 0xF5 0xF5 0xE8 0x00 to disable. + * My guess that 0xE9 (GetInfo) is here as a sync point. + * For models that also have stickpointer (DualPoints) its tapping + * is controlled separately (0xE6 0xE6 0xE6 0xF3 0x14|0x0A) but + * we don't fiddle with it. + */ +static int alps_tap_mode(struct psmouse *psmouse, int model, int enable) +{ + int rc = 0; + int cmd = enable ? PSMOUSE_CMD_SETRATE : PSMOUSE_CMD_SETRES; + unsigned char tap_arg = enable ? 0x0A : 0x00; + unsigned char param[4]; + + if (model == ALPS_MODEL_DUALPOINT && alps_passthrough_mode(psmouse, 1)) + return -1; + + if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || + psmouse_command(psmouse, &tap_arg, cmd)) + rc = -1; + + if (model == ALPS_MODEL_DUALPOINT && alps_passthrough_mode(psmouse, 0)) + return -1; + + if (alps_get_status(psmouse, param)) + return -1; + + + return rc; +} + +static int alps_reconnect(struct psmouse *psmouse) +{ + int model; + unsigned char param[4]; + + if ((model = alps_get_model(psmouse)) < 0) + return -1; + + if (alps_get_status(psmouse, param)) + return -1; + + if ((model == ALPS_MODEL_DUALPOINT ? param[2] : param[0]) & 0x04) + alps_tap_mode(psmouse, model, 0); + + if (alps_absolute_mode(psmouse)) { + printk(KERN_ERR "alps.c: Failed to enable absolute mode\n"); + return -1; + } + + return 0; +} + +static void alps_disconnect(struct psmouse *psmouse) +{ + psmouse_reset(psmouse); +} + +int alps_init(struct psmouse *psmouse) +{ + unsigned char param[4]; + int model; + + if ((model = alps_get_model(psmouse)) < 0) + return -1; + + if (alps_get_status(psmouse, param)) { + printk(KERN_ERR "alps.c: touchpad status report request failed\n"); + return -1; + } + + printk(KERN_INFO "ALPS Touchpad (%s) detected\n", + model == ALPS_MODEL_GLIDEPOINT ? "Glidepoint" : "Dualpoint"); + + if ((model == ALPS_MODEL_DUALPOINT ? param[2] : param[0]) & 0x04) { + printk(KERN_INFO " Disabling hardware tapping\n"); + if (alps_tap_mode(psmouse, model, 0)) + printk(KERN_WARNING "alps.c: Failed to disable hardware tapping\n"); + } + + if (alps_absolute_mode(psmouse)) { + printk(KERN_ERR "alps.c: Failed to enable absolute mode\n"); + return -1; + } + + psmouse->dev.evbit[LONG(EV_REL)] |= BIT(EV_REL); + psmouse->dev.relbit[LONG(REL_X)] |= BIT(REL_X); + psmouse->dev.relbit[LONG(REL_Y)] |= BIT(REL_Y); + psmouse->dev.keybit[LONG(BTN_A)] |= BIT(BTN_A); + psmouse->dev.keybit[LONG(BTN_B)] |= BIT(BTN_B); + + psmouse->dev.evbit[LONG(EV_ABS)] |= BIT(EV_ABS); + input_set_abs_params(&psmouse->dev, ABS_X, 0, 1023, 0, 0); + input_set_abs_params(&psmouse->dev, ABS_Y, 0, 1023, 0, 0); + input_set_abs_params(&psmouse->dev, ABS_PRESSURE, 0, 127, 0, 0); + + psmouse->dev.keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH); + psmouse->dev.keybit[LONG(BTN_TOOL_FINGER)] |= BIT(BTN_TOOL_FINGER); + psmouse->dev.keybit[LONG(BTN_FORWARD)] |= BIT(BTN_FORWARD); + psmouse->dev.keybit[LONG(BTN_BACK)] |= BIT(BTN_BACK); + + psmouse->protocol_handler = alps_process_byte; + psmouse->disconnect = alps_disconnect; + psmouse->reconnect = alps_reconnect; + + return 0; +} + +int alps_detect(struct psmouse *psmouse) +{ + return alps_get_model(psmouse) < 0 ? 0 : 1; +} + diff -Nru a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/drivers/input/mouse/alps.h 2004-09-21 21:20:42 -07:00 @@ -0,0 +1,17 @@ +/* + * ALPS touchpad PS/2 mouse driver + * + * Copyright (c) 2003 Peter Osterlund + * + * 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. + */ + +#ifndef _ALPS_H +#define _ALPS_H + +int alps_detect(struct psmouse *psmouse); +int alps_init(struct psmouse *psmouse); + +#endif diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c --- a/drivers/input/mouse/psmouse-base.c 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/mouse/psmouse-base.c 2004-09-21 21:20:42 -07:00 @@ -2,6 +2,7 @@ * PS/2 mouse driver * * Copyright (c) 1999-2002 Vojtech Pavlik + * Copyright (c) 2003-2004 Dmitry Torokhov */ /* @@ -21,6 +22,7 @@ #include "psmouse.h" #include "synaptics.h" #include "logips2pp.h" +#include "alps.h" #define DRIVER_DESC "PS/2 mouse driver" @@ -55,7 +57,7 @@ __obsolete_setup("psmouse_resetafter="); __obsolete_setup("psmouse_rate="); -static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"}; +static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "ThinkPS/2", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2", "AlpsPS/2" }; /* * psmouse_process_byte() analyzes the PS/2 data stream and reports @@ -110,6 +112,15 @@ } /* + * Extra button on ThinkingMouse + */ + if (psmouse->type == PSMOUSE_THINKPS) { + input_report_key(dev, BTN_EXTRA, (packet[0] >> 3) & 1); + /* Without this bit of weirdness moving up gives wildly high Y changes. */ + packet[1] |= (packet[0] & 0x40) << 1; + } + +/* * Generic PS/2 Mouse */ @@ -146,7 +157,7 @@ flags & SERIO_PARITY ? " bad parity" : ""); psmouse->nak = 1; clear_bit(PSMOUSE_FLAG_ACK, &psmouse->flags); - clear_bit(PSMOUSE_FLAG_CMD, &psmouse->flags); + clear_bit(PSMOUSE_FLAG_CMD, &psmouse->flags); wake_up_interruptible(&psmouse->wait); goto out; } @@ -458,6 +469,26 @@ } /* + * Kensington ThinkingMouse / ExpertMouse magic init. + */ +static int thinking_detect(struct psmouse *psmouse) +{ + unsigned char param[2]; + unsigned char seq[] = { 20, 60, 40, 20, 20, 60, 40, 20, 20, 0 }; + int i; + + param[0] = 10; + psmouse_command(psmouse, param, PSMOUSE_CMD_SETRATE); + param[0] = 0; + psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES); + for (i = 0; seq[i]; i++) + psmouse_command(psmouse, seq + i, PSMOUSE_CMD_SETRATE); + psmouse_command(psmouse, param, PSMOUSE_CMD_GETID); + + return param[0] == 2; +} + +/* * psmouse_extensions() probes for any extensions to the basic PS/2 protocol * the mouse may have. */ @@ -468,6 +499,22 @@ int synaptics_hardware = 0; /* + * Try Kensington ThinkingMouse (we try first, because synaptics probe + * upsets the thinkingmouse). + */ + + if (max_proto > PSMOUSE_PS2 && thinking_detect(psmouse)) { + + if (set_properties) { + set_bit(BTN_EXTRA, psmouse->dev.keybit); + psmouse->vendor = "Kensington"; + psmouse->name = "ThinkingMouse"; + } + + return PSMOUSE_THINKPS; + } + +/* * Try Synaptics TouchPad */ if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) { @@ -494,6 +541,25 @@ synaptics_reset(psmouse); } +/* + * Try ALPS TouchPad + */ + if (max_proto > PSMOUSE_IMEX && alps_detect(psmouse)) { + + if (set_properties) { + psmouse->vendor = "ALPS"; + psmouse->name = "TouchPad"; + } + + if (!set_properties || alps_init(psmouse) == 0) + return PSMOUSE_ALPS; + +/* + * Init failed, try basic relative protocols + */ + max_proto = PSMOUSE_IMEX; + } + if (max_proto > PSMOUSE_IMEX && genius_detect(psmouse)) { if (set_properties) { @@ -608,7 +674,7 @@ else if (psmouse_resolution) param[0] = 0; - psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES); + psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES); } /* @@ -639,7 +705,7 @@ if (psmouse_max_proto != PSMOUSE_PS2) { psmouse_set_rate(psmouse); psmouse_set_resolution(psmouse); - psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11); + psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11); } /* @@ -846,7 +912,7 @@ psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); if (psmouse->reconnect) { - if (psmouse->reconnect(psmouse)) + if (psmouse->reconnect(psmouse)) goto out; } else if (psmouse_probe(psmouse) < 0 || psmouse->type != psmouse_extensions(psmouse, psmouse_max_proto, 0)) diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h --- a/drivers/input/mouse/psmouse.h 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/mouse/psmouse.h 2004-09-21 21:20:42 -07:00 @@ -2,9 +2,11 @@ #define _PSMOUSE_H #define PSMOUSE_CMD_SETSCALE11 0x00e6 +#define PSMOUSE_CMD_SETSCALE21 0x00e7 #define PSMOUSE_CMD_SETRES 0x10e8 #define PSMOUSE_CMD_GETINFO 0x03e9 #define PSMOUSE_CMD_SETSTREAM 0x00ea +#define PSMOUSE_CMD_SETPOLL 0x00f0 #define PSMOUSE_CMD_POLL 0x03eb #define PSMOUSE_CMD_GETID 0x02f2 #define PSMOUSE_CMD_SETRATE 0x10f3 @@ -69,13 +71,18 @@ void (*pt_deactivate)(struct psmouse *psmouse); }; -#define PSMOUSE_PS2 1 -#define PSMOUSE_PS2PP 2 -#define PSMOUSE_PS2TPP 3 -#define PSMOUSE_GENPS 4 -#define PSMOUSE_IMPS 5 -#define PSMOUSE_IMEX 6 -#define PSMOUSE_SYNAPTICS 7 +enum psmouse_type { + PSMOUSE_NONE, + PSMOUSE_PS2, + PSMOUSE_PS2PP, + PSMOUSE_PS2TPP, + PSMOUSE_THINKPS, + PSMOUSE_GENPS, + PSMOUSE_IMPS, + PSMOUSE_IMEX, + PSMOUSE_SYNAPTICS, + PSMOUSE_ALPS, +}; int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command); int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command); diff -Nru a/drivers/input/mousedev.c b/drivers/input/mousedev.c --- a/drivers/input/mousedev.c 2004-09-21 21:20:42 -07:00 +++ b/drivers/input/mousedev.c 2004-09-21 21:20:42 -07:00 @@ -115,20 +115,26 @@ #define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03]) #define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03]) -static void mousedev_touchpad_event(struct mousedev *mousedev, unsigned int code, int value) +static void mousedev_touchpad_event(struct input_dev *dev, struct mousedev *mousedev, unsigned int code, int value) { + int size; + if (mousedev->touch) { switch (code) { case ABS_X: + size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; + if (size == 0) size = xres; fx(0) = value; if (mousedev->pkt_count >= 2) - mousedev->packet.dx = ((fx(0) - fx(1)) / 2 + (fx(1) - fx(2)) / 2) / 8; + mousedev->packet.dx = ((fx(0) - fx(1)) / 2 + (fx(1) - fx(2)) / 2) * xres / (size * 2); break; case ABS_Y: + size = dev->absmax[ABS_Y] - dev->absmin[ABS_Y]; + if (size == 0) size = yres; fy(0) = value; if (mousedev->pkt_count >= 2) - mousedev->packet.dy = -((fy(0) - fy(1)) / 2 + (fy(1) - fy(2)) / 2) / 8; + mousedev->packet.dy = -((fy(0) - fy(1)) / 2 + (fy(1) - fy(2)) / 2) * yres / (size * 2); break; } } @@ -279,7 +285,7 @@ return; if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit)) - mousedev_touchpad_event(mousedev, code, value); + mousedev_touchpad_event(handle->dev, mousedev, code, value); else mousedev_abs_event(handle->dev, mousedev, code, value); diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c --- a/drivers/usb/input/hid-core.c 2004-09-21 21:20:42 -07:00 +++ b/drivers/usb/input/hid-core.c 2004-09-21 21:20:42 -07:00 @@ -1275,9 +1275,14 @@ static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char type, void *buf, int size) { - return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), - USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN, - (type << 8), ifnum, buf, size, HZ * USB_CTRL_GET_TIMEOUT); + int result, retries = 4; + do { + result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), + USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN, + (type << 8), ifnum, buf, size, HZ * USB_CTRL_GET_TIMEOUT); + retries--; + } while (result < 0 && retries); + return result; } int hid_open(struct hid_device *hid)