[kernel/f15] Fix breakage of Apple MagicMouse/Trackpad (rhbz #714381)

Chuck Ebbert cebbert at fedoraproject.org
Mon Sep 26 13:38:25 UTC 2011


commit a2573a13a2c6a024d97577e062d2b89df2ec4d90
Author: Chuck Ebbert <cebbert at redhat.com>
Date:   Mon Sep 26 09:39:04 2011 -0400

    Fix breakage of Apple MagicMouse/Trackpad (rhbz #714381)

 ...ivalid-report-id-while-switching-modes-v2.patch |   62 ++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)
---
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 0000000..cf87d2a
--- /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 <jkosina at suse.cz>
+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 <chase.douglas at canonical.com>
+Reported-by: Jaikumar Ganesh <jaikumarg at android.com>
+Tested-by: Chase Douglas <chase.douglas at canonical.com>
+Tested-by: Jaikumar Ganesh <jaikumarg at android.com>
+Signed-off-by: Jiri Kosina <jkosina at suse.cz>
+---
+ 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
+


More information about the scm-commits mailing list