The IBM/Lenovo ScrollPoint mouse is uses a TrackPoint-type mechanism rather than a standard mouse wheel. It appears to the system as a standard USB mouse with one caveat.
(http://www.ibmfiles.com/pages/scrollpoint.htm) Where a standard USB mouse with a scrollwheel reports one click of the wheel as 1 unit in the z direction, this one measures force and reports a number from 1 to 64. It is VERY sensitive. Practically any force at all will send it into double-digits range. Scrolling at ten to sixty times normal speed is not pleasant. IBM/Lenovo makes/made a driver for Microsoft Windows which lowered the scrolling speed. This divides the reported scroll movement by 16, giving a range from 1 to 4. I have been using this for over a year and find this comfortable. Martin Index: dev/hid/hidms.c ================================================================== RCS file: /cvs/src/sys/dev/hid/hidms.c,v retrieving revision 1.3 diff -u -p -r1.3 hidms.c --- dev/hid/hidms.c 22 May 2016 22:06:11 -0000 1.3 +++ dev/hid/hidms.c 22 Sep 2016 00:55:18 -0000 @@ -385,6 +385,11 @@ hidms_input(struct hidms *ms, uint8_t *d (ms->sc_tsscale.maxy - ms->sc_tsscale.miny); } + if (ms->sc_flags & HIDMS_FASTSCROLL) { + dz /= 16; + dw /= 16; + } + for (i = 0; i < ms->sc_num_buttons; i++) if (hid_get_data(data, len, &ms->sc_loc_btn[i])) buttons |= (1 << HIDMS_BUT(i)); Index: dev/hid/hidmsvar.h =================================================================== RCS file: /cvs/src/sys/dev/hid/hidmsvar.h,v retrieving revision 1.1 diff -u -p -r1.1 hidmsvar.h --- dev/hid/hidmsvar.h 8 Jan 2016 15:54:13 -0000 1.1 +++ dev/hid/hidmsvar.h 22 Sep 2016 00:55:18 -0000 @@ -43,18 +43,19 @@ struct tsscale { struct hidms { int sc_enabled; int sc_flags; /* device configuration */ -#define HIDMS_SPUR_BUT_UP 0x001 /* spurious button up events */ -#define HIDMS_Z 0x002 /* Z direction available */ -#define HIDMS_REVZ 0x004 /* Z-axis is reversed */ -#define HIDMS_W 0x008 /* W direction available */ -#define HIDMS_REVW 0x010 /* W-axis is reversed */ -#define HIDMS_LEADINGBYTE 0x020 /* Unknown leading byte */ -#define HIDMS_ABSX 0x040 /* X-axis is absolute */ -#define HIDMS_ABSY 0x080 /* Y-axis is absolute */ -#define HIDMS_TIP 0x100 /* Tip switch on a digitiser pen */ -#define HIDMS_BARREL 0x200 /* Barrel switch on a digitiser pen */ -#define HIDMS_ERASER 0x400 /* Eraser switch on a digitiser pen */ -#define HIDMS_MS_BAD_CLASS 0x800 /* Mouse doesn't identify properly */ +#define HIDMS_SPUR_BUT_UP 0x0001 /* spurious button up events */ +#define HIDMS_Z 0x0002 /* Z direction available */ +#define HIDMS_REVZ 0x0004 /* Z-axis is reversed */ +#define HIDMS_W 0x0008 /* W direction available */ +#define HIDMS_REVW 0x0010 /* W-axis is reversed */ +#define HIDMS_LEADINGBYTE 0x0020 /* Unknown leading byte */ +#define HIDMS_ABSX 0x0040 /* X-axis is absolute */ +#define HIDMS_ABSY 0x0080 /* Y-axis is absolute */ +#define HIDMS_TIP 0x0100 /* Tip switch on a digitiser pen */ +#define HIDMS_BARREL 0x0200 /* Barrel switch on a digitiser pen */ +#define HIDMS_ERASER 0x0400 /* Eraser switch on a digitiser pen */ +#define HIDMS_MS_BAD_CLASS 0x0800 /* Mouse doesn't identify properly */ +#define HIDMS_FASTSCROLL 0x1000 /* Eraser switch on a digitiser pen */ int sc_num_buttons; u_int32_t sc_buttons; /* mouse button status */ Index: dev/usb/ums.c =================================================================== RCS file: /cvs/src/sys/dev/usb/ums.c,v retrieving revision 1.43 diff -u -p -r1.43 ums.c --- dev/usb/ums.c 12 Jan 2016 19:16:21 -0000 1.43 +++ dev/usb/ums.c 22 Sep 2016 00:55:18 -0000 @@ -143,6 +143,8 @@ ums_attach(struct device *parent, struct qflags |= HIDMS_MS_BAD_CLASS; if (quirks & UQ_MS_LEADING_BYTE) qflags |= HIDMS_LEADINGBYTE; + if (quirks & UQ_LENOVO_FASTSCROLL) + qflags |= HIDMS_FASTSCROLL; if (hidms_setup(self, ms, qflags, uha->reportid, desc, size) != 0) return; Index: dev/usb/usb_quirks.c =================================================================== RCS file: /cvs/src/sys/dev/usb/usb_quirks.c,v retrieving revision 1.74 diff -u -p -r1.74 usb_quirks.c --- dev/usb/usb_quirks.c 27 Nov 2015 10:59:32 -0000 1.74 +++ dev/usb/usb_quirks.c 22 Sep 2016 00:55:18 -0000 @@ -150,6 +150,9 @@ const struct usbd_quirk_entry { { USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2, ANY, { UQ_MS_BAD_CLASS | UQ_MS_LEADING_BYTE }}, + { USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_SCROLLPOINT, + ANY, { UQ_LENOVO_FASTSCROLL }}, + { 0, 0, 0, { 0 } } }; Index: dev/usb/usb_quirks.h =================================================================== RCS file: /cvs/src/sys/dev/usb/usb_quirks.h,v retrieving revision 1.16 diff -u -p -r1.16 usb_quirks.h --- dev/usb/usb_quirks.h 19 Jul 2010 05:08:37 -0000 1.16 +++ dev/usb/usb_quirks.h 22 Sep 2016 00:55:18 -0000 @@ -49,6 +49,7 @@ struct usbd_quirks { #define UQ_MS_LEADING_BYTE 0x00010000 /* mouse sends unknown leading byte */ #define UQ_EHCI_NEEDTO_DISOWN 0x00020000 /* must hand device over to USB 1.1 if attached to EHCI */ +#define UQ_LENOVO_FASTSCROLL 0x00040000 /* mouse scrolls too fast */ }; extern const struct usbd_quirks usbd_no_quirk; Index: dev/usb/usbdevs =================================================================== RCS file: /cvs/src/sys/dev/usb/usbdevs,v retrieving revision 1.669 diff -u -p -r1.669 usbdevs --- dev/usb/usbdevs 21 Sep 2016 08:55:21 -0000 1.669 +++ dev/usb/usbdevs 22 Sep 2016 00:55:18 -0000 @@ -2490,6 +2490,7 @@ product LEADTEK 9531 0x2101 9531 GPS /* Lenovo products */ product LENOVO AX88179 0x304b AX88179 +product LENOVO SCROLLPOINT 0x6049 ScrollPoint Mouse product LENOVO ETHERNET 0x7203 USB 2.0 Ethernet /* Lexar products */ Index: dev/usb/usbdevs.h =================================================================== RCS file: /cvs/src/sys/dev/usb/usbdevs.h,v retrieving revision 1.681 diff -u -p -r1.681 usbdevs.h --- dev/usb/usbdevs.h 21 Sep 2016 08:56:17 -0000 1.681 +++ dev/usb/usbdevs.h 22 Sep 2016 00:55:18 -0000 @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs.h,v 1.681 2016/09/21 08:56:17 mpi Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -2497,6 +2497,7 @@ /* Lenovo products */ #define USB_PRODUCT_LENOVO_AX88179 0x304b /* AX88179 */ +#define USB_PRODUCT_LENOVO_SCROLLPOINT 0x6049 /* ScrollPoint Mouse */ #define USB_PRODUCT_LENOVO_ETHERNET 0x7203 /* USB 2.0 Ethernet */ /* Lexar products */ Index: dev/usb/usbdevs_data.h =================================================================== RCS file: /cvs/src/sys/dev/usb/usbdevs_data.h,v retrieving revision 1.675 diff -u -p -r1.675 usbdevs_data.h --- dev/usb/usbdevs_data.h 21 Sep 2016 08:56:17 -0000 1.675 +++ dev/usb/usbdevs_data.h 22 Sep 2016 00:55:18 -0000 @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs_data.h,v 1.675 2016/09/21 08:56:17 mpi Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -5440,6 +5440,10 @@ const struct usb_known_product usb_known { USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_AX88179, "AX88179", + }, + { + USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_SCROLLPOINT, + "ScrollPoint Mouse", }, { USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET,