// SPDX-License-Identifier: GPL-2.0+
/*
* USB Compaq iPAQ driver
*
* Copyright (C) 2001 - 2002
* Ganesh Varadarajan <ganesh@veritas.com>
*/
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/spinlock.h>
#include <linux/uaccess.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
#define KP_RETRIES 100
#define DRIVER_AUTHOR "Ganesh Varadarajan <ganesh@veritas.com>"
#define DRIVER_DESC "USB PocketPC PDA driver"
static int connect_retries = KP_RETRIES;
static int initial_wait;
/* Function prototypes for an ipaq */
static int ipaq_open(struct tty_struct *tty,
struct usb_serial_port *port);
static int ipaq_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds);
static int ipaq_startup(struct usb_serial *serial);
static const struct usb_device_id ipaq_id_table[] = {
{ USB_DEVICE(0 x0104, 0 x00BE) }, /* Socket USB Sync */
{ USB_DEVICE(0 x03F0, 0 x1016) }, /* HP USB Sync */
{ USB_DEVICE(0 x03F0, 0 x1116) }, /* HP USB Sync 1611 */
{ USB_DEVICE(0 x03F0, 0 x1216) }, /* HP USB Sync 1612 */
{ USB_DEVICE(0 x03F0, 0 x2016) }, /* HP USB Sync 1620 */
{ USB_DEVICE(0 x03F0, 0 x2116) }, /* HP USB Sync 1621 */
{ USB_DEVICE(0 x03F0, 0 x2216) }, /* HP USB Sync 1622 */
{ USB_DEVICE(0 x03F0, 0 x3016) }, /* HP USB Sync 1630 */
{ USB_DEVICE(0 x03F0, 0 x3116) }, /* HP USB Sync 1631 */
{ USB_DEVICE(0 x03F0, 0 x3216) }, /* HP USB Sync 1632 */
{ USB_DEVICE(0 x03F0, 0 x4016) }, /* HP USB Sync 1640 */
{ USB_DEVICE(0 x03F0, 0 x4116) }, /* HP USB Sync 1641 */
{ USB_DEVICE(0 x03F0, 0 x4216) }, /* HP USB Sync 1642 */
{ USB_DEVICE(0 x03F0, 0 x5016) }, /* HP USB Sync 1650 */
{ USB_DEVICE(0 x03F0, 0 x5116) }, /* HP USB Sync 1651 */
{ USB_DEVICE(0 x03F0, 0 x5216) }, /* HP USB Sync 1652 */
{ USB_DEVICE(0 x0409, 0 x00D5) }, /* NEC USB Sync */
{ USB_DEVICE(0 x0409, 0 x00D6) }, /* NEC USB Sync */
{ USB_DEVICE(0 x0409, 0 x00D7) }, /* NEC USB Sync */
{ USB_DEVICE(0 x0409, 0 x8024) }, /* NEC USB Sync */
{ USB_DEVICE(0 x0409, 0 x8025) }, /* NEC USB Sync */
{ USB_DEVICE(0 x043E, 0 x9C01) }, /* LGE USB Sync */
{ USB_DEVICE(0 x045E, 0 x00CE) }, /* Microsoft USB Sync */
{ USB_DEVICE(0 x045E, 0 x0400) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0401) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0402) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0403) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0404) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0405) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0406) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0407) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0408) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0409) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040A) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040B) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040C) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040D) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040E) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x040F) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0410) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0411) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0412) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0413) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0414) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0415) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0416) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0417) }, /* Windows Powered Pocket PC 2002 */
{ USB_DEVICE(0 x045E, 0 x0432) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0433) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0434) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0435) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0436) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0437) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0438) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0439) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043A) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043B) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043C) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043D) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043E) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x043F) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0440) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0441) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0442) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0443) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0444) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0445) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0446) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0447) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0448) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0449) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044A) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044B) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044C) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044D) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044E) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x044F) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0450) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0451) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0452) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0453) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0454) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0455) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0456) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0457) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0458) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0459) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045A) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045B) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045C) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045D) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045E) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x045F) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0460) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0461) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0462) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0463) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0464) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0465) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0466) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0467) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0468) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0469) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046A) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046B) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046C) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046D) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046E) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x046F) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0470) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0471) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0472) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0473) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0474) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0475) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0476) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0477) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0478) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x0479) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x047A) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x047B) }, /* Windows Powered Pocket PC 2003 */
{ USB_DEVICE(0 x045E, 0 x04C8) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04C9) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04CA) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04CB) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04CC) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04CD) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04CE) }, /* Windows Powered Smartphone 2002 */
{ USB_DEVICE(0 x045E, 0 x04D7) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04D8) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04D9) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DA) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DB) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DC) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DD) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DE) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04DF) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E0) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E1) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E2) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E3) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E4) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E5) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E6) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E7) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E8) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04E9) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x045E, 0 x04EA) }, /* Windows Powered Smartphone 2003 */
{ USB_DEVICE(0 x049F, 0 x0003) }, /* Compaq iPAQ USB Sync */
{ USB_DEVICE(0 x049F, 0 x0032) }, /* Compaq iPAQ USB Sync */
{ USB_DEVICE(0 x04A4, 0 x0014) }, /* Hitachi USB Sync */
{ USB_DEVICE(0 x04AD, 0 x0301) }, /* USB Sync 0301 */
{ USB_DEVICE(0 x04AD, 0 x0302) }, /* USB Sync 0302 */
{ USB_DEVICE(0 x04AD, 0 x0303) }, /* USB Sync 0303 */
{ USB_DEVICE(0 x04AD, 0 x0306) }, /* GPS Pocket PC USB Sync */
{ USB_DEVICE(0 x04B7, 0 x0531) }, /* MyGuide 7000 XL USB Sync */
{ USB_DEVICE(0 x04C5, 0 x1058) }, /* FUJITSU USB Sync */
{ USB_DEVICE(0 x04C5, 0 x1079) }, /* FUJITSU USB Sync */
{ USB_DEVICE(0 x04DA, 0 x2500) }, /* Panasonic USB Sync */
{ USB_DEVICE(0 x04DD, 0 x9102) }, /* SHARP WS003SH USB Modem */
{ USB_DEVICE(0 x04DD, 0 x9121) }, /* SHARP WS004SH USB Modem */
{ USB_DEVICE(0 x04DD, 0 x9123) }, /* SHARP WS007SH USB Modem */
{ USB_DEVICE(0 x04DD, 0 x9151) }, /* SHARP S01SH USB Modem */
{ USB_DEVICE(0 x04DD, 0 x91AC) }, /* SHARP WS011SH USB Modem */
{ USB_DEVICE(0 x04E8, 0 x5F00) }, /* Samsung NEXiO USB Sync */
{ USB_DEVICE(0 x04E8, 0 x5F01) }, /* Samsung NEXiO USB Sync */
{ USB_DEVICE(0 x04E8, 0 x5F02) }, /* Samsung NEXiO USB Sync */
{ USB_DEVICE(0 x04E8, 0 x5F03) }, /* Samsung NEXiO USB Sync */
{ USB_DEVICE(0 x04E8, 0 x5F04) }, /* Samsung NEXiO USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6611) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6613) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6615) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6617) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6619) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x661B) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x662E) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6630) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04E8, 0 x6632) }, /* Samsung MITs USB Sync */
{ USB_DEVICE(0 x04f1, 0 x3011) }, /* JVC USB Sync */
{ USB_DEVICE(0 x04F1, 0 x3012) }, /* JVC USB Sync */
{ USB_DEVICE(0 x0502, 0 x1631) }, /* c10 Series */
{ USB_DEVICE(0 x0502, 0 x1632) }, /* c20 Series */
{ USB_DEVICE(0 x0502, 0 x16E1) }, /* Acer n10 Handheld USB Sync */
{ USB_DEVICE(0 x0502, 0 x16E2) }, /* Acer n20 Handheld USB Sync */
{ USB_DEVICE(0 x0502, 0 x16E3) }, /* Acer n30 Handheld USB Sync */
{ USB_DEVICE(0 x0536, 0 x01A0) }, /* HHP PDT */
{ USB_DEVICE(0 x0543, 0 x0ED9) }, /* ViewSonic Color Pocket PC V35 */
{ USB_DEVICE(0 x0543, 0 x1527) }, /* ViewSonic Color Pocket PC V36 */
{ USB_DEVICE(0 x0543, 0 x1529) }, /* ViewSonic Color Pocket PC V37 */
{ USB_DEVICE(0 x0543, 0 x152B) }, /* ViewSonic Color Pocket PC V38 */
{ USB_DEVICE(0 x0543, 0 x152E) }, /* ViewSonic Pocket PC */
{ USB_DEVICE(0 x0543, 0 x1921) }, /* ViewSonic Communicator Pocket PC */
{ USB_DEVICE(0 x0543, 0 x1922) }, /* ViewSonic Smartphone */
{ USB_DEVICE(0 x0543, 0 x1923) }, /* ViewSonic Pocket PC V30 */
{ USB_DEVICE(0 x05E0, 0 x2000) }, /* Symbol USB Sync */
{ USB_DEVICE(0 x05E0, 0 x2001) }, /* Symbol USB Sync 0x2001 */
{ USB_DEVICE(0 x05E0, 0 x2002) }, /* Symbol USB Sync 0x2002 */
{ USB_DEVICE(0 x05E0, 0 x2003) }, /* Symbol USB Sync 0x2003 */
{ USB_DEVICE(0 x05E0, 0 x2004) }, /* Symbol USB Sync 0x2004 */
{ USB_DEVICE(0 x05E0, 0 x2005) }, /* Symbol USB Sync 0x2005 */
{ USB_DEVICE(0 x05E0, 0 x2006) }, /* Symbol USB Sync 0x2006 */
{ USB_DEVICE(0 x05E0, 0 x2007) }, /* Symbol USB Sync 0x2007 */
{ USB_DEVICE(0 x05E0, 0 x2008) }, /* Symbol USB Sync 0x2008 */
{ USB_DEVICE(0 x05E0, 0 x2009) }, /* Symbol USB Sync 0x2009 */
{ USB_DEVICE(0 x05E0, 0 x200A) }, /* Symbol USB Sync 0x200A */
{ USB_DEVICE(0 x067E, 0 x1001) }, /* Intermec Mobile Computer */
{ USB_DEVICE(0 x07CF, 0 x2001) }, /* CASIO USB Sync 2001 */
{ USB_DEVICE(0 x07CF, 0 x2002) }, /* CASIO USB Sync 2002 */
{ USB_DEVICE(0 x07CF, 0 x2003) }, /* CASIO USB Sync 2003 */
{ USB_DEVICE(0 x0930, 0 x0700) }, /* TOSHIBA USB Sync 0700 */
{ USB_DEVICE(0 x0930, 0 x0705) }, /* TOSHIBA Pocket PC e310 */
{ USB_DEVICE(0 x0930, 0 x0706) }, /* TOSHIBA Pocket PC e740 */
{ USB_DEVICE(0 x0930, 0 x0707) }, /* TOSHIBA Pocket PC e330 Series */
{ USB_DEVICE(0 x0930, 0 x0708) }, /* TOSHIBA Pocket PC e350 Series */
{ USB_DEVICE(0 x0930, 0 x0709) }, /* TOSHIBA Pocket PC e750 Series */
{ USB_DEVICE(0 x0930, 0 x070A) }, /* TOSHIBA Pocket PC e400 Series */
{ USB_DEVICE(0 x0930, 0 x070B) }, /* TOSHIBA Pocket PC e800 Series */
{ USB_DEVICE(0 x094B, 0 x0001) }, /* Linkup Systems USB Sync */
{ USB_DEVICE(0 x0960, 0 x0065) }, /* BCOM USB Sync 0065 */
{ USB_DEVICE(0 x0960, 0 x0066) }, /* BCOM USB Sync 0066 */
{ USB_DEVICE(0 x0960, 0 x0067) }, /* BCOM USB Sync 0067 */
{ USB_DEVICE(0 x0961, 0 x0010) }, /* Portatec USB Sync */
{ USB_DEVICE(0 x099E, 0 x0052) }, /* Trimble GeoExplorer */
{ USB_DEVICE(0 x099E, 0 x4000) }, /* TDS Data Collector */
{ USB_DEVICE(0 x0B05, 0 x4200) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0B05, 0 x4201) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0B05, 0 x4202) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0B05, 0 x420F) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0B05, 0 x9200) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0B05, 0 x9202) }, /* ASUS USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x00CE) }, /* HTC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x00CF) }, /* HTC USB Modem */
{ USB_DEVICE(0 x0BB4, 0 x0A01) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A02) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A03) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A04) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A05) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A06) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A07) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A08) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A09) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0A) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0B) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0C) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0D) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0E) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A0F) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A10) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A11) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A12) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A13) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A14) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A15) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A16) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A17) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A18) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A19) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1A) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1B) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1C) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1D) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1E) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A1F) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A20) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A21) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A22) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A23) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A24) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A25) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A26) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A27) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A28) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A29) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2A) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2B) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2C) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2D) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2E) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A2F) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A30) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A31) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A32) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A33) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A34) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A35) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A36) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A37) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A38) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A39) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3A) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3B) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3C) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3D) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3E) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A3F) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A40) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A41) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A42) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A43) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A44) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A45) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A46) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A47) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A48) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A49) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4A) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4B) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4C) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4D) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4E) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A4F) }, /* PocketPC USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A50) }, /* HTC SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A51) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A52) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A53) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A54) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A55) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A56) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A57) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A58) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A59) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5A) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5B) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5C) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5D) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5E) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A5F) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A60) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A61) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A62) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A63) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A64) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A65) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A66) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A67) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A68) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A69) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6A) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6B) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6C) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6D) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6E) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A6F) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A70) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A71) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A72) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A73) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A74) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A75) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A76) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A77) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A78) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A79) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7A) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7B) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7C) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7D) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7E) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A7F) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A80) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A81) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A82) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A83) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A84) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A85) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A86) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A87) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A88) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A89) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8A) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8B) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8C) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8D) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8E) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A8F) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A90) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A91) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A92) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A93) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A94) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A95) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A96) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A97) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A98) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A99) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9A) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9B) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9C) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9D) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9E) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0A9F) }, /* SmartPhone USB Sync */
{ USB_DEVICE(0 x0BB4, 0 x0BCE) }, /* "High Tech Computer Corp" */
{ USB_DEVICE(0 x0BF8, 0 x1001) }, /* Fujitsu Siemens Computers USB Sync */
{ USB_DEVICE(0 x0C44, 0 x03A2) }, /* Motorola iDEN Smartphone */
{ USB_DEVICE(0 x0C8E, 0 x6000) }, /* Cesscom Luxian Series */
{ USB_DEVICE(0 x0CAD, 0 x9001) }, /* Motorola PowerPad Pocket PC Device */
{ USB_DEVICE(0 x0F4E, 0 x0200) }, /* Freedom Scientific USB Sync */
{ USB_DEVICE(0 x0F98, 0 x0201) }, /* Cyberbank USB Sync */
{ USB_DEVICE(0 x0FB8, 0 x3001) }, /* Wistron USB Sync */
{ USB_DEVICE(0 x0FB8, 0 x3002) }, /* Wistron USB Sync */
{ USB_DEVICE(0 x0FB8, 0 x3003) }, /* Wistron USB Sync */
{ USB_DEVICE(0 x0FB8, 0 x4001) }, /* Wistron USB Sync */
{ USB_DEVICE(0 x1066, 0 x00CE) }, /* E-TEN USB Sync */
{ USB_DEVICE(0 x1066, 0 x0300) }, /* E-TEN P3XX Pocket PC */
{ USB_DEVICE(0 x1066, 0 x0500) }, /* E-TEN P5XX Pocket PC */
{ USB_DEVICE(0 x1066, 0 x0600) }, /* E-TEN P6XX Pocket PC */
{ USB_DEVICE(0 x1066, 0 x0700) }, /* E-TEN P7XX Pocket PC */
{ USB_DEVICE(0 x1114, 0 x0001) }, /* Psion Teklogix Sync 753x */
{ USB_DEVICE(0 x1114, 0 x0004) }, /* Psion Teklogix Sync netBookPro */
{ USB_DEVICE(0 x1114, 0 x0006) }, /* Psion Teklogix Sync 7525 */
{ USB_DEVICE(0 x1182, 0 x1388) }, /* VES USB Sync */
{ USB_DEVICE(0 x11D9, 0 x1002) }, /* Rugged Pocket PC 2003 */
{ USB_DEVICE(0 x11D9, 0 x1003) }, /* Rugged Pocket PC 2003 */
{ USB_DEVICE(0 x1231, 0 xCE01) }, /* USB Sync 03 */
{ USB_DEVICE(0 x1231, 0 xCE02) }, /* USB Sync 03 */
{ USB_DEVICE(0 x1690, 0 x0601) }, /* Askey USB Sync */
{ USB_DEVICE(0 x22B8, 0 x4204) }, /* Motorola MPx200 Smartphone */
{ USB_DEVICE(0 x22B8, 0 x4214) }, /* Motorola MPc GSM */
{ USB_DEVICE(0 x22B8, 0 x4224) }, /* Motorola MPx220 Smartphone */
{ USB_DEVICE(0 x22B8, 0 x4234) }, /* Motorola MPc CDMA */
{ USB_DEVICE(0 x22B8, 0 x4244) }, /* Motorola MPx100 Smartphone */
{ USB_DEVICE(0 x3340, 0 x011C) }, /* Mio DigiWalker PPC StrongARM */
{ USB_DEVICE(0 x3340, 0 x0326) }, /* Mio DigiWalker 338 */
{ USB_DEVICE(0 x3340, 0 x0426) }, /* Mio DigiWalker 338 */
{ USB_DEVICE(0 x3340, 0 x043A) }, /* Mio DigiWalker USB Sync */
{ USB_DEVICE(0 x3340, 0 x051C) }, /* MiTAC USB Sync 528 */
{ USB_DEVICE(0 x3340, 0 x053A) }, /* Mio DigiWalker SmartPhone USB Sync */
{ USB_DEVICE(0 x3340, 0 x071C) }, /* MiTAC USB Sync */
{ USB_DEVICE(0 x3340, 0 x0B1C) }, /* Generic PPC StrongARM */
{ USB_DEVICE(0 x3340, 0 x0E3A) }, /* Generic PPC USB Sync */
{ USB_DEVICE(0 x3340, 0 x0F1C) }, /* Itautec USB Sync */
{ USB_DEVICE(0 x3340, 0 x0F3A) }, /* Generic SmartPhone USB Sync */
{ USB_DEVICE(0 x3340, 0 x1326) }, /* Itautec USB Sync */
{ USB_DEVICE(0 x3340, 0 x191C) }, /* YAKUMO USB Sync */
{ USB_DEVICE(0 x3340, 0 x2326) }, /* Vobis USB Sync */
{ USB_DEVICE(0 x3340, 0 x3326) }, /* MEDION Winodws Moble USB Sync */
{ USB_DEVICE(0 x3708, 0 x20CE) }, /* Legend USB Sync */
{ USB_DEVICE(0 x3708, 0 x21CE) }, /* Lenovo USB Sync */
{ USB_DEVICE(0 x4113, 0 x0210) }, /* Mobile Media Technology USB Sync */
{ USB_DEVICE(0 x4113, 0 x0211) }, /* Mobile Media Technology USB Sync */
{ USB_DEVICE(0 x4113, 0 x0400) }, /* Mobile Media Technology USB Sync */
{ USB_DEVICE(0 x4113, 0 x0410) }, /* Mobile Media Technology USB Sync */
{ USB_DEVICE(0 x413C, 0 x4001) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4002) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4003) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4004) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4005) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4006) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4007) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4008) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x413C, 0 x4009) }, /* Dell Axim USB Sync */
{ USB_DEVICE(0 x4505, 0 x0010) }, /* Smartphone */
{ USB_DEVICE(0 x5E04, 0 xCE00) }, /* SAGEM Wireless Assistant */
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, ipaq_id_table);
/* All of the device info needed for the Compaq iPAQ */
static struct usb_serial_driver ipaq_device = {
.driver = {
.name = "ipaq" ,
},
.description = "PocketPC PDA" ,
.id_table = ipaq_id_table,
.bulk_in_size = 256 ,
.bulk_out_size = 256 ,
.open = ipaq_open,
.attach = ipaq_startup,
.calc_num_ports = ipaq_calc_num_ports,
};
static struct usb_serial_driver * const serial_drivers[] = {
&ipaq_device, NULL
};
static int ipaq_open(struct tty_struct *tty,
struct usb_serial_port *port)
{
struct usb_serial *serial = port->serial;
int result = 0 ;
int retries = connect_retries;
msleep(1000 *initial_wait);
/*
* Send out control message observed in win98 sniffs. Not sure what
* it does, but from empirical observations, it seems that the device
* will start the chat sequence once one of these messages gets
* through. Since this has a reasonably high failure rate, we retry
* several times.
*/
while (retries) {
retries--;
result = usb_control_msg(serial->dev,
usb_sndctrlpipe(serial->dev, 0 ), 0 x22, 0 x21,
0 x1, 0 , NULL, 0 , 100 );
if (!result)
break ;
msleep(1000 );
}
if (!retries && result) {
dev_err(&port->dev, "%s - failed doing control urb, error %d\n" ,
__func__, result);
return result;
}
return usb_serial_generic_open(tty, port);
}
static int ipaq_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds)
{
/*
* Some of the devices in ipaq_id_table[] are composite, and we
* shouldn't bind to all the interfaces. This test will rule out
* some obviously invalid possibilities.
*/
if (epds->num_bulk_in == 0 || epds->num_bulk_out == 0 )
return -ENODEV;
/*
* A few devices have four endpoints, seemingly Yakuma devices, and
* we need the second pair.
*/
if (epds->num_bulk_in > 1 && epds->num_bulk_out > 1 ) {
epds->bulk_in[0 ] = epds->bulk_in[1 ];
epds->bulk_out[0 ] = epds->bulk_out[1 ];
}
/*
* Other devices have 3 endpoints, but we only use the first bulk in
* and out endpoints.
*/
epds->num_bulk_in = 1 ;
epds->num_bulk_out = 1 ;
return 1 ;
}
static int ipaq_startup(struct usb_serial *serial)
{
if (serial->dev->actconfig->desc.bConfigurationValue != 1 ) {
/*
* FIXME: HP iPaq rx3715, possibly others, have 1 config that
* is labeled as 2
*/
dev_err(&serial->dev->dev, "active config #%d != 1 ??\n" ,
serial->dev->actconfig->desc.bConfigurationValue);
return -ENODEV;
}
return usb_reset_configuration(serial->dev);
}
module_usb_serial_driver(serial_drivers, ipaq_id_table);
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL" );
module_param(connect_retries, int , 0644 );
MODULE_PARM_DESC(connect_retries,
"Maximum number of connect retries (one second each)" );
module_param(initial_wait, int , 0644 );
MODULE_PARM_DESC(initial_wait,
"Time to wait before attempting a connection (in seconds)" );
Messung V0.5 in Prozent C=91 H=93 G=91
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland