Patchwork [Oneiric] HID: magicmouse: Set resolution of touch surfaces

login
register
mail settings
Submitter Chase Douglas
Date Aug. 10, 2011, 6:59 p.m.
Message ID <1313002751-10935-1-git-send-email-chase.douglas@canonical.com>
Download mbox | patch
Permalink /patch/109426/
State New
Headers show

Comments

Chase Douglas - Aug. 10, 2011, 6:59 p.m.
Add touch surface resolution information. The size of the touch surfaces
has been determined to the hundredth of a mm.

Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Michael Poole <mdpoole@troilus.org>
Cc: linux-input@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
[jkosina@suse.cz: update comments and commit message]
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
(cherry picked from commit 4f6fdf08681cecd9f38499de7a02eb4f05f399a7)
---
This patch has been accepted upstream and should land in 3.1.0. Touch
surface resolution is becoming important for our stack. This patch does
not change any existing functionality, but merely fills in the
resolution details.

 drivers/hid/hid-magicmouse.c |   56 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 46 insertions(+), 10 deletions(-)
Leann Ogasawara - Sept. 7, 2011, 5:06 p.m.
On Wed, 2011-08-10 at 11:59 -0700, Chase Douglas wrote:
> Add touch surface resolution information. The size of the touch surfaces
> has been determined to the hundredth of a mm.
> 
> Cc: Jiri Kosina <jkosina@suse.cz>
> Cc: Michael Poole <mdpoole@troilus.org>
> Cc: linux-input@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
> [jkosina@suse.cz: update comments and commit message]
> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> (cherry picked from commit 4f6fdf08681cecd9f38499de7a02eb4f05f399a7)
> ---
> This patch has been accepted upstream and should land in 3.1.0. Touch
> surface resolution is becoming important for our stack. This patch does
> not change any existing functionality, but merely fills in the
> resolution details.

I spoke with Chase in #ubuntu-kernel on FreeNode and he noted that due
to the kernel.org compromise, this patch won't land upstream in time for
our Ubuntu kernel freeze next Thurs (Sept 15).  Thus, I've decided go
ahead and apply this as a SAUCE patch for Oneiric.

Thanks,
Leann

>  drivers/hid/hid-magicmouse.c |   56 ++++++++++++++++++++++++++++++++++-------
>  1 files changed, 46 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
> index 0ec91c1..b5bdab3 100644
> --- a/drivers/hid/hid-magicmouse.c
> +++ b/drivers/hid/hid-magicmouse.c
> @@ -81,6 +81,28 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
>  #define NO_TOUCHES -1
>  #define SINGLE_TOUCH_UP -2
>  
> +/* Touch surface information. Dimension is in hundredths of a mm, min and max
> + * are in units. */
> +#define MOUSE_DIMENSION_X (float)9056
> +#define MOUSE_MIN_X -1100
> +#define MOUSE_MAX_X 1258
> +#define MOUSE_RES_X ((MOUSE_MAX_X - MOUSE_MIN_X) / (MOUSE_DIMENSION_X / 100))
> +#define MOUSE_DIMENSION_Y (float)5152
> +#define MOUSE_MIN_Y -1589
> +#define MOUSE_MAX_Y 2047
> +#define MOUSE_RES_Y ((MOUSE_MAX_Y - MOUSE_MIN_Y) / (MOUSE_DIMENSION_Y / 100))
> +
> +#define TRACKPAD_DIMENSION_X (float)13000
> +#define TRACKPAD_MIN_X -2909
> +#define TRACKPAD_MAX_X 3167
> +#define TRACKPAD_RES_X \
> +	((TRACKPAD_MAX_X - TRACKPAD_MIN_X) / (TRACKPAD_DIMENSION_X / 100))
> +#define TRACKPAD_DIMENSION_Y (float)11000
> +#define TRACKPAD_MIN_Y -2456
> +#define TRACKPAD_MAX_Y 2565
> +#define TRACKPAD_RES_Y \
> +	((TRACKPAD_MAX_Y - TRACKPAD_MIN_Y) / (TRACKPAD_DIMENSION_Y / 100))
> +
>  /**
>   * struct magicmouse_sc - Tracks Magic Mouse-specific data.
>   * @input: Input device through which we report events.
> @@ -406,17 +428,31 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
>  		 * inverse of the reported Y.
>  		 */
>  		if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) {
> -			input_set_abs_params(input, ABS_MT_POSITION_X, -1100,
> -				1358, 4, 0);
> -			input_set_abs_params(input, ABS_MT_POSITION_Y, -1589,
> -				2047, 4, 0);
> +			input_set_abs_params(input, ABS_MT_POSITION_X,
> +				MOUSE_MIN_X, MOUSE_MAX_X, 4, 0);
> +			input_set_abs_params(input, ABS_MT_POSITION_Y,
> +				MOUSE_MIN_Y, MOUSE_MAX_Y, 4, 0);
> +
> +			input_abs_set_res(input, ABS_MT_POSITION_X,
> +				MOUSE_RES_X);
> +			input_abs_set_res(input, ABS_MT_POSITION_Y,
> +				MOUSE_RES_Y);
>  		} else { /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */
> -			input_set_abs_params(input, ABS_X, -2909, 3167, 4, 0);
> -			input_set_abs_params(input, ABS_Y, -2456, 2565, 4, 0);
> -			input_set_abs_params(input, ABS_MT_POSITION_X, -2909,
> -				3167, 4, 0);
> -			input_set_abs_params(input, ABS_MT_POSITION_Y, -2456,
> -				2565, 4, 0);
> +			input_set_abs_params(input, ABS_X, TRACKPAD_MIN_X,
> +				TRACKPAD_MAX_X, 4, 0);
> +			input_set_abs_params(input, ABS_Y, TRACKPAD_MIN_Y,
> +				TRACKPAD_MAX_Y, 4, 0);
> +			input_set_abs_params(input, ABS_MT_POSITION_X,
> +				TRACKPAD_MIN_X, TRACKPAD_MAX_X, 4, 0);
> +			input_set_abs_params(input, ABS_MT_POSITION_Y,
> +				TRACKPAD_MIN_Y, TRACKPAD_MAX_Y, 4, 0);
> +
> +			input_abs_set_res(input, ABS_X, TRACKPAD_RES_X);
> +			input_abs_set_res(input, ABS_Y, TRACKPAD_RES_Y);
> +			input_abs_set_res(input, ABS_MT_POSITION_X,
> +				TRACKPAD_RES_X);
> +			input_abs_set_res(input, ABS_MT_POSITION_Y,
> +				TRACKPAD_RES_Y);
>  		}
>  
>  		input_set_events_per_packet(input, 60);
> -- 
> 1.7.4.1
> 
>

