diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hid/hid-magicmouse.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c index b5bdab3299bc..f0fbd7bd239e 100644 --- a/drivers/hid/hid-magicmouse.c +++ b/drivers/hid/hid-magicmouse.c | |||
@@ -537,9 +537,17 @@ static int magicmouse_probe(struct hid_device *hdev, | |||
537 | } | 537 | } |
538 | report->size = 6; | 538 | report->size = 6; |
539 | 539 | ||
540 | /* | ||
541 | * Some devices repond with 'invalid report id' when feature | ||
542 | * report switching it into multitouch mode is sent to it. | ||
543 | * | ||
544 | * This results in -EIO from the _raw low-level transport callback, | ||
545 | * but there seems to be no other way of switching the mode. | ||
546 | * Thus the super-ugly hacky success check below. | ||
547 | */ | ||
540 | ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature), | 548 | ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature), |
541 | HID_FEATURE_REPORT); | 549 | HID_FEATURE_REPORT); |
542 | if (ret != sizeof(feature)) { | 550 | if (ret != -EIO && ret != sizeof(feature)) { |
543 | hid_err(hdev, "unable to request touch data (%d)\n", ret); | 551 | hid_err(hdev, "unable to request touch data (%d)\n", ret); |
544 | goto err_stop_hw; | 552 | goto err_stop_hw; |
545 | } | 553 | } |