Message ID | 1313002751-10935-1-git-send-email-chase.douglas@canonical.com |
---|---|
State | New |
Headers | show |
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 > >
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);