diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/usb/core/otg_whitelist.h |
Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/usb/core/otg_whitelist.h')
-rw-r--r-- | drivers/usb/core/otg_whitelist.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/drivers/usb/core/otg_whitelist.h b/drivers/usb/core/otg_whitelist.h new file mode 100644 index 00000000000..627a5a2fc9c --- /dev/null +++ b/drivers/usb/core/otg_whitelist.h | |||
@@ -0,0 +1,112 @@ | |||
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 | /* | ||
13 | * This OTG Whitelist is the OTG "Targeted Peripheral List". It should | ||
14 | * mostly use of USB_DEVICE() or USB_DEVICE_VER() entries.. | ||
15 | * | ||
16 | * YOU _SHOULD_ CHANGE THIS LIST TO MATCH YOUR PRODUCT AND ITS TESTING! | ||
17 | */ | ||
18 | |||
19 | static struct usb_device_id whitelist_table [] = { | ||
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 | |||
34 | #ifdef CONFIG_USB_CDCETHER | ||
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 | |||
53 | /* possible in developer configs only! */ | ||
54 | if (!dev->bus->otg_port) | ||
55 | return 1; | ||
56 | |||
57 | /* HNP test device is _never_ targeted (see OTG spec 6.6.6) */ | ||
58 | if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a0a && | ||
59 | le16_to_cpu(dev->descriptor.idProduct) == 0xbadd)) | ||
60 | return 0; | ||
61 | |||
62 | /* NOTE: can't use usb_match_id() since interface caches | ||
63 | * aren't set up yet. this is cut/paste from that code. | ||
64 | */ | ||
65 | for (id = whitelist_table; id->match_flags; id++) { | ||
66 | if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) && | ||
67 | id->idVendor != le16_to_cpu(dev->descriptor.idVendor)) | ||
68 | continue; | ||
69 | |||
70 | if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) && | ||
71 | id->idProduct != le16_to_cpu(dev->descriptor.idProduct)) | ||
72 | continue; | ||
73 | |||
74 | /* No need to test id->bcdDevice_lo != 0, since 0 is never | ||
75 | greater than any unsigned number. */ | ||
76 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) && | ||
77 | (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice))) | ||
78 | continue; | ||
79 | |||
80 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) && | ||
81 | (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice))) | ||
82 | continue; | ||
83 | |||
84 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) && | ||
85 | (id->bDeviceClass != dev->descriptor.bDeviceClass)) | ||
86 | continue; | ||
87 | |||
88 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) && | ||
89 | (id->bDeviceSubClass!= dev->descriptor.bDeviceSubClass)) | ||
90 | continue; | ||
91 | |||
92 | if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) && | ||
93 | (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol)) | ||
94 | continue; | ||
95 | |||
96 | return 1; | ||
97 | } | ||
98 | |||
99 | /* add other match criteria here ... */ | ||
100 | |||
101 | |||
102 | /* OTG MESSAGE: report errors here, customize to match your product */ | ||
103 | dev_err(&dev->dev, "device v%04x p%04x is not supported\n", | ||
104 | le16_to_cpu(dev->descriptor.idVendor), | ||
105 | le16_to_cpu(dev->descriptor.idProduct)); | ||
106 | #ifdef CONFIG_USB_OTG_WHITELIST | ||
107 | return 0; | ||
108 | #else | ||
109 | return 1; | ||
110 | #endif | ||
111 | } | ||
112 | |||