Skip to content

Commit

Permalink
HID: wacom: fix timeout on probe for some wacoms
Browse files Browse the repository at this point in the history
Some Wacom tablets (at least the ISDv4 found in the Lenovo X230) timeout
during probe while retrieving the input reports.
The only time this information is valuable is during the feature_mapping
stage, so we can ask for it there and discard the generic input reports
retrieval.

This gives a code path closer to the wacom.ko driver when it was in the
input subtree (not HID).

Cc: stable@vger.kernel.org # requires cherry-pick of c64d883
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Benjamin Tissoires authored and Jiri Kosina committed Sep 22, 2014
1 parent 12969e3 commit 8ffffd5
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions drivers/hid/wacom_sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,24 @@ static void wacom_feature_mapping(struct hid_device *hdev,
{
struct wacom *wacom = hid_get_drvdata(hdev);
struct wacom_features *features = &wacom->wacom_wac.features;
u8 *data;
int ret;

switch (usage->hid) {
case HID_DG_CONTACTMAX:
/* leave touch_max as is if predefined */
if (!features->touch_max)
features->touch_max = field->value[0];
if (!features->touch_max) {
/* read manually */
data = kzalloc(2, GFP_KERNEL);
if (!data)
break;
data[0] = field->report->id;
ret = wacom_get_report(hdev, HID_FEATURE_REPORT,
data, 2, 0);
if (ret == 2)
features->touch_max = data[1];
kfree(data);
}
break;
}
}
Expand Down Expand Up @@ -1280,6 +1292,8 @@ static int wacom_probe(struct hid_device *hdev,
if (!id->driver_data)
return -EINVAL;

hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;

wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL);
if (!wacom)
return -ENOMEM;
Expand Down

0 comments on commit 8ffffd5

Please sign in to comment.