DELL-ST2220T Touch Screen Monitor Driver Patch
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
@@ -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
@@ -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
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