uipaq.c revision 194677
1184610Salfred/* $NetBSD: uipaq.c,v 1.4 2006/11/16 01:33:27 christos Exp $ */ 2184610Salfred/* $OpenBSD: uipaq.c,v 1.1 2005/06/17 23:50:33 deraadt Exp $ */ 3184610Salfred 4184610Salfred/* 5184610Salfred * Copyright (c) 2000-2005 The NetBSD Foundation, Inc. 6184610Salfred * All rights reserved. 7184610Salfred * 8184610Salfred * This code is derived from software contributed to The NetBSD Foundation 9184610Salfred * by Lennart Augustsson (lennart@augustsson.net) at 10184610Salfred * Carlstedt Research & Technology. 11184610Salfred * 12184610Salfred * Redistribution and use in source and binary forms, with or without 13184610Salfred * modification, are permitted provided that the following conditions 14184610Salfred * are met: 15184610Salfred * 1. Redistributions of source code must retain the above copyright 16184610Salfred * notice, this list of conditions and the following disclaimer. 17184610Salfred * 2. Redistributions in binary form must reproduce the above copyright 18184610Salfred * notice, this list of conditions and the following disclaimer in the 19184610Salfred * documentation and/or other materials provided with the distribution. 20184610Salfred * 3. All advertising materials mentioning features or use of this software 21184610Salfred * must display the following acknowledgement: 22184610Salfred * This product includes software developed by the NetBSD 23184610Salfred * Foundation, Inc. and its contributors. 24184610Salfred * 4. Neither the name of The NetBSD Foundation nor the names of its 25184610Salfred * contributors may be used to endorse or promote products derived 26184610Salfred * from this software without specific prior written permission. 27184610Salfred * 28184610Salfred * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 29184610Salfred * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 30184610Salfred * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 31184610Salfred * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 32184610Salfred * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 33184610Salfred * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 34184610Salfred * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 35184610Salfred * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 36184610Salfred * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 37184610Salfred * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38184610Salfred * POSSIBILITY OF SUCH DAMAGE. 39184610Salfred */ 40184610Salfred 41184610Salfred/* 42184610Salfred * iPAQ driver 43184610Salfred * 44184610Salfred * 19 July 2003: Incorporated changes suggested by Sam Lawrance from 45184610Salfred * the uppc module 46184610Salfred * 47184610Salfred * 48184610Salfred * Contact isis@cs.umd.edu if you have any questions/comments about this driver 49184610Salfred */ 50184610Salfred 51184610Salfred#include <sys/cdefs.h> 52184610Salfred__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uipaq.c 194677 2009-06-23 02:19:59Z thompsa $"); 53184610Salfred 54194677Sthompsa#include <sys/stdint.h> 55194677Sthompsa#include <sys/stddef.h> 56194677Sthompsa#include <sys/param.h> 57194677Sthompsa#include <sys/queue.h> 58194677Sthompsa#include <sys/types.h> 59194677Sthompsa#include <sys/systm.h> 60194677Sthompsa#include <sys/kernel.h> 61194677Sthompsa#include <sys/bus.h> 62194677Sthompsa#include <sys/linker_set.h> 63194677Sthompsa#include <sys/module.h> 64194677Sthompsa#include <sys/lock.h> 65194677Sthompsa#include <sys/mutex.h> 66194677Sthompsa#include <sys/condvar.h> 67194677Sthompsa#include <sys/sysctl.h> 68194677Sthompsa#include <sys/sx.h> 69194677Sthompsa#include <sys/unistd.h> 70194677Sthompsa#include <sys/callout.h> 71194677Sthompsa#include <sys/malloc.h> 72194677Sthompsa#include <sys/priv.h> 73194677Sthompsa 74188942Sthompsa#include <dev/usb/usb.h> 75194677Sthompsa#include <dev/usb/usbdi.h> 76194677Sthompsa#include <dev/usb/usbdi_util.h> 77188942Sthompsa#include <dev/usb/usb_cdc.h> 78194677Sthompsa#include "usbdevs.h" 79184610Salfred 80194228Sthompsa#define USB_DEBUG_VAR usb_debug 81188942Sthompsa#include <dev/usb/usb_debug.h> 82188942Sthompsa#include <dev/usb/usb_process.h> 83184610Salfred 84188942Sthompsa#include <dev/usb/serial/usb_serial.h> 85184610Salfred 86184610Salfred#define UIPAQ_CONFIG_INDEX 0 /* config number 1 */ 87184610Salfred#define UIPAQ_IFACE_INDEX 0 88184610Salfred 89184610Salfred#define UIPAQ_BUF_SIZE 1024 90184610Salfred 91187259Sthompsaenum { 92187259Sthompsa UIPAQ_BULK_DT_WR, 93187259Sthompsa UIPAQ_BULK_DT_RD, 94188413Sthompsa UIPAQ_N_TRANSFER, 95187259Sthompsa}; 96187259Sthompsa 97184610Salfredstruct uipaq_softc { 98192984Sthompsa struct ucom_super_softc sc_super_ucom; 99192984Sthompsa struct ucom_softc sc_ucom; 100184610Salfred 101192984Sthompsa struct usb_xfer *sc_xfer[UIPAQ_N_TRANSFER]; 102192984Sthompsa struct usb_device *sc_udev; 103189265Sthompsa struct mtx sc_mtx; 104184610Salfred 105184610Salfred uint16_t sc_line; 106184610Salfred 107184610Salfred uint8_t sc_lsr; /* local status register */ 108184610Salfred uint8_t sc_msr; /* modem status register */ 109184610Salfred}; 110184610Salfred 111184610Salfredstatic device_probe_t uipaq_probe; 112184610Salfredstatic device_attach_t uipaq_attach; 113184610Salfredstatic device_detach_t uipaq_detach; 114184610Salfred 115193045Sthompsastatic usb_callback_t uipaq_write_callback; 116193045Sthompsastatic usb_callback_t uipaq_read_callback; 117184610Salfred 118192984Sthompsastatic void uipaq_start_read(struct ucom_softc *); 119192984Sthompsastatic void uipaq_stop_read(struct ucom_softc *); 120192984Sthompsastatic void uipaq_start_write(struct ucom_softc *); 121192984Sthompsastatic void uipaq_stop_write(struct ucom_softc *); 122192984Sthompsastatic void uipaq_cfg_set_dtr(struct ucom_softc *, uint8_t); 123192984Sthompsastatic void uipaq_cfg_set_rts(struct ucom_softc *, uint8_t); 124192984Sthompsastatic void uipaq_cfg_set_break(struct ucom_softc *, uint8_t); 125184610Salfred 126192984Sthompsastatic const struct usb_config uipaq_config_data[UIPAQ_N_TRANSFER] = { 127184610Salfred 128187259Sthompsa [UIPAQ_BULK_DT_WR] = { 129184610Salfred .type = UE_BULK, 130184610Salfred .endpoint = UE_ADDR_ANY, 131184610Salfred .direction = UE_DIR_OUT, 132190734Sthompsa .bufsize = UIPAQ_BUF_SIZE, 133190734Sthompsa .flags = {.pipe_bof = 1,.force_short_xfer = 1,}, 134190734Sthompsa .callback = &uipaq_write_callback, 135184610Salfred }, 136184610Salfred 137187259Sthompsa [UIPAQ_BULK_DT_RD] = { 138184610Salfred .type = UE_BULK, 139184610Salfred .endpoint = UE_ADDR_ANY, 140184610Salfred .direction = UE_DIR_IN, 141190734Sthompsa .bufsize = UIPAQ_BUF_SIZE, 142190734Sthompsa .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, 143190734Sthompsa .callback = &uipaq_read_callback, 144184610Salfred }, 145184610Salfred}; 146184610Salfred 147192984Sthompsastatic const struct ucom_callback uipaq_callback = { 148194228Sthompsa .ucom_cfg_set_dtr = &uipaq_cfg_set_dtr, 149194228Sthompsa .ucom_cfg_set_rts = &uipaq_cfg_set_rts, 150194228Sthompsa .ucom_cfg_set_break = &uipaq_cfg_set_break, 151194228Sthompsa .ucom_start_read = &uipaq_start_read, 152194228Sthompsa .ucom_stop_read = &uipaq_stop_read, 153194228Sthompsa .ucom_start_write = &uipaq_start_write, 154194228Sthompsa .ucom_stop_write = &uipaq_stop_write, 155184610Salfred}; 156184610Salfred 157184610Salfred/* 158184610Salfred * Much of this list is generated from lists of other drivers that 159184610Salfred * support the same hardware. Numeric values are used where no usbdevs 160184610Salfred * entries exist. 161184610Salfred */ 162192984Sthompsastatic const struct usb_device_id uipaq_devs[] = { 163184610Salfred /* Socket USB Sync */ 164184610Salfred {USB_VPI(0x0104, 0x00be, 0)}, 165184610Salfred /* USB Sync 0301 */ 166184610Salfred {USB_VPI(0x04ad, 0x0301, 0)}, 167184610Salfred /* USB Sync 0302 */ 168184610Salfred {USB_VPI(0x04ad, 0x0302, 0)}, 169184610Salfred /* USB Sync 0303 */ 170184610Salfred {USB_VPI(0x04ad, 0x0303, 0)}, 171184610Salfred /* GPS Pocket PC USB Sync */ 172184610Salfred {USB_VPI(0x04ad, 0x0306, 0)}, 173184610Salfred /* HHP PDT */ 174184610Salfred {USB_VPI(0x0536, 0x01a0, 0)}, 175184610Salfred /* Intermec Mobile Computer */ 176184610Salfred {USB_VPI(0x067e, 0x1001, 0)}, 177184610Salfred /* Linkup Systems USB Sync */ 178184610Salfred {USB_VPI(0x094b, 0x0001, 0)}, 179184610Salfred /* BCOM USB Sync 0065 */ 180184610Salfred {USB_VPI(0x0960, 0x0065, 0)}, 181184610Salfred /* BCOM USB Sync 0066 */ 182184610Salfred {USB_VPI(0x0960, 0x0066, 0)}, 183184610Salfred /* BCOM USB Sync 0067 */ 184184610Salfred {USB_VPI(0x0960, 0x0067, 0)}, 185184610Salfred /* Portatec USB Sync */ 186184610Salfred {USB_VPI(0x0961, 0x0010, 0)}, 187184610Salfred /* Trimble GeoExplorer */ 188184610Salfred {USB_VPI(0x099e, 0x0052, 0)}, 189184610Salfred /* TDS Data Collector */ 190184610Salfred {USB_VPI(0x099e, 0x4000, 0)}, 191184610Salfred /* Motorola iDEN Smartphone */ 192184610Salfred {USB_VPI(0x0c44, 0x03a2, 0)}, 193184610Salfred /* Cesscom Luxian Series */ 194184610Salfred {USB_VPI(0x0c8e, 0x6000, 0)}, 195184610Salfred /* Motorola PowerPad Pocket PCDevice */ 196184610Salfred {USB_VPI(0x0cad, 0x9001, 0)}, 197184610Salfred /* Freedom Scientific USB Sync */ 198184610Salfred {USB_VPI(0x0f4e, 0x0200, 0)}, 199184610Salfred /* Cyberbank USB Sync */ 200184610Salfred {USB_VPI(0x0f98, 0x0201, 0)}, 201184610Salfred /* Wistron USB Sync */ 202184610Salfred {USB_VPI(0x0fb8, 0x3001, 0)}, 203184610Salfred /* Wistron USB Sync */ 204184610Salfred {USB_VPI(0x0fb8, 0x3002, 0)}, 205184610Salfred /* Wistron USB Sync */ 206184610Salfred {USB_VPI(0x0fb8, 0x3003, 0)}, 207184610Salfred /* Wistron USB Sync */ 208184610Salfred {USB_VPI(0x0fb8, 0x4001, 0)}, 209184610Salfred /* E-TEN USB Sync */ 210184610Salfred {USB_VPI(0x1066, 0x00ce, 0)}, 211184610Salfred /* E-TEN P3XX Pocket PC */ 212184610Salfred {USB_VPI(0x1066, 0x0300, 0)}, 213184610Salfred /* E-TEN P5XX Pocket PC */ 214184610Salfred {USB_VPI(0x1066, 0x0500, 0)}, 215184610Salfred /* E-TEN P6XX Pocket PC */ 216184610Salfred {USB_VPI(0x1066, 0x0600, 0)}, 217184610Salfred /* E-TEN P7XX Pocket PC */ 218184610Salfred {USB_VPI(0x1066, 0x0700, 0)}, 219184610Salfred /* Psion Teklogix Sync 753x */ 220184610Salfred {USB_VPI(0x1114, 0x0001, 0)}, 221184610Salfred /* Psion Teklogix Sync netBookPro */ 222184610Salfred {USB_VPI(0x1114, 0x0004, 0)}, 223184610Salfred /* Psion Teklogix Sync 7525 */ 224184610Salfred {USB_VPI(0x1114, 0x0006, 0)}, 225184610Salfred /* VES USB Sync */ 226184610Salfred {USB_VPI(0x1182, 0x1388, 0)}, 227184610Salfred /* Rugged Pocket PC 2003 */ 228184610Salfred {USB_VPI(0x11d9, 0x1002, 0)}, 229184610Salfred /* Rugged Pocket PC 2003 */ 230184610Salfred {USB_VPI(0x11d9, 0x1003, 0)}, 231184610Salfred /* USB Sync 03 */ 232184610Salfred {USB_VPI(0x1231, 0xce01, 0)}, 233184610Salfred /* USB Sync 03 */ 234184610Salfred {USB_VPI(0x1231, 0xce02, 0)}, 235184610Salfred /* Mio DigiWalker PPC StrongARM */ 236184610Salfred {USB_VPI(0x3340, 0x011c, 0)}, 237184610Salfred /* Mio DigiWalker 338 */ 238184610Salfred {USB_VPI(0x3340, 0x0326, 0)}, 239184610Salfred /* Mio DigiWalker 338 */ 240184610Salfred {USB_VPI(0x3340, 0x0426, 0)}, 241184610Salfred /* Mio DigiWalker USB Sync */ 242184610Salfred {USB_VPI(0x3340, 0x043a, 0)}, 243184610Salfred /* MiTAC USB Sync 528 */ 244184610Salfred {USB_VPI(0x3340, 0x051c, 0)}, 245184610Salfred /* Mio DigiWalker SmartPhone USB Sync */ 246184610Salfred {USB_VPI(0x3340, 0x053a, 0)}, 247184610Salfred /* MiTAC USB Sync */ 248184610Salfred {USB_VPI(0x3340, 0x071c, 0)}, 249184610Salfred /* Generic PPC StrongARM */ 250184610Salfred {USB_VPI(0x3340, 0x0b1c, 0)}, 251184610Salfred /* Generic PPC USB Sync */ 252184610Salfred {USB_VPI(0x3340, 0x0e3a, 0)}, 253184610Salfred /* Itautec USB Sync */ 254184610Salfred {USB_VPI(0x3340, 0x0f1c, 0)}, 255184610Salfred /* Generic SmartPhone USB Sync */ 256184610Salfred {USB_VPI(0x3340, 0x0f3a, 0)}, 257184610Salfred /* Itautec USB Sync */ 258184610Salfred {USB_VPI(0x3340, 0x1326, 0)}, 259184610Salfred /* YAKUMO USB Sync */ 260184610Salfred {USB_VPI(0x3340, 0x191c, 0)}, 261184610Salfred /* Vobis USB Sync */ 262184610Salfred {USB_VPI(0x3340, 0x2326, 0)}, 263184610Salfred /* MEDION Winodws Moble USB Sync */ 264184610Salfred {USB_VPI(0x3340, 0x3326, 0)}, 265184610Salfred /* Legend USB Sync */ 266184610Salfred {USB_VPI(0x3708, 0x20ce, 0)}, 267184610Salfred /* Lenovo USB Sync */ 268184610Salfred {USB_VPI(0x3708, 0x21ce, 0)}, 269184610Salfred /* Mobile Media Technology USB Sync */ 270184610Salfred {USB_VPI(0x4113, 0x0210, 0)}, 271184610Salfred /* Mobile Media Technology USB Sync */ 272184610Salfred {USB_VPI(0x4113, 0x0211, 0)}, 273184610Salfred /* Mobile Media Technology USB Sync */ 274184610Salfred {USB_VPI(0x4113, 0x0400, 0)}, 275184610Salfred /* Mobile Media Technology USB Sync */ 276184610Salfred {USB_VPI(0x4113, 0x0410, 0)}, 277184610Salfred /* Smartphone */ 278184610Salfred {USB_VPI(0x4505, 0x0010, 0)}, 279184610Salfred /* SAGEM Wireless Assistant */ 280184610Salfred {USB_VPI(0x5e04, 0xce00, 0)}, 281184610Salfred /* c10 Series */ 282184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x1631, 0)}, 283184610Salfred /* c20 Series */ 284184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x1632, 0)}, 285184610Salfred /* Acer n10 Handheld USB Sync */ 286184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e1, 0)}, 287184610Salfred /* Acer n20 Handheld USB Sync */ 288184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e2, 0)}, 289184610Salfred /* Acer n30 Handheld USB Sync */ 290184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e3, 0)}, 291184610Salfred /* ASUS USB Sync */ 292184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4200, 0)}, 293184610Salfred /* ASUS USB Sync */ 294184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4201, 0)}, 295184610Salfred /* ASUS USB Sync */ 296184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4202, 0)}, 297184610Salfred /* ASUS USB Sync */ 298184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x9200, 0)}, 299184610Salfred /* ASUS USB Sync */ 300184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x9202, 0)}, 301184610Salfred /**/ 302184610Salfred {USB_VPI(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P535, 0)}, 303184610Salfred /* CASIO USB Sync 2001 */ 304184610Salfred {USB_VPI(USB_VENDOR_CASIO, 0x2001, 0)}, 305184610Salfred /* CASIO USB Sync 2003 */ 306184610Salfred {USB_VPI(USB_VENDOR_CASIO, 0x2003, 0)}, 307184610Salfred /**/ 308184610Salfred {USB_VPI(USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300, 0)}, 309184610Salfred /* MyGuide 7000 XL USB Sync */ 310184610Salfred {USB_VPI(USB_VENDOR_COMPAL, 0x0531, 0)}, 311184610Salfred /* Compaq iPAQ USB Sync */ 312184610Salfred {USB_VPI(USB_VENDOR_COMPAQ, 0x0032, 0)}, 313184610Salfred /**/ 314184610Salfred {USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC, 0)}, 315184610Salfred /* Dell Axim USB Sync */ 316184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4001, 0)}, 317184610Salfred /* Dell Axim USB Sync */ 318184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4002, 0)}, 319184610Salfred /* Dell Axim USB Sync */ 320184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4003, 0)}, 321184610Salfred /* Dell Axim USB Sync */ 322184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4004, 0)}, 323184610Salfred /* Dell Axim USB Sync */ 324184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4005, 0)}, 325184610Salfred /* Dell Axim USB Sync */ 326184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4006, 0)}, 327184610Salfred /* Dell Axim USB Sync */ 328184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4007, 0)}, 329184610Salfred /* Dell Axim USB Sync */ 330184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4008, 0)}, 331184610Salfred /* Dell Axim USB Sync */ 332184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4009, 0)}, 333184610Salfred /* Fujitsu Siemens Computers USB Sync */ 334184610Salfred {USB_VPI(USB_VENDOR_FSC, 0x1001, 0)}, 335184610Salfred /* FUJITSU USB Sync */ 336184610Salfred {USB_VPI(USB_VENDOR_FUJITSU, 0x1058, 0)}, 337184610Salfred /* FUJITSU USB Sync */ 338184610Salfred {USB_VPI(USB_VENDOR_FUJITSU, 0x1079, 0)}, 339184610Salfred /* Askey USB Sync */ 340184610Salfred {USB_VPI(USB_VENDOR_GIGASET, 0x0601, 0)}, 341184610Salfred /* Hitachi USB Sync */ 342184610Salfred {USB_VPI(USB_VENDOR_HITACHI, 0x0014, 0)}, 343184610Salfred /* HP USB Sync 1612 */ 344184610Salfred {USB_VPI(USB_VENDOR_HP, 0x1216, 0)}, 345184610Salfred /* HP USB Sync 1620 */ 346184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2016, 0)}, 347184610Salfred /* HP USB Sync 1621 */ 348184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2116, 0)}, 349184610Salfred /* HP USB Sync 1622 */ 350184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2216, 0)}, 351184610Salfred /* HP USB Sync 1630 */ 352184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3016, 0)}, 353184610Salfred /* HP USB Sync 1631 */ 354184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3116, 0)}, 355184610Salfred /* HP USB Sync 1632 */ 356184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3216, 0)}, 357184610Salfred /* HP USB Sync 1640 */ 358184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4016, 0)}, 359184610Salfred /* HP USB Sync 1641 */ 360184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4116, 0)}, 361184610Salfred /* HP USB Sync 1642 */ 362184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4216, 0)}, 363184610Salfred /* HP USB Sync 1650 */ 364184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5016, 0)}, 365184610Salfred /* HP USB Sync 1651 */ 366184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5116, 0)}, 367184610Salfred /* HP USB Sync 1652 */ 368184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5216, 0)}, 369184610Salfred /**/ 370184610Salfred {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_2215, 0)}, 371184610Salfred /**/ 372184610Salfred {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_568J, 0)}, 373184610Salfred /* HTC USB Modem */ 374184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x00cf, 0)}, 375184610Salfred /* PocketPC USB Sync */ 376184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a01, 0)}, 377184610Salfred /* PocketPC USB Sync */ 378184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a02, 0)}, 379184610Salfred /* PocketPC USB Sync */ 380184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a03, 0)}, 381184610Salfred /* PocketPC USB Sync */ 382184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a04, 0)}, 383184610Salfred /* PocketPC USB Sync */ 384184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a05, 0)}, 385184610Salfred /* PocketPC USB Sync */ 386184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a06, 0)}, 387184610Salfred /* PocketPC USB Sync */ 388184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a07, 0)}, 389184610Salfred /* PocketPC USB Sync */ 390184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a08, 0)}, 391184610Salfred /* PocketPC USB Sync */ 392184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a09, 0)}, 393184610Salfred /* PocketPC USB Sync */ 394184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0a, 0)}, 395184610Salfred /* PocketPC USB Sync */ 396184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0b, 0)}, 397184610Salfred /* PocketPC USB Sync */ 398184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0c, 0)}, 399184610Salfred /* PocketPC USB Sync */ 400184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0d, 0)}, 401184610Salfred /* PocketPC USB Sync */ 402184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0e, 0)}, 403184610Salfred /* PocketPC USB Sync */ 404184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0f, 0)}, 405184610Salfred /* PocketPC USB Sync */ 406184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a10, 0)}, 407184610Salfred /* PocketPC USB Sync */ 408184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a11, 0)}, 409184610Salfred /* PocketPC USB Sync */ 410184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a12, 0)}, 411184610Salfred /* PocketPC USB Sync */ 412184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a13, 0)}, 413184610Salfred /* PocketPC USB Sync */ 414184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a14, 0)}, 415184610Salfred /* PocketPC USB Sync */ 416184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a15, 0)}, 417184610Salfred /* PocketPC USB Sync */ 418184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a16, 0)}, 419184610Salfred /* PocketPC USB Sync */ 420184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a17, 0)}, 421184610Salfred /* PocketPC USB Sync */ 422184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a18, 0)}, 423184610Salfred /* PocketPC USB Sync */ 424184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a19, 0)}, 425184610Salfred /* PocketPC USB Sync */ 426184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1a, 0)}, 427184610Salfred /* PocketPC USB Sync */ 428184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1b, 0)}, 429184610Salfred /* PocketPC USB Sync */ 430184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1c, 0)}, 431184610Salfred /* PocketPC USB Sync */ 432184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1d, 0)}, 433184610Salfred /* PocketPC USB Sync */ 434184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1e, 0)}, 435184610Salfred /* PocketPC USB Sync */ 436184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1f, 0)}, 437184610Salfred /* PocketPC USB Sync */ 438184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a20, 0)}, 439184610Salfred /* PocketPC USB Sync */ 440184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a21, 0)}, 441184610Salfred /* PocketPC USB Sync */ 442184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a22, 0)}, 443184610Salfred /* PocketPC USB Sync */ 444184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a23, 0)}, 445184610Salfred /* PocketPC USB Sync */ 446184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a24, 0)}, 447184610Salfred /* PocketPC USB Sync */ 448184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a25, 0)}, 449184610Salfred /* PocketPC USB Sync */ 450184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a26, 0)}, 451184610Salfred /* PocketPC USB Sync */ 452184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a27, 0)}, 453184610Salfred /* PocketPC USB Sync */ 454184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a28, 0)}, 455184610Salfred /* PocketPC USB Sync */ 456184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a29, 0)}, 457184610Salfred /* PocketPC USB Sync */ 458184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2a, 0)}, 459184610Salfred /* PocketPC USB Sync */ 460184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2b, 0)}, 461184610Salfred /* PocketPC USB Sync */ 462184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2c, 0)}, 463184610Salfred /* PocketPC USB Sync */ 464184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2d, 0)}, 465184610Salfred /* PocketPC USB Sync */ 466184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2e, 0)}, 467184610Salfred /* PocketPC USB Sync */ 468184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2f, 0)}, 469184610Salfred /* PocketPC USB Sync */ 470184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a30, 0)}, 471184610Salfred /* PocketPC USB Sync */ 472184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a31, 0)}, 473184610Salfred /* PocketPC USB Sync */ 474184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a32, 0)}, 475184610Salfred /* PocketPC USB Sync */ 476184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a33, 0)}, 477184610Salfred /* PocketPC USB Sync */ 478184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a34, 0)}, 479184610Salfred /* PocketPC USB Sync */ 480184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a35, 0)}, 481184610Salfred /* PocketPC USB Sync */ 482184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a36, 0)}, 483184610Salfred /* PocketPC USB Sync */ 484184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a37, 0)}, 485184610Salfred /* PocketPC USB Sync */ 486184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a38, 0)}, 487184610Salfred /* PocketPC USB Sync */ 488184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a39, 0)}, 489184610Salfred /* PocketPC USB Sync */ 490184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3a, 0)}, 491184610Salfred /* PocketPC USB Sync */ 492184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3b, 0)}, 493184610Salfred /* PocketPC USB Sync */ 494184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3c, 0)}, 495184610Salfred /* PocketPC USB Sync */ 496184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3d, 0)}, 497184610Salfred /* PocketPC USB Sync */ 498184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3e, 0)}, 499184610Salfred /* PocketPC USB Sync */ 500184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3f, 0)}, 501184610Salfred /* PocketPC USB Sync */ 502184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a40, 0)}, 503184610Salfred /* PocketPC USB Sync */ 504184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a41, 0)}, 505184610Salfred /* PocketPC USB Sync */ 506184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a42, 0)}, 507184610Salfred /* PocketPC USB Sync */ 508184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a43, 0)}, 509184610Salfred /* PocketPC USB Sync */ 510184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a44, 0)}, 511184610Salfred /* PocketPC USB Sync */ 512184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a45, 0)}, 513184610Salfred /* PocketPC USB Sync */ 514184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a46, 0)}, 515184610Salfred /* PocketPC USB Sync */ 516184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a47, 0)}, 517184610Salfred /* PocketPC USB Sync */ 518184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a48, 0)}, 519184610Salfred /* PocketPC USB Sync */ 520184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a49, 0)}, 521184610Salfred /* PocketPC USB Sync */ 522184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4a, 0)}, 523184610Salfred /* PocketPC USB Sync */ 524184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4b, 0)}, 525184610Salfred /* PocketPC USB Sync */ 526184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4c, 0)}, 527184610Salfred /* PocketPC USB Sync */ 528184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4d, 0)}, 529184610Salfred /* PocketPC USB Sync */ 530184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4e, 0)}, 531184610Salfred /* PocketPC USB Sync */ 532184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4f, 0)}, 533184610Salfred /* HTC SmartPhone USB Sync */ 534184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a50, 0)}, 535184610Salfred /* SmartPhone USB Sync */ 536184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a52, 0)}, 537184610Salfred /* SmartPhone USB Sync */ 538184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a53, 0)}, 539184610Salfred /* SmartPhone USB Sync */ 540184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a54, 0)}, 541184610Salfred /* SmartPhone USB Sync */ 542184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a55, 0)}, 543184610Salfred /* SmartPhone USB Sync */ 544184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a56, 0)}, 545184610Salfred /* SmartPhone USB Sync */ 546184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a57, 0)}, 547184610Salfred /* SmartPhone USB Sync */ 548184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a58, 0)}, 549184610Salfred /* SmartPhone USB Sync */ 550184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a59, 0)}, 551184610Salfred /* SmartPhone USB Sync */ 552184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5a, 0)}, 553184610Salfred /* SmartPhone USB Sync */ 554184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5b, 0)}, 555184610Salfred /* SmartPhone USB Sync */ 556184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5c, 0)}, 557184610Salfred /* SmartPhone USB Sync */ 558184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5d, 0)}, 559184610Salfred /* SmartPhone USB Sync */ 560184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5e, 0)}, 561184610Salfred /* SmartPhone USB Sync */ 562184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5f, 0)}, 563184610Salfred /* SmartPhone USB Sync */ 564184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a60, 0)}, 565184610Salfred /* SmartPhone USB Sync */ 566184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a61, 0)}, 567184610Salfred /* SmartPhone USB Sync */ 568184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a62, 0)}, 569184610Salfred /* SmartPhone USB Sync */ 570184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a63, 0)}, 571184610Salfred /* SmartPhone USB Sync */ 572184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a64, 0)}, 573184610Salfred /* SmartPhone USB Sync */ 574184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a65, 0)}, 575184610Salfred /* SmartPhone USB Sync */ 576184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a66, 0)}, 577184610Salfred /* SmartPhone USB Sync */ 578184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a67, 0)}, 579184610Salfred /* SmartPhone USB Sync */ 580184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a68, 0)}, 581184610Salfred /* SmartPhone USB Sync */ 582184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a69, 0)}, 583184610Salfred /* SmartPhone USB Sync */ 584184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6a, 0)}, 585184610Salfred /* SmartPhone USB Sync */ 586184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6b, 0)}, 587184610Salfred /* SmartPhone USB Sync */ 588184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6c, 0)}, 589184610Salfred /* SmartPhone USB Sync */ 590184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6d, 0)}, 591184610Salfred /* SmartPhone USB Sync */ 592184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6e, 0)}, 593184610Salfred /* SmartPhone USB Sync */ 594184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6f, 0)}, 595184610Salfred /* SmartPhone USB Sync */ 596184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a70, 0)}, 597184610Salfred /* SmartPhone USB Sync */ 598184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a71, 0)}, 599184610Salfred /* SmartPhone USB Sync */ 600184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a72, 0)}, 601184610Salfred /* SmartPhone USB Sync */ 602184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a73, 0)}, 603184610Salfred /* SmartPhone USB Sync */ 604184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a74, 0)}, 605184610Salfred /* SmartPhone USB Sync */ 606184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a75, 0)}, 607184610Salfred /* SmartPhone USB Sync */ 608184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a76, 0)}, 609184610Salfred /* SmartPhone USB Sync */ 610184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a77, 0)}, 611184610Salfred /* SmartPhone USB Sync */ 612184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a78, 0)}, 613184610Salfred /* SmartPhone USB Sync */ 614184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a79, 0)}, 615184610Salfred /* SmartPhone USB Sync */ 616184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7a, 0)}, 617184610Salfred /* SmartPhone USB Sync */ 618184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7b, 0)}, 619184610Salfred /* SmartPhone USB Sync */ 620184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7c, 0)}, 621184610Salfred /* SmartPhone USB Sync */ 622184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7d, 0)}, 623184610Salfred /* SmartPhone USB Sync */ 624184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7e, 0)}, 625184610Salfred /* SmartPhone USB Sync */ 626184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7f, 0)}, 627184610Salfred /* SmartPhone USB Sync */ 628184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a80, 0)}, 629184610Salfred /* SmartPhone USB Sync */ 630184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a81, 0)}, 631184610Salfred /* SmartPhone USB Sync */ 632184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a82, 0)}, 633184610Salfred /* SmartPhone USB Sync */ 634184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a83, 0)}, 635184610Salfred /* SmartPhone USB Sync */ 636184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a84, 0)}, 637184610Salfred /* SmartPhone USB Sync */ 638184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a85, 0)}, 639184610Salfred /* SmartPhone USB Sync */ 640184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a86, 0)}, 641184610Salfred /* SmartPhone USB Sync */ 642184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a87, 0)}, 643184610Salfred /* SmartPhone USB Sync */ 644184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a88, 0)}, 645184610Salfred /* SmartPhone USB Sync */ 646184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a89, 0)}, 647184610Salfred /* SmartPhone USB Sync */ 648184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8a, 0)}, 649184610Salfred /* SmartPhone USB Sync */ 650184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8b, 0)}, 651184610Salfred /* SmartPhone USB Sync */ 652184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8c, 0)}, 653184610Salfred /* SmartPhone USB Sync */ 654184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8d, 0)}, 655184610Salfred /* SmartPhone USB Sync */ 656184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8e, 0)}, 657184610Salfred /* SmartPhone USB Sync */ 658184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8f, 0)}, 659184610Salfred /* SmartPhone USB Sync */ 660184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a90, 0)}, 661184610Salfred /* SmartPhone USB Sync */ 662184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a91, 0)}, 663184610Salfred /* SmartPhone USB Sync */ 664184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a92, 0)}, 665184610Salfred /* SmartPhone USB Sync */ 666184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a93, 0)}, 667184610Salfred /* SmartPhone USB Sync */ 668184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a94, 0)}, 669184610Salfred /* SmartPhone USB Sync */ 670184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a95, 0)}, 671184610Salfred /* SmartPhone USB Sync */ 672184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a96, 0)}, 673184610Salfred /* SmartPhone USB Sync */ 674184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a97, 0)}, 675184610Salfred /* SmartPhone USB Sync */ 676184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a98, 0)}, 677184610Salfred /* SmartPhone USB Sync */ 678184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a99, 0)}, 679184610Salfred /* SmartPhone USB Sync */ 680184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9a, 0)}, 681184610Salfred /* SmartPhone USB Sync */ 682184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9b, 0)}, 683184610Salfred /* SmartPhone USB Sync */ 684184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9c, 0)}, 685184610Salfred /* SmartPhone USB Sync */ 686184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9d, 0)}, 687184610Salfred /* SmartPhone USB Sync */ 688184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9e, 0)}, 689184610Salfred /* SmartPhone USB Sync */ 690184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9f, 0)}, 691184610Salfred /* "High Tech Computer Corp" */ 692184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0bce, 0)}, 693184610Salfred /**/ 694184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM, 0)}, 695184610Salfred /**/ 696184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE, 0)}, 697184610Salfred /**/ 698184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_WINMOBILE, 0)}, 699184610Salfred /* JVC USB Sync */ 700184610Salfred {USB_VPI(USB_VENDOR_JVC, 0x3011, 0)}, 701184610Salfred /* JVC USB Sync */ 702184610Salfred {USB_VPI(USB_VENDOR_JVC, 0x3012, 0)}, 703184610Salfred /* LGE USB Sync */ 704184610Salfred {USB_VPI(USB_VENDOR_LG, 0x9c01, 0)}, 705184610Salfred /* Microsoft USB Sync */ 706184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x00ce, 0)}, 707184610Salfred /* Windows Pocket PC 2002 */ 708184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0400, 0)}, 709184610Salfred /* Windows Pocket PC 2002 */ 710184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0401, 0)}, 711184610Salfred /* Windows Pocket PC 2002 */ 712184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0402, 0)}, 713184610Salfred /* Windows Pocket PC 2002 */ 714184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0403, 0)}, 715184610Salfred /* Windows Pocket PC 2002 */ 716184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0404, 0)}, 717184610Salfred /* Windows Pocket PC 2002 */ 718184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0405, 0)}, 719184610Salfred /* Windows Pocket PC 2002 */ 720184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0406, 0)}, 721184610Salfred /* Windows Pocket PC 2002 */ 722184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0407, 0)}, 723184610Salfred /* Windows Pocket PC 2002 */ 724184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0408, 0)}, 725184610Salfred /* Windows Pocket PC 2002 */ 726184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0409, 0)}, 727184610Salfred /* Windows Pocket PC 2002 */ 728184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040a, 0)}, 729184610Salfred /* Windows Pocket PC 2002 */ 730184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040b, 0)}, 731184610Salfred /* Windows Pocket PC 2002 */ 732184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040c, 0)}, 733184610Salfred /* Windows Pocket PC 2002 */ 734184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040d, 0)}, 735184610Salfred /* Windows Pocket PC 2002 */ 736184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040e, 0)}, 737184610Salfred /* Windows Pocket PC 2002 */ 738184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040f, 0)}, 739184610Salfred /* Windows Pocket PC 2002 */ 740184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0410, 0)}, 741184610Salfred /* Windows Pocket PC 2002 */ 742184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0411, 0)}, 743184610Salfred /* Windows Pocket PC 2002 */ 744184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0412, 0)}, 745184610Salfred /* Windows Pocket PC 2002 */ 746184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0413, 0)}, 747184610Salfred /* Windows Pocket PC 2002 */ 748184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0414, 0)}, 749184610Salfred /* Windows Pocket PC 2002 */ 750184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0415, 0)}, 751184610Salfred /* Windows Pocket PC 2002 */ 752184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0416, 0)}, 753184610Salfred /* Windows Pocket PC 2002 */ 754184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0417, 0)}, 755184610Salfred /* Windows Pocket PC 2003 */ 756184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0432, 0)}, 757184610Salfred /* Windows Pocket PC 2003 */ 758184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0433, 0)}, 759184610Salfred /* Windows Pocket PC 2003 */ 760184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0434, 0)}, 761184610Salfred /* Windows Pocket PC 2003 */ 762184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0435, 0)}, 763184610Salfred /* Windows Pocket PC 2003 */ 764184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0436, 0)}, 765184610Salfred /* Windows Pocket PC 2003 */ 766184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0437, 0)}, 767184610Salfred /* Windows Pocket PC 2003 */ 768184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0438, 0)}, 769184610Salfred /* Windows Pocket PC 2003 */ 770184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0439, 0)}, 771184610Salfred /* Windows Pocket PC 2003 */ 772184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043a, 0)}, 773184610Salfred /* Windows Pocket PC 2003 */ 774184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043b, 0)}, 775184610Salfred /* Windows Pocket PC 2003 */ 776184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043c, 0)}, 777184610Salfred /* Windows Pocket PC 2003 */ 778184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043d, 0)}, 779184610Salfred /* Windows Pocket PC 2003 */ 780184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043e, 0)}, 781184610Salfred /* Windows Pocket PC 2003 */ 782184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043f, 0)}, 783184610Salfred /* Windows Pocket PC 2003 */ 784184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0440, 0)}, 785184610Salfred /* Windows Pocket PC 2003 */ 786184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0441, 0)}, 787184610Salfred /* Windows Pocket PC 2003 */ 788184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0442, 0)}, 789184610Salfred /* Windows Pocket PC 2003 */ 790184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0443, 0)}, 791184610Salfred /* Windows Pocket PC 2003 */ 792184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0444, 0)}, 793184610Salfred /* Windows Pocket PC 2003 */ 794184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0445, 0)}, 795184610Salfred /* Windows Pocket PC 2003 */ 796184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0446, 0)}, 797184610Salfred /* Windows Pocket PC 2003 */ 798184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0447, 0)}, 799184610Salfred /* Windows Pocket PC 2003 */ 800184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0448, 0)}, 801184610Salfred /* Windows Pocket PC 2003 */ 802184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0449, 0)}, 803184610Salfred /* Windows Pocket PC 2003 */ 804184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044a, 0)}, 805184610Salfred /* Windows Pocket PC 2003 */ 806184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044b, 0)}, 807184610Salfred /* Windows Pocket PC 2003 */ 808184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044c, 0)}, 809184610Salfred /* Windows Pocket PC 2003 */ 810184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044d, 0)}, 811184610Salfred /* Windows Pocket PC 2003 */ 812184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044e, 0)}, 813184610Salfred /* Windows Pocket PC 2003 */ 814184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044f, 0)}, 815184610Salfred /* Windows Pocket PC 2003 */ 816184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0450, 0)}, 817184610Salfred /* Windows Pocket PC 2003 */ 818184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0451, 0)}, 819184610Salfred /* Windows Pocket PC 2003 */ 820184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0452, 0)}, 821184610Salfred /* Windows Pocket PC 2003 */ 822184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0453, 0)}, 823184610Salfred /* Windows Pocket PC 2003 */ 824184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0454, 0)}, 825184610Salfred /* Windows Pocket PC 2003 */ 826184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0455, 0)}, 827184610Salfred /* Windows Pocket PC 2003 */ 828184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0456, 0)}, 829184610Salfred /* Windows Pocket PC 2003 */ 830184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0457, 0)}, 831184610Salfred /* Windows Pocket PC 2003 */ 832184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0458, 0)}, 833184610Salfred /* Windows Pocket PC 2003 */ 834184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0459, 0)}, 835184610Salfred /* Windows Pocket PC 2003 */ 836184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045a, 0)}, 837184610Salfred /* Windows Pocket PC 2003 */ 838184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045b, 0)}, 839184610Salfred /* Windows Pocket PC 2003 */ 840184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045c, 0)}, 841184610Salfred /* Windows Pocket PC 2003 */ 842184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045d, 0)}, 843184610Salfred /* Windows Pocket PC 2003 */ 844184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045e, 0)}, 845184610Salfred /* Windows Pocket PC 2003 */ 846184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045f, 0)}, 847184610Salfred /* Windows Pocket PC 2003 */ 848184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0460, 0)}, 849184610Salfred /* Windows Pocket PC 2003 */ 850184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0461, 0)}, 851184610Salfred /* Windows Pocket PC 2003 */ 852184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0462, 0)}, 853184610Salfred /* Windows Pocket PC 2003 */ 854184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0463, 0)}, 855184610Salfred /* Windows Pocket PC 2003 */ 856184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0464, 0)}, 857184610Salfred /* Windows Pocket PC 2003 */ 858184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0465, 0)}, 859184610Salfred /* Windows Pocket PC 2003 */ 860184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0466, 0)}, 861184610Salfred /* Windows Pocket PC 2003 */ 862184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0467, 0)}, 863184610Salfred /* Windows Pocket PC 2003 */ 864184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0468, 0)}, 865184610Salfred /* Windows Pocket PC 2003 */ 866184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0469, 0)}, 867184610Salfred /* Windows Pocket PC 2003 */ 868184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046a, 0)}, 869184610Salfred /* Windows Pocket PC 2003 */ 870184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046b, 0)}, 871184610Salfred /* Windows Pocket PC 2003 */ 872184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046c, 0)}, 873184610Salfred /* Windows Pocket PC 2003 */ 874184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046d, 0)}, 875184610Salfred /* Windows Pocket PC 2003 */ 876184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046e, 0)}, 877184610Salfred /* Windows Pocket PC 2003 */ 878184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046f, 0)}, 879184610Salfred /* Windows Pocket PC 2003 */ 880184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0470, 0)}, 881184610Salfred /* Windows Pocket PC 2003 */ 882184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0471, 0)}, 883184610Salfred /* Windows Pocket PC 2003 */ 884184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0472, 0)}, 885184610Salfred /* Windows Pocket PC 2003 */ 886184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0473, 0)}, 887184610Salfred /* Windows Pocket PC 2003 */ 888184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0474, 0)}, 889184610Salfred /* Windows Pocket PC 2003 */ 890184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0475, 0)}, 891184610Salfred /* Windows Pocket PC 2003 */ 892184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0476, 0)}, 893184610Salfred /* Windows Pocket PC 2003 */ 894184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0477, 0)}, 895184610Salfred /* Windows Pocket PC 2003 */ 896184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0478, 0)}, 897184610Salfred /* Windows Pocket PC 2003 */ 898184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0479, 0)}, 899184610Salfred /* Windows Pocket PC 2003 */ 900184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x047a, 0)}, 901184610Salfred /* Windows Pocket PC 2003 */ 902184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x047b, 0)}, 903184610Salfred /* Windows Smartphone 2002 */ 904184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c8, 0)}, 905184610Salfred /* Windows Smartphone 2002 */ 906184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c9, 0)}, 907184610Salfred /* Windows Smartphone 2002 */ 908184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ca, 0)}, 909184610Salfred /* Windows Smartphone 2002 */ 910184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cb, 0)}, 911184610Salfred /* Windows Smartphone 2002 */ 912184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cc, 0)}, 913184610Salfred /* Windows Smartphone 2002 */ 914184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cd, 0)}, 915184610Salfred /* Windows Smartphone 2002 */ 916184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ce, 0)}, 917184610Salfred /* Windows Smartphone 2003 */ 918184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d7, 0)}, 919184610Salfred /* Windows Smartphone 2003 */ 920184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d8, 0)}, 921184610Salfred /* Windows Smartphone 2003 */ 922184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d9, 0)}, 923184610Salfred /* Windows Smartphone 2003 */ 924184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04da, 0)}, 925184610Salfred /* Windows Smartphone 2003 */ 926184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04db, 0)}, 927184610Salfred /* Windows Smartphone 2003 */ 928184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dc, 0)}, 929184610Salfred /* Windows Smartphone 2003 */ 930184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dd, 0)}, 931184610Salfred /* Windows Smartphone 2003 */ 932184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04de, 0)}, 933184610Salfred /* Windows Smartphone 2003 */ 934184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04df, 0)}, 935184610Salfred /* Windows Smartphone 2003 */ 936184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e0, 0)}, 937184610Salfred /* Windows Smartphone 2003 */ 938184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e1, 0)}, 939184610Salfred /* Windows Smartphone 2003 */ 940184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e2, 0)}, 941184610Salfred /* Windows Smartphone 2003 */ 942184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e3, 0)}, 943184610Salfred /* Windows Smartphone 2003 */ 944184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e4, 0)}, 945184610Salfred /* Windows Smartphone 2003 */ 946184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e5, 0)}, 947184610Salfred /* Windows Smartphone 2003 */ 948184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e6, 0)}, 949184610Salfred /* Windows Smartphone 2003 */ 950184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e7, 0)}, 951184610Salfred /* Windows Smartphone 2003 */ 952184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e8, 0)}, 953184610Salfred /* Windows Smartphone 2003 */ 954184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e9, 0)}, 955184610Salfred /* Windows Smartphone 2003 */ 956184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ea, 0)}, 957184610Salfred /* Motorola MPx200 Smartphone */ 958184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4204, 0)}, 959184610Salfred /* Motorola MPc GSM */ 960184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4214, 0)}, 961184610Salfred /* Motorola MPx220 Smartphone */ 962184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4224, 0)}, 963184610Salfred /* Motorola MPc CDMA */ 964184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4234, 0)}, 965184610Salfred /* Motorola MPx100 Smartphone */ 966184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4244, 0)}, 967184610Salfred /* NEC USB Sync */ 968184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d5, 0)}, 969184610Salfred /* NEC USB Sync */ 970184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d6, 0)}, 971184610Salfred /* NEC USB Sync */ 972184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d7, 0)}, 973184610Salfred /* NEC USB Sync */ 974184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x8024, 0)}, 975184610Salfred /* NEC USB Sync */ 976184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x8025, 0)}, 977184610Salfred /* Panasonic USB Sync */ 978184610Salfred {USB_VPI(USB_VENDOR_PANASONIC, 0x2500, 0)}, 979184610Salfred /* Samsung NEXiO USB Sync */ 980184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f00, 0)}, 981184610Salfred /* Samsung NEXiO USB Sync */ 982184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f01, 0)}, 983184610Salfred /* Samsung NEXiO USB Sync */ 984184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f02, 0)}, 985184610Salfred /* Samsung NEXiO USB Sync */ 986184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f03, 0)}, 987184610Salfred /* Samsung NEXiO USB Sync */ 988184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f04, 0)}, 989184610Salfred /* Samsung MITs USB Sync */ 990184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6611, 0)}, 991184610Salfred /* Samsung MITs USB Sync */ 992184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6613, 0)}, 993184610Salfred /* Samsung MITs USB Sync */ 994184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6615, 0)}, 995184610Salfred /* Samsung MITs USB Sync */ 996184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6617, 0)}, 997184610Salfred /* Samsung MITs USB Sync */ 998184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6619, 0)}, 999184610Salfred /* Samsung MITs USB Sync */ 1000184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x661b, 0)}, 1001184610Salfred /* Samsung MITs USB Sync */ 1002184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x662e, 0)}, 1003184610Salfred /* Samsung MITs USB Sync */ 1004184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6630, 0)}, 1005184610Salfred /* Samsung MITs USB Sync */ 1006184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6632, 0)}, 1007184610Salfred /* SHARP WS003SH USB Modem */ 1008184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9102, 0)}, 1009184610Salfred /* SHARP WS004SH USB Modem */ 1010184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9121, 0)}, 1011184610Salfred /* SHARP S01SH USB Modem */ 1012184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9151, 0)}, 1013192557Sthompsa /**/ 1014184610Salfred {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ES, 0)}, 1015192557Sthompsa /**/ 1016192557Sthompsa {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WILLCOM03, 0)}, 1017184610Salfred /* Symbol USB Sync */ 1018184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2000, 0)}, 1019184610Salfred /* Symbol USB Sync 0x2001 */ 1020184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2001, 0)}, 1021184610Salfred /* Symbol USB Sync 0x2002 */ 1022184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2002, 0)}, 1023184610Salfred /* Symbol USB Sync 0x2003 */ 1024184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2003, 0)}, 1025184610Salfred /* Symbol USB Sync 0x2004 */ 1026184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2004, 0)}, 1027184610Salfred /* Symbol USB Sync 0x2005 */ 1028184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2005, 0)}, 1029184610Salfred /* Symbol USB Sync 0x2006 */ 1030184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2006, 0)}, 1031184610Salfred /* Symbol USB Sync 0x2007 */ 1032184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2007, 0)}, 1033184610Salfred /* Symbol USB Sync 0x2008 */ 1034184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2008, 0)}, 1035184610Salfred /* Symbol USB Sync 0x2009 */ 1036184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2009, 0)}, 1037184610Salfred /* Symbol USB Sync 0x200a */ 1038184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x200a, 0)}, 1039184610Salfred /* TOSHIBA USB Sync 0700 */ 1040184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0700, 0)}, 1041184610Salfred /* TOSHIBA Pocket PC e310 */ 1042184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0705, 0)}, 1043184610Salfred /* TOSHIBA Pocket PC e330 Series */ 1044184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0707, 0)}, 1045184610Salfred /* TOSHIBA Pocket PC e350Series */ 1046184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0708, 0)}, 1047184610Salfred /* TOSHIBA Pocket PC e750 Series */ 1048184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0709, 0)}, 1049184610Salfred /* TOSHIBA Pocket PC e400 Series */ 1050184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x070a, 0)}, 1051184610Salfred /* TOSHIBA Pocket PC e800 Series */ 1052184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x070b, 0)}, 1053184610Salfred /* TOSHIBA Pocket PC e740 */ 1054184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_POCKETPC_E740, 0)}, 1055184610Salfred /* ViewSonic Color Pocket PC V35 */ 1056184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x0ed9, 0)}, 1057184610Salfred /* ViewSonic Color Pocket PC V36 */ 1058184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1527, 0)}, 1059184610Salfred /* ViewSonic Color Pocket PC V37 */ 1060184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1529, 0)}, 1061184610Salfred /* ViewSonic Color Pocket PC V38 */ 1062184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152b, 0)}, 1063184610Salfred /* ViewSonic Pocket PC */ 1064184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152e, 0)}, 1065184610Salfred /* ViewSonic Communicator Pocket PC */ 1066184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1921, 0)}, 1067184610Salfred /* ViewSonic Smartphone */ 1068184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1922, 0)}, 1069184610Salfred /* ViewSonic Pocket PC V30 */ 1070184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1923, 0)}, 1071184610Salfred}; 1072184610Salfred 1073184610Salfredstatic device_method_t uipaq_methods[] = { 1074184610Salfred DEVMETHOD(device_probe, uipaq_probe), 1075184610Salfred DEVMETHOD(device_attach, uipaq_attach), 1076184610Salfred DEVMETHOD(device_detach, uipaq_detach), 1077184610Salfred {0, 0} 1078184610Salfred}; 1079184610Salfred 1080184610Salfredstatic devclass_t uipaq_devclass; 1081184610Salfred 1082184610Salfredstatic driver_t uipaq_driver = { 1083184610Salfred .name = "uipaq", 1084184610Salfred .methods = uipaq_methods, 1085184610Salfred .size = sizeof(struct uipaq_softc), 1086184610Salfred}; 1087184610Salfred 1088189275SthompsaDRIVER_MODULE(uipaq, uhub, uipaq_driver, uipaq_devclass, NULL, 0); 1089188942SthompsaMODULE_DEPEND(uipaq, ucom, 1, 1, 1); 1090188942SthompsaMODULE_DEPEND(uipaq, usb, 1, 1, 1); 1091184610Salfred 1092184610Salfredstatic int 1093184610Salfreduipaq_probe(device_t dev) 1094184610Salfred{ 1095192984Sthompsa struct usb_attach_arg *uaa = device_get_ivars(dev); 1096184610Salfred 1097192499Sthompsa if (uaa->usb_mode != USB_MODE_HOST) { 1098184610Salfred return (ENXIO); 1099184610Salfred } 1100184610Salfred if (uaa->info.bConfigIndex != UIPAQ_CONFIG_INDEX) { 1101184610Salfred return (ENXIO); 1102184610Salfred } 1103184610Salfred if (uaa->info.bIfaceIndex != UIPAQ_IFACE_INDEX) { 1104184610Salfred return (ENXIO); 1105184610Salfred } 1106194228Sthompsa return (usbd_lookup_id_by_uaa(uipaq_devs, sizeof(uipaq_devs), uaa)); 1107184610Salfred} 1108184610Salfred 1109184610Salfredstatic int 1110184610Salfreduipaq_attach(device_t dev) 1111184610Salfred{ 1112192984Sthompsa struct usb_device_request req; 1113192984Sthompsa struct usb_attach_arg *uaa = device_get_ivars(dev); 1114184610Salfred struct uipaq_softc *sc = device_get_softc(dev); 1115184610Salfred int error; 1116184610Salfred uint8_t iface_index; 1117184610Salfred uint8_t i; 1118184610Salfred 1119184610Salfred sc->sc_udev = uaa->device; 1120184610Salfred 1121194228Sthompsa device_set_usb_desc(dev); 1122189265Sthompsa mtx_init(&sc->sc_mtx, "uipaq", NULL, MTX_DEF); 1123184610Salfred 1124184610Salfred /* 1125184610Salfred * Send magic bytes, cribbed from Linux ipaq driver that 1126184610Salfred * claims to have sniffed them from Win98. Wait for driver to 1127184610Salfred * become ready on device side? 1128184610Salfred */ 1129184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1130184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1131184610Salfred USETW(req.wValue, UCDC_LINE_DTR); 1132184610Salfred USETW(req.wIndex, 0x0); 1133184610Salfred USETW(req.wLength, 0); 1134184610Salfred for (i = 0; i != 64; i++) { 1135184610Salfred error = 1136194228Sthompsa usbd_do_request_flags(uaa->device, NULL, &req, 1137184610Salfred NULL, 0, NULL, 100); 1138184610Salfred if (error == 0) 1139184610Salfred break; 1140194228Sthompsa usb_pause_mtx(NULL, hz / 10); 1141184610Salfred } 1142184610Salfred 1143184610Salfred iface_index = UIPAQ_IFACE_INDEX; 1144194228Sthompsa error = usbd_transfer_setup(uaa->device, &iface_index, 1145187259Sthompsa sc->sc_xfer, uipaq_config_data, 1146189265Sthompsa UIPAQ_N_TRANSFER, sc, &sc->sc_mtx); 1147184610Salfred 1148184610Salfred if (error) { 1149184610Salfred goto detach; 1150184610Salfred } 1151184610Salfred /* clear stall at first run */ 1152189265Sthompsa mtx_lock(&sc->sc_mtx); 1153194677Sthompsa usbd_xfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1154194677Sthompsa usbd_xfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1155189265Sthompsa mtx_unlock(&sc->sc_mtx); 1156184610Salfred 1157194228Sthompsa error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, 1158189265Sthompsa &uipaq_callback, &sc->sc_mtx); 1159184610Salfred if (error) { 1160184610Salfred goto detach; 1161184610Salfred } 1162184610Salfred return (0); 1163184610Salfred 1164184610Salfreddetach: 1165184610Salfred uipaq_detach(dev); 1166184610Salfred return (ENXIO); 1167184610Salfred} 1168184610Salfred 1169184610Salfredint 1170184610Salfreduipaq_detach(device_t dev) 1171184610Salfred{ 1172184610Salfred struct uipaq_softc *sc = device_get_softc(dev); 1173184610Salfred 1174194228Sthompsa ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1); 1175194228Sthompsa usbd_transfer_unsetup(sc->sc_xfer, UIPAQ_N_TRANSFER); 1176189265Sthompsa mtx_destroy(&sc->sc_mtx); 1177184610Salfred 1178184610Salfred return (0); 1179184610Salfred} 1180184610Salfred 1181184610Salfredstatic void 1182192984Sthompsauipaq_start_read(struct ucom_softc *ucom) 1183184610Salfred{ 1184184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1185184610Salfred 1186184610Salfred /* start read endpoint */ 1187194228Sthompsa usbd_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1188184610Salfred} 1189184610Salfred 1190184610Salfredstatic void 1191192984Sthompsauipaq_stop_read(struct ucom_softc *ucom) 1192184610Salfred{ 1193184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1194184610Salfred 1195184610Salfred /* stop read endpoint */ 1196194228Sthompsa usbd_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1197184610Salfred} 1198184610Salfred 1199184610Salfredstatic void 1200192984Sthompsauipaq_start_write(struct ucom_softc *ucom) 1201184610Salfred{ 1202184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1203184610Salfred 1204194228Sthompsa usbd_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1205184610Salfred} 1206184610Salfred 1207184610Salfredstatic void 1208192984Sthompsauipaq_stop_write(struct ucom_softc *ucom) 1209184610Salfred{ 1210184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1211184610Salfred 1212194228Sthompsa usbd_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1213184610Salfred} 1214184610Salfred 1215184610Salfredstatic void 1216192984Sthompsauipaq_cfg_set_dtr(struct ucom_softc *ucom, uint8_t onoff) 1217184610Salfred{ 1218184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1219192984Sthompsa struct usb_device_request req; 1220184610Salfred 1221184610Salfred DPRINTF("onoff=%d\n", onoff); 1222184610Salfred 1223184610Salfred if (onoff) 1224184610Salfred sc->sc_line |= UCDC_LINE_DTR; 1225184610Salfred else 1226184610Salfred sc->sc_line &= ~UCDC_LINE_DTR; 1227184610Salfred 1228184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1229184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1230184610Salfred USETW(req.wValue, sc->sc_line); 1231184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1232184610Salfred req.wIndex[1] = 0; 1233184610Salfred USETW(req.wLength, 0); 1234184610Salfred 1235194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1236188413Sthompsa &req, NULL, 0, 1000); 1237184610Salfred} 1238184610Salfred 1239184610Salfredstatic void 1240192984Sthompsauipaq_cfg_set_rts(struct ucom_softc *ucom, uint8_t onoff) 1241184610Salfred{ 1242184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1243192984Sthompsa struct usb_device_request req; 1244184610Salfred 1245184610Salfred DPRINTF("onoff=%d\n", onoff); 1246184610Salfred 1247184610Salfred if (onoff) 1248184610Salfred sc->sc_line |= UCDC_LINE_RTS; 1249184610Salfred else 1250184610Salfred sc->sc_line &= ~UCDC_LINE_RTS; 1251184610Salfred 1252184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1253184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1254184610Salfred USETW(req.wValue, sc->sc_line); 1255184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1256184610Salfred req.wIndex[1] = 0; 1257184610Salfred USETW(req.wLength, 0); 1258184610Salfred 1259194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1260188413Sthompsa &req, NULL, 0, 1000); 1261184610Salfred} 1262184610Salfred 1263184610Salfredstatic void 1264192984Sthompsauipaq_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff) 1265184610Salfred{ 1266184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1267192984Sthompsa struct usb_device_request req; 1268184610Salfred uint16_t temp; 1269184610Salfred 1270184610Salfred temp = onoff ? UCDC_BREAK_ON : UCDC_BREAK_OFF; 1271184610Salfred 1272184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1273184610Salfred req.bRequest = UCDC_SEND_BREAK; 1274184610Salfred USETW(req.wValue, temp); 1275184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1276184610Salfred req.wIndex[1] = 0; 1277184610Salfred USETW(req.wLength, 0); 1278184610Salfred 1279194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1280188413Sthompsa &req, NULL, 0, 1000); 1281184610Salfred} 1282184610Salfred 1283184610Salfredstatic void 1284194677Sthompsauipaq_write_callback(struct usb_xfer *xfer, usb_error_t error) 1285184610Salfred{ 1286194677Sthompsa struct uipaq_softc *sc = usbd_xfer_softc(xfer); 1287194677Sthompsa struct usb_page_cache *pc; 1288184610Salfred uint32_t actlen; 1289184610Salfred 1290184610Salfred switch (USB_GET_STATE(xfer)) { 1291184610Salfred case USB_ST_SETUP: 1292184610Salfred case USB_ST_TRANSFERRED: 1293188413Sthompsatr_setup: 1294194677Sthompsa pc = usbd_xfer_get_frame(xfer, 0); 1295194677Sthompsa if (ucom_get_data(&sc->sc_ucom, pc, 0, 1296184610Salfred UIPAQ_BUF_SIZE, &actlen)) { 1297194677Sthompsa usbd_xfer_set_frame_len(xfer, 0, actlen); 1298194228Sthompsa usbd_transfer_submit(xfer); 1299184610Salfred } 1300184610Salfred return; 1301184610Salfred 1302184610Salfred default: /* Error */ 1303194677Sthompsa if (error != USB_ERR_CANCELLED) { 1304188413Sthompsa /* try to clear stall first */ 1305194677Sthompsa usbd_xfer_set_stall(xfer); 1306188413Sthompsa goto tr_setup; 1307184610Salfred } 1308184610Salfred return; 1309184610Salfred } 1310184610Salfred} 1311184610Salfred 1312184610Salfredstatic void 1313194677Sthompsauipaq_read_callback(struct usb_xfer *xfer, usb_error_t error) 1314184610Salfred{ 1315194677Sthompsa struct uipaq_softc *sc = usbd_xfer_softc(xfer); 1316194677Sthompsa struct usb_page_cache *pc; 1317194677Sthompsa int actlen; 1318184610Salfred 1319194677Sthompsa usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL); 1320194677Sthompsa 1321184610Salfred switch (USB_GET_STATE(xfer)) { 1322184610Salfred case USB_ST_TRANSFERRED: 1323194677Sthompsa pc = usbd_xfer_get_frame(xfer, 0); 1324194677Sthompsa ucom_put_data(&sc->sc_ucom, pc, 0, actlen); 1325184610Salfred 1326184610Salfred case USB_ST_SETUP: 1327188413Sthompsatr_setup: 1328194677Sthompsa usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer)); 1329194228Sthompsa usbd_transfer_submit(xfer); 1330184610Salfred return; 1331184610Salfred 1332184610Salfred default: /* Error */ 1333194677Sthompsa if (error != USB_ERR_CANCELLED) { 1334188413Sthompsa /* try to clear stall first */ 1335194677Sthompsa usbd_xfer_set_stall(xfer); 1336188413Sthompsa goto tr_setup; 1337184610Salfred } 1338184610Salfred return; 1339184610Salfred } 1340184610Salfred} 1341