18 Sep 19:12
[PATCH] usbtouchscreen: option to swap X and Y axes
From: Matteo Croce <technoboy85 <at> gmail.com>
Subject: [PATCH] usbtouchscreen: option to swap X and Y axes
Newsgroups: gmane.linux.kernel.input
Date: 2008-09-18 17:16:40 GMT
Subject: [PATCH] usbtouchscreen: option to swap X and Y axes
Newsgroups: gmane.linux.kernel.input
Date: 2008-09-18 17:16:40 GMT
Here there is a patch to invert the X and Y axes, as my controller swaps it:
Signed-off-by: Matteo Croce <matteo <at> openwrt.org>
--- a/drivers/input/touchscreen/usbtouchscreen.c 2008-09-18
18:50:44.294868149 +0200
+++ b/drivers/input/touchscreen/usbtouchscreen.c 2008-09-18
18:50:44.226867816 +0200
@@ -56,8 +56,16 @@
#define DRIVER_DESC "USB Touchscreen Driver"
static int swap_xy;
+static int invert_x;
+static int invert_y;
+
module_param(swap_xy, bool, 0644);
+module_param(invert_x, bool, 0644);
+module_param(invert_y, bool, 0644);
+
MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped.");
+MODULE_PARM_DESC(invert_x, "If set X axe is inverted.");
+MODULE_PARM_DESC(invert_y, "If set Y axe is inverted.");
/* device specifc data/functions */
struct usbtouch_usb;
@@ -683,6 +691,7 @@
unsigned char *pkt, int len)
{
struct usbtouch_device_info *type = usbtouch->type;
+ int x, y;
if (!type->read_data(usbtouch, pkt))
return;
@@ -690,12 +699,22 @@
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;
+ if(invert_x)
+ x = type->max_yc - (x - type->min_yc);
+ if(invert_y)
+ y = type->max_xc - (y - type->min_xc);
} 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);
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
RSS Feed