[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150727222823.GF3613@dtor-ws>
Date: Mon, 27 Jul 2015 15:28:23 -0700
From: Dmitry Torokhov <dmitry.torokhov@...il.com>
To: Philippe Coval <rzr@....org>
Cc: bernhard.bender@...ecmed.com, linux-input@...r.kernel.org,
linux-kernel@...r.kernel.org,
Philippe Coval <philippe.coval@...n.eurogiciel.org>
Subject: Re: [PATCH v3] usbtouchscreen: add option for inverting X or Y axis
On Tue, Jul 28, 2015 at 12:16:01AM +0200, Philippe Coval wrote:
> Invert Y is needed (together with swap XY) for some touchscreens,
> at least for some of them :
>
> - CarTft 8in4 (type=eGalax, USB=0eef:0001)
> - LeadingTouch
>
> Since there is not guarantee that
> those above devices will all behave the same,
> it's safer to configure them userland using udev rules.
>
> This way is safer than hardcoding options per "recognized" model,
> and possible regressions will be avoided in a first place.
Does the following still work?
Thanks.
--
Dmitry
Input: usbtouchscreen - add option for inverting X or Y axis
From: Philippe Coval <rzr@....org>
Invert Y is needed (together with swap XY) for some touchscreens,
at least for some of them:
- CarTft 8in4 (type=eGalax, USB=0eef:0001)
- LeadingTouch
Since there is not guarantee that those above devices will all behave the
same, it's safer to configure them from userland using udev rules.
This way is safer than hard-coding options per "recognized" model,
and possible regressions will be avoided in a first place.
Credits-to: Ondrej Zary <linux@...nbow-software.org>
Link: https://lkml.org/lkml/2015/6/7/191
Bug-Link: https://bugs.tizen.org/jira/browse/TC-2522
Signed-off-by: Philippe Coval <philippe.coval@...n.eurogiciel.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@...il.com>
---
drivers/input/touchscreen/usbtouchscreen.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
index 2c41107..d283077 100644
--- a/drivers/input/touchscreen/usbtouchscreen.c
+++ b/drivers/input/touchscreen/usbtouchscreen.c
@@ -64,6 +64,14 @@ static bool swap_xy;
module_param(swap_xy, bool, 0644);
MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped.");
+static bool invert_x;
+module_param(invert_x, bool, 0644);
+MODULE_PARM_DESC(invert_x, "Invert X axis.");
+
+static bool invert_y;
+module_param(invert_y, bool, 0644);
+MODULE_PARM_DESC(invert_y, "Invert Y axis.");
+
static bool hwcalib_xy;
module_param(hwcalib_xy, bool, 0644);
MODULE_PARM_DESC(hwcalib_xy, "If set hw-calibrated X/Y are used if available");
@@ -1312,13 +1320,16 @@ static void usbtouch_process_pkt(struct usbtouch_usb *usbtouch,
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);
- } else {
- input_report_abs(usbtouch->input, ABS_X, usbtouch->x);
- input_report_abs(usbtouch->input, ABS_Y, usbtouch->y);
- }
+ if (swap_xy)
+ swap(usbtouch->y, usbtouch->x);
+ if (invert_x)
+ usbtouch->x = type->max_xc - usbtouch->x + type->min_xc;
+ if (invert_y)
+ usbtouch->y = type->max_yc - usbtouch->y + type->min_yc;
+
+ input_report_abs(usbtouch->input, ABS_X, usbtouch->x);
+ input_report_abs(usbtouch->input, ABS_Y, usbtouch->y);
+
if (type->max_press)
input_report_abs(usbtouch->input, ABS_PRESSURE, usbtouch->press);
input_sync(usbtouch->input);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists