lkml.org 
[lkml]   [2011]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/8 v3] Input: synaptics - refactor y inversion
    Date
    Synaptics touchpads report increasing y from bottom to top.
    This is inverted from normal userspace "top of screen is 0" coordinates.
    Thus, the kernel driver reports inverted y coordinates to userspace.

    This patch refactors this inversion.

    Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
    Acked-by: Chase Douglas <chase.douglas@canonical.com>
    ---
    drivers/input/mouse/synaptics.c | 15 ++++++++++++---
    1 files changed, 12 insertions(+), 3 deletions(-)

    diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
    index 5538fc6..297e88f 100644
    --- a/drivers/input/mouse/synaptics.c
    +++ b/drivers/input/mouse/synaptics.c
    @@ -44,6 +44,16 @@
    #define YMIN_NOMINAL 1408
    #define YMAX_NOMINAL 4448

    +/*
    + * Synaptics touchpads report the y coordinate from bottom to top, which is
    + * opposite from what userspace expects.
    + * This function is used to invert y before reporting.
    + */
    +static int invert_y(int y)
    +{
    + return YMAX_NOMINAL + YMIN_NOMINAL - y;
    +}
    +

    /*****************************************************************************
    * Stuff we need even when we do not want native Synaptics support
    @@ -502,8 +512,7 @@ static void synaptics_report_semi_mt_slot(struct input_dev *dev, int slot,
    input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
    if (active) {
    input_report_abs(dev, ABS_MT_POSITION_X, x);
    - input_report_abs(dev, ABS_MT_POSITION_Y,
    - YMAX_NOMINAL + YMIN_NOMINAL - y);
    + input_report_abs(dev, ABS_MT_POSITION_Y, invert_y(y));
    }
    }

    @@ -597,7 +606,7 @@ static void synaptics_process_packet(struct psmouse *psmouse)

    if (num_fingers > 0) {
    input_report_abs(dev, ABS_X, hw.x);
    - input_report_abs(dev, ABS_Y, YMAX_NOMINAL + YMIN_NOMINAL - hw.y);
    + input_report_abs(dev, ABS_Y, invert_y(hw.y));
    }
    input_report_abs(dev, ABS_PRESSURE, hw.z);

    --
    1.7.3.1


    \
     
     \ /
      Last update: 2011-08-12 19:19    [W:0.024 / U:0.536 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site