]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * drivers/usb/core/otg_whitelist.h | |
3 | * | |
4 | * Copyright (C) 2004 Texas Instruments | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | */ | |
11 | ||
12 | /* | |
026f3fcb PC |
13 | * This OTG and Embedded Host Whitelist is "Targeted Peripheral List". |
14 | * It should mostly use of USB_DEVICE() or USB_DEVICE_VER() entries.. | |
1da177e4 LT |
15 | * |
16 | * YOU _SHOULD_ CHANGE THIS LIST TO MATCH YOUR PRODUCT AND ITS TESTING! | |
84cca820 | 17 | */ |
1da177e4 | 18 | |
31b92d81 | 19 | static struct usb_device_id whitelist_table[] = { |
1da177e4 LT |
20 | |
21 | /* hubs are optional in OTG, but very handy ... */ | |
22 | { USB_DEVICE_INFO(USB_CLASS_HUB, 0, 0), }, | |
23 | { USB_DEVICE_INFO(USB_CLASS_HUB, 0, 1), }, | |
24 | ||
25 | #ifdef CONFIG_USB_PRINTER /* ignoring nonstatic linkage! */ | |
26 | /* FIXME actually, printers are NOT supposed to use device classes; | |
27 | * they're supposed to use interface classes... | |
28 | */ | |
29 | { USB_DEVICE_INFO(7, 1, 1) }, | |
30 | { USB_DEVICE_INFO(7, 1, 2) }, | |
31 | { USB_DEVICE_INFO(7, 1, 3) }, | |
32 | #endif | |
33 | ||
7fe89e9c | 34 | #ifdef CONFIG_USB_NET_CDCETHER |
1da177e4 LT |
35 | /* Linux-USB CDC Ethernet gadget */ |
36 | { USB_DEVICE(0x0525, 0xa4a1), }, | |
37 | /* Linux-USB CDC Ethernet + RNDIS gadget */ | |
38 | { USB_DEVICE(0x0525, 0xa4a2), }, | |
39 | #endif | |
40 | ||
41 | #if defined(CONFIG_USB_TEST) || defined(CONFIG_USB_TEST_MODULE) | |
42 | /* gadget zero, for testing */ | |
43 | { USB_DEVICE(0x0525, 0xa4a0), }, | |
44 | #endif | |
45 | ||
46 | { } /* Terminating entry */ | |
47 | }; | |
48 | ||
49 | static int is_targeted(struct usb_device *dev) | |
50 | { | |
51 | struct usb_device_id *id = whitelist_table; | |
52 | ||
1da177e4 | 53 | /* HNP test device is _never_ targeted (see OTG spec 6.6.6) */ |
84cca820 | 54 | if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a0a && |
1da177e4 LT |
55 | le16_to_cpu(dev->descriptor.idProduct) == 0xbadd)) |
56 | return 0; | |
57 | ||
e5dff0e8 ML |
58 | /* OTG PET device is always targeted (see OTG 2.0 ECN 6.4.2) */ |
59 | if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a0a && | |
60 | le16_to_cpu(dev->descriptor.idProduct) == 0x0200)) | |
61 | return 1; | |
62 | ||
1da177e4 LT |
63 | /* NOTE: can't use usb_match_id() since interface caches |
64 | * aren't set up yet. this is cut/paste from that code. | |
65 | */ | |
66 | for (id = whitelist_table; id->match_flags; id++) { | |
67 | if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) && | |
68 | id->idVendor != le16_to_cpu(dev->descriptor.idVendor)) | |
69 | continue; | |
70 | ||
71 | if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) && | |
72 | id->idProduct != le16_to_cpu(dev->descriptor.idProduct)) | |
73 | continue; | |
74 | ||
75 | /* No need to test id->bcdDevice_lo != 0, since 0 is never | |
76 | greater than any unsigned number. */ | |
77 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) && | |
78 | (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice))) | |
79 | continue; | |
80 | ||
81 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) && | |
82 | (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice))) | |
83 | continue; | |
84 | ||
85 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) && | |
86 | (id->bDeviceClass != dev->descriptor.bDeviceClass)) | |
87 | continue; | |
88 | ||
89 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) && | |
84cca820 | 90 | (id->bDeviceSubClass != dev->descriptor.bDeviceSubClass)) |
1da177e4 LT |
91 | continue; |
92 | ||
93 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) && | |
94 | (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol)) | |
95 | continue; | |
96 | ||
97 | return 1; | |
98 | } | |
99 | ||
100 | /* add other match criteria here ... */ | |
101 | ||
102 | ||
103 | /* OTG MESSAGE: report errors here, customize to match your product */ | |
104 | dev_err(&dev->dev, "device v%04x p%04x is not supported\n", | |
105 | le16_to_cpu(dev->descriptor.idVendor), | |
106 | le16_to_cpu(dev->descriptor.idProduct)); | |
026f3fcb | 107 | |
1da177e4 | 108 | return 0; |
1da177e4 LT |
109 | } |
110 |