Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a14a8401 authored by Ondrej Zary's avatar Ondrej Zary Committed by Dmitry Torokhov
Browse files

Input: usbtouchscreen - add support for IdealTEK URTC1000

This patch adds support for IdealTEK URTC1000 touchscreen controllers.

Documentation can be downloaded at:

	http://projects.tbmn.org/cgi-bin/trac.cgi/wiki/urtc-1000



Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
Signed-off-by: default avatarDaniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 554fc193
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ config TOUCHSCREEN_USB_COMPOSITE
	  - Gunze AHL61
	  - DMC TSC-10/25
	  - IRTOUCHSYSTEMS/UNITOP
	  - IdealTEK URTC1000

	  Have a look at <http://linux.chapter7.ch/touchkit/> for
	  a usage description and the required user-space stuff.
@@ -238,4 +239,9 @@ config TOUCHSCREEN_USB_IRTOUCH
	bool "IRTOUCHSYSTEMS/UNITOP device support" if EMBEDDED
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_IDEALTEK
	default y
	bool "IdealTEK URTC1000 device support" if EMBEDDED
	depends on TOUCHSCREEN_USB_COMPOSITE

endif
+58 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
 *  - Gunze AHL61
 *  - DMC TSC-10/25
 *  - IRTOUCHSYSTEMS/UNITOP
 *  - IdealTEK URTC1000
 *
 * Copyright (C) 2004-2006 by Daniel Ritz <daniel.ritz@gmx.ch>
 * Copyright (C) by Todd E. Johnson (mtouchusb.c)
@@ -92,7 +93,7 @@ struct usbtouch_usb {
};


#if defined(CONFIG_TOUCHSCREEN_USB_EGALAX) || defined(CONFIG_TOUCHSCREEN_USB_ETURBO)
#if defined(CONFIG_TOUCHSCREEN_USB_EGALAX) || defined(CONFIG_TOUCHSCREEN_USB_ETURBO) || defined(CONFIG_TOUCHSCREEN_USB_IDEALTEK)
#define MULTI_PACKET
#endif

@@ -112,6 +113,7 @@ enum {
	DEVTYPE_GUNZE,
	DEVTYPE_DMC_TSC10,
	DEVTYPE_IRTOUCH,
	DEVTYPE_IDEALTEK,
};

static struct usb_device_id usbtouch_devices[] = {
@@ -157,6 +159,10 @@ static struct usb_device_id usbtouch_devices[] = {
	{USB_DEVICE(0x6615, 0x0001), .driver_info = DEVTYPE_IRTOUCH},
#endif

#ifdef CONFIG_TOUCHSCREEN_USB_IDEALTEK
	{USB_DEVICE(0x1391, 0x1000), .driver_info = DEVTYPE_IDEALTEK},
#endif

	{}
};

@@ -437,6 +443,43 @@ static int irtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
#endif


/*****************************************************************************
 * IdealTEK URTC1000 Part
 */
#ifdef CONFIG_TOUCHSCREEN_USB_IDEALTEK
static int idealtek_get_pkt_len(unsigned char *buf, int len)
{
	if (buf[0] & 0x80)
		return 5;
	if (buf[0] == 0x01)
		return len;
	return 0;
}

static int idealtek_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
	switch (pkt[0] & 0x98) {
	case 0x88:
		/* touch data in IdealTEK mode */
		dev->x = (pkt[1] << 5) | (pkt[2] >> 2);
		dev->y = (pkt[3] << 5) | (pkt[4] >> 2);
		dev->touch = (pkt[0] & 0x40) ? 1 : 0;
		return 1;

	case 0x98:
		/* touch data in MT emulation mode */
		dev->x = (pkt[2] << 5) | (pkt[1] >> 2);
		dev->y = (pkt[4] << 5) | (pkt[3] >> 2);
		dev->touch = (pkt[0] & 0x40) ? 1 : 0;
		return 1;

	default:
		return 0;
	}
}
#endif


/*****************************************************************************
 * the different device descriptors
 */
@@ -537,6 +580,20 @@ static struct usbtouch_device_info usbtouch_dev_info[] = {
		.read_data	= irtouch_read_data,
	},
#endif

#ifdef CONFIG_TOUCHSCREEN_USB_IDEALTEK
	[DEVTYPE_IDEALTEK] = {
		.min_xc		= 0x0,
		.max_xc		= 0x0fff,
		.min_yc		= 0x0,
		.max_yc		= 0x0fff,
		.rept_size	= 8,
		.flags		= USBTOUCH_FLG_BUFFER,
		.process_pkt	= usbtouch_process_multi,
		.get_pkt_len	= idealtek_get_pkt_len,
		.read_data	= idealtek_read_data,
	},
#endif
};