lkml.org 
[lkml]   [2007]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectInvert X or Y axis options for usbtouchscreen
    Date
    Hello,
    this patch adds support for inverting X or Y axis (or both) to the
    usbtouchscreen driver. Invert Y is needed (together with swap XY) for
    LeadingTouch screens (at least for some of them).

    Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

    --
    Ondrej Zary
    --- linux-2.6.20-orig/drivers/usb/input/usbtouchscreen.c 2007-03-23 15:49:35.000000000 +0100
    +++ linux/drivers/usb/input/usbtouchscreen.c 2007-03-23 15:52:02.000000000 +0100
    @@ -54,6 +54,12 @@
    static int swap_xy;
    module_param(swap_xy, bool, 0644);
    MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped.");
    +static int invert_x;
    +module_param(invert_x, bool, 0644);
    +MODULE_PARM_DESC(invert_x, "Invert X axis.");
    +static int invert_y;
    +module_param(invert_y, bool, 0644);
    +MODULE_PARM_DESC(invert_y, "Invert Y axis.");

    /* device specifc data/functions */
    struct usbtouch_usb;
    @@ -514,6 +520,7 @@
    unsigned char *pkt, int len)
    {
    struct usbtouch_device_info *type = usbtouch->type;
    + int x, y;

    if (!type->read_data(usbtouch, pkt))
    return;
    @@ -521,12 +528,20 @@
    input_report_key(usbtouch->input, BTN_TOUCH, usbtouch->touch);

    if (swap_xy) {
    - input_report_abs(usbtouch->input, ABS_X, usbtouch->y);
    - input_report_abs(usbtouch->input, ABS_Y, usbtouch->x);
    + x = usbtouch->y;
    + y = usbtouch->x;
    } else {
    - input_report_abs(usbtouch->input, ABS_X, usbtouch->x);
    - input_report_abs(usbtouch->input, ABS_Y, usbtouch->y);
    + x = usbtouch->x;
    + y = usbtouch->y;
    }
    + if (invert_x)
    + x = type->max_xc - x + type->min_xc;
    + if (invert_y)
    + y = type->max_yc - y + type->min_yc;
    +
    + input_report_abs(usbtouch->input, ABS_X, x);
    + input_report_abs(usbtouch->input, ABS_Y, y);
    +
    if (type->max_press)
    input_report_abs(usbtouch->input, ABS_PRESSURE, usbtouch->press);
    input_sync(usbtouch->input);
    \
     
     \ /
      Last update: 2007-03-24 15:31    [W:0.029 / U:1.308 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site