Lines Matching +full:multi +full:- +full:touch
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * - eGalax Touchkit
6 * includes eTurboTouch CT-410/510/700
7 * - 3M/Microtouch EX II series
8 * - ITM
9 * - PanJit TouchSet
10 * - eTurboTouch
11 * - Gunze AHL61
12 * - DMC TSC-10/25
13 * - IRTOUCHSYSTEMS/UNITOP
14 * - IdealTEK URTC1000
15 * - General Touch
16 * - GoTop Super_Q2/GogoPen/PenPower tablets
17 * - JASTEC USB touch controller/DigiTech DTR-02U
18 * - Zytronic capacitive touchscreen
19 * - NEXIO/iNexio
20 * - Elo TouchSystems 2700 IntelliTouch
21 * - EasyTouch USB Dual/Multi touch controller from Data Modul
23 * Copyright (C) 2004-2007 by Daniel Ritz <daniel.ritz@gmx.ch>
27 * - ITM parts are from itmtouch.c
28 * - 3M parts are from mtouchusb.c
29 * - PanJit parts are from an unmerged driver by Lanslott Gish
30 * - DMC TSC 10/25 are from Holger Schurig, with ideas from an unmerged
52 MODULE_PARM_DESC(hwcalib_xy, "If set hw-calibrated X/Y are used if available");
77 * < 0: -return value more bytes needed
105 int touch, press; member
111 DEVTYPE_IGNORE = -1,
252 struct usb_device *udev = interface_to_usbdev(usbtouch->interface); in e2i_init()
258 dev_dbg(&usbtouch->interface->dev, in e2i_init()
259 "%s - usb_control_msg - E2I_RESET - bytes|err: %d\n", in e2i_init()
267 dev->x = (pkt[2] << 8) | pkt[3]; in e2i_read_data()
268 dev->y = (pkt[4] << 8) | pkt[5]; in e2i_read_data()
270 tmp = tmp - 0xA000; in e2i_read_data()
271 dev->touch = (tmp > 0); in e2i_read_data()
272 dev->press = (tmp > 0 ? tmp : 0); in e2i_read_data()
297 struct usb_device *udev = interface_to_usbdev(usbtouch->interface); in egalax_init()
307 return -ENOMEM; in egalax_init()
311 buf[2] = 'A'; /* command - check active */ in egalax_init()
323 if (ret != -EPIPE) in egalax_init()
337 dev->x = ((pkt[3] & 0x0F) << 7) | (pkt[4] & 0x7F); in egalax_read_data()
338 dev->y = ((pkt[1] & 0x0F) << 7) | (pkt[2] & 0x7F); in egalax_read_data()
339 dev->touch = pkt[0] & 0x01; in egalax_read_data()
352 return -1; in egalax_get_pkt_len()
382 dev->x = ((pkt[1] & 0x1F) << 7) | (pkt[2] & 0x7F); in etouch_read_data()
383 dev->y = ((pkt[3] & 0x1F) << 7) | (pkt[4] & 0x7F); in etouch_read_data()
384 dev->touch = pkt[0] & 0x01; in etouch_read_data()
398 return -1; in etouch_get_pkt_len()
413 dev->x = ((pkt[2] & 0x0F) << 8) | pkt[1]; in panjit_read_data()
414 dev->y = ((pkt[4] & 0x0F) << 8) | pkt[3]; in panjit_read_data()
415 dev->touch = pkt[0] & 0x01; in panjit_read_data()
436 dev->x = (pkt[4] << 8) | pkt[3]; in mtouch_read_data()
437 dev->y = 0xffff - ((pkt[6] << 8) | pkt[5]); in mtouch_read_data()
439 dev->x = (pkt[8] << 8) | pkt[7]; in mtouch_read_data()
440 dev->y = (pkt[10] << 8) | pkt[9]; in mtouch_read_data()
442 dev->touch = (pkt[2] & 0x40) ? 1 : 0; in mtouch_read_data()
457 struct mtouch_priv *priv = usbtouch->priv; in mtouch_firmware_rev_show()
460 priv->fw_rev_major, priv->fw_rev_minor); in mtouch_firmware_rev_show()
475 struct usb_device *udev = interface_to_usbdev(usbtouch->interface); in mtouch_get_fw_revision()
476 struct mtouch_priv *priv = usbtouch->priv; in mtouch_get_fw_revision()
482 return -ENOMEM; in mtouch_get_fw_revision()
490 dev_warn(&usbtouch->interface->dev, in mtouch_get_fw_revision()
492 ret = ret < 0 ? ret : -EIO; in mtouch_get_fw_revision()
496 priv->fw_rev_major = buf[3]; in mtouch_get_fw_revision()
497 priv->fw_rev_minor = buf[4]; in mtouch_get_fw_revision()
510 usbtouch->priv = kmalloc(sizeof(struct mtouch_priv), GFP_KERNEL); in mtouch_alloc()
511 if (!usbtouch->priv) in mtouch_alloc()
512 return -ENOMEM; in mtouch_alloc()
514 ret = sysfs_create_group(&usbtouch->interface->dev.kobj, in mtouch_alloc()
517 kfree(usbtouch->priv); in mtouch_alloc()
518 usbtouch->priv = NULL; in mtouch_alloc()
528 struct usb_device *udev = interface_to_usbdev(usbtouch->interface); in mtouch_init()
538 dev_dbg(&usbtouch->interface->dev, in mtouch_init()
539 "%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d\n", in mtouch_init()
550 dev_dbg(&usbtouch->interface->dev, in mtouch_init()
551 "%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d\n", in mtouch_init()
555 if (ret != -EPIPE) in mtouch_init()
559 /* Default min/max xy are the raw values, override if using hw-calib */ in mtouch_init()
561 input_set_abs_params(usbtouch->input, ABS_X, 0, 0xffff, 0, 0); in mtouch_init()
562 input_set_abs_params(usbtouch->input, ABS_Y, 0, 0xffff, 0, 0); in mtouch_init()
570 struct mtouch_priv *priv = usbtouch->priv; in mtouch_exit()
572 sysfs_remove_group(&usbtouch->interface->dev.kobj, &mtouch_attr_group); in mtouch_exit()
584 int touch; in itm_read_data() local
588 * report touch as 0 with the last valid x/y data once. then stop in itm_read_data()
591 dev->press = ((pkt[2] & 0x01) << 7) | (pkt[5] & 0x7F); in itm_read_data()
593 touch = ~pkt[7] & 0x20; in itm_read_data()
594 if (!touch) { in itm_read_data()
595 if (dev->touch) { in itm_read_data()
596 dev->touch = 0; in itm_read_data()
603 dev->x = ((pkt[0] & 0x1F) << 7) | (pkt[3] & 0x7F); in itm_read_data()
604 dev->y = ((pkt[1] & 0x1F) << 7) | (pkt[4] & 0x7F); in itm_read_data()
605 dev->touch = touch; in itm_read_data()
627 shift = (6 - (pkt[0] & 0x03)); in eturbo_read_data()
628 dev->x = ((pkt[3] << 7) | pkt[4]) >> shift; in eturbo_read_data()
629 dev->y = ((pkt[1] << 7) | pkt[2]) >> shift; in eturbo_read_data()
630 dev->touch = (pkt[0] & 0x10) ? 1 : 0; in eturbo_read_data()
655 dev->x = ((pkt[0] & 0x1F) << 7) | (pkt[2] & 0x7F); in gunze_read_data()
656 dev->y = ((pkt[1] & 0x1F) << 7) | (pkt[3] & 0x7F); in gunze_read_data()
657 dev->touch = pkt[0] & 0x20; in gunze_read_data()
664 * DMC TSC-10/25 Part
688 struct usb_device *dev = interface_to_usbdev(usbtouch->interface); in dmc_tsc10_init()
689 int ret = -ENOMEM; in dmc_tsc10_init()
704 ret = -ENODEV; in dmc_tsc10_init()
708 /* TSC-25 data sheet specifies a delay after the RESET command */ in dmc_tsc10_init()
720 ret = -ENODEV; in dmc_tsc10_init()
738 dev->x = ((pkt[2] & 0x03) << 8) | pkt[1]; in dmc_tsc10_read_data()
739 dev->y = ((pkt[4] & 0x03) << 8) | pkt[3]; in dmc_tsc10_read_data()
740 dev->touch = pkt[0] & 0x01; in dmc_tsc10_read_data()
753 dev->x = (pkt[3] << 8) | pkt[2]; in irtouch_read_data()
754 dev->y = (pkt[5] << 8) | pkt[4]; in irtouch_read_data()
755 dev->touch = (pkt[1] & 0x03) ? 1 : 0; in irtouch_read_data()
767 dev->x = ((pkt[2] & 0x0F) << 8) | pkt[1]; in tc45usb_read_data()
768 dev->y = ((pkt[4] & 0x0F) << 8) | pkt[3]; in tc45usb_read_data()
769 dev->touch = pkt[0] & 0x01; in tc45usb_read_data()
795 /* touch data in IdealTEK mode */ in idealtek_read_data()
796 dev->x = (pkt[1] << 5) | (pkt[2] >> 2); in idealtek_read_data()
797 dev->y = (pkt[3] << 5) | (pkt[4] >> 2); in idealtek_read_data()
798 dev->touch = (pkt[0] & 0x40) ? 1 : 0; in idealtek_read_data()
802 /* touch data in MT emulation mode */ in idealtek_read_data()
803 dev->x = (pkt[2] << 5) | (pkt[1] >> 2); in idealtek_read_data()
804 dev->y = (pkt[4] << 5) | (pkt[3] >> 2); in idealtek_read_data()
805 dev->touch = (pkt[0] & 0x40) ? 1 : 0; in idealtek_read_data()
815 * General Touch Part
820 dev->x = (pkt[2] << 8) | pkt[1]; in general_touch_read_data()
821 dev->y = (pkt[4] << 8) | pkt[3]; in general_touch_read_data()
822 dev->press = pkt[5] & 0xff; in general_touch_read_data()
823 dev->touch = pkt[0] & 0x01; in general_touch_read_data()
835 dev->x = ((pkt[1] & 0x38) << 4) | pkt[2]; in gotop_read_data()
836 dev->y = ((pkt[1] & 0x07) << 7) | pkt[3]; in gotop_read_data()
837 dev->touch = pkt[0] & 0x01; in gotop_read_data()
849 dev->x = ((pkt[0] & 0x3f) << 6) | (pkt[2] & 0x3f); in jastec_read_data()
850 dev->y = ((pkt[1] & 0x3f) << 6) | (pkt[3] & 0x3f); in jastec_read_data()
851 dev->touch = (pkt[0] & 0x40) >> 6; in jastec_read_data()
863 struct usb_interface *intf = dev->interface; in zytronic_read_data()
867 dev_dbg(&intf->dev, "%s: Command response %d\n", __func__, pkt[1]); in zytronic_read_data()
871 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7); in zytronic_read_data()
872 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7); in zytronic_read_data()
873 dev->touch = 1; in zytronic_read_data()
874 dev_dbg(&intf->dev, "%s: down %d,%d\n", __func__, dev->x, dev->y); in zytronic_read_data()
878 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7); in zytronic_read_data()
879 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7); in zytronic_read_data()
880 dev->touch = 0; in zytronic_read_data()
881 dev_dbg(&intf->dev, "%s: up %d,%d\n", __func__, dev->x, dev->y); in zytronic_read_data()
885 dev_dbg(&intf->dev, "%s: Unknown return %d\n", __func__, pkt[0]); in zytronic_read_data()
908 u8 flags; /* 0xe1 = touch, 0xe1 = release */
909 __be16 data_len; /* total bytes of touch data */
925 int ret = -ENOMEM; in nexio_alloc()
927 usbtouch->priv = kmalloc(sizeof(struct nexio_priv), GFP_KERNEL); in nexio_alloc()
928 if (!usbtouch->priv) in nexio_alloc()
931 priv = usbtouch->priv; in nexio_alloc()
933 priv->ack_buf = kmemdup(nexio_ack_pkt, sizeof(nexio_ack_pkt), in nexio_alloc()
935 if (!priv->ack_buf) in nexio_alloc()
938 priv->ack = usb_alloc_urb(0, GFP_KERNEL); in nexio_alloc()
939 if (!priv->ack) { in nexio_alloc()
940 dev_dbg(&usbtouch->interface->dev, in nexio_alloc()
941 "%s - usb_alloc_urb failed: usbtouch->ack\n", __func__); in nexio_alloc()
948 kfree(priv->ack_buf); in nexio_alloc()
957 struct usb_device *dev = interface_to_usbdev(usbtouch->interface); in nexio_init()
958 struct usb_host_interface *interface = usbtouch->interface->cur_altsetting; in nexio_init()
959 struct nexio_priv *priv = usbtouch->priv; in nexio_init()
960 int ret = -ENOMEM; in nexio_init()
967 for (i = 0; i < interface->desc.bNumEndpoints; i++) { in nexio_init()
969 usb_endpoint_dir_in(&interface->endpoint[i].desc)) in nexio_init()
970 input_ep = interface->endpoint[i].desc.bEndpointAddress; in nexio_init()
972 usb_endpoint_dir_out(&interface->endpoint[i].desc)) in nexio_init()
973 output_ep = interface->endpoint[i].desc.bEndpointAddress; in nexio_init()
976 return -ENXIO; in nexio_init()
1025 usb_fill_bulk_urb(priv->ack, dev, usb_sndbulkpipe(dev, output_ep), in nexio_init()
1026 priv->ack_buf, sizeof(nexio_ack_pkt), in nexio_init()
1037 struct nexio_priv *priv = usbtouch->priv; in nexio_exit()
1039 usb_kill_urb(priv->ack); in nexio_exit()
1040 usb_free_urb(priv->ack); in nexio_exit()
1041 kfree(priv->ack_buf); in nexio_exit()
1047 struct device *dev = &usbtouch->interface->dev; in nexio_read_data()
1049 struct nexio_priv *priv = usbtouch->priv; in nexio_read_data()
1050 unsigned int data_len = be16_to_cpu(packet->data_len); in nexio_read_data()
1051 unsigned int x_len = be16_to_cpu(packet->x_len); in nexio_read_data()
1052 unsigned int y_len = be16_to_cpu(packet->y_len); in nexio_read_data()
1055 /* got touch data? */ in nexio_read_data()
1060 data_len -= 0x100; in nexio_read_data()
1062 x_len -= 0x80; in nexio_read_data()
1065 ret = usb_submit_urb(priv->ack, GFP_ATOMIC); in nexio_read_data()
1069 if (!usbtouch->type->max_xc) { in nexio_read_data()
1070 usbtouch->type->max_xc = 2 * x_len; in nexio_read_data()
1071 input_set_abs_params(usbtouch->input, ABS_X, in nexio_read_data()
1072 0, usbtouch->type->max_xc, 0, 0); in nexio_read_data()
1073 usbtouch->type->max_yc = 2 * y_len; in nexio_read_data()
1074 input_set_abs_params(usbtouch->input, ABS_Y, in nexio_read_data()
1075 0, usbtouch->type->max_yc, 0, 0); in nexio_read_data()
1079 * Each byte represents "darkness" percentage (0-100) of one element. in nexio_read_data()
1081 * This also means that there's a limited multi-touch capability but in nexio_read_data()
1084 begin_x = end_x = begin_y = end_y = -1; in nexio_read_data()
1086 if (begin_x == -1 && packet->data[x] > NEXIO_THRESHOLD) { in nexio_read_data()
1090 if (end_x == -1 && begin_x != -1 && packet->data[x] < NEXIO_THRESHOLD) { in nexio_read_data()
1091 end_x = x - 1; in nexio_read_data()
1093 if (begin_y == -1 && packet->data[y] > NEXIO_THRESHOLD) { in nexio_read_data()
1094 begin_y = y - x_len; in nexio_read_data()
1097 if (end_y == -1 && in nexio_read_data()
1098 begin_y != -1 && packet->data[y] < NEXIO_THRESHOLD) { in nexio_read_data()
1099 end_y = y - 1 - x_len; in nexio_read_data()
1100 w = end_x - begin_x; in nexio_read_data()
1101 h = end_y - begin_y; in nexio_read_data()
1103 /* multi-touch */ in nexio_read_data()
1104 input_report_abs(usbtouch->input, in nexio_read_data()
1106 input_report_abs(usbtouch->input, in nexio_read_data()
1108 input_report_abs(usbtouch->input, in nexio_read_data()
1110 input_report_abs(usbtouch->input, in nexio_read_data()
1112 input_report_abs(usbtouch->input, in nexio_read_data()
1114 input_mt_sync(usbtouch->input); in nexio_read_data()
1116 /* single touch */ in nexio_read_data()
1117 usbtouch->x = 2 * begin_x + w; in nexio_read_data()
1118 usbtouch->y = 2 * begin_y + h; in nexio_read_data()
1119 usbtouch->touch = packet->flags & 0x01; in nexio_read_data()
1120 begin_y = end_y = -1; in nexio_read_data()
1124 begin_x = end_x = -1; in nexio_read_data()
1141 dev->x = (pkt[3] << 8) | pkt[2]; in elo_read_data()
1142 dev->y = (pkt[5] << 8) | pkt[4]; in elo_read_data()
1143 dev->touch = pkt[6] > 0; in elo_read_data()
1144 dev->press = pkt[6]; in elo_read_data()
1391 struct usbtouch_device_info *type = usbtouch->type; in usbtouch_process_pkt()
1393 if (!type->read_data(usbtouch, pkt)) in usbtouch_process_pkt()
1396 input_report_key(usbtouch->input, BTN_TOUCH, usbtouch->touch); in usbtouch_process_pkt()
1399 input_report_abs(usbtouch->input, ABS_X, usbtouch->y); in usbtouch_process_pkt()
1400 input_report_abs(usbtouch->input, ABS_Y, usbtouch->x); in usbtouch_process_pkt()
1402 input_report_abs(usbtouch->input, ABS_X, usbtouch->x); in usbtouch_process_pkt()
1403 input_report_abs(usbtouch->input, ABS_Y, usbtouch->y); in usbtouch_process_pkt()
1405 if (type->max_press) in usbtouch_process_pkt()
1406 input_report_abs(usbtouch->input, ABS_PRESSURE, usbtouch->press); in usbtouch_process_pkt()
1407 input_sync(usbtouch->input); in usbtouch_process_pkt()
1419 if (unlikely(usbtouch->buf_len)) { in usbtouch_process_multi()
1421 pkt_len = usbtouch->type->get_pkt_len( in usbtouch_process_multi()
1422 usbtouch->buffer, usbtouch->buf_len); in usbtouch_process_multi()
1428 /* need to append -pkt_len bytes before able to get size */ in usbtouch_process_multi()
1430 int append = -pkt_len; in usbtouch_process_multi()
1433 if (usbtouch->buf_len + append >= usbtouch->type->rept_size) in usbtouch_process_multi()
1435 memcpy(usbtouch->buffer + usbtouch->buf_len, pkt, append); in usbtouch_process_multi()
1436 usbtouch->buf_len += append; in usbtouch_process_multi()
1438 pkt_len = usbtouch->type->get_pkt_len( in usbtouch_process_multi()
1439 usbtouch->buffer, usbtouch->buf_len); in usbtouch_process_multi()
1445 tmp = pkt_len - usbtouch->buf_len; in usbtouch_process_multi()
1446 if (usbtouch->buf_len + tmp >= usbtouch->type->rept_size) in usbtouch_process_multi()
1448 memcpy(usbtouch->buffer + usbtouch->buf_len, pkt, tmp); in usbtouch_process_multi()
1449 usbtouch_process_pkt(usbtouch, usbtouch->buffer, pkt_len); in usbtouch_process_multi()
1452 buf_len = len - tmp; in usbtouch_process_multi()
1462 pkt_len = usbtouch->type->get_pkt_len(buffer + pos, in usbtouch_process_multi()
1463 buf_len - pos); in usbtouch_process_multi()
1472 if (likely((pkt_len > 0) && (pkt_len <= buf_len - pos))) { in usbtouch_process_multi()
1476 memcpy(usbtouch->buffer, buffer + pos, buf_len - pos); in usbtouch_process_multi()
1477 usbtouch->buf_len = buf_len - pos; in usbtouch_process_multi()
1484 usbtouch->buf_len = 0; in usbtouch_process_multi()
1492 struct usbtouch_usb *usbtouch = urb->context; in usbtouch_irq()
1493 struct device *dev = &usbtouch->interface->dev; in usbtouch_irq()
1496 switch (urb->status) { in usbtouch_irq()
1500 case -ETIME: in usbtouch_irq()
1503 "%s - urb timed out - was the device unplugged?\n", in usbtouch_irq()
1506 case -ECONNRESET: in usbtouch_irq()
1507 case -ENOENT: in usbtouch_irq()
1508 case -ESHUTDOWN: in usbtouch_irq()
1509 case -EPIPE: in usbtouch_irq()
1511 dev_dbg(dev, "%s - urb shutting down with status: %d\n", in usbtouch_irq()
1512 __func__, urb->status); in usbtouch_irq()
1515 dev_dbg(dev, "%s - nonzero urb status received: %d\n", in usbtouch_irq()
1516 __func__, urb->status); in usbtouch_irq()
1520 usbtouch->type->process_pkt(usbtouch, usbtouch->data, urb->actual_length); in usbtouch_irq()
1523 usb_mark_last_busy(interface_to_usbdev(usbtouch->interface)); in usbtouch_irq()
1526 dev_err(dev, "%s - usb_submit_urb failed with result: %d\n", in usbtouch_irq()
1535 usbtouch->irq->dev = interface_to_usbdev(usbtouch->interface); in usbtouch_open()
1537 r = usb_autopm_get_interface(usbtouch->interface) ? -EIO : 0; in usbtouch_open()
1541 mutex_lock(&usbtouch->pm_mutex); in usbtouch_open()
1542 if (!usbtouch->type->irq_always) { in usbtouch_open()
1543 if (usb_submit_urb(usbtouch->irq, GFP_KERNEL)) { in usbtouch_open()
1544 r = -EIO; in usbtouch_open()
1549 usbtouch->interface->needs_remote_wakeup = 1; in usbtouch_open()
1550 usbtouch->is_open = true; in usbtouch_open()
1552 mutex_unlock(&usbtouch->pm_mutex); in usbtouch_open()
1553 usb_autopm_put_interface(usbtouch->interface); in usbtouch_open()
1563 mutex_lock(&usbtouch->pm_mutex); in usbtouch_close()
1564 if (!usbtouch->type->irq_always) in usbtouch_close()
1565 usb_kill_urb(usbtouch->irq); in usbtouch_close()
1566 usbtouch->is_open = false; in usbtouch_close()
1567 mutex_unlock(&usbtouch->pm_mutex); in usbtouch_close()
1569 r = usb_autopm_get_interface(usbtouch->interface); in usbtouch_close()
1570 usbtouch->interface->needs_remote_wakeup = 0; in usbtouch_close()
1572 usb_autopm_put_interface(usbtouch->interface); in usbtouch_close()
1580 usb_kill_urb(usbtouch->irq); in usbtouch_suspend()
1590 mutex_lock(&usbtouch->pm_mutex); in usbtouch_resume()
1591 if (usbtouch->is_open || usbtouch->type->irq_always) in usbtouch_resume()
1592 result = usb_submit_urb(usbtouch->irq, GFP_NOIO); in usbtouch_resume()
1593 mutex_unlock(&usbtouch->pm_mutex); in usbtouch_resume()
1604 if (usbtouch->type->init) { in usbtouch_reset_resume()
1605 err = usbtouch->type->init(usbtouch); in usbtouch_reset_resume()
1607 dev_dbg(&intf->dev, in usbtouch_reset_resume()
1608 "%s - type->init() failed, err: %d\n", in usbtouch_reset_resume()
1615 mutex_lock(&usbtouch->pm_mutex); in usbtouch_reset_resume()
1616 if (usbtouch->is_open) in usbtouch_reset_resume()
1617 err = usb_submit_urb(usbtouch->irq, GFP_NOIO); in usbtouch_reset_resume()
1618 mutex_unlock(&usbtouch->pm_mutex); in usbtouch_reset_resume()
1626 usb_free_coherent(udev, usbtouch->data_size, in usbtouch_free_buffers()
1627 usbtouch->data, usbtouch->data_dma); in usbtouch_free_buffers()
1628 kfree(usbtouch->buffer); in usbtouch_free_buffers()
1636 for (i = 0; i < interface->desc.bNumEndpoints; i++) in usbtouch_get_input_endpoint()
1637 if (usb_endpoint_dir_in(&interface->endpoint[i].desc)) in usbtouch_get_input_endpoint()
1638 return &interface->endpoint[i].desc; in usbtouch_get_input_endpoint()
1651 int err = -ENOMEM; in usbtouch_probe()
1654 if (id->driver_info == DEVTYPE_IGNORE) in usbtouch_probe()
1655 return -ENODEV; in usbtouch_probe()
1657 if (id->driver_info >= ARRAY_SIZE(usbtouch_dev_info)) in usbtouch_probe()
1658 return -ENODEV; in usbtouch_probe()
1660 endpoint = usbtouch_get_input_endpoint(intf->cur_altsetting); in usbtouch_probe()
1662 return -ENXIO; in usbtouch_probe()
1669 mutex_init(&usbtouch->pm_mutex); in usbtouch_probe()
1671 type = &usbtouch_dev_info[id->driver_info]; in usbtouch_probe()
1672 usbtouch->type = type; in usbtouch_probe()
1673 if (!type->process_pkt) in usbtouch_probe()
1674 type->process_pkt = usbtouch_process_pkt; in usbtouch_probe()
1676 usbtouch->data_size = type->rept_size; in usbtouch_probe()
1677 if (type->get_pkt_len) { in usbtouch_probe()
1679 * When dealing with variable-length packets we should in usbtouch_probe()
1685 usbtouch->data_size = min(usbtouch->data_size, in usbtouch_probe()
1689 usbtouch->data = usb_alloc_coherent(udev, usbtouch->data_size, in usbtouch_probe()
1690 GFP_KERNEL, &usbtouch->data_dma); in usbtouch_probe()
1691 if (!usbtouch->data) in usbtouch_probe()
1694 if (type->get_pkt_len) { in usbtouch_probe()
1695 usbtouch->buffer = kmalloc(type->rept_size, GFP_KERNEL); in usbtouch_probe()
1696 if (!usbtouch->buffer) in usbtouch_probe()
1700 usbtouch->irq = usb_alloc_urb(0, GFP_KERNEL); in usbtouch_probe()
1701 if (!usbtouch->irq) { in usbtouch_probe()
1702 dev_dbg(&intf->dev, in usbtouch_probe()
1703 "%s - usb_alloc_urb failed: usbtouch->irq\n", __func__); in usbtouch_probe()
1707 usbtouch->interface = intf; in usbtouch_probe()
1708 usbtouch->input = input_dev; in usbtouch_probe()
1710 if (udev->manufacturer) in usbtouch_probe()
1711 strscpy(usbtouch->name, udev->manufacturer, sizeof(usbtouch->name)); in usbtouch_probe()
1713 if (udev->product) { in usbtouch_probe()
1714 if (udev->manufacturer) in usbtouch_probe()
1715 strlcat(usbtouch->name, " ", sizeof(usbtouch->name)); in usbtouch_probe()
1716 strlcat(usbtouch->name, udev->product, sizeof(usbtouch->name)); in usbtouch_probe()
1719 if (!strlen(usbtouch->name)) in usbtouch_probe()
1720 snprintf(usbtouch->name, sizeof(usbtouch->name), in usbtouch_probe()
1722 le16_to_cpu(udev->descriptor.idVendor), in usbtouch_probe()
1723 le16_to_cpu(udev->descriptor.idProduct)); in usbtouch_probe()
1725 usb_make_path(udev, usbtouch->phys, sizeof(usbtouch->phys)); in usbtouch_probe()
1726 strlcat(usbtouch->phys, "/input0", sizeof(usbtouch->phys)); in usbtouch_probe()
1728 input_dev->name = usbtouch->name; in usbtouch_probe()
1729 input_dev->phys = usbtouch->phys; in usbtouch_probe()
1730 usb_to_input_id(udev, &input_dev->id); in usbtouch_probe()
1731 input_dev->dev.parent = &intf->dev; in usbtouch_probe()
1735 input_dev->open = usbtouch_open; in usbtouch_probe()
1736 input_dev->close = usbtouch_close; in usbtouch_probe()
1738 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); in usbtouch_probe()
1739 input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); in usbtouch_probe()
1740 input_set_abs_params(input_dev, ABS_X, type->min_xc, type->max_xc, 0, 0); in usbtouch_probe()
1741 input_set_abs_params(input_dev, ABS_Y, type->min_yc, type->max_yc, 0, 0); in usbtouch_probe()
1742 if (type->max_press) in usbtouch_probe()
1743 input_set_abs_params(input_dev, ABS_PRESSURE, type->min_press, in usbtouch_probe()
1744 type->max_press, 0, 0); in usbtouch_probe()
1747 usb_fill_int_urb(usbtouch->irq, udev, in usbtouch_probe()
1748 usb_rcvintpipe(udev, endpoint->bEndpointAddress), in usbtouch_probe()
1749 usbtouch->data, usbtouch->data_size, in usbtouch_probe()
1750 usbtouch_irq, usbtouch, endpoint->bInterval); in usbtouch_probe()
1752 usb_fill_bulk_urb(usbtouch->irq, udev, in usbtouch_probe()
1753 usb_rcvbulkpipe(udev, endpoint->bEndpointAddress), in usbtouch_probe()
1754 usbtouch->data, usbtouch->data_size, in usbtouch_probe()
1757 usbtouch->irq->dev = udev; in usbtouch_probe()
1758 usbtouch->irq->transfer_dma = usbtouch->data_dma; in usbtouch_probe()
1759 usbtouch->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbtouch_probe()
1762 if (type->alloc) { in usbtouch_probe()
1763 err = type->alloc(usbtouch); in usbtouch_probe()
1765 dev_dbg(&intf->dev, in usbtouch_probe()
1766 "%s - type->alloc() failed, err: %d\n", in usbtouch_probe()
1773 if (type->init) { in usbtouch_probe()
1774 err = type->init(usbtouch); in usbtouch_probe()
1776 dev_dbg(&intf->dev, in usbtouch_probe()
1777 "%s - type->init() failed, err: %d\n", in usbtouch_probe()
1783 err = input_register_device(usbtouch->input); in usbtouch_probe()
1785 dev_dbg(&intf->dev, in usbtouch_probe()
1786 "%s - input_register_device failed, err: %d\n", in usbtouch_probe()
1793 if (usbtouch->type->irq_always) { in usbtouch_probe()
1796 err = usb_submit_urb(usbtouch->irq, GFP_KERNEL); in usbtouch_probe()
1799 dev_err(&intf->dev, in usbtouch_probe()
1800 "%s - usb_submit_urb failed with result: %d\n", in usbtouch_probe()
1812 if (type->exit) in usbtouch_probe()
1813 type->exit(usbtouch); in usbtouch_probe()
1815 usb_free_urb(usbtouch->irq); in usbtouch_probe()
1831 dev_dbg(&intf->dev, in usbtouch_disconnect()
1832 "%s - usbtouch is initialized, cleaning up\n", __func__); in usbtouch_disconnect()
1836 input_unregister_device(usbtouch->input); in usbtouch_disconnect()
1837 usb_free_urb(usbtouch->irq); in usbtouch_disconnect()
1838 if (usbtouch->type->exit) in usbtouch_disconnect()
1839 usbtouch->type->exit(usbtouch); in usbtouch_disconnect()