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:
parent
5cc57c208a
commit
236e308af1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340338
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user