Skip to contentSkip to conversation

DELL-ST2220T Touch Screen Monitor Driver Patch

PATCH Gopal 2 participants 2 messages Jul 27, 2011

Subsystems (3)
lore
Share & tools
lore

Gopal

author
#0 lore raw

Hi,

We have recently Created support for the DELL-ST2220T Touch Screen Monitor.

More of Technical Details :

We have Written separate driver and merge it with the different touchscreen monitor drivers in /driver/input/touchscreen/usbtouchscreen.c.

changes as in :

1) Device Specific USB Control Request.

   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);
        }

        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);
        }

2) Blacklisting from the HID Class as device does not support Standard Mouse Protocol as per the Interface Descriptor of the Device. So Instead of making it separate Driver we merge it with
driver/input/touchscreen Section.

3) HID Data Fatching protocol parsing.

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;

        dev->touch = (pkt[2] & 0x03) ? 1 : 0;

        return 1;
}

Some of the changes to the respective file is mentioned in the mail to get the full driver changes you can see with in the patch attach with this mail.

Please Verify this and reply me.

thanks
&
regards
Gopal krishna tiwari.

drivers/hid/hid-core.c +3 -0
index c957c4b..228fd90 100644
@@ -1500,6 +1500,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(0x1f2d, 0x0064) },
 
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
 	{ }
@@ -1837,6 +1838,7 @@ static const struct hid_device_id hid_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
+	{ HID_USB_DEVICE(0x1fd2, 0x0064) },
 	{ }
 };
 
@@ -1883,6 +1885,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) },
 	{ }
 };
 
drivers/hid/usbhid/hid-core.c +4 -0
index 38c261a..9a79e9f 100644
@@ -240,6 +240,7 @@ static void hid_irq_in(struct urb *urb)
 	struct usbhid_device 	*usbhid = hid->driver_data;
 	int			status;
 
+
 	switch (urb->status) {
 	case 0:			/* success */
 		usbhid_mark_busy(usbhid);
@@ -654,6 +655,7 @@ int usbhid_open(struct hid_device *hid)
 	struct usbhid_device *usbhid = hid->driver_data;
 	int res;
 
+
 	mutex_lock(&hid_open_mut);
 	if (!hid->open++) {
 		res = usb_autopm_get_interface(usbhid->intf);
@@ -983,6 +985,7 @@ static int usbhid_start(struct hid_device *hid)
 	struct usbhid_device *usbhid = hid->driver_data;
 	unsigned int n, insize = 0;
 	int ret;
+	
 
 	clear_bit(HID_DISCONNECTED, &usbhid->iofl);
 
@@ -1156,6 +1159,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
 	size_t len;
 	int ret;
 
+
 	dbg_hid("HID probe called for ifnum %d\n",
 			intf->altsetting->desc.bInterfaceNumber);
 
drivers/input/touchscreen/usbtouchscreen.c +126 -2

168 lines not on this page · raw message

#1 lore raw
Quoted 85 lines · Gopal

Hi,

We have recently Created support for the DELL-ST2220T Touch Screen Monitor.

More of Technical Details :

We have Written separate driver and merge it with the different touchscreen monitor drivers in /driver/input/touchscreen/usbtouchscreen.c.

changes as in :

1) Device Specific USB Control Request.

   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);
        }

        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);
        }

2) Blacklisting from the HID Class as device does not support Standard Mouse Protocol as per the Interface Descriptor of the Device.
So Instead of making it separate Driver we merge it with
driver/input/touchscreen Section.

3) HID Data Fatching protocol parsing.

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;

        dev->touch = (pkt[2] & 0x03) ? 1 : 0;

        return 1;
}
Quoted 5 lines

Some of the changes to the respective file is mentioned in the mail to get the full driver changes you can see with in the patch attach with this mail.

Please Verify this and reply me.

Very nice, but could you take a look at Documentation/SubmittingPatches and resend it with the proper Signed-off-by: line and cc: the correct subsystem maintainer (as found by scripts/get_maintainer.pl).

thanks,

greg k-h