svn commit: r343155 - stable/12/sys/dev/usb/input

Vladimir Kondratyev wulf at FreeBSD.org
Fri Jan 18 20:59:08 UTC 2019


Author: wulf
Date: Fri Jan 18 20:59:06 2019
New Revision: 343155
URL: https://svnweb.freebsd.org/changeset/base/343155

Log:
  MFC r340338:
  wmt(4): Add PNP record so it could be picked by devd/devmatch.
  Fix uhid(4) conflict with blacklisting of multitouch HID-usages
  in uhid(4) probe handler.
  
  Reviewed by:	imp
  Differential Revision:	https://reviews.freebsd.org/D17689

Modified:
  stable/12/sys/dev/usb/input/uhid.c
  stable/12/sys/dev/usb/input/wmt.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/usb/input/uhid.c
==============================================================================
--- stable/12/sys/dev/usb/input/uhid.c	Fri Jan 18 20:35:24 2019	(r343154)
+++ stable/12/sys/dev/usb/input/uhid.c	Fri Jan 18 20:59:06 2019	(r343155)
@@ -675,6 +675,8 @@ uhid_probe(device_t dev)
 {
 	struct usb_attach_arg *uaa = device_get_ivars(dev);
 	int error;
+	void *buf;
+	uint16_t len;
 
 	DPRINTFN(11, "\n");
 
@@ -700,6 +702,25 @@ uhid_probe(device_t dev)
 	     ((uaa->info.bInterfaceProtocol == UIPROTO_MOUSE) &&
 	      !usb_test_quirk(uaa, UQ_UMS_IGNORE))))
 		return (ENXIO);
+
+	/* Check for mandatory multitouch usages to give wmt(4) a chance */
+	if (!usb_test_quirk(uaa, UQ_WMT_IGNORE)) {
+		error = usbd_req_get_hid_desc(uaa->device, NULL,
+		    &buf, &len, M_USBDEV, uaa->info.bIfaceIndex);
+		/* Let HID decscriptor-less devices to be handled at attach */
+		if (!error) {
+			if (hid_locate(buf, len,
+			    HID_USAGE2(HUP_DIGITIZERS, HUD_CONTACT_MAX),
+			    hid_feature, 0, NULL, NULL, NULL) &&
+			    hid_locate(buf, len,
+			    HID_USAGE2(HUP_DIGITIZERS, HUD_CONTACTID),
+			    hid_input, 0, NULL, NULL, NULL)) {
+				free(buf, M_USBDEV);
+				return (ENXIO);
+			}
+			free(buf, M_USBDEV);
+		}
+	}
 
 	return (BUS_PROBE_GENERIC);
 }

Modified: stable/12/sys/dev/usb/input/wmt.c
==============================================================================
--- stable/12/sys/dev/usb/input/wmt.c	Fri Jan 18 20:35:24 2019	(r343154)
+++ stable/12/sys/dev/usb/input/wmt.c	Fri Jan 18 20:59:06 2019	(r343155)
@@ -856,6 +856,12 @@ wmt_cont_max_parse(struct wmt_softc *sc, const void *r
 	}
 }
 
+static const STRUCT_USB_HOST_ID wmt_devs[] = {
+	/* generic HID class w/o boot interface */
+	{USB_IFACE_CLASS(UICLASS_HID),
+	 USB_IFACE_SUBCLASS(0),},
+};
+
 static devclass_t wmt_devclass;
 
 static device_method_t wmt_methods[] = {
@@ -876,3 +882,4 @@ DRIVER_MODULE(wmt, uhub, wmt_driver, wmt_devclass, NUL
 MODULE_DEPEND(wmt, usb, 1, 1, 1);
 MODULE_DEPEND(wmt, evdev, 1, 1, 1);
 MODULE_VERSION(wmt, 1);
+USB_PNP_HOST_INFO(wmt_devs);


More information about the svn-src-all mailing list