From a2573a13a2c6a024d97577e062d2b89df2ec4d90 Mon Sep 17 00:00:00 2001 From: Chuck Ebbert Date: Mon, 26 Sep 2011 09:39:04 -0400 Subject: [PATCH] Fix breakage of Apple MagicMouse/Trackpad (rhbz #714381) --- ...d-report-id-while-switching-modes-v2.patch | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch diff --git a/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch b/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch new file mode 100644 index 000000000..cf87d2ad3 --- /dev/null +++ b/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch @@ -0,0 +1,62 @@ +From 35d851df23b093ee027f827fed2213ae5e88fc7a Mon Sep 17 00:00:00 2001 +From: Jiri Kosina +Date: Thu, 25 Aug 2011 14:21:37 +0200 +Subject: [PATCH] HID: magicmouse: ignore 'ivalid report id' while switching + modes, v2 + +This is basically a more generic respin of 23746a6 ("HID: magicmouse: ignore +'ivalid report id' while switching modes") which got reverted later by +c3a492. + +It turns out that on some configurations, this is actually still the case +and we are not able to detect in runtime. + +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 + +Reported-by: Chase Douglas +Reported-by: Jaikumar Ganesh +Tested-by: Chase Douglas +Tested-by: Jaikumar Ganesh +Signed-off-by: Jiri Kosina +--- + 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 b5bdab3..f0fbd7b 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, + } + report->size = 6; + ++ /* ++ * Some devices repond with 'invalid report id' when feature ++ * report switching it into multitouch mode is sent to it. ++ * ++ * This results in -EIO from the _raw low-level transport callback, ++ * but there seems to be no other way of switching the mode. ++ * Thus the super-ugly hacky success check below. ++ */ + ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature), + HID_FEATURE_REPORT); +- if (ret != sizeof(feature)) { ++ if (ret != -EIO && ret != sizeof(feature)) { + hid_err(hdev, "unable to request touch data (%d)\n", ret); + goto err_stop_hw; + } +-- +1.7.5.4 +