From 25b85bad7d344fce8c8dbf1fa349a1b7a1d0a2df Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Tue, 6 Mar 2012 17:57:04 +0100 Subject: [PATCH] --- yaml --- r: 291641 b: refs/heads/master c: 8d179a9ef25a64b451e2bbd46f6a6c16c6a72eb1 h: refs/heads/master i: 291639: 566e6486a70ca9a6f78e44e2ac3d9da1fc3a94e2 v: v3 --- [refs] | 2 +- trunk/drivers/hid/hid-core.c | 12 +++++++++--- trunk/drivers/hid/hid-multitouch.c | 11 +++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index cf0470fe9aad..1217af543b6f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ed9d5c96147b3bed6178252e8e04b27b7d32edd0 +refs/heads/master: 8d179a9ef25a64b451e2bbd46f6a6c16c6a72eb1 diff --git a/trunk/drivers/hid/hid-core.c b/trunk/drivers/hid/hid-core.c index 4f4143cc789b..05a0c9a35bf2 100644 --- a/trunk/drivers/hid/hid-core.c +++ b/trunk/drivers/hid/hid-core.c @@ -1232,7 +1232,6 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) hdev->claimed |= HID_CLAIMED_INPUT; if (hdev->quirks & HID_QUIRK_MULTITOUCH) { /* this device should be handled by hid-multitouch, skip it */ - hdev->quirks &= ~HID_QUIRK_MULTITOUCH; return -ENODEV; } @@ -1667,6 +1666,10 @@ static int hid_bus_match(struct device *dev, struct device_driver *drv) struct hid_driver *hdrv = container_of(drv, struct hid_driver, driver); struct hid_device *hdev = container_of(dev, struct hid_device, dev); + if ((hdev->quirks & HID_QUIRK_MULTITOUCH) && + !strncmp(hdrv->name, "hid-multitouch", 14)) + return 1; + if (!hid_match_device(hdev, hdrv)) return 0; @@ -1691,8 +1694,11 @@ static int hid_device_probe(struct device *dev) if (!hdev->driver) { id = hid_match_device(hdev, hdrv); if (id == NULL) { - ret = -ENODEV; - goto unlock; + if (!((hdev->quirks & HID_QUIRK_MULTITOUCH) && + !strncmp(hdrv->name, "hid-multitouch", 14))) { + ret = -ENODEV; + goto unlock; + } } hdev->driver = hdrv; diff --git a/trunk/drivers/hid/hid-multitouch.c b/trunk/drivers/hid/hid-multitouch.c index 2088ab4e5db5..a61ba42e1bff 100644 --- a/trunk/drivers/hid/hid-multitouch.c +++ b/trunk/drivers/hid/hid-multitouch.c @@ -637,10 +637,12 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) struct mt_device *td; struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */ - for (i = 0; mt_classes[i].name ; i++) { - if (id->driver_data == mt_classes[i].name) { - mtclass = &(mt_classes[i]); - break; + if (id) { + for (i = 0; mt_classes[i].name ; i++) { + if (id->driver_data == mt_classes[i].name) { + mtclass = &(mt_classes[i]); + break; + } } } @@ -648,6 +650,7 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) * that emit events over several HID messages. */ hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC; + hdev->quirks &= ~HID_QUIRK_MULTITOUCH; td = kzalloc(sizeof(struct mt_device), GFP_KERNEL); if (!td) {