Patch

diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
index 0ec91c1..b5bdab3 100644
--- a/drivers/hid/hid-magicmouse.c
+++ b/drivers/hid/hid-magicmouse.c
@@ -81,6 +81,28 @@  MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
 #define NO_TOUCHES -1
 #define SINGLE_TOUCH_UP -2
 
+/* Touch surface information. Dimension is in hundredths of a mm, min and max
+ * are in units. */
+#define MOUSE_DIMENSION_X (float)9056
+#define MOUSE_MIN_X -1100
+#define MOUSE_MAX_X 1258
+#define MOUSE_RES_X ((MOUSE_MAX_X - MOUSE_MIN_X) / (MOUSE_DIMENSION_X / 100))
+#define MOUSE_DIMENSION_Y (float)5152
+#define MOUSE_MIN_Y -1589
+#define MOUSE_MAX_Y 2047
+#define MOUSE_RES_Y ((MOUSE_MAX_Y - MOUSE_MIN_Y) / (MOUSE_DIMENSION_Y / 100))
+
+#define TRACKPAD_DIMENSION_X (float)13000
+#define TRACKPAD_MIN_X -2909
+#define TRACKPAD_MAX_X 3167
+#define TRACKPAD_RES_X \
+	((TRACKPAD_MAX_X - TRACKPAD_MIN_X) / (TRACKPAD_DIMENSION_X / 100))
+#define TRACKPAD_DIMENSION_Y (float)11000
+#define TRACKPAD_MIN_Y -2456
+#define TRACKPAD_MAX_Y 2565
+#define TRACKPAD_RES_Y \
+	((TRACKPAD_MAX_Y - TRACKPAD_MIN_Y) / (TRACKPAD_DIMENSION_Y / 100))
+
 /**
  * struct magicmouse_sc - Tracks Magic Mouse-specific data.
  * @input: Input device through which we report events.
@@ -406,17 +428,31 @@  static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
 		 * inverse of the reported Y.
 		 */
 		if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) {
-			input_set_abs_params(input, ABS_MT_POSITION_X, -1100,
-				1358, 4, 0);
-			input_set_abs_params(input, ABS_MT_POSITION_Y, -1589,
-				2047, 4, 0);
+			input_set_abs_params(input, ABS_MT_POSITION_X,
+				MOUSE_MIN_X, MOUSE_MAX_X, 4, 0);
+			input_set_abs_params(input, ABS_MT_POSITION_Y,
+				MOUSE_MIN_Y, MOUSE_MAX_Y, 4, 0);
+
+			input_abs_set_res(input, ABS_MT_POSITION_X,
+				MOUSE_RES_X);
+			input_abs_set_res(input, ABS_MT_POSITION_Y,
+				MOUSE_RES_Y);
 		} else { /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */
-			input_set_abs_params(input, ABS_X, -2909, 3167, 4, 0);
-			input_set_abs_params(input, ABS_Y, -2456, 2565, 4, 0);
-			input_set_abs_params(input, ABS_MT_POSITION_X, -2909,
-				3167, 4, 0);
-			input_set_abs_params(input, ABS_MT_POSITION_Y, -2456,
-				2565, 4, 0);
+			input_set_abs_params(input, ABS_X, TRACKPAD_MIN_X,
+				TRACKPAD_MAX_X, 4, 0);
+			input_set_abs_params(input, ABS_Y, TRACKPAD_MIN_Y,
+				TRACKPAD_MAX_Y, 4, 0);
+			input_set_abs_params(input, ABS_MT_POSITION_X,
+				TRACKPAD_MIN_X, TRACKPAD_MAX_X, 4, 0);
+			input_set_abs_params(input, ABS_MT_POSITION_Y,
+				TRACKPAD_MIN_Y, TRACKPAD_MAX_Y, 4, 0);
+
+			input_abs_set_res(input, ABS_X, TRACKPAD_RES_X);
+			input_abs_set_res(input, ABS_Y, TRACKPAD_RES_Y);
+			input_abs_set_res(input, ABS_MT_POSITION_X,
+				TRACKPAD_RES_X);
+			input_abs_set_res(input, ABS_MT_POSITION_Y,
+				TRACKPAD_RES_Y);
 		}
 
 		input_set_events_per_packet(input, 60);