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

Commit 9e3b2583 authored by Florian Echtler's avatar Florian Echtler Committed by Dmitry Torokhov
Browse files

Input: usbtouchscreen - add support for e2i touchscreen controller



This patch adds support for the e2i touchscreen controller used in the
Mimo 740 (and probably in other e2i touchscreen products). Tested on
Mimo 740.

Signed-off-by: default avatarFlorian Echtler <floe@butterbrot.org>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 703490ff
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -474,6 +474,11 @@ config TOUCHSCREEN_USB_JASTEC
	bool "JASTEC/DigiTech DTR-02U USB touch controller device support" if EMBEDDED
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_E2I
	default y
	bool "e2i Touchscreen controller (e.g. from Mimo 740)"
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_TOUCHIT213
	tristate "Sahara TouchIT-213 touchscreen"
	select SERIO
+49 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ enum {
	DEVTYPE_GENERAL_TOUCH,
	DEVTYPE_GOTOP,
	DEVTYPE_JASTEC,
	DEVTYPE_E2I,
};

#define USB_DEVICE_HID_CLASS(vend, prod) \
@@ -197,10 +198,46 @@ static struct usb_device_id usbtouch_devices[] = {
	{USB_DEVICE(0x0f92, 0x0001), .driver_info = DEVTYPE_JASTEC},
#endif

#ifdef CONFIG_TOUCHSCREEN_USB_E2I
	{USB_DEVICE(0x1ac7, 0x0001), .driver_info = DEVTYPE_E2I},
#endif
	{}
};


/*****************************************************************************
 * e2i Part
 */

#ifdef CONFIG_TOUCHSCREEN_USB_E2I
static int e2i_init(struct usbtouch_usb *usbtouch)
{
	int ret;

	ret = usb_control_msg(usbtouch->udev, usb_rcvctrlpipe(usbtouch->udev, 0),
	                      0x01, 0x02, 0x0000, 0x0081,
	                      NULL, 0, USB_CTRL_SET_TIMEOUT);

	dbg("%s - usb_control_msg - E2I_RESET - bytes|err: %d",
	    __func__, ret);
	return ret;
}

static int e2i_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
	int tmp = (pkt[0] << 8) | pkt[1];
	dev->x  = (pkt[2] << 8) | pkt[3];
	dev->y  = (pkt[4] << 8) | pkt[5];

	tmp = tmp - 0xA000;
	dev->touch = (tmp > 0);
	dev->press = (tmp > 0 ? tmp : 0);

	return 1;
}
#endif


/*****************************************************************************
 * eGalax part
 */
@@ -734,6 +771,18 @@ static struct usbtouch_device_info usbtouch_dev_info[] = {
		.read_data	= jastec_read_data,
	},
#endif

#ifdef CONFIG_TOUCHSCREEN_USB_E2I
	[DEVTYPE_E2I] = {
		.min_xc		= 0x0,
		.max_xc		= 0x7fff,
		.min_yc		= 0x0,
		.max_yc		= 0x7fff,
		.rept_size	= 6,
		.init		= e2i_init,
		.read_data	= e2i_read_data,
	},
#endif
};