lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <200611160917.35828.hs4233@mail.mn-solutions.de>
Date:	Thu, 16 Nov 2006 09:17:35 +0100
From:	Holger Schurig <hs4233@...l.mn-solutions.de>
To:	daniel.ritz@....ch
Cc:	linux-kernel@...r.kernel.org, linux-usb-devel@...ts.sourceforge.net
Subject: [PATCH] usb: Support for DMC TSC-10 (take 2)

From: Holger Schurig <hs4233@...l.mn-solutions.de>

Basic support support for the USB-based DMC TSC-10 touchscreen 
controller.

Signed-off-by: Holger Schrig <hs4233@...l.mn-solutions.de>

---

The previous patch was word-wrapped, sorry.


Please review this patch and schedule it for inclusion once 
2.6.19 comes out.

The DMC TSC-10 comes in various configuration, e.g. with and 
without EEPROM for handling calibration data. My device doesn't 
have this EEPROM, so calibration must be handled by userspace, 
not by hardware. That's not really a limitation, as the other 
touchscreen drivers in usbtouchscreen.c need user-space 
calibration, too.

However, is someone is inclined to add "hardware" calibration, 
then vender technical documentation for this device can be 
accessed at

   http://www.dmccoltd.com/files/controler/tsc10usb_pi_e.pdf.

This patch adds support for the USB based DMC TSC-10 touchscreen controller.

Signed-off-by: Holger Schrig <hs4233@...l.mn-solutions.de>

--- linux.orig/drivers/usb/input/Kconfig
+++ linux/drivers/usb/input/Kconfig
@@ -211,6 +211,7 @@
 	  - ITM
 	  - some other eTurboTouch
 	  - Gunze AHL61
+	  - DMC TSC-10
 
 	  Have a look at <http://linux.chapter7.ch/touchkit/> for
 	  a usage description and the required user-space stuff.
@@ -218,6 +219,11 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called usbtouchscreen.
 
+config USB_TOUCHSCREEN_DMC_TSC10
+	default y
+	bool "DMC TSC-10 device support" if EMBEDDED
+	depends on USB_TOUCHSCREEN
+
 config USB_TOUCHSCREEN_EGALAX
 	default y
 	bool "eGalax, eTurboTouch CT-410/510/700 device support" if EMBEDDED
--- linux.orig/drivers/usb/input/usbtouchscreen.c
+++ linux/drivers/usb/input/usbtouchscreen.c
@@ -8,6 +8,7 @@
  *  - PanJit TouchSet
  *  - eTurboTouch
  *  - Gunze AHL61
+ *  - DMC TSC-10 (Holger Schurig, hs4233@...l.mn-solutions.de)
  *
  * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@....ch>
  * Copyright (C) by Todd E. Johnson (mtouchusb.c)
@@ -44,7 +45,7 @@
 #include <linux/usb/input.h>
 
 
-#define DRIVER_VERSION		"v0.4"
+#define DRIVER_VERSION		"v0.5"
 #define DRIVER_AUTHOR		"Daniel Ritz <daniel.ritz@....ch>"
 #define DRIVER_DESC		"USB Touchscreen Driver"
 
@@ -103,6 +104,7 @@
 	DEVTYPE_ITM,
 	DEVTYPE_ETURBO,
 	DEVTYPE_GUNZE,
+	DEVTYPE_DMC_TSC10,
 };
 
 static struct usb_device_id usbtouch_devices[] = {
@@ -139,6 +141,10 @@
 	{USB_DEVICE(0x0637, 0x0001), .driver_info = DEVTYPE_GUNZE},
 #endif
 
+#ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10
+	{USB_DEVICE(0x0afa, 0x03e8), .driver_info = DEVTYPE_DMC_TSC10},
+#endif
+
 	{}
 };
 
@@ -313,6 +319,81 @@
 #endif
 
 /*****************************************************************************
+ * DMC TSC-10 Part
+ *
+ * Documentation about the controller and it's protocol can be found
+ * at http://www.dmccoltd.com/files/controler/tsc10usb_pi_e.pdf
+ */
+#ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10
+
+/* At which rate should coordinates transferred? This list goes from
+ * slowest rate to fastest rate. */
+#define TSC10_RATE_POINT 0x50
+#define TSC10_RATE_30    0x40
+#define TSC10_RATE_50    0x41
+#define TSC10_RATE_80    0x42
+#define TSC10_RATE_100   0x43
+#define TSC10_RATE_130   0x44
+#define TSC10_RATE_150   0x45
+
+/* Some commands that we send */
+#define TSC10_CMD_RESET  0x55
+#define TSC10_CMD_RATE   0x05
+#define TSC10_CMD_DATA1  0x01
+
+static void dmc_tsc10_control(struct usbtouch_usb *usbtouch,
+                          __u8 requesttype, __u8 request, __u16 value,
+                          __u16 retlen)
+{
+	struct usb_device *dev = usbtouch->udev;
+	int ret;
+	unsigned char buf[2];
+
+	/* Note: retlen > is NOT supported. However, dmc_tsc10_init() is
+	 * only caller and makes sure by itself that this won't ever happen. */
+
+	buf[0] = buf[1] = 0xFF;
+	//dbg("bmRequest %02x bRequest %02x wValue %04x wLength %04x", requesttype, request, value, retlen);
+	ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0),
+	                      request, requesttype, value, 0,
+	                      buf, retlen, 2*HZ);
+	//if (retlen)
+	//	dbg("returns %02x %02x", buf[0], buf[1]);
+}
+
+
+static int dmc_tsc10_init(struct usbtouch_usb *usbtouch)
+{
+	// Reset 0xC0
+	dmc_tsc10_control(usbtouch, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+	                  TSC10_CMD_RESET, 0, 2);
+
+	// Set Coordinate output rate setting
+	dmc_tsc10_control(usbtouch, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+	                  TSC10_CMD_RATE, TSC10_RATE_130, 2);
+
+	// Coordinate data send start
+	dmc_tsc10_control(usbtouch, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+	                  TSC10_CMD_DATA1, 0, 0);
+
+	return 0;
+}
+
+
+static int dmc_tsc10_read_data(unsigned char *pkt, int *x, int *y, int *touch, int *press)
+{
+	*x = ((pkt[2] & 0x03) << 8) | pkt[1];
+	*y = ((pkt[4] & 0x03) << 8) | pkt[3];
+	*touch = pkt[0] & 0x01;
+
+	//printk("tsc10: %d %d,%d\n", *touch, *x,*y);
+
+	return 1;
+}
+#endif
+
+
+/*****************************************************************************
  * the different device descriptors
  */
 static struct usbtouch_device_info usbtouch_dev_info[] = {
@@ -389,6 +470,18 @@
 		.read_data	= gunze_read_data,
 	},
 #endif
+
+#ifdef CONFIG_USB_TOUCHSCREEN_DMC_TSC10
+	[DEVTYPE_DMC_TSC10] = {
+		.min_xc		= 0x0,
+		.max_xc		= 0x03ff,
+		.min_yc		= 0x0,
+		.max_yc		= 0x03ff,
+		.rept_size	= 5,
+		.init		= dmc_tsc10_init,
+		.read_data	= dmc_tsc10_read_data,
+	},
+#endif
 };
 
 
 

-- 
M&N Solutions GmbH
Holger Schurig
Dieselstr. 18
61191 Rosbach
06003/9141-15
-
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