uipaq.c revision 190734
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 190734 2009-04-05 18:20:38Z thompsa $");
53184610Salfred
54188746Sthompsa#include "usbdevs.h"
55188942Sthompsa#include <dev/usb/usb.h>
56188942Sthompsa#include <dev/usb/usb_mfunc.h>
57188942Sthompsa#include <dev/usb/usb_error.h>
58188942Sthompsa#include <dev/usb/usb_cdc.h>
59184610Salfred
60184610Salfred#define	USB_DEBUG_VAR usb2_debug
61184610Salfred
62188942Sthompsa#include <dev/usb/usb_core.h>
63188942Sthompsa#include <dev/usb/usb_debug.h>
64188942Sthompsa#include <dev/usb/usb_process.h>
65188942Sthompsa#include <dev/usb/usb_request.h>
66188942Sthompsa#include <dev/usb/usb_lookup.h>
67188942Sthompsa#include <dev/usb/usb_util.h>
68188942Sthompsa#include <dev/usb/usb_busdma.h>
69184610Salfred
70188942Sthompsa#include <dev/usb/serial/usb_serial.h>
71184610Salfred
72184610Salfred#define	UIPAQ_CONFIG_INDEX	0	/* config number 1 */
73184610Salfred#define	UIPAQ_IFACE_INDEX	0
74184610Salfred
75184610Salfred#define	UIPAQ_BUF_SIZE		1024
76184610Salfred
77187259Sthompsaenum {
78187259Sthompsa	UIPAQ_BULK_DT_WR,
79187259Sthompsa	UIPAQ_BULK_DT_RD,
80188413Sthompsa	UIPAQ_N_TRANSFER,
81187259Sthompsa};
82187259Sthompsa
83184610Salfredstruct uipaq_softc {
84184610Salfred	struct usb2_com_super_softc sc_super_ucom;
85184610Salfred	struct usb2_com_softc sc_ucom;
86184610Salfred
87187259Sthompsa	struct usb2_xfer *sc_xfer[UIPAQ_N_TRANSFER];
88184610Salfred	struct usb2_device *sc_udev;
89189265Sthompsa	struct mtx sc_mtx;
90184610Salfred
91184610Salfred	uint16_t sc_line;
92184610Salfred
93184610Salfred	uint8_t	sc_lsr;			/* local status register */
94184610Salfred	uint8_t	sc_msr;			/* modem status register */
95184610Salfred};
96184610Salfred
97184610Salfredstatic device_probe_t uipaq_probe;
98184610Salfredstatic device_attach_t uipaq_attach;
99184610Salfredstatic device_detach_t uipaq_detach;
100184610Salfred
101184610Salfredstatic usb2_callback_t uipaq_write_callback;
102184610Salfredstatic usb2_callback_t uipaq_read_callback;
103184610Salfred
104185948Sthompsastatic void	uipaq_start_read(struct usb2_com_softc *);
105185948Sthompsastatic void	uipaq_stop_read(struct usb2_com_softc *);
106185948Sthompsastatic void	uipaq_start_write(struct usb2_com_softc *);
107185948Sthompsastatic void	uipaq_stop_write(struct usb2_com_softc *);
108185948Sthompsastatic void	uipaq_cfg_set_dtr(struct usb2_com_softc *, uint8_t);
109185948Sthompsastatic void	uipaq_cfg_set_rts(struct usb2_com_softc *, uint8_t);
110185948Sthompsastatic void	uipaq_cfg_set_break(struct usb2_com_softc *, uint8_t);
111184610Salfred
112187259Sthompsastatic const struct usb2_config uipaq_config_data[UIPAQ_N_TRANSFER] = {
113184610Salfred
114187259Sthompsa	[UIPAQ_BULK_DT_WR] = {
115184610Salfred		.type = UE_BULK,
116184610Salfred		.endpoint = UE_ADDR_ANY,
117184610Salfred		.direction = UE_DIR_OUT,
118190734Sthompsa		.bufsize = UIPAQ_BUF_SIZE,
119190734Sthompsa		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
120190734Sthompsa		.callback = &uipaq_write_callback,
121184610Salfred	},
122184610Salfred
123187259Sthompsa	[UIPAQ_BULK_DT_RD] = {
124184610Salfred		.type = UE_BULK,
125184610Salfred		.endpoint = UE_ADDR_ANY,
126184610Salfred		.direction = UE_DIR_IN,
127190734Sthompsa		.bufsize = UIPAQ_BUF_SIZE,
128190734Sthompsa		.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
129190734Sthompsa		.callback = &uipaq_read_callback,
130184610Salfred	},
131184610Salfred};
132184610Salfred
133184610Salfredstatic const struct usb2_com_callback uipaq_callback = {
134184610Salfred	.usb2_com_cfg_set_dtr = &uipaq_cfg_set_dtr,
135184610Salfred	.usb2_com_cfg_set_rts = &uipaq_cfg_set_rts,
136184610Salfred	.usb2_com_cfg_set_break = &uipaq_cfg_set_break,
137184610Salfred	.usb2_com_start_read = &uipaq_start_read,
138184610Salfred	.usb2_com_stop_read = &uipaq_stop_read,
139184610Salfred	.usb2_com_start_write = &uipaq_start_write,
140184610Salfred	.usb2_com_stop_write = &uipaq_stop_write,
141184610Salfred};
142184610Salfred
143184610Salfred/*
144184610Salfred * Much of this list is generated from lists of other drivers that
145184610Salfred * support the same hardware. Numeric values are used where no usbdevs
146184610Salfred * entries exist.
147184610Salfred */
148184610Salfredstatic const struct usb2_device_id uipaq_devs[] = {
149184610Salfred	/* Socket USB Sync */
150184610Salfred	{USB_VPI(0x0104, 0x00be, 0)},
151184610Salfred	/* USB Sync 0301 */
152184610Salfred	{USB_VPI(0x04ad, 0x0301, 0)},
153184610Salfred	/* USB Sync 0302 */
154184610Salfred	{USB_VPI(0x04ad, 0x0302, 0)},
155184610Salfred	/* USB Sync 0303 */
156184610Salfred	{USB_VPI(0x04ad, 0x0303, 0)},
157184610Salfred	/* GPS Pocket PC USB Sync */
158184610Salfred	{USB_VPI(0x04ad, 0x0306, 0)},
159184610Salfred	/* HHP PDT */
160184610Salfred	{USB_VPI(0x0536, 0x01a0, 0)},
161184610Salfred	/* Intermec Mobile Computer */
162184610Salfred	{USB_VPI(0x067e, 0x1001, 0)},
163184610Salfred	/* Linkup Systems USB Sync */
164184610Salfred	{USB_VPI(0x094b, 0x0001, 0)},
165184610Salfred	/* BCOM USB Sync 0065 */
166184610Salfred	{USB_VPI(0x0960, 0x0065, 0)},
167184610Salfred	/* BCOM USB Sync 0066 */
168184610Salfred	{USB_VPI(0x0960, 0x0066, 0)},
169184610Salfred	/* BCOM USB Sync 0067 */
170184610Salfred	{USB_VPI(0x0960, 0x0067, 0)},
171184610Salfred	/* Portatec USB Sync */
172184610Salfred	{USB_VPI(0x0961, 0x0010, 0)},
173184610Salfred	/* Trimble GeoExplorer */
174184610Salfred	{USB_VPI(0x099e, 0x0052, 0)},
175184610Salfred	/* TDS Data Collector */
176184610Salfred	{USB_VPI(0x099e, 0x4000, 0)},
177184610Salfred	/* Motorola iDEN Smartphone */
178184610Salfred	{USB_VPI(0x0c44, 0x03a2, 0)},
179184610Salfred	/* Cesscom Luxian Series */
180184610Salfred	{USB_VPI(0x0c8e, 0x6000, 0)},
181184610Salfred	/* Motorola PowerPad Pocket PCDevice */
182184610Salfred	{USB_VPI(0x0cad, 0x9001, 0)},
183184610Salfred	/* Freedom Scientific USB Sync */
184184610Salfred	{USB_VPI(0x0f4e, 0x0200, 0)},
185184610Salfred	/* Cyberbank USB Sync */
186184610Salfred	{USB_VPI(0x0f98, 0x0201, 0)},
187184610Salfred	/* Wistron USB Sync */
188184610Salfred	{USB_VPI(0x0fb8, 0x3001, 0)},
189184610Salfred	/* Wistron USB Sync */
190184610Salfred	{USB_VPI(0x0fb8, 0x3002, 0)},
191184610Salfred	/* Wistron USB Sync */
192184610Salfred	{USB_VPI(0x0fb8, 0x3003, 0)},
193184610Salfred	/* Wistron USB Sync */
194184610Salfred	{USB_VPI(0x0fb8, 0x4001, 0)},
195184610Salfred	/* E-TEN USB Sync */
196184610Salfred	{USB_VPI(0x1066, 0x00ce, 0)},
197184610Salfred	/* E-TEN P3XX Pocket PC */
198184610Salfred	{USB_VPI(0x1066, 0x0300, 0)},
199184610Salfred	/* E-TEN P5XX Pocket PC */
200184610Salfred	{USB_VPI(0x1066, 0x0500, 0)},
201184610Salfred	/* E-TEN P6XX Pocket PC */
202184610Salfred	{USB_VPI(0x1066, 0x0600, 0)},
203184610Salfred	/* E-TEN P7XX Pocket PC */
204184610Salfred	{USB_VPI(0x1066, 0x0700, 0)},
205184610Salfred	/* Psion Teklogix Sync 753x */
206184610Salfred	{USB_VPI(0x1114, 0x0001, 0)},
207184610Salfred	/* Psion Teklogix Sync netBookPro */
208184610Salfred	{USB_VPI(0x1114, 0x0004, 0)},
209184610Salfred	/* Psion Teklogix Sync 7525 */
210184610Salfred	{USB_VPI(0x1114, 0x0006, 0)},
211184610Salfred	/* VES USB Sync */
212184610Salfred	{USB_VPI(0x1182, 0x1388, 0)},
213184610Salfred	/* Rugged Pocket PC 2003 */
214184610Salfred	{USB_VPI(0x11d9, 0x1002, 0)},
215184610Salfred	/* Rugged Pocket PC 2003 */
216184610Salfred	{USB_VPI(0x11d9, 0x1003, 0)},
217184610Salfred	/* USB Sync 03 */
218184610Salfred	{USB_VPI(0x1231, 0xce01, 0)},
219184610Salfred	/* USB Sync 03 */
220184610Salfred	{USB_VPI(0x1231, 0xce02, 0)},
221184610Salfred	/* Mio DigiWalker PPC StrongARM */
222184610Salfred	{USB_VPI(0x3340, 0x011c, 0)},
223184610Salfred	/* Mio DigiWalker 338 */
224184610Salfred	{USB_VPI(0x3340, 0x0326, 0)},
225184610Salfred	/* Mio DigiWalker 338 */
226184610Salfred	{USB_VPI(0x3340, 0x0426, 0)},
227184610Salfred	/* Mio DigiWalker USB Sync */
228184610Salfred	{USB_VPI(0x3340, 0x043a, 0)},
229184610Salfred	/* MiTAC USB Sync 528 */
230184610Salfred	{USB_VPI(0x3340, 0x051c, 0)},
231184610Salfred	/* Mio DigiWalker SmartPhone USB Sync */
232184610Salfred	{USB_VPI(0x3340, 0x053a, 0)},
233184610Salfred	/* MiTAC USB Sync */
234184610Salfred	{USB_VPI(0x3340, 0x071c, 0)},
235184610Salfred	/* Generic PPC StrongARM */
236184610Salfred	{USB_VPI(0x3340, 0x0b1c, 0)},
237184610Salfred	/* Generic PPC USB Sync */
238184610Salfred	{USB_VPI(0x3340, 0x0e3a, 0)},
239184610Salfred	/* Itautec USB Sync */
240184610Salfred	{USB_VPI(0x3340, 0x0f1c, 0)},
241184610Salfred	/* Generic SmartPhone USB Sync */
242184610Salfred	{USB_VPI(0x3340, 0x0f3a, 0)},
243184610Salfred	/* Itautec USB Sync */
244184610Salfred	{USB_VPI(0x3340, 0x1326, 0)},
245184610Salfred	/* YAKUMO USB Sync */
246184610Salfred	{USB_VPI(0x3340, 0x191c, 0)},
247184610Salfred	/* Vobis USB Sync */
248184610Salfred	{USB_VPI(0x3340, 0x2326, 0)},
249184610Salfred	/* MEDION Winodws Moble USB Sync */
250184610Salfred	{USB_VPI(0x3340, 0x3326, 0)},
251184610Salfred	/* Legend USB Sync */
252184610Salfred	{USB_VPI(0x3708, 0x20ce, 0)},
253184610Salfred	/* Lenovo USB Sync */
254184610Salfred	{USB_VPI(0x3708, 0x21ce, 0)},
255184610Salfred	/* Mobile Media Technology USB Sync */
256184610Salfred	{USB_VPI(0x4113, 0x0210, 0)},
257184610Salfred	/* Mobile Media Technology USB Sync */
258184610Salfred	{USB_VPI(0x4113, 0x0211, 0)},
259184610Salfred	/* Mobile Media Technology USB Sync */
260184610Salfred	{USB_VPI(0x4113, 0x0400, 0)},
261184610Salfred	/* Mobile Media Technology USB Sync */
262184610Salfred	{USB_VPI(0x4113, 0x0410, 0)},
263184610Salfred	/* Smartphone */
264184610Salfred	{USB_VPI(0x4505, 0x0010, 0)},
265184610Salfred	/* SAGEM Wireless Assistant */
266184610Salfred	{USB_VPI(0x5e04, 0xce00, 0)},
267184610Salfred	/* c10 Series */
268184610Salfred	{USB_VPI(USB_VENDOR_ACER, 0x1631, 0)},
269184610Salfred	/* c20 Series */
270184610Salfred	{USB_VPI(USB_VENDOR_ACER, 0x1632, 0)},
271184610Salfred	/* Acer n10 Handheld USB Sync */
272184610Salfred	{USB_VPI(USB_VENDOR_ACER, 0x16e1, 0)},
273184610Salfred	/* Acer n20 Handheld USB Sync */
274184610Salfred	{USB_VPI(USB_VENDOR_ACER, 0x16e2, 0)},
275184610Salfred	/* Acer n30 Handheld USB Sync */
276184610Salfred	{USB_VPI(USB_VENDOR_ACER, 0x16e3, 0)},
277184610Salfred	/* ASUS USB Sync */
278184610Salfred	{USB_VPI(USB_VENDOR_ASUS, 0x4200, 0)},
279184610Salfred	/* ASUS USB Sync */
280184610Salfred	{USB_VPI(USB_VENDOR_ASUS, 0x4201, 0)},
281184610Salfred	/* ASUS USB Sync */
282184610Salfred	{USB_VPI(USB_VENDOR_ASUS, 0x4202, 0)},
283184610Salfred	/* ASUS USB Sync */
284184610Salfred	{USB_VPI(USB_VENDOR_ASUS, 0x9200, 0)},
285184610Salfred	/* ASUS USB Sync */
286184610Salfred	{USB_VPI(USB_VENDOR_ASUS, 0x9202, 0)},
287184610Salfred	/**/
288184610Salfred	{USB_VPI(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P535, 0)},
289184610Salfred	/* CASIO USB Sync 2001 */
290184610Salfred	{USB_VPI(USB_VENDOR_CASIO, 0x2001, 0)},
291184610Salfred	/* CASIO USB Sync 2003 */
292184610Salfred	{USB_VPI(USB_VENDOR_CASIO, 0x2003, 0)},
293184610Salfred	/**/
294184610Salfred	{USB_VPI(USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300, 0)},
295184610Salfred	/* MyGuide 7000 XL USB Sync */
296184610Salfred	{USB_VPI(USB_VENDOR_COMPAL, 0x0531, 0)},
297184610Salfred	/* Compaq iPAQ USB Sync */
298184610Salfred	{USB_VPI(USB_VENDOR_COMPAQ, 0x0032, 0)},
299184610Salfred	/**/
300184610Salfred	{USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC, 0)},
301184610Salfred	/* Dell Axim USB Sync */
302184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4001, 0)},
303184610Salfred	/* Dell Axim USB Sync */
304184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4002, 0)},
305184610Salfred	/* Dell Axim USB Sync */
306184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4003, 0)},
307184610Salfred	/* Dell Axim USB Sync */
308184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4004, 0)},
309184610Salfred	/* Dell Axim USB Sync */
310184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4005, 0)},
311184610Salfred	/* Dell Axim USB Sync */
312184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4006, 0)},
313184610Salfred	/* Dell Axim USB Sync */
314184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4007, 0)},
315184610Salfred	/* Dell Axim USB Sync */
316184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4008, 0)},
317184610Salfred	/* Dell Axim USB Sync */
318184610Salfred	{USB_VPI(USB_VENDOR_DELL, 0x4009, 0)},
319184610Salfred	/* Fujitsu Siemens Computers USB Sync */
320184610Salfred	{USB_VPI(USB_VENDOR_FSC, 0x1001, 0)},
321184610Salfred	/* FUJITSU USB Sync */
322184610Salfred	{USB_VPI(USB_VENDOR_FUJITSU, 0x1058, 0)},
323184610Salfred	/* FUJITSU USB Sync */
324184610Salfred	{USB_VPI(USB_VENDOR_FUJITSU, 0x1079, 0)},
325184610Salfred	/* Askey USB Sync */
326184610Salfred	{USB_VPI(USB_VENDOR_GIGASET, 0x0601, 0)},
327184610Salfred	/* Hitachi USB Sync */
328184610Salfred	{USB_VPI(USB_VENDOR_HITACHI, 0x0014, 0)},
329184610Salfred	/* HP USB Sync 1612 */
330184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x1216, 0)},
331184610Salfred	/* HP USB Sync 1620 */
332184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x2016, 0)},
333184610Salfred	/* HP USB Sync 1621 */
334184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x2116, 0)},
335184610Salfred	/* HP USB Sync 1622 */
336184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x2216, 0)},
337184610Salfred	/* HP USB Sync 1630 */
338184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x3016, 0)},
339184610Salfred	/* HP USB Sync 1631 */
340184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x3116, 0)},
341184610Salfred	/* HP USB Sync 1632 */
342184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x3216, 0)},
343184610Salfred	/* HP USB Sync 1640 */
344184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x4016, 0)},
345184610Salfred	/* HP USB Sync 1641 */
346184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x4116, 0)},
347184610Salfred	/* HP USB Sync 1642 */
348184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x4216, 0)},
349184610Salfred	/* HP USB Sync 1650 */
350184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x5016, 0)},
351184610Salfred	/* HP USB Sync 1651 */
352184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x5116, 0)},
353184610Salfred	/* HP USB Sync 1652 */
354184610Salfred	{USB_VPI(USB_VENDOR_HP, 0x5216, 0)},
355184610Salfred	/**/
356184610Salfred	{USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_2215, 0)},
357184610Salfred	/**/
358184610Salfred	{USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_568J, 0)},
359184610Salfred	/* HTC USB Modem */
360184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x00cf, 0)},
361184610Salfred	/* PocketPC USB Sync */
362184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a01, 0)},
363184610Salfred	/* PocketPC USB Sync */
364184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a02, 0)},
365184610Salfred	/* PocketPC USB Sync */
366184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a03, 0)},
367184610Salfred	/* PocketPC USB Sync */
368184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a04, 0)},
369184610Salfred	/* PocketPC USB Sync */
370184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a05, 0)},
371184610Salfred	/* PocketPC USB Sync */
372184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a06, 0)},
373184610Salfred	/* PocketPC USB Sync */
374184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a07, 0)},
375184610Salfred	/* PocketPC USB Sync */
376184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a08, 0)},
377184610Salfred	/* PocketPC USB Sync */
378184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a09, 0)},
379184610Salfred	/* PocketPC USB Sync */
380184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0a, 0)},
381184610Salfred	/* PocketPC USB Sync */
382184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0b, 0)},
383184610Salfred	/* PocketPC USB Sync */
384184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0c, 0)},
385184610Salfred	/* PocketPC USB Sync */
386184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0d, 0)},
387184610Salfred	/* PocketPC USB Sync */
388184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0e, 0)},
389184610Salfred	/* PocketPC USB Sync */
390184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a0f, 0)},
391184610Salfred	/* PocketPC USB Sync */
392184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a10, 0)},
393184610Salfred	/* PocketPC USB Sync */
394184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a11, 0)},
395184610Salfred	/* PocketPC USB Sync */
396184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a12, 0)},
397184610Salfred	/* PocketPC USB Sync */
398184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a13, 0)},
399184610Salfred	/* PocketPC USB Sync */
400184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a14, 0)},
401184610Salfred	/* PocketPC USB Sync */
402184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a15, 0)},
403184610Salfred	/* PocketPC USB Sync */
404184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a16, 0)},
405184610Salfred	/* PocketPC USB Sync */
406184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a17, 0)},
407184610Salfred	/* PocketPC USB Sync */
408184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a18, 0)},
409184610Salfred	/* PocketPC USB Sync */
410184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a19, 0)},
411184610Salfred	/* PocketPC USB Sync */
412184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1a, 0)},
413184610Salfred	/* PocketPC USB Sync */
414184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1b, 0)},
415184610Salfred	/* PocketPC USB Sync */
416184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1c, 0)},
417184610Salfred	/* PocketPC USB Sync */
418184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1d, 0)},
419184610Salfred	/* PocketPC USB Sync */
420184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1e, 0)},
421184610Salfred	/* PocketPC USB Sync */
422184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a1f, 0)},
423184610Salfred	/* PocketPC USB Sync */
424184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a20, 0)},
425184610Salfred	/* PocketPC USB Sync */
426184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a21, 0)},
427184610Salfred	/* PocketPC USB Sync */
428184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a22, 0)},
429184610Salfred	/* PocketPC USB Sync */
430184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a23, 0)},
431184610Salfred	/* PocketPC USB Sync */
432184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a24, 0)},
433184610Salfred	/* PocketPC USB Sync */
434184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a25, 0)},
435184610Salfred	/* PocketPC USB Sync */
436184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a26, 0)},
437184610Salfred	/* PocketPC USB Sync */
438184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a27, 0)},
439184610Salfred	/* PocketPC USB Sync */
440184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a28, 0)},
441184610Salfred	/* PocketPC USB Sync */
442184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a29, 0)},
443184610Salfred	/* PocketPC USB Sync */
444184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2a, 0)},
445184610Salfred	/* PocketPC USB Sync */
446184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2b, 0)},
447184610Salfred	/* PocketPC USB Sync */
448184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2c, 0)},
449184610Salfred	/* PocketPC USB Sync */
450184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2d, 0)},
451184610Salfred	/* PocketPC USB Sync */
452184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2e, 0)},
453184610Salfred	/* PocketPC USB Sync */
454184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a2f, 0)},
455184610Salfred	/* PocketPC USB Sync */
456184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a30, 0)},
457184610Salfred	/* PocketPC USB Sync */
458184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a31, 0)},
459184610Salfred	/* PocketPC USB Sync */
460184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a32, 0)},
461184610Salfred	/* PocketPC USB Sync */
462184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a33, 0)},
463184610Salfred	/* PocketPC USB Sync */
464184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a34, 0)},
465184610Salfred	/* PocketPC USB Sync */
466184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a35, 0)},
467184610Salfred	/* PocketPC USB Sync */
468184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a36, 0)},
469184610Salfred	/* PocketPC USB Sync */
470184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a37, 0)},
471184610Salfred	/* PocketPC USB Sync */
472184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a38, 0)},
473184610Salfred	/* PocketPC USB Sync */
474184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a39, 0)},
475184610Salfred	/* PocketPC USB Sync */
476184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3a, 0)},
477184610Salfred	/* PocketPC USB Sync */
478184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3b, 0)},
479184610Salfred	/* PocketPC USB Sync */
480184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3c, 0)},
481184610Salfred	/* PocketPC USB Sync */
482184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3d, 0)},
483184610Salfred	/* PocketPC USB Sync */
484184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3e, 0)},
485184610Salfred	/* PocketPC USB Sync */
486184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a3f, 0)},
487184610Salfred	/* PocketPC USB Sync */
488184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a40, 0)},
489184610Salfred	/* PocketPC USB Sync */
490184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a41, 0)},
491184610Salfred	/* PocketPC USB Sync */
492184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a42, 0)},
493184610Salfred	/* PocketPC USB Sync */
494184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a43, 0)},
495184610Salfred	/* PocketPC USB Sync */
496184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a44, 0)},
497184610Salfred	/* PocketPC USB Sync */
498184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a45, 0)},
499184610Salfred	/* PocketPC USB Sync */
500184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a46, 0)},
501184610Salfred	/* PocketPC USB Sync */
502184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a47, 0)},
503184610Salfred	/* PocketPC USB Sync */
504184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a48, 0)},
505184610Salfred	/* PocketPC USB Sync */
506184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a49, 0)},
507184610Salfred	/* PocketPC USB Sync */
508184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4a, 0)},
509184610Salfred	/* PocketPC USB Sync */
510184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4b, 0)},
511184610Salfred	/* PocketPC USB Sync */
512184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4c, 0)},
513184610Salfred	/* PocketPC USB Sync */
514184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4d, 0)},
515184610Salfred	/* PocketPC USB Sync */
516184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4e, 0)},
517184610Salfred	/* PocketPC USB Sync */
518184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a4f, 0)},
519184610Salfred	/* HTC SmartPhone USB Sync */
520184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a50, 0)},
521184610Salfred	/* SmartPhone USB Sync */
522184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a52, 0)},
523184610Salfred	/* SmartPhone USB Sync */
524184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a53, 0)},
525184610Salfred	/* SmartPhone USB Sync */
526184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a54, 0)},
527184610Salfred	/* SmartPhone USB Sync */
528184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a55, 0)},
529184610Salfred	/* SmartPhone USB Sync */
530184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a56, 0)},
531184610Salfred	/* SmartPhone USB Sync */
532184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a57, 0)},
533184610Salfred	/* SmartPhone USB Sync */
534184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a58, 0)},
535184610Salfred	/* SmartPhone USB Sync */
536184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a59, 0)},
537184610Salfred	/* SmartPhone USB Sync */
538184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5a, 0)},
539184610Salfred	/* SmartPhone USB Sync */
540184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5b, 0)},
541184610Salfred	/* SmartPhone USB Sync */
542184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5c, 0)},
543184610Salfred	/* SmartPhone USB Sync */
544184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5d, 0)},
545184610Salfred	/* SmartPhone USB Sync */
546184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5e, 0)},
547184610Salfred	/* SmartPhone USB Sync */
548184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a5f, 0)},
549184610Salfred	/* SmartPhone USB Sync */
550184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a60, 0)},
551184610Salfred	/* SmartPhone USB Sync */
552184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a61, 0)},
553184610Salfred	/* SmartPhone USB Sync */
554184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a62, 0)},
555184610Salfred	/* SmartPhone USB Sync */
556184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a63, 0)},
557184610Salfred	/* SmartPhone USB Sync */
558184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a64, 0)},
559184610Salfred	/* SmartPhone USB Sync */
560184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a65, 0)},
561184610Salfred	/* SmartPhone USB Sync */
562184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a66, 0)},
563184610Salfred	/* SmartPhone USB Sync */
564184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a67, 0)},
565184610Salfred	/* SmartPhone USB Sync */
566184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a68, 0)},
567184610Salfred	/* SmartPhone USB Sync */
568184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a69, 0)},
569184610Salfred	/* SmartPhone USB Sync */
570184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6a, 0)},
571184610Salfred	/* SmartPhone USB Sync */
572184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6b, 0)},
573184610Salfred	/* SmartPhone USB Sync */
574184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6c, 0)},
575184610Salfred	/* SmartPhone USB Sync */
576184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6d, 0)},
577184610Salfred	/* SmartPhone USB Sync */
578184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6e, 0)},
579184610Salfred	/* SmartPhone USB Sync */
580184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a6f, 0)},
581184610Salfred	/* SmartPhone USB Sync */
582184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a70, 0)},
583184610Salfred	/* SmartPhone USB Sync */
584184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a71, 0)},
585184610Salfred	/* SmartPhone USB Sync */
586184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a72, 0)},
587184610Salfred	/* SmartPhone USB Sync */
588184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a73, 0)},
589184610Salfred	/* SmartPhone USB Sync */
590184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a74, 0)},
591184610Salfred	/* SmartPhone USB Sync */
592184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a75, 0)},
593184610Salfred	/* SmartPhone USB Sync */
594184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a76, 0)},
595184610Salfred	/* SmartPhone USB Sync */
596184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a77, 0)},
597184610Salfred	/* SmartPhone USB Sync */
598184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a78, 0)},
599184610Salfred	/* SmartPhone USB Sync */
600184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a79, 0)},
601184610Salfred	/* SmartPhone USB Sync */
602184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7a, 0)},
603184610Salfred	/* SmartPhone USB Sync */
604184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7b, 0)},
605184610Salfred	/* SmartPhone USB Sync */
606184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7c, 0)},
607184610Salfred	/* SmartPhone USB Sync */
608184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7d, 0)},
609184610Salfred	/* SmartPhone USB Sync */
610184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7e, 0)},
611184610Salfred	/* SmartPhone USB Sync */
612184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a7f, 0)},
613184610Salfred	/* SmartPhone USB Sync */
614184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a80, 0)},
615184610Salfred	/* SmartPhone USB Sync */
616184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a81, 0)},
617184610Salfred	/* SmartPhone USB Sync */
618184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a82, 0)},
619184610Salfred	/* SmartPhone USB Sync */
620184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a83, 0)},
621184610Salfred	/* SmartPhone USB Sync */
622184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a84, 0)},
623184610Salfred	/* SmartPhone USB Sync */
624184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a85, 0)},
625184610Salfred	/* SmartPhone USB Sync */
626184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a86, 0)},
627184610Salfred	/* SmartPhone USB Sync */
628184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a87, 0)},
629184610Salfred	/* SmartPhone USB Sync */
630184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a88, 0)},
631184610Salfred	/* SmartPhone USB Sync */
632184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a89, 0)},
633184610Salfred	/* SmartPhone USB Sync */
634184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8a, 0)},
635184610Salfred	/* SmartPhone USB Sync */
636184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8b, 0)},
637184610Salfred	/* SmartPhone USB Sync */
638184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8c, 0)},
639184610Salfred	/* SmartPhone USB Sync */
640184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8d, 0)},
641184610Salfred	/* SmartPhone USB Sync */
642184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8e, 0)},
643184610Salfred	/* SmartPhone USB Sync */
644184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a8f, 0)},
645184610Salfred	/* SmartPhone USB Sync */
646184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a90, 0)},
647184610Salfred	/* SmartPhone USB Sync */
648184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a91, 0)},
649184610Salfred	/* SmartPhone USB Sync */
650184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a92, 0)},
651184610Salfred	/* SmartPhone USB Sync */
652184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a93, 0)},
653184610Salfred	/* SmartPhone USB Sync */
654184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a94, 0)},
655184610Salfred	/* SmartPhone USB Sync */
656184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a95, 0)},
657184610Salfred	/* SmartPhone USB Sync */
658184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a96, 0)},
659184610Salfred	/* SmartPhone USB Sync */
660184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a97, 0)},
661184610Salfred	/* SmartPhone USB Sync */
662184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a98, 0)},
663184610Salfred	/* SmartPhone USB Sync */
664184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a99, 0)},
665184610Salfred	/* SmartPhone USB Sync */
666184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9a, 0)},
667184610Salfred	/* SmartPhone USB Sync */
668184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9b, 0)},
669184610Salfred	/* SmartPhone USB Sync */
670184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9c, 0)},
671184610Salfred	/* SmartPhone USB Sync */
672184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9d, 0)},
673184610Salfred	/* SmartPhone USB Sync */
674184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9e, 0)},
675184610Salfred	/* SmartPhone USB Sync */
676184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0a9f, 0)},
677184610Salfred	/* "High Tech Computer Corp" */
678184610Salfred	{USB_VPI(USB_VENDOR_HTC, 0x0bce, 0)},
679184610Salfred	/**/
680184610Salfred	{USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM, 0)},
681184610Salfred	/**/
682184610Salfred	{USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE, 0)},
683184610Salfred	/**/
684184610Salfred	{USB_VPI(USB_VENDOR_HTC, USB_PRODUCT_HTC_WINMOBILE, 0)},
685184610Salfred	/* JVC USB Sync */
686184610Salfred	{USB_VPI(USB_VENDOR_JVC, 0x3011, 0)},
687184610Salfred	/* JVC USB Sync */
688184610Salfred	{USB_VPI(USB_VENDOR_JVC, 0x3012, 0)},
689184610Salfred	/* LGE USB Sync */
690184610Salfred	{USB_VPI(USB_VENDOR_LG, 0x9c01, 0)},
691184610Salfred	/* Microsoft USB Sync */
692184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x00ce, 0)},
693184610Salfred	/* Windows Pocket PC 2002 */
694184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0400, 0)},
695184610Salfred	/* Windows Pocket PC 2002 */
696184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0401, 0)},
697184610Salfred	/* Windows Pocket PC 2002 */
698184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0402, 0)},
699184610Salfred	/* Windows Pocket PC 2002 */
700184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0403, 0)},
701184610Salfred	/* Windows Pocket PC 2002 */
702184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0404, 0)},
703184610Salfred	/* Windows Pocket PC 2002 */
704184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0405, 0)},
705184610Salfred	/* Windows Pocket PC 2002 */
706184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0406, 0)},
707184610Salfred	/* Windows Pocket PC 2002 */
708184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0407, 0)},
709184610Salfred	/* Windows Pocket PC 2002 */
710184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0408, 0)},
711184610Salfred	/* Windows Pocket PC 2002 */
712184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0409, 0)},
713184610Salfred	/* Windows Pocket PC 2002 */
714184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040a, 0)},
715184610Salfred	/* Windows Pocket PC 2002 */
716184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040b, 0)},
717184610Salfred	/* Windows Pocket PC 2002 */
718184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040c, 0)},
719184610Salfred	/* Windows Pocket PC 2002 */
720184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040d, 0)},
721184610Salfred	/* Windows Pocket PC 2002 */
722184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040e, 0)},
723184610Salfred	/* Windows Pocket PC 2002 */
724184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x040f, 0)},
725184610Salfred	/* Windows Pocket PC 2002 */
726184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0410, 0)},
727184610Salfred	/* Windows Pocket PC 2002 */
728184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0411, 0)},
729184610Salfred	/* Windows Pocket PC 2002 */
730184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0412, 0)},
731184610Salfred	/* Windows Pocket PC 2002 */
732184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0413, 0)},
733184610Salfred	/* Windows Pocket PC 2002 */
734184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0414, 0)},
735184610Salfred	/* Windows Pocket PC 2002 */
736184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0415, 0)},
737184610Salfred	/* Windows Pocket PC 2002 */
738184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0416, 0)},
739184610Salfred	/* Windows Pocket PC 2002 */
740184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0417, 0)},
741184610Salfred	/* Windows Pocket PC 2003 */
742184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0432, 0)},
743184610Salfred	/* Windows Pocket PC 2003 */
744184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0433, 0)},
745184610Salfred	/* Windows Pocket PC 2003 */
746184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0434, 0)},
747184610Salfred	/* Windows Pocket PC 2003 */
748184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0435, 0)},
749184610Salfred	/* Windows Pocket PC 2003 */
750184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0436, 0)},
751184610Salfred	/* Windows Pocket PC 2003 */
752184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0437, 0)},
753184610Salfred	/* Windows Pocket PC 2003 */
754184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0438, 0)},
755184610Salfred	/* Windows Pocket PC 2003 */
756184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0439, 0)},
757184610Salfred	/* Windows Pocket PC 2003 */
758184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043a, 0)},
759184610Salfred	/* Windows Pocket PC 2003 */
760184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043b, 0)},
761184610Salfred	/* Windows Pocket PC 2003 */
762184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043c, 0)},
763184610Salfred	/* Windows Pocket PC 2003 */
764184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043d, 0)},
765184610Salfred	/* Windows Pocket PC 2003 */
766184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043e, 0)},
767184610Salfred	/* Windows Pocket PC 2003 */
768184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x043f, 0)},
769184610Salfred	/* Windows Pocket PC 2003 */
770184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0440, 0)},
771184610Salfred	/* Windows Pocket PC 2003 */
772184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0441, 0)},
773184610Salfred	/* Windows Pocket PC 2003 */
774184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0442, 0)},
775184610Salfred	/* Windows Pocket PC 2003 */
776184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0443, 0)},
777184610Salfred	/* Windows Pocket PC 2003 */
778184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0444, 0)},
779184610Salfred	/* Windows Pocket PC 2003 */
780184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0445, 0)},
781184610Salfred	/* Windows Pocket PC 2003 */
782184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0446, 0)},
783184610Salfred	/* Windows Pocket PC 2003 */
784184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0447, 0)},
785184610Salfred	/* Windows Pocket PC 2003 */
786184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0448, 0)},
787184610Salfred	/* Windows Pocket PC 2003 */
788184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0449, 0)},
789184610Salfred	/* Windows Pocket PC 2003 */
790184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044a, 0)},
791184610Salfred	/* Windows Pocket PC 2003 */
792184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044b, 0)},
793184610Salfred	/* Windows Pocket PC 2003 */
794184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044c, 0)},
795184610Salfred	/* Windows Pocket PC 2003 */
796184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044d, 0)},
797184610Salfred	/* Windows Pocket PC 2003 */
798184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044e, 0)},
799184610Salfred	/* Windows Pocket PC 2003 */
800184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x044f, 0)},
801184610Salfred	/* Windows Pocket PC 2003 */
802184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0450, 0)},
803184610Salfred	/* Windows Pocket PC 2003 */
804184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0451, 0)},
805184610Salfred	/* Windows Pocket PC 2003 */
806184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0452, 0)},
807184610Salfred	/* Windows Pocket PC 2003 */
808184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0453, 0)},
809184610Salfred	/* Windows Pocket PC 2003 */
810184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0454, 0)},
811184610Salfred	/* Windows Pocket PC 2003 */
812184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0455, 0)},
813184610Salfred	/* Windows Pocket PC 2003 */
814184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0456, 0)},
815184610Salfred	/* Windows Pocket PC 2003 */
816184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0457, 0)},
817184610Salfred	/* Windows Pocket PC 2003 */
818184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0458, 0)},
819184610Salfred	/* Windows Pocket PC 2003 */
820184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0459, 0)},
821184610Salfred	/* Windows Pocket PC 2003 */
822184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045a, 0)},
823184610Salfred	/* Windows Pocket PC 2003 */
824184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045b, 0)},
825184610Salfred	/* Windows Pocket PC 2003 */
826184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045c, 0)},
827184610Salfred	/* Windows Pocket PC 2003 */
828184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045d, 0)},
829184610Salfred	/* Windows Pocket PC 2003 */
830184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045e, 0)},
831184610Salfred	/* Windows Pocket PC 2003 */
832184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x045f, 0)},
833184610Salfred	/* Windows Pocket PC 2003 */
834184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0460, 0)},
835184610Salfred	/* Windows Pocket PC 2003 */
836184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0461, 0)},
837184610Salfred	/* Windows Pocket PC 2003 */
838184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0462, 0)},
839184610Salfred	/* Windows Pocket PC 2003 */
840184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0463, 0)},
841184610Salfred	/* Windows Pocket PC 2003 */
842184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0464, 0)},
843184610Salfred	/* Windows Pocket PC 2003 */
844184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0465, 0)},
845184610Salfred	/* Windows Pocket PC 2003 */
846184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0466, 0)},
847184610Salfred	/* Windows Pocket PC 2003 */
848184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0467, 0)},
849184610Salfred	/* Windows Pocket PC 2003 */
850184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0468, 0)},
851184610Salfred	/* Windows Pocket PC 2003 */
852184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0469, 0)},
853184610Salfred	/* Windows Pocket PC 2003 */
854184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046a, 0)},
855184610Salfred	/* Windows Pocket PC 2003 */
856184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046b, 0)},
857184610Salfred	/* Windows Pocket PC 2003 */
858184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046c, 0)},
859184610Salfred	/* Windows Pocket PC 2003 */
860184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046d, 0)},
861184610Salfred	/* Windows Pocket PC 2003 */
862184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046e, 0)},
863184610Salfred	/* Windows Pocket PC 2003 */
864184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x046f, 0)},
865184610Salfred	/* Windows Pocket PC 2003 */
866184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0470, 0)},
867184610Salfred	/* Windows Pocket PC 2003 */
868184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0471, 0)},
869184610Salfred	/* Windows Pocket PC 2003 */
870184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0472, 0)},
871184610Salfred	/* Windows Pocket PC 2003 */
872184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0473, 0)},
873184610Salfred	/* Windows Pocket PC 2003 */
874184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0474, 0)},
875184610Salfred	/* Windows Pocket PC 2003 */
876184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0475, 0)},
877184610Salfred	/* Windows Pocket PC 2003 */
878184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0476, 0)},
879184610Salfred	/* Windows Pocket PC 2003 */
880184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0477, 0)},
881184610Salfred	/* Windows Pocket PC 2003 */
882184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0478, 0)},
883184610Salfred	/* Windows Pocket PC 2003 */
884184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x0479, 0)},
885184610Salfred	/* Windows Pocket PC 2003 */
886184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x047a, 0)},
887184610Salfred	/* Windows Pocket PC 2003 */
888184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x047b, 0)},
889184610Salfred	/* Windows Smartphone 2002 */
890184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04c8, 0)},
891184610Salfred	/* Windows Smartphone 2002 */
892184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04c9, 0)},
893184610Salfred	/* Windows Smartphone 2002 */
894184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04ca, 0)},
895184610Salfred	/* Windows Smartphone 2002 */
896184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04cb, 0)},
897184610Salfred	/* Windows Smartphone 2002 */
898184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04cc, 0)},
899184610Salfred	/* Windows Smartphone 2002 */
900184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04cd, 0)},
901184610Salfred	/* Windows Smartphone 2002 */
902184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04ce, 0)},
903184610Salfred	/* Windows Smartphone 2003 */
904184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04d7, 0)},
905184610Salfred	/* Windows Smartphone 2003 */
906184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04d8, 0)},
907184610Salfred	/* Windows Smartphone 2003 */
908184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04d9, 0)},
909184610Salfred	/* Windows Smartphone 2003 */
910184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04da, 0)},
911184610Salfred	/* Windows Smartphone 2003 */
912184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04db, 0)},
913184610Salfred	/* Windows Smartphone 2003 */
914184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04dc, 0)},
915184610Salfred	/* Windows Smartphone 2003 */
916184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04dd, 0)},
917184610Salfred	/* Windows Smartphone 2003 */
918184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04de, 0)},
919184610Salfred	/* Windows Smartphone 2003 */
920184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04df, 0)},
921184610Salfred	/* Windows Smartphone 2003 */
922184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e0, 0)},
923184610Salfred	/* Windows Smartphone 2003 */
924184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e1, 0)},
925184610Salfred	/* Windows Smartphone 2003 */
926184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e2, 0)},
927184610Salfred	/* Windows Smartphone 2003 */
928184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e3, 0)},
929184610Salfred	/* Windows Smartphone 2003 */
930184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e4, 0)},
931184610Salfred	/* Windows Smartphone 2003 */
932184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e5, 0)},
933184610Salfred	/* Windows Smartphone 2003 */
934184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e6, 0)},
935184610Salfred	/* Windows Smartphone 2003 */
936184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e7, 0)},
937184610Salfred	/* Windows Smartphone 2003 */
938184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e8, 0)},
939184610Salfred	/* Windows Smartphone 2003 */
940184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04e9, 0)},
941184610Salfred	/* Windows Smartphone 2003 */
942184610Salfred	{USB_VPI(USB_VENDOR_MICROSOFT, 0x04ea, 0)},
943184610Salfred	/* Motorola MPx200 Smartphone */
944184610Salfred	{USB_VPI(USB_VENDOR_MOTOROLA2, 0x4204, 0)},
945184610Salfred	/* Motorola MPc GSM */
946184610Salfred	{USB_VPI(USB_VENDOR_MOTOROLA2, 0x4214, 0)},
947184610Salfred	/* Motorola MPx220 Smartphone */
948184610Salfred	{USB_VPI(USB_VENDOR_MOTOROLA2, 0x4224, 0)},
949184610Salfred	/* Motorola MPc CDMA */
950184610Salfred	{USB_VPI(USB_VENDOR_MOTOROLA2, 0x4234, 0)},
951184610Salfred	/* Motorola MPx100 Smartphone */
952184610Salfred	{USB_VPI(USB_VENDOR_MOTOROLA2, 0x4244, 0)},
953184610Salfred	/* NEC USB Sync */
954184610Salfred	{USB_VPI(USB_VENDOR_NEC, 0x00d5, 0)},
955184610Salfred	/* NEC USB Sync */
956184610Salfred	{USB_VPI(USB_VENDOR_NEC, 0x00d6, 0)},
957184610Salfred	/* NEC USB Sync */
958184610Salfred	{USB_VPI(USB_VENDOR_NEC, 0x00d7, 0)},
959184610Salfred	/* NEC USB Sync */
960184610Salfred	{USB_VPI(USB_VENDOR_NEC, 0x8024, 0)},
961184610Salfred	/* NEC USB Sync */
962184610Salfred	{USB_VPI(USB_VENDOR_NEC, 0x8025, 0)},
963184610Salfred	/* Panasonic USB Sync */
964184610Salfred	{USB_VPI(USB_VENDOR_PANASONIC, 0x2500, 0)},
965184610Salfred	/* Samsung NEXiO USB Sync */
966184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x5f00, 0)},
967184610Salfred	/* Samsung NEXiO USB Sync */
968184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x5f01, 0)},
969184610Salfred	/* Samsung NEXiO USB Sync */
970184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x5f02, 0)},
971184610Salfred	/* Samsung NEXiO USB Sync */
972184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x5f03, 0)},
973184610Salfred	/* Samsung NEXiO USB Sync */
974184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x5f04, 0)},
975184610Salfred	/* Samsung MITs USB Sync */
976184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6611, 0)},
977184610Salfred	/* Samsung MITs USB Sync */
978184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6613, 0)},
979184610Salfred	/* Samsung MITs USB Sync */
980184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6615, 0)},
981184610Salfred	/* Samsung MITs USB Sync */
982184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6617, 0)},
983184610Salfred	/* Samsung MITs USB Sync */
984184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6619, 0)},
985184610Salfred	/* Samsung MITs USB Sync */
986184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x661b, 0)},
987184610Salfred	/* Samsung MITs USB Sync */
988184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x662e, 0)},
989184610Salfred	/* Samsung MITs USB Sync */
990184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6630, 0)},
991184610Salfred	/* Samsung MITs USB Sync */
992184610Salfred	{USB_VPI(USB_VENDOR_SAMSUNG, 0x6632, 0)},
993184610Salfred	/* SHARP WS003SH USB Modem */
994184610Salfred	{USB_VPI(USB_VENDOR_SHARP, 0x9102, 0)},
995184610Salfred	/* SHARP WS004SH USB Modem */
996184610Salfred	{USB_VPI(USB_VENDOR_SHARP, 0x9121, 0)},
997184610Salfred	/* SHARP S01SH USB Modem */
998184610Salfred	{USB_VPI(USB_VENDOR_SHARP, 0x9151, 0)},
999184610Salfred/**/
1000184610Salfred	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ES, 0)},
1001184610Salfred	/* Symbol USB Sync */
1002184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2000, 0)},
1003184610Salfred	/* Symbol USB Sync 0x2001 */
1004184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2001, 0)},
1005184610Salfred	/* Symbol USB Sync 0x2002 */
1006184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2002, 0)},
1007184610Salfred	/* Symbol USB Sync 0x2003 */
1008184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2003, 0)},
1009184610Salfred	/* Symbol USB Sync 0x2004 */
1010184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2004, 0)},
1011184610Salfred	/* Symbol USB Sync 0x2005 */
1012184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2005, 0)},
1013184610Salfred	/* Symbol USB Sync 0x2006 */
1014184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2006, 0)},
1015184610Salfred	/* Symbol USB Sync 0x2007 */
1016184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2007, 0)},
1017184610Salfred	/* Symbol USB Sync 0x2008 */
1018184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2008, 0)},
1019184610Salfred	/* Symbol USB Sync 0x2009 */
1020184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x2009, 0)},
1021184610Salfred	/* Symbol USB Sync 0x200a */
1022184610Salfred	{USB_VPI(USB_VENDOR_SYMBOL, 0x200a, 0)},
1023184610Salfred	/* TOSHIBA USB Sync 0700 */
1024184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x0700, 0)},
1025184610Salfred	/* TOSHIBA Pocket PC e310 */
1026184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x0705, 0)},
1027184610Salfred	/* TOSHIBA Pocket PC e330 Series */
1028184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x0707, 0)},
1029184610Salfred	/* TOSHIBA Pocket PC e350Series */
1030184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x0708, 0)},
1031184610Salfred	/* TOSHIBA Pocket PC e750 Series */
1032184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x0709, 0)},
1033184610Salfred	/* TOSHIBA Pocket PC e400 Series */
1034184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x070a, 0)},
1035184610Salfred	/* TOSHIBA Pocket PC e800 Series */
1036184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, 0x070b, 0)},
1037184610Salfred	/* TOSHIBA Pocket PC e740 */
1038184610Salfred	{USB_VPI(USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_POCKETPC_E740, 0)},
1039184610Salfred	/* ViewSonic Color Pocket PC V35 */
1040184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x0ed9, 0)},
1041184610Salfred	/* ViewSonic Color Pocket PC V36 */
1042184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x1527, 0)},
1043184610Salfred	/* ViewSonic Color Pocket PC V37 */
1044184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x1529, 0)},
1045184610Salfred	/* ViewSonic Color Pocket PC V38 */
1046184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x152b, 0)},
1047184610Salfred	/* ViewSonic Pocket PC */
1048184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x152e, 0)},
1049184610Salfred	/* ViewSonic Communicator Pocket PC */
1050184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x1921, 0)},
1051184610Salfred	/* ViewSonic Smartphone */
1052184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x1922, 0)},
1053184610Salfred	/* ViewSonic Pocket PC V30 */
1054184610Salfred	{USB_VPI(USB_VENDOR_VIEWSONIC, 0x1923, 0)},
1055184610Salfred};
1056184610Salfred
1057184610Salfredstatic device_method_t uipaq_methods[] = {
1058184610Salfred	DEVMETHOD(device_probe, uipaq_probe),
1059184610Salfred	DEVMETHOD(device_attach, uipaq_attach),
1060184610Salfred	DEVMETHOD(device_detach, uipaq_detach),
1061184610Salfred	{0, 0}
1062184610Salfred};
1063184610Salfred
1064184610Salfredstatic devclass_t uipaq_devclass;
1065184610Salfred
1066184610Salfredstatic driver_t uipaq_driver = {
1067184610Salfred	.name = "uipaq",
1068184610Salfred	.methods = uipaq_methods,
1069184610Salfred	.size = sizeof(struct uipaq_softc),
1070184610Salfred};
1071184610Salfred
1072189275SthompsaDRIVER_MODULE(uipaq, uhub, uipaq_driver, uipaq_devclass, NULL, 0);
1073188942SthompsaMODULE_DEPEND(uipaq, ucom, 1, 1, 1);
1074188942SthompsaMODULE_DEPEND(uipaq, usb, 1, 1, 1);
1075184610Salfred
1076184610Salfredstatic int
1077184610Salfreduipaq_probe(device_t dev)
1078184610Salfred{
1079184610Salfred	struct usb2_attach_arg *uaa = device_get_ivars(dev);
1080184610Salfred
1081184610Salfred	if (uaa->usb2_mode != USB_MODE_HOST) {
1082184610Salfred		return (ENXIO);
1083184610Salfred	}
1084184610Salfred	if (uaa->info.bConfigIndex != UIPAQ_CONFIG_INDEX) {
1085184610Salfred		return (ENXIO);
1086184610Salfred	}
1087184610Salfred	if (uaa->info.bIfaceIndex != UIPAQ_IFACE_INDEX) {
1088184610Salfred		return (ENXIO);
1089184610Salfred	}
1090184610Salfred	return (usb2_lookup_id_by_uaa(uipaq_devs, sizeof(uipaq_devs), uaa));
1091184610Salfred}
1092184610Salfred
1093184610Salfredstatic int
1094184610Salfreduipaq_attach(device_t dev)
1095184610Salfred{
1096184610Salfred	struct usb2_device_request req;
1097184610Salfred	struct usb2_attach_arg *uaa = device_get_ivars(dev);
1098184610Salfred	struct uipaq_softc *sc = device_get_softc(dev);
1099184610Salfred	int error;
1100184610Salfred	uint8_t iface_index;
1101184610Salfred	uint8_t i;
1102184610Salfred
1103184610Salfred	sc->sc_udev = uaa->device;
1104184610Salfred
1105184610Salfred	device_set_usb2_desc(dev);
1106189265Sthompsa	mtx_init(&sc->sc_mtx, "uipaq", NULL, MTX_DEF);
1107184610Salfred
1108184610Salfred	/*
1109184610Salfred	 * Send magic bytes, cribbed from Linux ipaq driver that
1110184610Salfred	 * claims to have sniffed them from Win98. Wait for driver to
1111184610Salfred	 * become ready on device side?
1112184610Salfred	 */
1113184610Salfred	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1114184610Salfred	req.bRequest = UCDC_SET_CONTROL_LINE_STATE;
1115184610Salfred	USETW(req.wValue, UCDC_LINE_DTR);
1116184610Salfred	USETW(req.wIndex, 0x0);
1117184610Salfred	USETW(req.wLength, 0);
1118184610Salfred	for (i = 0; i != 64; i++) {
1119184610Salfred		error =
1120184610Salfred		    usb2_do_request_flags(uaa->device, NULL, &req,
1121184610Salfred		    NULL, 0, NULL, 100);
1122184610Salfred		if (error == 0)
1123184610Salfred			break;
1124188413Sthompsa		usb2_pause_mtx(NULL, hz / 10);
1125184610Salfred	}
1126184610Salfred
1127184610Salfred	iface_index = UIPAQ_IFACE_INDEX;
1128184610Salfred	error = usb2_transfer_setup(uaa->device, &iface_index,
1129187259Sthompsa	    sc->sc_xfer, uipaq_config_data,
1130189265Sthompsa	    UIPAQ_N_TRANSFER, sc, &sc->sc_mtx);
1131184610Salfred
1132184610Salfred	if (error) {
1133184610Salfred		goto detach;
1134184610Salfred	}
1135184610Salfred	/* clear stall at first run */
1136189265Sthompsa	mtx_lock(&sc->sc_mtx);
1137188413Sthompsa	usb2_transfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_WR]);
1138188413Sthompsa	usb2_transfer_set_stall(sc->sc_xfer[UIPAQ_BULK_DT_RD]);
1139189265Sthompsa	mtx_unlock(&sc->sc_mtx);
1140184610Salfred
1141184610Salfred	error = usb2_com_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc,
1142189265Sthompsa	    &uipaq_callback, &sc->sc_mtx);
1143184610Salfred	if (error) {
1144184610Salfred		goto detach;
1145184610Salfred	}
1146184610Salfred	return (0);
1147184610Salfred
1148184610Salfreddetach:
1149184610Salfred	uipaq_detach(dev);
1150184610Salfred	return (ENXIO);
1151184610Salfred}
1152184610Salfred
1153184610Salfredint
1154184610Salfreduipaq_detach(device_t dev)
1155184610Salfred{
1156184610Salfred	struct uipaq_softc *sc = device_get_softc(dev);
1157184610Salfred
1158184610Salfred	usb2_com_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1);
1159187259Sthompsa	usb2_transfer_unsetup(sc->sc_xfer, UIPAQ_N_TRANSFER);
1160189265Sthompsa	mtx_destroy(&sc->sc_mtx);
1161184610Salfred
1162184610Salfred	return (0);
1163184610Salfred}
1164184610Salfred
1165184610Salfredstatic void
1166184610Salfreduipaq_start_read(struct usb2_com_softc *ucom)
1167184610Salfred{
1168184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1169184610Salfred
1170184610Salfred	/* start read endpoint */
1171187259Sthompsa	usb2_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_RD]);
1172184610Salfred}
1173184610Salfred
1174184610Salfredstatic void
1175184610Salfreduipaq_stop_read(struct usb2_com_softc *ucom)
1176184610Salfred{
1177184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1178184610Salfred
1179184610Salfred	/* stop read endpoint */
1180187259Sthompsa	usb2_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_RD]);
1181184610Salfred}
1182184610Salfred
1183184610Salfredstatic void
1184184610Salfreduipaq_start_write(struct usb2_com_softc *ucom)
1185184610Salfred{
1186184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1187184610Salfred
1188187259Sthompsa	usb2_transfer_start(sc->sc_xfer[UIPAQ_BULK_DT_WR]);
1189184610Salfred}
1190184610Salfred
1191184610Salfredstatic void
1192184610Salfreduipaq_stop_write(struct usb2_com_softc *ucom)
1193184610Salfred{
1194184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1195184610Salfred
1196187259Sthompsa	usb2_transfer_stop(sc->sc_xfer[UIPAQ_BULK_DT_WR]);
1197184610Salfred}
1198184610Salfred
1199184610Salfredstatic void
1200184610Salfreduipaq_cfg_set_dtr(struct usb2_com_softc *ucom, uint8_t onoff)
1201184610Salfred{
1202184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1203184610Salfred	struct usb2_device_request req;
1204184610Salfred
1205184610Salfred	DPRINTF("onoff=%d\n", onoff);
1206184610Salfred
1207184610Salfred	if (onoff)
1208184610Salfred		sc->sc_line |= UCDC_LINE_DTR;
1209184610Salfred	else
1210184610Salfred		sc->sc_line &= ~UCDC_LINE_DTR;
1211184610Salfred
1212184610Salfred	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1213184610Salfred	req.bRequest = UCDC_SET_CONTROL_LINE_STATE;
1214184610Salfred	USETW(req.wValue, sc->sc_line);
1215184610Salfred	req.wIndex[0] = UIPAQ_IFACE_INDEX;
1216184610Salfred	req.wIndex[1] = 0;
1217184610Salfred	USETW(req.wLength, 0);
1218184610Salfred
1219188413Sthompsa	usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom,
1220188413Sthompsa	    &req, NULL, 0, 1000);
1221184610Salfred}
1222184610Salfred
1223184610Salfredstatic void
1224184610Salfreduipaq_cfg_set_rts(struct usb2_com_softc *ucom, uint8_t onoff)
1225184610Salfred{
1226184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1227184610Salfred	struct usb2_device_request req;
1228184610Salfred
1229184610Salfred	DPRINTF("onoff=%d\n", onoff);
1230184610Salfred
1231184610Salfred	if (onoff)
1232184610Salfred		sc->sc_line |= UCDC_LINE_RTS;
1233184610Salfred	else
1234184610Salfred		sc->sc_line &= ~UCDC_LINE_RTS;
1235184610Salfred
1236184610Salfred	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1237184610Salfred	req.bRequest = UCDC_SET_CONTROL_LINE_STATE;
1238184610Salfred	USETW(req.wValue, sc->sc_line);
1239184610Salfred	req.wIndex[0] = UIPAQ_IFACE_INDEX;
1240184610Salfred	req.wIndex[1] = 0;
1241184610Salfred	USETW(req.wLength, 0);
1242184610Salfred
1243188413Sthompsa	usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom,
1244188413Sthompsa	    &req, NULL, 0, 1000);
1245184610Salfred}
1246184610Salfred
1247184610Salfredstatic void
1248184610Salfreduipaq_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff)
1249184610Salfred{
1250184610Salfred	struct uipaq_softc *sc = ucom->sc_parent;
1251184610Salfred	struct usb2_device_request req;
1252184610Salfred	uint16_t temp;
1253184610Salfred
1254184610Salfred	temp = onoff ? UCDC_BREAK_ON : UCDC_BREAK_OFF;
1255184610Salfred
1256184610Salfred	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1257184610Salfred	req.bRequest = UCDC_SEND_BREAK;
1258184610Salfred	USETW(req.wValue, temp);
1259184610Salfred	req.wIndex[0] = UIPAQ_IFACE_INDEX;
1260184610Salfred	req.wIndex[1] = 0;
1261184610Salfred	USETW(req.wLength, 0);
1262184610Salfred
1263188413Sthompsa	usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom,
1264188413Sthompsa	    &req, NULL, 0, 1000);
1265184610Salfred}
1266184610Salfred
1267184610Salfredstatic void
1268184610Salfreduipaq_write_callback(struct usb2_xfer *xfer)
1269184610Salfred{
1270184610Salfred	struct uipaq_softc *sc = xfer->priv_sc;
1271184610Salfred	uint32_t actlen;
1272184610Salfred
1273184610Salfred	switch (USB_GET_STATE(xfer)) {
1274184610Salfred	case USB_ST_SETUP:
1275184610Salfred	case USB_ST_TRANSFERRED:
1276188413Sthompsatr_setup:
1277184610Salfred		if (usb2_com_get_data(&sc->sc_ucom, xfer->frbuffers, 0,
1278184610Salfred		    UIPAQ_BUF_SIZE, &actlen)) {
1279184610Salfred			xfer->frlengths[0] = actlen;
1280184610Salfred			usb2_start_hardware(xfer);
1281184610Salfred		}
1282184610Salfred		return;
1283184610Salfred
1284184610Salfred	default:			/* Error */
1285184610Salfred		if (xfer->error != USB_ERR_CANCELLED) {
1286188413Sthompsa			/* try to clear stall first */
1287188413Sthompsa			xfer->flags.stall_pipe = 1;
1288188413Sthompsa			goto tr_setup;
1289184610Salfred		}
1290184610Salfred		return;
1291184610Salfred	}
1292184610Salfred}
1293184610Salfred
1294184610Salfredstatic void
1295184610Salfreduipaq_read_callback(struct usb2_xfer *xfer)
1296184610Salfred{
1297184610Salfred	struct uipaq_softc *sc = xfer->priv_sc;
1298184610Salfred
1299184610Salfred	switch (USB_GET_STATE(xfer)) {
1300184610Salfred	case USB_ST_TRANSFERRED:
1301184610Salfred		usb2_com_put_data(&sc->sc_ucom, xfer->frbuffers, 0,
1302184610Salfred		    xfer->actlen);
1303184610Salfred
1304184610Salfred	case USB_ST_SETUP:
1305188413Sthompsatr_setup:
1306188413Sthompsa		xfer->frlengths[0] = xfer->max_data_length;
1307188413Sthompsa		usb2_start_hardware(xfer);
1308184610Salfred		return;
1309184610Salfred
1310184610Salfred	default:			/* Error */
1311184610Salfred		if (xfer->error != USB_ERR_CANCELLED) {
1312188413Sthompsa			/* try to clear stall first */
1313188413Sthompsa			xfer->flags.stall_pipe = 1;
1314188413Sthompsa			goto tr_setup;
1315184610Salfred		}
1316184610Salfred		return;
1317184610Salfred	}
1318184610Salfred}
1319