瀏覽代碼

HID: magicmouse: Correct parsing of large X and Y motions.

The X and Y values have two more significant bits in the same byte
that contains click status.  Include these in the reported value.
Thanks to Iain Hibbert of NetBSD for pointing this out.

Signed-off-by: Michael Poole <mdpoole@troilus.org>
Acked-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Michael Poole 15 年之前
父節點
當前提交
7d876c05fa
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/hid/hid-magicmouse.c

+ 2 - 2
drivers/hid/hid-magicmouse.c

@@ -285,8 +285,8 @@ static int magicmouse_raw_event(struct hid_device *hdev,
 		 * to have the current touch information before
 		 * to have the current touch information before
 		 * generating a click event.
 		 * generating a click event.
 		 */
 		 */
-		x = (signed char)data[1];
-		y = (signed char)data[2];
+		x = (int)(((data[3] & 0x0c) << 28) | (data[1] << 22)) >> 22;
+		y = (int)(((data[3] & 0x30) << 26) | (data[2] << 22)) >> 22;
 		clicks = data[3];
 		clicks = data[3];
 		break;
 		break;
 	case 0x20: /* Theoretically battery status (0-100), but I have
 	case 0x20: /* Theoretically battery status (0-100), but I have