[APPLIED] Re: [Oneiric][PATCH] HID: magicmouse: Set resolution of touch surfaces

Leann Ogasawara leann.ogasawara at canonical.com
Wed Sep 7 17:06:52 UTC 2011


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 at suse.cz>
> Cc: Michael Poole <mdpoole at troilus.org>
> Cc: linux-input at vger.kernel.org
> Cc: linux-kernel at vger.kernel.org
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> [jkosina at suse.cz: update comments and commit message]
> Signed-off-by: Jiri Kosina <jkosina at 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
> 
> 






More information about the kernel-team mailing list