aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2011-05-19 11:58:07 -0400
committerJiri Kosina <jkosina@suse.cz>2011-05-20 04:28:00 -0400
commit23746a66d7d9e73402c68ef00d708796b97ebd72 (patch)
treef1675fa8c6e05f0f0b4d8e8c866052aec5dbbb59 /drivers
parent966922f26c7fb5eddbe3c506b66bb5659f57b76f (diff)
HID: magicmouse: ignore 'ivalid report id' while switching modes
The device reponds with 'invalid report id' when feature report switching it into multitouch mode is sent to it. This has been silently ignored before 0825411ade ("HID: bt: Wait for ACK on Sent Reports"), but since this commit, it propagates -EIO from the _raw callback . So let the driver ignore -EIO as response to 0xd7,0x01 report, as that's how the device reacts in normal mode. Sad, but following reality. This fixes https://bugzilla.kernel.org/show_bug.cgi?id=35022 Tested-by: Chase Douglas <chase.douglas@canonical.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hid/hid-magicmouse.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
index 318cc40df92d..82f0c3d741f2 100644
--- a/drivers/hid/hid-magicmouse.c
+++ b/drivers/hid/hid-magicmouse.c
@@ -499,9 +499,17 @@ static int magicmouse_probe(struct hid_device *hdev,
499 } 499 }
500 report->size = 6; 500 report->size = 6;
501 501
502 /*
503 * The device reponds with 'invalid report id' when feature
504 * report switching it into multitouch mode is sent to it.
505 *
506 * This results in -EIO from the _raw low-level transport callback,
507 * but there seems to be no other way of switching the mode.
508 * Thus the super-ugly hacky success check below.
509 */
502 ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature), 510 ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature),
503 HID_FEATURE_REPORT); 511 HID_FEATURE_REPORT);
504 if (ret != sizeof(feature)) { 512 if (ret != -EIO) {
505 hid_err(hdev, "unable to request touch data (%d)\n", ret); 513 hid_err(hdev, "unable to request touch data (%d)\n", ret);
506 goto err_stop_hw; 514 goto err_stop_hw;
507 } 515 }