omap3530上移植AMT 6000 系列USB型触摸屏+tslib(四)

2014-11-24 08:39:42 来源: 作者: 浏览: 18
er_info = DEVTYPE_JASTEC},
#endif


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


#ifdef CONFIG_TOUCHSCREEN_USB_ZYTRONIC
{USB_DEVICE(0x14c8, 0x0003), .driver_info = DEVTYPE_ZYTRONIC},
#endif


#ifdef CONFIG_TOUCHSCREEN_USB_ETT_TC5UH
{USB_DEVICE(0x0664, 0x0309), .driver_info = DEVTYPE_TC5UH},
#endif


/***********************************************************************
*add by willow 2011.4.13
*/
#ifdef CONFIG_TOUCHSCREEN_USB_AMT_6000
{USB_DEVICE(0x14e1, 0x6000), .driver_info = DEVTYPE_AMT_6000},
#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
*/


#ifdef CONFIG_TOUCHSCREEN_USB_EGALAX


#ifndef MULTI_PACKET
#define MULTI_PACKET
#endif


#define EGALAX_PKT_TYPE_MASK 0xFE
#define EGALAX_PKT_TYPE_REPT 0x80
#define EGALAX_PKT_TYPE_DIAG 0x0A


static int egalax_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT)
return 0;


dev->x = ((pkt[3] & 0x0F) << 7) | (pkt[4] & 0x7F);
dev->y = ((pkt[1] & 0x0F) << 7) | (pkt[2] & 0x7F);
dev->touch = pkt[0] & 0x01;


return 1;
}


static int egalax_get_pkt_len(unsigned char *buf, int len)
{
switch (buf[0] & EGALAX_PKT_TYPE_MASK) {
case EGALAX_PKT_TYPE_REPT:
return 5;


case EGALAX_PKT_TYPE_DIAG:
if (len < 2)
return -1;


return buf[1] + 2;
}


return 0;
}
#endif



/*****************************************************************************
* PanJit Part
*/
#ifdef CONFIG_TOUCHSCREEN_USB_PANJIT
static int panjit_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
dev->x = ((pkt[2] & 0x0F) << 8) | pkt[1];
dev->y = ((pkt[4] & 0x0F) << 8) | pkt[3];
dev->touch = pkt[0] & 0x01;


return 1;
}
#endif



/*****************************************************************************
* 3M/Microtouch Part
*/
#ifdef CONFIG_TOUCHSCREEN_USB_3M


#define MTOUCHUSB_ASYNC_REPORT 1
#define MTOUCHUSB_RESET 7
#define MTOUCHUSB_REQ_CTRLLR_ID 10


static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
if (hwcalib_xy) {
dev->x = (pkt[4] << 8) | pkt[3];
dev->y = 0xffff - ((pkt[6] << 8) | pkt[5]);
} else {
dev->x = (pkt[8] << 8) | pkt[7];
dev->y = (pkt[10] << 8) | pkt[9];
}
dev->touch = (pkt[2] & 0x40) 1 : 0;


return 1;
}


static int mtouch_init(struct usbtouch_usb *usbtouch)
{
int ret, i;


ret = usb_control_msg(usbtouch->udev, usb_rcvctrlpipe(usbtouch->udev, 0),
MTOUCHUSB_RESET,
USB_DIR_OUT | USB_TYPE_VEN

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: