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
No objections from:	hps
MFC after:		1 month
Differential Revision:	https://reviews.freebsd.org/D17689
This commit is contained in:
Vladimir Kondratyev 2018-11-10 22:14:09 +00:00
parent 5cc57c208a
commit 236e308af1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340338
2 changed files with 28 additions and 0 deletions

View File

@ -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");
@ -701,6 +703,25 @@ uhid_probe(device_t dev)
!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);
}

View File

@ -856,6 +856,12 @@ wmt_cont_max_parse(struct wmt_softc *sc, const void *r_ptr, uint16_t r_len)
}
}
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, NULL, 0);
MODULE_DEPEND(wmt, usb, 1, 1, 1);
MODULE_DEPEND(wmt, evdev, 1, 1, 1);
MODULE_VERSION(wmt, 1);
USB_PNP_HOST_INFO(wmt_devs);