diff options
| author | Holger Schurig <hs4233@mail.mn-solutions.de> | 2006-11-17 16:50:15 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-12-01 17:23:37 -0500 |
| commit | 24ced062a2965645d651ff92bc93b2c1f926474e (patch) | |
| tree | 50209988d1981a5a7a56639e49db1da002bdbc8d /drivers/usb/input | |
| parent | 9ce8540c884c19c0f5f38c9e85d4bdc192baf321 (diff) | |
usbtouchscreen: add support for DMC TSC-10/25 devices
Adds support for the DMC TSC-10 and TSC-25 usb touchscreen controllers.
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/input')
| -rw-r--r-- | drivers/usb/input/Kconfig | 6 | ||||
| -rw-r--r-- | drivers/usb/input/usbtouchscreen.c | 96 |
2 files changed, 101 insertions, 1 deletions
diff --git a/drivers/usb/input/Kconfig b/drivers/usb/input/Kconfig index 20db36448ab3..661af7aa6236 100644 --- a/drivers/usb/input/Kconfig +++ b/drivers/usb/input/Kconfig | |||
| @@ -221,6 +221,7 @@ config USB_TOUCHSCREEN | |||
| 221 | - ITM | 221 | - ITM |
| 222 | - some other eTurboTouch | 222 | - some other eTurboTouch |
| 223 | - Gunze AHL61 | 223 | - Gunze AHL61 |
| 224 | - DMC TSC-10/25 | ||
| 224 | 225 | ||
| 225 | Have a look at <http://linux.chapter7.ch/touchkit/> for | 226 | Have a look at <http://linux.chapter7.ch/touchkit/> for |
| 226 | a usage description and the required user-space stuff. | 227 | a usage description and the required user-space stuff. |
| @@ -258,6 +259,11 @@ config USB_TOUCHSCREEN_GUNZE | |||
| 258 | bool "Gunze AHL61 device support" if EMBEDDED | 259 | bool "Gunze AHL61 device support" if EMBEDDED |
| 259 | depends on USB_TOUCHSCREEN | 260 | depends on USB_TOUCHSCREEN |
| 260 | 261 | ||
| 262 | config USB_TOUCHSCREEN_DMC_TSC10 | ||
| 263 | default y | ||
| 264 | bool "DMC TSC-10/25 device support" if EMBEDDED | ||
| 265 | depends on USB_TOUCHSCREEN | ||
| 266 | |||
| 261 | config USB_YEALINK | 267 | config USB_YEALINK |
| 262 | tristate "Yealink usb-p1k voip phone" | 268 | tristate "Yealink usb-p1k voip phone" |
| 263 | depends on USB && INPUT && EXPERIMENTAL | 269 | depends on USB && INPUT && EXPERIMENTAL |
diff --git a/drivers/usb/input/usbtouchscreen.c b/drivers/usb/input/usbtouchscreen.c index 933ceddf3dee..49704d4ed0e2 100644 --- a/drivers/usb/input/usbtouchscreen.c +++ b/drivers/usb/input/usbtouchscreen.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | * - PanJit TouchSet | 8 | * - PanJit TouchSet |
| 9 | * - eTurboTouch | 9 | * - eTurboTouch |
| 10 | * - Gunze AHL61 | 10 | * - Gunze AHL61 |
| 11 | * - DMC TSC-10/25 | ||
| 11 | * | 12 | * |
| 12 | * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@gmx.ch> | 13 | * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@gmx.ch> |
| 13 | * Copyright (C) by Todd E. Johnson (mtouchusb.c) | 14 | * Copyright (C) by Todd E. Johnson (mtouchusb.c) |
| @@ -30,6 +31,8 @@ | |||
| 30 | * - ITM parts are from itmtouch.c | 31 | * - ITM parts are from itmtouch.c |
| 31 | * - 3M parts are from mtouchusb.c | 32 | * - 3M parts are from mtouchusb.c |
| 32 | * - PanJit parts are from an unmerged driver by Lanslott Gish | 33 | * - PanJit parts are from an unmerged driver by Lanslott Gish |
| 34 | * - DMC TSC 10/25 are from Holger Schurig, with ideas from an unmerged | ||
| 35 | * driver from Marius Vollmer | ||
| 33 | * | 36 | * |
| 34 | *****************************************************************************/ | 37 | *****************************************************************************/ |
| 35 | 38 | ||
| @@ -44,7 +47,7 @@ | |||
| 44 | #include <linux/usb/input.h> | 47 | #include <linux/usb/input.h> |
| 45 | 48 | ||
| 46 | 49 | ||
| 47 | #define DRIVER_VERSION "v0.4" | 50 | #define DRIVER_VERSION "v0.5" |
| 48 | #define DRIVER_AUTHOR "Daniel Ritz <daniel.ritz@gmx.ch>" | 51 | #define DRIVER_AUTHOR "Daniel Ritz <daniel.ritz@gmx.ch>" |
| 49 | #define DRIVER_DESC "USB Touchscreen Driver" | 52 | #define DRIVER_DESC "USB Touchscreen Driver" |
| 50 | 53 | ||
| @@ -103,6 +106,7 @@ enum { | |||
| 103 | DEVTYPE_ITM, | 106 | DEVTYPE_ITM, |
| 104 | DEVTYPE_ETURBO, | 107 | DEVTYPE_ETURBO, |
| 105 | DEVTYPE_GUNZE, | 108 | DEVTYPE_GUNZE, |
| 109 | DEVTYPE_DMC_TSC10, | ||
| 106 | }; | 110 | }; |
| 107 | 111 | ||
| 108 | static struct usb_device_id usbtouch_devices[] = { | 112 | static struct usb_device_id usbtouch_devices[] = { |
| @@ -139,6 +143,10 @@ static struct usb_device_id usbtouch_devices[] = { | |||
| 139 | {USB_DEVICE(0x0637, 0x0001), .driver_info = DEVTYPE_GUNZE}, | 143 | {USB_DEVICE(0x0637, 0x0001), .driver_info = DEVTYPE_GUNZE}, |
| 140 | #endif | 144 | #endif |
| 141 | 145 | ||
| 146 | #ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10 | ||
| 147 | {USB_DEVICE(0x0afa, 0x03e8), .driver_info = DEVTYPE_DMC_TSC10}, | ||
| 148 | #endif | ||
| 149 | |||
| 142 | {} | 150 | {} |
| 143 | }; | 151 | }; |
| 144 | 152 | ||
| @@ -313,6 +321,80 @@ static int gunze_read_data(unsigned char *pkt, int *x, int *y, int *touch, int * | |||
| 313 | #endif | 321 | #endif |
| 314 | 322 | ||
| 315 | /***************************************************************************** | 323 | /***************************************************************************** |
| 324 | * DMC TSC-10/25 Part | ||
| 325 | * | ||
| 326 | * Documentation about the controller and it's protocol can be found at | ||
| 327 | * http://www.dmccoltd.com/files/controler/tsc10usb_pi_e.pdf | ||
| 328 | * http://www.dmccoltd.com/files/controler/tsc25_usb_e.pdf | ||
| 329 | */ | ||
| 330 | #ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10 | ||
| 331 | |||
| 332 | /* supported data rates. currently using 130 */ | ||
| 333 | #define TSC10_RATE_POINT 0x50 | ||
| 334 | #define TSC10_RATE_30 0x40 | ||
| 335 | #define TSC10_RATE_50 0x41 | ||
| 336 | #define TSC10_RATE_80 0x42 | ||
| 337 | #define TSC10_RATE_100 0x43 | ||
| 338 | #define TSC10_RATE_130 0x44 | ||
| 339 | #define TSC10_RATE_150 0x45 | ||
| 340 | |||
| 341 | /* commands */ | ||
| 342 | #define TSC10_CMD_RESET 0x55 | ||
| 343 | #define TSC10_CMD_RATE 0x05 | ||
| 344 | #define TSC10_CMD_DATA1 0x01 | ||
| 345 | |||
| 346 | static int dmc_tsc10_init(struct usbtouch_usb *usbtouch) | ||
| 347 | { | ||
| 348 | struct usb_device *dev = usbtouch->udev; | ||
| 349 | int ret; | ||
| 350 | unsigned char buf[2]; | ||
| 351 | |||
| 352 | /* reset */ | ||
| 353 | buf[0] = buf[1] = 0xFF; | ||
| 354 | ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0), | ||
| 355 | TSC10_CMD_RESET, | ||
| 356 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
| 357 | 0, 0, buf, 2, USB_CTRL_SET_TIMEOUT); | ||
| 358 | if (ret < 0) | ||
| 359 | return ret; | ||
| 360 | if (buf[0] != 0x06 || buf[1] != 0x00) | ||
| 361 | return -ENODEV; | ||
| 362 | |||
| 363 | /* set coordinate output rate */ | ||
| 364 | buf[0] = buf[1] = 0xFF; | ||
| 365 | ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0), | ||
| 366 | TSC10_CMD_RATE, | ||
| 367 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
| 368 | TSC10_RATE_150, 0, buf, 2, USB_CTRL_SET_TIMEOUT); | ||
| 369 | if (ret < 0) | ||
| 370 | return ret; | ||
| 371 | if (buf[0] != 0x06 || buf[1] != 0x00) | ||
| 372 | return -ENODEV; | ||
| 373 | |||
| 374 | /* start sending data */ | ||
| 375 | ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0), | ||
| 376 | TSC10_CMD_DATA1, | ||
| 377 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
| 378 | 0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT); | ||
| 379 | if (ret < 0) | ||
| 380 | return ret; | ||
| 381 | |||
| 382 | return 0; | ||
| 383 | } | ||
| 384 | |||
| 385 | |||
| 386 | static int dmc_tsc10_read_data(unsigned char *pkt, int *x, int *y, int *touch, int *press) | ||
| 387 | { | ||
| 388 | *x = ((pkt[2] & 0x03) << 8) | pkt[1]; | ||
| 389 | *y = ((pkt[4] & 0x03) << 8) | pkt[3]; | ||
| 390 | *touch = pkt[0] & 0x01; | ||
| 391 | |||
| 392 | return 1; | ||
| 393 | } | ||
| 394 | #endif | ||
| 395 | |||
| 396 | |||
| 397 | /***************************************************************************** | ||
| 316 | * the different device descriptors | 398 | * the different device descriptors |
| 317 | */ | 399 | */ |
| 318 | static struct usbtouch_device_info usbtouch_dev_info[] = { | 400 | static struct usbtouch_device_info usbtouch_dev_info[] = { |
| @@ -389,6 +471,18 @@ static struct usbtouch_device_info usbtouch_dev_info[] = { | |||
| 389 | .read_data = gunze_read_data, | 471 | .read_data = gunze_read_data, |
| 390 | }, | 472 | }, |
| 391 | #endif | 473 | #endif |
| 474 | |||
| 475 | #ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10 | ||
| 476 | [DEVTYPE_DMC_TSC10] = { | ||
| 477 | .min_xc = 0x0, | ||
| 478 | .max_xc = 0x03ff, | ||
| 479 | .min_yc = 0x0, | ||
| 480 | .max_yc = 0x03ff, | ||
| 481 | .rept_size = 5, | ||
| 482 | .init = dmc_tsc10_init, | ||
| 483 | .read_data = dmc_tsc10_read_data, | ||
| 484 | }, | ||
| 485 | #endif | ||
| 392 | }; | 486 | }; |
| 393 | 487 | ||
| 394 | 488 | ||
