uipaq.c revision 185948
1255736Sdavidch/* $NetBSD: uipaq.c,v 1.4 2006/11/16 01:33:27 christos Exp $ */ 2255736Sdavidch/* $OpenBSD: uipaq.c,v 1.1 2005/06/17 23:50:33 deraadt Exp $ */ 3255736Sdavidch 4255736Sdavidch/* 5255736Sdavidch * Copyright (c) 2000-2005 The NetBSD Foundation, Inc. 6255736Sdavidch * All rights reserved. 7255736Sdavidch * 8255736Sdavidch * This code is derived from software contributed to The NetBSD Foundation 9255736Sdavidch * by Lennart Augustsson (lennart@augustsson.net) at 10255736Sdavidch * Carlstedt Research & Technology. 11255736Sdavidch * 12255736Sdavidch * Redistribution and use in source and binary forms, with or without 13255736Sdavidch * modification, are permitted provided that the following conditions 14255736Sdavidch * are met: 15255736Sdavidch * 1. Redistributions of source code must retain the above copyright 16255736Sdavidch * notice, this list of conditions and the following disclaimer. 17255736Sdavidch * 2. Redistributions in binary form must reproduce the above copyright 18255736Sdavidch * notice, this list of conditions and the following disclaimer in the 19255736Sdavidch * documentation and/or other materials provided with the distribution. 20255736Sdavidch * 3. All advertising materials mentioning features or use of this software 21255736Sdavidch * must display the following acknowledgement: 22255736Sdavidch * This product includes software developed by the NetBSD 23255736Sdavidch * Foundation, Inc. and its contributors. 24255736Sdavidch * 4. Neither the name of The NetBSD Foundation nor the names of its 25255736Sdavidch * contributors may be used to endorse or promote products derived 26255736Sdavidch * from this software without specific prior written permission. 27255736Sdavidch * 28255736Sdavidch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 29255736Sdavidch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 30255736Sdavidch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 31255736Sdavidch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 32255736Sdavidch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 33255736Sdavidch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 34255736Sdavidch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 35255736Sdavidch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 36255736Sdavidch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 37255736Sdavidch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38255736Sdavidch * POSSIBILITY OF SUCH DAMAGE. 39255736Sdavidch */ 40255736Sdavidch 41255736Sdavidch/* 42255736Sdavidch * iPAQ driver 43255736Sdavidch * 44255736Sdavidch * 19 July 2003: Incorporated changes suggested by Sam Lawrance from 45255736Sdavidch * the uppc module 46255736Sdavidch * 47255736Sdavidch * 48255736Sdavidch * Contact isis@cs.umd.edu if you have any questions/comments about this driver 49255736Sdavidch */ 50255736Sdavidch 51255736Sdavidch#include <sys/cdefs.h> 52255736Sdavidch__FBSDID("$FreeBSD: head/sys/dev/usb2/serial/uipaq2.c 185948 2008-12-11 23:13:02Z thompsa $"); 53255736Sdavidch 54255736Sdavidch#include <dev/usb2/include/usb2_devid.h> 55255736Sdavidch#include <dev/usb2/include/usb2_standard.h> 56255736Sdavidch#include <dev/usb2/include/usb2_mfunc.h> 57255736Sdavidch#include <dev/usb2/include/usb2_error.h> 58255736Sdavidch#include <dev/usb2/include/usb2_cdc.h> 59255736Sdavidch 60255736Sdavidch#define USB_DEBUG_VAR usb2_debug 61255736Sdavidch 62255736Sdavidch#include <dev/usb2/core/usb2_core.h> 63255736Sdavidch#include <dev/usb2/core/usb2_debug.h> 64255736Sdavidch#include <dev/usb2/core/usb2_process.h> 65255736Sdavidch#include <dev/usb2/core/usb2_config_td.h> 66255736Sdavidch#include <dev/usb2/core/usb2_request.h> 67255736Sdavidch#include <dev/usb2/core/usb2_lookup.h> 68255736Sdavidch#include <dev/usb2/core/usb2_util.h> 69255736Sdavidch#include <dev/usb2/core/usb2_busdma.h> 70255736Sdavidch 71255736Sdavidch#include <dev/usb2/serial/usb2_serial.h> 72255736Sdavidch 73255736Sdavidch#define UIPAQ_CONFIG_INDEX 0 /* config number 1 */ 74255736Sdavidch#define UIPAQ_IFACE_INDEX 0 75255736Sdavidch 76255736Sdavidch#define UIPAQ_BUF_SIZE 1024 77255736Sdavidch#define UIPAQ_N_DATA_TRANSFER 4 78255736Sdavidch 79255736Sdavidchstruct uipaq_softc { 80255736Sdavidch struct usb2_com_super_softc sc_super_ucom; 81255736Sdavidch struct usb2_com_softc sc_ucom; 82255736Sdavidch 83255736Sdavidch struct usb2_xfer *sc_xfer_data[UIPAQ_N_DATA_TRANSFER]; 84255736Sdavidch struct usb2_device *sc_udev; 85255736Sdavidch 86255736Sdavidch uint16_t sc_line; 87255736Sdavidch 88255736Sdavidch uint8_t sc_lsr; /* local status register */ 89255736Sdavidch uint8_t sc_msr; /* modem status register */ 90255736Sdavidch uint8_t sc_flag; 91255736Sdavidch#define UIPAQ_FLAG_READ_STALL 0x01 92255736Sdavidch#define UIPAQ_FLAG_WRITE_STALL 0x02 93255736Sdavidch#define UIPAQ_FLAG_INTR_STALL 0x04 94255736Sdavidch}; 95255736Sdavidch 96255736Sdavidchstatic device_probe_t uipaq_probe; 97255736Sdavidchstatic device_attach_t uipaq_attach; 98255736Sdavidchstatic device_detach_t uipaq_detach; 99255736Sdavidch 100255736Sdavidchstatic usb2_callback_t uipaq_write_callback; 101255736Sdavidchstatic usb2_callback_t uipaq_read_callback; 102255736Sdavidchstatic usb2_callback_t uipaq_write_clear_stall_callback; 103255736Sdavidchstatic usb2_callback_t uipaq_read_clear_stall_callback; 104255736Sdavidch 105255736Sdavidchstatic void uipaq_start_read(struct usb2_com_softc *); 106255736Sdavidchstatic void uipaq_stop_read(struct usb2_com_softc *); 107255736Sdavidchstatic void uipaq_start_write(struct usb2_com_softc *); 108255736Sdavidchstatic void uipaq_stop_write(struct usb2_com_softc *); 109255736Sdavidchstatic void uipaq_cfg_do_request(struct uipaq_softc *, 110255736Sdavidch struct usb2_device_request *, void *); 111255736Sdavidchstatic void uipaq_cfg_set_dtr(struct usb2_com_softc *, uint8_t); 112255736Sdavidchstatic void uipaq_cfg_set_rts(struct usb2_com_softc *, uint8_t); 113255736Sdavidchstatic void uipaq_cfg_set_break(struct usb2_com_softc *, uint8_t); 114255736Sdavidch 115255736Sdavidchstatic const struct usb2_config uipaq_config_data[UIPAQ_N_DATA_TRANSFER] = { 116255736Sdavidch 117255736Sdavidch [0] = { 118255736Sdavidch .type = UE_BULK, 119255736Sdavidch .endpoint = UE_ADDR_ANY, 120255736Sdavidch .direction = UE_DIR_OUT, 121255736Sdavidch .mh.bufsize = UIPAQ_BUF_SIZE, 122255736Sdavidch .mh.flags = {.pipe_bof = 1,.force_short_xfer = 1,}, 123255736Sdavidch .mh.callback = &uipaq_write_callback, 124255736Sdavidch }, 125255736Sdavidch 126255736Sdavidch [1] = { 127255736Sdavidch .type = UE_BULK, 128255736Sdavidch .endpoint = UE_ADDR_ANY, 129255736Sdavidch .direction = UE_DIR_IN, 130255736Sdavidch .mh.bufsize = UIPAQ_BUF_SIZE, 131255736Sdavidch .mh.flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, 132255736Sdavidch .mh.callback = &uipaq_read_callback, 133255736Sdavidch }, 134255736Sdavidch 135255736Sdavidch [2] = { 136255736Sdavidch .type = UE_CONTROL, 137255736Sdavidch .endpoint = 0x00, /* Control pipe */ 138255736Sdavidch .direction = UE_DIR_ANY, 139255736Sdavidch .mh.bufsize = sizeof(struct usb2_device_request), 140255736Sdavidch .mh.callback = &uipaq_write_clear_stall_callback, 141255736Sdavidch .mh.timeout = 1000, /* 1 second */ 142255736Sdavidch .mh.interval = 50, /* 50ms */ 143255736Sdavidch }, 144255736Sdavidch 145255736Sdavidch [3] = { 146255736Sdavidch .type = UE_CONTROL, 147255736Sdavidch .endpoint = 0x00, /* Control pipe */ 148255736Sdavidch .direction = UE_DIR_ANY, 149255736Sdavidch .mh.bufsize = sizeof(struct usb2_device_request), 150255736Sdavidch .mh.callback = &uipaq_read_clear_stall_callback, 151255736Sdavidch .mh.timeout = 1000, /* 1 second */ 152255736Sdavidch .mh.interval = 50, /* 50ms */ 153255736Sdavidch }, 154255736Sdavidch}; 155255736Sdavidch 156255736Sdavidchstatic const struct usb2_com_callback uipaq_callback = { 157255736Sdavidch .usb2_com_cfg_set_dtr = &uipaq_cfg_set_dtr, 158255736Sdavidch .usb2_com_cfg_set_rts = &uipaq_cfg_set_rts, 159255736Sdavidch .usb2_com_cfg_set_break = &uipaq_cfg_set_break, 160255736Sdavidch .usb2_com_start_read = &uipaq_start_read, 161255736Sdavidch .usb2_com_stop_read = &uipaq_stop_read, 162255736Sdavidch .usb2_com_start_write = &uipaq_start_write, 163255736Sdavidch .usb2_com_stop_write = &uipaq_stop_write, 164255736Sdavidch}; 165255736Sdavidch 166255736Sdavidch/* 167255736Sdavidch * Much of this list is generated from lists of other drivers that 168255736Sdavidch * support the same hardware. Numeric values are used where no usbdevs 169255736Sdavidch * entries exist. 170255736Sdavidch */ 171255736Sdavidchstatic const struct usb2_device_id uipaq_devs[] = { 172255736Sdavidch /* Socket USB Sync */ 173255736Sdavidch {USB_VPI(0x0104, 0x00be, 0)}, 174255736Sdavidch /* USB Sync 0301 */ 175255736Sdavidch {USB_VPI(0x04ad, 0x0301, 0)}, 176255736Sdavidch /* USB Sync 0302 */ 177255736Sdavidch {USB_VPI(0x04ad, 0x0302, 0)}, 178255736Sdavidch /* USB Sync 0303 */ 179255736Sdavidch {USB_VPI(0x04ad, 0x0303, 0)}, 180255736Sdavidch /* GPS Pocket PC USB Sync */ 181255736Sdavidch {USB_VPI(0x04ad, 0x0306, 0)}, 182255736Sdavidch /* HHP PDT */ 183255736Sdavidch {USB_VPI(0x0536, 0x01a0, 0)}, 184255736Sdavidch /* Intermec Mobile Computer */ 185255736Sdavidch {USB_VPI(0x067e, 0x1001, 0)}, 186255736Sdavidch /* Linkup Systems USB Sync */ 187255736Sdavidch {USB_VPI(0x094b, 0x0001, 0)}, 188255736Sdavidch /* BCOM USB Sync 0065 */ 189255736Sdavidch {USB_VPI(0x0960, 0x0065, 0)}, 190255736Sdavidch /* BCOM USB Sync 0066 */ 191255736Sdavidch {USB_VPI(0x0960, 0x0066, 0)}, 192255736Sdavidch /* BCOM USB Sync 0067 */ 193255736Sdavidch {USB_VPI(0x0960, 0x0067, 0)}, 194255736Sdavidch /* Portatec USB Sync */ 195255736Sdavidch {USB_VPI(0x0961, 0x0010, 0)}, 196255736Sdavidch /* Trimble GeoExplorer */ 197255736Sdavidch {USB_VPI(0x099e, 0x0052, 0)}, 198255736Sdavidch /* TDS Data Collector */ 199255736Sdavidch {USB_VPI(0x099e, 0x4000, 0)}, 200255736Sdavidch /* Motorola iDEN Smartphone */ 201255736Sdavidch {USB_VPI(0x0c44, 0x03a2, 0)}, 202255736Sdavidch /* Cesscom Luxian Series */ 203255736Sdavidch {USB_VPI(0x0c8e, 0x6000, 0)}, 204255736Sdavidch /* Motorola PowerPad Pocket PCDevice */ 205255736Sdavidch {USB_VPI(0x0cad, 0x9001, 0)}, 206255736Sdavidch /* Freedom Scientific USB Sync */ 207255736Sdavidch {USB_VPI(0x0f4e, 0x0200, 0)}, 208255736Sdavidch /* Cyberbank USB Sync */ 209255736Sdavidch {USB_VPI(0x0f98, 0x0201, 0)}, 210255736Sdavidch /* Wistron USB Sync */ 211255736Sdavidch {USB_VPI(0x0fb8, 0x3001, 0)}, 212255736Sdavidch /* Wistron USB Sync */ 213255736Sdavidch {USB_VPI(0x0fb8, 0x3002, 0)}, 214255736Sdavidch /* Wistron USB Sync */ 215255736Sdavidch {USB_VPI(0x0fb8, 0x3003, 0)}, 216255736Sdavidch /* Wistron USB Sync */ 217255736Sdavidch {USB_VPI(0x0fb8, 0x4001, 0)}, 218255736Sdavidch /* E-TEN USB Sync */ 219255736Sdavidch {USB_VPI(0x1066, 0x00ce, 0)}, 220255736Sdavidch /* E-TEN P3XX Pocket PC */ 221255736Sdavidch {USB_VPI(0x1066, 0x0300, 0)}, 222255736Sdavidch /* E-TEN P5XX Pocket PC */ 223255736Sdavidch {USB_VPI(0x1066, 0x0500, 0)}, 224255736Sdavidch /* E-TEN P6XX Pocket PC */ 225255736Sdavidch {USB_VPI(0x1066, 0x0600, 0)}, 226255736Sdavidch /* E-TEN P7XX Pocket PC */ 227255736Sdavidch {USB_VPI(0x1066, 0x0700, 0)}, 228255736Sdavidch /* Psion Teklogix Sync 753x */ 229255736Sdavidch {USB_VPI(0x1114, 0x0001, 0)}, 230255736Sdavidch /* Psion Teklogix Sync netBookPro */ 231255736Sdavidch {USB_VPI(0x1114, 0x0004, 0)}, 232255736Sdavidch /* Psion Teklogix Sync 7525 */ 233255736Sdavidch {USB_VPI(0x1114, 0x0006, 0)}, 234255736Sdavidch /* VES USB Sync */ 235255736Sdavidch {USB_VPI(0x1182, 0x1388, 0)}, 236255736Sdavidch /* Rugged Pocket PC 2003 */ 237255736Sdavidch {USB_VPI(0x11d9, 0x1002, 0)}, 238255736Sdavidch /* Rugged Pocket PC 2003 */ 239255736Sdavidch {USB_VPI(0x11d9, 0x1003, 0)}, 240255736Sdavidch /* USB Sync 03 */ 241255736Sdavidch {USB_VPI(0x1231, 0xce01, 0)}, 242255736Sdavidch /* USB Sync 03 */ 243255736Sdavidch {USB_VPI(0x1231, 0xce02, 0)}, 244255736Sdavidch /* Mio DigiWalker PPC StrongARM */ 245255736Sdavidch {USB_VPI(0x3340, 0x011c, 0)}, 246255736Sdavidch /* Mio DigiWalker 338 */ 247255736Sdavidch {USB_VPI(0x3340, 0x0326, 0)}, 248255736Sdavidch /* Mio DigiWalker 338 */ 249255736Sdavidch {USB_VPI(0x3340, 0x0426, 0)}, 250255736Sdavidch /* Mio DigiWalker USB Sync */ 251255736Sdavidch {USB_VPI(0x3340, 0x043a, 0)}, 252255736Sdavidch /* MiTAC USB Sync 528 */ 253255736Sdavidch {USB_VPI(0x3340, 0x051c, 0)}, 254255736Sdavidch /* Mio DigiWalker SmartPhone USB Sync */ 255255736Sdavidch {USB_VPI(0x3340, 0x053a, 0)}, 256255736Sdavidch /* MiTAC USB Sync */ 257255736Sdavidch {USB_VPI(0x3340, 0x071c, 0)}, 258255736Sdavidch /* Generic PPC StrongARM */ 259255736Sdavidch {USB_VPI(0x3340, 0x0b1c, 0)}, 260255736Sdavidch /* Generic PPC USB Sync */ 261255736Sdavidch {USB_VPI(0x3340, 0x0e3a, 0)}, 262255736Sdavidch /* Itautec USB Sync */ 263255736Sdavidch {USB_VPI(0x3340, 0x0f1c, 0)}, 264255736Sdavidch /* Generic SmartPhone USB Sync */ 265255736Sdavidch {USB_VPI(0x3340, 0x0f3a, 0)}, 266255736Sdavidch /* Itautec USB Sync */ 267255736Sdavidch {USB_VPI(0x3340, 0x1326, 0)}, 268255736Sdavidch /* YAKUMO USB Sync */ 269255736Sdavidch {USB_VPI(0x3340, 0x191c, 0)}, 270255736Sdavidch /* Vobis USB Sync */ 271255736Sdavidch {USB_VPI(0x3340, 0x2326, 0)}, 272255736Sdavidch /* MEDION Winodws Moble USB Sync */ 273255736Sdavidch {USB_VPI(0x3340, 0x3326, 0)}, 274255736Sdavidch /* Legend USB Sync */ 275255736Sdavidch {USB_VPI(0x3708, 0x20ce, 0)}, 276255736Sdavidch /* Lenovo USB Sync */ 277255736Sdavidch {USB_VPI(0x3708, 0x21ce, 0)}, 278255736Sdavidch /* Mobile Media Technology USB Sync */ 279255736Sdavidch {USB_VPI(0x4113, 0x0210, 0)}, 280255736Sdavidch /* Mobile Media Technology USB Sync */ 281255736Sdavidch {USB_VPI(0x4113, 0x0211, 0)}, 282255736Sdavidch /* Mobile Media Technology USB Sync */ 283255736Sdavidch {USB_VPI(0x4113, 0x0400, 0)}, 284255736Sdavidch /* Mobile Media Technology USB Sync */ 285255736Sdavidch {USB_VPI(0x4113, 0x0410, 0)}, 286255736Sdavidch /* Smartphone */ 287255736Sdavidch {USB_VPI(0x4505, 0x0010, 0)}, 288255736Sdavidch /* SAGEM Wireless Assistant */ 289255736Sdavidch {USB_VPI(0x5e04, 0xce00, 0)}, 290255736Sdavidch /* c10 Series */ 291255736Sdavidch {USB_VPI(USB_VENDOR_ACER, 0x1631, 0)}, 292255736Sdavidch /* c20 Series */ 293255736Sdavidch {USB_VPI(USB_VENDOR_ACER, 0x1632, 0)}, 294255736Sdavidch /* Acer n10 Handheld USB Sync */ 295255736Sdavidch {USB_VPI(USB_VENDOR_ACER, 0x16e1, 0)}, 296255736Sdavidch /* Acer n20 Handheld USB Sync */ 297255736Sdavidch {USB_VPI(USB_VENDOR_ACER, 0x16e2, 0)}, 298255736Sdavidch /* Acer n30 Handheld USB Sync */ 299255736Sdavidch {USB_VPI(USB_VENDOR_ACER, 0x16e3, 0)}, 300255736Sdavidch /* ASUS USB Sync */ 301255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, 0x4200, 0)}, 302255736Sdavidch /* ASUS USB Sync */ 303255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, 0x4201, 0)}, 304255736Sdavidch /* ASUS USB Sync */ 305255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, 0x4202, 0)}, 306255736Sdavidch /* ASUS USB Sync */ 307255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, 0x9200, 0)}, 308255736Sdavidch /* ASUS USB Sync */ 309255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, 0x9202, 0)}, 310255736Sdavidch /**/ 311255736Sdavidch {USB_VPI(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P535, 0)}, 312255736Sdavidch /* CASIO USB Sync 2001 */ 313255736Sdavidch {USB_VPI(USB_VENDOR_CASIO, 0x2001, 0)}, 314255736Sdavidch /* CASIO USB Sync 2003 */ 315255736Sdavidch {USB_VPI(USB_VENDOR_CASIO, 0x2003, 0)}, 316255736Sdavidch /**/ 317255736Sdavidch {USB_VPI(USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300, 0)}, 318255736Sdavidch /* MyGuide 7000 XL USB Sync */ 319255736Sdavidch {USB_VPI(USB_VENDOR_COMPAL, 0x0531, 0)}, 320255736Sdavidch /* Compaq iPAQ USB Sync */ 321255736Sdavidch {USB_VPI(USB_VENDOR_COMPAQ, 0x0032, 0)}, 322255736Sdavidch /**/ 323255736Sdavidch {USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC, 0)}, 324255736Sdavidch /* Dell Axim USB Sync */ 325255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4001, 0)}, 326255736Sdavidch /* Dell Axim USB Sync */ 327255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4002, 0)}, 328255736Sdavidch /* Dell Axim USB Sync */ 329255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4003, 0)}, 330255736Sdavidch /* Dell Axim USB Sync */ 331255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4004, 0)}, 332255736Sdavidch /* Dell Axim USB Sync */ 333255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4005, 0)}, 334255736Sdavidch /* Dell Axim USB Sync */ 335255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4006, 0)}, 336255736Sdavidch /* Dell Axim USB Sync */ 337255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4007, 0)}, 338255736Sdavidch /* Dell Axim USB Sync */ 339255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4008, 0)}, 340255736Sdavidch /* Dell Axim USB Sync */ 341255736Sdavidch {USB_VPI(USB_VENDOR_DELL, 0x4009, 0)}, 342255736Sdavidch /* Fujitsu Siemens Computers USB Sync */ 343255736Sdavidch {USB_VPI(USB_VENDOR_FSC, 0x1001, 0)}, 344255736Sdavidch /* FUJITSU USB Sync */ 345255736Sdavidch {USB_VPI(USB_VENDOR_FUJITSU, 0x1058, 0)}, 346255736Sdavidch /* FUJITSU USB Sync */ 347255736Sdavidch {USB_VPI(USB_VENDOR_FUJITSU, 0x1079, 0)}, 348255736Sdavidch /* Askey USB Sync */ 349255736Sdavidch {USB_VPI(USB_VENDOR_GIGASET, 0x0601, 0)}, 350255736Sdavidch /* Hitachi USB Sync */ 351255736Sdavidch {USB_VPI(USB_VENDOR_HITACHI, 0x0014, 0)}, 352255736Sdavidch /* HP USB Sync 1612 */ 353255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x1216, 0)}, 354255736Sdavidch /* HP USB Sync 1620 */ 355255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x2016, 0)}, 356255736Sdavidch /* HP USB Sync 1621 */ 357255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x2116, 0)}, 358255736Sdavidch /* HP USB Sync 1622 */ 359255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x2216, 0)}, 360255736Sdavidch /* HP USB Sync 1630 */ 361255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x3016, 0)}, 362255736Sdavidch /* HP USB Sync 1631 */ 363255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x3116, 0)}, 364255736Sdavidch /* HP USB Sync 1632 */ 365255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x3216, 0)}, 366255736Sdavidch /* HP USB Sync 1640 */ 367255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x4016, 0)}, 368255736Sdavidch /* HP USB Sync 1641 */ 369255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x4116, 0)}, 370255736Sdavidch /* HP USB Sync 1642 */ 371255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x4216, 0)}, 372255736Sdavidch /* HP USB Sync 1650 */ 373255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x5016, 0)}, 374255736Sdavidch /* HP USB Sync 1651 */ 375255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x5116, 0)}, 376255736Sdavidch /* HP USB Sync 1652 */ 377255736Sdavidch {USB_VPI(USB_VENDOR_HP, 0x5216, 0)}, 378255736Sdavidch /**/ 379255736Sdavidch {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_2215, 0)}, 380255736Sdavidch /**/ 381255736Sdavidch {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_568J, 0)}, 382255736Sdavidch /* HTC USB Modem */ 383255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x00cf, 0)}, 384255736Sdavidch /* PocketPC USB Sync */ 385255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a01, 0)}, 386255736Sdavidch /* PocketPC USB Sync */ 387255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a02, 0)}, 388255736Sdavidch /* PocketPC USB Sync */ 389255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a03, 0)}, 390255736Sdavidch /* PocketPC USB Sync */ 391255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a04, 0)}, 392255736Sdavidch /* PocketPC USB Sync */ 393255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a05, 0)}, 394255736Sdavidch /* PocketPC USB Sync */ 395255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a06, 0)}, 396255736Sdavidch /* PocketPC USB Sync */ 397255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a07, 0)}, 398255736Sdavidch /* PocketPC USB Sync */ 399255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a08, 0)}, 400255736Sdavidch /* PocketPC USB Sync */ 401255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a09, 0)}, 402255736Sdavidch /* PocketPC USB Sync */ 403255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0a, 0)}, 404255736Sdavidch /* PocketPC USB Sync */ 405255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0b, 0)}, 406255736Sdavidch /* PocketPC USB Sync */ 407255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0c, 0)}, 408255736Sdavidch /* PocketPC USB Sync */ 409255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0d, 0)}, 410255736Sdavidch /* PocketPC USB Sync */ 411255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0e, 0)}, 412255736Sdavidch /* PocketPC USB Sync */ 413255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a0f, 0)}, 414255736Sdavidch /* PocketPC USB Sync */ 415255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a10, 0)}, 416255736Sdavidch /* PocketPC USB Sync */ 417255736Sdavidch {USB_VPI(USB_VENDOR_HTC, 0x0a11, 0)}, 418255736Sdavidch /* PocketPC USB Sync */ 419 {USB_VPI(USB_VENDOR_HTC, 0x0a12, 0)}, 420 /* PocketPC USB Sync */ 421 {USB_VPI(USB_VENDOR_HTC, 0x0a13, 0)}, 422 /* PocketPC USB Sync */ 423 {USB_VPI(USB_VENDOR_HTC, 0x0a14, 0)}, 424 /* PocketPC USB Sync */ 425 {USB_VPI(USB_VENDOR_HTC, 0x0a15, 0)}, 426 /* PocketPC USB Sync */ 427 {USB_VPI(USB_VENDOR_HTC, 0x0a16, 0)}, 428 /* PocketPC USB Sync */ 429 {USB_VPI(USB_VENDOR_HTC, 0x0a17, 0)}, 430 /* PocketPC USB Sync */ 431 {USB_VPI(USB_VENDOR_HTC, 0x0a18, 0)}, 432 /* PocketPC USB Sync */ 433 {USB_VPI(USB_VENDOR_HTC, 0x0a19, 0)}, 434 /* PocketPC USB Sync */ 435 {USB_VPI(USB_VENDOR_HTC, 0x0a1a, 0)}, 436 /* PocketPC USB Sync */ 437 {USB_VPI(USB_VENDOR_HTC, 0x0a1b, 0)}, 438 /* PocketPC USB Sync */ 439 {USB_VPI(USB_VENDOR_HTC, 0x0a1c, 0)}, 440 /* PocketPC USB Sync */ 441 {USB_VPI(USB_VENDOR_HTC, 0x0a1d, 0)}, 442 /* PocketPC USB Sync */ 443 {USB_VPI(USB_VENDOR_HTC, 0x0a1e, 0)}, 444 /* PocketPC USB Sync */ 445 {USB_VPI(USB_VENDOR_HTC, 0x0a1f, 0)}, 446 /* PocketPC USB Sync */ 447 {USB_VPI(USB_VENDOR_HTC, 0x0a20, 0)}, 448 /* PocketPC USB Sync */ 449 {USB_VPI(USB_VENDOR_HTC, 0x0a21, 0)}, 450 /* PocketPC USB Sync */ 451 {USB_VPI(USB_VENDOR_HTC, 0x0a22, 0)}, 452 /* PocketPC USB Sync */ 453 {USB_VPI(USB_VENDOR_HTC, 0x0a23, 0)}, 454 /* PocketPC USB Sync */ 455 {USB_VPI(USB_VENDOR_HTC, 0x0a24, 0)}, 456 /* PocketPC USB Sync */ 457 {USB_VPI(USB_VENDOR_HTC, 0x0a25, 0)}, 458 /* PocketPC USB Sync */ 459 {USB_VPI(USB_VENDOR_HTC, 0x0a26, 0)}, 460 /* PocketPC USB Sync */ 461 {USB_VPI(USB_VENDOR_HTC, 0x0a27, 0)}, 462 /* PocketPC USB Sync */ 463 {USB_VPI(USB_VENDOR_HTC, 0x0a28, 0)}, 464 /* PocketPC USB Sync */ 465 {USB_VPI(USB_VENDOR_HTC, 0x0a29, 0)}, 466 /* PocketPC USB Sync */ 467 {USB_VPI(USB_VENDOR_HTC, 0x0a2a, 0)}, 468 /* PocketPC USB Sync */ 469 {USB_VPI(USB_VENDOR_HTC, 0x0a2b, 0)}, 470 /* PocketPC USB Sync */ 471 {USB_VPI(USB_VENDOR_HTC, 0x0a2c, 0)}, 472 /* PocketPC USB Sync */ 473 {USB_VPI(USB_VENDOR_HTC, 0x0a2d, 0)}, 474 /* PocketPC USB Sync */ 475 {USB_VPI(USB_VENDOR_HTC, 0x0a2e, 0)}, 476 /* PocketPC USB Sync */ 477 {USB_VPI(USB_VENDOR_HTC, 0x0a2f, 0)}, 478 /* PocketPC USB Sync */ 479 {USB_VPI(USB_VENDOR_HTC, 0x0a30, 0)}, 480 /* PocketPC USB Sync */ 481 {USB_VPI(USB_VENDOR_HTC, 0x0a31, 0)}, 482 /* PocketPC USB Sync */ 483 {USB_VPI(USB_VENDOR_HTC, 0x0a32, 0)}, 484 /* PocketPC USB Sync */ 485 {USB_VPI(USB_VENDOR_HTC, 0x0a33, 0)}, 486 /* PocketPC USB Sync */ 487 {USB_VPI(USB_VENDOR_HTC, 0x0a34, 0)}, 488 /* PocketPC USB Sync */ 489 {USB_VPI(USB_VENDOR_HTC, 0x0a35, 0)}, 490 /* PocketPC USB Sync */ 491 {USB_VPI(USB_VENDOR_HTC, 0x0a36, 0)}, 492 /* PocketPC USB Sync */ 493 {USB_VPI(USB_VENDOR_HTC, 0x0a37, 0)}, 494 /* PocketPC USB Sync */ 495 {USB_VPI(USB_VENDOR_HTC, 0x0a38, 0)}, 496 /* PocketPC USB Sync */ 497 {USB_VPI(USB_VENDOR_HTC, 0x0a39, 0)}, 498 /* PocketPC USB Sync */ 499 {USB_VPI(USB_VENDOR_HTC, 0x0a3a, 0)}, 500 /* PocketPC USB Sync */ 501 {USB_VPI(USB_VENDOR_HTC, 0x0a3b, 0)}, 502 /* PocketPC USB Sync */ 503 {USB_VPI(USB_VENDOR_HTC, 0x0a3c, 0)}, 504 /* PocketPC USB Sync */ 505 {USB_VPI(USB_VENDOR_HTC, 0x0a3d, 0)}, 506 /* PocketPC USB Sync */ 507 {USB_VPI(USB_VENDOR_HTC, 0x0a3e, 0)}, 508 /* PocketPC USB Sync */ 509 {USB_VPI(USB_VENDOR_HTC, 0x0a3f, 0)}, 510 /* PocketPC USB Sync */ 511 {USB_VPI(USB_VENDOR_HTC, 0x0a40, 0)}, 512 /* PocketPC USB Sync */ 513 {USB_VPI(USB_VENDOR_HTC, 0x0a41, 0)}, 514 /* PocketPC USB Sync */ 515 {USB_VPI(USB_VENDOR_HTC, 0x0a42, 0)}, 516 /* PocketPC USB Sync */ 517 {USB_VPI(USB_VENDOR_HTC, 0x0a43, 0)}, 518 /* PocketPC USB Sync */ 519 {USB_VPI(USB_VENDOR_HTC, 0x0a44, 0)}, 520 /* PocketPC USB Sync */ 521 {USB_VPI(USB_VENDOR_HTC, 0x0a45, 0)}, 522 /* PocketPC USB Sync */ 523 {USB_VPI(USB_VENDOR_HTC, 0x0a46, 0)}, 524 /* PocketPC USB Sync */ 525 {USB_VPI(USB_VENDOR_HTC, 0x0a47, 0)}, 526 /* PocketPC USB Sync */ 527 {USB_VPI(USB_VENDOR_HTC, 0x0a48, 0)}, 528 /* PocketPC USB Sync */ 529 {USB_VPI(USB_VENDOR_HTC, 0x0a49, 0)}, 530 /* PocketPC USB Sync */ 531 {USB_VPI(USB_VENDOR_HTC, 0x0a4a, 0)}, 532 /* PocketPC USB Sync */ 533 {USB_VPI(USB_VENDOR_HTC, 0x0a4b, 0)}, 534 /* PocketPC USB Sync */ 535 {USB_VPI(USB_VENDOR_HTC, 0x0a4c, 0)}, 536 /* PocketPC USB Sync */ 537 {USB_VPI(USB_VENDOR_HTC, 0x0a4d, 0)}, 538 /* PocketPC USB Sync */ 539 {USB_VPI(USB_VENDOR_HTC, 0x0a4e, 0)}, 540 /* PocketPC USB Sync */ 541 {USB_VPI(USB_VENDOR_HTC, 0x0a4f, 0)}, 542 /* HTC SmartPhone USB Sync */ 543 {USB_VPI(USB_VENDOR_HTC, 0x0a50, 0)}, 544 /* SmartPhone USB Sync */ 545 {USB_VPI(USB_VENDOR_HTC, 0x0a52, 0)}, 546 /* SmartPhone USB Sync */ 547 {USB_VPI(USB_VENDOR_HTC, 0x0a53, 0)}, 548 /* SmartPhone USB Sync */ 549 {USB_VPI(USB_VENDOR_HTC, 0x0a54, 0)}, 550 /* SmartPhone USB Sync */ 551 {USB_VPI(USB_VENDOR_HTC, 0x0a55, 0)}, 552 /* SmartPhone USB Sync */ 553 {USB_VPI(USB_VENDOR_HTC, 0x0a56, 0)}, 554 /* SmartPhone USB Sync */ 555 {USB_VPI(USB_VENDOR_HTC, 0x0a57, 0)}, 556 /* SmartPhone USB Sync */ 557 {USB_VPI(USB_VENDOR_HTC, 0x0a58, 0)}, 558 /* SmartPhone USB Sync */ 559 {USB_VPI(USB_VENDOR_HTC, 0x0a59, 0)}, 560 /* SmartPhone USB Sync */ 561 {USB_VPI(USB_VENDOR_HTC, 0x0a5a, 0)}, 562 /* SmartPhone USB Sync */ 563 {USB_VPI(USB_VENDOR_HTC, 0x0a5b, 0)}, 564 /* SmartPhone USB Sync */ 565 {USB_VPI(USB_VENDOR_HTC, 0x0a5c, 0)}, 566 /* SmartPhone USB Sync */ 567 {USB_VPI(USB_VENDOR_HTC, 0x0a5d, 0)}, 568 /* SmartPhone USB Sync */ 569 {USB_VPI(USB_VENDOR_HTC, 0x0a5e, 0)}, 570 /* SmartPhone USB Sync */ 571 {USB_VPI(USB_VENDOR_HTC, 0x0a5f, 0)}, 572 /* SmartPhone USB Sync */ 573 {USB_VPI(USB_VENDOR_HTC, 0x0a60, 0)}, 574 /* SmartPhone USB Sync */ 575 {USB_VPI(USB_VENDOR_HTC, 0x0a61, 0)}, 576 /* SmartPhone USB Sync */ 577 {USB_VPI(USB_VENDOR_HTC, 0x0a62, 0)}, 578 /* SmartPhone USB Sync */ 579 {USB_VPI(USB_VENDOR_HTC, 0x0a63, 0)}, 580 /* SmartPhone USB Sync */ 581 {USB_VPI(USB_VENDOR_HTC, 0x0a64, 0)}, 582 /* SmartPhone USB Sync */ 583 {USB_VPI(USB_VENDOR_HTC, 0x0a65, 0)}, 584 /* SmartPhone USB Sync */ 585 {USB_VPI(USB_VENDOR_HTC, 0x0a66, 0)}, 586 /* SmartPhone USB Sync */ 587 {USB_VPI(USB_VENDOR_HTC, 0x0a67, 0)}, 588 /* SmartPhone USB Sync */ 589 {USB_VPI(USB_VENDOR_HTC, 0x0a68, 0)}, 590 /* SmartPhone USB Sync */ 591 {USB_VPI(USB_VENDOR_HTC, 0x0a69, 0)}, 592 /* SmartPhone USB Sync */ 593 {USB_VPI(USB_VENDOR_HTC, 0x0a6a, 0)}, 594 /* SmartPhone USB Sync */ 595 {USB_VPI(USB_VENDOR_HTC, 0x0a6b, 0)}, 596 /* SmartPhone USB Sync */ 597 {USB_VPI(USB_VENDOR_HTC, 0x0a6c, 0)}, 598 /* SmartPhone USB Sync */ 599 {USB_VPI(USB_VENDOR_HTC, 0x0a6d, 0)}, 600 /* SmartPhone USB Sync */ 601 {USB_VPI(USB_VENDOR_HTC, 0x0a6e, 0)}, 602 /* SmartPhone USB Sync */ 603 {USB_VPI(USB_VENDOR_HTC, 0x0a6f, 0)}, 604 /* SmartPhone USB Sync */ 605 {USB_VPI(USB_VENDOR_HTC, 0x0a70, 0)}, 606 /* SmartPhone USB Sync */ 607 {USB_VPI(USB_VENDOR_HTC, 0x0a71, 0)}, 608 /* SmartPhone USB Sync */ 609 {USB_VPI(USB_VENDOR_HTC, 0x0a72, 0)}, 610 /* SmartPhone USB Sync */ 611 {USB_VPI(USB_VENDOR_HTC, 0x0a73, 0)}, 612 /* SmartPhone USB Sync */ 613 {USB_VPI(USB_VENDOR_HTC, 0x0a74, 0)}, 614 /* SmartPhone USB Sync */ 615 {USB_VPI(USB_VENDOR_HTC, 0x0a75, 0)}, 616 /* SmartPhone USB Sync */ 617 {USB_VPI(USB_VENDOR_HTC, 0x0a76, 0)}, 618 /* SmartPhone USB Sync */ 619 {USB_VPI(USB_VENDOR_HTC, 0x0a77, 0)}, 620 /* SmartPhone USB Sync */ 621 {USB_VPI(USB_VENDOR_HTC, 0x0a78, 0)}, 622 /* SmartPhone USB Sync */ 623 {USB_VPI(USB_VENDOR_HTC, 0x0a79, 0)}, 624 /* SmartPhone USB Sync */ 625 {USB_VPI(USB_VENDOR_HTC, 0x0a7a, 0)}, 626 /* SmartPhone USB Sync */ 627 {USB_VPI(USB_VENDOR_HTC, 0x0a7b, 0)}, 628 /* SmartPhone USB Sync */ 629 {USB_VPI(USB_VENDOR_HTC, 0x0a7c, 0)}, 630 /* SmartPhone USB Sync */ 631 {USB_VPI(USB_VENDOR_HTC, 0x0a7d, 0)}, 632 /* SmartPhone USB Sync */ 633 {USB_VPI(USB_VENDOR_HTC, 0x0a7e, 0)}, 634 /* SmartPhone USB Sync */ 635 {USB_VPI(USB_VENDOR_HTC, 0x0a7f, 0)}, 636 /* SmartPhone USB Sync */ 637 {USB_VPI(USB_VENDOR_HTC, 0x0a80, 0)}, 638 /* SmartPhone USB Sync */ 639 {USB_VPI(USB_VENDOR_HTC, 0x0a81, 0)}, 640 /* SmartPhone USB Sync */ 641 {USB_VPI(USB_VENDOR_HTC, 0x0a82, 0)}, 642 /* SmartPhone USB Sync */ 643 {USB_VPI(USB_VENDOR_HTC, 0x0a83, 0)}, 644 /* SmartPhone USB Sync */ 645 {USB_VPI(USB_VENDOR_HTC, 0x0a84, 0)}, 646 /* SmartPhone USB Sync */ 647 {USB_VPI(USB_VENDOR_HTC, 0x0a85, 0)}, 648 /* SmartPhone USB Sync */ 649 {USB_VPI(USB_VENDOR_HTC, 0x0a86, 0)}, 650 /* SmartPhone USB Sync */ 651 {USB_VPI(USB_VENDOR_HTC, 0x0a87, 0)}, 652 /* SmartPhone USB Sync */ 653 {USB_VPI(USB_VENDOR_HTC, 0x0a88, 0)}, 654 /* SmartPhone USB Sync */ 655 {USB_VPI(USB_VENDOR_HTC, 0x0a89, 0)}, 656 /* SmartPhone USB Sync */ 657 {USB_VPI(USB_VENDOR_HTC, 0x0a8a, 0)}, 658 /* SmartPhone USB Sync */ 659 {USB_VPI(USB_VENDOR_HTC, 0x0a8b, 0)}, 660 /* SmartPhone USB Sync */ 661 {USB_VPI(USB_VENDOR_HTC, 0x0a8c, 0)}, 662 /* SmartPhone USB Sync */ 663 {USB_VPI(USB_VENDOR_HTC, 0x0a8d, 0)}, 664 /* SmartPhone USB Sync */ 665 {USB_VPI(USB_VENDOR_HTC, 0x0a8e, 0)}, 666 /* SmartPhone USB Sync */ 667 {USB_VPI(USB_VENDOR_HTC, 0x0a8f, 0)}, 668 /* SmartPhone USB Sync */ 669 {USB_VPI(USB_VENDOR_HTC, 0x0a90, 0)}, 670 /* SmartPhone USB Sync */ 671 {USB_VPI(USB_VENDOR_HTC, 0x0a91, 0)}, 672 /* SmartPhone USB Sync */ 673 {USB_VPI(USB_VENDOR_HTC, 0x0a92, 0)}, 674 /* SmartPhone USB Sync */ 675 {USB_VPI(USB_VENDOR_HTC, 0x0a93, 0)}, 676 /* SmartPhone USB Sync */ 677 {USB_VPI(USB_VENDOR_HTC, 0x0a94, 0)}, 678 /* SmartPhone USB Sync */ 679 {USB_VPI(USB_VENDOR_HTC, 0x0a95, 0)}, 680 /* SmartPhone USB Sync */ 681 {USB_VPI(USB_VENDOR_HTC, 0x0a96, 0)}, 682 /* SmartPhone USB Sync */ 683 {USB_VPI(USB_VENDOR_HTC, 0x0a97, 0)}, 684 /* SmartPhone USB Sync */ 685 {USB_VPI(USB_VENDOR_HTC, 0x0a98, 0)}, 686 /* SmartPhone USB Sync */ 687 {USB_VPI(USB_VENDOR_HTC, 0x0a99, 0)}, 688 /* SmartPhone USB Sync */ 689 {USB_VPI(USB_VENDOR_HTC, 0x0a9a, 0)}, 690 /* SmartPhone USB Sync */ 691 {USB_VPI(USB_VENDOR_HTC, 0x0a9b, 0)}, 692 /* SmartPhone USB Sync */ 693 {USB_VPI(USB_VENDOR_HTC, 0x0a9c, 0)}, 694 /* SmartPhone USB Sync */ 695 {USB_VPI(USB_VENDOR_HTC, 0x0a9d, 0)}, 696 /* SmartPhone USB Sync */ 697 {USB_VPI(USB_VENDOR_HTC, 0x0a9e, 0)}, 698 /* SmartPhone USB Sync */ 699 {USB_VPI(USB_VENDOR_HTC, 0x0a9f, 0)}, 700 /* "High Tech Computer Corp" */ 701 {USB_VPI(USB_VENDOR_HTC, 0x0bce, 0)}, 702 /**/ 703 {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM, 0)}, 704 /**/ 705 {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE, 0)}, 706 /**/ 707 {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_WINMOBILE, 0)}, 708 /* JVC USB Sync */ 709 {USB_VPI(USB_VENDOR_JVC, 0x3011, 0)}, 710 /* JVC USB Sync */ 711 {USB_VPI(USB_VENDOR_JVC, 0x3012, 0)}, 712 /* LGE USB Sync */ 713 {USB_VPI(USB_VENDOR_LG, 0x9c01, 0)}, 714 /* Microsoft USB Sync */ 715 {USB_VPI(USB_VENDOR_MICROSOFT, 0x00ce, 0)}, 716 /* Windows Pocket PC 2002 */ 717 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0400, 0)}, 718 /* Windows Pocket PC 2002 */ 719 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0401, 0)}, 720 /* Windows Pocket PC 2002 */ 721 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0402, 0)}, 722 /* Windows Pocket PC 2002 */ 723 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0403, 0)}, 724 /* Windows Pocket PC 2002 */ 725 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0404, 0)}, 726 /* Windows Pocket PC 2002 */ 727 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0405, 0)}, 728 /* Windows Pocket PC 2002 */ 729 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0406, 0)}, 730 /* Windows Pocket PC 2002 */ 731 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0407, 0)}, 732 /* Windows Pocket PC 2002 */ 733 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0408, 0)}, 734 /* Windows Pocket PC 2002 */ 735 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0409, 0)}, 736 /* Windows Pocket PC 2002 */ 737 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040a, 0)}, 738 /* Windows Pocket PC 2002 */ 739 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040b, 0)}, 740 /* Windows Pocket PC 2002 */ 741 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040c, 0)}, 742 /* Windows Pocket PC 2002 */ 743 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040d, 0)}, 744 /* Windows Pocket PC 2002 */ 745 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040e, 0)}, 746 /* Windows Pocket PC 2002 */ 747 {USB_VPI(USB_VENDOR_MICROSOFT, 0x040f, 0)}, 748 /* Windows Pocket PC 2002 */ 749 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0410, 0)}, 750 /* Windows Pocket PC 2002 */ 751 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0411, 0)}, 752 /* Windows Pocket PC 2002 */ 753 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0412, 0)}, 754 /* Windows Pocket PC 2002 */ 755 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0413, 0)}, 756 /* Windows Pocket PC 2002 */ 757 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0414, 0)}, 758 /* Windows Pocket PC 2002 */ 759 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0415, 0)}, 760 /* Windows Pocket PC 2002 */ 761 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0416, 0)}, 762 /* Windows Pocket PC 2002 */ 763 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0417, 0)}, 764 /* Windows Pocket PC 2003 */ 765 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0432, 0)}, 766 /* Windows Pocket PC 2003 */ 767 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0433, 0)}, 768 /* Windows Pocket PC 2003 */ 769 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0434, 0)}, 770 /* Windows Pocket PC 2003 */ 771 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0435, 0)}, 772 /* Windows Pocket PC 2003 */ 773 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0436, 0)}, 774 /* Windows Pocket PC 2003 */ 775 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0437, 0)}, 776 /* Windows Pocket PC 2003 */ 777 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0438, 0)}, 778 /* Windows Pocket PC 2003 */ 779 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0439, 0)}, 780 /* Windows Pocket PC 2003 */ 781 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043a, 0)}, 782 /* Windows Pocket PC 2003 */ 783 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043b, 0)}, 784 /* Windows Pocket PC 2003 */ 785 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043c, 0)}, 786 /* Windows Pocket PC 2003 */ 787 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043d, 0)}, 788 /* Windows Pocket PC 2003 */ 789 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043e, 0)}, 790 /* Windows Pocket PC 2003 */ 791 {USB_VPI(USB_VENDOR_MICROSOFT, 0x043f, 0)}, 792 /* Windows Pocket PC 2003 */ 793 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0440, 0)}, 794 /* Windows Pocket PC 2003 */ 795 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0441, 0)}, 796 /* Windows Pocket PC 2003 */ 797 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0442, 0)}, 798 /* Windows Pocket PC 2003 */ 799 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0443, 0)}, 800 /* Windows Pocket PC 2003 */ 801 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0444, 0)}, 802 /* Windows Pocket PC 2003 */ 803 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0445, 0)}, 804 /* Windows Pocket PC 2003 */ 805 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0446, 0)}, 806 /* Windows Pocket PC 2003 */ 807 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0447, 0)}, 808 /* Windows Pocket PC 2003 */ 809 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0448, 0)}, 810 /* Windows Pocket PC 2003 */ 811 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0449, 0)}, 812 /* Windows Pocket PC 2003 */ 813 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044a, 0)}, 814 /* Windows Pocket PC 2003 */ 815 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044b, 0)}, 816 /* Windows Pocket PC 2003 */ 817 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044c, 0)}, 818 /* Windows Pocket PC 2003 */ 819 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044d, 0)}, 820 /* Windows Pocket PC 2003 */ 821 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044e, 0)}, 822 /* Windows Pocket PC 2003 */ 823 {USB_VPI(USB_VENDOR_MICROSOFT, 0x044f, 0)}, 824 /* Windows Pocket PC 2003 */ 825 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0450, 0)}, 826 /* Windows Pocket PC 2003 */ 827 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0451, 0)}, 828 /* Windows Pocket PC 2003 */ 829 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0452, 0)}, 830 /* Windows Pocket PC 2003 */ 831 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0453, 0)}, 832 /* Windows Pocket PC 2003 */ 833 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0454, 0)}, 834 /* Windows Pocket PC 2003 */ 835 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0455, 0)}, 836 /* Windows Pocket PC 2003 */ 837 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0456, 0)}, 838 /* Windows Pocket PC 2003 */ 839 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0457, 0)}, 840 /* Windows Pocket PC 2003 */ 841 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0458, 0)}, 842 /* Windows Pocket PC 2003 */ 843 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0459, 0)}, 844 /* Windows Pocket PC 2003 */ 845 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045a, 0)}, 846 /* Windows Pocket PC 2003 */ 847 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045b, 0)}, 848 /* Windows Pocket PC 2003 */ 849 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045c, 0)}, 850 /* Windows Pocket PC 2003 */ 851 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045d, 0)}, 852 /* Windows Pocket PC 2003 */ 853 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045e, 0)}, 854 /* Windows Pocket PC 2003 */ 855 {USB_VPI(USB_VENDOR_MICROSOFT, 0x045f, 0)}, 856 /* Windows Pocket PC 2003 */ 857 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0460, 0)}, 858 /* Windows Pocket PC 2003 */ 859 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0461, 0)}, 860 /* Windows Pocket PC 2003 */ 861 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0462, 0)}, 862 /* Windows Pocket PC 2003 */ 863 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0463, 0)}, 864 /* Windows Pocket PC 2003 */ 865 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0464, 0)}, 866 /* Windows Pocket PC 2003 */ 867 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0465, 0)}, 868 /* Windows Pocket PC 2003 */ 869 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0466, 0)}, 870 /* Windows Pocket PC 2003 */ 871 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0467, 0)}, 872 /* Windows Pocket PC 2003 */ 873 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0468, 0)}, 874 /* Windows Pocket PC 2003 */ 875 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0469, 0)}, 876 /* Windows Pocket PC 2003 */ 877 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046a, 0)}, 878 /* Windows Pocket PC 2003 */ 879 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046b, 0)}, 880 /* Windows Pocket PC 2003 */ 881 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046c, 0)}, 882 /* Windows Pocket PC 2003 */ 883 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046d, 0)}, 884 /* Windows Pocket PC 2003 */ 885 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046e, 0)}, 886 /* Windows Pocket PC 2003 */ 887 {USB_VPI(USB_VENDOR_MICROSOFT, 0x046f, 0)}, 888 /* Windows Pocket PC 2003 */ 889 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0470, 0)}, 890 /* Windows Pocket PC 2003 */ 891 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0471, 0)}, 892 /* Windows Pocket PC 2003 */ 893 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0472, 0)}, 894 /* Windows Pocket PC 2003 */ 895 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0473, 0)}, 896 /* Windows Pocket PC 2003 */ 897 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0474, 0)}, 898 /* Windows Pocket PC 2003 */ 899 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0475, 0)}, 900 /* Windows Pocket PC 2003 */ 901 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0476, 0)}, 902 /* Windows Pocket PC 2003 */ 903 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0477, 0)}, 904 /* Windows Pocket PC 2003 */ 905 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0478, 0)}, 906 /* Windows Pocket PC 2003 */ 907 {USB_VPI(USB_VENDOR_MICROSOFT, 0x0479, 0)}, 908 /* Windows Pocket PC 2003 */ 909 {USB_VPI(USB_VENDOR_MICROSOFT, 0x047a, 0)}, 910 /* Windows Pocket PC 2003 */ 911 {USB_VPI(USB_VENDOR_MICROSOFT, 0x047b, 0)}, 912 /* Windows Smartphone 2002 */ 913 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c8, 0)}, 914 /* Windows Smartphone 2002 */ 915 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c9, 0)}, 916 /* Windows Smartphone 2002 */ 917 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ca, 0)}, 918 /* Windows Smartphone 2002 */ 919 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cb, 0)}, 920 /* Windows Smartphone 2002 */ 921 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cc, 0)}, 922 /* Windows Smartphone 2002 */ 923 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cd, 0)}, 924 /* Windows Smartphone 2002 */ 925 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ce, 0)}, 926 /* Windows Smartphone 2003 */ 927 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d7, 0)}, 928 /* Windows Smartphone 2003 */ 929 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d8, 0)}, 930 /* Windows Smartphone 2003 */ 931 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d9, 0)}, 932 /* Windows Smartphone 2003 */ 933 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04da, 0)}, 934 /* Windows Smartphone 2003 */ 935 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04db, 0)}, 936 /* Windows Smartphone 2003 */ 937 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dc, 0)}, 938 /* Windows Smartphone 2003 */ 939 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dd, 0)}, 940 /* Windows Smartphone 2003 */ 941 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04de, 0)}, 942 /* Windows Smartphone 2003 */ 943 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04df, 0)}, 944 /* Windows Smartphone 2003 */ 945 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e0, 0)}, 946 /* Windows Smartphone 2003 */ 947 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e1, 0)}, 948 /* Windows Smartphone 2003 */ 949 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e2, 0)}, 950 /* Windows Smartphone 2003 */ 951 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e3, 0)}, 952 /* Windows Smartphone 2003 */ 953 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e4, 0)}, 954 /* Windows Smartphone 2003 */ 955 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e5, 0)}, 956 /* Windows Smartphone 2003 */ 957 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e6, 0)}, 958 /* Windows Smartphone 2003 */ 959 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e7, 0)}, 960 /* Windows Smartphone 2003 */ 961 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e8, 0)}, 962 /* Windows Smartphone 2003 */ 963 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e9, 0)}, 964 /* Windows Smartphone 2003 */ 965 {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ea, 0)}, 966 /* Motorola MPx200 Smartphone */ 967 {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4204, 0)}, 968 /* Motorola MPc GSM */ 969 {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4214, 0)}, 970 /* Motorola MPx220 Smartphone */ 971 {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4224, 0)}, 972 /* Motorola MPc CDMA */ 973 {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4234, 0)}, 974 /* Motorola MPx100 Smartphone */ 975 {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4244, 0)}, 976 /* NEC USB Sync */ 977 {USB_VPI(USB_VENDOR_NEC, 0x00d5, 0)}, 978 /* NEC USB Sync */ 979 {USB_VPI(USB_VENDOR_NEC, 0x00d6, 0)}, 980 /* NEC USB Sync */ 981 {USB_VPI(USB_VENDOR_NEC, 0x00d7, 0)}, 982 /* NEC USB Sync */ 983 {USB_VPI(USB_VENDOR_NEC, 0x8024, 0)}, 984 /* NEC USB Sync */ 985 {USB_VPI(USB_VENDOR_NEC, 0x8025, 0)}, 986 /* Panasonic USB Sync */ 987 {USB_VPI(USB_VENDOR_PANASONIC, 0x2500, 0)}, 988 /* Samsung NEXiO USB Sync */ 989 {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f00, 0)}, 990 /* Samsung NEXiO USB Sync */ 991 {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f01, 0)}, 992 /* Samsung NEXiO USB Sync */ 993 {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f02, 0)}, 994 /* Samsung NEXiO USB Sync */ 995 {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f03, 0)}, 996 /* Samsung NEXiO USB Sync */ 997 {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f04, 0)}, 998 /* Samsung MITs USB Sync */ 999 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6611, 0)}, 1000 /* Samsung MITs USB Sync */ 1001 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6613, 0)}, 1002 /* Samsung MITs USB Sync */ 1003 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6615, 0)}, 1004 /* Samsung MITs USB Sync */ 1005 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6617, 0)}, 1006 /* Samsung MITs USB Sync */ 1007 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6619, 0)}, 1008 /* Samsung MITs USB Sync */ 1009 {USB_VPI(USB_VENDOR_SAMSUNG, 0x661b, 0)}, 1010 /* Samsung MITs USB Sync */ 1011 {USB_VPI(USB_VENDOR_SAMSUNG, 0x662e, 0)}, 1012 /* Samsung MITs USB Sync */ 1013 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6630, 0)}, 1014 /* Samsung MITs USB Sync */ 1015 {USB_VPI(USB_VENDOR_SAMSUNG, 0x6632, 0)}, 1016 /* SHARP WS003SH USB Modem */ 1017 {USB_VPI(USB_VENDOR_SHARP, 0x9102, 0)}, 1018 /* SHARP WS004SH USB Modem */ 1019 {USB_VPI(USB_VENDOR_SHARP, 0x9121, 0)}, 1020 /* SHARP S01SH USB Modem */ 1021 {USB_VPI(USB_VENDOR_SHARP, 0x9151, 0)}, 1022/**/ 1023 {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ES, 0)}, 1024 /* Symbol USB Sync */ 1025 {USB_VPI(USB_VENDOR_SYMBOL, 0x2000, 0)}, 1026 /* Symbol USB Sync 0x2001 */ 1027 {USB_VPI(USB_VENDOR_SYMBOL, 0x2001, 0)}, 1028 /* Symbol USB Sync 0x2002 */ 1029 {USB_VPI(USB_VENDOR_SYMBOL, 0x2002, 0)}, 1030 /* Symbol USB Sync 0x2003 */ 1031 {USB_VPI(USB_VENDOR_SYMBOL, 0x2003, 0)}, 1032 /* Symbol USB Sync 0x2004 */ 1033 {USB_VPI(USB_VENDOR_SYMBOL, 0x2004, 0)}, 1034 /* Symbol USB Sync 0x2005 */ 1035 {USB_VPI(USB_VENDOR_SYMBOL, 0x2005, 0)}, 1036 /* Symbol USB Sync 0x2006 */ 1037 {USB_VPI(USB_VENDOR_SYMBOL, 0x2006, 0)}, 1038 /* Symbol USB Sync 0x2007 */ 1039 {USB_VPI(USB_VENDOR_SYMBOL, 0x2007, 0)}, 1040 /* Symbol USB Sync 0x2008 */ 1041 {USB_VPI(USB_VENDOR_SYMBOL, 0x2008, 0)}, 1042 /* Symbol USB Sync 0x2009 */ 1043 {USB_VPI(USB_VENDOR_SYMBOL, 0x2009, 0)}, 1044 /* Symbol USB Sync 0x200a */ 1045 {USB_VPI(USB_VENDOR_SYMBOL, 0x200a, 0)}, 1046 /* TOSHIBA USB Sync 0700 */ 1047 {USB_VPI(USB_VENDOR_TOSHIBA, 0x0700, 0)}, 1048 /* TOSHIBA Pocket PC e310 */ 1049 {USB_VPI(USB_VENDOR_TOSHIBA, 0x0705, 0)}, 1050 /* TOSHIBA Pocket PC e330 Series */ 1051 {USB_VPI(USB_VENDOR_TOSHIBA, 0x0707, 0)}, 1052 /* TOSHIBA Pocket PC e350Series */ 1053 {USB_VPI(USB_VENDOR_TOSHIBA, 0x0708, 0)}, 1054 /* TOSHIBA Pocket PC e750 Series */ 1055 {USB_VPI(USB_VENDOR_TOSHIBA, 0x0709, 0)}, 1056 /* TOSHIBA Pocket PC e400 Series */ 1057 {USB_VPI(USB_VENDOR_TOSHIBA, 0x070a, 0)}, 1058 /* TOSHIBA Pocket PC e800 Series */ 1059 {USB_VPI(USB_VENDOR_TOSHIBA, 0x070b, 0)}, 1060 /* TOSHIBA Pocket PC e740 */ 1061 {USB_VPI(USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_POCKETPC_E740, 0)}, 1062 /* ViewSonic Color Pocket PC V35 */ 1063 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x0ed9, 0)}, 1064 /* ViewSonic Color Pocket PC V36 */ 1065 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1527, 0)}, 1066 /* ViewSonic Color Pocket PC V37 */ 1067 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1529, 0)}, 1068 /* ViewSonic Color Pocket PC V38 */ 1069 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152b, 0)}, 1070 /* ViewSonic Pocket PC */ 1071 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152e, 0)}, 1072 /* ViewSonic Communicator Pocket PC */ 1073 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1921, 0)}, 1074 /* ViewSonic Smartphone */ 1075 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1922, 0)}, 1076 /* ViewSonic Pocket PC V30 */ 1077 {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1923, 0)}, 1078}; 1079 1080static device_method_t uipaq_methods[] = { 1081 DEVMETHOD(device_probe, uipaq_probe), 1082 DEVMETHOD(device_attach, uipaq_attach), 1083 DEVMETHOD(device_detach, uipaq_detach), 1084 {0, 0} 1085}; 1086 1087static devclass_t uipaq_devclass; 1088 1089static driver_t uipaq_driver = { 1090 .name = "uipaq", 1091 .methods = uipaq_methods, 1092 .size = sizeof(struct uipaq_softc), 1093}; 1094 1095DRIVER_MODULE(uipaq, ushub, uipaq_driver, uipaq_devclass, NULL, 0); 1096MODULE_DEPEND(uipaq, usb2_serial, 1, 1, 1); 1097MODULE_DEPEND(uipaq, usb2_core, 1, 1, 1); 1098 1099static int 1100uipaq_probe(device_t dev) 1101{ 1102 struct usb2_attach_arg *uaa = device_get_ivars(dev); 1103 1104 if (uaa->usb2_mode != USB_MODE_HOST) { 1105 return (ENXIO); 1106 } 1107 if (uaa->info.bConfigIndex != UIPAQ_CONFIG_INDEX) { 1108 return (ENXIO); 1109 } 1110 if (uaa->info.bIfaceIndex != UIPAQ_IFACE_INDEX) { 1111 return (ENXIO); 1112 } 1113 return (usb2_lookup_id_by_uaa(uipaq_devs, sizeof(uipaq_devs), uaa)); 1114} 1115 1116static int 1117uipaq_attach(device_t dev) 1118{ 1119 struct usb2_device_request req; 1120 struct usb2_attach_arg *uaa = device_get_ivars(dev); 1121 struct uipaq_softc *sc = device_get_softc(dev); 1122 int error; 1123 uint8_t iface_index; 1124 uint8_t i; 1125 1126 if (sc == NULL) { 1127 return (ENOMEM); 1128 } 1129 sc->sc_udev = uaa->device; 1130 1131 device_set_usb2_desc(dev); 1132 1133 /* 1134 * Send magic bytes, cribbed from Linux ipaq driver that 1135 * claims to have sniffed them from Win98. Wait for driver to 1136 * become ready on device side? 1137 */ 1138 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1139 req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1140 USETW(req.wValue, UCDC_LINE_DTR); 1141 USETW(req.wIndex, 0x0); 1142 USETW(req.wLength, 0); 1143 for (i = 0; i != 64; i++) { 1144 error = 1145 usb2_do_request_flags(uaa->device, NULL, &req, 1146 NULL, 0, NULL, 100); 1147 if (error == 0) 1148 break; 1149 usb2_pause_mtx(NULL, 100); 1150 } 1151 1152 iface_index = UIPAQ_IFACE_INDEX; 1153 error = usb2_transfer_setup(uaa->device, &iface_index, 1154 sc->sc_xfer_data, uipaq_config_data, 1155 UIPAQ_N_DATA_TRANSFER, sc, &Giant); 1156 1157 if (error) { 1158 goto detach; 1159 } 1160 /* clear stall at first run */ 1161 sc->sc_flag |= (UIPAQ_FLAG_READ_STALL | 1162 UIPAQ_FLAG_WRITE_STALL); 1163 1164 error = usb2_com_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, 1165 &uipaq_callback, &Giant); 1166 if (error) { 1167 goto detach; 1168 } 1169 return (0); 1170 1171detach: 1172 uipaq_detach(dev); 1173 return (ENXIO); 1174} 1175 1176int 1177uipaq_detach(device_t dev) 1178{ 1179 struct uipaq_softc *sc = device_get_softc(dev); 1180 1181 usb2_com_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1); 1182 1183 usb2_transfer_unsetup(sc->sc_xfer_data, UIPAQ_N_DATA_TRANSFER); 1184 1185 return (0); 1186} 1187 1188static void 1189uipaq_start_read(struct usb2_com_softc *ucom) 1190{ 1191 struct uipaq_softc *sc = ucom->sc_parent; 1192 1193 /* start read endpoint */ 1194 usb2_transfer_start(sc->sc_xfer_data[1]); 1195 return; 1196} 1197 1198static void 1199uipaq_stop_read(struct usb2_com_softc *ucom) 1200{ 1201 struct uipaq_softc *sc = ucom->sc_parent; 1202 1203 /* stop read endpoint */ 1204 usb2_transfer_stop(sc->sc_xfer_data[3]); 1205 usb2_transfer_stop(sc->sc_xfer_data[1]); 1206 return; 1207} 1208 1209static void 1210uipaq_start_write(struct usb2_com_softc *ucom) 1211{ 1212 struct uipaq_softc *sc = ucom->sc_parent; 1213 1214 usb2_transfer_start(sc->sc_xfer_data[0]); 1215 return; 1216} 1217 1218static void 1219uipaq_stop_write(struct usb2_com_softc *ucom) 1220{ 1221 struct uipaq_softc *sc = ucom->sc_parent; 1222 1223 usb2_transfer_stop(sc->sc_xfer_data[2]); 1224 usb2_transfer_stop(sc->sc_xfer_data[0]); 1225 return; 1226} 1227 1228static void 1229uipaq_cfg_do_request(struct uipaq_softc *sc, struct usb2_device_request *req, 1230 void *data) 1231{ 1232 uint16_t length; 1233 usb2_error_t err; 1234 1235 if (usb2_com_cfg_is_gone(&sc->sc_ucom)) { 1236 goto error; 1237 } 1238 err = usb2_do_request(sc->sc_udev, &Giant, req, data); 1239 1240 if (err) { 1241 1242 DPRINTFN(0, "device request failed, err=%s " 1243 "(ignored)\n", usb2_errstr(err)); 1244 1245error: 1246 length = UGETW(req->wLength); 1247 1248 if ((req->bmRequestType & UT_READ) && length) { 1249 bzero(data, length); 1250 } 1251 } 1252 return; 1253} 1254 1255static void 1256uipaq_cfg_set_dtr(struct usb2_com_softc *ucom, uint8_t onoff) 1257{ 1258 struct uipaq_softc *sc = ucom->sc_parent; 1259 struct usb2_device_request req; 1260 1261 DPRINTF("onoff=%d\n", onoff); 1262 1263 if (onoff) 1264 sc->sc_line |= UCDC_LINE_DTR; 1265 else 1266 sc->sc_line &= ~UCDC_LINE_DTR; 1267 1268 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1269 req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1270 USETW(req.wValue, sc->sc_line); 1271 req.wIndex[0] = UIPAQ_IFACE_INDEX; 1272 req.wIndex[1] = 0; 1273 USETW(req.wLength, 0); 1274 1275 uipaq_cfg_do_request(sc, &req, NULL); 1276 return; 1277} 1278 1279static void 1280uipaq_cfg_set_rts(struct usb2_com_softc *ucom, uint8_t onoff) 1281{ 1282 struct uipaq_softc *sc = ucom->sc_parent; 1283 struct usb2_device_request req; 1284 1285 DPRINTF("onoff=%d\n", onoff); 1286 1287 if (onoff) 1288 sc->sc_line |= UCDC_LINE_RTS; 1289 else 1290 sc->sc_line &= ~UCDC_LINE_RTS; 1291 1292 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1293 req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1294 USETW(req.wValue, sc->sc_line); 1295 req.wIndex[0] = UIPAQ_IFACE_INDEX; 1296 req.wIndex[1] = 0; 1297 USETW(req.wLength, 0); 1298 1299 uipaq_cfg_do_request(sc, &req, NULL); 1300 return; 1301} 1302 1303static void 1304uipaq_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff) 1305{ 1306 struct uipaq_softc *sc = ucom->sc_parent; 1307 struct usb2_device_request req; 1308 uint16_t temp; 1309 1310 temp = onoff ? UCDC_BREAK_ON : UCDC_BREAK_OFF; 1311 1312 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1313 req.bRequest = UCDC_SEND_BREAK; 1314 USETW(req.wValue, temp); 1315 req.wIndex[0] = UIPAQ_IFACE_INDEX; 1316 req.wIndex[1] = 0; 1317 USETW(req.wLength, 0); 1318 1319 uipaq_cfg_do_request(sc, &req, NULL); 1320 return; 1321} 1322 1323static void 1324uipaq_write_callback(struct usb2_xfer *xfer) 1325{ 1326 struct uipaq_softc *sc = xfer->priv_sc; 1327 uint32_t actlen; 1328 1329 switch (USB_GET_STATE(xfer)) { 1330 case USB_ST_SETUP: 1331 case USB_ST_TRANSFERRED: 1332 if (sc->sc_flag & UIPAQ_FLAG_WRITE_STALL) { 1333 usb2_transfer_start(sc->sc_xfer_data[2]); 1334 return; 1335 } 1336 if (usb2_com_get_data(&sc->sc_ucom, xfer->frbuffers, 0, 1337 UIPAQ_BUF_SIZE, &actlen)) { 1338 1339 xfer->frlengths[0] = actlen; 1340 usb2_start_hardware(xfer); 1341 } 1342 return; 1343 1344 default: /* Error */ 1345 if (xfer->error != USB_ERR_CANCELLED) { 1346 sc->sc_flag |= UIPAQ_FLAG_WRITE_STALL; 1347 usb2_transfer_start(sc->sc_xfer_data[2]); 1348 } 1349 return; 1350 1351 } 1352} 1353 1354static void 1355uipaq_write_clear_stall_callback(struct usb2_xfer *xfer) 1356{ 1357 struct uipaq_softc *sc = xfer->priv_sc; 1358 struct usb2_xfer *xfer_other = sc->sc_xfer_data[0]; 1359 1360 if (usb2_clear_stall_callback(xfer, xfer_other)) { 1361 DPRINTF("stall cleared\n"); 1362 sc->sc_flag &= ~UIPAQ_FLAG_WRITE_STALL; 1363 usb2_transfer_start(xfer_other); 1364 } 1365 return; 1366} 1367 1368static void 1369uipaq_read_callback(struct usb2_xfer *xfer) 1370{ 1371 struct uipaq_softc *sc = xfer->priv_sc; 1372 1373 switch (USB_GET_STATE(xfer)) { 1374 case USB_ST_TRANSFERRED: 1375 usb2_com_put_data(&sc->sc_ucom, xfer->frbuffers, 0, 1376 xfer->actlen); 1377 1378 case USB_ST_SETUP: 1379 if (sc->sc_flag & UIPAQ_FLAG_READ_STALL) { 1380 usb2_transfer_start(sc->sc_xfer_data[3]); 1381 } else { 1382 xfer->frlengths[0] = xfer->max_data_length; 1383 usb2_start_hardware(xfer); 1384 } 1385 return; 1386 1387 default: /* Error */ 1388 if (xfer->error != USB_ERR_CANCELLED) { 1389 sc->sc_flag |= UIPAQ_FLAG_READ_STALL; 1390 usb2_transfer_start(sc->sc_xfer_data[3]); 1391 } 1392 return; 1393 } 1394} 1395 1396static void 1397uipaq_read_clear_stall_callback(struct usb2_xfer *xfer) 1398{ 1399 struct uipaq_softc *sc = xfer->priv_sc; 1400 struct usb2_xfer *xfer_other = sc->sc_xfer_data[1]; 1401 1402 if (usb2_clear_stall_callback(xfer, xfer_other)) { 1403 DPRINTF("stall cleared\n"); 1404 sc->sc_flag &= ~UIPAQ_FLAG_READ_STALL; 1405 usb2_transfer_start(xfer_other); 1406 } 1407 return; 1408} 1409