usb/128760: [ums] patch for Microsoft Comfort Optical Mouse
3000 (model 1043)
Arjan de Vet
devet at devet.org
Tue Feb 3 11:41:22 PST 2009
>Responsible-Changed-From-To: freebsd-usb->cperciva
>Responsible-Changed-By: cperciva
>Responsible-Changed-When: Wed Nov 12 13:32:58 UTC 2008
>Responsible-Changed-Why:
>Fixed in HEAD
>
>http://www.freebsd.org/cgi/query-pr.cgi?pr=128760
I've found some time to do more testing/debugging and it seems my
previous patch is wrong. This mouse needs an sc->sc_isize = 6 instead of
the usual 5. Therefore the quirk entry in my original patch should be
removed and the attached patch (relative to RELENG_7_1) makes all
buttons/wheel/etc. work.
I'm not sure whether this is the best way to do this, please let me know
if there's a more structural way to deal with the specific
characteristics of this mouse.
Arjan
-------------- next part --------------
Index: ums.c
===================================================================
RCS file: /home/freebsd/CVS/src/sys/dev/usb/ums.c,v
retrieving revision 1.96.2.5.2.1
diff -u -r1.96.2.5.2.1 ums.c
--- ums.c 25 Nov 2008 02:59:29 -0000 1.96.2.5.2.1
+++ ums.c 25 Nov 2008 18:53:29 -0000
@@ -404,6 +404,29 @@
sc->sc_loc_btn[2].pos = 2;
}
+ /*
+ * The Microsoft Comfort Optical Mouse 3000 Model 1043 has a 4-way
+ * tilt wheel and 4 buttons. It reports size=2 and id=19 which seem
+ * bogus.
+ */
+ if (uaa->vendor == USB_VENDOR_MICROSOFT &&
+ uaa->product == USB_PRODUCT_MICROSOFT_COMFORT3000) {
+ sc->flags = UMS_T | UMS_Z;
+ sc->nbuttons = 4;
+ sc->sc_isize = 6;
+ sc->sc_iid = 0;
+ sc->sc_loc_x.pos = 16;
+ sc->sc_loc_y.pos = 24;
+ sc->sc_loc_z.pos = 32;
+ sc->sc_loc_t.pos = 40;
+ sc->sc_loc_t.size = 8;
+ sc->sc_loc_btn[0].pos = 8;
+ sc->sc_loc_btn[1].pos = 9;
+ sc->sc_loc_btn[2].pos = 10;
+ sc->sc_loc_btn[3].pos = 12;
+ sc->sc_loc_btn[3].size = 1;
+ }
+
sc->sc_ibuf = malloc(sc->sc_isize, M_USB, M_NOWAIT);
if (!sc->sc_ibuf) {
printf("%s: no memory\n", device_get_nameunit(sc->sc_dev));
Index: usbdevs
===================================================================
RCS file: /home/freebsd/CVS/src/sys/dev/usb/usbdevs,v
retrieving revision 1.328.2.21.2.1
diff -u -r1.328.2.21.2.1 usbdevs
--- usbdevs 25 Nov 2008 02:59:29 -0000 1.328.2.21.2.1
+++ usbdevs 25 Nov 2008 18:53:29 -0000
@@ -1664,6 +1664,7 @@
product MICROSOFT MN110 0x007a 10/100 USB NIC
product MICROSOFT WLINTELLIMOUSE 0x008c Wireless Optical IntelliMouse
product MICROSOFT WLNOTEBOOK 0x00b9 Wireless Optical Mouse (Model 1023)
+product MICROSOFT COMFORT3000 0x00d1 Comfort Optical Mouse 3000 (Model 1043)
product MICROSOFT WLNOTEBOOK2 0x00e1 Wireless Optical Mouse 3000 (Model 1056)
product MICROSOFT WLNOTEBOOK3 0x00d2 Wireless Optical Mouse 3000 (Model 1049)
product MICROSOFT WLUSBMOUSE 0x00b9 Wireless USB Mouse
More information about the freebsd-usb
mailing list