patch for Dell ST220T Touch Screen Monitor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Everybody,

We have recently created Support for Dell ST2220T Touch screen monitor with in the kernel hierarchy driver/input/touchscreen patch for this attach with this mail. Please find the attachment. I have previously also send the patch didn't got any feedback so sending it again.

thanks
Gopal
>From 9f4e8d811c1b9fc9552f243fb1d577b2cc67553f Mon Sep 17 00:00:00 2001
From: gopal <gtiwari@xxxxxxxxxx>
Date: Tue, 9 Aug 2011 15:15:51 +0530
Subject: [PATCH] We have created Support for DELL-ST2220T TochScreen Monitor

Signed-off-by: gopal <gtiwari@xxxxxxxxxx>
---
 drivers/input/touchscreen/usbtouchscreen.c |   99 +++++++++++++++++++++++++++-
 1 files changed, 98 insertions(+), 1 deletions(-)

diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
index 73fd664..beef39f 100644
--- a/drivers/input/touchscreen/usbtouchscreen.c
+++ b/drivers/input/touchscreen/usbtouchscreen.c
@@ -59,6 +59,8 @@
 #define DRIVER_AUTHOR		"Daniel Ritz <daniel.ritz@xxxxxx>"
 #define DRIVER_DESC		"USB Touchscreen Driver"
 
+#define CONFIG_TOUCHSCREEN_USB_DELL_ST2220T
+
 static int swap_xy;
 module_param(swap_xy, bool, 0644);
 MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped.");
@@ -138,6 +140,7 @@ enum {
 	DEVTYPE_ZYTRONIC,
 	DEVTYPE_TC45USB,
 	DEVTYPE_NEXIO,
+	DEVTYPE_DELL_ST2220T,
 };
 
 #define USB_DEVICE_HID_CLASS(vend, prod) \
@@ -238,6 +241,10 @@ static const struct usb_device_id usbtouch_devices[] = {
 	{USB_DEVICE_AND_INTERFACE_INFO(0x1870, 0x0001, 0x0a, 0x00, 0x00),
 		.driver_info = DEVTYPE_NEXIO},
 #endif
+#ifdef CONFIG_TOUCHSCREEN_USB_DELL_ST2220T
+/*Dell-st2220t*/
+{USB_DEVICE(0x1fd2, 0x0064), .driver_info = DEVTYPE_DELL_ST2220T},
+#endif
 
 	{}
 };
@@ -335,6 +342,84 @@ static int panjit_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
 }
 #endif
 
+/*****************************************************************************
+*	Dell-ST2220T
+*/
+#ifdef CONFIG_TOUCHSCREEN_USB_DELL_ST2220T
+#define ST2220T_VENDOR_REQ      0x22
+static int st2220t_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
+{
+	if (pkt[9] != 0xff && pkt[11]) {
+		dev->x = (pkt[10] << 8) | pkt[9];
+		dev->y = (pkt[12] << 8) | pkt[11];
+		dev->x =  ((dev->x) * 9) - 0x200;
+		dev->y =  (dev->y) * 15;
+		input_report_abs(dev->input, ABS_X, dev->x)
+		input_report_abs(dev->input, ABS_Y, dev->y);
+	}
+	dev->x = (pkt[4] << 8) | pkt[3];
+	dev->y = (pkt[6] << 8) | pkt[5];
+	dev->x =  ((dev->x) * 9) - 0x200;
+	dev->y =  (dev->y) * 15;
+	return 1;
+}
+
+static int st2220t_init(struct usbtouch_usb *usbtouch)
+{
+	int ret, i;
+	struct usb_device *udev = interface_to_usbdev(usbtouch->interface);
+	char *ctrl_buf;
+
+	/*Allocate Memory For Control transfer Buffer */
+
+	ctrl_buf = kmalloc(64, GFP_KERNEL);
+	if (ctrl_buf == NULL) {
+		dbg("%s - Failed : to Get Memory",
+		__func__);
+		return -1;
+	}
+
+	/* Following Control Request is Very Imp
+	To Start USB Interrupt transaction
+	this request is SET_REPORT H->D with Data as 07,02,02 */
+
+	ctrl_buf[0] = 0x07;
+	ctrl_buf[1] = 0x02;
+	ctrl_buf[2] = 0x02;
+	for (i = 0; i < 3; i++) {
+		ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x09,
+		0x21, 0x0307, 0x00, ctrl_buf,
+		0x03, USB_CTRL_SET_TIMEOUT);
+		dbg("%s - usb_control_msg - 0x21 0x09 - bytes|err: %d\n",
+		__func__, ret);
+
+		if (ret == 0)
+			break;
+		msleep(150);
+	}
+
+	if (ret < 0) {
+		dbg("%s - Failed to Initialize the DELL-ST2220 Touch Monitor\n",
+		__func__);
+		return -1;
+	}
+
+	msleep(150);
+	for (i = 0; i < 6; i++) {
+		ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
+		0x01, 0xA1, 0x308, 0x00, ctrl_buf, 2,
+		USB_CTRL_SET_TIMEOUT);
+
+		dbg("%s - usb_control_msg - bytes|err: %d",
+		__func__, ret);
+		dbg(" %x %x\n", ctrl_buf[0], ctrl_buf[1]);
+		msleep(50);
+	}
+
+	kfree(ctrl_buf);
+	return 0;
+}
+#endif
 
 /*****************************************************************************
  * 3M/Microtouch Part
@@ -1139,8 +1224,20 @@ static struct usbtouch_device_info usbtouch_dev_info[] = {
 		.exit		= nexio_exit,
 	},
 #endif
-};
 
+#ifdef CONFIG_TOUCHSCREEN_USB_DELL_ST2220T
+
+	[DEVTYPE_DELL_ST2220T] = {
+		.min_xc         = 0x0,
+		.max_xc         = 0x4000,
+		.min_yc         = 0x0,
+		.max_yc         = 0x4000,
+		.rept_size      = 0x0e,
+		.read_data      = st2220t_read_data,
+		.init           = st2220t_init,
+	},
+#endif
+};
 
 /*****************************************************************************
  * Generic Part
-- 
1.7.6

>From 5ef1836407a6c44f889a64e9935069f3820f4e3e Mon Sep 17 00:00:00 2001
From: gopal <gtiwari@xxxxxxxxxx>
Date: Mon, 17 Oct 2011 10:06:50 +0530
Subject: [PATCH] Blacklist the ST2220T from the hid core so as to get the
 driver access from the driver/input/touchscreen hierarchy

Signed-off-by: gopal <gtiwari@xxxxxxxxxx>
---
 drivers/hid/hid-core.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 242353d..00a8b3a 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1511,6 +1511,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
+	{ HID_USB_DEVICE(0x1fd2, 0x0064) },
 
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
@@ -1894,6 +1895,7 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
+	{ HID_USB_DEVICE(0x1fd2, 0x0064) },
 	{ }
 };
 
-- 
1.7.6


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux