diff options
| author | Ondrej Zary <linux@rainbow-software.org> | 2007-07-03 01:55:03 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dtor@insightbb.com> | 2007-07-10 00:35:18 -0400 |
| commit | df561fcd445c9cf9f4fff98ea795a0e72b7dc1e1 (patch) | |
| tree | acf33fa9b0b363af9cefb2837c39c5ec88ad7ae7 | |
| parent | 1e2831db01c0726ec046e69719a10d7696b283fb (diff) | |
Input: usbtouchscreen - add support for IRTOUCHSYSTEMS touchscreens
This patch adds support for IRTOUCHSYSTEMS (or UNITOP) infrared touchscreens.
The touchscreen sends data in 8-byte packets.
BYTE 0 - unknown meaning, seen only one value: 0x54
BYTE 1 - unknown meaning, 3 lowest bits indicate touch state
values seen: 0x81, 0x82 or 0x83
bit 0 = set if the screen is touched and was not touched before (touch
bit 1 = set if the screen is touched and was touched (dragging)
bit 2 = set if the touch was ended (release)
BYTES 2 and 3 - X position, high-order-byte first, range = 0 to 0x0FFF
BYTES 4 and 5 - Y position, high-order-byte first, range = 0 to 0x0FFF
BYTE 6 - unknown meaning, seen only one value: 0xFF
BYTE 7 - unknown meaning, seen only one value: 0x00
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| -rw-r--r-- | drivers/input/touchscreen/Kconfig | 6 | ||||
| -rw-r--r-- | drivers/input/touchscreen/usbtouchscreen.c | 33 |
2 files changed, 39 insertions, 0 deletions
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index e5cca9bd0406..69371779806a 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig | |||
| @@ -177,6 +177,7 @@ config TOUCHSCREEN_USB_COMPOSITE | |||
| 177 | - some other eTurboTouch | 177 | - some other eTurboTouch |
| 178 | - Gunze AHL61 | 178 | - Gunze AHL61 |
| 179 | - DMC TSC-10/25 | 179 | - DMC TSC-10/25 |
| 180 | - IRTOUCHSYSTEMS/UNITOP | ||
| 180 | 181 | ||
| 181 | Have a look at <http://linux.chapter7.ch/touchkit/> for | 182 | Have a look at <http://linux.chapter7.ch/touchkit/> for |
| 182 | a usage description and the required user-space stuff. | 183 | a usage description and the required user-space stuff. |
| @@ -219,4 +220,9 @@ config TOUCHSCREEN_USB_DMC_TSC10 | |||
| 219 | bool "DMC TSC-10/25 device support" if EMBEDDED | 220 | bool "DMC TSC-10/25 device support" if EMBEDDED |
| 220 | depends on TOUCHSCREEN_USB_COMPOSITE | 221 | depends on TOUCHSCREEN_USB_COMPOSITE |
| 221 | 222 | ||
| 223 | config TOUCHSCREEN_USB_IRTOUCH | ||
| 224 | default y | ||
| 225 | bool "IRTOUCHSYSTEMS/UNITOP device support" if EMBEDDED | ||
| 226 | depends on TOUCHSCREEN_USB_COMPOSITE | ||
| 227 | |||
| 222 | endif | 228 | endif |
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index e3f22852bd09..b407028ffc59 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | * - eTurboTouch | 9 | * - eTurboTouch |
| 10 | * - Gunze AHL61 | 10 | * - Gunze AHL61 |
| 11 | * - DMC TSC-10/25 | 11 | * - DMC TSC-10/25 |
| 12 | * - IRTOUCHSYSTEMS/UNITOP | ||
| 12 | * | 13 | * |
| 13 | * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@gmx.ch> | 14 | * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@gmx.ch> |
| 14 | * Copyright (C) by Todd E. Johnson (mtouchusb.c) | 15 | * Copyright (C) by Todd E. Johnson (mtouchusb.c) |
| @@ -110,6 +111,7 @@ enum { | |||
| 110 | DEVTYPE_ETURBO, | 111 | DEVTYPE_ETURBO, |
| 111 | DEVTYPE_GUNZE, | 112 | DEVTYPE_GUNZE, |
| 112 | DEVTYPE_DMC_TSC10, | 113 | DEVTYPE_DMC_TSC10, |
| 114 | DEVTYPE_IRTOUCH, | ||
| 113 | }; | 115 | }; |
| 114 | 116 | ||
| 115 | static struct usb_device_id usbtouch_devices[] = { | 117 | static struct usb_device_id usbtouch_devices[] = { |
| @@ -150,6 +152,11 @@ static struct usb_device_id usbtouch_devices[] = { | |||
| 150 | {USB_DEVICE(0x0afa, 0x03e8), .driver_info = DEVTYPE_DMC_TSC10}, | 152 | {USB_DEVICE(0x0afa, 0x03e8), .driver_info = DEVTYPE_DMC_TSC10}, |
| 151 | #endif | 153 | #endif |
| 152 | 154 | ||
| 155 | #ifdef CONFIG_TOUCHSCREEN_USB_IRTOUCH | ||
| 156 | {USB_DEVICE(0x595a, 0x0001), .driver_info = DEVTYPE_IRTOUCH}, | ||
| 157 | {USB_DEVICE(0x6615, 0x0001), .driver_info = DEVTYPE_IRTOUCH}, | ||
| 158 | #endif | ||
| 159 | |||
| 153 | {} | 160 | {} |
| 154 | }; | 161 | }; |
| 155 | 162 | ||
| @@ -416,6 +423,21 @@ static int dmc_tsc10_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | |||
| 416 | 423 | ||
| 417 | 424 | ||
| 418 | /***************************************************************************** | 425 | /***************************************************************************** |
| 426 | * IRTOUCH Part | ||
| 427 | */ | ||
| 428 | #ifdef CONFIG_TOUCHSCREEN_USB_IRTOUCH | ||
| 429 | static int irtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | ||
| 430 | { | ||
| 431 | dev->x = (pkt[3] << 8) | pkt[2]; | ||
| 432 | dev->y = (pkt[5] << 8) | pkt[4]; | ||
| 433 | dev->touch = (pkt[1] & 0x03) ? 1 : 0; | ||
| 434 | |||
| 435 | return 1; | ||
| 436 | } | ||
| 437 | #endif | ||
| 438 | |||
| 439 | |||
| 440 | /***************************************************************************** | ||
| 419 | * the different device descriptors | 441 | * the different device descriptors |
| 420 | */ | 442 | */ |
| 421 | static struct usbtouch_device_info usbtouch_dev_info[] = { | 443 | static struct usbtouch_device_info usbtouch_dev_info[] = { |
| @@ -504,6 +526,17 @@ static struct usbtouch_device_info usbtouch_dev_info[] = { | |||
| 504 | .read_data = dmc_tsc10_read_data, | 526 | .read_data = dmc_tsc10_read_data, |
| 505 | }, | 527 | }, |
| 506 | #endif | 528 | #endif |
| 529 | |||
| 530 | #ifdef CONFIG_TOUCHSCREEN_USB_IRTOUCH | ||
| 531 | [DEVTYPE_IRTOUCH] = { | ||
| 532 | .min_xc = 0x0, | ||
| 533 | .max_xc = 0x0fff, | ||
| 534 | .min_yc = 0x0, | ||
| 535 | .max_yc = 0x0fff, | ||
| 536 | .rept_size = 8, | ||
| 537 | .read_data = irtouch_read_data, | ||
| 538 | }, | ||
| 539 | #endif | ||
| 507 | }; | 540 | }; |
| 508 | 541 | ||
| 509 | 542 | ||
