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 4331722Seadler/* 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 * 21184610Salfred * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22184610Salfred * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23184610Salfred * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24184610Salfred * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25184610Salfred * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26184610Salfred * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27184610Salfred * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28184610Salfred * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29184610Salfred * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30184610Salfred * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31184610Salfred * POSSIBILITY OF SUCH DAMAGE. 32184610Salfred */ 33184610Salfred 34184610Salfred/* 35184610Salfred * iPAQ driver 36184610Salfred * 37184610Salfred * 19 July 2003: Incorporated changes suggested by Sam Lawrance from 38184610Salfred * the uppc module 39184610Salfred * 40184610Salfred * 41184610Salfred * Contact isis@cs.umd.edu if you have any questions/comments about this driver 42184610Salfred */ 43184610Salfred 44184610Salfred#include <sys/cdefs.h> 45184610Salfred__FBSDID("$FreeBSD$"); 46184610Salfred 47194677Sthompsa#include <sys/stdint.h> 48194677Sthompsa#include <sys/stddef.h> 49194677Sthompsa#include <sys/param.h> 50194677Sthompsa#include <sys/queue.h> 51194677Sthompsa#include <sys/types.h> 52194677Sthompsa#include <sys/systm.h> 53194677Sthompsa#include <sys/kernel.h> 54194677Sthompsa#include <sys/bus.h> 55194677Sthompsa#include <sys/module.h> 56194677Sthompsa#include <sys/lock.h> 57194677Sthompsa#include <sys/mutex.h> 58194677Sthompsa#include <sys/condvar.h> 59194677Sthompsa#include <sys/sysctl.h> 60194677Sthompsa#include <sys/sx.h> 61194677Sthompsa#include <sys/unistd.h> 62194677Sthompsa#include <sys/callout.h> 63194677Sthompsa#include <sys/malloc.h> 64194677Sthompsa#include <sys/priv.h> 65194677Sthompsa 66188942Sthompsa#include <dev/usb/usb.h> 67194677Sthompsa#include <dev/usb/usbdi.h> 68194677Sthompsa#include <dev/usb/usbdi_util.h> 69188942Sthompsa#include <dev/usb/usb_cdc.h> 70194677Sthompsa#include "usbdevs.h" 71184610Salfred 72194228Sthompsa#define USB_DEBUG_VAR usb_debug 73188942Sthompsa#include <dev/usb/usb_debug.h> 74188942Sthompsa#include <dev/usb/usb_process.h> 75184610Salfred 76188942Sthompsa#include <dev/usb/serial/usb_serial.h> 77184610Salfred 78184610Salfred#define UIPAQ_CONFIG_INDEX 0 /* config number 1 */ 79184610Salfred#define UIPAQ_IFACE_INDEX 0 80184610Salfred 81184610Salfred#define UIPAQ_BUF_SIZE 1024 82184610Salfred 83187259Sthompsaenum { 84187259Sthompsa UIPAQ_BULK_DT_WR, 85187259Sthompsa UIPAQ_BULK_DT_RD, 86188413Sthompsa UIPAQ_N_TRANSFER, 87187259Sthompsa}; 88187259Sthompsa 89184610Salfredstruct uipaq_softc { 90192984Sthompsa struct ucom_super_softc sc_super_ucom; 91192984Sthompsa struct ucom_softc sc_ucom; 92184610Salfred 93192984Sthompsa struct usb_xfer *sc_xfer[UIPAQ_N_TRANSFER]; 94192984Sthompsa struct usb_device *sc_udev; 95189265Sthompsa struct mtx sc_mtx; 96184610Salfred 97184610Salfred uint16_t sc_line; 98184610Salfred 99184610Salfred uint8_t sc_lsr; /* local status register */ 100184610Salfred uint8_t sc_msr; /* modem status register */ 101184610Salfred}; 102184610Salfred 103184610Salfredstatic device_probe_t uipaq_probe; 104184610Salfredstatic device_attach_t uipaq_attach; 105184610Salfredstatic device_detach_t uipaq_detach; 106239299Shselaskystatic void uipaq_free_softc(struct uipaq_softc *); 107184610Salfred 108193045Sthompsastatic usb_callback_t uipaq_write_callback; 109193045Sthompsastatic usb_callback_t uipaq_read_callback; 110184610Salfred 111239180Shselaskystatic void uipaq_free(struct ucom_softc *); 112192984Sthompsastatic void uipaq_start_read(struct ucom_softc *); 113192984Sthompsastatic void uipaq_stop_read(struct ucom_softc *); 114192984Sthompsastatic void uipaq_start_write(struct ucom_softc *); 115192984Sthompsastatic void uipaq_stop_write(struct ucom_softc *); 116192984Sthompsastatic void uipaq_cfg_set_dtr(struct ucom_softc *, uint8_t); 117192984Sthompsastatic void uipaq_cfg_set_rts(struct ucom_softc *, uint8_t); 118192984Sthompsastatic void uipaq_cfg_set_break(struct ucom_softc *, uint8_t); 119197570Sthompsastatic void uipaq_poll(struct ucom_softc *ucom); 120184610Salfred 121192984Sthompsastatic const struct usb_config uipaq_config_data[UIPAQ_N_TRANSFER] = { 122184610Salfred 123187259Sthompsa [UIPAQ_BULK_DT_WR] = { 124184610Salfred .type = UE_BULK, 125184610Salfred .endpoint = UE_ADDR_ANY, 126184610Salfred .direction = UE_DIR_OUT, 127190734Sthompsa .bufsize = UIPAQ_BUF_SIZE, 128190734Sthompsa .flags = {.pipe_bof = 1,.force_short_xfer = 1,}, 129190734Sthompsa .callback = &uipaq_write_callback, 130184610Salfred }, 131184610Salfred 132187259Sthompsa [UIPAQ_BULK_DT_RD] = { 133184610Salfred .type = UE_BULK, 134184610Salfred .endpoint = UE_ADDR_ANY, 135184610Salfred .direction = UE_DIR_IN, 136190734Sthompsa .bufsize = UIPAQ_BUF_SIZE, 137190734Sthompsa .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, 138190734Sthompsa .callback = &uipaq_read_callback, 139184610Salfred }, 140184610Salfred}; 141184610Salfred 142192984Sthompsastatic const struct ucom_callback uipaq_callback = { 143194228Sthompsa .ucom_cfg_set_dtr = &uipaq_cfg_set_dtr, 144194228Sthompsa .ucom_cfg_set_rts = &uipaq_cfg_set_rts, 145194228Sthompsa .ucom_cfg_set_break = &uipaq_cfg_set_break, 146194228Sthompsa .ucom_start_read = &uipaq_start_read, 147194228Sthompsa .ucom_stop_read = &uipaq_stop_read, 148194228Sthompsa .ucom_start_write = &uipaq_start_write, 149194228Sthompsa .ucom_stop_write = &uipaq_stop_write, 150197570Sthompsa .ucom_poll = &uipaq_poll, 151239180Shselasky .ucom_free = &uipaq_free, 152184610Salfred}; 153184610Salfred 154184610Salfred/* 155184610Salfred * Much of this list is generated from lists of other drivers that 156184610Salfred * support the same hardware. Numeric values are used where no usbdevs 157184610Salfred * entries exist. 158184610Salfred */ 159223486Shselaskystatic const STRUCT_USB_HOST_ID uipaq_devs[] = { 160184610Salfred /* Socket USB Sync */ 161184610Salfred {USB_VPI(0x0104, 0x00be, 0)}, 162184610Salfred /* USB Sync 0301 */ 163184610Salfred {USB_VPI(0x04ad, 0x0301, 0)}, 164184610Salfred /* USB Sync 0302 */ 165184610Salfred {USB_VPI(0x04ad, 0x0302, 0)}, 166184610Salfred /* USB Sync 0303 */ 167184610Salfred {USB_VPI(0x04ad, 0x0303, 0)}, 168184610Salfred /* GPS Pocket PC USB Sync */ 169184610Salfred {USB_VPI(0x04ad, 0x0306, 0)}, 170184610Salfred /* HHP PDT */ 171184610Salfred {USB_VPI(0x0536, 0x01a0, 0)}, 172184610Salfred /* Intermec Mobile Computer */ 173184610Salfred {USB_VPI(0x067e, 0x1001, 0)}, 174184610Salfred /* Linkup Systems USB Sync */ 175184610Salfred {USB_VPI(0x094b, 0x0001, 0)}, 176184610Salfred /* BCOM USB Sync 0065 */ 177184610Salfred {USB_VPI(0x0960, 0x0065, 0)}, 178184610Salfred /* BCOM USB Sync 0066 */ 179184610Salfred {USB_VPI(0x0960, 0x0066, 0)}, 180184610Salfred /* BCOM USB Sync 0067 */ 181184610Salfred {USB_VPI(0x0960, 0x0067, 0)}, 182184610Salfred /* Portatec USB Sync */ 183184610Salfred {USB_VPI(0x0961, 0x0010, 0)}, 184184610Salfred /* Trimble GeoExplorer */ 185184610Salfred {USB_VPI(0x099e, 0x0052, 0)}, 186184610Salfred /* TDS Data Collector */ 187184610Salfred {USB_VPI(0x099e, 0x4000, 0)}, 188184610Salfred /* Motorola iDEN Smartphone */ 189184610Salfred {USB_VPI(0x0c44, 0x03a2, 0)}, 190184610Salfred /* Cesscom Luxian Series */ 191184610Salfred {USB_VPI(0x0c8e, 0x6000, 0)}, 192184610Salfred /* Motorola PowerPad Pocket PCDevice */ 193184610Salfred {USB_VPI(0x0cad, 0x9001, 0)}, 194184610Salfred /* Freedom Scientific USB Sync */ 195184610Salfred {USB_VPI(0x0f4e, 0x0200, 0)}, 196184610Salfred /* Cyberbank USB Sync */ 197184610Salfred {USB_VPI(0x0f98, 0x0201, 0)}, 198184610Salfred /* Wistron USB Sync */ 199184610Salfred {USB_VPI(0x0fb8, 0x3001, 0)}, 200184610Salfred /* Wistron USB Sync */ 201184610Salfred {USB_VPI(0x0fb8, 0x3002, 0)}, 202184610Salfred /* Wistron USB Sync */ 203184610Salfred {USB_VPI(0x0fb8, 0x3003, 0)}, 204184610Salfred /* Wistron USB Sync */ 205184610Salfred {USB_VPI(0x0fb8, 0x4001, 0)}, 206184610Salfred /* E-TEN USB Sync */ 207184610Salfred {USB_VPI(0x1066, 0x00ce, 0)}, 208184610Salfred /* E-TEN P3XX Pocket PC */ 209184610Salfred {USB_VPI(0x1066, 0x0300, 0)}, 210184610Salfred /* E-TEN P5XX Pocket PC */ 211184610Salfred {USB_VPI(0x1066, 0x0500, 0)}, 212184610Salfred /* E-TEN P6XX Pocket PC */ 213184610Salfred {USB_VPI(0x1066, 0x0600, 0)}, 214184610Salfred /* E-TEN P7XX Pocket PC */ 215184610Salfred {USB_VPI(0x1066, 0x0700, 0)}, 216184610Salfred /* Psion Teklogix Sync 753x */ 217184610Salfred {USB_VPI(0x1114, 0x0001, 0)}, 218184610Salfred /* Psion Teklogix Sync netBookPro */ 219184610Salfred {USB_VPI(0x1114, 0x0004, 0)}, 220184610Salfred /* Psion Teklogix Sync 7525 */ 221184610Salfred {USB_VPI(0x1114, 0x0006, 0)}, 222184610Salfred /* VES USB Sync */ 223184610Salfred {USB_VPI(0x1182, 0x1388, 0)}, 224184610Salfred /* Rugged Pocket PC 2003 */ 225184610Salfred {USB_VPI(0x11d9, 0x1002, 0)}, 226184610Salfred /* Rugged Pocket PC 2003 */ 227184610Salfred {USB_VPI(0x11d9, 0x1003, 0)}, 228184610Salfred /* USB Sync 03 */ 229184610Salfred {USB_VPI(0x1231, 0xce01, 0)}, 230184610Salfred /* USB Sync 03 */ 231184610Salfred {USB_VPI(0x1231, 0xce02, 0)}, 232184610Salfred /* Mio DigiWalker PPC StrongARM */ 233184610Salfred {USB_VPI(0x3340, 0x011c, 0)}, 234184610Salfred /* Mio DigiWalker 338 */ 235184610Salfred {USB_VPI(0x3340, 0x0326, 0)}, 236184610Salfred /* Mio DigiWalker 338 */ 237184610Salfred {USB_VPI(0x3340, 0x0426, 0)}, 238184610Salfred /* Mio DigiWalker USB Sync */ 239184610Salfred {USB_VPI(0x3340, 0x043a, 0)}, 240184610Salfred /* MiTAC USB Sync 528 */ 241184610Salfred {USB_VPI(0x3340, 0x051c, 0)}, 242184610Salfred /* Mio DigiWalker SmartPhone USB Sync */ 243184610Salfred {USB_VPI(0x3340, 0x053a, 0)}, 244184610Salfred /* MiTAC USB Sync */ 245184610Salfred {USB_VPI(0x3340, 0x071c, 0)}, 246184610Salfred /* Generic PPC StrongARM */ 247184610Salfred {USB_VPI(0x3340, 0x0b1c, 0)}, 248184610Salfred /* Generic PPC USB Sync */ 249184610Salfred {USB_VPI(0x3340, 0x0e3a, 0)}, 250184610Salfred /* Itautec USB Sync */ 251184610Salfred {USB_VPI(0x3340, 0x0f1c, 0)}, 252184610Salfred /* Generic SmartPhone USB Sync */ 253184610Salfred {USB_VPI(0x3340, 0x0f3a, 0)}, 254184610Salfred /* Itautec USB Sync */ 255184610Salfred {USB_VPI(0x3340, 0x1326, 0)}, 256184610Salfred /* YAKUMO USB Sync */ 257184610Salfred {USB_VPI(0x3340, 0x191c, 0)}, 258184610Salfred /* Vobis USB Sync */ 259184610Salfred {USB_VPI(0x3340, 0x2326, 0)}, 260184610Salfred /* MEDION Winodws Moble USB Sync */ 261184610Salfred {USB_VPI(0x3340, 0x3326, 0)}, 262184610Salfred /* Legend USB Sync */ 263184610Salfred {USB_VPI(0x3708, 0x20ce, 0)}, 264184610Salfred /* Lenovo USB Sync */ 265184610Salfred {USB_VPI(0x3708, 0x21ce, 0)}, 266184610Salfred /* Mobile Media Technology USB Sync */ 267184610Salfred {USB_VPI(0x4113, 0x0210, 0)}, 268184610Salfred /* Mobile Media Technology USB Sync */ 269184610Salfred {USB_VPI(0x4113, 0x0211, 0)}, 270184610Salfred /* Mobile Media Technology USB Sync */ 271184610Salfred {USB_VPI(0x4113, 0x0400, 0)}, 272184610Salfred /* Mobile Media Technology USB Sync */ 273184610Salfred {USB_VPI(0x4113, 0x0410, 0)}, 274184610Salfred /* Smartphone */ 275184610Salfred {USB_VPI(0x4505, 0x0010, 0)}, 276184610Salfred /* SAGEM Wireless Assistant */ 277184610Salfred {USB_VPI(0x5e04, 0xce00, 0)}, 278184610Salfred /* c10 Series */ 279184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x1631, 0)}, 280184610Salfred /* c20 Series */ 281184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x1632, 0)}, 282184610Salfred /* Acer n10 Handheld USB Sync */ 283184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e1, 0)}, 284184610Salfred /* Acer n20 Handheld USB Sync */ 285184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e2, 0)}, 286184610Salfred /* Acer n30 Handheld USB Sync */ 287184610Salfred {USB_VPI(USB_VENDOR_ACER, 0x16e3, 0)}, 288184610Salfred /* ASUS USB Sync */ 289184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4200, 0)}, 290184610Salfred /* ASUS USB Sync */ 291184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4201, 0)}, 292184610Salfred /* ASUS USB Sync */ 293184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x4202, 0)}, 294184610Salfred /* ASUS USB Sync */ 295184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x9200, 0)}, 296184610Salfred /* ASUS USB Sync */ 297184610Salfred {USB_VPI(USB_VENDOR_ASUS, 0x9202, 0)}, 298184610Salfred /**/ 299184610Salfred {USB_VPI(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P535, 0)}, 300184610Salfred /* CASIO USB Sync 2001 */ 301184610Salfred {USB_VPI(USB_VENDOR_CASIO, 0x2001, 0)}, 302184610Salfred /* CASIO USB Sync 2003 */ 303184610Salfred {USB_VPI(USB_VENDOR_CASIO, 0x2003, 0)}, 304184610Salfred /**/ 305184610Salfred {USB_VPI(USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300, 0)}, 306184610Salfred /* MyGuide 7000 XL USB Sync */ 307184610Salfred {USB_VPI(USB_VENDOR_COMPAL, 0x0531, 0)}, 308184610Salfred /* Compaq iPAQ USB Sync */ 309184610Salfred {USB_VPI(USB_VENDOR_COMPAQ, 0x0032, 0)}, 310184610Salfred /**/ 311184610Salfred {USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC, 0)}, 312184610Salfred /* Dell Axim USB Sync */ 313184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4001, 0)}, 314184610Salfred /* Dell Axim USB Sync */ 315184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4002, 0)}, 316184610Salfred /* Dell Axim USB Sync */ 317184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4003, 0)}, 318184610Salfred /* Dell Axim USB Sync */ 319184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4004, 0)}, 320184610Salfred /* Dell Axim USB Sync */ 321184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4005, 0)}, 322184610Salfred /* Dell Axim USB Sync */ 323184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4006, 0)}, 324184610Salfred /* Dell Axim USB Sync */ 325184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4007, 0)}, 326184610Salfred /* Dell Axim USB Sync */ 327184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4008, 0)}, 328184610Salfred /* Dell Axim USB Sync */ 329184610Salfred {USB_VPI(USB_VENDOR_DELL, 0x4009, 0)}, 330184610Salfred /* Fujitsu Siemens Computers USB Sync */ 331184610Salfred {USB_VPI(USB_VENDOR_FSC, 0x1001, 0)}, 332184610Salfred /* FUJITSU USB Sync */ 333184610Salfred {USB_VPI(USB_VENDOR_FUJITSU, 0x1058, 0)}, 334184610Salfred /* FUJITSU USB Sync */ 335184610Salfred {USB_VPI(USB_VENDOR_FUJITSU, 0x1079, 0)}, 336184610Salfred /* Askey USB Sync */ 337184610Salfred {USB_VPI(USB_VENDOR_GIGASET, 0x0601, 0)}, 338184610Salfred /* Hitachi USB Sync */ 339184610Salfred {USB_VPI(USB_VENDOR_HITACHI, 0x0014, 0)}, 340184610Salfred /* HP USB Sync 1612 */ 341184610Salfred {USB_VPI(USB_VENDOR_HP, 0x1216, 0)}, 342184610Salfred /* HP USB Sync 1620 */ 343184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2016, 0)}, 344184610Salfred /* HP USB Sync 1621 */ 345184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2116, 0)}, 346184610Salfred /* HP USB Sync 1622 */ 347184610Salfred {USB_VPI(USB_VENDOR_HP, 0x2216, 0)}, 348184610Salfred /* HP USB Sync 1630 */ 349184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3016, 0)}, 350184610Salfred /* HP USB Sync 1631 */ 351184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3116, 0)}, 352184610Salfred /* HP USB Sync 1632 */ 353184610Salfred {USB_VPI(USB_VENDOR_HP, 0x3216, 0)}, 354184610Salfred /* HP USB Sync 1640 */ 355184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4016, 0)}, 356184610Salfred /* HP USB Sync 1641 */ 357184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4116, 0)}, 358184610Salfred /* HP USB Sync 1642 */ 359184610Salfred {USB_VPI(USB_VENDOR_HP, 0x4216, 0)}, 360184610Salfred /* HP USB Sync 1650 */ 361184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5016, 0)}, 362184610Salfred /* HP USB Sync 1651 */ 363184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5116, 0)}, 364184610Salfred /* HP USB Sync 1652 */ 365184610Salfred {USB_VPI(USB_VENDOR_HP, 0x5216, 0)}, 366184610Salfred /**/ 367184610Salfred {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_2215, 0)}, 368184610Salfred /**/ 369184610Salfred {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_568J, 0)}, 370184610Salfred /* HTC USB Modem */ 371184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x00cf, 0)}, 372184610Salfred /* PocketPC USB Sync */ 373184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a01, 0)}, 374184610Salfred /* PocketPC USB Sync */ 375184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a02, 0)}, 376184610Salfred /* PocketPC USB Sync */ 377184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a03, 0)}, 378184610Salfred /* PocketPC USB Sync */ 379184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a04, 0)}, 380184610Salfred /* PocketPC USB Sync */ 381184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a05, 0)}, 382184610Salfred /* PocketPC USB Sync */ 383184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a06, 0)}, 384184610Salfred /* PocketPC USB Sync */ 385184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a07, 0)}, 386184610Salfred /* PocketPC USB Sync */ 387184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a08, 0)}, 388184610Salfred /* PocketPC USB Sync */ 389184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a09, 0)}, 390184610Salfred /* PocketPC USB Sync */ 391184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0a, 0)}, 392184610Salfred /* PocketPC USB Sync */ 393184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0b, 0)}, 394184610Salfred /* PocketPC USB Sync */ 395184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0c, 0)}, 396184610Salfred /* PocketPC USB Sync */ 397184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0d, 0)}, 398184610Salfred /* PocketPC USB Sync */ 399184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0e, 0)}, 400184610Salfred /* PocketPC USB Sync */ 401184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a0f, 0)}, 402184610Salfred /* PocketPC USB Sync */ 403184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a10, 0)}, 404184610Salfred /* PocketPC USB Sync */ 405184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a11, 0)}, 406184610Salfred /* PocketPC USB Sync */ 407184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a12, 0)}, 408184610Salfred /* PocketPC USB Sync */ 409184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a13, 0)}, 410184610Salfred /* PocketPC USB Sync */ 411184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a14, 0)}, 412184610Salfred /* PocketPC USB Sync */ 413184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a15, 0)}, 414184610Salfred /* PocketPC USB Sync */ 415184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a16, 0)}, 416184610Salfred /* PocketPC USB Sync */ 417184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a17, 0)}, 418184610Salfred /* PocketPC USB Sync */ 419184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a18, 0)}, 420184610Salfred /* PocketPC USB Sync */ 421184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a19, 0)}, 422184610Salfred /* PocketPC USB Sync */ 423184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1a, 0)}, 424184610Salfred /* PocketPC USB Sync */ 425184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1b, 0)}, 426184610Salfred /* PocketPC USB Sync */ 427184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1c, 0)}, 428184610Salfred /* PocketPC USB Sync */ 429184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1d, 0)}, 430184610Salfred /* PocketPC USB Sync */ 431184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1e, 0)}, 432184610Salfred /* PocketPC USB Sync */ 433184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a1f, 0)}, 434184610Salfred /* PocketPC USB Sync */ 435184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a20, 0)}, 436184610Salfred /* PocketPC USB Sync */ 437184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a21, 0)}, 438184610Salfred /* PocketPC USB Sync */ 439184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a22, 0)}, 440184610Salfred /* PocketPC USB Sync */ 441184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a23, 0)}, 442184610Salfred /* PocketPC USB Sync */ 443184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a24, 0)}, 444184610Salfred /* PocketPC USB Sync */ 445184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a25, 0)}, 446184610Salfred /* PocketPC USB Sync */ 447184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a26, 0)}, 448184610Salfred /* PocketPC USB Sync */ 449184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a27, 0)}, 450184610Salfred /* PocketPC USB Sync */ 451184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a28, 0)}, 452184610Salfred /* PocketPC USB Sync */ 453184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a29, 0)}, 454184610Salfred /* PocketPC USB Sync */ 455184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2a, 0)}, 456184610Salfred /* PocketPC USB Sync */ 457184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2b, 0)}, 458184610Salfred /* PocketPC USB Sync */ 459184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2c, 0)}, 460184610Salfred /* PocketPC USB Sync */ 461184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2d, 0)}, 462184610Salfred /* PocketPC USB Sync */ 463184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2e, 0)}, 464184610Salfred /* PocketPC USB Sync */ 465184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a2f, 0)}, 466184610Salfred /* PocketPC USB Sync */ 467184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a30, 0)}, 468184610Salfred /* PocketPC USB Sync */ 469184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a31, 0)}, 470184610Salfred /* PocketPC USB Sync */ 471184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a32, 0)}, 472184610Salfred /* PocketPC USB Sync */ 473184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a33, 0)}, 474184610Salfred /* PocketPC USB Sync */ 475184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a34, 0)}, 476184610Salfred /* PocketPC USB Sync */ 477184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a35, 0)}, 478184610Salfred /* PocketPC USB Sync */ 479184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a36, 0)}, 480184610Salfred /* PocketPC USB Sync */ 481184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a37, 0)}, 482184610Salfred /* PocketPC USB Sync */ 483184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a38, 0)}, 484184610Salfred /* PocketPC USB Sync */ 485184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a39, 0)}, 486184610Salfred /* PocketPC USB Sync */ 487184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3a, 0)}, 488184610Salfred /* PocketPC USB Sync */ 489184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3b, 0)}, 490184610Salfred /* PocketPC USB Sync */ 491184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3c, 0)}, 492184610Salfred /* PocketPC USB Sync */ 493184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3d, 0)}, 494184610Salfred /* PocketPC USB Sync */ 495184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3e, 0)}, 496184610Salfred /* PocketPC USB Sync */ 497184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a3f, 0)}, 498184610Salfred /* PocketPC USB Sync */ 499184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a40, 0)}, 500184610Salfred /* PocketPC USB Sync */ 501184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a41, 0)}, 502184610Salfred /* PocketPC USB Sync */ 503184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a42, 0)}, 504184610Salfred /* PocketPC USB Sync */ 505184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a43, 0)}, 506184610Salfred /* PocketPC USB Sync */ 507184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a44, 0)}, 508184610Salfred /* PocketPC USB Sync */ 509184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a45, 0)}, 510184610Salfred /* PocketPC USB Sync */ 511184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a46, 0)}, 512184610Salfred /* PocketPC USB Sync */ 513184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a47, 0)}, 514184610Salfred /* PocketPC USB Sync */ 515184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a48, 0)}, 516184610Salfred /* PocketPC USB Sync */ 517184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a49, 0)}, 518184610Salfred /* PocketPC USB Sync */ 519184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4a, 0)}, 520184610Salfred /* PocketPC USB Sync */ 521184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4b, 0)}, 522184610Salfred /* PocketPC USB Sync */ 523184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4c, 0)}, 524184610Salfred /* PocketPC USB Sync */ 525184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4d, 0)}, 526184610Salfred /* PocketPC USB Sync */ 527184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4e, 0)}, 528184610Salfred /* PocketPC USB Sync */ 529184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a4f, 0)}, 530184610Salfred /* HTC SmartPhone USB Sync */ 531184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a50, 0)}, 532184610Salfred /* SmartPhone USB Sync */ 533184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a52, 0)}, 534184610Salfred /* SmartPhone USB Sync */ 535184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a53, 0)}, 536184610Salfred /* SmartPhone USB Sync */ 537184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a54, 0)}, 538184610Salfred /* SmartPhone USB Sync */ 539184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a55, 0)}, 540184610Salfred /* SmartPhone USB Sync */ 541184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a56, 0)}, 542184610Salfred /* SmartPhone USB Sync */ 543184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a57, 0)}, 544184610Salfred /* SmartPhone USB Sync */ 545184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a58, 0)}, 546184610Salfred /* SmartPhone USB Sync */ 547184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a59, 0)}, 548184610Salfred /* SmartPhone USB Sync */ 549184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5a, 0)}, 550184610Salfred /* SmartPhone USB Sync */ 551184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5b, 0)}, 552184610Salfred /* SmartPhone USB Sync */ 553184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5c, 0)}, 554184610Salfred /* SmartPhone USB Sync */ 555184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5d, 0)}, 556184610Salfred /* SmartPhone USB Sync */ 557184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5e, 0)}, 558184610Salfred /* SmartPhone USB Sync */ 559184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a5f, 0)}, 560184610Salfred /* SmartPhone USB Sync */ 561184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a60, 0)}, 562184610Salfred /* SmartPhone USB Sync */ 563184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a61, 0)}, 564184610Salfred /* SmartPhone USB Sync */ 565184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a62, 0)}, 566184610Salfred /* SmartPhone USB Sync */ 567184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a63, 0)}, 568184610Salfred /* SmartPhone USB Sync */ 569184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a64, 0)}, 570184610Salfred /* SmartPhone USB Sync */ 571184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a65, 0)}, 572184610Salfred /* SmartPhone USB Sync */ 573184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a66, 0)}, 574184610Salfred /* SmartPhone USB Sync */ 575184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a67, 0)}, 576184610Salfred /* SmartPhone USB Sync */ 577184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a68, 0)}, 578184610Salfred /* SmartPhone USB Sync */ 579184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a69, 0)}, 580184610Salfred /* SmartPhone USB Sync */ 581184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6a, 0)}, 582184610Salfred /* SmartPhone USB Sync */ 583184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6b, 0)}, 584184610Salfred /* SmartPhone USB Sync */ 585184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6c, 0)}, 586184610Salfred /* SmartPhone USB Sync */ 587184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6d, 0)}, 588184610Salfred /* SmartPhone USB Sync */ 589184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6e, 0)}, 590184610Salfred /* SmartPhone USB Sync */ 591184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a6f, 0)}, 592184610Salfred /* SmartPhone USB Sync */ 593184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a70, 0)}, 594184610Salfred /* SmartPhone USB Sync */ 595184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a71, 0)}, 596184610Salfred /* SmartPhone USB Sync */ 597184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a72, 0)}, 598184610Salfred /* SmartPhone USB Sync */ 599184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a73, 0)}, 600184610Salfred /* SmartPhone USB Sync */ 601184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a74, 0)}, 602184610Salfred /* SmartPhone USB Sync */ 603184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a75, 0)}, 604184610Salfred /* SmartPhone USB Sync */ 605184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a76, 0)}, 606184610Salfred /* SmartPhone USB Sync */ 607184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a77, 0)}, 608184610Salfred /* SmartPhone USB Sync */ 609184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a78, 0)}, 610184610Salfred /* SmartPhone USB Sync */ 611184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a79, 0)}, 612184610Salfred /* SmartPhone USB Sync */ 613184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7a, 0)}, 614184610Salfred /* SmartPhone USB Sync */ 615184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7b, 0)}, 616184610Salfred /* SmartPhone USB Sync */ 617184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7c, 0)}, 618184610Salfred /* SmartPhone USB Sync */ 619184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7d, 0)}, 620184610Salfred /* SmartPhone USB Sync */ 621184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7e, 0)}, 622184610Salfred /* SmartPhone USB Sync */ 623184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a7f, 0)}, 624184610Salfred /* SmartPhone USB Sync */ 625184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a80, 0)}, 626184610Salfred /* SmartPhone USB Sync */ 627184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a81, 0)}, 628184610Salfred /* SmartPhone USB Sync */ 629184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a82, 0)}, 630184610Salfred /* SmartPhone USB Sync */ 631184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a83, 0)}, 632184610Salfred /* SmartPhone USB Sync */ 633184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a84, 0)}, 634184610Salfred /* SmartPhone USB Sync */ 635184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a85, 0)}, 636184610Salfred /* SmartPhone USB Sync */ 637184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a86, 0)}, 638184610Salfred /* SmartPhone USB Sync */ 639184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a87, 0)}, 640184610Salfred /* SmartPhone USB Sync */ 641184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a88, 0)}, 642184610Salfred /* SmartPhone USB Sync */ 643184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a89, 0)}, 644184610Salfred /* SmartPhone USB Sync */ 645184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8a, 0)}, 646184610Salfred /* SmartPhone USB Sync */ 647184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8b, 0)}, 648184610Salfred /* SmartPhone USB Sync */ 649184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8c, 0)}, 650184610Salfred /* SmartPhone USB Sync */ 651184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8d, 0)}, 652184610Salfred /* SmartPhone USB Sync */ 653184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8e, 0)}, 654184610Salfred /* SmartPhone USB Sync */ 655184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a8f, 0)}, 656184610Salfred /* SmartPhone USB Sync */ 657184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a90, 0)}, 658184610Salfred /* SmartPhone USB Sync */ 659184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a91, 0)}, 660184610Salfred /* SmartPhone USB Sync */ 661184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a92, 0)}, 662184610Salfred /* SmartPhone USB Sync */ 663184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a93, 0)}, 664184610Salfred /* SmartPhone USB Sync */ 665184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a94, 0)}, 666184610Salfred /* SmartPhone USB Sync */ 667184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a95, 0)}, 668184610Salfred /* SmartPhone USB Sync */ 669184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a96, 0)}, 670184610Salfred /* SmartPhone USB Sync */ 671184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a97, 0)}, 672184610Salfred /* SmartPhone USB Sync */ 673184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a98, 0)}, 674184610Salfred /* SmartPhone USB Sync */ 675184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a99, 0)}, 676184610Salfred /* SmartPhone USB Sync */ 677184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9a, 0)}, 678184610Salfred /* SmartPhone USB Sync */ 679184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9b, 0)}, 680184610Salfred /* SmartPhone USB Sync */ 681184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9c, 0)}, 682184610Salfred /* SmartPhone USB Sync */ 683184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9d, 0)}, 684184610Salfred /* SmartPhone USB Sync */ 685184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9e, 0)}, 686184610Salfred /* SmartPhone USB Sync */ 687184610Salfred {USB_VPI(USB_VENDOR_HTC, 0x0a9f, 0)}, 688184610Salfred /**/ 689184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM, 0)}, 690184610Salfred /**/ 691184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE, 0)}, 692184610Salfred /**/ 693184610Salfred {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_WINMOBILE, 0)}, 694210469Sgavin /* High Tech Computer Wizard Smartphone */ 695210469Sgavin {USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_WIZARD, 0)}, 696184610Salfred /* JVC USB Sync */ 697184610Salfred {USB_VPI(USB_VENDOR_JVC, 0x3011, 0)}, 698184610Salfred /* JVC USB Sync */ 699184610Salfred {USB_VPI(USB_VENDOR_JVC, 0x3012, 0)}, 700184610Salfred /* LGE USB Sync */ 701184610Salfred {USB_VPI(USB_VENDOR_LG, 0x9c01, 0)}, 702184610Salfred /* Microsoft USB Sync */ 703184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x00ce, 0)}, 704184610Salfred /* Windows Pocket PC 2002 */ 705184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0400, 0)}, 706184610Salfred /* Windows Pocket PC 2002 */ 707184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0401, 0)}, 708184610Salfred /* Windows Pocket PC 2002 */ 709184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0402, 0)}, 710184610Salfred /* Windows Pocket PC 2002 */ 711184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0403, 0)}, 712184610Salfred /* Windows Pocket PC 2002 */ 713184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0404, 0)}, 714184610Salfred /* Windows Pocket PC 2002 */ 715184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0405, 0)}, 716184610Salfred /* Windows Pocket PC 2002 */ 717184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0406, 0)}, 718184610Salfred /* Windows Pocket PC 2002 */ 719184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0407, 0)}, 720184610Salfred /* Windows Pocket PC 2002 */ 721184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0408, 0)}, 722184610Salfred /* Windows Pocket PC 2002 */ 723184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0409, 0)}, 724184610Salfred /* Windows Pocket PC 2002 */ 725184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040a, 0)}, 726184610Salfred /* Windows Pocket PC 2002 */ 727184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040b, 0)}, 728184610Salfred /* Windows Pocket PC 2002 */ 729184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040c, 0)}, 730184610Salfred /* Windows Pocket PC 2002 */ 731184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040d, 0)}, 732184610Salfred /* Windows Pocket PC 2002 */ 733184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040e, 0)}, 734184610Salfred /* Windows Pocket PC 2002 */ 735184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x040f, 0)}, 736184610Salfred /* Windows Pocket PC 2002 */ 737184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0410, 0)}, 738184610Salfred /* Windows Pocket PC 2002 */ 739184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0411, 0)}, 740184610Salfred /* Windows Pocket PC 2002 */ 741184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0412, 0)}, 742184610Salfred /* Windows Pocket PC 2002 */ 743184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0413, 0)}, 744184610Salfred /* Windows Pocket PC 2002 */ 745184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0414, 0)}, 746184610Salfred /* Windows Pocket PC 2002 */ 747184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0415, 0)}, 748184610Salfred /* Windows Pocket PC 2002 */ 749184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0416, 0)}, 750184610Salfred /* Windows Pocket PC 2002 */ 751184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0417, 0)}, 752184610Salfred /* Windows Pocket PC 2003 */ 753184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0432, 0)}, 754184610Salfred /* Windows Pocket PC 2003 */ 755184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0433, 0)}, 756184610Salfred /* Windows Pocket PC 2003 */ 757184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0434, 0)}, 758184610Salfred /* Windows Pocket PC 2003 */ 759184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0435, 0)}, 760184610Salfred /* Windows Pocket PC 2003 */ 761184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0436, 0)}, 762184610Salfred /* Windows Pocket PC 2003 */ 763184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0437, 0)}, 764184610Salfred /* Windows Pocket PC 2003 */ 765184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0438, 0)}, 766184610Salfred /* Windows Pocket PC 2003 */ 767184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0439, 0)}, 768184610Salfred /* Windows Pocket PC 2003 */ 769184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043a, 0)}, 770184610Salfred /* Windows Pocket PC 2003 */ 771184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043b, 0)}, 772184610Salfred /* Windows Pocket PC 2003 */ 773184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043c, 0)}, 774184610Salfred /* Windows Pocket PC 2003 */ 775184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043d, 0)}, 776184610Salfred /* Windows Pocket PC 2003 */ 777184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043e, 0)}, 778184610Salfred /* Windows Pocket PC 2003 */ 779184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x043f, 0)}, 780184610Salfred /* Windows Pocket PC 2003 */ 781184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0440, 0)}, 782184610Salfred /* Windows Pocket PC 2003 */ 783184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0441, 0)}, 784184610Salfred /* Windows Pocket PC 2003 */ 785184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0442, 0)}, 786184610Salfred /* Windows Pocket PC 2003 */ 787184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0443, 0)}, 788184610Salfred /* Windows Pocket PC 2003 */ 789184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0444, 0)}, 790184610Salfred /* Windows Pocket PC 2003 */ 791184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0445, 0)}, 792184610Salfred /* Windows Pocket PC 2003 */ 793184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0446, 0)}, 794184610Salfred /* Windows Pocket PC 2003 */ 795184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0447, 0)}, 796184610Salfred /* Windows Pocket PC 2003 */ 797184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0448, 0)}, 798184610Salfred /* Windows Pocket PC 2003 */ 799184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0449, 0)}, 800184610Salfred /* Windows Pocket PC 2003 */ 801184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044a, 0)}, 802184610Salfred /* Windows Pocket PC 2003 */ 803184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044b, 0)}, 804184610Salfred /* Windows Pocket PC 2003 */ 805184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044c, 0)}, 806184610Salfred /* Windows Pocket PC 2003 */ 807184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044d, 0)}, 808184610Salfred /* Windows Pocket PC 2003 */ 809184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044e, 0)}, 810184610Salfred /* Windows Pocket PC 2003 */ 811184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x044f, 0)}, 812184610Salfred /* Windows Pocket PC 2003 */ 813184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0450, 0)}, 814184610Salfred /* Windows Pocket PC 2003 */ 815184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0451, 0)}, 816184610Salfred /* Windows Pocket PC 2003 */ 817184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0452, 0)}, 818184610Salfred /* Windows Pocket PC 2003 */ 819184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0453, 0)}, 820184610Salfred /* Windows Pocket PC 2003 */ 821184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0454, 0)}, 822184610Salfred /* Windows Pocket PC 2003 */ 823184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0455, 0)}, 824184610Salfred /* Windows Pocket PC 2003 */ 825184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0456, 0)}, 826184610Salfred /* Windows Pocket PC 2003 */ 827184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0457, 0)}, 828184610Salfred /* Windows Pocket PC 2003 */ 829184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0458, 0)}, 830184610Salfred /* Windows Pocket PC 2003 */ 831184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0459, 0)}, 832184610Salfred /* Windows Pocket PC 2003 */ 833184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045a, 0)}, 834184610Salfred /* Windows Pocket PC 2003 */ 835184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045b, 0)}, 836184610Salfred /* Windows Pocket PC 2003 */ 837184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045c, 0)}, 838184610Salfred /* Windows Pocket PC 2003 */ 839184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045d, 0)}, 840184610Salfred /* Windows Pocket PC 2003 */ 841184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045e, 0)}, 842184610Salfred /* Windows Pocket PC 2003 */ 843184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x045f, 0)}, 844184610Salfred /* Windows Pocket PC 2003 */ 845184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0460, 0)}, 846184610Salfred /* Windows Pocket PC 2003 */ 847184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0461, 0)}, 848184610Salfred /* Windows Pocket PC 2003 */ 849184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0462, 0)}, 850184610Salfred /* Windows Pocket PC 2003 */ 851184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0463, 0)}, 852184610Salfred /* Windows Pocket PC 2003 */ 853184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0464, 0)}, 854184610Salfred /* Windows Pocket PC 2003 */ 855184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0465, 0)}, 856184610Salfred /* Windows Pocket PC 2003 */ 857184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0466, 0)}, 858184610Salfred /* Windows Pocket PC 2003 */ 859184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0467, 0)}, 860184610Salfred /* Windows Pocket PC 2003 */ 861184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0468, 0)}, 862184610Salfred /* Windows Pocket PC 2003 */ 863184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0469, 0)}, 864184610Salfred /* Windows Pocket PC 2003 */ 865184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046a, 0)}, 866184610Salfred /* Windows Pocket PC 2003 */ 867184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046b, 0)}, 868184610Salfred /* Windows Pocket PC 2003 */ 869184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046c, 0)}, 870184610Salfred /* Windows Pocket PC 2003 */ 871184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046d, 0)}, 872184610Salfred /* Windows Pocket PC 2003 */ 873184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046e, 0)}, 874184610Salfred /* Windows Pocket PC 2003 */ 875184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x046f, 0)}, 876184610Salfred /* Windows Pocket PC 2003 */ 877184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0470, 0)}, 878184610Salfred /* Windows Pocket PC 2003 */ 879184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0471, 0)}, 880184610Salfred /* Windows Pocket PC 2003 */ 881184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0472, 0)}, 882184610Salfred /* Windows Pocket PC 2003 */ 883184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0473, 0)}, 884184610Salfred /* Windows Pocket PC 2003 */ 885184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0474, 0)}, 886184610Salfred /* Windows Pocket PC 2003 */ 887184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0475, 0)}, 888184610Salfred /* Windows Pocket PC 2003 */ 889184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0476, 0)}, 890184610Salfred /* Windows Pocket PC 2003 */ 891184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0477, 0)}, 892184610Salfred /* Windows Pocket PC 2003 */ 893184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0478, 0)}, 894184610Salfred /* Windows Pocket PC 2003 */ 895184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x0479, 0)}, 896184610Salfred /* Windows Pocket PC 2003 */ 897184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x047a, 0)}, 898184610Salfred /* Windows Pocket PC 2003 */ 899184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x047b, 0)}, 900184610Salfred /* Windows Smartphone 2002 */ 901184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c8, 0)}, 902184610Salfred /* Windows Smartphone 2002 */ 903184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04c9, 0)}, 904184610Salfred /* Windows Smartphone 2002 */ 905184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ca, 0)}, 906184610Salfred /* Windows Smartphone 2002 */ 907184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cb, 0)}, 908184610Salfred /* Windows Smartphone 2002 */ 909184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cc, 0)}, 910184610Salfred /* Windows Smartphone 2002 */ 911184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04cd, 0)}, 912184610Salfred /* Windows Smartphone 2002 */ 913184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ce, 0)}, 914184610Salfred /* Windows Smartphone 2003 */ 915184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d7, 0)}, 916184610Salfred /* Windows Smartphone 2003 */ 917184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d8, 0)}, 918184610Salfred /* Windows Smartphone 2003 */ 919184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04d9, 0)}, 920184610Salfred /* Windows Smartphone 2003 */ 921184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04da, 0)}, 922184610Salfred /* Windows Smartphone 2003 */ 923184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04db, 0)}, 924184610Salfred /* Windows Smartphone 2003 */ 925184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dc, 0)}, 926184610Salfred /* Windows Smartphone 2003 */ 927184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04dd, 0)}, 928184610Salfred /* Windows Smartphone 2003 */ 929184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04de, 0)}, 930184610Salfred /* Windows Smartphone 2003 */ 931184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04df, 0)}, 932184610Salfred /* Windows Smartphone 2003 */ 933184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e0, 0)}, 934184610Salfred /* Windows Smartphone 2003 */ 935184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e1, 0)}, 936184610Salfred /* Windows Smartphone 2003 */ 937184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e2, 0)}, 938184610Salfred /* Windows Smartphone 2003 */ 939184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e3, 0)}, 940184610Salfred /* Windows Smartphone 2003 */ 941184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e4, 0)}, 942184610Salfred /* Windows Smartphone 2003 */ 943184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e5, 0)}, 944184610Salfred /* Windows Smartphone 2003 */ 945184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e6, 0)}, 946184610Salfred /* Windows Smartphone 2003 */ 947184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e7, 0)}, 948184610Salfred /* Windows Smartphone 2003 */ 949184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e8, 0)}, 950184610Salfred /* Windows Smartphone 2003 */ 951184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04e9, 0)}, 952184610Salfred /* Windows Smartphone 2003 */ 953184610Salfred {USB_VPI(USB_VENDOR_MICROSOFT, 0x04ea, 0)}, 954184610Salfred /* Motorola MPx200 Smartphone */ 955184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4204, 0)}, 956184610Salfred /* Motorola MPc GSM */ 957184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4214, 0)}, 958184610Salfred /* Motorola MPx220 Smartphone */ 959184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4224, 0)}, 960184610Salfred /* Motorola MPc CDMA */ 961184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4234, 0)}, 962184610Salfred /* Motorola MPx100 Smartphone */ 963184610Salfred {USB_VPI(USB_VENDOR_MOTOROLA2, 0x4244, 0)}, 964184610Salfred /* NEC USB Sync */ 965184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d5, 0)}, 966184610Salfred /* NEC USB Sync */ 967184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d6, 0)}, 968184610Salfred /* NEC USB Sync */ 969184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x00d7, 0)}, 970184610Salfred /* NEC USB Sync */ 971184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x8024, 0)}, 972184610Salfred /* NEC USB Sync */ 973184610Salfred {USB_VPI(USB_VENDOR_NEC, 0x8025, 0)}, 974184610Salfred /* Panasonic USB Sync */ 975184610Salfred {USB_VPI(USB_VENDOR_PANASONIC, 0x2500, 0)}, 976184610Salfred /* Samsung NEXiO USB Sync */ 977184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f00, 0)}, 978184610Salfred /* Samsung NEXiO USB Sync */ 979184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f01, 0)}, 980184610Salfred /* Samsung NEXiO USB Sync */ 981184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f02, 0)}, 982184610Salfred /* Samsung NEXiO USB Sync */ 983184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f03, 0)}, 984184610Salfred /* Samsung NEXiO USB Sync */ 985184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x5f04, 0)}, 986184610Salfred /* Samsung MITs USB Sync */ 987184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6611, 0)}, 988184610Salfred /* Samsung MITs USB Sync */ 989184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6613, 0)}, 990184610Salfred /* Samsung MITs USB Sync */ 991184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6615, 0)}, 992184610Salfred /* Samsung MITs USB Sync */ 993184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6617, 0)}, 994184610Salfred /* Samsung MITs USB Sync */ 995184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6619, 0)}, 996184610Salfred /* Samsung MITs USB Sync */ 997184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x661b, 0)}, 998184610Salfred /* Samsung MITs USB Sync */ 999184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x662e, 0)}, 1000184610Salfred /* Samsung MITs USB Sync */ 1001184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6630, 0)}, 1002184610Salfred /* Samsung MITs USB Sync */ 1003184610Salfred {USB_VPI(USB_VENDOR_SAMSUNG, 0x6632, 0)}, 1004184610Salfred /* SHARP WS003SH USB Modem */ 1005184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9102, 0)}, 1006184610Salfred /* SHARP WS004SH USB Modem */ 1007184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9121, 0)}, 1008184610Salfred /* SHARP S01SH USB Modem */ 1009184610Salfred {USB_VPI(USB_VENDOR_SHARP, 0x9151, 0)}, 1010192557Sthompsa /**/ 1011184610Salfred {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ES, 0)}, 1012192557Sthompsa /**/ 1013201318Sthompsa {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ADES, 0)}, 1014201318Sthompsa /**/ 1015192557Sthompsa {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WILLCOM03, 0)}, 1016184610Salfred /* Symbol USB Sync */ 1017184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2000, 0)}, 1018184610Salfred /* Symbol USB Sync 0x2001 */ 1019184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2001, 0)}, 1020184610Salfred /* Symbol USB Sync 0x2002 */ 1021184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2002, 0)}, 1022184610Salfred /* Symbol USB Sync 0x2003 */ 1023184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2003, 0)}, 1024184610Salfred /* Symbol USB Sync 0x2004 */ 1025184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2004, 0)}, 1026184610Salfred /* Symbol USB Sync 0x2005 */ 1027184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2005, 0)}, 1028184610Salfred /* Symbol USB Sync 0x2006 */ 1029184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2006, 0)}, 1030184610Salfred /* Symbol USB Sync 0x2007 */ 1031184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2007, 0)}, 1032184610Salfred /* Symbol USB Sync 0x2008 */ 1033184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2008, 0)}, 1034184610Salfred /* Symbol USB Sync 0x2009 */ 1035184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x2009, 0)}, 1036184610Salfred /* Symbol USB Sync 0x200a */ 1037184610Salfred {USB_VPI(USB_VENDOR_SYMBOL, 0x200a, 0)}, 1038184610Salfred /* TOSHIBA USB Sync 0700 */ 1039184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0700, 0)}, 1040184610Salfred /* TOSHIBA Pocket PC e310 */ 1041184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0705, 0)}, 1042184610Salfred /* TOSHIBA Pocket PC e330 Series */ 1043184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0707, 0)}, 1044184610Salfred /* TOSHIBA Pocket PC e350Series */ 1045184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0708, 0)}, 1046184610Salfred /* TOSHIBA Pocket PC e750 Series */ 1047184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x0709, 0)}, 1048184610Salfred /* TOSHIBA Pocket PC e400 Series */ 1049184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x070a, 0)}, 1050184610Salfred /* TOSHIBA Pocket PC e800 Series */ 1051184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, 0x070b, 0)}, 1052184610Salfred /* TOSHIBA Pocket PC e740 */ 1053184610Salfred {USB_VPI(USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_POCKETPC_E740, 0)}, 1054184610Salfred /* ViewSonic Color Pocket PC V35 */ 1055184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x0ed9, 0)}, 1056184610Salfred /* ViewSonic Color Pocket PC V36 */ 1057184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1527, 0)}, 1058184610Salfred /* ViewSonic Color Pocket PC V37 */ 1059184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1529, 0)}, 1060184610Salfred /* ViewSonic Color Pocket PC V38 */ 1061184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152b, 0)}, 1062184610Salfred /* ViewSonic Pocket PC */ 1063184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x152e, 0)}, 1064184610Salfred /* ViewSonic Communicator Pocket PC */ 1065184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1921, 0)}, 1066184610Salfred /* ViewSonic Smartphone */ 1067184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1922, 0)}, 1068184610Salfred /* ViewSonic Pocket PC V30 */ 1069184610Salfred {USB_VPI(USB_VENDOR_VIEWSONIC, 0x1923, 0)}, 1070184610Salfred}; 1071184610Salfred 1072184610Salfredstatic device_method_t uipaq_methods[] = { 1073184610Salfred DEVMETHOD(device_probe, uipaq_probe), 1074184610Salfred DEVMETHOD(device_attach, uipaq_attach), 1075184610Salfred DEVMETHOD(device_detach, uipaq_detach), 1076239180Shselasky DEVMETHOD_END 1077184610Salfred}; 1078184610Salfred 1079184610Salfredstatic devclass_t uipaq_devclass; 1080184610Salfred 1081184610Salfredstatic driver_t uipaq_driver = { 1082184610Salfred .name = "uipaq", 1083184610Salfred .methods = uipaq_methods, 1084184610Salfred .size = sizeof(struct uipaq_softc), 1085184610Salfred}; 1086184610Salfred 1087189275SthompsaDRIVER_MODULE(uipaq, uhub, uipaq_driver, uipaq_devclass, NULL, 0); 1088188942SthompsaMODULE_DEPEND(uipaq, ucom, 1, 1, 1); 1089188942SthompsaMODULE_DEPEND(uipaq, usb, 1, 1, 1); 1090212122SthompsaMODULE_VERSION(uipaq, 1); 1091292080SimpUSB_PNP_HOST_INFO(uipaq_devs); 1092184610Salfred 1093184610Salfredstatic int 1094184610Salfreduipaq_probe(device_t dev) 1095184610Salfred{ 1096192984Sthompsa struct usb_attach_arg *uaa = device_get_ivars(dev); 1097184610Salfred 1098192499Sthompsa if (uaa->usb_mode != USB_MODE_HOST) { 1099184610Salfred return (ENXIO); 1100184610Salfred } 1101184610Salfred if (uaa->info.bConfigIndex != UIPAQ_CONFIG_INDEX) { 1102184610Salfred return (ENXIO); 1103184610Salfred } 1104184610Salfred if (uaa->info.bIfaceIndex != UIPAQ_IFACE_INDEX) { 1105184610Salfred return (ENXIO); 1106184610Salfred } 1107196493Salfred if (uaa->info.bInterfaceClass == UICLASS_IAD) { 1108196493Salfred DPRINTF("IAD detected - not UIPAQ serial device\n"); 1109196493Salfred return (ENXIO); 1110196493Salfred } 1111194228Sthompsa return (usbd_lookup_id_by_uaa(uipaq_devs, sizeof(uipaq_devs), uaa)); 1112184610Salfred} 1113184610Salfred 1114184610Salfredstatic int 1115184610Salfreduipaq_attach(device_t dev) 1116184610Salfred{ 1117192984Sthompsa struct usb_device_request req; 1118192984Sthompsa struct usb_attach_arg *uaa = device_get_ivars(dev); 1119184610Salfred struct uipaq_softc *sc = device_get_softc(dev); 1120184610Salfred int error; 1121184610Salfred uint8_t iface_index; 1122184610Salfred uint8_t i; 1123184610Salfred 1124184610Salfred sc->sc_udev = uaa->device; 1125184610Salfred 1126194228Sthompsa device_set_usb_desc(dev); 1127189265Sthompsa mtx_init(&sc->sc_mtx, "uipaq", NULL, MTX_DEF); 1128239180Shselasky ucom_ref(&sc->sc_super_ucom); 1129184610Salfred 1130184610Salfred /* 1131184610Salfred * Send magic bytes, cribbed from Linux ipaq driver that 1132184610Salfred * claims to have sniffed them from Win98. Wait for driver to 1133184610Salfred * become ready on device side? 1134184610Salfred */ 1135184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1136184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1137184610Salfred USETW(req.wValue, UCDC_LINE_DTR); 1138184610Salfred USETW(req.wIndex, 0x0); 1139184610Salfred USETW(req.wLength, 0); 1140184610Salfred for (i = 0; i != 64; i++) { 1141184610Salfred error = 1142194228Sthompsa usbd_do_request_flags(uaa->device, NULL, &req, 1143184610Salfred NULL, 0, NULL, 100); 1144184610Salfred if (error == 0) 1145184610Salfred break; 1146194228Sthompsa usb_pause_mtx(NULL, hz / 10); 1147184610Salfred } 1148184610Salfred 1149184610Salfred iface_index = UIPAQ_IFACE_INDEX; 1150194228Sthompsa error = usbd_transfer_setup(uaa->device, &iface_index, 1151187259Sthompsa sc->sc_xfer, uipaq_config_data, 1152189265Sthompsa UIPAQ_N_TRANSFER, sc, &sc->sc_mtx); 1153184610Salfred 1154184610Salfred if (error) { 1155184610Salfred goto detach; 1156184610Salfred } 1157184610Salfred /* clear stall at first run */ 1158189265Sthompsa mtx_lock(&sc->sc_mtx); 1159194677Sthompsa usbd_xfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1160194677Sthompsa usbd_xfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1161189265Sthompsa mtx_unlock(&sc->sc_mtx); 1162184610Salfred 1163194228Sthompsa error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, 1164189265Sthompsa &uipaq_callback, &sc->sc_mtx); 1165184610Salfred if (error) { 1166184610Salfred goto detach; 1167184610Salfred } 1168214843Sn_hibma ucom_set_pnpinfo_usb(&sc->sc_super_ucom, dev); 1169214843Sn_hibma 1170184610Salfred return (0); 1171184610Salfred 1172184610Salfreddetach: 1173184610Salfred uipaq_detach(dev); 1174184610Salfred return (ENXIO); 1175184610Salfred} 1176184610Salfred 1177184610Salfredint 1178184610Salfreduipaq_detach(device_t dev) 1179184610Salfred{ 1180184610Salfred struct uipaq_softc *sc = device_get_softc(dev); 1181184610Salfred 1182214761Sn_hibma ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); 1183194228Sthompsa usbd_transfer_unsetup(sc->sc_xfer, UIPAQ_N_TRANSFER); 1184184610Salfred 1185239299Shselasky device_claim_softc(dev); 1186239299Shselasky 1187239299Shselasky uipaq_free_softc(sc); 1188239299Shselasky 1189184610Salfred return (0); 1190184610Salfred} 1191184610Salfred 1192239180ShselaskyUCOM_UNLOAD_DRAIN(uipaq); 1193239180Shselasky 1194184610Salfredstatic void 1195239299Shselaskyuipaq_free_softc(struct uipaq_softc *sc) 1196239180Shselasky{ 1197239180Shselasky if (ucom_unref(&sc->sc_super_ucom)) { 1198239299Shselasky mtx_destroy(&sc->sc_mtx); 1199239299Shselasky device_free_softc(sc); 1200239180Shselasky } 1201239180Shselasky} 1202239180Shselasky 1203239180Shselaskystatic void 1204239180Shselaskyuipaq_free(struct ucom_softc *ucom) 1205239180Shselasky{ 1206239299Shselasky uipaq_free_softc(ucom->sc_parent); 1207239180Shselasky} 1208239180Shselasky 1209239180Shselaskystatic void 1210192984Sthompsauipaq_start_read(struct ucom_softc *ucom) 1211184610Salfred{ 1212184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1213184610Salfred 1214184610Salfred /* start read endpoint */ 1215194228Sthompsa usbd_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1216184610Salfred} 1217184610Salfred 1218184610Salfredstatic void 1219192984Sthompsauipaq_stop_read(struct ucom_softc *ucom) 1220184610Salfred{ 1221184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1222184610Salfred 1223184610Salfred /* stop read endpoint */ 1224194228Sthompsa usbd_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_RD]); 1225184610Salfred} 1226184610Salfred 1227184610Salfredstatic void 1228192984Sthompsauipaq_start_write(struct ucom_softc *ucom) 1229184610Salfred{ 1230184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1231184610Salfred 1232194228Sthompsa usbd_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1233184610Salfred} 1234184610Salfred 1235184610Salfredstatic void 1236192984Sthompsauipaq_stop_write(struct ucom_softc *ucom) 1237184610Salfred{ 1238184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1239184610Salfred 1240194228Sthompsa usbd_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_WR]); 1241184610Salfred} 1242184610Salfred 1243184610Salfredstatic void 1244192984Sthompsauipaq_cfg_set_dtr(struct ucom_softc *ucom, uint8_t onoff) 1245184610Salfred{ 1246184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1247192984Sthompsa struct usb_device_request req; 1248184610Salfred 1249184610Salfred DPRINTF("onoff=%d\n", onoff); 1250184610Salfred 1251184610Salfred if (onoff) 1252184610Salfred sc->sc_line |= UCDC_LINE_DTR; 1253184610Salfred else 1254184610Salfred sc->sc_line &= ~UCDC_LINE_DTR; 1255184610Salfred 1256184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1257184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1258184610Salfred USETW(req.wValue, sc->sc_line); 1259184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1260184610Salfred req.wIndex[1] = 0; 1261184610Salfred USETW(req.wLength, 0); 1262184610Salfred 1263194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1264188413Sthompsa &req, NULL, 0, 1000); 1265184610Salfred} 1266184610Salfred 1267184610Salfredstatic void 1268192984Sthompsauipaq_cfg_set_rts(struct ucom_softc *ucom, uint8_t onoff) 1269184610Salfred{ 1270184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1271192984Sthompsa struct usb_device_request req; 1272184610Salfred 1273184610Salfred DPRINTF("onoff=%d\n", onoff); 1274184610Salfred 1275184610Salfred if (onoff) 1276184610Salfred sc->sc_line |= UCDC_LINE_RTS; 1277184610Salfred else 1278184610Salfred sc->sc_line &= ~UCDC_LINE_RTS; 1279184610Salfred 1280184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1281184610Salfred req.bRequest = UCDC_SET_CONTROL_LINE_STATE; 1282184610Salfred USETW(req.wValue, sc->sc_line); 1283184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1284184610Salfred req.wIndex[1] = 0; 1285184610Salfred USETW(req.wLength, 0); 1286184610Salfred 1287194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1288188413Sthompsa &req, NULL, 0, 1000); 1289184610Salfred} 1290184610Salfred 1291184610Salfredstatic void 1292192984Sthompsauipaq_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff) 1293184610Salfred{ 1294184610Salfred struct uipaq_softc *sc = ucom->sc_parent; 1295192984Sthompsa struct usb_device_request req; 1296184610Salfred uint16_t temp; 1297184610Salfred 1298184610Salfred temp = onoff ? UCDC_BREAK_ON : UCDC_BREAK_OFF; 1299184610Salfred 1300184610Salfred req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1301184610Salfred req.bRequest = UCDC_SEND_BREAK; 1302184610Salfred USETW(req.wValue, temp); 1303184610Salfred req.wIndex[0] = UIPAQ_IFACE_INDEX; 1304184610Salfred req.wIndex[1] = 0; 1305184610Salfred USETW(req.wLength, 0); 1306184610Salfred 1307194228Sthompsa ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, 1308188413Sthompsa &req, NULL, 0, 1000); 1309184610Salfred} 1310184610Salfred 1311184610Salfredstatic void 1312194677Sthompsauipaq_write_callback(struct usb_xfer *xfer, usb_error_t error) 1313184610Salfred{ 1314194677Sthompsa struct uipaq_softc *sc = usbd_xfer_softc(xfer); 1315194677Sthompsa struct usb_page_cache *pc; 1316184610Salfred uint32_t actlen; 1317184610Salfred 1318184610Salfred switch (USB_GET_STATE(xfer)) { 1319184610Salfred case USB_ST_SETUP: 1320184610Salfred case USB_ST_TRANSFERRED: 1321188413Sthompsatr_setup: 1322194677Sthompsa pc = usbd_xfer_get_frame(xfer, 0); 1323194677Sthompsa if (ucom_get_data(&sc->sc_ucom, pc, 0, 1324184610Salfred UIPAQ_BUF_SIZE, &actlen)) { 1325194677Sthompsa usbd_xfer_set_frame_len(xfer, 0, actlen); 1326194228Sthompsa usbd_transfer_submit(xfer); 1327184610Salfred } 1328184610Salfred return; 1329184610Salfred 1330184610Salfred default: /* Error */ 1331194677Sthompsa if (error != USB_ERR_CANCELLED) { 1332188413Sthompsa /* try to clear stall first */ 1333194677Sthompsa usbd_xfer_set_stall(xfer); 1334188413Sthompsa goto tr_setup; 1335184610Salfred } 1336184610Salfred return; 1337184610Salfred } 1338184610Salfred} 1339184610Salfred 1340184610Salfredstatic void 1341194677Sthompsauipaq_read_callback(struct usb_xfer *xfer, usb_error_t error) 1342184610Salfred{ 1343194677Sthompsa struct uipaq_softc *sc = usbd_xfer_softc(xfer); 1344194677Sthompsa struct usb_page_cache *pc; 1345194677Sthompsa int actlen; 1346184610Salfred 1347194677Sthompsa usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL); 1348194677Sthompsa 1349184610Salfred switch (USB_GET_STATE(xfer)) { 1350184610Salfred case USB_ST_TRANSFERRED: 1351194677Sthompsa pc = usbd_xfer_get_frame(xfer, 0); 1352194677Sthompsa ucom_put_data(&sc->sc_ucom, pc, 0, actlen); 1353184610Salfred 1354184610Salfred case USB_ST_SETUP: 1355188413Sthompsatr_setup: 1356194677Sthompsa usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer)); 1357194228Sthompsa usbd_transfer_submit(xfer); 1358184610Salfred return; 1359184610Salfred 1360184610Salfred default: /* Error */ 1361194677Sthompsa if (error != USB_ERR_CANCELLED) { 1362188413Sthompsa /* try to clear stall first */ 1363194677Sthompsa usbd_xfer_set_stall(xfer); 1364188413Sthompsa goto tr_setup; 1365184610Salfred } 1366184610Salfred return; 1367184610Salfred } 1368184610Salfred} 1369197570Sthompsa 1370197570Sthompsastatic void 1371197570Sthompsauipaq_poll(struct ucom_softc *ucom) 1372197570Sthompsa{ 1373197570Sthompsa struct uipaq_softc *sc = ucom->sc_parent; 1374197570Sthompsa usbd_transfer_poll(sc->sc_xfer, UIPAQ_N_TRANSFER); 1375197570Sthompsa} 1376