aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/GNUmakefile11
-rw-r--r--test/Makefile12
-rw-r--r--test/README7
-rw-r--r--test/arraylist_test.c58
-rw-r--r--test/arraylist_test/GNUmakefile20
-rw-r--r--test/arraylist_test/Makefile11
-rw-r--r--test/expect.arraylist_test76
-rw-r--r--test/expect.results_test14
-rw-r--r--test/expect001.diff12
-rw-r--r--test/expect002.diff16
-rw-r--r--test/expect003.diff10
-rw-r--r--test/expect004.diff24
-rw-r--r--test/expect005.diff12
-rw-r--r--test/expect006.diff24
-rw-r--r--test/expect007.diff5
-rw-r--r--test/expect008.diff9
-rw-r--r--test/expect009.diff13
-rw-r--r--test/expect010.diff19
-rw-r--r--test/expect011.diff19
-rw-r--r--test/expect012.diff21
-rw-r--r--test/expect013.diff10
-rw-r--r--test/expect014.diff4
-rw-r--r--test/expect015.diff4
-rw-r--r--test/expect016.diff30
-rw-r--r--test/expect018.diff16
-rw-r--r--test/expect019.diff204
-rw-r--r--test/expect021.diff868
-rw-r--r--test/expect101.diff12
-rw-r--r--test/expect102.diff16
-rw-r--r--test/expect103.diff10
-rw-r--r--test/expect104.diff24
-rw-r--r--test/expect105.diff12
-rw-r--r--test/expect106.diff24
-rw-r--r--test/expect107.diff5
-rw-r--r--test/expect108.diff9
-rw-r--r--test/expect109.diff13
-rw-r--r--test/expect110.diff19
-rw-r--r--test/expect111.diff19
-rw-r--r--test/expect112.diff21
-rw-r--r--test/expect113.diff10
-rw-r--r--test/expect114.diff4
-rw-r--r--test/expect115.diff4
-rw-r--r--test/expect116.diff30
-rw-r--r--test/expect117.diff64
-rw-r--r--test/expect123.diff1
-rw-r--r--test/expect124.diff9
-rw-r--r--test/expect125.diff12
-rw-r--r--test/expect126.diff28
-rw-r--r--test/results_test.c178
-rw-r--r--test/results_test/GNUmakefile20
-rw-r--r--test/results_test/Makefile11
-rw-r--r--test/test001.left.txt7
-rw-r--r--test/test001.right.txt6
-rw-r--r--test/test002.left.txt10
-rw-r--r--test/test002.right.txt9
-rw-r--r--test/test003.left.txt5
-rw-r--r--test/test003.right.txt4
-rw-r--r--test/test004.left.txt14
-rw-r--r--test/test004.right.txt14
-rw-r--r--test/test005.left.txt7
-rw-r--r--test/test005.right.txt7
-rw-r--r--test/test006.left.txt25
-rw-r--r--test/test006.right.txt25
-rw-r--r--test/test007.left.txt1
-rw-r--r--test/test007.right.txt1
-rw-r--r--test/test008.left.txt1
-rw-r--r--test/test008.right.txt6
-rw-r--r--test/test009.left.txt3
-rw-r--r--test/test009.right.txt10
-rw-r--r--test/test010.left.txt14197
-rw-r--r--test/test010.right.txt14201
-rw-r--r--test/test011.left.txt393
-rw-r--r--test/test011.right.txt397
-rw-r--r--test/test012.left.txt23
-rw-r--r--test/test012.right.txt29
-rw-r--r--test/test013.left-w.txt7
-rw-r--r--test/test013.right-w.txt7
-rw-r--r--test/test014.left.txt0
-rw-r--r--test/test014.right.txt1
-rw-r--r--test/test015.left.txt1
-rw-r--r--test/test015.right.txt0
-rw-r--r--test/test016.left.txt298
-rw-r--r--test/test016.right.txt301
-rw-r--r--test/test017.left-U0.txt15
-rw-r--r--test/test017.right-U0.txt19
-rw-r--r--test/test018.left-T.txt7
-rw-r--r--test/test018.right-T.txt6
-rw-r--r--test/test019.left.txt845
-rw-r--r--test/test019.right.txt904
-rw-r--r--test/test020.left.txt919
-rw-r--r--test/test020.right.txt935
-rw-r--r--test/test021.left.txt1367
-rw-r--r--test/test021.right.txt1251
-rw-r--r--test/test101.left-P.txt7
-rw-r--r--test/test101.right-P.txt6
-rw-r--r--test/test102.left-P.txt10
-rw-r--r--test/test102.right-P.txt9
-rw-r--r--test/test103.left-P.txt5
-rw-r--r--test/test103.right-P.txt4
-rw-r--r--test/test104.left-P.txt14
-rw-r--r--test/test104.right-P.txt14
-rw-r--r--test/test105.left-P.txt7
-rw-r--r--test/test105.right-P.txt7
-rw-r--r--test/test106.left-P.txt25
-rw-r--r--test/test106.right-P.txt25
-rw-r--r--test/test107.left-P.txt1
-rw-r--r--test/test107.right-P.txt1
-rw-r--r--test/test108.left-P.txt1
-rw-r--r--test/test108.right-P.txt6
-rw-r--r--test/test109.left-P.txt3
-rw-r--r--test/test109.right-P.txt10
-rw-r--r--test/test110.left-P.txt14197
-rw-r--r--test/test110.right-P.txt14201
-rw-r--r--test/test111.left-P.txt393
-rw-r--r--test/test111.right-P.txt397
-rw-r--r--test/test112.left-P.txt23
-rw-r--r--test/test112.right-P.txt29
-rw-r--r--test/test113.left-Pw.txt7
-rw-r--r--test/test113.right-Pw.txt7
-rw-r--r--test/test114.left-P.txt0
-rw-r--r--test/test114.right-P.txt1
-rw-r--r--test/test115.left-P.txt1
-rw-r--r--test/test115.right-P.txt0
-rw-r--r--test/test116.left-P.txt298
-rw-r--r--test/test116.right-P.txt301
-rw-r--r--test/test117.left-P.txt1237
-rw-r--r--test/test117.right-P.txt1251
-rw-r--r--test/test122.left-P.txt1338
-rw-r--r--test/test122.right-P.txt1251
-rw-r--r--test/test123.left-e.txt1
-rw-r--r--test/test123.right-e.txt2
-rw-r--r--test/test124.left-p.txt15
-rw-r--r--test/test124.right-p.txt15
-rw-r--r--test/test125.left.txt7
-rw-r--r--test/test125.right.txt7
-rw-r--r--test/test126.left.txt171
-rw-r--r--test/test126.right.txt170
-rwxr-xr-xtest/verify_all.sh115
138 files changed, 73952 insertions, 0 deletions
diff --git a/test/GNUmakefile b/test/GNUmakefile
new file mode 100644
index 000000000000..c88d884448ed
--- /dev/null
+++ b/test/GNUmakefile
@@ -0,0 +1,11 @@
+.PHONY: test verify clean
+test: verify clean
+
+# verify_all.sh runs 'make' on sub-directories containing C tests
+verify:
+ ./verify_all.sh
+clean:
+ -rm verify.*
+ -$(MAKE) -C ../lib clean
+ -$(MAKE) -C arraylist_test clean
+ -$(MAKE) -C results_test clean
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 000000000000..f42511784ccd
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,12 @@
+.PHONY: test verify clean
+
+test: verify clean
+
+# verify_all.sh runs 'make' on sub-directories containing C tests
+verify:
+ ./verify_all.sh
+
+clean:
+ -rm verify.*
+ make -C arraylist_test clean
+ make -C results_test clean
diff --git a/test/README b/test/README
new file mode 100644
index 000000000000..60764f106146
--- /dev/null
+++ b/test/README
@@ -0,0 +1,7 @@
+The test produces a diff, which is successful if it is able to reconstruct the
+original source files from it. It is not tested whether diff output is optimal
+or beautiful.
+
+Since different diff algorithms can produce different diff outputs, the
+expect*.diff files are merely provided for reference and are not part of the
+tests.
diff --git a/test/arraylist_test.c b/test/arraylist_test.c
new file mode 100644
index 000000000000..da5542e8d629
--- /dev/null
+++ b/test/arraylist_test.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <arraylist.h>
+
+void test_basic(void)
+{
+ int *p;
+ ARRAYLIST(int) list;
+ ARRAYLIST_INIT(list, 2);
+
+#define dump() do {\
+ printf("(%d items)\n", list.len); \
+ ARRAYLIST_FOREACH(p, list) \
+ printf("[%lu] %d\n", \
+ (unsigned long)ARRAYLIST_IDX(p, list), *p); \
+ printf("\n"); \
+ } while(0)
+
+ dump();
+
+ ARRAYLIST_ADD(p, list);
+ *p = 100;
+ dump();
+
+ ARRAYLIST_ADD(p, list);
+ *p = 101;
+ dump();
+
+ ARRAYLIST_ADD(p, list);
+ *p = 102;
+ dump();
+
+#define insert_test(AT) do {\
+ printf("insert at [" #AT "]:\n"); \
+ ARRAYLIST_INSERT(p, list, AT); \
+ *p = AT; \
+ dump(); \
+ } while(0)
+
+ insert_test(list.len - 1);
+ insert_test(1);
+ insert_test(0);
+ insert_test(6);
+ insert_test(123);
+ insert_test(-42);
+
+ printf("clear:\n");
+ ARRAYLIST_CLEAR(list);
+ dump();
+
+ ARRAYLIST_FREE(list);
+}
+
+int main(void)
+{
+ test_basic();
+}
diff --git a/test/arraylist_test/GNUmakefile b/test/arraylist_test/GNUmakefile
new file mode 100644
index 000000000000..9f781ee997b3
--- /dev/null
+++ b/test/arraylist_test/GNUmakefile
@@ -0,0 +1,20 @@
+.PHONY: regress clean
+
+CFLAGS = -fsanitize=address -fsanitize=undefined -g -O3
+CFLAGS += -Wstrict-prototypes -Wunused-variable -Wuninitialized
+
+CFLAGS+= -I$(CURDIR)/../../compat/include \
+ -I$(CURDIR)/../../include \
+ -I$(CURDIR)/../../lib
+
+$(CURDIR)/arraylist_test: $(CURDIR)/../arraylist_test.c $(CURDIR)/../../lib/libdiff.a
+ gcc $(CFLAGS) -o $@ $^
+
+$(CURDIR)/../../lib/libdiff.a: $(CURDIR)/../../lib/*.[hc] $(CURDIR)/../../include/*.h
+ $(MAKE) -C $(CURDIR)/../../lib
+
+regress: $(CURDIR)/arraylist_test
+ $(CURDIR)/arraylist_test
+
+clean:
+ -rm $(CURDIR)/arraylist_test
diff --git a/test/arraylist_test/Makefile b/test/arraylist_test/Makefile
new file mode 100644
index 000000000000..f088f4767c92
--- /dev/null
+++ b/test/arraylist_test/Makefile
@@ -0,0 +1,11 @@
+.PATH:${.CURDIR}/../../lib
+.PATH:${.CURDIR}/..
+
+PROG = arraylist_test
+SRCS = arraylist_test.c
+
+CPPFLAGS = -I${.CURDIR}/../../include -I${.CURDIR}/../../lib
+
+NOMAN = yes
+
+.include <bsd.regress.mk>
diff --git a/test/expect.arraylist_test b/test/expect.arraylist_test
new file mode 100644
index 000000000000..6b255ecbe78e
--- /dev/null
+++ b/test/expect.arraylist_test
@@ -0,0 +1,76 @@
+==== run-regress-arraylist_test ====
+(0 items)
+
+(1 items)
+[0] 100
+
+(2 items)
+[0] 100
+[1] 101
+
+(3 items)
+[0] 100
+[1] 101
+[2] 102
+
+insert at [list.len - 1]:
+(4 items)
+[0] 100
+[1] 101
+[2] 3
+[3] 102
+
+insert at [1]:
+(5 items)
+[0] 100
+[1] 1
+[2] 101
+[3] 3
+[4] 102
+
+insert at [0]:
+(6 items)
+[0] 0
+[1] 100
+[2] 1
+[3] 101
+[4] 3
+[5] 102
+
+insert at [6]:
+(7 items)
+[0] 0
+[1] 100
+[2] 1
+[3] 101
+[4] 3
+[5] 102
+[6] 6
+
+insert at [123]:
+(8 items)
+[0] 0
+[1] 100
+[2] 1
+[3] 101
+[4] 3
+[5] 102
+[6] 6
+[7] 123
+
+insert at [-42]:
+(9 items)
+[0] 0
+[1] 100
+[2] 1
+[3] 101
+[4] 3
+[5] 102
+[6] 6
+[7] 123
+[8] -42
+
+clear:
+(0 items)
+
+
diff --git a/test/expect.results_test b/test/expect.results_test
new file mode 100644
index 000000000000..93755ac42bd2
--- /dev/null
+++ b/test/expect.results_test
@@ -0,0 +1,14 @@
+==== run-regress-results_test ====
+
+--- test_minus_after_plus()
+[0] same lines L2 R2 @L 0 @R 0
+[1] minus lines L3 R0 @L 2 @R 2
+[2] plus lines L0 R3 @L 5 @R 2
+[3] same lines L2 R2 @L 5 @R 5
+
+--- test_plus_after_plus()
+[0] same lines L2 R2 @L 0 @R 0
+[1] minus lines L3 R0 @L 2 @R 2
+[2] plus lines L0 R3 @L 5 @R 2
+[3] same lines L2 R2 @L 5 @R 5
+
diff --git a/test/expect001.diff b/test/expect001.diff
new file mode 100644
index 000000000000..7dd803c57dde
--- /dev/null
+++ b/test/expect001.diff
@@ -0,0 +1,12 @@
+--- test001.left.txt
++++ test001.right.txt
+@@ -1,7 +1,6 @@
+-A
+-B
+ C
++B
+ A
+ B
+-B
+ A
++C
diff --git a/test/expect002.diff b/test/expect002.diff
new file mode 100644
index 000000000000..d6c64921df76
--- /dev/null
+++ b/test/expect002.diff
@@ -0,0 +1,16 @@
+--- test002.left.txt
++++ test002.right.txt
+@@ -1,10 +1,9 @@
+-A
+-B
+ C
++B
+ A
+ B
+-B
+ A
++C
+ X
+-Y
+ Z
++Q
diff --git a/test/expect003.diff b/test/expect003.diff
new file mode 100644
index 000000000000..1694445da790
--- /dev/null
+++ b/test/expect003.diff
@@ -0,0 +1,10 @@
+--- test003.left.txt
++++ test003.right.txt
+@@ -1,5 +1,4 @@
+-a
++x
+ b
+ c
+-d
+-e
++y
diff --git a/test/expect004.diff b/test/expect004.diff
new file mode 100644
index 000000000000..061a76ad650b
--- /dev/null
+++ b/test/expect004.diff
@@ -0,0 +1,24 @@
+--- test004.left.txt
++++ test004.right.txt
+@@ -1,3 +1,10 @@
++int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
++{
++ if (chunk == NULL) return 0;
++
++ return start <= chunk->length && n <= chunk->length - start;
++}
++
+ void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+ {
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+@@ -5,10 +12,3 @@
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+ }
+-
+-int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+-{
+- if (chunk == NULL) return 0;
+-
+- return start <= chunk->length && n <= chunk->length - start;
+-}
diff --git a/test/expect005.diff b/test/expect005.diff
new file mode 100644
index 000000000000..9ce014a67eb6
--- /dev/null
+++ b/test/expect005.diff
@@ -0,0 +1,12 @@
+--- test005.left.txt
++++ test005.right.txt
+@@ -1,7 +1,7 @@
++The Slits
++Gil Scott Heron
+ David Axelrod
+ Electric Prunes
+-Gil Scott Heron
+-The Slits
+ Faust
+ The Sonics
+ The Sonics
diff --git a/test/expect006.diff b/test/expect006.diff
new file mode 100644
index 000000000000..70233e0337e1
--- /dev/null
+++ b/test/expect006.diff
@@ -0,0 +1,24 @@
+--- test006.left.txt
++++ test006.right.txt
+@@ -3,7 +3,7 @@
+
+ It is important to specify the year of the copyright. Additional years
+ should be separated by a comma, e.g.
+- Copyright (c) 2003, 2004
++ Copyright (c) 2003, 2004, 2005
+
+ If you add extra text to the body of the license, be careful not to
+ add further restrictions.
+@@ -11,7 +11,6 @@
+ /*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+- * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+@@ -23,3 +22,4 @@
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
++An extra line
diff --git a/test/expect007.diff b/test/expect007.diff
new file mode 100644
index 000000000000..a6a06181d840
--- /dev/null
+++ b/test/expect007.diff
@@ -0,0 +1,5 @@
+--- test007.left.txt
++++ test007.right.txt
+@@ -1 +1 @@
+-x
++abcdx
diff --git a/test/expect008.diff b/test/expect008.diff
new file mode 100644
index 000000000000..c4dc6791528b
--- /dev/null
+++ b/test/expect008.diff
@@ -0,0 +1,9 @@
+--- test008.left.txt
++++ test008.right.txt
+@@ -1 +1,6 @@
+ x
++a
++b
++c
++d
++x
diff --git a/test/expect009.diff b/test/expect009.diff
new file mode 100644
index 000000000000..c2dae93ed893
--- /dev/null
+++ b/test/expect009.diff
@@ -0,0 +1,13 @@
+--- test009.left.txt
++++ test009.right.txt
+@@ -1,3 +1,10 @@
+ x
+ a
+ b
++c
++d
++e
++f
++x
++a
++b
diff --git a/test/expect010.diff b/test/expect010.diff
new file mode 100644
index 000000000000..868a057dec4d
--- /dev/null
+++ b/test/expect010.diff
@@ -0,0 +1,19 @@
+--- test010.left.txt
++++ test010.right.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
++/* $OpenBSD$ */
+
+ /*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+@@ -10979,6 +10979,10 @@
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
++ "RTL8192EU",
++ },
++ {
++ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
diff --git a/test/expect011.diff b/test/expect011.diff
new file mode 100644
index 000000000000..7ad8f311b3e6
--- /dev/null
+++ b/test/expect011.diff
@@ -0,0 +1,19 @@
+--- test011.left.txt
++++ test011.right.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
++/* $OpenBSD$ */
+
+ /*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+@@ -375,6 +375,10 @@
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
++ "RTL8192EU",
++ },
++ {
++ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
diff --git a/test/expect012.diff b/test/expect012.diff
new file mode 100644
index 000000000000..e9a704b8c534
--- /dev/null
+++ b/test/expect012.diff
@@ -0,0 +1,21 @@
+--- test012.left.txt
++++ test012.right.txt
+@@ -1,4 +1,4 @@
+-1 left
++1 right
+ 2
+ 3
+ 4
+@@ -17,6 +17,12 @@
+ 17
+ 18
+ 19
++14
++15
++16 right
++17
++18
++19
+ 20
+ 21
+ 22
diff --git a/test/expect013.diff b/test/expect013.diff
new file mode 100644
index 000000000000..139970c971d6
--- /dev/null
+++ b/test/expect013.diff
@@ -0,0 +1,10 @@
+--- test013.left-w.txt
++++ test013.right-w.txt
+@@ -3,5 +3,5 @@
+ C
+ D
+ E
+-F
+-G
++F x
++y G
diff --git a/test/expect014.diff b/test/expect014.diff
new file mode 100644
index 000000000000..43af317b26f1
--- /dev/null
+++ b/test/expect014.diff
@@ -0,0 +1,4 @@
+--- test014.left.txt
++++ test014.right.txt
+@@ -0,0 +1 @@
++A
diff --git a/test/expect015.diff b/test/expect015.diff
new file mode 100644
index 000000000000..fd5d0482ba38
--- /dev/null
+++ b/test/expect015.diff
@@ -0,0 +1,4 @@
+--- test015.left.txt
++++ test015.right.txt
+@@ -1 +0,0 @@
+-A
diff --git a/test/expect016.diff b/test/expect016.diff
new file mode 100644
index 000000000000..17299d578095
--- /dev/null
+++ b/test/expect016.diff
@@ -0,0 +1,30 @@
+--- test016.left.txt
++++ test016.right.txt
+@@ -254,7 +254,7 @@
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+- const char *repo_path;
++ const char *repo_path, *remote_repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+@@ -275,6 +275,9 @@
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
++ remote_repo_path = server_path;
++ while (remote_repo_path[0] == '/')
++ remote_repo_path++;
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+@@ -285,7 +288,7 @@
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+- server_path,
++ remote_repo_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
diff --git a/test/expect018.diff b/test/expect018.diff
new file mode 100644
index 000000000000..c948e6210e5c
--- /dev/null
+++ b/test/expect018.diff
@@ -0,0 +1,16 @@
+--- test018.left-T.txt
++++ test018.right-T.txt
+@@ -1,7 +1,6 @@
+-A
+-B
+-C
+-A
+-B
+-B
+-A
++C
++B
++A
++B
++A
++C
diff --git a/test/expect019.diff b/test/expect019.diff
new file mode 100644
index 000000000000..ee242a032fca
--- /dev/null
+++ b/test/expect019.diff
@@ -0,0 +1,204 @@
+--- test019.left.txt
++++ test019.right.txt
+@@ -40,8 +40,23 @@
+ #include "got_lib_object.h"
+
+ static const struct got_error *
+-diff_blobs(struct got_diffreg_result **resultp,
+-struct got_blob_object *blob1, struct got_blob_object *blob2,
++add_line_offset(off_t **line_offsets, size_t *nlines, off_t off)
++{
++ off_t *p;
++
++ p = reallocarray(*line_offsets, *nlines + 1, sizeof(off_t));
++ if (p == NULL)
++ return got_error_from_errno("reallocarray");
++ *line_offsets = p;
++ (*line_offsets)[*nlines] = off;
++ (*nlines)++;
++ return NULL;
++}
++
++static const struct got_error *
++diff_blobs(off_t **line_offsets, size_t *nlines,
++ struct got_diffreg_result **resultp, struct got_blob_object *blob1,
++ struct got_blob_object *blob2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+ {
+@@ -52,7 +67,12 @@
+ char *idstr1 = NULL, *idstr2 = NULL;
+ size_t size1, size2;
+ struct got_diffreg_result *result;
++ off_t outoff = 0;
++ int n;
+
++ if (line_offsets && *line_offsets && *nlines > 0)
++ outoff = (*line_offsets)[*nlines - 1];
++
+ if (resultp)
+ *resultp = NULL;
+
+@@ -116,10 +136,32 @@
+ goto done;
+ }
+ }
+- fprintf(outfile, "blob - %s%s\n", idstr1,
++ n = fprintf(outfile, "blob - %s%s\n", idstr1,
+ modestr1 ? modestr1 : "");
+- fprintf(outfile, "blob + %s%s\n", idstr2,
++ if (n < 0) {
++ err = got_error_from_errno("fprintf");
++ goto done;
++ }
++ outoff += n;
++ if (line_offsets) {
++ err = add_line_offset(line_offsets, nlines, outoff);
++ if (err)
++ goto done;
++ }
++
++ n = fprintf(outfile, "blob + %s%s\n", idstr2,
+ modestr2 ? modestr2 : "");
++ if (n < 0) {
++ err = got_error_from_errno("fprintf");
++ goto done;
++ }
++ outoff += n;
++ if (line_offsets) {
++ err = add_line_offset(line_offsets, nlines, outoff);
++ if (err)
++ goto done;
++ }
++
+ free(modestr1);
+ free(modestr2);
+ }
+@@ -129,7 +171,7 @@
+ goto done;
+
+ if (outfile) {
+- err = got_diffreg_output(NULL, NULL, result, f1, f2,
++ err = got_diffreg_output(line_offsets, nlines, result, f1, f2,
+ label1 ? label1 : idstr1,
+ label2 ? label2 : idstr2,
+ GOT_DIFF_OUTPUT_UNIDIFF, diff_context, outfile);
+@@ -158,21 +200,21 @@
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+ {
+- const struct got_error *err;
+ struct got_diff_blob_output_unidiff_arg *a = arg;
+
+- err = diff_blobs(NULL, blob1, blob2, label1, label2, mode1, mode2,
+- a->diff_context, a->ignore_whitespace, a->outfile);
+- return err;
++ return diff_blobs(&a->line_offsets, &a->nlines, NULL,
++ blob1, blob2, label1, label2, mode1, mode2, a->diff_context,
++ a->ignore_whitespace, a->outfile);
+ }
+
+ const struct got_error *
+-got_diff_blob(struct got_blob_object *blob1, struct got_blob_object *blob2,
++got_diff_blob(off_t **line_offsets, size_t *nlines,
++ struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+ {
+- return diff_blobs(NULL, blob1, blob2, label1, label2, 0, 0, diff_context,
+- ignore_whitespace, outfile);
++ return diff_blobs(line_offsets, nlines, NULL, blob1, blob2,
++ label1, label2, 0, 0, diff_context, ignore_whitespace, outfile);
+ }
+
+ static const struct got_error *
+@@ -259,7 +301,8 @@
+ {
+ const struct got_error *err = NULL;
+
+- err = diff_blobs(result, blob1, blob2, NULL, NULL, 0, 0, 3, 0, NULL);
++ err = diff_blobs(NULL, NULL, result, blob1, blob2,
++ NULL, NULL, 0, 0, 3, 0, NULL);
+ if (err) {
+ got_diffreg_result_free(*result);
+ *result = NULL;
+@@ -702,7 +745,8 @@
+ }
+
+ const struct got_error *
+-got_diff_objects_as_blobs(struct got_object_id *id1, struct got_object_id *id2,
++got_diff_objects_as_blobs(off_t **line_offsets, size_t *nlines,
++ struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, struct got_repository *repo, FILE *outfile)
+ {
+@@ -722,8 +766,8 @@
+ if (err)
+ goto done;
+ }
+- err = got_diff_blob(blob1, blob2, label1, label2, diff_context,
+- ignore_whitespace, outfile);
++ err = got_diff_blob(line_offsets, nlines, blob1, blob2,
++ label1, label2, diff_context, ignore_whitespace, outfile);
+ done:
+ if (blob1)
+ got_object_blob_close(blob1);
+@@ -733,13 +777,15 @@
+ }
+
+ const struct got_error *
+-got_diff_objects_as_trees(struct got_object_id *id1, struct got_object_id *id2,
++got_diff_objects_as_trees(off_t **line_offsets, size_t *nlines,
++ struct got_object_id *id1, struct got_object_id *id2,
+ char *label1, char *label2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+ {
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+ struct got_diff_blob_output_unidiff_arg arg;
++ int want_lineoffsets = (line_offsets != NULL && *line_offsets != NULL);
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+@@ -757,8 +803,20 @@
+ arg.diff_context = diff_context;
+ arg.ignore_whitespace = ignore_whitespace;
+ arg.outfile = outfile;
++ if (want_lineoffsets) {
++ arg.line_offsets = *line_offsets;
++ arg.nlines = *nlines;
++ } else {
++ arg.line_offsets = NULL;
++ arg.nlines = 0;
++ }
+ err = got_diff_tree(tree1, tree2, label1, label2, repo,
+ got_diff_blob_output_unidiff, &arg, 1);
++
++ if (want_lineoffsets) {
++ *line_offsets = arg.line_offsets; /* was likely re-allocated */
++ *nlines = arg.nlines;
++ }
+ done:
+ if (tree1)
+ got_object_tree_close(tree1);
+@@ -768,8 +826,9 @@
+ }
+
+ const struct got_error *
+-got_diff_objects_as_commits(struct got_object_id *id1,
+- struct got_object_id *id2, int diff_context, int ignore_whitespace,
++got_diff_objects_as_commits(off_t **line_offsets, size_t *nlines,
++ struct got_object_id *id1, struct got_object_id *id2,
++ int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+ {
+ const struct got_error *err;
+@@ -788,7 +847,7 @@
+ if (err)
+ goto done;
+
+- err = got_diff_objects_as_trees(
++ err = got_diff_objects_as_trees(line_offsets, nlines,
+ commit1 ? got_object_commit_get_tree_id(commit1) : NULL,
+ got_object_commit_get_tree_id(commit2), "", "", diff_context,
+ ignore_whitespace, repo, outfile);
diff --git a/test/expect021.diff b/test/expect021.diff
new file mode 100644
index 000000000000..076ccd4d4a2d
--- /dev/null
+++ b/test/expect021.diff
@@ -0,0 +1,868 @@
+--- test021.left.txt
++++ test021.right.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: softraid_crypto.c,v 1.91 2013/03/31 15:44:52 jsing Exp $ */
++/* $OpenBSD: softraid_crypto.c,v 1.139 2020/07/13 00:06:22 kn Exp $ */
+ /*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+@@ -25,7 +25,6 @@
+ #include <sys/buf.h>
+ #include <sys/device.h>
+ #include <sys/ioctl.h>
+-#include <sys/proc.h>
+ #include <sys/malloc.h>
+ #include <sys/pool.h>
+ #include <sys/kernel.h>
+@@ -34,6 +33,7 @@
+ #include <sys/queue.h>
+ #include <sys/fcntl.h>
+ #include <sys/disklabel.h>
++#include <sys/vnode.h>
+ #include <sys/mount.h>
+ #include <sys/sensors.h>
+ #include <sys/stat.h>
+@@ -42,7 +42,6 @@
+ #include <sys/dkio.h>
+
+ #include <crypto/cryptodev.h>
+-#include <crypto/cryptosoft.h>
+ #include <crypto/rijndael.h>
+ #include <crypto/md5.h>
+ #include <crypto/sha1.h>
+@@ -54,7 +53,6 @@
+ #include <scsi/scsi_disk.h>
+
+ #include <dev/softraidvar.h>
+-#include <dev/rndvar.h>
+
+ /*
+ * The per-I/O data that we need to preallocate. We cannot afford to allow I/O
+@@ -62,18 +60,15 @@
+ * because we assert that only one ccb per WU will ever be active.
+ */
+ struct sr_crypto_wu {
+- TAILQ_ENTRY(sr_crypto_wu) cr_link;
++ struct sr_workunit cr_wu; /* Must be first. */
+ struct uio cr_uio;
+ struct iovec cr_iov;
+ struct cryptop *cr_crp;
+- struct cryptodesc *cr_descs;
+- struct sr_workunit *cr_wu;
+ void *cr_dmabuf;
+ };
+
+
+-struct sr_crypto_wu *sr_crypto_wu_get(struct sr_workunit *, int);
+-void sr_crypto_wu_put(struct sr_crypto_wu *);
++struct sr_crypto_wu *sr_crypto_prepare(struct sr_workunit *, int);
+ int sr_crypto_create_keys(struct sr_discipline *);
+ int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+@@ -92,12 +87,11 @@
+ struct bioc_discipline *);
+ int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+-int sr_crypto_write(struct cryptop *);
++void sr_crypto_write(struct cryptop *);
+ int sr_crypto_rw(struct sr_workunit *);
+-int sr_crypto_rw2(struct sr_workunit *, struct sr_crypto_wu *);
++int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+ void sr_crypto_done(struct sr_workunit *);
+-int sr_crypto_read(struct cryptop *);
+-void sr_crypto_finish_io(struct sr_workunit *);
++void sr_crypto_read(struct cryptop *);
+ void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+ void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+@@ -113,6 +107,7 @@
+ int i;
+
+ /* Fill out discipline members. */
++ sd->sd_wu_size = sizeof(struct sr_crypto_wu);
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+@@ -143,8 +138,14 @@
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+- }
++ }
+
++ if (coerced_size > SR_CRYPTO_MAXSIZE) {
++ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
++ sd->sd_name, coerced_size, SR_CRYPTO_MAXSIZE);
++ goto done;
++ }
++
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+@@ -208,7 +209,7 @@
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+- bcopy(data, sd->mds.mdd_crypto.scr_maskkey,
++ memcpy(sd->mds.mdd_crypto.scr_maskkey, data,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+@@ -248,117 +249,69 @@
+ }
+
+ struct sr_crypto_wu *
+-sr_crypto_wu_get(struct sr_workunit *wu, int encrypt)
++sr_crypto_prepare(struct sr_workunit *wu, int encrypt)
+ {
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+- daddr64_t blk = 0;
++ daddr_t blkno;
+ u_int keyndx;
+
+- DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_get wu: %p encrypt: %d\n",
++ DNPRINTF(SR_D_DIS, "%s: sr_crypto_prepare wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+- mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+- if ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL)
+- TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+- mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+- if (crwu == NULL)
+- panic("sr_crypto_wu_get: out of wus");
+-
++ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+- bcopy(xs->data, crwu->cr_uio.uio_iov->iov_base, xs->datalen);
++ memcpy(crwu->cr_uio.uio_iov->iov_base, xs->data, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+- if (xs->cmdlen == 10)
+- blk = _4btol(((struct scsi_rw_big *)xs->cmd)->addr);
+- else if (xs->cmdlen == 16)
+- blk = _8btol(((struct scsi_rw_16 *)xs->cmd)->addr);
+- else if (xs->cmdlen == 6)
+- blk = _3btol(((struct scsi_rw *)xs->cmd)->addr);
+-
++ blkno = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+- * Since there may be less than that we need to tweak the linked list
++ * Since there may be less than that we need to tweak the amount
+ * of crypto desc structures to be just long enough for our needs.
+ */
+- crd = crwu->cr_descs;
+- for (i = 0; i < ((MAXPHYS >> DEV_BSHIFT) - n); i++) {
+- crd = crd->crd_next;
+- KASSERT(crd);
+- }
+- crwu->cr_crp->crp_desc = crd;
++ KASSERT(crwu->cr_crp->crp_ndescalloc >= n);
++ crwu->cr_crp->crp_ndesc = n;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+- /* Select crypto session based on block number */
+- keyndx = blk >> SR_CRYPTO_KEY_BLKSHIFT;
+- if (keyndx >= SR_CRYPTO_MAXKEYS)
+- goto unwind;
++ /*
++ * Select crypto session based on block number.
++ *
++ * XXX - this does not handle the case where the read/write spans
++ * across a different key blocks (e.g. 0.5TB boundary). Currently
++ * this is already broken by the use of scr_key[0] below.
++ */
++ keyndx = blkno >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+- if (crwu->cr_crp->crp_sid == (u_int64_t)-1)
+- goto unwind;
+
++ crwu->cr_crp->crp_opaque = crwu;
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
++ crwu->cr_crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_NOQUEUE;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+- for (i = 0, crd = crwu->cr_crp->crp_desc; crd;
+- i++, blk++, crd = crd->crd_next) {
++ for (i = 0; i < crwu->cr_crp->crp_ndesc; i++, blkno++) {
++ crd = &crwu->cr_crp->crp_desc[i];
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+- crd->crd_alg = CRYPTO_AES_XTS;
+-
+- switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+- case SR_CRYPTOA_AES_XTS_128:
+- crd->crd_klen = 256;
+- break;
+- case SR_CRYPTOA_AES_XTS_256:
+- crd->crd_klen = 512;
+- break;
+- default:
+- goto unwind;
+- }
++ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
++ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+- bcopy(&blk, crd->crd_iv, sizeof(blk));
++ memcpy(crd->crd_iv, &blkno, sizeof(blkno));
+ }
+- crwu->cr_wu = wu;
+- crwu->cr_crp->crp_opaque = crwu;
+
+ return (crwu);
+-
+-unwind:
+- /* steal the descriptors back from the cryptop */
+- crwu->cr_crp->crp_desc = NULL;
+-
+- return (NULL);
+-}
+-
+-void
+-sr_crypto_wu_put(struct sr_crypto_wu *crwu)
+-{
+- struct cryptop *crp = crwu->cr_crp;
+- struct sr_workunit *wu = crwu->cr_wu;
+- struct sr_discipline *sd = wu->swu_dis;
+-
+- DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_put crwu: %p\n",
+- DEVNAME(wu->swu_dis->sd_sc), crwu);
+-
+- /* steal the descriptors back from the cryptop */
+- crp->crp_desc = NULL;
+-
+- mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+- TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+- mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+ }
+
+ int
+@@ -386,9 +339,8 @@
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+- bcopy(&kdfinfo->genkdf,
+- sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+- kdfinfo->genkdf.len);
++ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
++ &kdfinfo->genkdf, kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+@@ -396,7 +348,7 @@
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+- bcopy(&kdfinfo->maskkey, sd->mds.mdd_crypto.scr_maskkey,
++ memcpy(sd->mds.mdd_crypto.scr_maskkey, &kdfinfo->maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+@@ -404,7 +356,7 @@
+ rv = 0;
+ out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+- free(kdfinfo, M_DEVBUF);
++ free(kdfinfo, M_DEVBUF, bc->bc_opaque_size);
+
+ return (rv);
+ }
+@@ -424,7 +376,7 @@
+ rv = 0;
+ break;
+ default:
+- DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %u\n",
++ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+@@ -450,7 +402,7 @@
+ rv = 0;
+ break;
+ default:
+- DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %u\n",
++ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+@@ -615,6 +567,17 @@
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
++ }
++
++ /* Copy new KDF hint to metadata, if supplied. */
++ if (kdfinfo2->flags & SR_CRYPTOKDF_HINT) {
++ if (kdfinfo2->genkdf.len >
++ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint))
++ goto out;
++ explicit_bzero(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
++ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint));
++ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
++ &kdfinfo2->genkdf, kdfinfo2->genkdf.len);
+ }
+
+ /* Mask the disk keys. */
+@@ -630,7 +593,7 @@
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+- bcopy(check_digest, sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
++ memcpy(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac, check_digest,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+@@ -638,7 +601,7 @@
+ out:
+ if (p) {
+ explicit_bzero(p, ksz);
+- free(p, M_DEVBUF);
++ free(p, M_DEVBUF, ksz);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+@@ -686,7 +649,7 @@
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+- goto fail;
++ goto done;
+ }
+ open = 1; /* close dev on error */
+
+@@ -696,19 +659,12 @@
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+- VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+- vput(vn);
+- goto fail;
++ goto done;
+ }
+- if (label.d_secsize != DEV_BSIZE) {
+- sr_error(sc, "%s has unsupported sector size (%d)",
+- devname, label.d_secsize);
+- goto fail;
+- }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+- sr_error(sc, "%s partition not of type RAID (%d)\n",
++ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+- goto fail;
++ goto done;
+ }
+
+ /*
+@@ -728,7 +684,7 @@
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+- bcopy(&sd->sd_meta->ssdi.ssd_uuid, &km->scmi.scm_uuid,
++ memcpy(&km->scmi.scm_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+@@ -745,7 +701,7 @@
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+- bcopy(&sd->sd_meta->ssdi.ssd_uuid, &sm->ssdi.ssd_uuid,
++ memcpy(&sm->ssdi.ssd_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+@@ -785,7 +741,7 @@
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+- bcopy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
++ memcpy(&skm->skm_maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+@@ -799,19 +755,16 @@
+ goto done;
+
+ fail:
+- if (key_disk)
+- free(key_disk, M_DEVBUF);
++ free(key_disk, M_DEVBUF, sizeof(struct sr_chunk));
+ key_disk = NULL;
+
+ done:
+- if (omi)
+- free(omi, M_DEVBUF);
++ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+- free(fakesd->sd_vol.sv_chunks, M_DEVBUF);
+- if (fakesd)
+- free(fakesd, M_DEVBUF);
+- if (sm)
+- free(sm, M_DEVBUF);
++ free(fakesd->sd_vol.sv_chunks, M_DEVBUF,
++ sizeof(struct sr_chunk *));
++ free(fakesd, M_DEVBUF, sizeof(struct sr_discipline));
++ free(sm, M_DEVBUF, sizeof(struct sr_metadata));
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+@@ -855,7 +808,7 @@
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+- if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
++ if (VOP_OPEN(vn, FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+@@ -869,17 +822,10 @@
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+- VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+- vput(vn);
+ goto done;
+ }
+- if (label.d_secsize != DEV_BSIZE) {
+- sr_error(sc, "%s has unsupported sector size (%d)",
+- devname, label.d_secsize);
+- goto done;
+- }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+- sr_error(sc, "%s partition not of type RAID (%d)\n",
++ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+@@ -887,7 +833,7 @@
+ /*
+ * Read and validate key disk metadata.
+ */
+- sm = malloc(SR_META_SIZE * 512, M_DEVBUF, M_WAITOK | M_ZERO);
++ sm = malloc(SR_META_SIZE * DEV_BSIZE, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+@@ -911,7 +857,7 @@
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+- bcopy((struct sr_meta_chunk *)(sm + 1), &key_disk->src_meta,
++ memcpy(&key_disk->src_meta, (struct sr_meta_chunk *)(sm + 1),
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+@@ -920,13 +866,12 @@
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+- bcopy(&skm->skm_maskkey,
+- sd->mds.mdd_crypto.scr_maskkey,
++ memcpy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+- bcopy(omh + sizeof(struct sr_meta_opt_hdr),
+- sd->mds.mdd_crypto.scr_maskkey,
++ memcpy(sd->mds.mdd_crypto.scr_maskkey,
++ omh + sizeof(struct sr_meta_opt_hdr),
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+@@ -934,15 +879,13 @@
+ open = 0;
+
+ done:
+- for (omi = SLIST_FIRST(&som); omi != SLIST_END(&som); omi = omi_next) {
++ for (omi = SLIST_FIRST(&som); omi != NULL; omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+- if (omi->omi_som)
+- free(omi->omi_som, M_DEVBUF);
+- free(omi, M_DEVBUF);
++ free(omi->omi_som, M_DEVBUF, 0);
++ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ }
+
+- if (sm)
+- free(sm, M_DEVBUF);
++ free(sm, M_DEVBUF, SR_META_SIZE * DEV_BSIZE);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+@@ -950,18 +893,45 @@
+ }
+
+ return key_disk;
++}
++
++static void
++sr_crypto_free_sessions(struct sr_discipline *sd)
++{
++ u_int i;
++
++ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
++ if (sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1) {
++ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
++ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
++ }
++ }
+ }
+
+ int
+ sr_crypto_alloc_resources(struct sr_discipline *sd)
+ {
+- struct cryptoini cri;
++ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
++ struct cryptoini cri;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
++ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
++ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
++ case SR_CRYPTOA_AES_XTS_128:
++ sd->mds.mdd_crypto.scr_klen = 256;
++ break;
++ case SR_CRYPTOA_AES_XTS_256:
++ sd->mds.mdd_crypto.scr_klen = 512;
++ break;
++ default:
++ sr_error(sd->sd_sc, "unknown crypto algorithm");
++ return (EINVAL);
++ }
++
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+@@ -979,61 +949,34 @@
+ }
+
+ /*
+- * For each wu allocate the uio, iovec and crypto structures.
+- * these have to be allocated now because during runtime we can't
+- * fail an allocation without failing the io (which can cause real
++ * For each work unit allocate the uio, iovec and crypto structures.
++ * These have to be allocated now because during runtime we cannot
++ * fail an allocation without failing the I/O (which can cause real
+ * problems).
+ */
+- mtx_init(&sd->mds.mdd_crypto.scr_mutex, IPL_BIO);
+- TAILQ_INIT(&sd->mds.mdd_crypto.scr_wus);
+- for (i = 0; i < sd->sd_max_wu; i++) {
+- crwu = malloc(sizeof(*crwu), M_DEVBUF,
+- M_WAITOK | M_ZERO | M_CANFAIL);
+- if (crwu == NULL)
+- return (ENOMEM);
+- /* put it on the list now so if we fail it'll be freed */
+- mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+- TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+- mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+-
++ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
++ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+- /* steal the list of cryptodescs */
+- crwu->cr_descs = crwu->cr_crp->crp_desc;
+- crwu->cr_crp->crp_desc = NULL;
+ }
+
+- bzero(&cri, sizeof(cri));
+- cri.cri_alg = CRYPTO_AES_XTS;
+- switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+- case SR_CRYPTOA_AES_XTS_128:
+- cri.cri_klen = 256;
+- break;
+- case SR_CRYPTOA_AES_XTS_256:
+- cri.cri_klen = 512;
+- break;
+- default:
+- return (EINVAL);
+- }
++ memset(&cri, 0, sizeof(cri));
++ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
++ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+- /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks */
+- num_keys = sd->sd_meta->ssdi.ssd_size >> SR_CRYPTO_KEY_BLKSHIFT;
+- if (num_keys >= SR_CRYPTO_MAXKEYS)
++ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks. */
++ num_keys = ((sd->sd_meta->ssdi.ssd_size - 1) >>
++ SR_CRYPTO_KEY_BLKSHIFT) + 1;
++ if (num_keys > SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+- for (i = 0; i <= num_keys; i++) {
++ for (i = 0; i < num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+- for (i = 0;
+- sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1;
+- i++) {
+- crypto_freesession(
+- sd->mds.mdd_crypto.scr_sid[i]);
+- sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+- }
++ sr_crypto_free_sessions(sd);
+ return (EINVAL);
+ }
+ }
+@@ -1046,39 +989,30 @@
+ void
+ sr_crypto_free_resources(struct sr_discipline *sd)
+ {
++ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+- u_int i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+- explicit_bzero(sd->mds.mdd_crypto.key_disk, sizeof
+- sd->mds.mdd_crypto.key_disk);
+- free(sd->mds.mdd_crypto.key_disk, M_DEVBUF);
++ explicit_bzero(sd->mds.mdd_crypto.key_disk,
++ sizeof(*sd->mds.mdd_crypto.key_disk));
++ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF,
++ sizeof(*sd->mds.mdd_crypto.key_disk));
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+- for (i = 0; sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1; i++) {
+- crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+- sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+- }
++ sr_crypto_free_sessions(sd);
+
+- mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+- while ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL) {
+- TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+-
+- if (crwu->cr_dmabuf != NULL)
++ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
++ crwu = (struct sr_crypto_wu *)wu;
++ if (crwu->cr_dmabuf)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+- if (crwu->cr_crp) {
+- /* twiddle cryptoreq back */
+- crwu->cr_crp->crp_desc = crwu->cr_descs;
++ if (crwu->cr_crp)
+ crypto_freereq(crwu->cr_crp);
+- }
+- free(crwu, M_DEVBUF);
+ }
+- mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+@@ -1165,65 +1099,60 @@
+ sr_crypto_rw(struct sr_workunit *wu)
+ {
+ struct sr_crypto_wu *crwu;
+- int s, rv = 0;
++ daddr_t blkno;
++ int rv = 0;
+
+- DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu: %p\n",
++ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+- if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+- crwu = sr_crypto_wu_get(wu, 1);
+- if (crwu == NULL)
+- return (1);
++ if (sr_validate_io(wu, &blkno, "sr_crypto_rw"))
++ return (1);
++
++ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
++ crwu = sr_crypto_prepare(wu, 1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+- s = splvm();
+- if (crypto_invoke(crwu->cr_crp))
+- rv = 1;
+- else
++ rv = crypto_dispatch(crwu->cr_crp);
++ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+- splx(s);
+ } else
+- rv = sr_crypto_rw2(wu, NULL);
++ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+ }
+
+-int
++void
+ sr_crypto_write(struct cryptop *crp)
+ {
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+- struct sr_workunit *wu = crwu->cr_wu;
++ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+- DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %x xs: %x\n",
++ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+- sr_crypto_finish_io(wu);
++ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+- return (sr_crypto_rw2(wu, crwu));
++ sr_crypto_dev_rw(wu, crwu);
+ }
+
+ int
+-sr_crypto_rw2(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
++sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+ {
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+- int s;
+- daddr64_t blk;
++ daddr_t blkno;
+
+- if (sr_validate_io(wu, &blk, "sr_crypto_rw2"))
+- goto bad;
++ blkno = wu->swu_blk_start;
+
+- blk += sd->sd_meta->ssd_data_offset;
+-
+- ccb = sr_ccb_rw(sd, 0, blk, xs->datalen, xs->data, xs->flags, 0);
++ ccb = sr_ccb_rw(sd, 0, blkno, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+@@ -1236,17 +1165,10 @@
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
++ sr_schedule_wu(wu);
+
+- s = splbio();
+-
+- if (sr_check_io_collision(wu))
+- goto queued;
+-
+- sr_raid_startwu(wu);
+-
+-queued:
+- splx(s);
+ return (0);
++
+ bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+@@ -1259,77 +1181,39 @@
+ {
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+- struct sr_ccb *ccb;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+- /* only fails on implementation error */
+- crwu = sr_crypto_wu_get(wu, 0);
+- if (crwu == NULL)
+- panic("sr_crypto_intr: no wu");
++ crwu = sr_crypto_prepare(wu, 0);
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+- ccb = TAILQ_FIRST(&wu->swu_ccb);
+- if (ccb == NULL)
+- panic("sr_crypto_done: no ccbs on workunit");
+- ccb->ccb_opaque = crwu;
+- DNPRINTF(SR_D_INTR, "%s: sr_crypto_intr: crypto_invoke %p\n",
++ DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+- s = splvm();
+- crypto_invoke(crwu->cr_crp);
+- splx(s);
++ crypto_dispatch(crwu->cr_crp);
+ return;
+ }
+
+ s = splbio();
+- sr_crypto_finish_io(wu);
++ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+ void
+-sr_crypto_finish_io(struct sr_workunit *wu)
+-{
+- struct sr_discipline *sd = wu->swu_dis;
+- struct scsi_xfer *xs = wu->swu_xs;
+- struct sr_ccb *ccb;
+-#ifdef SR_DEBUG
+- struct sr_softc *sc = sd->sd_sc;
+-#endif /* SR_DEBUG */
+-
+- splassert(IPL_BIO);
+-
+- DNPRINTF(SR_D_INTR, "%s: sr_crypto_finish_io: wu %x xs: %x\n",
+- DEVNAME(sc), wu, xs);
+-
+- if (wu->swu_cb_active == 1)
+- panic("%s: sr_crypto_finish_io", DEVNAME(sd->sd_sc));
+- TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link) {
+- if (ccb->ccb_opaque == NULL)
+- continue;
+- sr_crypto_wu_put(ccb->ccb_opaque);
+- }
+-
+- sr_scsi_done(sd, xs);
+-}
+-
+-int
+ sr_crypto_read(struct cryptop *crp)
+ {
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+- struct sr_workunit *wu = crwu->cr_wu;
++ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+- DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %x xs: %x\n",
++ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+- sr_crypto_finish_io(wu);
++ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+-
+- return (0);
+ }
+
+ void
diff --git a/test/expect101.diff b/test/expect101.diff
new file mode 100644
index 000000000000..eca02621faf8
--- /dev/null
+++ b/test/expect101.diff
@@ -0,0 +1,12 @@
+--- test101.left-P.txt
++++ test101.right-P.txt
+@@ -1,7 +1,6 @@
+-A
+-B
+ C
++B
+ A
+ B
+-B
+ A
++C
diff --git a/test/expect102.diff b/test/expect102.diff
new file mode 100644
index 000000000000..58ec6b7744c8
--- /dev/null
+++ b/test/expect102.diff
@@ -0,0 +1,16 @@
+--- test102.left-P.txt
++++ test102.right-P.txt
+@@ -1,10 +1,9 @@
+-A
+-B
+ C
++B
+ A
+ B
+-B
+ A
++C
+ X
+-Y
+ Z
++Q
diff --git a/test/expect103.diff b/test/expect103.diff
new file mode 100644
index 000000000000..dae017d8028e
--- /dev/null
+++ b/test/expect103.diff
@@ -0,0 +1,10 @@
+--- test103.left-P.txt
++++ test103.right-P.txt
+@@ -1,5 +1,4 @@
+-a
++x
+ b
+ c
+-d
+-e
++y
diff --git a/test/expect104.diff b/test/expect104.diff
new file mode 100644
index 000000000000..c48183f5fa9c
--- /dev/null
+++ b/test/expect104.diff
@@ -0,0 +1,24 @@
+--- test104.left-P.txt
++++ test104.right-P.txt
+@@ -1,3 +1,10 @@
++int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
++{
++ if (chunk == NULL) return 0;
++
++ return start <= chunk->length && n <= chunk->length - start;
++}
++
+ void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+ {
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+@@ -5,10 +12,3 @@
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+ }
+-
+-int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+-{
+- if (chunk == NULL) return 0;
+-
+- return start <= chunk->length && n <= chunk->length - start;
+-}
diff --git a/test/expect105.diff b/test/expect105.diff
new file mode 100644
index 000000000000..82d3b52ee97e
--- /dev/null
+++ b/test/expect105.diff
@@ -0,0 +1,12 @@
+--- test105.left-P.txt
++++ test105.right-P.txt
+@@ -1,7 +1,7 @@
++The Slits
++Gil Scott Heron
+ David Axelrod
+ Electric Prunes
+-Gil Scott Heron
+-The Slits
+ Faust
+ The Sonics
+ The Sonics
diff --git a/test/expect106.diff b/test/expect106.diff
new file mode 100644
index 000000000000..c48cf3199188
--- /dev/null
+++ b/test/expect106.diff
@@ -0,0 +1,24 @@
+--- test106.left-P.txt
++++ test106.right-P.txt
+@@ -3,7 +3,7 @@
+
+ It is important to specify the year of the copyright. Additional years
+ should be separated by a comma, e.g.
+- Copyright (c) 2003, 2004
++ Copyright (c) 2003, 2004, 2005
+
+ If you add extra text to the body of the license, be careful not to
+ add further restrictions.
+@@ -11,7 +11,6 @@
+ /*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+- * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+@@ -23,3 +22,4 @@
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
++An extra line
diff --git a/test/expect107.diff b/test/expect107.diff
new file mode 100644
index 000000000000..f658b89fd21e
--- /dev/null
+++ b/test/expect107.diff
@@ -0,0 +1,5 @@
+--- test107.left-P.txt
++++ test107.right-P.txt
+@@ -1 +1 @@
+-x
++abcdx
diff --git a/test/expect108.diff b/test/expect108.diff
new file mode 100644
index 000000000000..a9b93e784e4e
--- /dev/null
+++ b/test/expect108.diff
@@ -0,0 +1,9 @@
+--- test108.left-P.txt
++++ test108.right-P.txt
+@@ -1 +1,6 @@
+ x
++a
++b
++c
++d
++x
diff --git a/test/expect109.diff b/test/expect109.diff
new file mode 100644
index 000000000000..ee94eff22a3e
--- /dev/null
+++ b/test/expect109.diff
@@ -0,0 +1,13 @@
+--- test109.left-P.txt
++++ test109.right-P.txt
+@@ -1,3 +1,10 @@
+ x
+ a
+ b
++c
++d
++e
++f
++x
++a
++b
diff --git a/test/expect110.diff b/test/expect110.diff
new file mode 100644
index 000000000000..40e1d155b0f2
--- /dev/null
+++ b/test/expect110.diff
@@ -0,0 +1,19 @@
+--- test110.left-P.txt
++++ test110.right-P.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
++/* $OpenBSD$ */
+
+ /*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+@@ -10982,6 +10982,10 @@
+ "RTL8192EU",
+ },
+ {
++ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
++ "RTL8192EU",
++ },
++ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
diff --git a/test/expect111.diff b/test/expect111.diff
new file mode 100644
index 000000000000..dd53220bf3cc
--- /dev/null
+++ b/test/expect111.diff
@@ -0,0 +1,19 @@
+--- test111.left-P.txt
++++ test111.right-P.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
++/* $OpenBSD$ */
+
+ /*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+@@ -378,6 +378,10 @@
+ "RTL8192EU",
+ },
+ {
++ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
++ "RTL8192EU",
++ },
++ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
diff --git a/test/expect112.diff b/test/expect112.diff
new file mode 100644
index 000000000000..680fe1ac37c5
--- /dev/null
+++ b/test/expect112.diff
@@ -0,0 +1,21 @@
+--- test112.left-P.txt
++++ test112.right-P.txt
+@@ -1,4 +1,4 @@
+-1 left
++1 right
+ 2
+ 3
+ 4
+@@ -17,6 +17,12 @@
+ 17
+ 18
+ 19
++14
++15
++16 right
++17
++18
++19
+ 20
+ 21
+ 22
diff --git a/test/expect113.diff b/test/expect113.diff
new file mode 100644
index 000000000000..882171f0cbb5
--- /dev/null
+++ b/test/expect113.diff
@@ -0,0 +1,10 @@
+--- test113.left-Pw.txt
++++ test113.right-Pw.txt
+@@ -3,5 +3,5 @@
+ C
+ D
+ E
+-F
+-G
++F x
++y G
diff --git a/test/expect114.diff b/test/expect114.diff
new file mode 100644
index 000000000000..538b475acd17
--- /dev/null
+++ b/test/expect114.diff
@@ -0,0 +1,4 @@
+--- test114.left-P.txt
++++ test114.right-P.txt
+@@ -0,0 +1 @@
++A
diff --git a/test/expect115.diff b/test/expect115.diff
new file mode 100644
index 000000000000..64d4f35f2582
--- /dev/null
+++ b/test/expect115.diff
@@ -0,0 +1,4 @@
+--- test115.left-P.txt
++++ test115.right-P.txt
+@@ -1 +0,0 @@
+-A
diff --git a/test/expect116.diff b/test/expect116.diff
new file mode 100644
index 000000000000..35c3a14b2f70
--- /dev/null
+++ b/test/expect116.diff
@@ -0,0 +1,30 @@
+--- test116.left-P.txt
++++ test116.right-P.txt
+@@ -254,7 +254,7 @@
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+- const char *repo_path;
++ const char *repo_path, *remote_repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+@@ -275,6 +275,9 @@
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
++ remote_repo_path = server_path;
++ while (remote_repo_path[0] == '/')
++ remote_repo_path++;
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+@@ -285,7 +288,7 @@
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+- server_path,
++ remote_repo_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
diff --git a/test/expect117.diff b/test/expect117.diff
new file mode 100644
index 000000000000..63df381db814
--- /dev/null
+++ b/test/expect117.diff
@@ -0,0 +1,64 @@
+--- test117.left-P.txt
++++ test117.right-P.txt
+@@ -65,6 +65,8 @@
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+ int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
++int sr_crypto_init(struct sr_discipline *,
++ struct bioc_createraid *);
+ int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+ int sr_crypto_alloc_resources(struct sr_discipline *);
+@@ -117,18 +119,34 @@
+ sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+ {
+- struct sr_meta_opt_item *omi;
+- int rv = EINVAL;
++ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+- goto done;
++ return (rv);
+ }
+
+- if (coerced_size > SR_CRYPTO_MAXSIZE) {
++ sd->sd_meta->ssdi.ssd_size = coerced_size;
++
++ rv = sr_crypto_init(sd, bc);
++ if (rv)
++ return (rv);
++
++ sd->sd_max_ccb_per_wu = no_chunk;
++ return (0);
++}
++
++int
++sr_crypto_init(struct sr_discipline *sd, struct bioc_createraid *bc)
++{
++ struct sr_meta_opt_item *omi;
++ int rv = EINVAL;
++
++ if (sd->sd_meta->ssdi.ssd_size > SR_CRYPTO_MAXSIZE) {
+ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
+- sd->sd_name, coerced_size, SR_CRYPTO_MAXSIZE);
++ sd->sd_name, sd->sd_meta->ssdi.ssd_size,
++ SR_CRYPTO_MAXSIZE);
+ goto done;
+ }
+
+@@ -170,12 +188,8 @@
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+- sd->sd_meta->ssdi.ssd_size = coerced_size;
+-
+ sr_crypto_create_keys(sd);
+
+- sd->sd_max_ccb_per_wu = no_chunk;
+-
+ rv = 0;
+ done:
+ return (rv);
diff --git a/test/expect123.diff b/test/expect123.diff
new file mode 100644
index 000000000000..77d05518ee95
--- /dev/null
+++ b/test/expect123.diff
@@ -0,0 +1 @@
+0a1
diff --git a/test/expect124.diff b/test/expect124.diff
new file mode 100644
index 000000000000..82713c206aff
--- /dev/null
+++ b/test/expect124.diff
@@ -0,0 +1,9 @@
+--- test124.left-p.txt
++++ test124.right-p.txt
+@@ -11,5 +11,5 @@ doSomethingThenPrintHello(int test)
+
+ struct testfile *
+ return_test(int test) {
+- return NULL;
++ return test*2;
+ }
diff --git a/test/expect125.diff b/test/expect125.diff
new file mode 100644
index 000000000000..dc9ca80aa498
--- /dev/null
+++ b/test/expect125.diff
@@ -0,0 +1,12 @@
+--- test125.left.txt
++++ test125.right.txt
+@@ -1,7 +1,7 @@
+ This is a test
+ of missing trailing new lines
+ in context
+-this line has a change
++this line has the change
+ this is the same
+ this is too
+ and this one
+\ No newline at end of file
diff --git a/test/expect126.diff b/test/expect126.diff
new file mode 100644
index 000000000000..ddf0066b6822
--- /dev/null
+++ b/test/expect126.diff
@@ -0,0 +1,28 @@
+--- test126.left.txt
++++ test126.right.txt
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: a_time_tm.c,v 1.15 2018/04/25 11:48:21 tb Exp $ */
++/* $OpenBSD: a_time_tm.c,v 1.16 2020/12/16 18:35:59 tb Exp $ */
+ /*
+ * Copyright (c) 2015 Bob Beck <beck@openbsd.org>
+ *
+@@ -108,10 +108,9 @@
+ return (-1);
+
+ lt = tm;
+- if (lt == NULL) {
+- memset(&ltm, 0, sizeof(ltm));
++ if (lt == NULL)
+ lt = &ltm;
+- }
++ memset(lt, 0, sizeof(*lt));
+
+ /* Timezone is required and must be GMT (Zulu). */
+ if (bytes[len - 1] != 'Z')
+@@ -168,4 +167,4 @@
+ }
+
+ return (type);
+-}
++}
+\ No newline at end of file
diff --git a/test/results_test.c b/test/results_test.c
new file mode 100644
index 000000000000..02856a39c249
--- /dev/null
+++ b/test/results_test.c
@@ -0,0 +1,178 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include <arraylist.h>
+#include <diff_main.h>
+
+#include <diff_internal.h>
+#include <diff_debug.h>
+
+void test_minus_after_plus(void)
+{
+ struct diff_result *result = malloc(sizeof(struct diff_result));
+ struct diff_data d_left, d_right;
+ char *left_data = "a\nb\nc\nd\ne\nm\nn\n";
+ char *right_data = "a\nb\nj\nk\nl\nm\nn\n";
+ int i;
+
+ printf("\n--- %s()\n", __func__);
+
+ d_left = (struct diff_data){
+ .data = left_data,
+ .len = strlen(left_data),
+ .root = &d_left,
+ };
+ d_right = (struct diff_data){
+ .data = right_data,
+ .len = strlen(right_data),
+ .root = &d_right,
+ };
+ *result = (struct diff_result) {
+ .left = &d_left,
+ .right = &d_right,
+ };
+
+ diff_atomize_text_by_line(NULL, result->left);
+ diff_atomize_text_by_line(NULL, result->right);
+
+ struct diff_state state = {
+ .result = result,
+ .recursion_depth_left = 32,
+ };
+ diff_data_init_subsection(&state.left, result->left,
+ result->left->atoms.head,
+ result->left->atoms.len);
+ diff_data_init_subsection(&state.right, result->right,
+ result->right->atoms.head,
+ result->right->atoms.len);
+
+ /* "same" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[0], 2,
+ &state.right.atoms.head[0], 2);
+
+ /* "plus" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[2], 0,
+ &state.right.atoms.head[2], 3);
+
+ /* "minus" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[2], 3,
+ &state.right.atoms.head[5], 0);
+
+ /* "same" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[5], 2,
+ &state.right.atoms.head[5], 2);
+
+ for (i = 0; i < result->chunks.len; i++) {
+ struct diff_chunk *c = &result->chunks.head[i];
+ enum diff_chunk_type t = diff_chunk_type(c);
+
+ printf("[%d] %s lines L%d R%d @L %lld @R %lld\n",
+ i, (t == CHUNK_MINUS ? "minus" :
+ (t == CHUNK_PLUS ? "plus" :
+ (t == CHUNK_SAME ? "same" : "?"))),
+ c->left_count,
+ c->right_count,
+ (long long)(c->left_start ? diff_atom_root_idx(result->left, c->left_start) : -1LL),
+ (long long)(c->right_start ? diff_atom_root_idx(result->right, c->right_start) : -1LL));
+ }
+
+ diff_result_free(result);
+ diff_data_free(&d_left);
+ diff_data_free(&d_right);
+}
+
+void test_plus_after_plus(void)
+{
+ struct diff_result *result = malloc(sizeof(struct diff_result));
+ struct diff_data d_left, d_right;
+ char *left_data = "a\nb\nc\nd\ne\nm\nn\n";
+ char *right_data = "a\nb\nj\nk\nl\nm\nn\n";
+ struct diff_chunk *c;
+
+ printf("\n--- %s()\n", __func__);
+
+ d_left = (struct diff_data){
+ .data = left_data,
+ .len = strlen(left_data),
+ .root = &d_left,
+ };
+ d_right = (struct diff_data){
+ .data = right_data,
+ .len = strlen(right_data),
+ .root = &d_right,
+ };
+ *result = (struct diff_result) {
+ .left = &d_left,
+ .right = &d_right,
+ };
+
+ diff_atomize_text_by_line(NULL, result->left);
+ diff_atomize_text_by_line(NULL, result->right);
+
+ struct diff_state state = {
+ .result = result,
+ .recursion_depth_left = 32,
+ };
+ diff_data_init_subsection(&state.left, result->left,
+ result->left->atoms.head,
+ result->left->atoms.len);
+ diff_data_init_subsection(&state.right, result->right,
+ result->right->atoms.head,
+ result->right->atoms.len);
+
+ /* "same" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[0], 2,
+ &state.right.atoms.head[0], 2);
+
+ /* "minus" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[2], 3,
+ &state.right.atoms.head[2], 0);
+
+ /* "plus" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[5], 0,
+ &state.right.atoms.head[2], 1);
+ /* "plus" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[5], 0,
+ &state.right.atoms.head[3], 2);
+
+ /* "same" section */
+ diff_state_add_chunk(&state, true,
+ &state.left.atoms.head[5], 2,
+ &state.right.atoms.head[5], 2);
+
+ ARRAYLIST_FOREACH(c, result->chunks) {
+ enum diff_chunk_type t = diff_chunk_type(c);
+
+ printf("[%lu] %s lines L%d R%d @L %lld @R %lld\n",
+ (unsigned long)ARRAYLIST_IDX(c, result->chunks),
+ (t == CHUNK_MINUS ? "minus" :
+ (t == CHUNK_PLUS ? "plus" :
+ (t == CHUNK_SAME ? "same" : "?"))),
+ c->left_count,
+ c->right_count,
+ (long long)(c->left_start ? diff_atom_root_idx(result->left, c->left_start) : -1LL),
+ (long long)(c->right_start ? diff_atom_root_idx(result->right, c->right_start) : -1LL));
+ }
+
+ diff_result_free(result);
+ diff_data_free(&d_left);
+ diff_data_free(&d_right);
+}
+
+int main(void)
+{
+ test_minus_after_plus();
+ test_plus_after_plus();
+ return 0;
+}
diff --git a/test/results_test/GNUmakefile b/test/results_test/GNUmakefile
new file mode 100644
index 000000000000..f5b14b1f6648
--- /dev/null
+++ b/test/results_test/GNUmakefile
@@ -0,0 +1,20 @@
+.PHONY: regress clean
+
+CFLAGS = -fsanitize=address -fsanitize=undefined -g -O3
+CFLAGS += -Wstrict-prototypes -Wunused-variable -Wuninitialized
+
+CFLAGS+= -I$(CURDIR)/../../compat/include \
+ -I$(CURDIR)/../../include \
+ -I$(CURDIR)/../../lib
+
+$(CURDIR)/results_test: $(CURDIR)/../results_test.c $(CURDIR)/../../lib/libdiff.a
+ gcc $(CFLAGS) -o $@ $^
+
+$(CURDIR)/../../lib/libdiff.a: $(CURDIR)/../../lib/*.[hc] $(CURDIR)/../../include/*.h
+ $(MAKE) -C $(CURDIR)/../../lib
+
+regress: $(CURDIR)/results_test
+ $(CURDIR)/results_test
+
+clean:
+ -rm $(CURDIR)/results_test
diff --git a/test/results_test/Makefile b/test/results_test/Makefile
new file mode 100644
index 000000000000..4cb496ada0aa
--- /dev/null
+++ b/test/results_test/Makefile
@@ -0,0 +1,11 @@
+.PATH:${.CURDIR}/../../lib
+.PATH:${.CURDIR}/..
+
+PROG = results_test
+SRCS = results_test.c diff_atomize_text.c diff_main.c
+
+CPPFLAGS = -I${.CURDIR}/../../include -I${.CURDIR}/../../lib
+
+NOMAN = yes
+
+.include <bsd.regress.mk>
diff --git a/test/test001.left.txt b/test/test001.left.txt
new file mode 100644
index 000000000000..fd113b0f7150
--- /dev/null
+++ b/test/test001.left.txt
@@ -0,0 +1,7 @@
+A
+B
+C
+A
+B
+B
+A
diff --git a/test/test001.right.txt b/test/test001.right.txt
new file mode 100644
index 000000000000..0075e6d23de0
--- /dev/null
+++ b/test/test001.right.txt
@@ -0,0 +1,6 @@
+C
+B
+A
+B
+A
+C
diff --git a/test/test002.left.txt b/test/test002.left.txt
new file mode 100644
index 000000000000..de77f56f2d47
--- /dev/null
+++ b/test/test002.left.txt
@@ -0,0 +1,10 @@
+A
+B
+C
+A
+B
+B
+A
+X
+Y
+Z
diff --git a/test/test002.right.txt b/test/test002.right.txt
new file mode 100644
index 000000000000..a9b4b8b851dd
--- /dev/null
+++ b/test/test002.right.txt
@@ -0,0 +1,9 @@
+C
+B
+A
+B
+A
+C
+X
+Z
+Q
diff --git a/test/test003.left.txt b/test/test003.left.txt
new file mode 100644
index 000000000000..940532533944
--- /dev/null
+++ b/test/test003.left.txt
@@ -0,0 +1,5 @@
+a
+b
+c
+d
+e
diff --git a/test/test003.right.txt b/test/test003.right.txt
new file mode 100644
index 000000000000..d9f266e14574
--- /dev/null
+++ b/test/test003.right.txt
@@ -0,0 +1,4 @@
+x
+b
+c
+y
diff --git a/test/test004.left.txt b/test/test004.left.txt
new file mode 100644
index 000000000000..72d95cf6331a
--- /dev/null
+++ b/test/test004.left.txt
@@ -0,0 +1,14 @@
+void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+{
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+ if (!Chunk_bounds_check(dst, dst_start, n)) return;
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+}
+
+int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+{
+ if (chunk == NULL) return 0;
+
+ return start <= chunk->length && n <= chunk->length - start;
+}
diff --git a/test/test004.right.txt b/test/test004.right.txt
new file mode 100644
index 000000000000..cfe8f2ed6be0
--- /dev/null
+++ b/test/test004.right.txt
@@ -0,0 +1,14 @@
+int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+{
+ if (chunk == NULL) return 0;
+
+ return start <= chunk->length && n <= chunk->length - start;
+}
+
+void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+{
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+ if (!Chunk_bounds_check(dst, dst_start, n)) return;
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+}
diff --git a/test/test005.left.txt b/test/test005.left.txt
new file mode 100644
index 000000000000..b77fc41c4c87
--- /dev/null
+++ b/test/test005.left.txt
@@ -0,0 +1,7 @@
+David Axelrod
+Electric Prunes
+Gil Scott Heron
+The Slits
+Faust
+The Sonics
+The Sonics
diff --git a/test/test005.right.txt b/test/test005.right.txt
new file mode 100644
index 000000000000..2480cecfba48
--- /dev/null
+++ b/test/test005.right.txt
@@ -0,0 +1,7 @@
+The Slits
+Gil Scott Heron
+David Axelrod
+Electric Prunes
+Faust
+The Sonics
+The Sonics
diff --git a/test/test006.left.txt b/test/test006.left.txt
new file mode 100644
index 000000000000..e01fce04d5ef
--- /dev/null
+++ b/test/test006.left.txt
@@ -0,0 +1,25 @@
+Below is an example license to be used for new code in OpenBSD,
+modeled after the ISC license.
+
+It is important to specify the year of the copyright. Additional years
+should be separated by a comma, e.g.
+ Copyright (c) 2003, 2004
+
+If you add extra text to the body of the license, be careful not to
+add further restrictions.
+
+/*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
diff --git a/test/test006.right.txt b/test/test006.right.txt
new file mode 100644
index 000000000000..40a0f253dd2e
--- /dev/null
+++ b/test/test006.right.txt
@@ -0,0 +1,25 @@
+Below is an example license to be used for new code in OpenBSD,
+modeled after the ISC license.
+
+It is important to specify the year of the copyright. Additional years
+should be separated by a comma, e.g.
+ Copyright (c) 2003, 2004, 2005
+
+If you add extra text to the body of the license, be careful not to
+add further restrictions.
+
+/*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+An extra line
diff --git a/test/test007.left.txt b/test/test007.left.txt
new file mode 100644
index 000000000000..587be6b4c3f9
--- /dev/null
+++ b/test/test007.left.txt
@@ -0,0 +1 @@
+x
diff --git a/test/test007.right.txt b/test/test007.right.txt
new file mode 100644
index 000000000000..47b0ccb04734
--- /dev/null
+++ b/test/test007.right.txt
@@ -0,0 +1 @@
+abcdx
diff --git a/test/test008.left.txt b/test/test008.left.txt
new file mode 100644
index 000000000000..587be6b4c3f9
--- /dev/null
+++ b/test/test008.left.txt
@@ -0,0 +1 @@
+x
diff --git a/test/test008.right.txt b/test/test008.right.txt
new file mode 100644
index 000000000000..70b67eef4500
--- /dev/null
+++ b/test/test008.right.txt
@@ -0,0 +1,6 @@
+x
+a
+b
+c
+d
+x
diff --git a/test/test009.left.txt b/test/test009.left.txt
new file mode 100644
index 000000000000..e4e5238f8e5d
--- /dev/null
+++ b/test/test009.left.txt
@@ -0,0 +1,3 @@
+x
+a
+b
diff --git a/test/test009.right.txt b/test/test009.right.txt
new file mode 100644
index 000000000000..3a4386800dba
--- /dev/null
+++ b/test/test009.right.txt
@@ -0,0 +1,10 @@
+x
+a
+b
+c
+d
+e
+f
+x
+a
+b
diff --git a/test/test010.left.txt b/test/test010.left.txt
new file mode 100644
index 000000000000..f68ae6a8ceaa
--- /dev/null
+++ b/test/test010.left.txt
@@ -0,0 +1,14197 @@
+/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+/*
+ * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Descriptions of known vendors and devices ("products").
+ */
+struct usb_known_vendor {
+ u_int16_t vendor;
+ char *vendorname;
+};
+
+struct usb_known_product {
+ u_int16_t vendor;
+ u_int16_t product;
+ char *productname;
+};
+
+const struct usb_known_product usb_known_products[] = {
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_HOMECONN,
+ "HomeConnect",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CREB96,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C19250,
+ "3C19250 Ethernet",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CRSHEW696,
+ "3CRSHEW696",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460,
+ "HomeConnect 3C460",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460B,
+ "HomeConnect 3C460B",
+ },
+ {
+ USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075,
+ "3CRUSB10075",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_OFFICECONN,
+ "3Com OfficeConnect Analog Modem",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USRISDN,
+ "3Com U.S. Robotics Pro ISDN TA",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_HOMECONN,
+ "3Com HomeConnect",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG,
+ "Stereo Plug Cable",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1,
+ "XX1",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2,
+ "XX2",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_URE450,
+ "URE450 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000,
+ "UFE1000 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4,
+ "XX4",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5,
+ "XX5",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6,
+ "XX6",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7,
+ "XX7",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_LCS8138TX,
+ "LCS-8138TX",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8,
+ "XX8",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9,
+ "XX9",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UF200,
+ "UF200 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54,
+ "WL54",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10,
+ "XX10",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_BWU613,
+ "BWU613",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_HWU54DM,
+ "HWU54DM",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WUG2700,
+ "WUG2700",
+ },
+ {
+ USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC,
+ "USB320-EC Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_2664W,
+ "2664W",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_111,
+ "T-Sinus 111 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG,
+ "SMCWUSB-G",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2_NF,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001,
+ "SpeedStream Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN4501H_LF_IR,
+ "WN4501H-LF-IR",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WUS201,
+ "WUS-201",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN7512,
+ "WN7512",
+ },
+ {
+ USB_VENDOR_ACEECA, USB_PRODUCT_ACEECA_MEZ1000,
+ "MEZ1000 RDA",
+ },
+ {
+ USB_VENDOR_ACERCM, USB_PRODUCT_ACERCM_EP1427X2,
+ "EP-1427X-2 Ethernet",
+ },
+ {
+ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632,
+ "USB 2.0 Data Link",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_C310U,
+ "Acerscan C310U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_320U,
+ "Acerscan 320U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_640U,
+ "Acerscan 640U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_620U,
+ "Acerscan 620U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ATAPI,
+ "ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL300,
+ "AWL300",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL400,
+ "AWL400",
+ },
+ {
+ USB_VENDOR_ACERW, USB_PRODUCT_ACERW_WARPLINK,
+ "Warplink",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25,
+ "Prism2.5 WLAN",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25A,
+ "Prism2.5 WLAN A",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_FREELAN,
+ "ROPEX FreeLan 802.11b",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_802UAT1,
+ "802UAT1",
+ },
+ {
+ USB_VENDOR_ACTISYS, USB_PRODUCT_ACTISYS_IR2000U,
+ "ACT-IR2000U FIR",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD,
+ "I/O Board",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD_FW1,
+ "I/O Board, rev. 1",
+ },
+ {
+ USB_VENDOR_ADAPTEC, USB_PRODUCT_ADAPTEC_AWN8020,
+ "AWN-8020 WLAN",
+ },
+ {
+ USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_205,
+ "Cable 205",
+ },
+ {
+ USB_VENDOR_ADDTRON, USB_PRODUCT_ADDTRON_AWU120,
+ "AWU-120",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_4,
+ "AN986A Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS,
+ "AN986 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII,
+ "AN8511 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_2,
+ "AN8513 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_3,
+ "AN8515 Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BT,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BTX,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_AEI, USB_PRODUCT_AEI_FASTETHERNET,
+ "Fast Ethernet",
+ },
+ {
+ USB_VENDOR_AGATE, USB_PRODUCT_AGATE_QDRIVE,
+ "Q-Drive",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1236U,
+ "SnapScan 1236U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANTOUCH,
+ "SnapScan Touch",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U2,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE40,
+ "SnapScan e40",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE50,
+ "SnapScan e50",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE20,
+ "SnapScan e20",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE25,
+ "SnapScan e25",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE26,
+ "SnapScan e26",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE52,
+ "SnapScan e52",
+ },
+ {
+ USB_VENDOR_AINCOMM, USB_PRODUCT_AINCOMM_AWU2000B,
+ "AWU2000B",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220,
+ "CDMA Wireless EVDO card",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_AIRCARD_313U,
+ "Aircard 313U",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AKS, USB_PRODUCT_AKS_USBHASP,
+ "USB-HASP 0.06",
+ },
+ {
+ USB_VENDOR_ALCATEL, USB_PRODUCT_ALCATEL_OT535,
+ "One Touch 535/735",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST120G,
+ "SpeedTouch 120g",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST121G,
+ "SpeedTouch 121g",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_MA_KBD_HUB,
+ "MacAlly Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU9814,
+ "AU9814 Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_SM_KBD,
+ "MicroConnectors/StrongMan",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_NEC_KBD_HUB,
+ "NEC Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB,
+ "Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN, USB_PRODUCT_ALLIEDTELESYN_ATUSB100,
+ "AT-USB100",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70,
+ "ADA70 Speakers",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495,
+ "ASC495 Speakers",
+ },
+ {
+ USB_VENDOR_ALTI2, USB_PRODUCT_ALTI2_NEPTUNE3,
+ "Neptune 3",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250,
+ "NTL 250 cable modem",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GO,
+ "CG-WLUSB2GO",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR,
+ "CG-WLUSB2GNR",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI_NF,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII_NF,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC_NF,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII_NF,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICE,
+ "gnICE",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICEPLUS,
+ "gnICE+",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZUSB,
+ "EZUSB",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK,
+ "EZLINK",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_A2502,
+ "NTT DoCoMo A2502",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100H,
+ "ADU-E100H",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A,
+ "ADU-500A",
+ },
+ {
+ USB_VENDOR_AOX, USB_PRODUCT_AOX_USB101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS5G,
+ "5G UPS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_OPTMOUSE,
+ "Optical mouse",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH_HCI,
+ "HID-proxy",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_SPEAKERS,
+ "Speakers",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
+ "iPhone",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH,
+ "iPod Touch",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3G,
+ "iPhone 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_2G,
+ "iPod Touch 2G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3GS,
+ "iPhone 3GS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_GSM,
+ "iPhone 4 GSM",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_3G,
+ "iPod Touch 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD,
+ "iPad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_CDMA,
+ "iPhone 4 CDMA",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_4G,
+ "iPod Touch 4G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD2,
+ "iPad 2",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4S,
+ "iPhone 4S",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_6,
+ "iPhone 6",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ETHERNET,
+ "Ethernet A1277",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT_1,
+ "iSight",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT,
+ "iSight",
+ },
+ {
+ USB_VENDOR_ARANEUS, USB_PRODUCT_ARANEUS_ALEA,
+ "True Random Number Generator",
+ },
+ {
+ USB_VENDOR_ARDUINO, USB_PRODUCT_ARDUINO_LEONARDO,
+ "Leonardo",
+ },
+ {
+ USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116,
+ "ARK3116 Serial",
+ },
+ {
+ USB_VENDOR_ARUBA, USB_PRODUCT_ARUBA_CP210X,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO230,
+ "PENTAX Optio230",
+ },
+ {
+ USB_VENDOR_ASANTE, USB_PRODUCT_ASANTE_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178,
+ "AX88178",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772,
+ "AX88772",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B_1,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013I,
+ "WLL013 (Intersil)",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_VOYAGER1010,
+ "Voyager 1010",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G,
+ "WL-159g",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI,
+ "A9T wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P5B_WIFI,
+ "P5B wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN13,
+ "USB-N13",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN10,
+ "USB-N10",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN53,
+ "USB-N53",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN66,
+ "USB-N66",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_MYPAL_A730,
+ "MyPal A730",
+ },
+ {
+ USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11,
+ "USB-N11",
+ },
+ {
+ USB_VENDOR_ASUSTEK, USB_PRODUCT_ASUSTEK_WL140,
+ "WL-140",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC1284,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC10T,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC110T,
+ "UC-110T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A,
+ "UC232A Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T,
+ "UC210T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC2324,
+ "UC2324 Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_DSB650C,
+ "DSB-650C",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_TG121N,
+ "TG121N",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN821NV2,
+ "WN821NV2",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_3CRUSBN275,
+ "3CRUSBN275",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN612,
+ "WN612",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR3011,
+ "AR3011",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9170,
+ "AR9170",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATI2, USB_PRODUCT_ATI2_205,
+ "USB Cable 205",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_STK541,
+ "STK541 Zigbee",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_UHB124,
+ "UHB124 hub",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_WN210,
+ "W-Buddie WN210",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_DWL900AP,
+ "DWL-900AP Wireless access point",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT91_CDC_ACM,
+ "AT91 CDC ACM",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I1,
+ "AT76C503 (Intersil 3861 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I2,
+ "AT76C503 (Intersil 3863 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503RFMD,
+ "AT76C503 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD,
+ "AT76C505 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD2958,
+ "AT76C505 (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505A,
+ "AT76C505A (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505AS,
+ "AT76C505AS (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA, USB_PRODUCT_AUDIOTECHNICA_ATCHA4USB,
+ "ATC-HA4USB USB headphone",
+ },
+ {
+ USB_VENDOR_AVAGO, USB_PRODUCT_AVAGO_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
+ "USB Audio Speaker",
+ },
+ {
+ USB_VENDOR_AVERATEC, USB_PRODUCT_AVERATEC_USBWLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AVISION, USB_PRODUCT_AVISION_1200U,
+ "1200U",
+ },
+ {
+ USB_VENDOR_AVM, USB_PRODUCT_AVM_FRITZWLAN,
+ "FRITZ!WLAN N",
+ },
+ {
+ USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM,
+ "Data Modem",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_4,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_5,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_4,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_5,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_6,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_2,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER,
+ "Card reader",
+ },
+ {
+ USB_VENDOR_BAYER, USB_PRODUCT_BAYER_CONTOUR,
+ "Ascensia Contour",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOTL4,
+ "USOTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USTL4,
+ "USTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2,
+ "USO9ML2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4,
+ "USOPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USPTL4,
+ "USPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR2,
+ "USO9ML2DR-2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR,
+ "USO9ML2DR RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR2,
+ "USOPTL4DR-2 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR,
+ "USOPTL4DR RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F2W,
+ "485USB9F-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F4W,
+ "485USB9F-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_232USB9M,
+ "232USB9M RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_2W,
+ "485USBTB-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_4W,
+ "485USBTB-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL5USB9M,
+ "TTL5USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL3USB9M,
+ "TTL3USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_ZZ_PROG1,
+ "ZZ Programmer",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D6050,
+ "F5D6050 802.11b Wireless adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT001V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F8T003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103,
+ "F5U103 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U109,
+ "F5U109 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_SCSI,
+ "SCSI",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5050,
+ "F5D5050 Ethernet",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U234,
+ "F5U234 USB 2.0 4-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U237,
+ "F5U237 USB 2.0 7-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U257,
+ "F5U257 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6H375,
+ "F6H375 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U409,
+ "F5U409 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR,
+ "F6C550-AVR UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1250EITWRK,
+ "F6C1250EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1500EITWRK,
+ "F6C1500EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C900,
+ "F6C900 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C100,
+ "F6C100 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C120,
+ "F6C120 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C800,
+ "F6C800 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1004V1,
+ "F9L1004V1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1100,
+ "F6C1100/1200 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1103,
+ "F9L1103 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120,
+ "F5U120-PC Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D2102,
+ "F7D2102",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055,
+ "F5D5055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050,
+ "F5D7050 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050A,
+ "F5D705A 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050C,
+ "F5D705C 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050E,
+ "F5D705E 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3,
+ "F5D8053 v3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055,
+ "F5D8055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055V2,
+ "F5D8055 v2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050V3,
+ "F5D9050 ver 3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050C,
+ "F5D9050C",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1,
+ "F6D4050 ver 1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V2,
+ "F6D4050 ver 2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D1101V2,
+ "F7D1101 v2",
+ },
+ {
+ USB_VENDOR_BELKIN2, USB_PRODUCT_BELKIN2_F5U002,
+ "F5U002 Parallel",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_BWIFI_USB54AR,
+ "BWIFI-USB54AR",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100,
+ "USB100N 10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100,
+ "USB100LP",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100,
+ "USB100EL",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100,
+ "USBE100",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB2AR,
+ "USB2AR Ethernet",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCMFW,
+ "BCMFW",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033,
+ "BCM2033",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033NF,
+ "BCM2033 (no fw)",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43236,
+ "BCM43236",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43143,
+ "BCM43143",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43242,
+ "BCM43242",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43569,
+ "BCM43569",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_HL1050,
+ "HL-1050 laser printer",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_MFC210C,
+ "MFC 210C",
+ },
+ {
+ USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932,
+ "Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_BWCT, USB_PRODUCT_BWCT_6CHCONSER,
+ "6ch ConSer",
+ },
+ {
+ USB_VENDOR_CACE, USB_PRODUCT_CACE_AIRPCAPNX,
+ "AirPcap Nx",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N656U,
+ "CANOSCAN N656U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1220U,
+ "CANOSCAN N1220U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N670U,
+ "CANOSCAN N670U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1240U,
+ "CANOSCAN N1240U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_LIDE60,
+ "CANOSCAN LiDE60",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S10,
+ "PowerShot S10",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S20,
+ "PowerShot S20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_US,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_EU,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_G1,
+ "PowerShot G1",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A20,
+ "PowerShot A20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A540,
+ "PowerShot A540",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_SX100,
+ "PowerShot SX100",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_QV,
+ "QV",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300,
+ "BE-300 PDA",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_NAMELAND,
+ "CASIO Nameland EZ-USB",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE,
+ "Netmate Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE2,
+ "Netmate2 Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_CHIEF,
+ "USB Chief Bus & Protocol Analyzer",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_ANDROMEDA,
+ "Andromeda hub",
+ },
+ {
+ USB_VENDOR_CCYU, USB_PRODUCT_CCYU_EASYDISK,
+ "EasyDisk Portable",
+ },
+ {
+ USB_VENDOR_CHENSOURCE, USB_PRODUCT_CHENSOURCE_CM12402,
+ "CM12402 Eagle IR Cam",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000KBD,
+ "My3000 keyboard",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000HUB,
+ "My3000 hub",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_CYPRESS,
+ "Cypress",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_KB8933,
+ "KB-8933 keyboard",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_CAMERA,
+ "Integrated Camera",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_1,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_2,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_3,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_4,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_5,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_6,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROTHROTTLE,
+ "Pro Throttle",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROPEDALS,
+ "Pro Pedals",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FIGHTERSTICK,
+ "Fighterstick",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FLIGHTYOKE,
+ "Flight Sim Yoke",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GV2,
+ "WUSB54G v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54AG,
+ "WUSB54AG",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54G,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GP,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_USB200MV2,
+ "USB200M v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_HU200TS,
+ "HU200-TS",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GC,
+ "WUSB54GC",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GR,
+ "WUSB54GR",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G,
+ "WUSBF54G",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB200,
+ "WUSB200",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AE1000,
+ "AE1000",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AM10,
+ "AM10",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2, USB_PRODUCT_CISCOLINKSYS2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3, USB_PRODUCT_CISCOLINKSYS3_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_560884,
+ "560884 C-Bus Switch",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PACA,
+ "5500PACA C-Bus Controller",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5800PC,
+ "5800PC C-Bus Wireless",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PCU,
+ "5500PCU C-Bus",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5000CT2,
+ "5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_C5000CT2,
+ "C5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_L51XX,
+ "L51xx C-Bus Dimmer",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU510,
+ "CDMA Technologies USB modem",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CM5100P,
+ "CM-5100P EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CCU550,
+ "CCU-550 EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU550PRO,
+ "CNU-550pro EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628,
+ "CGU-628",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU680,
+ "CNU-680",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628_DISK,
+ "CGU-628 disk mode",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC,
+ "iPAQ PocketPC",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_A1500,
+ "A1500",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQWLAN,
+ "iPAQ WLAN",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W100,
+ "W100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W200,
+ "WLAN MultiPort W200",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_PJB100,
+ "Personal Jukebox PJB100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX,
+ "iPAQ Linux",
+ },
+ {
+ USB_VENDOR_COMPARE, USB_PRODUCT_COMPARE_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_C11U,
+ "C11U",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_WL210,
+ "WL-210",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU,
+ "C54RU WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU2,
+ "C54RU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2573,
+ "RT2573M",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61,
+ "VIGORN61",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA, USB_PRODUCT_CONCORDCAMERA_EYE_Q_3X,
+ "Eye Q 3x",
+ },
+ {
+ USB_VENDOR_CONNECTIX, USB_PRODUCT_CONNECTIX_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_ETHER_USB_T,
+ "Ether USB-T",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX,
+ "FEther USB-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLAN_USB_USB_11,
+ "WirelessLAN USB-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS,
+ "FEther USB-TXS",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLANUSB,
+ "Wireless LAN Stick-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB2_TX,
+ "FEther USB2-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_KEY,
+ "ULUSB-11 Key",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GL,
+ "CG-WLUSB2GL",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GPX,
+ "CG-WLUSB2GPX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM,
+ "CG-WLUSB300GNM",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300N,
+ "CG-WLUSB300N",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_STICK,
+ "WLAN USB Stick 11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC,
+ "FEther USB-TXC",
+ },
+ {
+ USB_VENDOR_CORSAIR, USB_PRODUCT_CORSAIR_CP210X,
+ "CP210X",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_II,
+ "Nomad II",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_EMU0202,
+ "E-Mu 0202",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_IIMG,
+ "Nomad II MG",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD,
+ "Nomad",
+ },
+ {
+ USB_VENDOR_CREATIVE2, USB_PRODUCT_CREATIVE2_VOIP_BLASTER,
+ "Voip Blaster",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUECORE,
+ "BlueCore",
+ },
+ {
+ USB_VENDOR_CTC, USB_PRODUCT_CTC_CW6622,
+ "CW6622",
+ },
+ {
+ USB_VENDOR_CTX, USB_PRODUCT_CTX_EX1300,
+ "Ex1300 hub",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_1500,
+ "1500 UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_OR2200,
+ "OR2200 UPS",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_GIGASET108,
+ "Siemens Gigaset 108",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB,
+ "TG54USB",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_MOUSE,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_THERMO,
+ "thermometer",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_KBDHUB,
+ "Keyboard/Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO,
+ "FM Radio",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_USBRS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_HUB2,
+ "USB2 Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_LPRDK,
+ "CY4636 LP RDK Bridge",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD,
+ "Sispm - old version",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM,
+ "Sispm",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH,
+ "Sispm - flash",
+ },
+ {
+ USB_VENDOR_DAISY, USB_PRODUCT_DAISY_DMC,
+ "PhotoClip",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_USB_FOB_IBUTTON,
+ "USB-FOB/iBUTTON",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,
+ "J-6502 speakers",
+ },
+ {
+ USB_VENDOR_DATAAPEX, USB_PRODUCT_DATAAPEX_MULTICOM,
+ "MultiCom",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_WK668,
+ "HenTong WK-668",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_AXIM,
+ "Axim X51v",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BC02,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_TM1180,
+ "TrueMobile 1180 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BLUETOOTH350,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_W5500,
+ "W5500 HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_U740,
+ "Dell U740 CDMA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_EU870D,
+ "EU870D HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_DW700,
+ "DW700 GPS",
+ },
+ {
+ USB_VENDOR_DELL2, USB_PRODUCT_DELL2_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMUSB,
+ "Earthmate GPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMLT20,
+ "Earthmate LT20",
+ },
+ {
+ USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB,
+ "Rio 500",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRAEXPRESS56K,
+ "Supra Express 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRA2890,
+ "SupraMax 2890 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB,
+ "Rio 600",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB,
+ "Rio 800",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_PSAPLAY120,
+ "Nike psa[play 120",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL200U,
+ "WL-200U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CHUSB611G,
+ "CHUSB 611G",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL240U,
+ "WL-240U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_XH1153,
+ "XH1153 802.11b",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CWD854F,
+ "C-Net CWD-854 rev F",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT2,
+ "AccelePort 2",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT4,
+ "AccelePort 4",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT8,
+ "AccelePort 8",
+ },
+ {
+ USB_VENDOR_DIGIANSWER, USB_PRODUCT_DIGIANSWER_ZIGBEE802154,
+ "ZigBee",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM, USB_PRODUCT_DIGITALSTREAM_PS2,
+ "PS/2 Active",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_GUC2020,
+ "IOGEAR DVI GUC2020",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LD220,
+ "Samsung LD220",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_POLARIS2,
+ "Polaris2 USB dock",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VCUD60,
+ "Rextron DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_CONV,
+ "StarTech CONV-USB2DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_DLDVI,
+ "DisplayLink DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VGA10,
+ "CMP-USBVGA10",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_WSDVI,
+ "WS Tech DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_EC008,
+ "EasyCAP008 DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD4300U,
+ "LCD-4300U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD8000U,
+ "LCD-8000U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_HPDOCK,
+ "HP USB Docking",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NL571,
+ "HP USB DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_M01061,
+ "Lenovo DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NBDOCK,
+ "VideoHome NBdock1920",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_SWDVI,
+ "SUNWEIT DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LUM70,
+ "Lilliput UM-70",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LT1421,
+ "Lenovo ThinkVision LT1421",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_UM7X0,
+ "nanovision MiMo",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100C1,
+ "DUB-E100 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120E,
+ "DWL-120 rev E",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130C,
+ "DWA-130 rev C",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_4,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131B,
+ "DWA-131 rev B",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125D1,
+ "DWA-125 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA123D1,
+ "DWA-123 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA137A1,
+ "DWA-137 rev A1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131E1,
+ "DWA-131 rev E1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA182D1,
+ "DWA-182 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA171C1,
+ "DWA-171 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL122,
+ "DWL-122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG120,
+ "DWL-G120",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120F,
+ "DWL-120 rev F",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG122A2,
+ "DWL-G122 rev A2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132_NF,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132_NF,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122_NF,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100B1,
+ "DUB-E100 rev B1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140B3,
+ "DWA-140 rev B3",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA160B2,
+ "DWA-160 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA127,
+ "DWA-127",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125B2,
+ "DWA-125 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA162,
+ "DWA-162 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140D1,
+ "DWA-140 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130F1,
+ "DWA-130 rev F1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUB1312,
+ "DUB-1312",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA131A1,
+ "DWA-131 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340_NF,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A2,
+ "DWA-160 A2",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130D1,
+ "DWA-130 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWLG122C1,
+ "DWL-G122 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA1340,
+ "WUA-1340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA111,
+ "DWA-111",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA110,
+ "DWA-110",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A1,
+ "DWA-160 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130,
+ "DWA-130",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK3, USB_PRODUCT_DLINK3_KVM221,
+ "KVM-221",
+ },
+ {
+ USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0,
+ "Storage Adapter",
+ },
+ {
+ USB_VENDOR_DOMAIN, USB_PRODUCT_DOMAIN_ROCKCHIP,
+ "RockChip Media Player",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550,
+ "Vigor550",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR600,
+ "Vigor600",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY, USB_PRODUCT_DREAMCHEEKY_ROCKETBABY,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_ULMB1,
+ "USB LED Message Board v1.0",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_STB,
+ "Sensor Terminal",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_WHT,
+ "Wireless Terminal",
+ },
+ {
+ USB_VENDOR_DVICO, USB_PRODUCT_DVICO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANT2USB,
+ "ANT2USB",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD2,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSB2,
+ "ANTUSB-2 Stick",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSBM,
+ "ANTUSB-m Stick",
+ },
+ {
+ USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK,
+ "Flash Disk",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7318,
+ "EW-7318",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7618,
+ "EW-7618",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717,
+ "EW-7717",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718,
+ "EW-7718",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7722UTN,
+ "EW-7722UTn",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7811UN,
+ "EW-7811Un",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7611ULB,
+ "EW-7611ULB",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7822ULC,
+ "EW-7822ULC",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL2,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX2, USB_PRODUCT_EGALAX2_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
+ "Diva 852 ISDN TA",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_MONITOR,
+ "monitor",
+ },
+ {
+ USB_VENDOR_ELAN, USB_PRODUCT_ELAN_BARCODE,
+ "Barcode Scanner",
+ },
+ {
+ USB_VENDOR_ELCON, USB_PRODUCT_ELCON_PLAN,
+ "Goldpfeil P-LAN",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_MOUSE29UO,
+ "29UO",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBLTX,
+ "LD-USBL/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_WDC150SU2M,
+ "WDC-150SU2M",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSB20,
+ "LD-USB20",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT,
+ "UC-SGT Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT0,
+ "UC-SGT0 Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELEKTOR, USB_PRODUCT_ELEKTOR_FT323R,
+ "FT323R",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_MODEM1,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET,
+ "Microlink USB2Ethernet",
+ },
+ {
+ USB_VENDOR_ELV, USB_PRODUCT_ELV_USBI2C,
+ "USB-I2C",
+ },
+ {
+ USB_VENDOR_EMPIA, USB_PRODUCT_EMPIA_EEEPC701_VIDEO,
+ "EeePC701 camera",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S,
+ "1S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2S,
+ "2S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S25,
+ "1S25 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_4S,
+ "4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_E45,
+ "E45 Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_CENTRONICS,
+ "Centronics",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S9,
+ "1S9 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_EZUSB,
+ "EZ-USB",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2U4S,
+ "2U4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER1,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER2,
+ "ISD Smart Cable for Mac",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER3,
+ "ISD Smart Cable",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER5,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_636,
+ "Perfection 636U / 636Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_610,
+ "Perfection 610",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1200,
+ "Perfection 1200U / 1200Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1600,
+ "Expression 1600",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1640,
+ "Perfection 1640SU",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1240,
+ "Perfection 1240U / 1240Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_640U,
+ "Perfection 640U",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1650,
+ "Perfection 1650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9700F,
+ "GT-9700F",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_2400,
+ "Perfection 2400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1260,
+ "Perfection 1260",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1660,
+ "Perfection 1660",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1670,
+ "Perfection 1670",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX5400,
+ "CX5400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX3650,
+ "Stylus CX3650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX3800,
+ "Stylus DX3800",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX5000,
+ "Stylus DX5000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX6000,
+ "Stylus DX6000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX4000,
+ "Stylus DX4000",
+ },
+ {
+ USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM,
+ "Serial",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_ER1,
+ "ER1 Control Module",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_1,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_2,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EXAR, USB_PRODUCT_EXAR_XR21V1410,
+ "XR21V1410",
+ },
+ {
+ USB_VENDOR_EXTENDED, USB_PRODUCT_EXTENDED_XTNDACCESS,
+ "XTNDAccess IrDA",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST,
+ "Twist",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA,
+ "Samba",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CPX_USB,
+ "CPX-USB",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CMSP,
+ "CMSP",
+ },
+ {
+ USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U,
+ "WL-430U",
+ },
+ {
+ USB_VENDOR_FOSSIL, USB_PRODUCT_FOSSIL_WRISTPDA,
+ "Wrist PDA",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_TCOM_TC_300,
+ "T-Com TC 300",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_PIRELLI_DP_L10,
+ "Pirelli DP-L10",
+ },
+ {
+ USB_VENDOR_FREECOM, USB_PRODUCT_FREECOM_DVD,
+ "Connector for DVD drive",
+ },
+ {
+ USB_VENDOR_FSC, USB_PRODUCT_FSC_E5400,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM4,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C,
+ "2232C Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT4232H,
+ "FT4232H",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FTX,
+ "FTX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PS2KBDMS,
+ "PS/2 Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_2,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENRD,
+ "OpenRD JTAGKey",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANDAPTER,
+ "CANdapter",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_NXTCAM,
+ "Mindstorms NXTCam",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OOCDLINK,
+ "OOCDlink",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_DEVEL,
+ "LM3S Devel",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_EVAL,
+ "LM3S Eval",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TURTELIZER_JTAG,
+ "JTAG/RS-232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC,
+ "OpenDCC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_SNIFFER,
+ "OpenDCC Sniffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_THROTTLE,
+ "OpenDCC Throttle",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_GATEWAY,
+ "OpenDCC Gateway",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LOCOBUFFER,
+ "RR-CirKits LocoBuffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DMX4ALL,
+ "DMX4ALL DMX interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_1,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_2,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_3,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_4,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_5,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_6,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_7,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_8,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_1,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CHAMELEON,
+ "uChameleon",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13M,
+ "OpenPort 1.3 Mitsubishi",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13S,
+ "OpenPort 1.3 Subaru",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13U,
+ "OpenPort 1.3 Universal",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L,
+ "2232L Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_0,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_1,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_2,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_3,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_4,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_5,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_6,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_7,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS2,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GAMMASCOUT,
+ "Gamma Scout Online",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_JTAGCABLEII,
+ "Propox JTAG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_777,
+ "Westrex 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_8900F,
+ "Westrex 8900F",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACG_HFDUAL,
+ "HF Dual ISO Reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ARTEMIS,
+ "CCD camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16,
+ "ATK-16 Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HR,
+ "ATK-16HR Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16C,
+ "ATK-16C Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HRC,
+ "ATK-16HRC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16IC,
+ "ATK-16IC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USR,
+ "USR",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_MSM1,
+ "Mini-Sound-Modul",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_KL100,
+ "KL 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS888,
+ "WS 888",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TWS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FEM,
+ "Funk Energie Monitor",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_YEI_SC31,
+ "ServoCenter3.1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1300PC,
+ "FHZ 1300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS500,
+ "WS 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_HS485,
+ "RS-485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UMS100,
+ "UMS 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFD128,
+ "TFD 128",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FM3RX,
+ "FM3 RX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS777,
+ "WS 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1010PC,
+ "EM 1010 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CSI8,
+ "CSI 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1000DL,
+ "EM 1000 DL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCK100,
+ "PCK 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_RFP500,
+ "RFP 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FS20SIG,
+ "FS 20 SIG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UTP8,
+ "UTP 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS300PC,
+ "WS 300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS444PC,
+ "WS 444 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FISCO,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECO_PRO,
+ "EVER Eco Pro UPS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTROBOTS,
+ "Active Robots comms",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PYRAMID,
+ "Pyramid Display",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UNICOM,
+ "Unicom III",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EISCOU,
+ "Expert ISDN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UOPTBR,
+ "RS232 OptoBridge",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DCF,
+ "Expert mouseCLOCK USB II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MSF,
+ "Expert mouseCLOCK USB II MSF",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HBG,
+ "Expert mouseCLOCK USB II HBG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_9,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_A,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_B,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECLO_1WIRE,
+ "1-Wire",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TNCX,
+ "TNC-X packet-radio",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_VCP,
+ "VCP",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_D2XX,
+ "D2XX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_REU_TINY,
+ "RigExpert Tiny",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO870,
+ "HO870",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO820,
+ "HO820",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232BM,
+ "FT232BM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW,
+ "KW",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS,
+ "YS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6,
+ "Y6",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8,
+ "Y8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC,
+ "IC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9,
+ "DB9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9,
+ "Y9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DGQG,
+ "DGQG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DUSB,
+ "DUSB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD8,
+ "UAD 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD7,
+ "UAD 7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USI2,
+ "USI 2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_T1100,
+ "T 1100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCD200,
+ "PCD 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ULA200,
+ "ULA 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ALC8500,
+ "ALC 8500 Expert",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1000PC,
+ "FHZ 1000 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PERLE_UP,
+ "UltraPort",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SPROG_II,
+ "Sprog II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PIEGROUP_IR,
+ "Infrared",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTZWAVE,
+ "HomePro ZWave",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX,
+ "Coastal ChipWorks TNC-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_MASTER2,
+ "Master Development 2.0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OCEANIC,
+ "Oceanic instrument",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SUUNTO,
+ "Suunto Sports",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBUIRT,
+ "USB-UIRT",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBX_707,
+ "USBX-707",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU20,
+ "ICD-U20",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU40,
+ "ICD-U40",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_MACHX,
+ "MACH-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_LOAD_N_GO,
+ "LOAD N GO",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU64,
+ "ICDU64",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_PRIME8,
+ "PRIME8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ITM_TOUCH,
+ "ITM Touchscreen",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBSERIAL,
+ "Matrix Orbital USB Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MX200,
+ "Matrix Orbital MX200 Series LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MTXO,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK202_24,
+ "Matrix Orbital LK202-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK204_24,
+ "Matrix Orbital LK204-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_2,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_3,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_RELAIS,
+ "Relais",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TIRA1,
+ "Tira-1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PCDJ_DAC2,
+ "DAC-2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACCESSO,
+ "Accesso reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_THORLABS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UR100,
+ "UR 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CLI7000,
+ "CLI 7000",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UM100,
+ "UM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UO100,
+ "UO 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PPS7330,
+ "PPS 7330",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFM100,
+ "TFM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UDF77,
+ "UDF 77",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UIO88,
+ "UIO 88",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_R2000KU_RNG,
+ "R2000KU RNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_BCS_SE923,
+ "BCS SE923",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232RL,
+ "FT232RL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_632,
+ "Crystalfontz CFA-632 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_634,
+ "Crystalfontz CFA-634 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_547,
+ "Crystalfontz CFA-547 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_633,
+ "Crystalfontz CFA-633 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_631,
+ "Crystalfontz CFA-631 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_635,
+ "Crystalfontz CFA-635 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_640,
+ "Crystalfontz CFA-640 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_642,
+ "Crystalfontz CFA-642 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IRTRANS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_1,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_R200,
+ "R200-USB TRNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_3,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_4,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20,
+ "SEMC DSS-20 SyncStation",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANVIEW,
+ "CANview",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_VNHC,
+ "Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_AMC232,
+ "AMC-232USB0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TTUSB,
+ "TT-USB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_US485,
+ "US485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PICPRO,
+ "PIC-Programmer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PCMCIA,
+ "PCMCIA SRAM-cards reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PK1,
+ "Particel counter PK1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_RS232MON,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_APP70,
+ "APP 70 dust monitoring",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PEDO,
+ "IBS PEDO-Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANUSB,
+ "CANUSB",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100,
+ "Mass Storage",
+ },
+ {
+ USB_VENDOR_FUJITSU, USB_PRODUCT_FUJITSU_AH_F401U,
+ "AH-F401U Air H device",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD6,
+ "Type 6 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD7,
+ "Type 7 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_MOUSE,
+ "Type 6 Mouse",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5204PS,
+ "Smart Power Strip FX-5204PS",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5251WB,
+ "Base Station FX-5251WB",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_VIRTETH,
+ "Virtual Eth Device",
+ },
+ {
+ USB_VENDOR_FUSHICAI, USB_PRODUCT_FUSHICAI_USBTV007,
+ "Fushicai Audio-Video Grabber",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP60CSX,
+ "GPSmap 60Csx",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE3600,
+ "Ique 3600",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_DAKOTA20,
+ "Dakota 20",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP62S,
+ "GPSmap 62s",
+ },
+ {
+ USB_VENDOR_GCTSEMICON, USB_PRODUCT_GCTSEMICON_INSTALL,
+ "GDM720x MASS storage mode",
+ },
+ {
+ USB_VENDOR_GEMPLUS, USB_PRODUCT_GEMPLUS_PROXPU,
+ "Prox-PU/CU",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A,
+ "GL620USB-A GeneLink USB-USB Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GENELINK,
+ "GeneLink Host-Host Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL650,
+ "GL650 Hub",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB,
+ "GL641USB CompactFlash",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNBR402W,
+ "GN-BR402W",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWLBM101,
+ "GN-WLBM101",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWBKG,
+ "GN-WBKG",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB01GS,
+ "GN-WB01GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWI05GS,
+ "GN-WI05GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N,
+ "GN-WB31N",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L,
+ "GN-WB32L",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG_NF,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00,
+ "YP3X00 PDA",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS, USB_PRODUCT_GNOTOMETRICS_AURICAL,
+ "Aurical",
+ },
+ {
+ USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232,
+ "GoCOM232 Serial converter",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_GWUSB2E,
+ "GWUSB2E",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GRAVIS, USB_PRODUCT_GRAVIS_GAMEPADPRO,
+ "GamePad Pro",
+ },
+ {
+ USB_VENDOR_GREENHOUSE, USB_PRODUCT_GREENHOUSE_KANA21,
+ "CF-writer/MP3 Player",
+ },
+ {
+ USB_VENDOR_GRIFFIN, USB_PRODUCT_GRIFFIN_IMATE,
+ "iMate, ADB adapter",
+ },
+ {
+ USB_VENDOR_GUDE, USB_PRODUCT_GUDE_DCF,
+ "Expert mouseCLOCK USB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_DALEADER,
+ "DA Leader",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254,
+ "HWGUSB2-54 WLAN",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254LB,
+ "HWGUSB2-54-LB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254V2AP,
+ "HWGUSB2-54V2-AP",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNU300,
+ "HWNU-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUM300,
+ "HWNUm-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUN54,
+ "HWGUn-54",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUP150,
+ "HWNUP-150",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_GUNZE, USB_PRODUCT_GUNZE_TOUCHPANEL,
+ "Gunze USB Touch Panel",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGSM,
+ "FlashGate SmartMedia",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGCF,
+ "FlashGate CompactFlash",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FG,
+ "FlashGate",
+ },
+ {
+ USB_VENDOR_HAL, USB_PRODUCT_HAL_IMR001,
+ "Crossam2+USB IR commander",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR,
+ "Handspring Visor",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO,
+ "Handspring Treo",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO600,
+ "Handspring Treo 600",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE, USB_PRODUCT_HAUPPAUGE_WINTV_USB_FM,
+ "WinTV FM",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2,
+ "HWUN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWDN2,
+ "HWDN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_UF100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_HIROSE, USB_PRODUCT_HIROSE_USB100,
+ "USB-100",
+ },
+ {
+ USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DZMV100A,
+ "DVD-CAM DZ-MV100A Camcorder",
+ },
+ {
+ USB_VENDOR_HOLTEK, USB_PRODUCT_HOLTEK_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_895C,
+ "DeskJet 895C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4100C,
+ "Scanjet 4100C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20,
+ "Photosmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_880C,
+ "DeskJet 880C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4200C,
+ "ScanJet 4200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS,
+ "CD-Writer Plus",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_KBDHUB,
+ "Multimedia Keyboard Hub",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210W,
+ "HN210W",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HPX9GP,
+ "HP-x9G+",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6200C,
+ "ScanJet 6200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20B,
+ "PhotoSmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_815C,
+ "DeskJet 815C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3300C,
+ "ScanJet 3300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDW8200,
+ "CD-Writer Plus 8200e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1220C,
+ "DeskJet 1220C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_810C,
+ "DeskJet 810C/812C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4300C,
+ "Scanjet 4300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CD4E,
+ "CD-Writer+ CD-4e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_G85XI,
+ "OfficeJet G85xi",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1200,
+ "LaserJet 1200",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5200C,
+ "Scanjet 5200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_830C,
+ "DeskJet 830C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3400CSE,
+ "ScanJet 3400cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_885C,
+ "DeskJet 885C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1000,
+ "LaserJet 1000",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6300C,
+ "Scanjet 6300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_840C,
+ "DeskJet 840c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2200C,
+ "ScanJet 2200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5300C,
+ "Scanjet 5300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_816C,
+ "DeskJet 816C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_970CSE,
+ "Deskjet 970Cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5400C,
+ "Scanjet 5400C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2215,
+ "iPAQ 22xx/Jornada 548",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_959C,
+ "Deskjet 959C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_568J,
+ "Jornada 568",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_930C,
+ "DeskJet 930c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1005,
+ "LaserJet 1005",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P2000U,
+ "Inkjet P-2000U",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HS2300,
+ "HS2300",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750,
+ "T750 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1000,
+ "T1000 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1500,
+ "T1500 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_RT2200,
+ "R/T2200 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_R1500G2,
+ "R1500 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750G2,
+ "T750 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_640C,
+ "DeskJet 640c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1020,
+ "LaserJet 1020",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P1100,
+ "Photosmart P1100",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_LD220,
+ "LD220",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1018,
+ "LaserJet 1018",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210E,
+ "HN210E Ethernet",
+ },
+ {
+ USB_VENDOR_HP2, USB_PRODUCT_HP2_C500,
+ "PhotoSmart C500",
+ },
+ {
+ USB_VENDOR_HP3, USB_PRODUCT_HP3_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM,
+ "PPC6700 Modem",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE,
+ "SmartPhone",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_ANDROID,
+ "Android phone",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E618,
+ "HUAWEI Mobile E618",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_EM770W,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1750,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E180,
+ "HUAWEI Mobile E180",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E510,
+ "HUAWEI Mobile E510",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E181,
+ "HUAWEI Mobile E181",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1752,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E182,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3372,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E161,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765,
+ "HUAWEI Mobile K3765",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1820,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4511,
+ "HUAWEI Mobile Modem K4511",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4510,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772,
+ "HUAWEI Mobile K3772",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E353_INIT,
+ "HUAWEI Mobile E353 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E392_INIT,
+ "HUAWEI Mobile E392 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765_INIT,
+ "HUAWEI Mobile K3765 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772_INIT,
+ "HUAWEI Mobile K3772 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MU609,
+ "HUAWEI Mobile ME906",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S,
+ "HUAWEI Mobile E173s",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S_INIT,
+ "HUAWEI Mobile E173s Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E303,
+ "HUAWEI Mobile E303",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM, USB_PRODUCT_HUAWEI3COM_WUB320G,
+ "Aolynk WUB320g",
+ },
+ {
+ USB_VENDOR_HUMAX, USB_PRODUCT_HUMAX_PVRSMART,
+ "PVR-SMART",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_PC5740,
+ "PC5740 EVDO",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_UM175,
+ "UM175 EVDO",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTTRAVELMOUSE,
+ "Optical",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTWHEELMOUSE,
+ "Wheel",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_USBCDROMDRIVE,
+ "CD-ROM",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_THINKPADHUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_ID1,
+ "ID-1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C1,
+ "ID-RP2C service 1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C2,
+ "ID-RP2C service 2",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2D,
+ "ID-RP2D",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VT,
+ "ID-RP2V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VR,
+ "ID-RP2V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VT,
+ "ID-RP4000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VR,
+ "ID-RP4000V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VT,
+ "ID-RP2000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VR,
+ "ID-RP2000V service R",
+ },
+ {
+ USB_VENDOR_IDOWELL, USB_PRODUCT_IDOWELL_IDOWELL,
+ "UPS",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE, USB_PRODUCT_IDQUANTIQUE_QUANTISUSB,
+ "Quantis USB",
+ },
+ {
+ USB_VENDOR_IDTECH, USB_PRODUCT_IDTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_IIYAMA, USB_PRODUCT_IIYAMA_HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO,
+ "Flash Go!",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
+ "EdgePort/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT7,
+ "Hubport/7",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_RAPIDPORT4,
+ "Rapidport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4T,
+ "Edgeport/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2,
+ "Edgeport/2 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4I,
+ "Edgeport/4 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2I,
+ "Edgeport/2 RS422/RS485",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT4,
+ "Hubport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8HAND,
+ "Hand-built Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MULTIMODEM,
+ "MultiTech version of RP/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTPPORT,
+ "Edgeport/(4)21 Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT421,
+ "Edgeport/421 Hub+RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT21,
+ "Edgeport/21 RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8DC,
+ "1/2 Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8,
+ "Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2DIN,
+ "Edgeport/2 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4DIN,
+ "Edgeport/4 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT16DC,
+ "1/2 Edgeport/16",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTCOMP,
+ "Edgeport Compatible",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8I,
+ "Edgeport/8 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_WATCHPORTH,
+ "WatchPort/H",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MT4X56USB,
+ "OEM device",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_F5U002,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI,
+ "ATAPI",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2,
+ "USB2 Storage",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD110,
+ "IDE ISD110",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD105,
+ "IDE ISD105",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE,
+ "USB cable",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2,
+ "USB Storage Adapter V2",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_EASYPC_CAMERA,
+ "EasyPC",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_AP310,
+ "AP310 AnyPoint II",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_I2011B,
+ "Wireless 2011B",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD,
+ "82930 test board",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_1,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_2,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_3,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_5,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_7,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_4,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_6,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_8,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_IOBOARD,
+ "IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD2,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_2X,
+ "Prism2.x WLAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_VALUECAN,
+ "ValueCAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_NEOVI,
+ "NeoVI Blue",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSSMRW,
+ "USB-SSMRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSDRW,
+ "USB-SDRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETT,
+ "USB ET/T",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX,
+ "USB ET/TX",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTXS,
+ "USB ET/TX-S",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11A,
+ "USB WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11,
+ "USB Airport WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US_NF,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETXUS2,
+ "ETX-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETGUS2,
+ "ETG-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_FT232R,
+ "FT232R",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNGDNUS2,
+ "WN-GDN/US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNG150UM,
+ "WN-G150UM",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ,
+ "RSAQ1 Serial",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ5,
+ "RSAQ5 Serial",
+ },
+ {
+ USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC,
+ "USB2.0-SCSI Bridge USB2-SC",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100,
+ "Zip 100",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_CDRW,
+ "CDRW 9602",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX,
+ "iFP-1xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX,
+ "iFP-3xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_5XX,
+ "iFP-5xx",
+ },
+ {
+ USB_VENDOR_ISSC, USB_PRODUCT_ISSC_KYBT100,
+ "KY-BT100 Bluetooth",
+ },
+ {
+ USB_VENDOR_ITEGNO, USB_PRODUCT_ITEGNO_WM1080A,
+ "WM1080A",
+ },
+ {
+ USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B,
+ "PC-60B",
+ },
+ {
+ USB_VENDOR_JATON, USB_PRODUCT_JATON_EDA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_JENOPTIK, USB_PRODUCT_JENOPTIK_JD350,
+ "JD 350",
+ },
+ {
+ USB_VENDOR_JETI, USB_PRODUCT_JETI_SPC1201,
+ "SPECBOS 1201",
+ },
+ {
+ USB_VENDOR_JRC, USB_PRODUCT_JRC_AH_J3001V_J3002V,
+ "AirH\"PHONE AH-J3001V/J3002V",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_PRX1,
+ "MP-PRX1",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_XP7250_WL,
+ "MP-XP7250 Builtin WLAN",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_OPTICALEYE,
+ "Optical Eye/3-wire",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_MBUS_250D,
+ "M-Bus Master MultiPort 250D",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_MH4000P,
+ "MiniHub 4000P",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_KC180,
+ "KC-180 IrDA",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN, USB_PRODUCT_KEISOKUGIKEN_USBDAQ,
+ "HKS-0200 USBDAQ",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT,
+ "Orbit trackball",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_TURBOBALL,
+ "TurboBall",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT_MAC,
+ "Orbit trackball for Mac",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_BT_EDR,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_VIDEOCAM_VGA,
+ "VideoCAM VGA",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28_NF,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28X_NF,
+ "USA-28X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19_NF,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18_NF,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X_NF,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W_NF,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W_NF,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI_NF,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q_NF,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XXB,
+ "USA-28X/XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XB_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA,
+ "USA-28XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA_NF,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW_NF,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19HS,
+ "USA-19HS serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA10,
+ "UIA-10 remote control",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA11,
+ "UIA-11 remote control",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX,
+ "KNU101TX Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BT,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BTN,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_B1,
+ "Konverter for B1",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_KAAN,
+ "Konverter for KAAN",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC220,
+ "Digital Science DC220",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC260,
+ "Digital Science DC260",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC265,
+ "Digital Science DC265",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC290,
+ "Digital Science DC290",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC240,
+ "Digital Science DC240",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC280,
+ "Digital Science DC280",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DX4900,
+ "EasyShare DX4900",
+ },
+ {
+ USB_VENDOR_KONICA, USB_PRODUCT_KONICA_CAMERA,
+ "Camera",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE,
+ "Niche mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NETSCROLL,
+ "Genius NetScroll mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_FLIGHT2000,
+ "Flight 2000 joystick",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO,
+ "ColorPage Vivid-Pro",
+ },
+ {
+ USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V,
+ "AH-K3001V",
+ },
+ {
+ USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_KPC650,
+ "KPC650 EVDO",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD,
+ "Hard Disk",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_CDRW,
+ "CD R/W",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M121,
+ "Model 121",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M218A,
+ "Model 218A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M219,
+ "Model 219",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M233,
+ "Model 233",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M235,
+ "Model 235",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M335,
+ "Model 335",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M336,
+ "Model 336",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M350,
+ "Model 350",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M371,
+ "Model 371",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M411,
+ "Model 411",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M425,
+ "Model 425",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M455A,
+ "Model 455A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M475A,
+ "Model 475A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M465,
+ "Model 465",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M625A,
+ "Model 625A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M642A,
+ "Model 642A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M648,
+ "Model 648",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M737,
+ "Model 737",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M776,
+ "Model 776",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD, USB_PRODUCT_LARSENBRUSGAARD_ALTITRACK,
+ "AltiTrack",
+ },
+ {
+ USB_VENDOR_LEADTEK, USB_PRODUCT_LEADTEK_9531,
+ "9531 GPS",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_DOCK_ETHERNET,
+ "USB-C Dock Ethernet",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET,
+ "USB 2.0 Ethernet",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT,
+ "jumpSHOT CompactFlash",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_2662WAR,
+ "2662W-AR",
+ },
+ {
+ USB_VENDOR_LEXMARK, USB_PRODUCT_LEXMARK_S2450,
+ "Optra S 2450",
+ },
+ {
+ USB_VENDOR_LIEBERT, USB_PRODUCT_LIEBERT_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_LIEBERT2, USB_PRODUCT_LIEBERT2_PSA,
+ "PowerSure PSA UPS",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO19,
+ "Link Instruments MSO-19",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28_2,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_MAUSB2,
+ "Camedia MAUSB-2",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_HG20F9,
+ "HG20F9 Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T,
+ "USB10T Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX,
+ "USB100TX Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1,
+ "USB100H1 Ethernet/HPNA",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA,
+ "USB10TA Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11,
+ "WUSB11 802.11b",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11_25,
+ "WUSB11 802.11b v2.5",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB12_11,
+ "WUSB12 802.11b v1.1",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_NWU11B,
+ "NWU11B",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_USB200M,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V28,
+ "WUSB11 v2.8",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V30,
+ "WUSB11 v3.0",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_USB1000,
+ "USB1000",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100,
+ "WUSB100",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N,
+ "WUSB600N",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV2,
+ "WUSB54GC v2",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3,
+ "WUSB54GC v3",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2,
+ "WUSB600N v2",
+ },
+ {
+ USB_VENDOR_LITEON, USB_PRODUCT_LITEON_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LAN_GTJU2,
+ "LAN-GTJ/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANTX,
+ "LAN-TX",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2,
+ "LAN-W300N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW150NU2,
+ "LAN-W150N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2S,
+ "LAN-W300N/U2S",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M2452,
+ "M2452 keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M4848,
+ "M4848 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_PAGESCAN,
+ "PageScan",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMWEB,
+ "QuickCam Web",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC200,
+ "Webcam C200",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC250,
+ "Webcam C250",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC500,
+ "Webcam C500",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC210,
+ "Webcam C210",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC310,
+ "Webcam C310",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_HDPROC910,
+ "HD Pro Webcam C910",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC270,
+ "Webcam C270",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMEXP,
+ "QuickCam Express",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBDLX,
+ "QuickCam Notebook Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO3K,
+ "QuickCam Pro 3000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_1,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO4K,
+ "QuickCam Pro 4000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMZOOM,
+ "QuickCam Zoom",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_1,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_1,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_1,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_1,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_2,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMULTVIS,
+ "QuickCam Ultra Vision",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_2,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_2,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_2,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_2,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO9K,
+ "QuickCam Pro 9000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRONB,
+ "QuickCam Pro Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMDLX,
+ "QuickCam Communicate Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITAF,
+ "QuickCam Orbit AF",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMMP,
+ "QuickCam Communicate MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAME3500P,
+ "QuickCam E 3500 Plus",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMDLXNB,
+ "QuickCam Deluxe Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N43,
+ "N43",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N48,
+ "N48 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_MBA47,
+ "M-BA47 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMMOUSE,
+ "WingMan Gaming Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BD58,
+ "BD58 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN58A,
+ "iFeel Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMPAD,
+ "WingMan GamePad Extreme",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMRPAD,
+ "WingMan RumblePad",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMJOY,
+ "WingMan Force joystick",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMFFGP,
+ "WingMan Formula Force GP (GT-Force)",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_ITOUCH,
+ "iTouch Keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB13,
+ "USB-PS/2 Trackball",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB18,
+ "TrackMan Wheel",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RK53,
+ "Cordless mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RB6,
+ "Cordless keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_CDO,
+ "Cordless Desktop Optical",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO2,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LCMASS,
+ "Emobile D21LC Mass only mode",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LC,
+ "Emobile D21LC",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FU,
+ "IIJmobile 510FU",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FUMASS,
+ "IIJmobile 510FU Mass only mode",
+ },
+ {
+ USB_VENDOR_LUCENT, USB_PRODUCT_LUCENT_EVALKIT,
+ "USS-720 evaluation kit",
+ },
+ {
+ USB_VENDOR_MACALLY, USB_PRODUCT_MACALLY_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_MARVELL, USB_PRODUCT_MARVELL_SHEEVAPLUG,
+ "SheevaPlug",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0100,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0101,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0102,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0103,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0104,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0105,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0106,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0107,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0108,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0109,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0110,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0111,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0112,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0113,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0114,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0115,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0116,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0117,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0118,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0119,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0120,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0121,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0122,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0123,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0124,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0125,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0126,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0127,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0128,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0129,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0130,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0131,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0132,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0133,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0134,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0135,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0136,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0137,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0138,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0139,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0140,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0141,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0142,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0143,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0144,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0145,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0146,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0147,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0148,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0149,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0150,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0151,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0152,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0153,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0154,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0155,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0156,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0157,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0158,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0159,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0160,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0161,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0162,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0163,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0164,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0165,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0166,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0167,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0168,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0169,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0170,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0171,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0172,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0173,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0174,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0175,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0176,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0177,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0178,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0179,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0180,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0181,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0182,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0183,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0184,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0185,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0186,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0187,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0188,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0189,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0190,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0191,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0192,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0193,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0194,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0195,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0196,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0197,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0198,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0199,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01ED,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100,
+ "Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232,
+ "D-Link DU-H3SP BAY Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232,
+ "Sitecom RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_ML_4500,
+ "ML-4500",
+ },
+ {
+ USB_VENDOR_MDS, USB_PRODUCT_MDS_ISDBT,
+ "MDS ISDB-T tuner",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_WISPY,
+ "MetaGeek Wi-Spy",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_TELLSTICK,
+ "Telldus Tellstick",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_UMASS,
+ "USB MSM installer",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_DC_4COM,
+ "UMTS USB modem",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_CASHFLOW_SC,
+ "Cashflow-SC",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_S2000,
+ "Series 2000",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_USB5131,
+ "USB 5131 DCF77 - Radio Clock",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_DCF600USB,
+ "DCF600USB - Radio Clock",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5,
+ "LUA2-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX,
+ "LUA-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_S11,
+ "WLI-USB-S11",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_MCRSM2,
+ "MCR-SM2 SmartMedia",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG,
+ "USB-IDE Bridge: DUB-PxxG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KS11G,
+ "WLI-USB-KS11G wlan",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2KTX,
+ "LUA-U2-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KB11,
+ "WLI-USB-KB11 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54YB,
+ "WLI-U2-KG54-YB WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54,
+ "WLI-U2-KG54 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54AI,
+ "WLI-U2-KG54-AI WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2GT,
+ "LUA-U2-GT Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_NINWIFI,
+ "Nintendo Wi-Fi",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54_NF,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_PCOPRS1,
+ "PC-OP-RS1 RemoteStation",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HP,
+ "WLI-U2-SG54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_G54HP,
+ "WLI-U2-G54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L,
+ "WLI-U2-KG54L",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N,
+ "WLI-UC-G300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HG,
+ "WLI-U2-SG54HG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N,
+ "WLI-UC-AG300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNHP,
+ "WLI-UC-GNHP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN,
+ "WLI-UC-GN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG301N,
+ "WLI-UC-G301N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM,
+ "WLI-UC-GNM",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM2,
+ "WLI-UC-GNM2",
+ },
+ {
+ USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24I,
+ "Wi-Spy 2.4i",
+ },
+ {
+ USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
+ "Ricochet GS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD20X2,
+ "USB-LCD-20x2",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD256X64,
+ "USB-LCD-256x64",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_YUREX,
+ "YUREX",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_CAM_1,
+ "CAM_1",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPERHUM,
+ "TEMPerHUM sensor",
+ },
+ {
+ USB_VENDOR_MICRONET, USB_PRODUCT_MICRONET_SP128AR,
+ "SP128AR EtherFast",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEPREC,
+ "SideWinder Precision Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIMOUSE,
+ "IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_NATURALKBD,
+ "Natural",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_DDS80,
+ "Digital Sound System 80",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEWINDER,
+ "Sidewinder Precision Racing Wheel",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_TBEXPLORER,
+ "Trackball Explorer",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIEYE,
+ "IntelliEye mouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO2,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN510,
+ "MN510 Wireless",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_700WX,
+ "Palm 700WX",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN110,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
+ "Wireless Optical IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
+ "Wireless Optical Mouse (Model 1023)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK3,
+ "Wireless Optical Mouse 3000 (Model 1049)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
+ "Wireless Optical Mouse 3000 (Model 1056)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360_CONTROLLER,
+ "XBOX 360 Controller",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360,
+ "XBOX 360 WLAN",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLMOBILEMOUSE3500,
+ "Wireless Mobile Mouse 3500",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_LIFECAM,
+ "Microsoft LifeCam",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLARCMOUSE,
+ "Wireless Arc Mouse (Model 1350)",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25,
+ "SCSI-DB25",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIHD50,
+ "SCSI-HD50",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM,
+ "CameraMate",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_FREECOM,
+ "Freecom IDE",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_X6U,
+ "ScanMaker X6 - X6U",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_C6,
+ "Phantom C6",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX2,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL2,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6UL,
+ "ScanMaker V6UL",
+ },
+ {
+ USB_VENDOR_MIDIMAN, USB_PRODUCT_MIDIMAN_MIDISPORT2X2,
+ "Midisport 2x2",
+ },
+ {
+ USB_VENDOR_MINDSATWORK, USB_PRODUCT_MINDSATWORK_DW,
+ "Digital Wallet",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304,
+ "Dimage S304",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X,
+ "Dimage X",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGE7I,
+ "Dimage 7i",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1,
+ "Dimage A1",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_CDRRW,
+ "CD-R/RW Drive",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_FDD,
+ "FDD",
+ },
+ {
+ USB_VENDOR_MOBILEACTION, USB_PRODUCT_MOBILEACTION_MA620,
+ "MA-620 IrDA",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_ED200H,
+ "EasiDock 200 Serial",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EASIDOCK,
+ "EasiDock Ethernet",
+ },
+ {
+ USB_VENDOR_MODACOM, USB_PRODUCT_MODACOM_MWIMAX,
+ "MODACOM Mobile wimax adaptor",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703,
+ "MCS7703 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7715,
+ "MCS7715 Serial Parallel",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730,
+ "MCS7730 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7810,
+ "MCS7810 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820,
+ "MCS7820 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7830,
+ "MCS7830 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7832,
+ "MCS7832 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840,
+ "MCS7840 Serial",
+ },
+ {
+ USB_VENDOR_MOTOROLA, USB_PRODUCT_MOTOROLA_MC141555,
+ "MC141555 hub controller",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
+ "T720c",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_V360,
+ "V360",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB4100,
+ "SB4100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB5100,
+ "SB5100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MOXA, USB_PRODUCT_MOXA_UPORT1110,
+ "UPort 1110",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_8,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_9,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_10,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_12,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_13,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_11,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_14,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_15,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MULTITECH, USB_PRODUCT_MULTITECH_ATLAS,
+ "MT5634ZBA modem",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CU,
+ "1200 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600CU,
+ "600 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USB,
+ "1200",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200UB,
+ "1200 UB",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USBPLUS,
+ "1200 Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CUPLUS,
+ "1200 CU Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_BEARPAW1200F,
+ "BearPaw 1200F",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600USB,
+ "600",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_MDC800,
+ "MDC-800",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_DV2000,
+ "DV2000",
+ },
+ {
+ USB_VENDOR_MUSTEK2, USB_PRODUCT_MUSTEK2_PM800,
+ "PowerMust 800",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW1200,
+ "BearPaw 1200",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW2400,
+ "BearPaw 2400",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_WL300NUG,
+ "WL300NU-G",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_USB2EXTEND,
+ "Repeater",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_B,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_C,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY760,
+ "Picty760",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY900,
+ "Picty900",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY920,
+ "Picty920",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY800,
+ "Picty800",
+ },
+ {
+ USB_VENDOR_NEC2, USB_PRODUCT_NEC2_HUB2_0,
+ "USB2.0 Hub",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050,
+ "6-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260,
+ "8-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010,
+ "Multi-format Flash Controller",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT,
+ "Turbo-Connect",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_CLIK40,
+ "Clik! 40",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET,
+ "EthernetGadget",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101X,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA101,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA120,
+ "USB 2.0 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_M7100,
+ "M7100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111NA,
+ "802.11b",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111V2,
+ "802.11b V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V3,
+ "WG111v3",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U_NF,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2,
+ "WG111v2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WN111V2,
+ "WN111V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3100,
+ "WNDA3100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3200,
+ "WNDA3200",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1100,
+ "WNA1100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000,
+ "WNA1000",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000M,
+ "WNA1000M",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000MV2,
+ "WNA1000Mv2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_N300MA,
+ "N300MA",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101,
+ "MA101",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101B,
+ "MA101 Rev B",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_NF,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_1,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111_NF,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR4, USB_PRODUCT_NETGEAR4_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NETWEEN, USB_PRODUCT_NETWEEN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NHJ, USB_PRODUCT_NHJ_CAM2,
+ "Camera",
+ },
+ {
+ USB_VENDOR_NI, USB_PRODUCT_NI_GPIB_USB_A,
+ "GPIB-USB-A",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E990,
+ "E990",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E880,
+ "E880",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E885,
+ "E885",
+ },
+ {
+ USB_VENDOR_NOKIA, USB_PRODUCT_NOKIA_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15UMASS,
+ "Internet Stick CS-15 (umass mode)",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15,
+ "Internet Stick CS-15",
+ },
+ {
+ USB_VENDOR_NORITAKE, USB_PRODUCT_NORITAKE_COMEMO,
+ "Noritake COMEMO",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_NV902W,
+ "NV-902W",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD,
+ "ExpressCard 3G",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620,
+ "V620",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV740,
+ "V740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V720,
+ "V720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740_2,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U870,
+ "U870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_XU870,
+ "XU870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_X950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620,
+ "ES620 CDMA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U720,
+ "U720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EU870D,
+ "EU870D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U727,
+ "U727",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC950D,
+ "MC950D HSUPA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINX950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ZEROCD2,
+ "ZeroCD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760CD,
+ "MC760 CD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U760,
+ "U760",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760,
+ "MC760",
+ },
+ {
+ USB_VENDOR_NOVATEL1, USB_PRODUCT_NOVATEL1_FLEXPACKGPS,
+ "NovAtel FlexPack GPS",
+ },
+ {
+ USB_VENDOR_O2MICRO, USB_PRODUCT_O2MICRO_OZ776HUB,
+ "OZ776 Hub",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_USBTOETHER,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_US2308,
+ "Serial",
+ },
+ {
+ USB_VENDOR_OLIMEX, USB_PRODUCT_OLIMEX_OPENOCD_JTAG,
+ "OpenOCD JTAG",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1,
+ "C-1",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700,
+ "C-700 Ultra Zoom",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511,
+ "OV511",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511PLUS,
+ "OV511+",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX50F,
+ "BX50F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX35F,
+ "BX35F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BY35S,
+ "BY35S UPS",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2,
+ "disk",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFEB,
+ "MDCFE-B CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SIIGMS,
+ "Memory Stick+CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB3,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB4,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_PNYCFSM,
+ "PNY/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_STECHCFSM,
+ "Simple Tech/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_LC1,
+ "CF + SM Combo (LC1)",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II,
+ "Datafab MD1-II PC-Card",
+ },
+ {
+ USB_VENDOR_ONSPEC2, USB_PRODUCT_ONSPEC2_8IN2,
+ "8In2",
+ },
+ {
+ USB_VENDOR_OPENMOKO, USB_PRODUCT_OPENMOKO_N1793D,
+ "Neo1973 Debug",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_ONERNG,
+ "Moonbase Otago OneRNG",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_CHAOSKEY,
+ "Altusmetrum ChaosKey 1.0",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G,
+ "Vodafone Mobile Connect 3G",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GFUSION,
+ "GlobeTrotter 3G FUSION",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD,
+ "GlobeTrotter 3G QUAD",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUADPLUS,
+ "GlobeTrotter 3G QUAD PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36,
+ "GlobeTrotter MAX 3.6/7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS,
+ "GlobeTrotter 3G PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_SCORPION,
+ "GlobeTrotter HSDPA Modem",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GSICON72,
+ "GlobeSurfer iCON 7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON225,
+ "iCON 225",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTHSUPA380E,
+ "GlobeTrotter HSUPA 380E",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON322,
+ "iCON 322",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON505,
+ "iCON 505",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_WIFI01,
+ "model 01 WiFi",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_BT01,
+ "model 01 Bluetooth",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01PLUS,
+ "model 01+ Ethernet",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01,
+ "model 01 Ethernet",
+ },
+ {
+ USB_VENDOR_OREGONSCI, USB_PRODUCT_OREGONSCI_OWL_CM160,
+ "OWL CM-160",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID,
+ "Solid state disk",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_DKU5,
+ "DKU-5 Serial",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_OWEN, USB_PRODUCT_OWEN_AC4,
+ "AC4 USB-RS485",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500,
+ "Palm m500",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505,
+ "Palm m505",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M515,
+ "Palm m515",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_I705,
+ "Palm i705",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_Z,
+ "Palm Tungsten Z",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125,
+ "Palm m125",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M130,
+ "Palm m130",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_T,
+ "Palm Tungsten T",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE_31,
+ "Palm Zire 31",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE,
+ "Palm Zire",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_SERIAL,
+ "USB Serial Adaptor",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_LS120,
+ "LS-120",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_SDCAAE,
+ "MultiMediaCard",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_TYTP50P6S,
+ "TY-TP50P6-S 50in Touch Panel",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_N5HBZ0000055,
+ "UB94",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_1,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_1,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_1,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_2,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_2,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_2,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485S,
+ "SB485S USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485C,
+ "SB485C USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_LEC,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB232,
+ "SB232 USB-RS232",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_TMU,
+ "TMU Thermometer",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_IRAMP,
+ "IRAmp Duplex",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK5,
+ "DRAK5",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO88,
+ "QUIDO USB 8/8",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO44,
+ "QUIDO USB 4/4",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO22,
+ "QUIDO USB 2/2",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO101,
+ "QUIDO USB 10/1",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO303,
+ "QUIDO USB 30/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO603,
+ "QUIDO USB 60(100)/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO216,
+ "QUIDO USB 2/16",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO332,
+ "QUIDO USB 3/32",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK6,
+ "DRAK6 USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_STAVOVY,
+ "UPS-USB Stavovy",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_MUC,
+ "MU Controller",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SIMUKEY,
+ "SimuKey",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AD4USB,
+ "AD4USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MUX,
+ "GOLIATH MUX",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MSR,
+ "GOLIATH MSR",
+ },
+ {
+ USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER,
+ "6 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE,
+ "3 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK,
+ "Disk",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1,
+ "Serial Converter",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET3,
+ "At-Home Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WM168B,
+ "WM-168b",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WL503IA,
+ "WL-503IA",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_GWU513,
+ "GWU513",
+ },
+ {
+ USB_VENDOR_PHIDGETS, USB_PRODUCT_PHIDGETS_2X2,
+ "2x2 Interface Kit",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS350,
+ "DSS 350 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS,
+ "DSS XXX Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA645VC,
+ "PCA645VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA646VC,
+ "PCA646VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC675K,
+ "PCVC675K Vesta",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC680K,
+ "PCVC680K Vesta Pro",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC690K,
+ "PCVC690K Vesta Pro Scan Camera",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC730K,
+ "PCVC730K ToUCam Fun",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC740K,
+ "PCVC740K ToUCam Pro PC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC750K,
+ "PCVC750K ToUCam Pro Scan",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS150,
+ "DSS 150 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_ACE1001,
+ "AKTAKOM ACE-1001",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_CPWUA054,
+ "CPWUA054",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500_NF,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600,
+ "SNU5600",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5630NS05,
+ "SNU5630NS/05",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DIVAUSB,
+ "DIVA mp3 player",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI, USB_PRODUCT_PHILIPSSEMI_HUB1122,
+ "hub",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_PS2USB,
+ "PS2 to Mac",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_XKEYS,
+ "Xkeys Programmable Keyboard",
+ },
+ {
+ USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600,
+ "CRW-600 6-in-1",
+ },
+ {
+ USB_VENDOR_PLANEX, USB_PRODUCT_PLANEX_GW_US11H,
+ "GW-US11H WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US11S,
+ "GW-US11S WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS,
+ "GW-US54GXS WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US300,
+ "GW-US300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54HP,
+ "GW-US54HP",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS,
+ "GW-US300MiniS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSNANO,
+ "GW-USNano",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRO300,
+ "GW-USMicro300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54MINI2,
+ "GW-US54Mini2",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54SG,
+ "GW-US54SG",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL,
+ "GW-US54GZL",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD,
+ "GW-US54GD",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMM,
+ "GW-USMM",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON,
+ "GW-USMicroN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON2W,
+ "GW-USMicroN2W",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ,
+ "GW-US54GZ",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GU1000T,
+ "GU-1000T",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI,
+ "GW-US54Mini",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_GWUS54ZGL,
+ "GW-US54ZGL",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
+ "DSP-400 Headset",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_TESTBOARD,
+ "test board",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA8,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA9,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTSMITH, USB_PRODUCT_PORTSMITH_EEA,
+ "Express Ethernet",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_1,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_2,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH,
+ "Travel Flash Drive",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2X300,
+ "G2-200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E300,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2300,
+ "G2-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E3002,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_9600,
+ "Colorado 9600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_600U,
+ "Colorado 600u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_6200,
+ "Visioneer 6200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_19200,
+ "Colorado 19200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_1200U,
+ "Colorado 1200u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_636I,
+ "ReadyScan 636i",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E600,
+ "G2E-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_COMFORT,
+ "Comfort",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_MOUSEINABOX,
+ "Mouse-in-a-Box",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_PCGAUMS1,
+ "Sony PCGA-UMS1",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301,
+ "PL2301 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302,
+ "PL2302 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303BENQ,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2305,
+ "Parallel printer",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_ATAPI4,
+ "ATAPI-4 Bridge Controller",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501,
+ "PL2501 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PUTERCOM, USB_PRODUCT_PUTERCOM_UPA100,
+ "USB-1284 BRIDGE",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_MODEM,
+ "CDMA MSM modem",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA2,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA3,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER2,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_MSM_PHONE,
+ "CDMA MSM phone",
+ },
+ {
+ USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_UMASS,
+ "Quanta USB MSM (umass mode)",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_Q101,
+ "Quanta Q101 HSDPA USB modem",
+ },
+ {
+ USB_VENDOR_QUICKSHOT, USB_PRODUCT_QUICKSHOT_STRIKEPAD,
+ "USB StrikePad",
+ },
+ {
+ USB_VENDOR_RADIOSHACK, USB_PRODUCT_RADIOSHACK_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_RAINBOW, USB_PRODUCT_RAINBOW_IKEY2000,
+ "i-Key 2000",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2671,
+ "RT2671",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3370,
+ "RT3370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3573,
+ "RT3573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5370,
+ "RT5370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5572,
+ "RT5572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_MT7601,
+ "MT7601",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT8070,
+ "RT8070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60,
+ "USB serial REX-USB60",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60F,
+ "REX-USB60F",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188ETV,
+ "RTL8188ETV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CTV,
+ "RTL8188CTV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_2,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8150,
+ "RTL8150",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8151,
+ "RTL8151 PNA",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152,
+ "RTL8152",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153,
+ "RTL8153",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8156,
+ "RTL8156",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_0,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8171,
+ "RTL8171",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8172,
+ "RTL8172",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8173,
+ "RTL8173",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8174,
+ "RTL8174",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_0,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8191CU,
+ "RTL8191CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_3,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE_VAU,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_0,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192U,
+ "RTL8192U",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_1,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_2,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_5,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8712,
+ "RTL8712",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8713,
+ "RTL8713",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_COMBO,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8723BU,
+ "RTL8723BU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_RENESAS, USB_PRODUCT_RENESAS_RX610,
+ "RX610 RX-Stick",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC3,
+ "VGP-VCC3 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_3,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC5,
+ "VGP-VCC5 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4_2,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC6,
+ "VGP-VCC6 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC7,
+ "VGP-VCC7 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC8,
+ "VGP-VCC8 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC9,
+ "VGP-VCC9 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VPGVCCX,
+ "VGP-VCCX Camera",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_BLACKBERRY,
+ "BlackBerry",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL_DUAL,
+ "RIM Mass Storage Device",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL,
+ "BlackBerry pearl",
+ },
+ {
+ USB_VENDOR_ROCKFIRE, USB_PRODUCT_ROCKFIRE_GAMEPAD,
+ "Gamepad 203USB",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA100,
+ "UA-100 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM4,
+ "UM-4 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8850,
+ "SC-8850 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_U8,
+ "U-8 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM2,
+ "UM-2 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8820,
+ "SC-8820 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_PC300,
+ "PC-300 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM1,
+ "UM-1 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SK500,
+ "SK-500 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SCD70,
+ "SC-D70 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM880N,
+ "UM-880 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD90,
+ "SD-90 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM550,
+ "UM-550 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD20,
+ "SD-20 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD80,
+ "SD-80 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA700,
+ "UA-700 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UMONE,
+ "UM-ONE MIDI I/F",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS, USB_PRODUCT_RTSYSTEMS_CT57B,
+ "CT57B Radio Cable",
+ },
+ {
+ USB_VENDOR_SACOM, USB_PRODUCT_SACOM_USB485BL,
+ "USB-485-BL",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A,
+ "XG-760A",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA,
+ "XG-76NA",
+ },
+ {
+ USB_VENDOR_SAITEK, USB_PRODUCT_SAITEK_CYBORG_3D_GOLD,
+ "Cyborg 3D Gold Joystick",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_WIS09ABGN,
+ "WIS09ABGN Wireless LAN adapter",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_SWL2100W,
+ "SWL-2100U",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID2,
+ "Android v2",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID,
+ "Android",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_I330,
+ "I330",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05A,
+ "ImageMate SDDR-05a",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31,
+ "ImageMate SDDR-31",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05,
+ "ImageMate SDDR-05",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR12,
+ "ImageMate SDDR-12",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR09,
+ "ImageMate SDDR-09",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR75,
+ "ImageMate SDDR-75",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY, USB_PRODUCT_SANWASUPPLY_JYDV9USB,
+ "JY-DV9USB gamepad",
+ },
+ {
+ USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
+ "Sanyo SCP-4900 Phone",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R,
+ "SL11R-IDE",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2101,
+ "SeaLINK+232 (2101/2105)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2102,
+ "SeaLINK+485 (2102)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2103,
+ "SeaLINK+232I (2103)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2104,
+ "SeaLINK+485I (2104)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_1,
+ "SeaPORT+2/232 (2201) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_1,
+ "SeaPORT+2/485 (2202) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_1,
+ "SeaPORT+2 (2203) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_2,
+ "SeaPORT+2/232 (2201) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_2,
+ "SeaPORT+2/485 (2202) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_2,
+ "SeaPORT+2 (2203) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_1,
+ "SeaPORT+4/232 (2401) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_1,
+ "SeaPORT+4/485 (2402) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_1,
+ "SeaPORT+4 (2403) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_2,
+ "SeaPORT+4/232 (2401) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_2,
+ "SeaPORT+4/485 (2402) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_2,
+ "SeaPORT+4 (2403) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_3,
+ "SeaPORT+4/232 (2401) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_3,
+ "SeaPORT+4/485 (2402) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_3,
+ "SeaPORT+4 (2403) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_4,
+ "SeaPORT+4/232 (2401) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_4,
+ "SeaPORT+4/485 (2402) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_4,
+ "SeaPORT+4 (2403) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_1,
+ "SeaLINK+8/232 (2801) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_1,
+ "SeaLINK+8/485 (2802) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_1,
+ "SeaLINK+8 (2803) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_2,
+ "SeaLINK+8/232 (2801) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_2,
+ "SeaLINK+8/485 (2802) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_2,
+ "SeaLINK+8 (2803) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_3,
+ "SeaLINK+8/232 (2801) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_3,
+ "SeaLINK+8/485 (2802) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_3,
+ "SeaLINK+8 (2803) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_4,
+ "SeaLINK+8/232 (2801) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_4,
+ "SeaLINK+8/485 (2802) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_4,
+ "SeaLINK+8 (2803) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_5,
+ "SeaLINK+8/232 (2801) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_5,
+ "SeaLINK+8/485 (2802) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_5,
+ "SeaLINK+8 (2803) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_6,
+ "SeaLINK+8/232 (2801) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_6,
+ "SeaLINK+8/485 (2802) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_6,
+ "SeaLINK+8 (2803) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_7,
+ "SeaLINK+8/232 (2801) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_7,
+ "SeaLINK+8/485 (2802) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_7,
+ "SeaLINK+8 (2803) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_8,
+ "SeaLINK+8/232 (2801) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_8,
+ "SeaLINK+8/485 (2802) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_8,
+ "SeaLINK+8 (2803) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2106,
+ "SeaLINK+422 (2106)",
+ },
+ {
+ USB_VENDOR_SEL, USB_PRODUCT_SEL_C662,
+ "C662",
+ },
+ {
+ USB_VENDOR_SELUXIT, USB_PRODUCT_SELUXIT_RF,
+ "RF Dongle",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301,
+ "NUB-8301",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB862,
+ "NUB-862",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SERVERWORKS, USB_PRODUCT_SERVERWORKS_HUB,
+ "Root Hub",
+ },
+ {
+ USB_VENDOR_SGI, USB_PRODUCT_SGI_SN1_L1_SC,
+ "SN1 L1 System Controller",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268,
+ "ST268",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620A,
+ "DM9620A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621A,
+ "DM9621A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ZT6688,
+ "ZT6688",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515,
+ "ADM8515 Ethernet",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9000E,
+ "DM9000E",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620,
+ "DM9620",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621,
+ "DM9621",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9622,
+ "DM9622",
+ },
+ {
+ USB_VENDOR_SHARK, USB_PRODUCT_SHARK_PA,
+ "Pocket Adapter",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500,
+ "SL5500",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300,
+ "A300",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600,
+ "SL5600",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700,
+ "C700",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750,
+ "C750",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB,
+ "E-USB Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SDDR09,
+ "ImageMate SDDR09",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBSMCF,
+ "eUSB SmartMedia / CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC,
+ "eUSB MultiMediaCard",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_HIFD,
+ "Sony Hifd",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBATAPI,
+ "eUSB ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CF,
+ "eUSB CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_B,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_C,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CDRW,
+ "CD-RW Device",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SCM,
+ "SCM Micro",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM,
+ "SpeedStream",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM22,
+ "SpeedStream 1022",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
+ "GSM module MC35",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_SX1,
+ "SX1",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X65,
+ "X65",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X75,
+ "X75",
+ },
+ {
+ USB_VENDOR_SIEMENS4, USB_PRODUCT_SIEMENS4_RUGGEDCOM,
+ "RUGGEDCOM",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM5625,
+ "EM5625",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_595,
+ "AirCard 595",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC597E,
+ "597E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C597,
+ "Compass 597",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_580,
+ "Aircard 580 EVDO",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC595U,
+ "595U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720_2,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725_2,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_TRUINSTALL,
+ "Aircard Tru Installer",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_2,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8765,
+ "MC8765",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775_2,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_875,
+ "875",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8780,
+ "MC8780",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8781,
+ "MC8781",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8790,
+ "MC8790",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880,
+ "880",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881,
+ "881",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880E,
+ "880E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881E,
+ "881E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880U,
+ "880U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881U,
+ "881U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC885U,
+ "885U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C01SW,
+ "C01SW",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7700,
+ "MC7700",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_USB305,
+ "USB305",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7304,
+ "MC7304",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8355,
+ "MC8355",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_340U,
+ "Aircard 340U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_770S,
+ "Aircard 770S",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7455,
+ "MC7455",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM7455,
+ "EM7455",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_IRDA,
+ "IrDA",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X,
+ "Datum Networks SSF-7X Multi Players",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_DIGIFILMREADER,
+ "DigiFilm-Combo",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER,
+ "MULTICARDREADER",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_VSTABI,
+ "VStabi Controller",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_M,
+ "Arkham DS101 Monitor",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_A,
+ "Arkham DS101 Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BSM7DUSB,
+ "BSM7-D-USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_POLOLU,
+ "Pololu Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_DEBUG,
+ "Cygnal Debug Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME2,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EDG1228,
+ "EDG1228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_GSM2228,
+ "Enfora GSM2228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP,
+ "Argussoft ISP",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IMS_USB_RS422,
+ "IMS USB-RS422",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128,
+ "Crumb128",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_OPTRIS_MSPRO,
+ "Optris MSpro LT Thermometer",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEGREECONT,
+ "Degree Controls",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRACIENT,
+ "Tracient RFID",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRAQMATE,
+ "Track Systems Traqmate",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SUUNTO,
+ "Suunto sports",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARYGON_MIFARE,
+ "Arygon Mifare RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DESKTOPMOBILE,
+ "Burnside Desktop mobile",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TAMSMASTER,
+ "Tams Master Easy Control",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGBLASTER,
+ "RIGblaster P&P",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGTALK,
+ "RIGtalk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_B_G_H3000,
+ "B&G H3000 Data Cable",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IPLINK1220,
+ "IP-Link 1220",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HAMLINKUSB,
+ "Timewave HamLinkUSB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AVIT_USB_TTL,
+ "AVIT Research USB-TTL",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MJS_TOSLINK,
+ "MJS USB-TOSLINK",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_WAVIT,
+ "ThinkOptics WavIt",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MULTIPLEX_RC,
+ "Multiplex RC adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MSD_DASHHAWK,
+ "MSD DashHawk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INSYS_MODEM,
+ "INSYS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_JTAG,
+ "Lipowsky Baby-JTAG",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_LIN,
+ "Lipowsky Baby-LIN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AEROCOMM,
+ "Aerocomm Radio",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ZEPHYR_BIO,
+ "Zephyr Bioharness",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EMS_C1007,
+ "EMS C1007 HF RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_HARP,
+ "Lipowsky HARP-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_C2_EDGE_MODEM,
+ "Commander 2 EDGE(GSM) Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_GPS,
+ "Cygnal Fasttrax GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PLUGDRIVE,
+ "Nanotec Plug & Drive",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TELEGESIS_ETRX2,
+ "Telegesis ETRX2USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PROCYON_AVS,
+ "Procyon AVS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MC35PU,
+ "MC35pu",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL,
+ "Cygnal",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AMBER_AMB2560,
+ "Amber Wireless AMB2560",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEKTEK_DTAPLUS,
+ "DekTec DTA Plus VHF/UHF Booster",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KYOCERA_GPS,
+ "Kyocera GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IRZ_SG10,
+ "IRZ SG-10 GSM/GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BEI_VCP,
+ "BEI USB Sensor (VCP)",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_JUNIPER_BX_CONS,
+ "Juniper BX Console",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BALLUFF_RFID,
+ "Balluff RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_IBUS,
+ "AC-Services IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CIS,
+ "AC-Services CIS-IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PREON32,
+ "Virtenio Preon32",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CAN,
+ "AC-Services CAN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_OBD,
+ "AC-Services OBD",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357LR,
+ "CEL EM357 LR",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357,
+ "CEL EM357",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MMB_ZIGBEE,
+ "MMB Networks ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PII_ZIGBEE,
+ "Planet Innovation Ingeni ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KETRA_N1,
+ "Ketra N1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CELDEVKIT,
+ "CEL MeshWorks DevKit",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KCF_PRN,
+ "KCF Technologies PRN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HUBZ,
+ "HubZ ZigBee/Z-Wave",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_1,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_2,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_3,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INFINITY_MIC,
+ "Infinity GPS-MIC-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP2110,
+ "CP2110 USB HID Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBSCOPE50,
+ "USBscope50",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBWAVE12,
+ "USBwave12",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBPULSE100,
+ "USBpulse100",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBCOUNT50,
+ "USBcount50",
+ },
+ {
+ USB_VENDOR_SILABS2, USB_PRODUCT_SILABS2_DCU11CLONE,
+ "DCU-11 clone",
+ },
+ {
+ USB_VENDOR_SILABS3, USB_PRODUCT_SILABS3_GPRS_MODEM,
+ "GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS4, USB_PRODUCT_SILABS4_100EU_MODEM,
+ "GPRS Modem 100EU",
+ },
+ {
+ USB_VENDOR_SILABS5, USB_PRODUCT_SILABS5_EM358X,
+ "EM358x",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_U2E,
+ "U2E",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_GPE,
+ "Psion Dacom Gold Port Ethernet",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPH_NF,
+ "YAP Phone (no firmware)",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
+ "YAP Phone",
+ },
+ {
+ USB_VENDOR_SIMCOM, USB_PRODUCT_SIMCOM_SIM7600E,
+ "SIM7600E modem",
+ },
+ {
+ USB_VENDOR_SIRIUS, USB_PRODUCT_SIRIUS_ROADSTER,
+ "NetComm Roadster II 56",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_LN029,
+ "LN029",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_CN104,
+ "CN104",
+ },
+ {
+ USB_VENDOR_SITECOM2, USB_PRODUCT_SITECOM2_WL022,
+ "WL-022",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V1,
+ "WL-168 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN030,
+ "LN-030",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V4,
+ "WL-168 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL302,
+ "WL-302",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL603,
+ "WL-603",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL315,
+ "WL-315",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL321,
+ "WL-321",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL324,
+ "WL-324",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL343,
+ "WL-343",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608,
+ "WL-608",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL344,
+ "WL-344",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL329,
+ "WL-329",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL345,
+ "WL-345",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL353,
+ "WL-353",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V1,
+ "WL-349 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V4,
+ "WL-349 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA4000,
+ "WLA-4000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA5000,
+ "WLA-5000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN032,
+ "LN-032",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA2100V2,
+ "WLA-2100 v2",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028,
+ "LN-028",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113,
+ "WL-113",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL172,
+ "WL-172",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113R2,
+ "WL-113 rev 2",
+ },
+ {
+ USB_VENDOR_SMART, USB_PRODUCT_SMART_PL2303,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTLINK,
+ "SmartLink Ethernet",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC,
+ "smartNIC 2 PnP",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2102USB,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2206USB,
+ "EZ Connect Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2862WG,
+ "EZ Connect 54Mbps",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2020HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2504HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2513HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7500,
+ "LAN7500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7505,
+ "LAN7505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7800,
+ "LAN7800",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7801,
+ "LAN7801",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7850,
+ "LAN7850",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9530,
+ "LAN9530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9730,
+ "LAN9730",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_SAL10,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505_SAL10,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_SAL10,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_SAL10,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_SAL10,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_HAL,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_HAL,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_ALT,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_ALT,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_ALT,
+ "SMSC9512",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN89530,
+ "LAN89530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV1,
+ "EZ Connect 11Mbps",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV2,
+ "EZ Connect 11Mbps v2",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100,
+ "NUB100 Ethernet",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB110,
+ "NUB110 Ethernet",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR, USB_PRODUCT_SOLIDYEAR_KEYBOARD,
+ "Keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC,
+ "DSC Cameras",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_NWMS7,
+ "Memorystick NW-MS7",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2,
+ "Harddrive V2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSACUS1,
+ "Memorystick MSAC-US1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM,
+ "Handycam",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC,
+ "MSC Memorystick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35,
+ "Clie v3.5",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARD,
+ "PlayStation2 keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARDHUB,
+ "PlayStation2 keyboard hub",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2MOUSE,
+ "PlayStation2 mouse",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40,
+ "Clie v4.0",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40_MS,
+ "Clie v4.0 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360,
+ "Clie s360",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41_MS,
+ "Clie v4.1 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41,
+ "Clie v4.1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60,
+ "Clie nx60",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TJ25,
+ "Clie tj25",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_IFU_WLM2,
+ "IFU-WLM2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CXD9192,
+ "1seg TV tuner",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8_CHG,
+ "KeikaiDenwa 8 with charger",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8,
+ "KeikaiDenwa 8",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON, USB_PRODUCT_SPEEDDRAGON_MS3303H,
+ "MS3303H Serial",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_UB801R,
+ "UB801R",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X,
+ "ICUSB2321X/2X/4X",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_BIOMETRIC_COPR,
+ "Biometric Coprocessor",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_COMMUNICATOR,
+ "Communicator",
+ },
+ {
+ USB_VENDOR_STOLLMANN, USB_PRODUCT_STOLLMANN_ISDN_TA_USBA,
+ "ISDN TA+USBA",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX, USB_PRODUCT_STRAWBERRYLINUX_USBRH,
+ "USBRH sensor",
+ },
+ {
+ USB_VENDOR_STSN, USB_PRODUCT_STSN_STSN0001,
+ "Internet Access Device",
+ },
+ {
+ USB_VENDOR_SUNCOMM, USB_PRODUCT_SUNCOMM_MB_ADAPTOR,
+ "Mobile Adaptor",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_DS96L,
+ "U-Cable type D2",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_PS64P1,
+ "U-Cable type P1",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U,
+ "Slipper U",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_IS96U,
+ "Ir-Trinity",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX,
+ "U-Cable type A3",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4,
+ "U-Cable type A4",
+ },
+ {
+ USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
+ "SuperTop IDE Bridge",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_EP9001G2A,
+ "EP-9001-G rev 2A",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SUSTEEN, USB_PRODUCT_SUSTEEN_DCU11,
+ "Ericsson DCU-10/11",
+ },
+ {
+ USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW153,
+ "LW153",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW154,
+ "LW154",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303,
+ "LW303",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313,
+ "LW313",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_CIPHERLAB100,
+ "CipherLab Barcode Scanner",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS, USB_PRODUCT_SYSTEMTALKS_SGCX2UL,
+ "SGC-X2UL",
+ },
+ {
+ USB_VENDOR_TANGTOP, USB_PRODUCT_TANGTOP_USBPS2,
+ "USBPS2",
+ },
+ {
+ USB_VENDOR_TAPWAVE, USB_PRODUCT_TAPWAVE_ZODIAC,
+ "Zodiac",
+ },
+ {
+ USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE,
+ "CameraMate (DPCM_USB)",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_2,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_3,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS_2,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA9664,
+ "USB-PDC Adapter UPA9664",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UCA1464,
+ "USB-cdmaOne Adapter UCA1464",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UHA6400,
+ "USB-PHS Adapter UHA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA6400,
+ "USB-PHS Adapter UPA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB,
+ "FD-05PUB",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_0193,
+ "ALLNET 0193 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZYAIR_B200,
+ "ZyXEL ZyAIR B200 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_U300C,
+ "U-300C",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN,
+ "QuickWLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1,
+ "Microphone",
+ },
+ {
+ USB_VENDOR_TENDA, USB_PRODUCT_TENDA_TWL541U,
+ "TWL541U WLAN",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON,
+ "Aureon Dual USB",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_175,
+ "175/177 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_330,
+ "330 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_435,
+ "435/635/735 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_845,
+ "845 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERVICE,
+ "Service adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_580,
+ "580 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_174,
+ "174 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_556,
+ "556/560 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_1,
+ "USB adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_2,
+ "USB to serial converter",
+ },
+ {
+ USB_VENDOR_THRUST, USB_PRODUCT_THRUST_FUSION_PAD,
+ "Fusion Digital Gamepad",
+ },
+ {
+ USB_VENDOR_THURLBY, USB_PRODUCT_THURLBY_QL355P,
+ "QL355P power supply",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41,
+ "UT-USB41 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB2046,
+ "TUSB2046 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB3410,
+ "TUSB3410",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_NEXII,
+ "Nex II Digital",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430_JTAG,
+ "MSP-FET430UIF JTAG",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430,
+ "MSP-FET430UIF",
+ },
+ {
+ USB_VENDOR_TML, USB_PRODUCT_TML_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_TODOS, USB_PRODUCT_TODOS_ARGOS_MINI,
+ "Argos Mini Smartcard",
+ },
+ {
+ USB_VENDOR_TOPRE, USB_PRODUCT_TOPRE_HHKB,
+ "HHKB Professional",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RH,
+ "Toradex OAK RH sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_P,
+ "Toradex OAK P sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LUX,
+ "Toradex OAK LUX sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_TILT,
+ "Toradex OAK Tilt sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_DIST,
+ "Toradex OAK DIST sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MOVE,
+ "Toradex OAK MOVE sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_4_20,
+ "Toradex OAK 4-20mA sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_G,
+ "Toradex OAK G sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MAGR,
+ "Toradex OAK MAGR sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RELAY,
+ "Toradex OAK RELAY",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_10V,
+ "Toradex OAK 10V sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LN,
+ "Toradex OAK LN sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_IO,
+ "Toradex OAK IO",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_ORIENT,
+ "Toradex ORIENT Tilt sensor",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_HSDPA,
+ "HSDPA",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB,
+ "ThumbDrive 8MB",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_TRIPPLITE, USB_PRODUCT_TRIPPLITE_U209,
+ "U209 Serial",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_T33521,
+ "USB/MP3 decoder",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100,
+ "XXX 1100",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_OPTMOUSE,
+ "Optical Mouse",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_TSUNAMI, USB_PRODUCT_TSUNAMI_SM2000,
+ "SM-2000",
+ },
+ {
+ USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240,
+ "G240",
+ },
+ {
+ USB_VENDOR_UBLOX, USB_PRODUCT_UBLOX_ANTARIS4,
+ "ANTARIS4 GPS",
+ },
+ {
+ USB_VENDOR_ULTIMA, USB_PRODUCT_ULTIMA_1200UBPLUS,
+ "1200 UB Plus",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1236U,
+ "Astra 1236U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1220U,
+ "Astra 1220U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2000U,
+ "Astra 2000U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA3400,
+ "Astra 3400",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2100U,
+ "Astra 2100U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2200U,
+ "Astra 2200U",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU_NF,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A,
+ "TEW-429UB_A",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB,
+ "TEW-429UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1,
+ "TEW-429UB C1",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW645UB,
+ "TEW-645UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2,
+ "ALL0298 v2",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UNIACCESS, USB_PRODUCT_UNIACCESS_PANACHE,
+ "Panache Surf ISDN",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_NW3100,
+ "NW-3100",
+ },
+ {
+ USB_VENDOR_UNKNOWN3, USB_PRODUCT_UNKNOWN3_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_RD9700,
+ "RD9700",
+ },
+ {
+ USB_VENDOR_UNKNOWN5, USB_PRODUCT_UNKNOWN5_NF_RIC,
+ "NF RIC",
+ },
+ {
+ USB_VENDOR_UNKNOWN6, USB_PRODUCT_UNKNOWN6_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_USI, USB_PRODUCT_USI_MC60,
+ "MC60 Serial",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR1120,
+ "USR1120 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5422,
+ "USR5422 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5421A,
+ "USR5421A WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5423,
+ "USR5423 WLAN",
+ },
+ {
+ USB_VENDOR_VAISALA, USB_PRODUCT_VAISALA_USBINSTCABLE,
+ "USB instrument cable",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS101,
+ "VFS101 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS301,
+ "VFS301 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS451,
+ "VFS451 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS300,
+ "VFS300 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_2,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_3,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5471,
+ "VFS471 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VELLEMAN, USB_PRODUCT_VELLEMAN_K8055,
+ "K8055 USB Experiment interface board",
+ },
+ {
+ USB_VENDOR_VERTEX, USB_PRODUCT_VERTEX_VW110L,
+ "VW110L",
+ },
+ {
+ USB_VENDOR_VIA, USB_PRODUCT_VIA_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773HUB,
+ "G773 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_P815HUB,
+ "P815 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_AIRSYNC,
+ "Airsync",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773CTRL,
+ "G773 Monitor Control",
+ },
+ {
+ USB_VENDOR_VISION, USB_PRODUCT_VISION_VC6452V002,
+ "CPiA Camera",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_7600,
+ "OneTouch 7600",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_5300,
+ "OneTouch 5300",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_3000,
+ "Scanport 3000",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6100,
+ "OneTouch 6100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6200,
+ "OneTouch 6200",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8100,
+ "OneTouch 8100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8600,
+ "OneTouch 8600",
+ },
+ {
+ USB_VENDOR_VIVITAR, USB_PRODUCT_VIVITAR_DSC350,
+ "DSC350",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_1,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_2,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_CT0405U,
+ "CT-0405-U Tablet",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE,
+ "Graphire",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_4X5,
+ "Graphire3 4x5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_4X5,
+ "Graphire4 Classic A6",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOSA5,
+ "Intuos A5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW,
+ "Intuos Draw (CTL-490)",
+ },
+ {
+ USB_VENDOR_WAGO, USB_PRODUCT_WAGO_SERVICECABLE,
+ "Service Cable 750-923",
+ },
+ {
+ USB_VENDOR_WAVESENSE, USB_PRODUCT_WAVESENSE_JAZZ,
+ "Jazz blood glucose meter",
+ },
+ {
+ USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341,
+ "CH341 serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341A,
+ "CH341A serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH340,
+ "CH340 serial/parallel",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_PL512,
+ "PL512 PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_RCM,
+ "RCM Remote Control",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_MPOD,
+ "MPOD PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_CML,
+ "CML Data Logger",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_WNC0600,
+ "WNC-0600USB",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR045G,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G,
+ "UR055G",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_O8494,
+ "ORiNOCO 802.11n",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WMR, USB_PRODUCT_WMR_RIGBLASTER,
+ "RIGblaster",
+ },
+ {
+ USB_VENDOR_XIAOMI, USB_PRODUCT_XIAOMI_MT7601U,
+ "MT7601U",
+ },
+ {
+ USB_VENDOR_XIRING, USB_PRODUCT_XIRING_XIMAX,
+ "Ximax CDC",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_IMAGING,
+ "Imaging Device",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_PCCAM,
+ "IBM PC Camera",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256,
+ "UX256 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX96,
+ "UX96 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UR22,
+ "UR22",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RPU200,
+ "RP-U200",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
+ "NetVolante RTA54i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65B,
+ "NetVolante RTW65b",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65I,
+ "NetVolante RTW65i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA55I,
+ "NetVolante RTA55i",
+ },
+ {
+ USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO,
+ "U640MO-03",
+ },
+ {
+ USB_VENDOR_YCCABLE, USB_PRODUCT_YCCABLE_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU,
+ "Flashbuster-U",
+ },
+ {
+ USB_VENDOR_YUBICO, USB_PRODUCT_YUBICO_YUBIKEY,
+ "Yubikey",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_M4Y750,
+ "M4Y-750",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI725,
+ "XI-725/726",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI735,
+ "XI-735",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_MD40900,
+ "MD40900",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XG703A,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB81,
+ "UB81",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB82,
+ "UB82",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZOOM, USB_PRODUCT_ZOOM_2986L,
+ "2986L Fax Modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_CDMA_MSM,
+ "CDMA Technologies MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF633,
+ "ZTE MF633 USUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637,
+ "ZTE MF637 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z,
+ "ZTE K3565-Z USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP,
+ "ONDA MSA110UP USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER2,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF112,
+ "ZTE MF112 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_HSUSB,
+ "ZTE HSUSB",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC2746,
+ "AC2746 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER3,
+ "ZTE USB CDMA installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC8700,
+ "AC8700 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1201,
+ "ZD1201",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1221,
+ "ZD1221",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ALL0298,
+ "ALL0298",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B_2,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_OMNI56K,
+ "Omni 56K Plus",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220,
+ "G-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220F,
+ "G-220F",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2,
+ "G-200 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H,
+ "AG-225H",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202,
+ "M-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G270S,
+ "G-270S",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2,
+ "G-220 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G202,
+ "G-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG220,
+ "AG-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225HV2,
+ "AG-225H v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD271N,
+ "NWD-271N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD211AN,
+ "NWD-211AN",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD2105,
+ "NWD2105",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_PRESTIGE,
+ "Prestige",
+ },
+ { 0, 0, NULL }
+};
+
+const struct usb_known_vendor usb_known_vendors[] = {
+ {
+ USB_VENDOR_PLANEX4,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_UNKNOWN2,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_EGALAX2,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_UNKNOWN6,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_HUMAX,
+ "HUMAX",
+ },
+ {
+ USB_VENDOR_BWCT,
+ "Bernd Walter Computer Technology",
+ },
+ {
+ USB_VENDOR_AOX,
+ "AOX",
+ },
+ {
+ USB_VENDOR_ATMEL,
+ "Atmel",
+ },
+ {
+ USB_VENDOR_MITSUMI,
+ "Mitsumi",
+ },
+ {
+ USB_VENDOR_HP,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_ADAPTEC,
+ "Adaptec",
+ },
+ {
+ USB_VENDOR_NATIONAL,
+ "National Semiconductor",
+ },
+ {
+ USB_VENDOR_ACERLABS,
+ "Acer Labs",
+ },
+ {
+ USB_VENDOR_FTDI,
+ "Future Technology Devices",
+ },
+ {
+ USB_VENDOR_QUANTA2,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_NEC,
+ "NEC",
+ },
+ {
+ USB_VENDOR_KODAK,
+ "Eastman Kodak",
+ },
+ {
+ USB_VENDOR_VIA,
+ "VIA",
+ },
+ {
+ USB_VENDOR_MELCO,
+ "Melco",
+ },
+ {
+ USB_VENDOR_LEADTEK,
+ "Leadtek",
+ },
+ {
+ USB_VENDOR_CREATIVE,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_NOKIA2,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_ADI,
+ "ADI Systems",
+ },
+ {
+ USB_VENDOR_CATC,
+ "Computer Access Technology",
+ },
+ {
+ USB_VENDOR_SMC2,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_GRAVIS,
+ "Advanced Gravis Computer",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP,
+ "Fujitsu Component",
+ },
+ {
+ USB_VENDOR_TAUGA,
+ "Taugagreining HF",
+ },
+ {
+ USB_VENDOR_AMD,
+ "Advanced Micro Devices",
+ },
+ {
+ USB_VENDOR_LEXMARK,
+ "Lexmark International",
+ },
+ {
+ USB_VENDOR_NANAO,
+ "NANAO",
+ },
+ {
+ USB_VENDOR_ALPS,
+ "Alps Electric",
+ },
+ {
+ USB_VENDOR_THRUST,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_TI,
+ "Texas Instruments",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_SIS,
+ "Silicon Integrated Systems Corp.",
+ },
+ {
+ USB_VENDOR_KYE,
+ "KYE Systems",
+ },
+ {
+ USB_VENDOR_DIAMOND2,
+ "Diamond (Supra)",
+ },
+ {
+ USB_VENDOR_RENESAS,
+ "Renesas",
+ },
+ {
+ USB_VENDOR_MICROSOFT,
+ "Microsoft",
+ },
+ {
+ USB_VENDOR_PRIMAX,
+ "Primax Electronics",
+ },
+ {
+ USB_VENDOR_MGE,
+ "Eaton (MGE)",
+ },
+ {
+ USB_VENDOR_AMP,
+ "AMP",
+ },
+ {
+ USB_VENDOR_CHERRY,
+ "Cherry Mikroschalter",
+ },
+ {
+ USB_VENDOR_MEGATRENDS,
+ "American Megatrends",
+ },
+ {
+ USB_VENDOR_LOGITECH,
+ "Logitech",
+ },
+ {
+ USB_VENDOR_BTC,
+ "Behavior Tech. Computer",
+ },
+ {
+ USB_VENDOR_PHILIPS,
+ "Philips",
+ },
+ {
+ USB_VENDOR_SANYO,
+ "Sanyo Electric",
+ },
+ {
+ USB_VENDOR_CONNECTIX,
+ "Connectix",
+ },
+ {
+ USB_VENDOR_DELL2,
+ "Dell",
+ },
+ {
+ USB_VENDOR_KENSINGTON,
+ "Kensington",
+ },
+ {
+ USB_VENDOR_LUCENT,
+ "Lucent",
+ },
+ {
+ USB_VENDOR_PLANTRONICS,
+ "Plantronics",
+ },
+ {
+ USB_VENDOR_KYOCERA,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_STMICRO,
+ "STMicroelectronics",
+ },
+ {
+ USB_VENDOR_FOXCONN,
+ "Foxconn",
+ },
+ {
+ USB_VENDOR_YAMAHA,
+ "YAMAHA",
+ },
+ {
+ USB_VENDOR_COMPAQ,
+ "Compaq",
+ },
+ {
+ USB_VENDOR_HITACHI,
+ "Hitachi",
+ },
+ {
+ USB_VENDOR_ACERP,
+ "Acer Peripherals",
+ },
+ {
+ USB_VENDOR_DAVICOM,
+ "Davicom",
+ },
+ {
+ USB_VENDOR_VISIONEER,
+ "Visioneer",
+ },
+ {
+ USB_VENDOR_CANON,
+ "Canon",
+ },
+ {
+ USB_VENDOR_NIKON,
+ "Nikon",
+ },
+ {
+ USB_VENDOR_IBM,
+ "IBM",
+ },
+ {
+ USB_VENDOR_CYPRESS,
+ "Cypress Semiconductor",
+ },
+ {
+ USB_VENDOR_EPSON,
+ "Seiko Epson",
+ },
+ {
+ USB_VENDOR_RAINBOW,
+ "Rainbow Technologies",
+ },
+ {
+ USB_VENDOR_IODATA,
+ "I/O Data",
+ },
+ {
+ USB_VENDOR_TDK,
+ "TDK",
+ },
+ {
+ USB_VENDOR_3COMUSR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_METHODE,
+ "Methode Electronics Far East",
+ },
+ {
+ USB_VENDOR_MAXISWITCH,
+ "Maxi Switch",
+ },
+ {
+ USB_VENDOR_LOCKHEEDMER,
+ "Lockheed Martin Energy Research",
+ },
+ {
+ USB_VENDOR_FUJITSU,
+ "Fujitsu",
+ },
+ {
+ USB_VENDOR_TOSHIBAAM,
+ "Toshiba America",
+ },
+ {
+ USB_VENDOR_MICROMACRO,
+ "Micro Macro Technologies",
+ },
+ {
+ USB_VENDOR_KONICA,
+ "Konica",
+ },
+ {
+ USB_VENDOR_LITEON,
+ "Lite-On Technology",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO,
+ "Fuji Photo Film",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI,
+ "Philips Semiconductors",
+ },
+ {
+ USB_VENDOR_TATUNG,
+ "Tatung Co. Of America",
+ },
+ {
+ USB_VENDOR_SCANLOGIC,
+ "ScanLogic",
+ },
+ {
+ USB_VENDOR_MYSON,
+ "Myson Technology",
+ },
+ {
+ USB_VENDOR_DIGI2,
+ "Digi",
+ },
+ {
+ USB_VENDOR_ITTCANON,
+ "ITT Canon",
+ },
+ {
+ USB_VENDOR_ALTEC,
+ "Altec Lansing",
+ },
+ {
+ USB_VENDOR_MICROCHIP,
+ "Microchip Technology, Inc.",
+ },
+ {
+ USB_VENDOR_HOLTEK,
+ "Holtek",
+ },
+ {
+ USB_VENDOR_PANASONIC,
+ "Panasonic (Matsushita)",
+ },
+ {
+ USB_VENDOR_SHARP,
+ "Sharp",
+ },
+ {
+ USB_VENDOR_IIYAMA,
+ "Iiyama",
+ },
+ {
+ USB_VENDOR_EXAR,
+ "Exar",
+ },
+ {
+ USB_VENDOR_SHUTTLE,
+ "Shuttle Technology",
+ },
+ {
+ USB_VENDOR_SAMSUNG2,
+ "Samsung Electronics",
+ },
+ {
+ USB_VENDOR_ANNABOOKS,
+ "Annabooks",
+ },
+ {
+ USB_VENDOR_JVC,
+ "JVC",
+ },
+ {
+ USB_VENDOR_CHICONY,
+ "Chicony Electronics",
+ },
+ {
+ USB_VENDOR_ELAN,
+ "Elan",
+ },
+ {
+ USB_VENDOR_BROTHER,
+ "Brother Industries",
+ },
+ {
+ USB_VENDOR_DALLAS,
+ "Dallas Semiconductor",
+ },
+ {
+ USB_VENDOR_ACER,
+ "Acer",
+ },
+ {
+ USB_VENDOR_3COM,
+ "3Com",
+ },
+ {
+ USB_VENDOR_AZTECH,
+ "Aztech Systems",
+ },
+ {
+ USB_VENDOR_BELKIN,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_KAWATSU,
+ "Kawatsu Semiconductor",
+ },
+ {
+ USB_VENDOR_APC,
+ "American Power Conversion",
+ },
+ {
+ USB_VENDOR_CONNECTEK,
+ "Advanced Connectek USA",
+ },
+ {
+ USB_VENDOR_NETCHIP,
+ "NetChip Technology",
+ },
+ {
+ USB_VENDOR_ALTRA,
+ "ALTRA",
+ },
+ {
+ USB_VENDOR_ATI,
+ "ATI Technologies",
+ },
+ {
+ USB_VENDOR_AKS,
+ "Aladdin Knowledge Systems",
+ },
+ {
+ USB_VENDOR_UNIACCESS,
+ "Universal Access",
+ },
+ {
+ USB_VENDOR_VIEWSONIC,
+ "ViewSonic",
+ },
+ {
+ USB_VENDOR_XIRLINK,
+ "Xirlink",
+ },
+ {
+ USB_VENDOR_ANCHOR,
+ "Anchor Chips",
+ },
+ {
+ USB_VENDOR_SONY,
+ "Sony",
+ },
+ {
+ USB_VENDOR_VISION,
+ "VLSI Vision",
+ },
+ {
+ USB_VENDOR_ASAHIKASEI,
+ "Asahi Kasei Microsystems",
+ },
+ {
+ USB_VENDOR_ATEN,
+ "ATEN International",
+ },
+ {
+ USB_VENDOR_SAMSUNG,
+ "Samsung",
+ },
+ {
+ USB_VENDOR_MUSTEK,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_TELEX,
+ "Telex Communications",
+ },
+ {
+ USB_VENDOR_PERACOM,
+ "Peracom Networks",
+ },
+ {
+ USB_VENDOR_ALCOR2,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_WACOM,
+ "WACOM",
+ },
+ {
+ USB_VENDOR_ETEK,
+ "e-TEK Labs",
+ },
+ {
+ USB_VENDOR_EIZO,
+ "EIZO",
+ },
+ {
+ USB_VENDOR_ELECOM,
+ "Elecom",
+ },
+ {
+ USB_VENDOR_XYRATEX,
+ "Xyratex",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE,
+ "Hauppauge Computer Works",
+ },
+ {
+ USB_VENDOR_BAFO,
+ "BAFO/Quality Computer Accessories",
+ },
+ {
+ USB_VENDOR_YEDATA,
+ "Y-E Data",
+ },
+ {
+ USB_VENDOR_AVM,
+ "AVM",
+ },
+ {
+ USB_VENDOR_QUICKSHOT,
+ "Quickshot",
+ },
+ {
+ USB_VENDOR_ROLAND,
+ "Roland",
+ },
+ {
+ USB_VENDOR_ROCKFIRE,
+ "Rockfire",
+ },
+ {
+ USB_VENDOR_RATOC,
+ "RATOC Systems",
+ },
+ {
+ USB_VENDOR_ZYXEL,
+ "ZyXEL Communication",
+ },
+ {
+ USB_VENDOR_ALCOR,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_OMRON,
+ "OMRON Corporation",
+ },
+ {
+ USB_VENDOR_IOMEGA,
+ "Iomega",
+ },
+ {
+ USB_VENDOR_ATREND,
+ "A-Trend Technology",
+ },
+ {
+ USB_VENDOR_AID,
+ "Advanced Input Devices",
+ },
+ {
+ USB_VENDOR_LACIE,
+ "LaCie",
+ },
+ {
+ USB_VENDOR_THRUSTMASTER,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_OMNIVISION,
+ "OmniVision",
+ },
+ {
+ USB_VENDOR_INSYSTEM,
+ "In-System Design",
+ },
+ {
+ USB_VENDOR_APPLE,
+ "Apple Computer",
+ },
+ {
+ USB_VENDOR_YCCABLE,
+ "Y.C. Cable",
+ },
+ {
+ USB_VENDOR_JINGMOLD,
+ "Jing Mold",
+ },
+ {
+ USB_VENDOR_DIGI,
+ "Digi International",
+ },
+ {
+ USB_VENDOR_QUALCOMM,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_QTRONIX,
+ "Qtronix",
+ },
+ {
+ USB_VENDOR_RICOH,
+ "Ricoh",
+ },
+ {
+ USB_VENDOR_ELSA,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_BRAINBOXES,
+ "Brainboxes",
+ },
+ {
+ USB_VENDOR_ULTIMA,
+ "Ultima",
+ },
+ {
+ USB_VENDOR_AXIOHM,
+ "Axiohm Transaction Solutions",
+ },
+ {
+ USB_VENDOR_MICROTEK,
+ "Microtek",
+ },
+ {
+ USB_VENDOR_SUNTAC,
+ "SUN Corporation",
+ },
+ {
+ USB_VENDOR_LEXAR,
+ "Lexar Media",
+ },
+ {
+ USB_VENDOR_ADDTRON,
+ "Addtron",
+ },
+ {
+ USB_VENDOR_SYMBOL,
+ "Symbol Technologies",
+ },
+ {
+ USB_VENDOR_GENESYS,
+ "Genesys Logic",
+ },
+ {
+ USB_VENDOR_FUJI,
+ "Fuji Electric",
+ },
+ {
+ USB_VENDOR_KEITHLEY,
+ "Keithley Instruments",
+ },
+ {
+ USB_VENDOR_EIZONANAO,
+ "EIZO Nanao",
+ },
+ {
+ USB_VENDOR_KLSI,
+ "Kawasaki LSI",
+ },
+ {
+ USB_VENDOR_FFC,
+ "FFC",
+ },
+ {
+ USB_VENDOR_ANKO,
+ "Anko Electronic",
+ },
+ {
+ USB_VENDOR_PIENGINEERING,
+ "P.I. Engineering",
+ },
+ {
+ USB_VENDOR_AOC,
+ "AOC International",
+ },
+ {
+ USB_VENDOR_CHIC,
+ "Chic Technology",
+ },
+ {
+ USB_VENDOR_BARCO,
+ "Barco Display Systems",
+ },
+ {
+ USB_VENDOR_BRIDGE,
+ "Bridge Information",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR,
+ "Solid Year",
+ },
+ {
+ USB_VENDOR_BIORAD,
+ "Bio-Rad Laboratories",
+ },
+ {
+ USB_VENDOR_MACALLY,
+ "Macally",
+ },
+ {
+ USB_VENDOR_ACTLABS,
+ "Act Labs",
+ },
+ {
+ USB_VENDOR_ALARIS,
+ "Alaris",
+ },
+ {
+ USB_VENDOR_APEX,
+ "Apex",
+ },
+ {
+ USB_VENDOR_VIVITAR,
+ "Vivitar",
+ },
+ {
+ USB_VENDOR_GUNZE,
+ "Gunze Electronics USA",
+ },
+ {
+ USB_VENDOR_AVISION,
+ "Avision",
+ },
+ {
+ USB_VENDOR_TEAC,
+ "TEAC",
+ },
+ {
+ USB_VENDOR_SGI,
+ "Silicon Graphics",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY,
+ "Sanwa Supply",
+ },
+ {
+ USB_VENDOR_MUSTEK2,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_LINKSYS,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_ACERSA,
+ "Acer Semiconductor America",
+ },
+ {
+ USB_VENDOR_SIGMATEL,
+ "Sigmatel",
+ },
+ {
+ USB_VENDOR_DRAYTEK,
+ "DrayTek",
+ },
+ {
+ USB_VENDOR_AIWA,
+ "Aiwa",
+ },
+ {
+ USB_VENDOR_ACARD,
+ "ACARD Technology",
+ },
+ {
+ USB_VENDOR_PROLIFIC,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_SIEMENS,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC,
+ "Avance Logic",
+ },
+ {
+ USB_VENDOR_SIEMENS2,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_MINOLTA,
+ "Minolta",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS,
+ "CH Products",
+ },
+ {
+ USB_VENDOR_HAGIWARA,
+ "Hagiwara Sys-Com",
+ },
+ {
+ USB_VENDOR_CTX,
+ "Chuntex",
+ },
+ {
+ USB_VENDOR_ASKEY,
+ "Askey Computer",
+ },
+ {
+ USB_VENDOR_SAITEK,
+ "Saitek",
+ },
+ {
+ USB_VENDOR_ALCATELT,
+ "Alcatel Telecom",
+ },
+ {
+ USB_VENDOR_AGFA,
+ "AGFA-Gevaert",
+ },
+ {
+ USB_VENDOR_ASIAMD,
+ "Asia Microelectronic Development",
+ },
+ {
+ USB_VENDOR_PHIDGETS,
+ "Phidgets",
+ },
+ {
+ USB_VENDOR_BIZLINK,
+ "Bizlink International",
+ },
+ {
+ USB_VENDOR_KEYSPAN,
+ "Keyspan",
+ },
+ {
+ USB_VENDOR_AASHIMA,
+ "Aashima Technology",
+ },
+ {
+ USB_VENDOR_LIEBERT,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_MULTITECH,
+ "MultiTech",
+ },
+ {
+ USB_VENDOR_ADS,
+ "ADS Technologies",
+ },
+ {
+ USB_VENDOR_ALCATELM,
+ "Alcatel Microelectronics",
+ },
+ {
+ USB_VENDOR_SIRIUS,
+ "Sirius Technologies",
+ },
+ {
+ USB_VENDOR_GUILLEMOT,
+ "Guillemot",
+ },
+ {
+ USB_VENDOR_BOSTON,
+ "Boston Acoustics",
+ },
+ {
+ USB_VENDOR_SMC,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_PUTERCOM,
+ "Putercom",
+ },
+ {
+ USB_VENDOR_MCT,
+ "MCT",
+ },
+ {
+ USB_VENDOR_IMATION,
+ "Imation",
+ },
+ {
+ USB_VENDOR_DOMAIN,
+ "Domain Technologies, Inc.",
+ },
+ {
+ USB_VENDOR_SUSTEEN,
+ "Susteen",
+ },
+ {
+ USB_VENDOR_EICON,
+ "Eicon Networks",
+ },
+ {
+ USB_VENDOR_STOLLMANN,
+ "Stollmann",
+ },
+ {
+ USB_VENDOR_SYNTECH,
+ "Syntech Information",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM,
+ "Digital Stream",
+ },
+ {
+ USB_VENDOR_AUREAL,
+ "Aureal Semiconductor",
+ },
+ {
+ USB_VENDOR_IDOWELL,
+ "iDowell",
+ },
+ {
+ USB_VENDOR_MIDIMAN,
+ "Midiman",
+ },
+ {
+ USB_VENDOR_CYBERPOWER,
+ "CyberPower",
+ },
+ {
+ USB_VENDOR_SURECOM,
+ "Surecom Technology",
+ },
+ {
+ USB_VENDOR_LINKSYS2,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_GRIFFIN,
+ "Griffin Technology",
+ },
+ {
+ USB_VENDOR_SANDISK,
+ "SanDisk",
+ },
+ {
+ USB_VENDOR_JENOPTIK,
+ "Jenoptik",
+ },
+ {
+ USB_VENDOR_LOGITEC,
+ "Logitec",
+ },
+ {
+ USB_VENDOR_NOKIA,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_BRIMAX,
+ "Brimax",
+ },
+ {
+ USB_VENDOR_AXIS,
+ "Axis Communications",
+ },
+ {
+ USB_VENDOR_ABL,
+ "ABL Electronics",
+ },
+ {
+ USB_VENDOR_SAGEM,
+ "Sagem",
+ },
+ {
+ USB_VENDOR_SUNCOMM,
+ "Sun Communications",
+ },
+ {
+ USB_VENDOR_ALFADATA,
+ "Alfadata Computer",
+ },
+ {
+ USB_VENDOR_NATIONALTECH,
+ "National Technical Systems",
+ },
+ {
+ USB_VENDOR_ONNTO,
+ "Onnto",
+ },
+ {
+ USB_VENDOR_BE,
+ "Be",
+ },
+ {
+ USB_VENDOR_ADMTEK,
+ "ADMtek",
+ },
+ {
+ USB_VENDOR_COREGA,
+ "Corega",
+ },
+ {
+ USB_VENDOR_FREECOM,
+ "Freecom",
+ },
+ {
+ USB_VENDOR_MICROTECH,
+ "Microtech",
+ },
+ {
+ USB_VENDOR_MOTOROLA3,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_OLYMPUS,
+ "Olympus",
+ },
+ {
+ USB_VENDOR_ABOCOM,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN,
+ "Keisokugiken",
+ },
+ {
+ USB_VENDOR_ONSPEC,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_APG,
+ "APG Cash Drawer",
+ },
+ {
+ USB_VENDOR_BUG,
+ "B.U.G.",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN,
+ "Allied Telesyn International",
+ },
+ {
+ USB_VENDOR_AVERMEDIA,
+ "AVerMedia Technologies",
+ },
+ {
+ USB_VENDOR_SIIG,
+ "SIIG",
+ },
+ {
+ USB_VENDOR_CASIO,
+ "CASIO",
+ },
+ {
+ USB_VENDOR_DLINK2,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_APTIO,
+ "Aptio Products",
+ },
+ {
+ USB_VENDOR_ARASAN,
+ "Arasan Chip Systems",
+ },
+ {
+ USB_VENDOR_ALLIEDCABLE,
+ "Allied Cable",
+ },
+ {
+ USB_VENDOR_STSN,
+ "STSN",
+ },
+ {
+ USB_VENDOR_BEWAN,
+ "Bewan",
+ },
+ {
+ USB_VENDOR_ZOOM,
+ "Zoom Telephonics",
+ },
+ {
+ USB_VENDOR_BROADLOGIC,
+ "BroadLogic",
+ },
+ {
+ USB_VENDOR_HANDSPRING,
+ "Handspring",
+ },
+ {
+ USB_VENDOR_PALM,
+ "Palm Computing",
+ },
+ {
+ USB_VENDOR_SOURCENEXT,
+ "SOURCENEXT",
+ },
+ {
+ USB_VENDOR_ACTIONSTAR,
+ "Action Star Enterprise",
+ },
+ {
+ USB_VENDOR_ACCTON,
+ "Accton Technology",
+ },
+ {
+ USB_VENDOR_DIAMOND,
+ "Diamond",
+ },
+ {
+ USB_VENDOR_NETGEAR,
+ "BayNETGEAR",
+ },
+ {
+ USB_VENDOR_TOPRE,
+ "Topre Corporation",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE,
+ "ActiveWire",
+ },
+ {
+ USB_VENDOR_BBELECTR,
+ "B&B Electronics",
+ },
+ {
+ USB_VENDOR_PORTGEAR,
+ "PortGear",
+ },
+ {
+ USB_VENDOR_NETGEAR2,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS,
+ "System Talks",
+ },
+ {
+ USB_VENDOR_METRICOM,
+ "Metricom",
+ },
+ {
+ USB_VENDOR_ADESSOKBTEK,
+ "ADESSO/Kbtek America",
+ },
+ {
+ USB_VENDOR_JATON,
+ "Jaton",
+ },
+ {
+ USB_VENDOR_APT,
+ "APT Technologies",
+ },
+ {
+ USB_VENDOR_BOCARESEARCH,
+ "Boca Research",
+ },
+ {
+ USB_VENDOR_ANDREA,
+ "Andrea Electronics",
+ },
+ {
+ USB_VENDOR_BURRBROWN,
+ "Burr-Brown Japan",
+ },
+ {
+ USB_VENDOR_2WIRE,
+ "2Wire",
+ },
+ {
+ USB_VENDOR_AIPTEK,
+ "AIPTEK International",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES,
+ "SmartBridges",
+ },
+ {
+ USB_VENDOR_BILLIONTON,
+ "Billionton Systems",
+ },
+ {
+ USB_VENDOR_GEMPLUS,
+ "GEMPLUS",
+ },
+ {
+ USB_VENDOR_EXTENDED,
+ "Extended Systems",
+ },
+ {
+ USB_VENDOR_MSYSTEMS,
+ "M-Systems",
+ },
+ {
+ USB_VENDOR_DIGIANSWER,
+ "Digianswer",
+ },
+ {
+ USB_VENDOR_AUTHENTEC,
+ "AuthenTec",
+ },
+ {
+ USB_VENDOR_SIEMENS4,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA,
+ "Audio-Technica",
+ },
+ {
+ USB_VENDOR_TRUMPION,
+ "Trumpion Microelectronics",
+ },
+ {
+ USB_VENDOR_ALATION,
+ "Alation Systems",
+ },
+ {
+ USB_VENDOR_GLOBESPAN,
+ "Globespan",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA,
+ "Concord Camera",
+ },
+ {
+ USB_VENDOR_GARMIN,
+ "Garmin International",
+ },
+ {
+ USB_VENDOR_GOHUBS,
+ "GoHubs",
+ },
+ {
+ USB_VENDOR_BIOMETRIC,
+ "American Biometric Company",
+ },
+ {
+ USB_VENDOR_TOSHIBA,
+ "Toshiba Corp",
+ },
+ {
+ USB_VENDOR_INTREPIDCS,
+ "Intrepid",
+ },
+ {
+ USB_VENDOR_YANO,
+ "Yano",
+ },
+ {
+ USB_VENDOR_KINGSTON,
+ "Kingston Technology",
+ },
+ {
+ USB_VENDOR_BLUEWATER,
+ "BlueWater Systems",
+ },
+ {
+ USB_VENDOR_AGILENT,
+ "Agilent Technologies",
+ },
+ {
+ USB_VENDOR_GUDE,
+ "Gude ADS",
+ },
+ {
+ USB_VENDOR_PORTSMITH,
+ "Portsmith",
+ },
+ {
+ USB_VENDOR_ACERW,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ADIRONDACK,
+ "Adirondack Wire & Cable",
+ },
+ {
+ USB_VENDOR_BECKHOFF,
+ "Beckhoff",
+ },
+ {
+ USB_VENDOR_MINDSATWORK,
+ "Minds At Work",
+ },
+ {
+ USB_VENDOR_INTERSIL,
+ "Intersil",
+ },
+ {
+ USB_VENDOR_ALTIUS,
+ "Altius Solutions",
+ },
+ {
+ USB_VENDOR_ARRIS,
+ "Arris Interactive",
+ },
+ {
+ USB_VENDOR_ACTIVCARD,
+ "ACTIVCARD",
+ },
+ {
+ USB_VENDOR_ACTISYS,
+ "ACTiSYS",
+ },
+ {
+ USB_VENDOR_NOVATEL1,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_AFOURTECH,
+ "A-FOUR TECH",
+ },
+ {
+ USB_VENDOR_AIMEX,
+ "AIMEX",
+ },
+ {
+ USB_VENDOR_ADDONICS,
+ "Addonics Technologies",
+ },
+ {
+ USB_VENDOR_AKAI,
+ "AKAI professional M.I.",
+ },
+ {
+ USB_VENDOR_ARESCOM,
+ "ARESCOM",
+ },
+ {
+ USB_VENDOR_BAY,
+ "Bay Associates",
+ },
+ {
+ USB_VENDOR_ALTERA,
+ "Altera",
+ },
+ {
+ USB_VENDOR_CSR,
+ "Cambridge Silicon Radio",
+ },
+ {
+ USB_VENDOR_TREK,
+ "Trek Technology",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL,
+ "Asahi Optical",
+ },
+ {
+ USB_VENDOR_BOCASYSTEMS,
+ "Boca Systems",
+ },
+ {
+ USB_VENDOR_SHANTOU,
+ "ShanTou",
+ },
+ {
+ USB_VENDOR_HIROSE,
+ "Hirose",
+ },
+ {
+ USB_VENDOR_BROADCOM,
+ "Broadcom",
+ },
+ {
+ USB_VENDOR_GREENHOUSE,
+ "GREENHOUSE",
+ },
+ {
+ USB_VENDOR_GEOCAST,
+ "Geocast Network Systems",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY,
+ "Dream Cheeky",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE,
+ "id Quantique",
+ },
+ {
+ USB_VENDOR_IDTECH,
+ "ID TECH",
+ },
+ {
+ USB_VENDOR_ZYDAS,
+ "ZyDAS Technology",
+ },
+ {
+ USB_VENDOR_CHENSOURCE,
+ "Chen-Source",
+ },
+ {
+ USB_VENDOR_NEODIO,
+ "Neodio",
+ },
+ {
+ USB_VENDOR_OPTION,
+ "Option",
+ },
+ {
+ USB_VENDOR_ASUS,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_TODOS,
+ "Todos Data System",
+ },
+ {
+ USB_VENDOR_OCT,
+ "Omnidirectional Control Technology",
+ },
+ {
+ USB_VENDOR_TEKRAM,
+ "Tekram Technology",
+ },
+ {
+ USB_VENDOR_HAL,
+ "HAL Corporation",
+ },
+ {
+ USB_VENDOR_NEC2,
+ "NEC",
+ },
+ {
+ USB_VENDOR_ATI2,
+ "ATI",
+ },
+ {
+ USB_VENDOR_KURUSUGAWA,
+ "Kurusugawa Electronics",
+ },
+ {
+ USB_VENDOR_SMART,
+ "Smart Technologies",
+ },
+ {
+ USB_VENDOR_ASIX,
+ "ASIX Electronics",
+ },
+ {
+ USB_VENDOR_O2MICRO,
+ "O2 Micro",
+ },
+ {
+ USB_VENDOR_SACOM,
+ "System SACOM Industry Co.,Ltd",
+ },
+ {
+ USB_VENDOR_USR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_AMBIT,
+ "Ambit Microsystems",
+ },
+ {
+ USB_VENDOR_HTC,
+ "HTC",
+ },
+ {
+ USB_VENDOR_REALTEK,
+ "Realtek",
+ },
+ {
+ USB_VENDOR_MEI,
+ "MEI",
+ },
+ {
+ USB_VENDOR_ADDONICS2,
+ "Addonics Technology",
+ },
+ {
+ USB_VENDOR_FSC,
+ "Fujitsu Siemens Computers",
+ },
+ {
+ USB_VENDOR_AGATE,
+ "Agate Technologies",
+ },
+ {
+ USB_VENDOR_DMI,
+ "DMI",
+ },
+ {
+ USB_VENDOR_ICOM,
+ "Icom",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS,
+ "GN Otometrics",
+ },
+ {
+ USB_VENDOR_MICRODIA,
+ "Microdia / Sonix Technology Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SEALEVEL,
+ "Sealevel System",
+ },
+ {
+ USB_VENDOR_JETI,
+ "JETI",
+ },
+ {
+ USB_VENDOR_EASYDISK,
+ "EasyDisk",
+ },
+ {
+ USB_VENDOR_ELEKTOR,
+ "Elektor Electronics",
+ },
+ {
+ USB_VENDOR_KYOCERA2,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_TERRATEC,
+ "TerraTec Electronic GmbH",
+ },
+ {
+ USB_VENDOR_ZCOM,
+ "Z-Com",
+ },
+ {
+ USB_VENDOR_ATHEROS2,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_POSIFLEX,
+ "Posiflex Technologies",
+ },
+ {
+ USB_VENDOR_TANGTOP,
+ "Tangtop",
+ },
+ {
+ USB_VENDOR_KOBIL,
+ "Kobil Systems",
+ },
+ {
+ USB_VENDOR_SMC3,
+ "SMC",
+ },
+ {
+ USB_VENDOR_PEN,
+ "Pen Drive",
+ },
+ {
+ USB_VENDOR_ABC,
+ "ABC",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_MSI,
+ "Micro Star International",
+ },
+ {
+ USB_VENDOR_ELCON,
+ "ELCON Systemtechnik",
+ },
+ {
+ USB_VENDOR_UNKNOWN5,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_SITECOMEU,
+ "Sitecom Europe",
+ },
+ {
+ USB_VENDOR_MOBILEACTION,
+ "Mobile Action",
+ },
+ {
+ USB_VENDOR_AMIGO,
+ "Amigo Technology",
+ },
+ {
+ USB_VENDOR_VMWARE,
+ "VMware",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON,
+ "Speed Dragon Multimedia",
+ },
+ {
+ USB_VENDOR_CTC,
+ "CONWISE Technology",
+ },
+ {
+ USB_VENDOR_HAWKING,
+ "Hawking",
+ },
+ {
+ USB_VENDOR_FOSSIL,
+ "Fossil",
+ },
+ {
+ USB_VENDOR_GMATE,
+ "G.Mate",
+ },
+ {
+ USB_VENDOR_MEDIATEK,
+ "MediaTek Inc.",
+ },
+ {
+ USB_VENDOR_OTI,
+ "Ours Technology",
+ },
+ {
+ USB_VENDOR_PILOTECH,
+ "Pilotech",
+ },
+ {
+ USB_VENDOR_NOVATECH,
+ "Nova Tech",
+ },
+ {
+ USB_VENDOR_ITEGNO,
+ "iTegno",
+ },
+ {
+ USB_VENDOR_NORITAKE,
+ "Noritake itron Corp",
+ },
+ {
+ USB_VENDOR_EGALAX,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_XIRING,
+ "XIRING",
+ },
+ {
+ USB_VENDOR_AIRPRIME,
+ "Airprime",
+ },
+ {
+ USB_VENDOR_VTECH,
+ "VTech",
+ },
+ {
+ USB_VENDOR_FALCOM,
+ "Falcom Wireless Communications",
+ },
+ {
+ USB_VENDOR_RIM,
+ "Research In Motion",
+ },
+ {
+ USB_VENDOR_DYNASTREAM,
+ "Dynastream Innovations",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD,
+ "Larsen and Brusgaard",
+ },
+ {
+ USB_VENDOR_OREGONSCI,
+ "Oregon Scientific",
+ },
+ {
+ USB_VENDOR_UNKNOWN4,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_DVICO,
+ "DViCO",
+ },
+ {
+ USB_VENDOR_QUALCOMM2,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_MOTOROLA4,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_HP3,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_THURLBY,
+ "Thurlby Thandar Instruments",
+ },
+ {
+ USB_VENDOR_GIGABYTE,
+ "GIGABYTE",
+ },
+ {
+ USB_VENDOR_YUBICO,
+ "Yubico.com",
+ },
+ {
+ USB_VENDOR_MOTOROLA,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_CCYU,
+ "CCYU Technology",
+ },
+ {
+ USB_VENDOR_HYUNDAI,
+ "Hyundai",
+ },
+ {
+ USB_VENDOR_GCTSEMICON,
+ "GCT Semiconductor",
+ },
+ {
+ USB_VENDOR_SILABS2,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_USI,
+ "USI",
+ },
+ {
+ USB_VENDOR_LIEBERT2,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_PLX,
+ "PLX",
+ },
+ {
+ USB_VENDOR_ASANTE,
+ "Asante",
+ },
+ {
+ USB_VENDOR_SILABS,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS3,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS4,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_VELLEMAN,
+ "Velleman",
+ },
+ {
+ USB_VENDOR_MOXA,
+ "Moxa Technologies",
+ },
+ {
+ USB_VENDOR_ANALOG,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_TENX,
+ "Ten X Technology, Inc.",
+ },
+ {
+ USB_VENDOR_ISSC,
+ "Integrated System Solution Corp.",
+ },
+ {
+ USB_VENDOR_JRC,
+ "Japan Radio Company",
+ },
+ {
+ USB_VENDOR_SPHAIRON,
+ "Sphairon Access Systems",
+ },
+ {
+ USB_VENDOR_DELORME,
+ "DeLorme",
+ },
+ {
+ USB_VENDOR_SERVERWORKS,
+ "ServerWorks",
+ },
+ {
+ USB_VENDOR_ACERCM,
+ "Acer Communications & Multimedia",
+ },
+ {
+ USB_VENDOR_SIERRA,
+ "Sierra Wireless",
+ },
+ {
+ USB_VENDOR_SIEMENS3,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_ALCATEL,
+ "Alcatel",
+ },
+ {
+ USB_VENDOR_INTERBIO,
+ "InterBiometrics",
+ },
+ {
+ USB_VENDOR_UNKNOWN3,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_TSUNAMI,
+ "Tsunami",
+ },
+ {
+ USB_VENDOR_PHEENET,
+ "Pheenet",
+ },
+ {
+ USB_VENDOR_RAPTORGAMING,
+ "Raptor Gaming",
+ },
+ {
+ USB_VENDOR_TWINMOS,
+ "TwinMOS",
+ },
+ {
+ USB_VENDOR_TENDA,
+ "Tenda",
+ },
+ {
+ USB_VENDOR_TESTO,
+ "Testo AG",
+ },
+ {
+ USB_VENDOR_CREATIVE2,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_BELKIN2,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_CYBERTAN,
+ "CyberTAN Technology",
+ },
+ {
+ USB_VENDOR_HUAWEI,
+ "HUAWEI Technologies",
+ },
+ {
+ USB_VENDOR_ARANEUS,
+ "Araneus Information Systems",
+ },
+ {
+ USB_VENDOR_TAPWAVE,
+ "Tapwave",
+ },
+ {
+ USB_VENDOR_AINCOMM,
+ "Aincomm",
+ },
+ {
+ USB_VENDOR_MOBILITY,
+ "Mobility",
+ },
+ {
+ USB_VENDOR_DICKSMITH,
+ "Dick Smith Electronics",
+ },
+ {
+ USB_VENDOR_NETGEAR3,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_VALIDITY,
+ "Validity Sensors",
+ },
+ {
+ USB_VENDOR_BALTECH,
+ "Baltech",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_SHARK,
+ "Shark",
+ },
+ {
+ USB_VENDOR_AZUREWAVE,
+ "AsureWave",
+ },
+ {
+ USB_VENDOR_NOVATEL,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB,
+ "Wistron NeWeb",
+ },
+ {
+ USB_VENDOR_RADIOSHACK,
+ "Radio Shack",
+ },
+ {
+ USB_VENDOR_OPENMOKO,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM,
+ "Huawei 3Com",
+ },
+ {
+ USB_VENDOR_ABOCOM2,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_SILICOM,
+ "Silicom",
+ },
+ {
+ USB_VENDOR_RALINK,
+ "Ralink Technology",
+ },
+ {
+ USB_VENDOR_STARTECH,
+ "StarTech.com",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_SUPERTOP,
+ "SuperTop",
+ },
+ {
+ USB_VENDOR_PLANEX3,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS,
+ "Silicon Portals",
+ },
+ {
+ USB_VENDOR_UBLOX,
+ "U-blox",
+ },
+ {
+ USB_VENDOR_OWEN,
+ "Owen",
+ },
+ {
+ USB_VENDOR_OQO,
+ "OQO",
+ },
+ {
+ USB_VENDOR_UMEDIA,
+ "U-MEDIA Communications",
+ },
+ {
+ USB_VENDOR_FIBERLINE,
+ "Fiberline",
+ },
+ {
+ USB_VENDOR_SPARKLAN,
+ "SparkLAN",
+ },
+ {
+ USB_VENDOR_OLIMEX,
+ "Olimex",
+ },
+ {
+ USB_VENDOR_AMIT2,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_TRUST,
+ "Trust",
+ },
+ {
+ USB_VENDOR_SOHOWARE,
+ "SOHOware",
+ },
+ {
+ USB_VENDOR_UMAX,
+ "UMAX Data Systems",
+ },
+ {
+ USB_VENDOR_INSIDEOUT,
+ "Inside Out Networks",
+ },
+ {
+ USB_VENDOR_GOODWAY,
+ "Good Way Technology",
+ },
+ {
+ USB_VENDOR_ENTREGA,
+ "Entrega",
+ },
+ {
+ USB_VENDOR_ACTIONTEC,
+ "Actiontec Electronics",
+ },
+ {
+ USB_VENDOR_CLIPSAL,
+ "Clipsal",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_ATHEROS,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_GIGASET,
+ "Gigaset",
+ },
+ {
+ USB_VENDOR_GLOBALSUN,
+ "Global Sun Technology",
+ },
+ {
+ USB_VENDOR_VOTI,
+ "Van Ooijen Technische Informatica",
+ },
+ {
+ USB_VENDOR_ANYDATA,
+ "AnyDATA Inc.",
+ },
+ {
+ USB_VENDOR_JABLOTRON,
+ "Jablotron",
+ },
+ {
+ USB_VENDOR_CMOTECH,
+ "CMOTECH",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS,
+ "WIENER Plein & Baus",
+ },
+ {
+ USB_VENDOR_AXESSTEL,
+ "Axesstel",
+ },
+ {
+ USB_VENDOR_LINKSYS4,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_SENAO,
+ "Senao",
+ },
+ {
+ USB_VENDOR_ASUS2,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX,
+ "Strawberry linux Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SWEEX2,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_MECANIQUE,
+ "Mecanique",
+ },
+ {
+ USB_VENDOR_KAMSTRUP,
+ "Kamstrup A/S",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK,
+ "DisplayLink",
+ },
+ {
+ USB_VENDOR_LENOVO,
+ "Lenovo",
+ },
+ {
+ USB_VENDOR_WAVESENSE,
+ "WaveSense",
+ },
+ {
+ USB_VENDOR_VAISALA,
+ "VAISALA",
+ },
+ {
+ USB_VENDOR_AMIT,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_GOOGLE,
+ "Google",
+ },
+ {
+ USB_VENDOR_QCOM,
+ "Qcom",
+ },
+ {
+ USB_VENDOR_ELV,
+ "ELV",
+ },
+ {
+ USB_VENDOR_LINKSYS3,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_AVAGO,
+ "Avago",
+ },
+ {
+ USB_VENDOR_MEINBERG,
+ "Meinberg Funkuhren",
+ },
+ {
+ USB_VENDOR_ZTE,
+ "ZTE Inc.",
+ },
+ {
+ USB_VENDOR_QUANTA,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_TERMINUS,
+ "Terminus Technology",
+ },
+ {
+ USB_VENDOR_ABBOTT,
+ "Abbott Labs",
+ },
+ {
+ USB_VENDOR_BAYER,
+ "Bayer Health Care",
+ },
+ {
+ USB_VENDOR_WCH2,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_SEL,
+ "Schweitzer Engineering Laboratories",
+ },
+ {
+ USB_VENDOR_CORSAIR,
+ "Corsair",
+ },
+ {
+ USB_VENDOR_MATRIXORB,
+ "Matrix Orbital",
+ },
+ {
+ USB_VENDOR_TORADEX,
+ "Toradex inc.",
+ },
+ {
+ USB_VENDOR_FUSHICAI,
+ "Fushicai",
+ },
+ {
+ USB_VENDOR_OVISLINK,
+ "OvisLink",
+ },
+ {
+ USB_VENDOR_TML,
+ "The Mobility Lab",
+ },
+ {
+ USB_VENDOR_SILABS5,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_TCTMOBILE,
+ "TCT Mobile",
+ },
+ {
+ USB_VENDOR_MDS,
+ "MDS",
+ },
+ {
+ USB_VENDOR_ALTI2,
+ "Alti-2",
+ },
+ {
+ USB_VENDOR_SUNPLUS,
+ "Sunplus",
+ },
+ {
+ USB_VENDOR_WAGO,
+ "WAGO Kontakttechnik",
+ },
+ {
+ USB_VENDOR_LONGCHEER,
+ "Longcheer Technology",
+ },
+ {
+ USB_VENDOR_DRESDENELEC,
+ "Dresden Elektronic",
+ },
+ {
+ USB_VENDOR_DREAMLINK,
+ "Dream Link",
+ },
+ {
+ USB_VENDOR_PEGATRON,
+ "Pegatron",
+ },
+ {
+ USB_VENDOR_OPENMOKO2,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_SELUXIT,
+ "Seluxit",
+ },
+ {
+ USB_VENDOR_METAGEEK,
+ "MetaGeek",
+ },
+ {
+ USB_VENDOR_SIMCOM,
+ "SIMCom Wireless Solutions Co., Ltd.",
+ },
+ {
+ USB_VENDOR_FESTO,
+ "Festo",
+ },
+ {
+ USB_VENDOR_MODACOM,
+ "Modacom",
+ },
+ {
+ USB_VENDOR_AIRTIES,
+ "AirTies",
+ },
+ {
+ USB_VENDOR_LAKESHORE,
+ "Lake Shore",
+ },
+ {
+ USB_VENDOR_VERTEX,
+ "Vertex Wireless Co., Ltd.",
+ },
+ {
+ USB_VENDOR_DLINK,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_PLANEX2,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_ENCORE,
+ "Encore",
+ },
+ {
+ USB_VENDOR_PARA,
+ "PARA Industrial",
+ },
+ {
+ USB_VENDOR_TRENDNET,
+ "TRENDnet",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS,
+ "RT Systems",
+ },
+ {
+ USB_VENDOR_DLINK3,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_VIALABS,
+ "VIA Labs",
+ },
+ {
+ USB_VENDOR_MOTOROLA2,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_ARDUINO,
+ "Arduino SA",
+ },
+ {
+ USB_VENDOR_TPLINK,
+ "TP-Link",
+ },
+ {
+ USB_VENDOR_WMR,
+ "West Mountain Radio",
+ },
+ {
+ USB_VENDOR_TRIPPLITE,
+ "Tripp-Lite",
+ },
+ {
+ USB_VENDOR_ARUBA,
+ "Aruba",
+ },
+ {
+ USB_VENDOR_XIAOMI,
+ "Xiaomi",
+ },
+ {
+ USB_VENDOR_NHJ,
+ "NHJ",
+ },
+ {
+ USB_VENDOR_ASUSTEK,
+ "ASUSTeK Computer",
+ },
+ {
+ USB_VENDOR_PLANEX,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS,
+ "Link Instruments",
+ },
+ {
+ USB_VENDOR_AEI,
+ "AEI",
+ },
+ {
+ USB_VENDOR_PQI,
+ "PQI",
+ },
+ {
+ USB_VENDOR_DAISY,
+ "Daisy Technology",
+ },
+ {
+ USB_VENDOR_NI,
+ "National Instruments",
+ },
+ {
+ USB_VENDOR_MICRONET,
+ "Micronet Communications",
+ },
+ {
+ USB_VENDOR_IODATA2,
+ "I-O Data",
+ },
+ {
+ USB_VENDOR_IRIVER,
+ "iRiver",
+ },
+ {
+ USB_VENDOR_DELL,
+ "Dell",
+ },
+ {
+ USB_VENDOR_WCH,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_ACEECA,
+ "Aceeca",
+ },
+ {
+ USB_VENDOR_FEIXUN,
+ "FeiXun Communication",
+ },
+ {
+ USB_VENDOR_NETWEEN,
+ "NetweeN",
+ },
+ {
+ USB_VENDOR_PAPOUCH,
+ "Papouch s.r.o.",
+ },
+ {
+ USB_VENDOR_AVERATEC,
+ "Averatec",
+ },
+ {
+ USB_VENDOR_SWEEX,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_PROLIFIC2,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_ONSPEC2,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_ACERLABS2,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ZINWELL,
+ "Zinwell",
+ },
+ {
+ USB_VENDOR_SITECOM,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_ARKMICRO,
+ "Arkmicro",
+ },
+ {
+ USB_VENDOR_3COM2,
+ "3Com",
+ },
+ {
+ USB_VENDOR_EDIMAX,
+ "EDIMAX",
+ },
+ {
+ USB_VENDOR_INTEL,
+ "Intel",
+ },
+ {
+ USB_VENDOR_INTEL2,
+ "Intel",
+ },
+ {
+ USB_VENDOR_ALLWIN,
+ "ALLWIN Tech",
+ },
+ {
+ USB_VENDOR_SITECOM2,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_MOSCHIP,
+ "MosChip",
+ },
+ {
+ USB_VENDOR_NETGEAR4,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_MARVELL,
+ "Marvell",
+ },
+ {
+ USB_VENDOR_3COM3,
+ "3Com",
+ },
+ {
+ USB_VENDOR_CACE,
+ "CACE Technologies",
+ },
+ {
+ USB_VENDOR_COMPARE,
+ "Compare",
+ },
+ {
+ USB_VENDOR_DATAAPEX,
+ "DataApex",
+ },
+ {
+ USB_VENDOR_EVOLUTION,
+ "Evolution Robotics",
+ },
+ {
+ USB_VENDOR_EMPIA,
+ "eMPIA Technology",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test010.right.txt b/test/test010.right.txt
new file mode 100644
index 000000000000..46844afad663
--- /dev/null
+++ b/test/test010.right.txt
@@ -0,0 +1,14201 @@
+/* $OpenBSD$ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+/*
+ * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Descriptions of known vendors and devices ("products").
+ */
+struct usb_known_vendor {
+ u_int16_t vendor;
+ char *vendorname;
+};
+
+struct usb_known_product {
+ u_int16_t vendor;
+ u_int16_t product;
+ char *productname;
+};
+
+const struct usb_known_product usb_known_products[] = {
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_HOMECONN,
+ "HomeConnect",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CREB96,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C19250,
+ "3C19250 Ethernet",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CRSHEW696,
+ "3CRSHEW696",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460,
+ "HomeConnect 3C460",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460B,
+ "HomeConnect 3C460B",
+ },
+ {
+ USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075,
+ "3CRUSB10075",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_OFFICECONN,
+ "3Com OfficeConnect Analog Modem",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USRISDN,
+ "3Com U.S. Robotics Pro ISDN TA",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_HOMECONN,
+ "3Com HomeConnect",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG,
+ "Stereo Plug Cable",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1,
+ "XX1",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2,
+ "XX2",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_URE450,
+ "URE450 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000,
+ "UFE1000 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4,
+ "XX4",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5,
+ "XX5",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6,
+ "XX6",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7,
+ "XX7",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_LCS8138TX,
+ "LCS-8138TX",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8,
+ "XX8",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9,
+ "XX9",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UF200,
+ "UF200 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54,
+ "WL54",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10,
+ "XX10",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_BWU613,
+ "BWU613",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_HWU54DM,
+ "HWU54DM",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WUG2700,
+ "WUG2700",
+ },
+ {
+ USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC,
+ "USB320-EC Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_2664W,
+ "2664W",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_111,
+ "T-Sinus 111 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG,
+ "SMCWUSB-G",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2_NF,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001,
+ "SpeedStream Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN4501H_LF_IR,
+ "WN4501H-LF-IR",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WUS201,
+ "WUS-201",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN7512,
+ "WN7512",
+ },
+ {
+ USB_VENDOR_ACEECA, USB_PRODUCT_ACEECA_MEZ1000,
+ "MEZ1000 RDA",
+ },
+ {
+ USB_VENDOR_ACERCM, USB_PRODUCT_ACERCM_EP1427X2,
+ "EP-1427X-2 Ethernet",
+ },
+ {
+ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632,
+ "USB 2.0 Data Link",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_C310U,
+ "Acerscan C310U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_320U,
+ "Acerscan 320U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_640U,
+ "Acerscan 640U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_620U,
+ "Acerscan 620U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ATAPI,
+ "ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL300,
+ "AWL300",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL400,
+ "AWL400",
+ },
+ {
+ USB_VENDOR_ACERW, USB_PRODUCT_ACERW_WARPLINK,
+ "Warplink",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25,
+ "Prism2.5 WLAN",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25A,
+ "Prism2.5 WLAN A",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_FREELAN,
+ "ROPEX FreeLan 802.11b",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_802UAT1,
+ "802UAT1",
+ },
+ {
+ USB_VENDOR_ACTISYS, USB_PRODUCT_ACTISYS_IR2000U,
+ "ACT-IR2000U FIR",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD,
+ "I/O Board",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD_FW1,
+ "I/O Board, rev. 1",
+ },
+ {
+ USB_VENDOR_ADAPTEC, USB_PRODUCT_ADAPTEC_AWN8020,
+ "AWN-8020 WLAN",
+ },
+ {
+ USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_205,
+ "Cable 205",
+ },
+ {
+ USB_VENDOR_ADDTRON, USB_PRODUCT_ADDTRON_AWU120,
+ "AWU-120",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_4,
+ "AN986A Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS,
+ "AN986 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII,
+ "AN8511 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_2,
+ "AN8513 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_3,
+ "AN8515 Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BT,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BTX,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_AEI, USB_PRODUCT_AEI_FASTETHERNET,
+ "Fast Ethernet",
+ },
+ {
+ USB_VENDOR_AGATE, USB_PRODUCT_AGATE_QDRIVE,
+ "Q-Drive",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1236U,
+ "SnapScan 1236U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANTOUCH,
+ "SnapScan Touch",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U2,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE40,
+ "SnapScan e40",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE50,
+ "SnapScan e50",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE20,
+ "SnapScan e20",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE25,
+ "SnapScan e25",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE26,
+ "SnapScan e26",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE52,
+ "SnapScan e52",
+ },
+ {
+ USB_VENDOR_AINCOMM, USB_PRODUCT_AINCOMM_AWU2000B,
+ "AWU2000B",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220,
+ "CDMA Wireless EVDO card",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_AIRCARD_313U,
+ "Aircard 313U",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AKS, USB_PRODUCT_AKS_USBHASP,
+ "USB-HASP 0.06",
+ },
+ {
+ USB_VENDOR_ALCATEL, USB_PRODUCT_ALCATEL_OT535,
+ "One Touch 535/735",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST120G,
+ "SpeedTouch 120g",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST121G,
+ "SpeedTouch 121g",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_MA_KBD_HUB,
+ "MacAlly Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU9814,
+ "AU9814 Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_SM_KBD,
+ "MicroConnectors/StrongMan",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_NEC_KBD_HUB,
+ "NEC Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB,
+ "Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN, USB_PRODUCT_ALLIEDTELESYN_ATUSB100,
+ "AT-USB100",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70,
+ "ADA70 Speakers",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495,
+ "ASC495 Speakers",
+ },
+ {
+ USB_VENDOR_ALTI2, USB_PRODUCT_ALTI2_NEPTUNE3,
+ "Neptune 3",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250,
+ "NTL 250 cable modem",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GO,
+ "CG-WLUSB2GO",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR,
+ "CG-WLUSB2GNR",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI_NF,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII_NF,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC_NF,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII_NF,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICE,
+ "gnICE",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICEPLUS,
+ "gnICE+",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZUSB,
+ "EZUSB",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK,
+ "EZLINK",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_A2502,
+ "NTT DoCoMo A2502",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100H,
+ "ADU-E100H",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A,
+ "ADU-500A",
+ },
+ {
+ USB_VENDOR_AOX, USB_PRODUCT_AOX_USB101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS5G,
+ "5G UPS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_OPTMOUSE,
+ "Optical mouse",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH_HCI,
+ "HID-proxy",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_SPEAKERS,
+ "Speakers",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
+ "iPhone",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH,
+ "iPod Touch",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3G,
+ "iPhone 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_2G,
+ "iPod Touch 2G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3GS,
+ "iPhone 3GS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_GSM,
+ "iPhone 4 GSM",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_3G,
+ "iPod Touch 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD,
+ "iPad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_CDMA,
+ "iPhone 4 CDMA",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_4G,
+ "iPod Touch 4G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD2,
+ "iPad 2",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4S,
+ "iPhone 4S",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_6,
+ "iPhone 6",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ETHERNET,
+ "Ethernet A1277",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT_1,
+ "iSight",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT,
+ "iSight",
+ },
+ {
+ USB_VENDOR_ARANEUS, USB_PRODUCT_ARANEUS_ALEA,
+ "True Random Number Generator",
+ },
+ {
+ USB_VENDOR_ARDUINO, USB_PRODUCT_ARDUINO_LEONARDO,
+ "Leonardo",
+ },
+ {
+ USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116,
+ "ARK3116 Serial",
+ },
+ {
+ USB_VENDOR_ARUBA, USB_PRODUCT_ARUBA_CP210X,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO230,
+ "PENTAX Optio230",
+ },
+ {
+ USB_VENDOR_ASANTE, USB_PRODUCT_ASANTE_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178,
+ "AX88178",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772,
+ "AX88772",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B_1,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013I,
+ "WLL013 (Intersil)",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_VOYAGER1010,
+ "Voyager 1010",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G,
+ "WL-159g",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI,
+ "A9T wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P5B_WIFI,
+ "P5B wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN13,
+ "USB-N13",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN10,
+ "USB-N10",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN53,
+ "USB-N53",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN66,
+ "USB-N66",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_MYPAL_A730,
+ "MyPal A730",
+ },
+ {
+ USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11,
+ "USB-N11",
+ },
+ {
+ USB_VENDOR_ASUSTEK, USB_PRODUCT_ASUSTEK_WL140,
+ "WL-140",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC1284,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC10T,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC110T,
+ "UC-110T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A,
+ "UC232A Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T,
+ "UC210T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC2324,
+ "UC2324 Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_DSB650C,
+ "DSB-650C",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_TG121N,
+ "TG121N",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN821NV2,
+ "WN821NV2",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_3CRUSBN275,
+ "3CRUSBN275",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN612,
+ "WN612",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR3011,
+ "AR3011",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9170,
+ "AR9170",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATI2, USB_PRODUCT_ATI2_205,
+ "USB Cable 205",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_STK541,
+ "STK541 Zigbee",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_UHB124,
+ "UHB124 hub",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_WN210,
+ "W-Buddie WN210",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_DWL900AP,
+ "DWL-900AP Wireless access point",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT91_CDC_ACM,
+ "AT91 CDC ACM",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I1,
+ "AT76C503 (Intersil 3861 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I2,
+ "AT76C503 (Intersil 3863 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503RFMD,
+ "AT76C503 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD,
+ "AT76C505 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD2958,
+ "AT76C505 (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505A,
+ "AT76C505A (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505AS,
+ "AT76C505AS (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA, USB_PRODUCT_AUDIOTECHNICA_ATCHA4USB,
+ "ATC-HA4USB USB headphone",
+ },
+ {
+ USB_VENDOR_AVAGO, USB_PRODUCT_AVAGO_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
+ "USB Audio Speaker",
+ },
+ {
+ USB_VENDOR_AVERATEC, USB_PRODUCT_AVERATEC_USBWLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AVISION, USB_PRODUCT_AVISION_1200U,
+ "1200U",
+ },
+ {
+ USB_VENDOR_AVM, USB_PRODUCT_AVM_FRITZWLAN,
+ "FRITZ!WLAN N",
+ },
+ {
+ USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM,
+ "Data Modem",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_4,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_5,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_4,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_5,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_6,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_2,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER,
+ "Card reader",
+ },
+ {
+ USB_VENDOR_BAYER, USB_PRODUCT_BAYER_CONTOUR,
+ "Ascensia Contour",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOTL4,
+ "USOTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USTL4,
+ "USTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2,
+ "USO9ML2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4,
+ "USOPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USPTL4,
+ "USPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR2,
+ "USO9ML2DR-2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR,
+ "USO9ML2DR RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR2,
+ "USOPTL4DR-2 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR,
+ "USOPTL4DR RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F2W,
+ "485USB9F-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F4W,
+ "485USB9F-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_232USB9M,
+ "232USB9M RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_2W,
+ "485USBTB-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_4W,
+ "485USBTB-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL5USB9M,
+ "TTL5USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL3USB9M,
+ "TTL3USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_ZZ_PROG1,
+ "ZZ Programmer",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D6050,
+ "F5D6050 802.11b Wireless adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT001V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F8T003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103,
+ "F5U103 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U109,
+ "F5U109 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_SCSI,
+ "SCSI",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5050,
+ "F5D5050 Ethernet",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U234,
+ "F5U234 USB 2.0 4-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U237,
+ "F5U237 USB 2.0 7-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U257,
+ "F5U257 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6H375,
+ "F6H375 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U409,
+ "F5U409 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR,
+ "F6C550-AVR UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1250EITWRK,
+ "F6C1250EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1500EITWRK,
+ "F6C1500EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C900,
+ "F6C900 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C100,
+ "F6C100 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C120,
+ "F6C120 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C800,
+ "F6C800 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1004V1,
+ "F9L1004V1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1100,
+ "F6C1100/1200 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1103,
+ "F9L1103 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120,
+ "F5U120-PC Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D2102,
+ "F7D2102",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055,
+ "F5D5055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050,
+ "F5D7050 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050A,
+ "F5D705A 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050C,
+ "F5D705C 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050E,
+ "F5D705E 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3,
+ "F5D8053 v3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055,
+ "F5D8055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055V2,
+ "F5D8055 v2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050V3,
+ "F5D9050 ver 3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050C,
+ "F5D9050C",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1,
+ "F6D4050 ver 1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V2,
+ "F6D4050 ver 2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D1101V2,
+ "F7D1101 v2",
+ },
+ {
+ USB_VENDOR_BELKIN2, USB_PRODUCT_BELKIN2_F5U002,
+ "F5U002 Parallel",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_BWIFI_USB54AR,
+ "BWIFI-USB54AR",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100,
+ "USB100N 10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100,
+ "USB100LP",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100,
+ "USB100EL",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100,
+ "USBE100",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB2AR,
+ "USB2AR Ethernet",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCMFW,
+ "BCMFW",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033,
+ "BCM2033",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033NF,
+ "BCM2033 (no fw)",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43236,
+ "BCM43236",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43143,
+ "BCM43143",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43242,
+ "BCM43242",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43569,
+ "BCM43569",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_HL1050,
+ "HL-1050 laser printer",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_MFC210C,
+ "MFC 210C",
+ },
+ {
+ USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932,
+ "Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_BWCT, USB_PRODUCT_BWCT_6CHCONSER,
+ "6ch ConSer",
+ },
+ {
+ USB_VENDOR_CACE, USB_PRODUCT_CACE_AIRPCAPNX,
+ "AirPcap Nx",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N656U,
+ "CANOSCAN N656U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1220U,
+ "CANOSCAN N1220U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N670U,
+ "CANOSCAN N670U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1240U,
+ "CANOSCAN N1240U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_LIDE60,
+ "CANOSCAN LiDE60",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S10,
+ "PowerShot S10",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S20,
+ "PowerShot S20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_US,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_EU,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_G1,
+ "PowerShot G1",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A20,
+ "PowerShot A20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A540,
+ "PowerShot A540",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_SX100,
+ "PowerShot SX100",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_QV,
+ "QV",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300,
+ "BE-300 PDA",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_NAMELAND,
+ "CASIO Nameland EZ-USB",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE,
+ "Netmate Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE2,
+ "Netmate2 Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_CHIEF,
+ "USB Chief Bus & Protocol Analyzer",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_ANDROMEDA,
+ "Andromeda hub",
+ },
+ {
+ USB_VENDOR_CCYU, USB_PRODUCT_CCYU_EASYDISK,
+ "EasyDisk Portable",
+ },
+ {
+ USB_VENDOR_CHENSOURCE, USB_PRODUCT_CHENSOURCE_CM12402,
+ "CM12402 Eagle IR Cam",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000KBD,
+ "My3000 keyboard",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000HUB,
+ "My3000 hub",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_CYPRESS,
+ "Cypress",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_KB8933,
+ "KB-8933 keyboard",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_CAMERA,
+ "Integrated Camera",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_1,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_2,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_3,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_4,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_5,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_6,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROTHROTTLE,
+ "Pro Throttle",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROPEDALS,
+ "Pro Pedals",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FIGHTERSTICK,
+ "Fighterstick",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FLIGHTYOKE,
+ "Flight Sim Yoke",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GV2,
+ "WUSB54G v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54AG,
+ "WUSB54AG",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54G,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GP,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_USB200MV2,
+ "USB200M v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_HU200TS,
+ "HU200-TS",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GC,
+ "WUSB54GC",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GR,
+ "WUSB54GR",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G,
+ "WUSBF54G",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB200,
+ "WUSB200",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AE1000,
+ "AE1000",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AM10,
+ "AM10",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2, USB_PRODUCT_CISCOLINKSYS2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3, USB_PRODUCT_CISCOLINKSYS3_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_560884,
+ "560884 C-Bus Switch",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PACA,
+ "5500PACA C-Bus Controller",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5800PC,
+ "5800PC C-Bus Wireless",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PCU,
+ "5500PCU C-Bus",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5000CT2,
+ "5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_C5000CT2,
+ "C5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_L51XX,
+ "L51xx C-Bus Dimmer",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU510,
+ "CDMA Technologies USB modem",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CM5100P,
+ "CM-5100P EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CCU550,
+ "CCU-550 EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU550PRO,
+ "CNU-550pro EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628,
+ "CGU-628",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU680,
+ "CNU-680",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628_DISK,
+ "CGU-628 disk mode",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC,
+ "iPAQ PocketPC",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_A1500,
+ "A1500",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQWLAN,
+ "iPAQ WLAN",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W100,
+ "W100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W200,
+ "WLAN MultiPort W200",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_PJB100,
+ "Personal Jukebox PJB100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX,
+ "iPAQ Linux",
+ },
+ {
+ USB_VENDOR_COMPARE, USB_PRODUCT_COMPARE_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_C11U,
+ "C11U",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_WL210,
+ "WL-210",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU,
+ "C54RU WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU2,
+ "C54RU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2573,
+ "RT2573M",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61,
+ "VIGORN61",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA, USB_PRODUCT_CONCORDCAMERA_EYE_Q_3X,
+ "Eye Q 3x",
+ },
+ {
+ USB_VENDOR_CONNECTIX, USB_PRODUCT_CONNECTIX_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_ETHER_USB_T,
+ "Ether USB-T",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX,
+ "FEther USB-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLAN_USB_USB_11,
+ "WirelessLAN USB-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS,
+ "FEther USB-TXS",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLANUSB,
+ "Wireless LAN Stick-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB2_TX,
+ "FEther USB2-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_KEY,
+ "ULUSB-11 Key",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GL,
+ "CG-WLUSB2GL",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GPX,
+ "CG-WLUSB2GPX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM,
+ "CG-WLUSB300GNM",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300N,
+ "CG-WLUSB300N",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_STICK,
+ "WLAN USB Stick 11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC,
+ "FEther USB-TXC",
+ },
+ {
+ USB_VENDOR_CORSAIR, USB_PRODUCT_CORSAIR_CP210X,
+ "CP210X",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_II,
+ "Nomad II",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_EMU0202,
+ "E-Mu 0202",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_IIMG,
+ "Nomad II MG",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD,
+ "Nomad",
+ },
+ {
+ USB_VENDOR_CREATIVE2, USB_PRODUCT_CREATIVE2_VOIP_BLASTER,
+ "Voip Blaster",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUECORE,
+ "BlueCore",
+ },
+ {
+ USB_VENDOR_CTC, USB_PRODUCT_CTC_CW6622,
+ "CW6622",
+ },
+ {
+ USB_VENDOR_CTX, USB_PRODUCT_CTX_EX1300,
+ "Ex1300 hub",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_1500,
+ "1500 UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_OR2200,
+ "OR2200 UPS",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_GIGASET108,
+ "Siemens Gigaset 108",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB,
+ "TG54USB",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_MOUSE,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_THERMO,
+ "thermometer",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_KBDHUB,
+ "Keyboard/Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO,
+ "FM Radio",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_USBRS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_HUB2,
+ "USB2 Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_LPRDK,
+ "CY4636 LP RDK Bridge",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD,
+ "Sispm - old version",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM,
+ "Sispm",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH,
+ "Sispm - flash",
+ },
+ {
+ USB_VENDOR_DAISY, USB_PRODUCT_DAISY_DMC,
+ "PhotoClip",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_USB_FOB_IBUTTON,
+ "USB-FOB/iBUTTON",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,
+ "J-6502 speakers",
+ },
+ {
+ USB_VENDOR_DATAAPEX, USB_PRODUCT_DATAAPEX_MULTICOM,
+ "MultiCom",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_WK668,
+ "HenTong WK-668",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_AXIM,
+ "Axim X51v",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BC02,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_TM1180,
+ "TrueMobile 1180 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BLUETOOTH350,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_W5500,
+ "W5500 HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_U740,
+ "Dell U740 CDMA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_EU870D,
+ "EU870D HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_DW700,
+ "DW700 GPS",
+ },
+ {
+ USB_VENDOR_DELL2, USB_PRODUCT_DELL2_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMUSB,
+ "Earthmate GPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMLT20,
+ "Earthmate LT20",
+ },
+ {
+ USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB,
+ "Rio 500",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRAEXPRESS56K,
+ "Supra Express 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRA2890,
+ "SupraMax 2890 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB,
+ "Rio 600",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB,
+ "Rio 800",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_PSAPLAY120,
+ "Nike psa[play 120",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL200U,
+ "WL-200U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CHUSB611G,
+ "CHUSB 611G",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL240U,
+ "WL-240U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_XH1153,
+ "XH1153 802.11b",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CWD854F,
+ "C-Net CWD-854 rev F",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT2,
+ "AccelePort 2",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT4,
+ "AccelePort 4",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT8,
+ "AccelePort 8",
+ },
+ {
+ USB_VENDOR_DIGIANSWER, USB_PRODUCT_DIGIANSWER_ZIGBEE802154,
+ "ZigBee",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM, USB_PRODUCT_DIGITALSTREAM_PS2,
+ "PS/2 Active",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_GUC2020,
+ "IOGEAR DVI GUC2020",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LD220,
+ "Samsung LD220",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_POLARIS2,
+ "Polaris2 USB dock",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VCUD60,
+ "Rextron DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_CONV,
+ "StarTech CONV-USB2DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_DLDVI,
+ "DisplayLink DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VGA10,
+ "CMP-USBVGA10",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_WSDVI,
+ "WS Tech DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_EC008,
+ "EasyCAP008 DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD4300U,
+ "LCD-4300U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD8000U,
+ "LCD-8000U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_HPDOCK,
+ "HP USB Docking",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NL571,
+ "HP USB DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_M01061,
+ "Lenovo DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NBDOCK,
+ "VideoHome NBdock1920",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_SWDVI,
+ "SUNWEIT DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LUM70,
+ "Lilliput UM-70",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LT1421,
+ "Lenovo ThinkVision LT1421",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_UM7X0,
+ "nanovision MiMo",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100C1,
+ "DUB-E100 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120E,
+ "DWL-120 rev E",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130C,
+ "DWA-130 rev C",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_4,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131B,
+ "DWA-131 rev B",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125D1,
+ "DWA-125 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA123D1,
+ "DWA-123 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA137A1,
+ "DWA-137 rev A1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131E1,
+ "DWA-131 rev E1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA182D1,
+ "DWA-182 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA171C1,
+ "DWA-171 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL122,
+ "DWL-122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG120,
+ "DWL-G120",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120F,
+ "DWL-120 rev F",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG122A2,
+ "DWL-G122 rev A2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132_NF,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132_NF,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122_NF,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100B1,
+ "DUB-E100 rev B1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140B3,
+ "DWA-140 rev B3",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA160B2,
+ "DWA-160 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA127,
+ "DWA-127",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125B2,
+ "DWA-125 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA162,
+ "DWA-162 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140D1,
+ "DWA-140 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130F1,
+ "DWA-130 rev F1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUB1312,
+ "DUB-1312",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA131A1,
+ "DWA-131 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340_NF,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A2,
+ "DWA-160 A2",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130D1,
+ "DWA-130 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWLG122C1,
+ "DWL-G122 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA1340,
+ "WUA-1340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA111,
+ "DWA-111",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA110,
+ "DWA-110",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A1,
+ "DWA-160 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130,
+ "DWA-130",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK3, USB_PRODUCT_DLINK3_KVM221,
+ "KVM-221",
+ },
+ {
+ USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0,
+ "Storage Adapter",
+ },
+ {
+ USB_VENDOR_DOMAIN, USB_PRODUCT_DOMAIN_ROCKCHIP,
+ "RockChip Media Player",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550,
+ "Vigor550",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR600,
+ "Vigor600",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY, USB_PRODUCT_DREAMCHEEKY_ROCKETBABY,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_ULMB1,
+ "USB LED Message Board v1.0",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_STB,
+ "Sensor Terminal",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_WHT,
+ "Wireless Terminal",
+ },
+ {
+ USB_VENDOR_DVICO, USB_PRODUCT_DVICO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANT2USB,
+ "ANT2USB",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD2,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSB2,
+ "ANTUSB-2 Stick",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSBM,
+ "ANTUSB-m Stick",
+ },
+ {
+ USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK,
+ "Flash Disk",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7318,
+ "EW-7318",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7618,
+ "EW-7618",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717,
+ "EW-7717",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718,
+ "EW-7718",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7722UTN,
+ "EW-7722UTn",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7811UN,
+ "EW-7811Un",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7611ULB,
+ "EW-7611ULB",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7822ULC,
+ "EW-7822ULC",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL2,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX2, USB_PRODUCT_EGALAX2_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
+ "Diva 852 ISDN TA",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_MONITOR,
+ "monitor",
+ },
+ {
+ USB_VENDOR_ELAN, USB_PRODUCT_ELAN_BARCODE,
+ "Barcode Scanner",
+ },
+ {
+ USB_VENDOR_ELCON, USB_PRODUCT_ELCON_PLAN,
+ "Goldpfeil P-LAN",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_MOUSE29UO,
+ "29UO",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBLTX,
+ "LD-USBL/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_WDC150SU2M,
+ "WDC-150SU2M",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSB20,
+ "LD-USB20",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT,
+ "UC-SGT Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT0,
+ "UC-SGT0 Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELEKTOR, USB_PRODUCT_ELEKTOR_FT323R,
+ "FT323R",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_MODEM1,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET,
+ "Microlink USB2Ethernet",
+ },
+ {
+ USB_VENDOR_ELV, USB_PRODUCT_ELV_USBI2C,
+ "USB-I2C",
+ },
+ {
+ USB_VENDOR_EMPIA, USB_PRODUCT_EMPIA_EEEPC701_VIDEO,
+ "EeePC701 camera",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S,
+ "1S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2S,
+ "2S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S25,
+ "1S25 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_4S,
+ "4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_E45,
+ "E45 Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_CENTRONICS,
+ "Centronics",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S9,
+ "1S9 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_EZUSB,
+ "EZ-USB",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2U4S,
+ "2U4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER1,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER2,
+ "ISD Smart Cable for Mac",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER3,
+ "ISD Smart Cable",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER5,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_636,
+ "Perfection 636U / 636Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_610,
+ "Perfection 610",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1200,
+ "Perfection 1200U / 1200Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1600,
+ "Expression 1600",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1640,
+ "Perfection 1640SU",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1240,
+ "Perfection 1240U / 1240Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_640U,
+ "Perfection 640U",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1650,
+ "Perfection 1650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9700F,
+ "GT-9700F",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_2400,
+ "Perfection 2400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1260,
+ "Perfection 1260",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1660,
+ "Perfection 1660",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1670,
+ "Perfection 1670",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX5400,
+ "CX5400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX3650,
+ "Stylus CX3650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX3800,
+ "Stylus DX3800",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX5000,
+ "Stylus DX5000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX6000,
+ "Stylus DX6000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX4000,
+ "Stylus DX4000",
+ },
+ {
+ USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM,
+ "Serial",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_ER1,
+ "ER1 Control Module",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_1,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_2,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EXAR, USB_PRODUCT_EXAR_XR21V1410,
+ "XR21V1410",
+ },
+ {
+ USB_VENDOR_EXTENDED, USB_PRODUCT_EXTENDED_XTNDACCESS,
+ "XTNDAccess IrDA",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST,
+ "Twist",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA,
+ "Samba",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CPX_USB,
+ "CPX-USB",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CMSP,
+ "CMSP",
+ },
+ {
+ USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U,
+ "WL-430U",
+ },
+ {
+ USB_VENDOR_FOSSIL, USB_PRODUCT_FOSSIL_WRISTPDA,
+ "Wrist PDA",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_TCOM_TC_300,
+ "T-Com TC 300",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_PIRELLI_DP_L10,
+ "Pirelli DP-L10",
+ },
+ {
+ USB_VENDOR_FREECOM, USB_PRODUCT_FREECOM_DVD,
+ "Connector for DVD drive",
+ },
+ {
+ USB_VENDOR_FSC, USB_PRODUCT_FSC_E5400,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM4,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C,
+ "2232C Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT4232H,
+ "FT4232H",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FTX,
+ "FTX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PS2KBDMS,
+ "PS/2 Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_2,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENRD,
+ "OpenRD JTAGKey",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANDAPTER,
+ "CANdapter",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_NXTCAM,
+ "Mindstorms NXTCam",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OOCDLINK,
+ "OOCDlink",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_DEVEL,
+ "LM3S Devel",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_EVAL,
+ "LM3S Eval",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TURTELIZER_JTAG,
+ "JTAG/RS-232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC,
+ "OpenDCC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_SNIFFER,
+ "OpenDCC Sniffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_THROTTLE,
+ "OpenDCC Throttle",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_GATEWAY,
+ "OpenDCC Gateway",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LOCOBUFFER,
+ "RR-CirKits LocoBuffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DMX4ALL,
+ "DMX4ALL DMX interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_1,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_2,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_3,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_4,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_5,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_6,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_7,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_8,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_1,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CHAMELEON,
+ "uChameleon",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13M,
+ "OpenPort 1.3 Mitsubishi",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13S,
+ "OpenPort 1.3 Subaru",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13U,
+ "OpenPort 1.3 Universal",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L,
+ "2232L Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_0,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_1,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_2,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_3,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_4,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_5,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_6,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_7,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS2,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GAMMASCOUT,
+ "Gamma Scout Online",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_JTAGCABLEII,
+ "Propox JTAG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_777,
+ "Westrex 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_8900F,
+ "Westrex 8900F",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACG_HFDUAL,
+ "HF Dual ISO Reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ARTEMIS,
+ "CCD camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16,
+ "ATK-16 Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HR,
+ "ATK-16HR Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16C,
+ "ATK-16C Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HRC,
+ "ATK-16HRC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16IC,
+ "ATK-16IC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USR,
+ "USR",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_MSM1,
+ "Mini-Sound-Modul",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_KL100,
+ "KL 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS888,
+ "WS 888",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TWS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FEM,
+ "Funk Energie Monitor",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_YEI_SC31,
+ "ServoCenter3.1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1300PC,
+ "FHZ 1300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS500,
+ "WS 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_HS485,
+ "RS-485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UMS100,
+ "UMS 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFD128,
+ "TFD 128",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FM3RX,
+ "FM3 RX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS777,
+ "WS 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1010PC,
+ "EM 1010 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CSI8,
+ "CSI 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1000DL,
+ "EM 1000 DL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCK100,
+ "PCK 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_RFP500,
+ "RFP 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FS20SIG,
+ "FS 20 SIG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UTP8,
+ "UTP 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS300PC,
+ "WS 300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS444PC,
+ "WS 444 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FISCO,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECO_PRO,
+ "EVER Eco Pro UPS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTROBOTS,
+ "Active Robots comms",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PYRAMID,
+ "Pyramid Display",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UNICOM,
+ "Unicom III",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EISCOU,
+ "Expert ISDN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UOPTBR,
+ "RS232 OptoBridge",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DCF,
+ "Expert mouseCLOCK USB II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MSF,
+ "Expert mouseCLOCK USB II MSF",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HBG,
+ "Expert mouseCLOCK USB II HBG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_9,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_A,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_B,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECLO_1WIRE,
+ "1-Wire",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TNCX,
+ "TNC-X packet-radio",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_VCP,
+ "VCP",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_D2XX,
+ "D2XX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_REU_TINY,
+ "RigExpert Tiny",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO870,
+ "HO870",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO820,
+ "HO820",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232BM,
+ "FT232BM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW,
+ "KW",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS,
+ "YS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6,
+ "Y6",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8,
+ "Y8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC,
+ "IC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9,
+ "DB9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9,
+ "Y9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DGQG,
+ "DGQG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DUSB,
+ "DUSB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD8,
+ "UAD 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD7,
+ "UAD 7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USI2,
+ "USI 2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_T1100,
+ "T 1100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCD200,
+ "PCD 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ULA200,
+ "ULA 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ALC8500,
+ "ALC 8500 Expert",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1000PC,
+ "FHZ 1000 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PERLE_UP,
+ "UltraPort",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SPROG_II,
+ "Sprog II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PIEGROUP_IR,
+ "Infrared",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTZWAVE,
+ "HomePro ZWave",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX,
+ "Coastal ChipWorks TNC-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_MASTER2,
+ "Master Development 2.0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OCEANIC,
+ "Oceanic instrument",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SUUNTO,
+ "Suunto Sports",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBUIRT,
+ "USB-UIRT",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBX_707,
+ "USBX-707",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU20,
+ "ICD-U20",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU40,
+ "ICD-U40",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_MACHX,
+ "MACH-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_LOAD_N_GO,
+ "LOAD N GO",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU64,
+ "ICDU64",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_PRIME8,
+ "PRIME8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ITM_TOUCH,
+ "ITM Touchscreen",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBSERIAL,
+ "Matrix Orbital USB Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MX200,
+ "Matrix Orbital MX200 Series LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MTXO,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK202_24,
+ "Matrix Orbital LK202-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK204_24,
+ "Matrix Orbital LK204-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_2,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_3,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_RELAIS,
+ "Relais",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TIRA1,
+ "Tira-1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PCDJ_DAC2,
+ "DAC-2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACCESSO,
+ "Accesso reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_THORLABS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UR100,
+ "UR 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CLI7000,
+ "CLI 7000",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UM100,
+ "UM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UO100,
+ "UO 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PPS7330,
+ "PPS 7330",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFM100,
+ "TFM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UDF77,
+ "UDF 77",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UIO88,
+ "UIO 88",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_R2000KU_RNG,
+ "R2000KU RNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_BCS_SE923,
+ "BCS SE923",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232RL,
+ "FT232RL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_632,
+ "Crystalfontz CFA-632 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_634,
+ "Crystalfontz CFA-634 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_547,
+ "Crystalfontz CFA-547 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_633,
+ "Crystalfontz CFA-633 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_631,
+ "Crystalfontz CFA-631 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_635,
+ "Crystalfontz CFA-635 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_640,
+ "Crystalfontz CFA-640 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_642,
+ "Crystalfontz CFA-642 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IRTRANS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_1,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_R200,
+ "R200-USB TRNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_3,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_4,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20,
+ "SEMC DSS-20 SyncStation",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANVIEW,
+ "CANview",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_VNHC,
+ "Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_AMC232,
+ "AMC-232USB0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TTUSB,
+ "TT-USB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_US485,
+ "US485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PICPRO,
+ "PIC-Programmer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PCMCIA,
+ "PCMCIA SRAM-cards reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PK1,
+ "Particel counter PK1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_RS232MON,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_APP70,
+ "APP 70 dust monitoring",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PEDO,
+ "IBS PEDO-Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANUSB,
+ "CANUSB",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100,
+ "Mass Storage",
+ },
+ {
+ USB_VENDOR_FUJITSU, USB_PRODUCT_FUJITSU_AH_F401U,
+ "AH-F401U Air H device",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD6,
+ "Type 6 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD7,
+ "Type 7 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_MOUSE,
+ "Type 6 Mouse",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5204PS,
+ "Smart Power Strip FX-5204PS",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5251WB,
+ "Base Station FX-5251WB",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_VIRTETH,
+ "Virtual Eth Device",
+ },
+ {
+ USB_VENDOR_FUSHICAI, USB_PRODUCT_FUSHICAI_USBTV007,
+ "Fushicai Audio-Video Grabber",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP60CSX,
+ "GPSmap 60Csx",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE3600,
+ "Ique 3600",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_DAKOTA20,
+ "Dakota 20",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP62S,
+ "GPSmap 62s",
+ },
+ {
+ USB_VENDOR_GCTSEMICON, USB_PRODUCT_GCTSEMICON_INSTALL,
+ "GDM720x MASS storage mode",
+ },
+ {
+ USB_VENDOR_GEMPLUS, USB_PRODUCT_GEMPLUS_PROXPU,
+ "Prox-PU/CU",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A,
+ "GL620USB-A GeneLink USB-USB Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GENELINK,
+ "GeneLink Host-Host Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL650,
+ "GL650 Hub",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB,
+ "GL641USB CompactFlash",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNBR402W,
+ "GN-BR402W",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWLBM101,
+ "GN-WLBM101",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWBKG,
+ "GN-WBKG",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB01GS,
+ "GN-WB01GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWI05GS,
+ "GN-WI05GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N,
+ "GN-WB31N",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L,
+ "GN-WB32L",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG_NF,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00,
+ "YP3X00 PDA",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS, USB_PRODUCT_GNOTOMETRICS_AURICAL,
+ "Aurical",
+ },
+ {
+ USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232,
+ "GoCOM232 Serial converter",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_GWUSB2E,
+ "GWUSB2E",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GRAVIS, USB_PRODUCT_GRAVIS_GAMEPADPRO,
+ "GamePad Pro",
+ },
+ {
+ USB_VENDOR_GREENHOUSE, USB_PRODUCT_GREENHOUSE_KANA21,
+ "CF-writer/MP3 Player",
+ },
+ {
+ USB_VENDOR_GRIFFIN, USB_PRODUCT_GRIFFIN_IMATE,
+ "iMate, ADB adapter",
+ },
+ {
+ USB_VENDOR_GUDE, USB_PRODUCT_GUDE_DCF,
+ "Expert mouseCLOCK USB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_DALEADER,
+ "DA Leader",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254,
+ "HWGUSB2-54 WLAN",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254LB,
+ "HWGUSB2-54-LB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254V2AP,
+ "HWGUSB2-54V2-AP",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNU300,
+ "HWNU-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUM300,
+ "HWNUm-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUN54,
+ "HWGUn-54",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUP150,
+ "HWNUP-150",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_GUNZE, USB_PRODUCT_GUNZE_TOUCHPANEL,
+ "Gunze USB Touch Panel",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGSM,
+ "FlashGate SmartMedia",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGCF,
+ "FlashGate CompactFlash",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FG,
+ "FlashGate",
+ },
+ {
+ USB_VENDOR_HAL, USB_PRODUCT_HAL_IMR001,
+ "Crossam2+USB IR commander",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR,
+ "Handspring Visor",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO,
+ "Handspring Treo",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO600,
+ "Handspring Treo 600",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE, USB_PRODUCT_HAUPPAUGE_WINTV_USB_FM,
+ "WinTV FM",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2,
+ "HWUN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWDN2,
+ "HWDN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_UF100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_HIROSE, USB_PRODUCT_HIROSE_USB100,
+ "USB-100",
+ },
+ {
+ USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DZMV100A,
+ "DVD-CAM DZ-MV100A Camcorder",
+ },
+ {
+ USB_VENDOR_HOLTEK, USB_PRODUCT_HOLTEK_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_895C,
+ "DeskJet 895C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4100C,
+ "Scanjet 4100C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20,
+ "Photosmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_880C,
+ "DeskJet 880C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4200C,
+ "ScanJet 4200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS,
+ "CD-Writer Plus",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_KBDHUB,
+ "Multimedia Keyboard Hub",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210W,
+ "HN210W",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HPX9GP,
+ "HP-x9G+",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6200C,
+ "ScanJet 6200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20B,
+ "PhotoSmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_815C,
+ "DeskJet 815C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3300C,
+ "ScanJet 3300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDW8200,
+ "CD-Writer Plus 8200e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1220C,
+ "DeskJet 1220C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_810C,
+ "DeskJet 810C/812C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4300C,
+ "Scanjet 4300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CD4E,
+ "CD-Writer+ CD-4e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_G85XI,
+ "OfficeJet G85xi",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1200,
+ "LaserJet 1200",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5200C,
+ "Scanjet 5200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_830C,
+ "DeskJet 830C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3400CSE,
+ "ScanJet 3400cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_885C,
+ "DeskJet 885C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1000,
+ "LaserJet 1000",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6300C,
+ "Scanjet 6300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_840C,
+ "DeskJet 840c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2200C,
+ "ScanJet 2200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5300C,
+ "Scanjet 5300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_816C,
+ "DeskJet 816C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_970CSE,
+ "Deskjet 970Cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5400C,
+ "Scanjet 5400C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2215,
+ "iPAQ 22xx/Jornada 548",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_959C,
+ "Deskjet 959C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_568J,
+ "Jornada 568",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_930C,
+ "DeskJet 930c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1005,
+ "LaserJet 1005",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P2000U,
+ "Inkjet P-2000U",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HS2300,
+ "HS2300",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750,
+ "T750 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1000,
+ "T1000 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1500,
+ "T1500 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_RT2200,
+ "R/T2200 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_R1500G2,
+ "R1500 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750G2,
+ "T750 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_640C,
+ "DeskJet 640c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1020,
+ "LaserJet 1020",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P1100,
+ "Photosmart P1100",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_LD220,
+ "LD220",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1018,
+ "LaserJet 1018",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210E,
+ "HN210E Ethernet",
+ },
+ {
+ USB_VENDOR_HP2, USB_PRODUCT_HP2_C500,
+ "PhotoSmart C500",
+ },
+ {
+ USB_VENDOR_HP3, USB_PRODUCT_HP3_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM,
+ "PPC6700 Modem",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE,
+ "SmartPhone",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_ANDROID,
+ "Android phone",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E618,
+ "HUAWEI Mobile E618",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_EM770W,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1750,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E180,
+ "HUAWEI Mobile E180",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E510,
+ "HUAWEI Mobile E510",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E181,
+ "HUAWEI Mobile E181",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1752,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E182,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3372,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E161,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765,
+ "HUAWEI Mobile K3765",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1820,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4511,
+ "HUAWEI Mobile Modem K4511",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4510,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772,
+ "HUAWEI Mobile K3772",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E353_INIT,
+ "HUAWEI Mobile E353 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E392_INIT,
+ "HUAWEI Mobile E392 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765_INIT,
+ "HUAWEI Mobile K3765 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772_INIT,
+ "HUAWEI Mobile K3772 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MU609,
+ "HUAWEI Mobile ME906",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S,
+ "HUAWEI Mobile E173s",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S_INIT,
+ "HUAWEI Mobile E173s Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E303,
+ "HUAWEI Mobile E303",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM, USB_PRODUCT_HUAWEI3COM_WUB320G,
+ "Aolynk WUB320g",
+ },
+ {
+ USB_VENDOR_HUMAX, USB_PRODUCT_HUMAX_PVRSMART,
+ "PVR-SMART",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_PC5740,
+ "PC5740 EVDO",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_UM175,
+ "UM175 EVDO",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTTRAVELMOUSE,
+ "Optical",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTWHEELMOUSE,
+ "Wheel",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_USBCDROMDRIVE,
+ "CD-ROM",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_THINKPADHUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_ID1,
+ "ID-1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C1,
+ "ID-RP2C service 1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C2,
+ "ID-RP2C service 2",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2D,
+ "ID-RP2D",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VT,
+ "ID-RP2V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VR,
+ "ID-RP2V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VT,
+ "ID-RP4000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VR,
+ "ID-RP4000V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VT,
+ "ID-RP2000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VR,
+ "ID-RP2000V service R",
+ },
+ {
+ USB_VENDOR_IDOWELL, USB_PRODUCT_IDOWELL_IDOWELL,
+ "UPS",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE, USB_PRODUCT_IDQUANTIQUE_QUANTISUSB,
+ "Quantis USB",
+ },
+ {
+ USB_VENDOR_IDTECH, USB_PRODUCT_IDTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_IIYAMA, USB_PRODUCT_IIYAMA_HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO,
+ "Flash Go!",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
+ "EdgePort/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT7,
+ "Hubport/7",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_RAPIDPORT4,
+ "Rapidport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4T,
+ "Edgeport/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2,
+ "Edgeport/2 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4I,
+ "Edgeport/4 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2I,
+ "Edgeport/2 RS422/RS485",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT4,
+ "Hubport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8HAND,
+ "Hand-built Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MULTIMODEM,
+ "MultiTech version of RP/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTPPORT,
+ "Edgeport/(4)21 Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT421,
+ "Edgeport/421 Hub+RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT21,
+ "Edgeport/21 RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8DC,
+ "1/2 Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8,
+ "Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2DIN,
+ "Edgeport/2 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4DIN,
+ "Edgeport/4 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT16DC,
+ "1/2 Edgeport/16",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTCOMP,
+ "Edgeport Compatible",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8I,
+ "Edgeport/8 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_WATCHPORTH,
+ "WatchPort/H",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MT4X56USB,
+ "OEM device",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_F5U002,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI,
+ "ATAPI",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2,
+ "USB2 Storage",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD110,
+ "IDE ISD110",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD105,
+ "IDE ISD105",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE,
+ "USB cable",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2,
+ "USB Storage Adapter V2",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_EASYPC_CAMERA,
+ "EasyPC",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_AP310,
+ "AP310 AnyPoint II",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_I2011B,
+ "Wireless 2011B",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD,
+ "82930 test board",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_1,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_2,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_3,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_5,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_7,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_4,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_6,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_8,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_IOBOARD,
+ "IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD2,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_2X,
+ "Prism2.x WLAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_VALUECAN,
+ "ValueCAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_NEOVI,
+ "NeoVI Blue",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSSMRW,
+ "USB-SSMRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSDRW,
+ "USB-SDRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETT,
+ "USB ET/T",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX,
+ "USB ET/TX",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTXS,
+ "USB ET/TX-S",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11A,
+ "USB WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11,
+ "USB Airport WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US_NF,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETXUS2,
+ "ETX-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETGUS2,
+ "ETG-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_FT232R,
+ "FT232R",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNGDNUS2,
+ "WN-GDN/US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNG150UM,
+ "WN-G150UM",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ,
+ "RSAQ1 Serial",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ5,
+ "RSAQ5 Serial",
+ },
+ {
+ USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC,
+ "USB2.0-SCSI Bridge USB2-SC",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100,
+ "Zip 100",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_CDRW,
+ "CDRW 9602",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX,
+ "iFP-1xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX,
+ "iFP-3xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_5XX,
+ "iFP-5xx",
+ },
+ {
+ USB_VENDOR_ISSC, USB_PRODUCT_ISSC_KYBT100,
+ "KY-BT100 Bluetooth",
+ },
+ {
+ USB_VENDOR_ITEGNO, USB_PRODUCT_ITEGNO_WM1080A,
+ "WM1080A",
+ },
+ {
+ USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B,
+ "PC-60B",
+ },
+ {
+ USB_VENDOR_JATON, USB_PRODUCT_JATON_EDA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_JENOPTIK, USB_PRODUCT_JENOPTIK_JD350,
+ "JD 350",
+ },
+ {
+ USB_VENDOR_JETI, USB_PRODUCT_JETI_SPC1201,
+ "SPECBOS 1201",
+ },
+ {
+ USB_VENDOR_JRC, USB_PRODUCT_JRC_AH_J3001V_J3002V,
+ "AirH\"PHONE AH-J3001V/J3002V",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_PRX1,
+ "MP-PRX1",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_XP7250_WL,
+ "MP-XP7250 Builtin WLAN",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_OPTICALEYE,
+ "Optical Eye/3-wire",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_MBUS_250D,
+ "M-Bus Master MultiPort 250D",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_MH4000P,
+ "MiniHub 4000P",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_KC180,
+ "KC-180 IrDA",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN, USB_PRODUCT_KEISOKUGIKEN_USBDAQ,
+ "HKS-0200 USBDAQ",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT,
+ "Orbit trackball",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_TURBOBALL,
+ "TurboBall",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT_MAC,
+ "Orbit trackball for Mac",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_BT_EDR,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_VIDEOCAM_VGA,
+ "VideoCAM VGA",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28_NF,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28X_NF,
+ "USA-28X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19_NF,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18_NF,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X_NF,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W_NF,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W_NF,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI_NF,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q_NF,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XXB,
+ "USA-28X/XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XB_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA,
+ "USA-28XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA_NF,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW_NF,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19HS,
+ "USA-19HS serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA10,
+ "UIA-10 remote control",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA11,
+ "UIA-11 remote control",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX,
+ "KNU101TX Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BT,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BTN,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_B1,
+ "Konverter for B1",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_KAAN,
+ "Konverter for KAAN",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC220,
+ "Digital Science DC220",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC260,
+ "Digital Science DC260",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC265,
+ "Digital Science DC265",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC290,
+ "Digital Science DC290",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC240,
+ "Digital Science DC240",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC280,
+ "Digital Science DC280",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DX4900,
+ "EasyShare DX4900",
+ },
+ {
+ USB_VENDOR_KONICA, USB_PRODUCT_KONICA_CAMERA,
+ "Camera",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE,
+ "Niche mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NETSCROLL,
+ "Genius NetScroll mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_FLIGHT2000,
+ "Flight 2000 joystick",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO,
+ "ColorPage Vivid-Pro",
+ },
+ {
+ USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V,
+ "AH-K3001V",
+ },
+ {
+ USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_KPC650,
+ "KPC650 EVDO",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD,
+ "Hard Disk",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_CDRW,
+ "CD R/W",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M121,
+ "Model 121",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M218A,
+ "Model 218A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M219,
+ "Model 219",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M233,
+ "Model 233",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M235,
+ "Model 235",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M335,
+ "Model 335",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M336,
+ "Model 336",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M350,
+ "Model 350",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M371,
+ "Model 371",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M411,
+ "Model 411",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M425,
+ "Model 425",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M455A,
+ "Model 455A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M475A,
+ "Model 475A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M465,
+ "Model 465",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M625A,
+ "Model 625A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M642A,
+ "Model 642A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M648,
+ "Model 648",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M737,
+ "Model 737",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M776,
+ "Model 776",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD, USB_PRODUCT_LARSENBRUSGAARD_ALTITRACK,
+ "AltiTrack",
+ },
+ {
+ USB_VENDOR_LEADTEK, USB_PRODUCT_LEADTEK_9531,
+ "9531 GPS",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_DOCK_ETHERNET,
+ "USB-C Dock Ethernet",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET,
+ "USB 2.0 Ethernet",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT,
+ "jumpSHOT CompactFlash",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_2662WAR,
+ "2662W-AR",
+ },
+ {
+ USB_VENDOR_LEXMARK, USB_PRODUCT_LEXMARK_S2450,
+ "Optra S 2450",
+ },
+ {
+ USB_VENDOR_LIEBERT, USB_PRODUCT_LIEBERT_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_LIEBERT2, USB_PRODUCT_LIEBERT2_PSA,
+ "PowerSure PSA UPS",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO19,
+ "Link Instruments MSO-19",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28_2,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_MAUSB2,
+ "Camedia MAUSB-2",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_HG20F9,
+ "HG20F9 Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T,
+ "USB10T Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX,
+ "USB100TX Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1,
+ "USB100H1 Ethernet/HPNA",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA,
+ "USB10TA Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11,
+ "WUSB11 802.11b",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11_25,
+ "WUSB11 802.11b v2.5",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB12_11,
+ "WUSB12 802.11b v1.1",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_NWU11B,
+ "NWU11B",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_USB200M,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V28,
+ "WUSB11 v2.8",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V30,
+ "WUSB11 v3.0",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_USB1000,
+ "USB1000",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100,
+ "WUSB100",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N,
+ "WUSB600N",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV2,
+ "WUSB54GC v2",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3,
+ "WUSB54GC v3",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2,
+ "WUSB600N v2",
+ },
+ {
+ USB_VENDOR_LITEON, USB_PRODUCT_LITEON_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LAN_GTJU2,
+ "LAN-GTJ/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANTX,
+ "LAN-TX",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2,
+ "LAN-W300N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW150NU2,
+ "LAN-W150N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2S,
+ "LAN-W300N/U2S",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M2452,
+ "M2452 keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M4848,
+ "M4848 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_PAGESCAN,
+ "PageScan",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMWEB,
+ "QuickCam Web",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC200,
+ "Webcam C200",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC250,
+ "Webcam C250",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC500,
+ "Webcam C500",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC210,
+ "Webcam C210",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC310,
+ "Webcam C310",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_HDPROC910,
+ "HD Pro Webcam C910",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC270,
+ "Webcam C270",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMEXP,
+ "QuickCam Express",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBDLX,
+ "QuickCam Notebook Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO3K,
+ "QuickCam Pro 3000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_1,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO4K,
+ "QuickCam Pro 4000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMZOOM,
+ "QuickCam Zoom",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_1,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_1,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_1,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_1,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_2,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMULTVIS,
+ "QuickCam Ultra Vision",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_2,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_2,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_2,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_2,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO9K,
+ "QuickCam Pro 9000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRONB,
+ "QuickCam Pro Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMDLX,
+ "QuickCam Communicate Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITAF,
+ "QuickCam Orbit AF",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMMP,
+ "QuickCam Communicate MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAME3500P,
+ "QuickCam E 3500 Plus",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMDLXNB,
+ "QuickCam Deluxe Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N43,
+ "N43",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N48,
+ "N48 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_MBA47,
+ "M-BA47 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMMOUSE,
+ "WingMan Gaming Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BD58,
+ "BD58 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN58A,
+ "iFeel Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMPAD,
+ "WingMan GamePad Extreme",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMRPAD,
+ "WingMan RumblePad",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMJOY,
+ "WingMan Force joystick",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMFFGP,
+ "WingMan Formula Force GP (GT-Force)",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_ITOUCH,
+ "iTouch Keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB13,
+ "USB-PS/2 Trackball",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB18,
+ "TrackMan Wheel",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RK53,
+ "Cordless mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RB6,
+ "Cordless keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_CDO,
+ "Cordless Desktop Optical",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO2,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LCMASS,
+ "Emobile D21LC Mass only mode",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LC,
+ "Emobile D21LC",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FU,
+ "IIJmobile 510FU",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FUMASS,
+ "IIJmobile 510FU Mass only mode",
+ },
+ {
+ USB_VENDOR_LUCENT, USB_PRODUCT_LUCENT_EVALKIT,
+ "USS-720 evaluation kit",
+ },
+ {
+ USB_VENDOR_MACALLY, USB_PRODUCT_MACALLY_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_MARVELL, USB_PRODUCT_MARVELL_SHEEVAPLUG,
+ "SheevaPlug",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0100,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0101,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0102,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0103,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0104,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0105,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0106,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0107,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0108,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0109,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0110,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0111,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0112,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0113,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0114,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0115,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0116,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0117,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0118,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0119,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0120,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0121,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0122,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0123,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0124,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0125,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0126,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0127,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0128,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0129,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0130,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0131,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0132,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0133,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0134,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0135,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0136,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0137,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0138,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0139,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0140,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0141,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0142,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0143,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0144,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0145,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0146,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0147,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0148,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0149,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0150,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0151,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0152,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0153,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0154,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0155,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0156,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0157,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0158,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0159,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0160,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0161,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0162,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0163,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0164,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0165,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0166,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0167,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0168,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0169,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0170,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0171,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0172,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0173,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0174,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0175,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0176,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0177,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0178,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0179,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0180,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0181,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0182,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0183,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0184,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0185,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0186,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0187,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0188,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0189,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0190,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0191,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0192,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0193,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0194,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0195,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0196,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0197,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0198,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0199,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01ED,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100,
+ "Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232,
+ "D-Link DU-H3SP BAY Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232,
+ "Sitecom RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_ML_4500,
+ "ML-4500",
+ },
+ {
+ USB_VENDOR_MDS, USB_PRODUCT_MDS_ISDBT,
+ "MDS ISDB-T tuner",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_WISPY,
+ "MetaGeek Wi-Spy",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_TELLSTICK,
+ "Telldus Tellstick",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_UMASS,
+ "USB MSM installer",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_DC_4COM,
+ "UMTS USB modem",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_CASHFLOW_SC,
+ "Cashflow-SC",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_S2000,
+ "Series 2000",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_USB5131,
+ "USB 5131 DCF77 - Radio Clock",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_DCF600USB,
+ "DCF600USB - Radio Clock",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5,
+ "LUA2-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX,
+ "LUA-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_S11,
+ "WLI-USB-S11",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_MCRSM2,
+ "MCR-SM2 SmartMedia",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG,
+ "USB-IDE Bridge: DUB-PxxG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KS11G,
+ "WLI-USB-KS11G wlan",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2KTX,
+ "LUA-U2-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KB11,
+ "WLI-USB-KB11 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54YB,
+ "WLI-U2-KG54-YB WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54,
+ "WLI-U2-KG54 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54AI,
+ "WLI-U2-KG54-AI WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2GT,
+ "LUA-U2-GT Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_NINWIFI,
+ "Nintendo Wi-Fi",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54_NF,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_PCOPRS1,
+ "PC-OP-RS1 RemoteStation",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HP,
+ "WLI-U2-SG54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_G54HP,
+ "WLI-U2-G54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L,
+ "WLI-U2-KG54L",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N,
+ "WLI-UC-G300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HG,
+ "WLI-U2-SG54HG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N,
+ "WLI-UC-AG300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNHP,
+ "WLI-UC-GNHP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN,
+ "WLI-UC-GN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG301N,
+ "WLI-UC-G301N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM,
+ "WLI-UC-GNM",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM2,
+ "WLI-UC-GNM2",
+ },
+ {
+ USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24I,
+ "Wi-Spy 2.4i",
+ },
+ {
+ USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
+ "Ricochet GS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD20X2,
+ "USB-LCD-20x2",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD256X64,
+ "USB-LCD-256x64",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_YUREX,
+ "YUREX",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_CAM_1,
+ "CAM_1",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPERHUM,
+ "TEMPerHUM sensor",
+ },
+ {
+ USB_VENDOR_MICRONET, USB_PRODUCT_MICRONET_SP128AR,
+ "SP128AR EtherFast",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEPREC,
+ "SideWinder Precision Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIMOUSE,
+ "IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_NATURALKBD,
+ "Natural",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_DDS80,
+ "Digital Sound System 80",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEWINDER,
+ "Sidewinder Precision Racing Wheel",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_TBEXPLORER,
+ "Trackball Explorer",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIEYE,
+ "IntelliEye mouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO2,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN510,
+ "MN510 Wireless",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_700WX,
+ "Palm 700WX",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN110,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
+ "Wireless Optical IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
+ "Wireless Optical Mouse (Model 1023)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK3,
+ "Wireless Optical Mouse 3000 (Model 1049)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
+ "Wireless Optical Mouse 3000 (Model 1056)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360_CONTROLLER,
+ "XBOX 360 Controller",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360,
+ "XBOX 360 WLAN",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLMOBILEMOUSE3500,
+ "Wireless Mobile Mouse 3500",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_LIFECAM,
+ "Microsoft LifeCam",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLARCMOUSE,
+ "Wireless Arc Mouse (Model 1350)",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25,
+ "SCSI-DB25",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIHD50,
+ "SCSI-HD50",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM,
+ "CameraMate",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_FREECOM,
+ "Freecom IDE",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_X6U,
+ "ScanMaker X6 - X6U",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_C6,
+ "Phantom C6",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX2,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL2,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6UL,
+ "ScanMaker V6UL",
+ },
+ {
+ USB_VENDOR_MIDIMAN, USB_PRODUCT_MIDIMAN_MIDISPORT2X2,
+ "Midisport 2x2",
+ },
+ {
+ USB_VENDOR_MINDSATWORK, USB_PRODUCT_MINDSATWORK_DW,
+ "Digital Wallet",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304,
+ "Dimage S304",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X,
+ "Dimage X",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGE7I,
+ "Dimage 7i",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1,
+ "Dimage A1",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_CDRRW,
+ "CD-R/RW Drive",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_FDD,
+ "FDD",
+ },
+ {
+ USB_VENDOR_MOBILEACTION, USB_PRODUCT_MOBILEACTION_MA620,
+ "MA-620 IrDA",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_ED200H,
+ "EasiDock 200 Serial",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EASIDOCK,
+ "EasiDock Ethernet",
+ },
+ {
+ USB_VENDOR_MODACOM, USB_PRODUCT_MODACOM_MWIMAX,
+ "MODACOM Mobile wimax adaptor",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703,
+ "MCS7703 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7715,
+ "MCS7715 Serial Parallel",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730,
+ "MCS7730 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7810,
+ "MCS7810 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820,
+ "MCS7820 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7830,
+ "MCS7830 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7832,
+ "MCS7832 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840,
+ "MCS7840 Serial",
+ },
+ {
+ USB_VENDOR_MOTOROLA, USB_PRODUCT_MOTOROLA_MC141555,
+ "MC141555 hub controller",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
+ "T720c",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_V360,
+ "V360",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB4100,
+ "SB4100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB5100,
+ "SB5100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MOXA, USB_PRODUCT_MOXA_UPORT1110,
+ "UPort 1110",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_8,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_9,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_10,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_12,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_13,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_11,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_14,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_15,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MULTITECH, USB_PRODUCT_MULTITECH_ATLAS,
+ "MT5634ZBA modem",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CU,
+ "1200 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600CU,
+ "600 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USB,
+ "1200",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200UB,
+ "1200 UB",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USBPLUS,
+ "1200 Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CUPLUS,
+ "1200 CU Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_BEARPAW1200F,
+ "BearPaw 1200F",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600USB,
+ "600",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_MDC800,
+ "MDC-800",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_DV2000,
+ "DV2000",
+ },
+ {
+ USB_VENDOR_MUSTEK2, USB_PRODUCT_MUSTEK2_PM800,
+ "PowerMust 800",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW1200,
+ "BearPaw 1200",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW2400,
+ "BearPaw 2400",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_WL300NUG,
+ "WL300NU-G",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_USB2EXTEND,
+ "Repeater",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_B,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_C,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY760,
+ "Picty760",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY900,
+ "Picty900",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY920,
+ "Picty920",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY800,
+ "Picty800",
+ },
+ {
+ USB_VENDOR_NEC2, USB_PRODUCT_NEC2_HUB2_0,
+ "USB2.0 Hub",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050,
+ "6-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260,
+ "8-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010,
+ "Multi-format Flash Controller",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT,
+ "Turbo-Connect",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_CLIK40,
+ "Clik! 40",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET,
+ "EthernetGadget",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101X,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA101,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA120,
+ "USB 2.0 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_M7100,
+ "M7100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111NA,
+ "802.11b",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111V2,
+ "802.11b V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V3,
+ "WG111v3",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U_NF,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2,
+ "WG111v2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WN111V2,
+ "WN111V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3100,
+ "WNDA3100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3200,
+ "WNDA3200",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1100,
+ "WNA1100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000,
+ "WNA1000",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000M,
+ "WNA1000M",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000MV2,
+ "WNA1000Mv2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_N300MA,
+ "N300MA",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101,
+ "MA101",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101B,
+ "MA101 Rev B",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_NF,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_1,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111_NF,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR4, USB_PRODUCT_NETGEAR4_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NETWEEN, USB_PRODUCT_NETWEEN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NHJ, USB_PRODUCT_NHJ_CAM2,
+ "Camera",
+ },
+ {
+ USB_VENDOR_NI, USB_PRODUCT_NI_GPIB_USB_A,
+ "GPIB-USB-A",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E990,
+ "E990",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E880,
+ "E880",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E885,
+ "E885",
+ },
+ {
+ USB_VENDOR_NOKIA, USB_PRODUCT_NOKIA_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15UMASS,
+ "Internet Stick CS-15 (umass mode)",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15,
+ "Internet Stick CS-15",
+ },
+ {
+ USB_VENDOR_NORITAKE, USB_PRODUCT_NORITAKE_COMEMO,
+ "Noritake COMEMO",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_NV902W,
+ "NV-902W",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD,
+ "ExpressCard 3G",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620,
+ "V620",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV740,
+ "V740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V720,
+ "V720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740_2,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U870,
+ "U870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_XU870,
+ "XU870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_X950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620,
+ "ES620 CDMA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U720,
+ "U720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EU870D,
+ "EU870D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U727,
+ "U727",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC950D,
+ "MC950D HSUPA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINX950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ZEROCD2,
+ "ZeroCD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760CD,
+ "MC760 CD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U760,
+ "U760",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760,
+ "MC760",
+ },
+ {
+ USB_VENDOR_NOVATEL1, USB_PRODUCT_NOVATEL1_FLEXPACKGPS,
+ "NovAtel FlexPack GPS",
+ },
+ {
+ USB_VENDOR_O2MICRO, USB_PRODUCT_O2MICRO_OZ776HUB,
+ "OZ776 Hub",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_USBTOETHER,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_US2308,
+ "Serial",
+ },
+ {
+ USB_VENDOR_OLIMEX, USB_PRODUCT_OLIMEX_OPENOCD_JTAG,
+ "OpenOCD JTAG",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1,
+ "C-1",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700,
+ "C-700 Ultra Zoom",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511,
+ "OV511",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511PLUS,
+ "OV511+",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX50F,
+ "BX50F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX35F,
+ "BX35F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BY35S,
+ "BY35S UPS",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2,
+ "disk",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFEB,
+ "MDCFE-B CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SIIGMS,
+ "Memory Stick+CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB3,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB4,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_PNYCFSM,
+ "PNY/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_STECHCFSM,
+ "Simple Tech/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_LC1,
+ "CF + SM Combo (LC1)",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II,
+ "Datafab MD1-II PC-Card",
+ },
+ {
+ USB_VENDOR_ONSPEC2, USB_PRODUCT_ONSPEC2_8IN2,
+ "8In2",
+ },
+ {
+ USB_VENDOR_OPENMOKO, USB_PRODUCT_OPENMOKO_N1793D,
+ "Neo1973 Debug",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_ONERNG,
+ "Moonbase Otago OneRNG",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_CHAOSKEY,
+ "Altusmetrum ChaosKey 1.0",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G,
+ "Vodafone Mobile Connect 3G",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GFUSION,
+ "GlobeTrotter 3G FUSION",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD,
+ "GlobeTrotter 3G QUAD",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUADPLUS,
+ "GlobeTrotter 3G QUAD PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36,
+ "GlobeTrotter MAX 3.6/7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS,
+ "GlobeTrotter 3G PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_SCORPION,
+ "GlobeTrotter HSDPA Modem",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GSICON72,
+ "GlobeSurfer iCON 7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON225,
+ "iCON 225",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTHSUPA380E,
+ "GlobeTrotter HSUPA 380E",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON322,
+ "iCON 322",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON505,
+ "iCON 505",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_WIFI01,
+ "model 01 WiFi",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_BT01,
+ "model 01 Bluetooth",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01PLUS,
+ "model 01+ Ethernet",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01,
+ "model 01 Ethernet",
+ },
+ {
+ USB_VENDOR_OREGONSCI, USB_PRODUCT_OREGONSCI_OWL_CM160,
+ "OWL CM-160",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID,
+ "Solid state disk",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_DKU5,
+ "DKU-5 Serial",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_OWEN, USB_PRODUCT_OWEN_AC4,
+ "AC4 USB-RS485",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500,
+ "Palm m500",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505,
+ "Palm m505",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M515,
+ "Palm m515",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_I705,
+ "Palm i705",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_Z,
+ "Palm Tungsten Z",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125,
+ "Palm m125",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M130,
+ "Palm m130",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_T,
+ "Palm Tungsten T",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE_31,
+ "Palm Zire 31",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE,
+ "Palm Zire",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_SERIAL,
+ "USB Serial Adaptor",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_LS120,
+ "LS-120",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_SDCAAE,
+ "MultiMediaCard",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_TYTP50P6S,
+ "TY-TP50P6-S 50in Touch Panel",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_N5HBZ0000055,
+ "UB94",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_1,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_1,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_1,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_2,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_2,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_2,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485S,
+ "SB485S USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485C,
+ "SB485C USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_LEC,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB232,
+ "SB232 USB-RS232",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_TMU,
+ "TMU Thermometer",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_IRAMP,
+ "IRAmp Duplex",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK5,
+ "DRAK5",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO88,
+ "QUIDO USB 8/8",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO44,
+ "QUIDO USB 4/4",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO22,
+ "QUIDO USB 2/2",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO101,
+ "QUIDO USB 10/1",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO303,
+ "QUIDO USB 30/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO603,
+ "QUIDO USB 60(100)/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO216,
+ "QUIDO USB 2/16",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO332,
+ "QUIDO USB 3/32",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK6,
+ "DRAK6 USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_STAVOVY,
+ "UPS-USB Stavovy",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_MUC,
+ "MU Controller",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SIMUKEY,
+ "SimuKey",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AD4USB,
+ "AD4USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MUX,
+ "GOLIATH MUX",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MSR,
+ "GOLIATH MSR",
+ },
+ {
+ USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER,
+ "6 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE,
+ "3 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK,
+ "Disk",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1,
+ "Serial Converter",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET3,
+ "At-Home Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WM168B,
+ "WM-168b",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WL503IA,
+ "WL-503IA",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_GWU513,
+ "GWU513",
+ },
+ {
+ USB_VENDOR_PHIDGETS, USB_PRODUCT_PHIDGETS_2X2,
+ "2x2 Interface Kit",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS350,
+ "DSS 350 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS,
+ "DSS XXX Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA645VC,
+ "PCA645VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA646VC,
+ "PCA646VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC675K,
+ "PCVC675K Vesta",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC680K,
+ "PCVC680K Vesta Pro",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC690K,
+ "PCVC690K Vesta Pro Scan Camera",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC730K,
+ "PCVC730K ToUCam Fun",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC740K,
+ "PCVC740K ToUCam Pro PC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC750K,
+ "PCVC750K ToUCam Pro Scan",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS150,
+ "DSS 150 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_ACE1001,
+ "AKTAKOM ACE-1001",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_CPWUA054,
+ "CPWUA054",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500_NF,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600,
+ "SNU5600",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5630NS05,
+ "SNU5630NS/05",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DIVAUSB,
+ "DIVA mp3 player",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI, USB_PRODUCT_PHILIPSSEMI_HUB1122,
+ "hub",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_PS2USB,
+ "PS2 to Mac",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_XKEYS,
+ "Xkeys Programmable Keyboard",
+ },
+ {
+ USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600,
+ "CRW-600 6-in-1",
+ },
+ {
+ USB_VENDOR_PLANEX, USB_PRODUCT_PLANEX_GW_US11H,
+ "GW-US11H WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US11S,
+ "GW-US11S WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS,
+ "GW-US54GXS WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US300,
+ "GW-US300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54HP,
+ "GW-US54HP",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS,
+ "GW-US300MiniS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSNANO,
+ "GW-USNano",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRO300,
+ "GW-USMicro300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54MINI2,
+ "GW-US54Mini2",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54SG,
+ "GW-US54SG",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL,
+ "GW-US54GZL",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD,
+ "GW-US54GD",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMM,
+ "GW-USMM",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON,
+ "GW-USMicroN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON2W,
+ "GW-USMicroN2W",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ,
+ "GW-US54GZ",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GU1000T,
+ "GU-1000T",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI,
+ "GW-US54Mini",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_GWUS54ZGL,
+ "GW-US54ZGL",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
+ "DSP-400 Headset",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_TESTBOARD,
+ "test board",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA8,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA9,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTSMITH, USB_PRODUCT_PORTSMITH_EEA,
+ "Express Ethernet",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_1,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_2,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH,
+ "Travel Flash Drive",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2X300,
+ "G2-200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E300,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2300,
+ "G2-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E3002,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_9600,
+ "Colorado 9600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_600U,
+ "Colorado 600u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_6200,
+ "Visioneer 6200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_19200,
+ "Colorado 19200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_1200U,
+ "Colorado 1200u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_636I,
+ "ReadyScan 636i",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E600,
+ "G2E-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_COMFORT,
+ "Comfort",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_MOUSEINABOX,
+ "Mouse-in-a-Box",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_PCGAUMS1,
+ "Sony PCGA-UMS1",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301,
+ "PL2301 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302,
+ "PL2302 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303BENQ,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2305,
+ "Parallel printer",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_ATAPI4,
+ "ATAPI-4 Bridge Controller",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501,
+ "PL2501 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PUTERCOM, USB_PRODUCT_PUTERCOM_UPA100,
+ "USB-1284 BRIDGE",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_MODEM,
+ "CDMA MSM modem",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA2,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA3,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER2,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_MSM_PHONE,
+ "CDMA MSM phone",
+ },
+ {
+ USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_UMASS,
+ "Quanta USB MSM (umass mode)",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_Q101,
+ "Quanta Q101 HSDPA USB modem",
+ },
+ {
+ USB_VENDOR_QUICKSHOT, USB_PRODUCT_QUICKSHOT_STRIKEPAD,
+ "USB StrikePad",
+ },
+ {
+ USB_VENDOR_RADIOSHACK, USB_PRODUCT_RADIOSHACK_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_RAINBOW, USB_PRODUCT_RAINBOW_IKEY2000,
+ "i-Key 2000",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2671,
+ "RT2671",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3370,
+ "RT3370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3573,
+ "RT3573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5370,
+ "RT5370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5572,
+ "RT5572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_MT7601,
+ "MT7601",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT8070,
+ "RT8070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60,
+ "USB serial REX-USB60",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60F,
+ "REX-USB60F",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188ETV,
+ "RTL8188ETV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CTV,
+ "RTL8188CTV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_2,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8150,
+ "RTL8150",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8151,
+ "RTL8151 PNA",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152,
+ "RTL8152",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153,
+ "RTL8153",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8156,
+ "RTL8156",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_0,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8171,
+ "RTL8171",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8172,
+ "RTL8172",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8173,
+ "RTL8173",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8174,
+ "RTL8174",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_0,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8191CU,
+ "RTL8191CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_3,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE_VAU,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_0,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192U,
+ "RTL8192U",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_1,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_2,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_5,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8712,
+ "RTL8712",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8713,
+ "RTL8713",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_COMBO,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8723BU,
+ "RTL8723BU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_RENESAS, USB_PRODUCT_RENESAS_RX610,
+ "RX610 RX-Stick",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC3,
+ "VGP-VCC3 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_3,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC5,
+ "VGP-VCC5 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4_2,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC6,
+ "VGP-VCC6 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC7,
+ "VGP-VCC7 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC8,
+ "VGP-VCC8 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC9,
+ "VGP-VCC9 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VPGVCCX,
+ "VGP-VCCX Camera",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_BLACKBERRY,
+ "BlackBerry",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL_DUAL,
+ "RIM Mass Storage Device",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL,
+ "BlackBerry pearl",
+ },
+ {
+ USB_VENDOR_ROCKFIRE, USB_PRODUCT_ROCKFIRE_GAMEPAD,
+ "Gamepad 203USB",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA100,
+ "UA-100 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM4,
+ "UM-4 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8850,
+ "SC-8850 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_U8,
+ "U-8 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM2,
+ "UM-2 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8820,
+ "SC-8820 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_PC300,
+ "PC-300 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM1,
+ "UM-1 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SK500,
+ "SK-500 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SCD70,
+ "SC-D70 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM880N,
+ "UM-880 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD90,
+ "SD-90 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM550,
+ "UM-550 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD20,
+ "SD-20 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD80,
+ "SD-80 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA700,
+ "UA-700 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UMONE,
+ "UM-ONE MIDI I/F",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS, USB_PRODUCT_RTSYSTEMS_CT57B,
+ "CT57B Radio Cable",
+ },
+ {
+ USB_VENDOR_SACOM, USB_PRODUCT_SACOM_USB485BL,
+ "USB-485-BL",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A,
+ "XG-760A",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA,
+ "XG-76NA",
+ },
+ {
+ USB_VENDOR_SAITEK, USB_PRODUCT_SAITEK_CYBORG_3D_GOLD,
+ "Cyborg 3D Gold Joystick",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_WIS09ABGN,
+ "WIS09ABGN Wireless LAN adapter",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_SWL2100W,
+ "SWL-2100U",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID2,
+ "Android v2",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID,
+ "Android",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_I330,
+ "I330",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05A,
+ "ImageMate SDDR-05a",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31,
+ "ImageMate SDDR-31",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05,
+ "ImageMate SDDR-05",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR12,
+ "ImageMate SDDR-12",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR09,
+ "ImageMate SDDR-09",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR75,
+ "ImageMate SDDR-75",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY, USB_PRODUCT_SANWASUPPLY_JYDV9USB,
+ "JY-DV9USB gamepad",
+ },
+ {
+ USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
+ "Sanyo SCP-4900 Phone",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R,
+ "SL11R-IDE",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2101,
+ "SeaLINK+232 (2101/2105)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2102,
+ "SeaLINK+485 (2102)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2103,
+ "SeaLINK+232I (2103)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2104,
+ "SeaLINK+485I (2104)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_1,
+ "SeaPORT+2/232 (2201) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_1,
+ "SeaPORT+2/485 (2202) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_1,
+ "SeaPORT+2 (2203) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_2,
+ "SeaPORT+2/232 (2201) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_2,
+ "SeaPORT+2/485 (2202) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_2,
+ "SeaPORT+2 (2203) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_1,
+ "SeaPORT+4/232 (2401) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_1,
+ "SeaPORT+4/485 (2402) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_1,
+ "SeaPORT+4 (2403) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_2,
+ "SeaPORT+4/232 (2401) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_2,
+ "SeaPORT+4/485 (2402) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_2,
+ "SeaPORT+4 (2403) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_3,
+ "SeaPORT+4/232 (2401) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_3,
+ "SeaPORT+4/485 (2402) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_3,
+ "SeaPORT+4 (2403) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_4,
+ "SeaPORT+4/232 (2401) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_4,
+ "SeaPORT+4/485 (2402) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_4,
+ "SeaPORT+4 (2403) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_1,
+ "SeaLINK+8/232 (2801) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_1,
+ "SeaLINK+8/485 (2802) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_1,
+ "SeaLINK+8 (2803) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_2,
+ "SeaLINK+8/232 (2801) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_2,
+ "SeaLINK+8/485 (2802) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_2,
+ "SeaLINK+8 (2803) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_3,
+ "SeaLINK+8/232 (2801) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_3,
+ "SeaLINK+8/485 (2802) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_3,
+ "SeaLINK+8 (2803) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_4,
+ "SeaLINK+8/232 (2801) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_4,
+ "SeaLINK+8/485 (2802) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_4,
+ "SeaLINK+8 (2803) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_5,
+ "SeaLINK+8/232 (2801) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_5,
+ "SeaLINK+8/485 (2802) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_5,
+ "SeaLINK+8 (2803) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_6,
+ "SeaLINK+8/232 (2801) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_6,
+ "SeaLINK+8/485 (2802) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_6,
+ "SeaLINK+8 (2803) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_7,
+ "SeaLINK+8/232 (2801) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_7,
+ "SeaLINK+8/485 (2802) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_7,
+ "SeaLINK+8 (2803) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_8,
+ "SeaLINK+8/232 (2801) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_8,
+ "SeaLINK+8/485 (2802) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_8,
+ "SeaLINK+8 (2803) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2106,
+ "SeaLINK+422 (2106)",
+ },
+ {
+ USB_VENDOR_SEL, USB_PRODUCT_SEL_C662,
+ "C662",
+ },
+ {
+ USB_VENDOR_SELUXIT, USB_PRODUCT_SELUXIT_RF,
+ "RF Dongle",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301,
+ "NUB-8301",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB862,
+ "NUB-862",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SERVERWORKS, USB_PRODUCT_SERVERWORKS_HUB,
+ "Root Hub",
+ },
+ {
+ USB_VENDOR_SGI, USB_PRODUCT_SGI_SN1_L1_SC,
+ "SN1 L1 System Controller",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268,
+ "ST268",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620A,
+ "DM9620A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621A,
+ "DM9621A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ZT6688,
+ "ZT6688",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515,
+ "ADM8515 Ethernet",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9000E,
+ "DM9000E",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620,
+ "DM9620",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621,
+ "DM9621",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9622,
+ "DM9622",
+ },
+ {
+ USB_VENDOR_SHARK, USB_PRODUCT_SHARK_PA,
+ "Pocket Adapter",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500,
+ "SL5500",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300,
+ "A300",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600,
+ "SL5600",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700,
+ "C700",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750,
+ "C750",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB,
+ "E-USB Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SDDR09,
+ "ImageMate SDDR09",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBSMCF,
+ "eUSB SmartMedia / CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC,
+ "eUSB MultiMediaCard",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_HIFD,
+ "Sony Hifd",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBATAPI,
+ "eUSB ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CF,
+ "eUSB CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_B,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_C,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CDRW,
+ "CD-RW Device",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SCM,
+ "SCM Micro",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM,
+ "SpeedStream",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM22,
+ "SpeedStream 1022",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
+ "GSM module MC35",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_SX1,
+ "SX1",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X65,
+ "X65",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X75,
+ "X75",
+ },
+ {
+ USB_VENDOR_SIEMENS4, USB_PRODUCT_SIEMENS4_RUGGEDCOM,
+ "RUGGEDCOM",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM5625,
+ "EM5625",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_595,
+ "AirCard 595",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC597E,
+ "597E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C597,
+ "Compass 597",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_580,
+ "Aircard 580 EVDO",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC595U,
+ "595U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720_2,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725_2,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_TRUINSTALL,
+ "Aircard Tru Installer",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_2,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8765,
+ "MC8765",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775_2,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_875,
+ "875",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8780,
+ "MC8780",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8781,
+ "MC8781",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8790,
+ "MC8790",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880,
+ "880",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881,
+ "881",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880E,
+ "880E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881E,
+ "881E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880U,
+ "880U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881U,
+ "881U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC885U,
+ "885U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C01SW,
+ "C01SW",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7700,
+ "MC7700",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_USB305,
+ "USB305",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7304,
+ "MC7304",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8355,
+ "MC8355",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_340U,
+ "Aircard 340U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_770S,
+ "Aircard 770S",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7455,
+ "MC7455",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM7455,
+ "EM7455",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_IRDA,
+ "IrDA",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X,
+ "Datum Networks SSF-7X Multi Players",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_DIGIFILMREADER,
+ "DigiFilm-Combo",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER,
+ "MULTICARDREADER",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_VSTABI,
+ "VStabi Controller",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_M,
+ "Arkham DS101 Monitor",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_A,
+ "Arkham DS101 Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BSM7DUSB,
+ "BSM7-D-USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_POLOLU,
+ "Pololu Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_DEBUG,
+ "Cygnal Debug Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME2,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EDG1228,
+ "EDG1228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_GSM2228,
+ "Enfora GSM2228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP,
+ "Argussoft ISP",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IMS_USB_RS422,
+ "IMS USB-RS422",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128,
+ "Crumb128",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_OPTRIS_MSPRO,
+ "Optris MSpro LT Thermometer",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEGREECONT,
+ "Degree Controls",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRACIENT,
+ "Tracient RFID",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRAQMATE,
+ "Track Systems Traqmate",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SUUNTO,
+ "Suunto sports",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARYGON_MIFARE,
+ "Arygon Mifare RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DESKTOPMOBILE,
+ "Burnside Desktop mobile",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TAMSMASTER,
+ "Tams Master Easy Control",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGBLASTER,
+ "RIGblaster P&P",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGTALK,
+ "RIGtalk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_B_G_H3000,
+ "B&G H3000 Data Cable",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IPLINK1220,
+ "IP-Link 1220",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HAMLINKUSB,
+ "Timewave HamLinkUSB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AVIT_USB_TTL,
+ "AVIT Research USB-TTL",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MJS_TOSLINK,
+ "MJS USB-TOSLINK",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_WAVIT,
+ "ThinkOptics WavIt",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MULTIPLEX_RC,
+ "Multiplex RC adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MSD_DASHHAWK,
+ "MSD DashHawk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INSYS_MODEM,
+ "INSYS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_JTAG,
+ "Lipowsky Baby-JTAG",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_LIN,
+ "Lipowsky Baby-LIN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AEROCOMM,
+ "Aerocomm Radio",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ZEPHYR_BIO,
+ "Zephyr Bioharness",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EMS_C1007,
+ "EMS C1007 HF RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_HARP,
+ "Lipowsky HARP-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_C2_EDGE_MODEM,
+ "Commander 2 EDGE(GSM) Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_GPS,
+ "Cygnal Fasttrax GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PLUGDRIVE,
+ "Nanotec Plug & Drive",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TELEGESIS_ETRX2,
+ "Telegesis ETRX2USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PROCYON_AVS,
+ "Procyon AVS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MC35PU,
+ "MC35pu",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL,
+ "Cygnal",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AMBER_AMB2560,
+ "Amber Wireless AMB2560",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEKTEK_DTAPLUS,
+ "DekTec DTA Plus VHF/UHF Booster",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KYOCERA_GPS,
+ "Kyocera GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IRZ_SG10,
+ "IRZ SG-10 GSM/GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BEI_VCP,
+ "BEI USB Sensor (VCP)",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_JUNIPER_BX_CONS,
+ "Juniper BX Console",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BALLUFF_RFID,
+ "Balluff RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_IBUS,
+ "AC-Services IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CIS,
+ "AC-Services CIS-IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PREON32,
+ "Virtenio Preon32",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CAN,
+ "AC-Services CAN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_OBD,
+ "AC-Services OBD",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357LR,
+ "CEL EM357 LR",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357,
+ "CEL EM357",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MMB_ZIGBEE,
+ "MMB Networks ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PII_ZIGBEE,
+ "Planet Innovation Ingeni ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KETRA_N1,
+ "Ketra N1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CELDEVKIT,
+ "CEL MeshWorks DevKit",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KCF_PRN,
+ "KCF Technologies PRN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HUBZ,
+ "HubZ ZigBee/Z-Wave",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_1,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_2,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_3,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INFINITY_MIC,
+ "Infinity GPS-MIC-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP2110,
+ "CP2110 USB HID Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBSCOPE50,
+ "USBscope50",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBWAVE12,
+ "USBwave12",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBPULSE100,
+ "USBpulse100",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBCOUNT50,
+ "USBcount50",
+ },
+ {
+ USB_VENDOR_SILABS2, USB_PRODUCT_SILABS2_DCU11CLONE,
+ "DCU-11 clone",
+ },
+ {
+ USB_VENDOR_SILABS3, USB_PRODUCT_SILABS3_GPRS_MODEM,
+ "GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS4, USB_PRODUCT_SILABS4_100EU_MODEM,
+ "GPRS Modem 100EU",
+ },
+ {
+ USB_VENDOR_SILABS5, USB_PRODUCT_SILABS5_EM358X,
+ "EM358x",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_U2E,
+ "U2E",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_GPE,
+ "Psion Dacom Gold Port Ethernet",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPH_NF,
+ "YAP Phone (no firmware)",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
+ "YAP Phone",
+ },
+ {
+ USB_VENDOR_SIMCOM, USB_PRODUCT_SIMCOM_SIM7600E,
+ "SIM7600E modem",
+ },
+ {
+ USB_VENDOR_SIRIUS, USB_PRODUCT_SIRIUS_ROADSTER,
+ "NetComm Roadster II 56",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_LN029,
+ "LN029",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_CN104,
+ "CN104",
+ },
+ {
+ USB_VENDOR_SITECOM2, USB_PRODUCT_SITECOM2_WL022,
+ "WL-022",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V1,
+ "WL-168 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN030,
+ "LN-030",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V4,
+ "WL-168 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL302,
+ "WL-302",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL603,
+ "WL-603",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL315,
+ "WL-315",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL321,
+ "WL-321",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL324,
+ "WL-324",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL343,
+ "WL-343",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608,
+ "WL-608",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL344,
+ "WL-344",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL329,
+ "WL-329",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL345,
+ "WL-345",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL353,
+ "WL-353",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V1,
+ "WL-349 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V4,
+ "WL-349 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA4000,
+ "WLA-4000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA5000,
+ "WLA-5000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN032,
+ "LN-032",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA2100V2,
+ "WLA-2100 v2",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028,
+ "LN-028",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113,
+ "WL-113",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL172,
+ "WL-172",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113R2,
+ "WL-113 rev 2",
+ },
+ {
+ USB_VENDOR_SMART, USB_PRODUCT_SMART_PL2303,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTLINK,
+ "SmartLink Ethernet",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC,
+ "smartNIC 2 PnP",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2102USB,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2206USB,
+ "EZ Connect Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2862WG,
+ "EZ Connect 54Mbps",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2020HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2504HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2513HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7500,
+ "LAN7500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7505,
+ "LAN7505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7800,
+ "LAN7800",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7801,
+ "LAN7801",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7850,
+ "LAN7850",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9530,
+ "LAN9530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9730,
+ "LAN9730",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_SAL10,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505_SAL10,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_SAL10,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_SAL10,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_SAL10,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_HAL,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_HAL,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_ALT,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_ALT,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_ALT,
+ "SMSC9512",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN89530,
+ "LAN89530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV1,
+ "EZ Connect 11Mbps",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV2,
+ "EZ Connect 11Mbps v2",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100,
+ "NUB100 Ethernet",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB110,
+ "NUB110 Ethernet",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR, USB_PRODUCT_SOLIDYEAR_KEYBOARD,
+ "Keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC,
+ "DSC Cameras",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_NWMS7,
+ "Memorystick NW-MS7",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2,
+ "Harddrive V2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSACUS1,
+ "Memorystick MSAC-US1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM,
+ "Handycam",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC,
+ "MSC Memorystick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35,
+ "Clie v3.5",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARD,
+ "PlayStation2 keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARDHUB,
+ "PlayStation2 keyboard hub",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2MOUSE,
+ "PlayStation2 mouse",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40,
+ "Clie v4.0",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40_MS,
+ "Clie v4.0 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360,
+ "Clie s360",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41_MS,
+ "Clie v4.1 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41,
+ "Clie v4.1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60,
+ "Clie nx60",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TJ25,
+ "Clie tj25",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_IFU_WLM2,
+ "IFU-WLM2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CXD9192,
+ "1seg TV tuner",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8_CHG,
+ "KeikaiDenwa 8 with charger",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8,
+ "KeikaiDenwa 8",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON, USB_PRODUCT_SPEEDDRAGON_MS3303H,
+ "MS3303H Serial",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_UB801R,
+ "UB801R",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X,
+ "ICUSB2321X/2X/4X",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_BIOMETRIC_COPR,
+ "Biometric Coprocessor",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_COMMUNICATOR,
+ "Communicator",
+ },
+ {
+ USB_VENDOR_STOLLMANN, USB_PRODUCT_STOLLMANN_ISDN_TA_USBA,
+ "ISDN TA+USBA",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX, USB_PRODUCT_STRAWBERRYLINUX_USBRH,
+ "USBRH sensor",
+ },
+ {
+ USB_VENDOR_STSN, USB_PRODUCT_STSN_STSN0001,
+ "Internet Access Device",
+ },
+ {
+ USB_VENDOR_SUNCOMM, USB_PRODUCT_SUNCOMM_MB_ADAPTOR,
+ "Mobile Adaptor",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_DS96L,
+ "U-Cable type D2",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_PS64P1,
+ "U-Cable type P1",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U,
+ "Slipper U",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_IS96U,
+ "Ir-Trinity",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX,
+ "U-Cable type A3",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4,
+ "U-Cable type A4",
+ },
+ {
+ USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
+ "SuperTop IDE Bridge",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_EP9001G2A,
+ "EP-9001-G rev 2A",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SUSTEEN, USB_PRODUCT_SUSTEEN_DCU11,
+ "Ericsson DCU-10/11",
+ },
+ {
+ USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW153,
+ "LW153",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW154,
+ "LW154",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303,
+ "LW303",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313,
+ "LW313",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_CIPHERLAB100,
+ "CipherLab Barcode Scanner",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS, USB_PRODUCT_SYSTEMTALKS_SGCX2UL,
+ "SGC-X2UL",
+ },
+ {
+ USB_VENDOR_TANGTOP, USB_PRODUCT_TANGTOP_USBPS2,
+ "USBPS2",
+ },
+ {
+ USB_VENDOR_TAPWAVE, USB_PRODUCT_TAPWAVE_ZODIAC,
+ "Zodiac",
+ },
+ {
+ USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE,
+ "CameraMate (DPCM_USB)",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_2,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_3,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS_2,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA9664,
+ "USB-PDC Adapter UPA9664",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UCA1464,
+ "USB-cdmaOne Adapter UCA1464",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UHA6400,
+ "USB-PHS Adapter UHA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA6400,
+ "USB-PHS Adapter UPA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB,
+ "FD-05PUB",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_0193,
+ "ALLNET 0193 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZYAIR_B200,
+ "ZyXEL ZyAIR B200 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_U300C,
+ "U-300C",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN,
+ "QuickWLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1,
+ "Microphone",
+ },
+ {
+ USB_VENDOR_TENDA, USB_PRODUCT_TENDA_TWL541U,
+ "TWL541U WLAN",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON,
+ "Aureon Dual USB",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_175,
+ "175/177 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_330,
+ "330 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_435,
+ "435/635/735 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_845,
+ "845 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERVICE,
+ "Service adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_580,
+ "580 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_174,
+ "174 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_556,
+ "556/560 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_1,
+ "USB adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_2,
+ "USB to serial converter",
+ },
+ {
+ USB_VENDOR_THRUST, USB_PRODUCT_THRUST_FUSION_PAD,
+ "Fusion Digital Gamepad",
+ },
+ {
+ USB_VENDOR_THURLBY, USB_PRODUCT_THURLBY_QL355P,
+ "QL355P power supply",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41,
+ "UT-USB41 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB2046,
+ "TUSB2046 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB3410,
+ "TUSB3410",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_NEXII,
+ "Nex II Digital",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430_JTAG,
+ "MSP-FET430UIF JTAG",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430,
+ "MSP-FET430UIF",
+ },
+ {
+ USB_VENDOR_TML, USB_PRODUCT_TML_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_TODOS, USB_PRODUCT_TODOS_ARGOS_MINI,
+ "Argos Mini Smartcard",
+ },
+ {
+ USB_VENDOR_TOPRE, USB_PRODUCT_TOPRE_HHKB,
+ "HHKB Professional",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RH,
+ "Toradex OAK RH sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_P,
+ "Toradex OAK P sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LUX,
+ "Toradex OAK LUX sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_TILT,
+ "Toradex OAK Tilt sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_DIST,
+ "Toradex OAK DIST sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MOVE,
+ "Toradex OAK MOVE sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_4_20,
+ "Toradex OAK 4-20mA sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_G,
+ "Toradex OAK G sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MAGR,
+ "Toradex OAK MAGR sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RELAY,
+ "Toradex OAK RELAY",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_10V,
+ "Toradex OAK 10V sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LN,
+ "Toradex OAK LN sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_IO,
+ "Toradex OAK IO",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_ORIENT,
+ "Toradex ORIENT Tilt sensor",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_HSDPA,
+ "HSDPA",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB,
+ "ThumbDrive 8MB",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_TRIPPLITE, USB_PRODUCT_TRIPPLITE_U209,
+ "U209 Serial",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_T33521,
+ "USB/MP3 decoder",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100,
+ "XXX 1100",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_OPTMOUSE,
+ "Optical Mouse",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_TSUNAMI, USB_PRODUCT_TSUNAMI_SM2000,
+ "SM-2000",
+ },
+ {
+ USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240,
+ "G240",
+ },
+ {
+ USB_VENDOR_UBLOX, USB_PRODUCT_UBLOX_ANTARIS4,
+ "ANTARIS4 GPS",
+ },
+ {
+ USB_VENDOR_ULTIMA, USB_PRODUCT_ULTIMA_1200UBPLUS,
+ "1200 UB Plus",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1236U,
+ "Astra 1236U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1220U,
+ "Astra 1220U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2000U,
+ "Astra 2000U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA3400,
+ "Astra 3400",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2100U,
+ "Astra 2100U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2200U,
+ "Astra 2200U",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU_NF,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A,
+ "TEW-429UB_A",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB,
+ "TEW-429UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1,
+ "TEW-429UB C1",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW645UB,
+ "TEW-645UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2,
+ "ALL0298 v2",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UNIACCESS, USB_PRODUCT_UNIACCESS_PANACHE,
+ "Panache Surf ISDN",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_NW3100,
+ "NW-3100",
+ },
+ {
+ USB_VENDOR_UNKNOWN3, USB_PRODUCT_UNKNOWN3_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_RD9700,
+ "RD9700",
+ },
+ {
+ USB_VENDOR_UNKNOWN5, USB_PRODUCT_UNKNOWN5_NF_RIC,
+ "NF RIC",
+ },
+ {
+ USB_VENDOR_UNKNOWN6, USB_PRODUCT_UNKNOWN6_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_USI, USB_PRODUCT_USI_MC60,
+ "MC60 Serial",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR1120,
+ "USR1120 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5422,
+ "USR5422 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5421A,
+ "USR5421A WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5423,
+ "USR5423 WLAN",
+ },
+ {
+ USB_VENDOR_VAISALA, USB_PRODUCT_VAISALA_USBINSTCABLE,
+ "USB instrument cable",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS101,
+ "VFS101 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS301,
+ "VFS301 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS451,
+ "VFS451 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS300,
+ "VFS300 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_2,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_3,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5471,
+ "VFS471 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VELLEMAN, USB_PRODUCT_VELLEMAN_K8055,
+ "K8055 USB Experiment interface board",
+ },
+ {
+ USB_VENDOR_VERTEX, USB_PRODUCT_VERTEX_VW110L,
+ "VW110L",
+ },
+ {
+ USB_VENDOR_VIA, USB_PRODUCT_VIA_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773HUB,
+ "G773 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_P815HUB,
+ "P815 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_AIRSYNC,
+ "Airsync",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773CTRL,
+ "G773 Monitor Control",
+ },
+ {
+ USB_VENDOR_VISION, USB_PRODUCT_VISION_VC6452V002,
+ "CPiA Camera",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_7600,
+ "OneTouch 7600",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_5300,
+ "OneTouch 5300",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_3000,
+ "Scanport 3000",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6100,
+ "OneTouch 6100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6200,
+ "OneTouch 6200",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8100,
+ "OneTouch 8100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8600,
+ "OneTouch 8600",
+ },
+ {
+ USB_VENDOR_VIVITAR, USB_PRODUCT_VIVITAR_DSC350,
+ "DSC350",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_1,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_2,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_CT0405U,
+ "CT-0405-U Tablet",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE,
+ "Graphire",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_4X5,
+ "Graphire3 4x5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_4X5,
+ "Graphire4 Classic A6",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOSA5,
+ "Intuos A5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW,
+ "Intuos Draw (CTL-490)",
+ },
+ {
+ USB_VENDOR_WAGO, USB_PRODUCT_WAGO_SERVICECABLE,
+ "Service Cable 750-923",
+ },
+ {
+ USB_VENDOR_WAVESENSE, USB_PRODUCT_WAVESENSE_JAZZ,
+ "Jazz blood glucose meter",
+ },
+ {
+ USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341,
+ "CH341 serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341A,
+ "CH341A serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH340,
+ "CH340 serial/parallel",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_PL512,
+ "PL512 PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_RCM,
+ "RCM Remote Control",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_MPOD,
+ "MPOD PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_CML,
+ "CML Data Logger",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_WNC0600,
+ "WNC-0600USB",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR045G,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G,
+ "UR055G",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_O8494,
+ "ORiNOCO 802.11n",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WMR, USB_PRODUCT_WMR_RIGBLASTER,
+ "RIGblaster",
+ },
+ {
+ USB_VENDOR_XIAOMI, USB_PRODUCT_XIAOMI_MT7601U,
+ "MT7601U",
+ },
+ {
+ USB_VENDOR_XIRING, USB_PRODUCT_XIRING_XIMAX,
+ "Ximax CDC",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_IMAGING,
+ "Imaging Device",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_PCCAM,
+ "IBM PC Camera",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256,
+ "UX256 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX96,
+ "UX96 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UR22,
+ "UR22",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RPU200,
+ "RP-U200",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
+ "NetVolante RTA54i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65B,
+ "NetVolante RTW65b",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65I,
+ "NetVolante RTW65i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA55I,
+ "NetVolante RTA55i",
+ },
+ {
+ USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO,
+ "U640MO-03",
+ },
+ {
+ USB_VENDOR_YCCABLE, USB_PRODUCT_YCCABLE_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU,
+ "Flashbuster-U",
+ },
+ {
+ USB_VENDOR_YUBICO, USB_PRODUCT_YUBICO_YUBIKEY,
+ "Yubikey",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_M4Y750,
+ "M4Y-750",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI725,
+ "XI-725/726",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI735,
+ "XI-735",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_MD40900,
+ "MD40900",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XG703A,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB81,
+ "UB81",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB82,
+ "UB82",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZOOM, USB_PRODUCT_ZOOM_2986L,
+ "2986L Fax Modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_CDMA_MSM,
+ "CDMA Technologies MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF633,
+ "ZTE MF633 USUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637,
+ "ZTE MF637 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z,
+ "ZTE K3565-Z USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP,
+ "ONDA MSA110UP USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER2,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF112,
+ "ZTE MF112 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_HSUSB,
+ "ZTE HSUSB",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC2746,
+ "AC2746 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER3,
+ "ZTE USB CDMA installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC8700,
+ "AC8700 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1201,
+ "ZD1201",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1221,
+ "ZD1221",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ALL0298,
+ "ALL0298",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B_2,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_OMNI56K,
+ "Omni 56K Plus",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220,
+ "G-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220F,
+ "G-220F",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2,
+ "G-200 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H,
+ "AG-225H",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202,
+ "M-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G270S,
+ "G-270S",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2,
+ "G-220 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G202,
+ "G-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG220,
+ "AG-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225HV2,
+ "AG-225H v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD271N,
+ "NWD-271N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD211AN,
+ "NWD-211AN",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD2105,
+ "NWD2105",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_PRESTIGE,
+ "Prestige",
+ },
+ { 0, 0, NULL }
+};
+
+const struct usb_known_vendor usb_known_vendors[] = {
+ {
+ USB_VENDOR_PLANEX4,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_UNKNOWN2,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_EGALAX2,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_UNKNOWN6,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_HUMAX,
+ "HUMAX",
+ },
+ {
+ USB_VENDOR_BWCT,
+ "Bernd Walter Computer Technology",
+ },
+ {
+ USB_VENDOR_AOX,
+ "AOX",
+ },
+ {
+ USB_VENDOR_ATMEL,
+ "Atmel",
+ },
+ {
+ USB_VENDOR_MITSUMI,
+ "Mitsumi",
+ },
+ {
+ USB_VENDOR_HP,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_ADAPTEC,
+ "Adaptec",
+ },
+ {
+ USB_VENDOR_NATIONAL,
+ "National Semiconductor",
+ },
+ {
+ USB_VENDOR_ACERLABS,
+ "Acer Labs",
+ },
+ {
+ USB_VENDOR_FTDI,
+ "Future Technology Devices",
+ },
+ {
+ USB_VENDOR_QUANTA2,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_NEC,
+ "NEC",
+ },
+ {
+ USB_VENDOR_KODAK,
+ "Eastman Kodak",
+ },
+ {
+ USB_VENDOR_VIA,
+ "VIA",
+ },
+ {
+ USB_VENDOR_MELCO,
+ "Melco",
+ },
+ {
+ USB_VENDOR_LEADTEK,
+ "Leadtek",
+ },
+ {
+ USB_VENDOR_CREATIVE,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_NOKIA2,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_ADI,
+ "ADI Systems",
+ },
+ {
+ USB_VENDOR_CATC,
+ "Computer Access Technology",
+ },
+ {
+ USB_VENDOR_SMC2,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_GRAVIS,
+ "Advanced Gravis Computer",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP,
+ "Fujitsu Component",
+ },
+ {
+ USB_VENDOR_TAUGA,
+ "Taugagreining HF",
+ },
+ {
+ USB_VENDOR_AMD,
+ "Advanced Micro Devices",
+ },
+ {
+ USB_VENDOR_LEXMARK,
+ "Lexmark International",
+ },
+ {
+ USB_VENDOR_NANAO,
+ "NANAO",
+ },
+ {
+ USB_VENDOR_ALPS,
+ "Alps Electric",
+ },
+ {
+ USB_VENDOR_THRUST,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_TI,
+ "Texas Instruments",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_SIS,
+ "Silicon Integrated Systems Corp.",
+ },
+ {
+ USB_VENDOR_KYE,
+ "KYE Systems",
+ },
+ {
+ USB_VENDOR_DIAMOND2,
+ "Diamond (Supra)",
+ },
+ {
+ USB_VENDOR_RENESAS,
+ "Renesas",
+ },
+ {
+ USB_VENDOR_MICROSOFT,
+ "Microsoft",
+ },
+ {
+ USB_VENDOR_PRIMAX,
+ "Primax Electronics",
+ },
+ {
+ USB_VENDOR_MGE,
+ "Eaton (MGE)",
+ },
+ {
+ USB_VENDOR_AMP,
+ "AMP",
+ },
+ {
+ USB_VENDOR_CHERRY,
+ "Cherry Mikroschalter",
+ },
+ {
+ USB_VENDOR_MEGATRENDS,
+ "American Megatrends",
+ },
+ {
+ USB_VENDOR_LOGITECH,
+ "Logitech",
+ },
+ {
+ USB_VENDOR_BTC,
+ "Behavior Tech. Computer",
+ },
+ {
+ USB_VENDOR_PHILIPS,
+ "Philips",
+ },
+ {
+ USB_VENDOR_SANYO,
+ "Sanyo Electric",
+ },
+ {
+ USB_VENDOR_CONNECTIX,
+ "Connectix",
+ },
+ {
+ USB_VENDOR_DELL2,
+ "Dell",
+ },
+ {
+ USB_VENDOR_KENSINGTON,
+ "Kensington",
+ },
+ {
+ USB_VENDOR_LUCENT,
+ "Lucent",
+ },
+ {
+ USB_VENDOR_PLANTRONICS,
+ "Plantronics",
+ },
+ {
+ USB_VENDOR_KYOCERA,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_STMICRO,
+ "STMicroelectronics",
+ },
+ {
+ USB_VENDOR_FOXCONN,
+ "Foxconn",
+ },
+ {
+ USB_VENDOR_YAMAHA,
+ "YAMAHA",
+ },
+ {
+ USB_VENDOR_COMPAQ,
+ "Compaq",
+ },
+ {
+ USB_VENDOR_HITACHI,
+ "Hitachi",
+ },
+ {
+ USB_VENDOR_ACERP,
+ "Acer Peripherals",
+ },
+ {
+ USB_VENDOR_DAVICOM,
+ "Davicom",
+ },
+ {
+ USB_VENDOR_VISIONEER,
+ "Visioneer",
+ },
+ {
+ USB_VENDOR_CANON,
+ "Canon",
+ },
+ {
+ USB_VENDOR_NIKON,
+ "Nikon",
+ },
+ {
+ USB_VENDOR_IBM,
+ "IBM",
+ },
+ {
+ USB_VENDOR_CYPRESS,
+ "Cypress Semiconductor",
+ },
+ {
+ USB_VENDOR_EPSON,
+ "Seiko Epson",
+ },
+ {
+ USB_VENDOR_RAINBOW,
+ "Rainbow Technologies",
+ },
+ {
+ USB_VENDOR_IODATA,
+ "I/O Data",
+ },
+ {
+ USB_VENDOR_TDK,
+ "TDK",
+ },
+ {
+ USB_VENDOR_3COMUSR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_METHODE,
+ "Methode Electronics Far East",
+ },
+ {
+ USB_VENDOR_MAXISWITCH,
+ "Maxi Switch",
+ },
+ {
+ USB_VENDOR_LOCKHEEDMER,
+ "Lockheed Martin Energy Research",
+ },
+ {
+ USB_VENDOR_FUJITSU,
+ "Fujitsu",
+ },
+ {
+ USB_VENDOR_TOSHIBAAM,
+ "Toshiba America",
+ },
+ {
+ USB_VENDOR_MICROMACRO,
+ "Micro Macro Technologies",
+ },
+ {
+ USB_VENDOR_KONICA,
+ "Konica",
+ },
+ {
+ USB_VENDOR_LITEON,
+ "Lite-On Technology",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO,
+ "Fuji Photo Film",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI,
+ "Philips Semiconductors",
+ },
+ {
+ USB_VENDOR_TATUNG,
+ "Tatung Co. Of America",
+ },
+ {
+ USB_VENDOR_SCANLOGIC,
+ "ScanLogic",
+ },
+ {
+ USB_VENDOR_MYSON,
+ "Myson Technology",
+ },
+ {
+ USB_VENDOR_DIGI2,
+ "Digi",
+ },
+ {
+ USB_VENDOR_ITTCANON,
+ "ITT Canon",
+ },
+ {
+ USB_VENDOR_ALTEC,
+ "Altec Lansing",
+ },
+ {
+ USB_VENDOR_MICROCHIP,
+ "Microchip Technology, Inc.",
+ },
+ {
+ USB_VENDOR_HOLTEK,
+ "Holtek",
+ },
+ {
+ USB_VENDOR_PANASONIC,
+ "Panasonic (Matsushita)",
+ },
+ {
+ USB_VENDOR_SHARP,
+ "Sharp",
+ },
+ {
+ USB_VENDOR_IIYAMA,
+ "Iiyama",
+ },
+ {
+ USB_VENDOR_EXAR,
+ "Exar",
+ },
+ {
+ USB_VENDOR_SHUTTLE,
+ "Shuttle Technology",
+ },
+ {
+ USB_VENDOR_SAMSUNG2,
+ "Samsung Electronics",
+ },
+ {
+ USB_VENDOR_ANNABOOKS,
+ "Annabooks",
+ },
+ {
+ USB_VENDOR_JVC,
+ "JVC",
+ },
+ {
+ USB_VENDOR_CHICONY,
+ "Chicony Electronics",
+ },
+ {
+ USB_VENDOR_ELAN,
+ "Elan",
+ },
+ {
+ USB_VENDOR_BROTHER,
+ "Brother Industries",
+ },
+ {
+ USB_VENDOR_DALLAS,
+ "Dallas Semiconductor",
+ },
+ {
+ USB_VENDOR_ACER,
+ "Acer",
+ },
+ {
+ USB_VENDOR_3COM,
+ "3Com",
+ },
+ {
+ USB_VENDOR_AZTECH,
+ "Aztech Systems",
+ },
+ {
+ USB_VENDOR_BELKIN,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_KAWATSU,
+ "Kawatsu Semiconductor",
+ },
+ {
+ USB_VENDOR_APC,
+ "American Power Conversion",
+ },
+ {
+ USB_VENDOR_CONNECTEK,
+ "Advanced Connectek USA",
+ },
+ {
+ USB_VENDOR_NETCHIP,
+ "NetChip Technology",
+ },
+ {
+ USB_VENDOR_ALTRA,
+ "ALTRA",
+ },
+ {
+ USB_VENDOR_ATI,
+ "ATI Technologies",
+ },
+ {
+ USB_VENDOR_AKS,
+ "Aladdin Knowledge Systems",
+ },
+ {
+ USB_VENDOR_UNIACCESS,
+ "Universal Access",
+ },
+ {
+ USB_VENDOR_VIEWSONIC,
+ "ViewSonic",
+ },
+ {
+ USB_VENDOR_XIRLINK,
+ "Xirlink",
+ },
+ {
+ USB_VENDOR_ANCHOR,
+ "Anchor Chips",
+ },
+ {
+ USB_VENDOR_SONY,
+ "Sony",
+ },
+ {
+ USB_VENDOR_VISION,
+ "VLSI Vision",
+ },
+ {
+ USB_VENDOR_ASAHIKASEI,
+ "Asahi Kasei Microsystems",
+ },
+ {
+ USB_VENDOR_ATEN,
+ "ATEN International",
+ },
+ {
+ USB_VENDOR_SAMSUNG,
+ "Samsung",
+ },
+ {
+ USB_VENDOR_MUSTEK,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_TELEX,
+ "Telex Communications",
+ },
+ {
+ USB_VENDOR_PERACOM,
+ "Peracom Networks",
+ },
+ {
+ USB_VENDOR_ALCOR2,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_WACOM,
+ "WACOM",
+ },
+ {
+ USB_VENDOR_ETEK,
+ "e-TEK Labs",
+ },
+ {
+ USB_VENDOR_EIZO,
+ "EIZO",
+ },
+ {
+ USB_VENDOR_ELECOM,
+ "Elecom",
+ },
+ {
+ USB_VENDOR_XYRATEX,
+ "Xyratex",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE,
+ "Hauppauge Computer Works",
+ },
+ {
+ USB_VENDOR_BAFO,
+ "BAFO/Quality Computer Accessories",
+ },
+ {
+ USB_VENDOR_YEDATA,
+ "Y-E Data",
+ },
+ {
+ USB_VENDOR_AVM,
+ "AVM",
+ },
+ {
+ USB_VENDOR_QUICKSHOT,
+ "Quickshot",
+ },
+ {
+ USB_VENDOR_ROLAND,
+ "Roland",
+ },
+ {
+ USB_VENDOR_ROCKFIRE,
+ "Rockfire",
+ },
+ {
+ USB_VENDOR_RATOC,
+ "RATOC Systems",
+ },
+ {
+ USB_VENDOR_ZYXEL,
+ "ZyXEL Communication",
+ },
+ {
+ USB_VENDOR_ALCOR,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_OMRON,
+ "OMRON Corporation",
+ },
+ {
+ USB_VENDOR_IOMEGA,
+ "Iomega",
+ },
+ {
+ USB_VENDOR_ATREND,
+ "A-Trend Technology",
+ },
+ {
+ USB_VENDOR_AID,
+ "Advanced Input Devices",
+ },
+ {
+ USB_VENDOR_LACIE,
+ "LaCie",
+ },
+ {
+ USB_VENDOR_THRUSTMASTER,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_OMNIVISION,
+ "OmniVision",
+ },
+ {
+ USB_VENDOR_INSYSTEM,
+ "In-System Design",
+ },
+ {
+ USB_VENDOR_APPLE,
+ "Apple Computer",
+ },
+ {
+ USB_VENDOR_YCCABLE,
+ "Y.C. Cable",
+ },
+ {
+ USB_VENDOR_JINGMOLD,
+ "Jing Mold",
+ },
+ {
+ USB_VENDOR_DIGI,
+ "Digi International",
+ },
+ {
+ USB_VENDOR_QUALCOMM,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_QTRONIX,
+ "Qtronix",
+ },
+ {
+ USB_VENDOR_RICOH,
+ "Ricoh",
+ },
+ {
+ USB_VENDOR_ELSA,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_BRAINBOXES,
+ "Brainboxes",
+ },
+ {
+ USB_VENDOR_ULTIMA,
+ "Ultima",
+ },
+ {
+ USB_VENDOR_AXIOHM,
+ "Axiohm Transaction Solutions",
+ },
+ {
+ USB_VENDOR_MICROTEK,
+ "Microtek",
+ },
+ {
+ USB_VENDOR_SUNTAC,
+ "SUN Corporation",
+ },
+ {
+ USB_VENDOR_LEXAR,
+ "Lexar Media",
+ },
+ {
+ USB_VENDOR_ADDTRON,
+ "Addtron",
+ },
+ {
+ USB_VENDOR_SYMBOL,
+ "Symbol Technologies",
+ },
+ {
+ USB_VENDOR_GENESYS,
+ "Genesys Logic",
+ },
+ {
+ USB_VENDOR_FUJI,
+ "Fuji Electric",
+ },
+ {
+ USB_VENDOR_KEITHLEY,
+ "Keithley Instruments",
+ },
+ {
+ USB_VENDOR_EIZONANAO,
+ "EIZO Nanao",
+ },
+ {
+ USB_VENDOR_KLSI,
+ "Kawasaki LSI",
+ },
+ {
+ USB_VENDOR_FFC,
+ "FFC",
+ },
+ {
+ USB_VENDOR_ANKO,
+ "Anko Electronic",
+ },
+ {
+ USB_VENDOR_PIENGINEERING,
+ "P.I. Engineering",
+ },
+ {
+ USB_VENDOR_AOC,
+ "AOC International",
+ },
+ {
+ USB_VENDOR_CHIC,
+ "Chic Technology",
+ },
+ {
+ USB_VENDOR_BARCO,
+ "Barco Display Systems",
+ },
+ {
+ USB_VENDOR_BRIDGE,
+ "Bridge Information",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR,
+ "Solid Year",
+ },
+ {
+ USB_VENDOR_BIORAD,
+ "Bio-Rad Laboratories",
+ },
+ {
+ USB_VENDOR_MACALLY,
+ "Macally",
+ },
+ {
+ USB_VENDOR_ACTLABS,
+ "Act Labs",
+ },
+ {
+ USB_VENDOR_ALARIS,
+ "Alaris",
+ },
+ {
+ USB_VENDOR_APEX,
+ "Apex",
+ },
+ {
+ USB_VENDOR_VIVITAR,
+ "Vivitar",
+ },
+ {
+ USB_VENDOR_GUNZE,
+ "Gunze Electronics USA",
+ },
+ {
+ USB_VENDOR_AVISION,
+ "Avision",
+ },
+ {
+ USB_VENDOR_TEAC,
+ "TEAC",
+ },
+ {
+ USB_VENDOR_SGI,
+ "Silicon Graphics",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY,
+ "Sanwa Supply",
+ },
+ {
+ USB_VENDOR_MUSTEK2,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_LINKSYS,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_ACERSA,
+ "Acer Semiconductor America",
+ },
+ {
+ USB_VENDOR_SIGMATEL,
+ "Sigmatel",
+ },
+ {
+ USB_VENDOR_DRAYTEK,
+ "DrayTek",
+ },
+ {
+ USB_VENDOR_AIWA,
+ "Aiwa",
+ },
+ {
+ USB_VENDOR_ACARD,
+ "ACARD Technology",
+ },
+ {
+ USB_VENDOR_PROLIFIC,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_SIEMENS,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC,
+ "Avance Logic",
+ },
+ {
+ USB_VENDOR_SIEMENS2,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_MINOLTA,
+ "Minolta",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS,
+ "CH Products",
+ },
+ {
+ USB_VENDOR_HAGIWARA,
+ "Hagiwara Sys-Com",
+ },
+ {
+ USB_VENDOR_CTX,
+ "Chuntex",
+ },
+ {
+ USB_VENDOR_ASKEY,
+ "Askey Computer",
+ },
+ {
+ USB_VENDOR_SAITEK,
+ "Saitek",
+ },
+ {
+ USB_VENDOR_ALCATELT,
+ "Alcatel Telecom",
+ },
+ {
+ USB_VENDOR_AGFA,
+ "AGFA-Gevaert",
+ },
+ {
+ USB_VENDOR_ASIAMD,
+ "Asia Microelectronic Development",
+ },
+ {
+ USB_VENDOR_PHIDGETS,
+ "Phidgets",
+ },
+ {
+ USB_VENDOR_BIZLINK,
+ "Bizlink International",
+ },
+ {
+ USB_VENDOR_KEYSPAN,
+ "Keyspan",
+ },
+ {
+ USB_VENDOR_AASHIMA,
+ "Aashima Technology",
+ },
+ {
+ USB_VENDOR_LIEBERT,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_MULTITECH,
+ "MultiTech",
+ },
+ {
+ USB_VENDOR_ADS,
+ "ADS Technologies",
+ },
+ {
+ USB_VENDOR_ALCATELM,
+ "Alcatel Microelectronics",
+ },
+ {
+ USB_VENDOR_SIRIUS,
+ "Sirius Technologies",
+ },
+ {
+ USB_VENDOR_GUILLEMOT,
+ "Guillemot",
+ },
+ {
+ USB_VENDOR_BOSTON,
+ "Boston Acoustics",
+ },
+ {
+ USB_VENDOR_SMC,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_PUTERCOM,
+ "Putercom",
+ },
+ {
+ USB_VENDOR_MCT,
+ "MCT",
+ },
+ {
+ USB_VENDOR_IMATION,
+ "Imation",
+ },
+ {
+ USB_VENDOR_DOMAIN,
+ "Domain Technologies, Inc.",
+ },
+ {
+ USB_VENDOR_SUSTEEN,
+ "Susteen",
+ },
+ {
+ USB_VENDOR_EICON,
+ "Eicon Networks",
+ },
+ {
+ USB_VENDOR_STOLLMANN,
+ "Stollmann",
+ },
+ {
+ USB_VENDOR_SYNTECH,
+ "Syntech Information",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM,
+ "Digital Stream",
+ },
+ {
+ USB_VENDOR_AUREAL,
+ "Aureal Semiconductor",
+ },
+ {
+ USB_VENDOR_IDOWELL,
+ "iDowell",
+ },
+ {
+ USB_VENDOR_MIDIMAN,
+ "Midiman",
+ },
+ {
+ USB_VENDOR_CYBERPOWER,
+ "CyberPower",
+ },
+ {
+ USB_VENDOR_SURECOM,
+ "Surecom Technology",
+ },
+ {
+ USB_VENDOR_LINKSYS2,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_GRIFFIN,
+ "Griffin Technology",
+ },
+ {
+ USB_VENDOR_SANDISK,
+ "SanDisk",
+ },
+ {
+ USB_VENDOR_JENOPTIK,
+ "Jenoptik",
+ },
+ {
+ USB_VENDOR_LOGITEC,
+ "Logitec",
+ },
+ {
+ USB_VENDOR_NOKIA,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_BRIMAX,
+ "Brimax",
+ },
+ {
+ USB_VENDOR_AXIS,
+ "Axis Communications",
+ },
+ {
+ USB_VENDOR_ABL,
+ "ABL Electronics",
+ },
+ {
+ USB_VENDOR_SAGEM,
+ "Sagem",
+ },
+ {
+ USB_VENDOR_SUNCOMM,
+ "Sun Communications",
+ },
+ {
+ USB_VENDOR_ALFADATA,
+ "Alfadata Computer",
+ },
+ {
+ USB_VENDOR_NATIONALTECH,
+ "National Technical Systems",
+ },
+ {
+ USB_VENDOR_ONNTO,
+ "Onnto",
+ },
+ {
+ USB_VENDOR_BE,
+ "Be",
+ },
+ {
+ USB_VENDOR_ADMTEK,
+ "ADMtek",
+ },
+ {
+ USB_VENDOR_COREGA,
+ "Corega",
+ },
+ {
+ USB_VENDOR_FREECOM,
+ "Freecom",
+ },
+ {
+ USB_VENDOR_MICROTECH,
+ "Microtech",
+ },
+ {
+ USB_VENDOR_MOTOROLA3,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_OLYMPUS,
+ "Olympus",
+ },
+ {
+ USB_VENDOR_ABOCOM,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN,
+ "Keisokugiken",
+ },
+ {
+ USB_VENDOR_ONSPEC,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_APG,
+ "APG Cash Drawer",
+ },
+ {
+ USB_VENDOR_BUG,
+ "B.U.G.",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN,
+ "Allied Telesyn International",
+ },
+ {
+ USB_VENDOR_AVERMEDIA,
+ "AVerMedia Technologies",
+ },
+ {
+ USB_VENDOR_SIIG,
+ "SIIG",
+ },
+ {
+ USB_VENDOR_CASIO,
+ "CASIO",
+ },
+ {
+ USB_VENDOR_DLINK2,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_APTIO,
+ "Aptio Products",
+ },
+ {
+ USB_VENDOR_ARASAN,
+ "Arasan Chip Systems",
+ },
+ {
+ USB_VENDOR_ALLIEDCABLE,
+ "Allied Cable",
+ },
+ {
+ USB_VENDOR_STSN,
+ "STSN",
+ },
+ {
+ USB_VENDOR_BEWAN,
+ "Bewan",
+ },
+ {
+ USB_VENDOR_ZOOM,
+ "Zoom Telephonics",
+ },
+ {
+ USB_VENDOR_BROADLOGIC,
+ "BroadLogic",
+ },
+ {
+ USB_VENDOR_HANDSPRING,
+ "Handspring",
+ },
+ {
+ USB_VENDOR_PALM,
+ "Palm Computing",
+ },
+ {
+ USB_VENDOR_SOURCENEXT,
+ "SOURCENEXT",
+ },
+ {
+ USB_VENDOR_ACTIONSTAR,
+ "Action Star Enterprise",
+ },
+ {
+ USB_VENDOR_ACCTON,
+ "Accton Technology",
+ },
+ {
+ USB_VENDOR_DIAMOND,
+ "Diamond",
+ },
+ {
+ USB_VENDOR_NETGEAR,
+ "BayNETGEAR",
+ },
+ {
+ USB_VENDOR_TOPRE,
+ "Topre Corporation",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE,
+ "ActiveWire",
+ },
+ {
+ USB_VENDOR_BBELECTR,
+ "B&B Electronics",
+ },
+ {
+ USB_VENDOR_PORTGEAR,
+ "PortGear",
+ },
+ {
+ USB_VENDOR_NETGEAR2,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS,
+ "System Talks",
+ },
+ {
+ USB_VENDOR_METRICOM,
+ "Metricom",
+ },
+ {
+ USB_VENDOR_ADESSOKBTEK,
+ "ADESSO/Kbtek America",
+ },
+ {
+ USB_VENDOR_JATON,
+ "Jaton",
+ },
+ {
+ USB_VENDOR_APT,
+ "APT Technologies",
+ },
+ {
+ USB_VENDOR_BOCARESEARCH,
+ "Boca Research",
+ },
+ {
+ USB_VENDOR_ANDREA,
+ "Andrea Electronics",
+ },
+ {
+ USB_VENDOR_BURRBROWN,
+ "Burr-Brown Japan",
+ },
+ {
+ USB_VENDOR_2WIRE,
+ "2Wire",
+ },
+ {
+ USB_VENDOR_AIPTEK,
+ "AIPTEK International",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES,
+ "SmartBridges",
+ },
+ {
+ USB_VENDOR_BILLIONTON,
+ "Billionton Systems",
+ },
+ {
+ USB_VENDOR_GEMPLUS,
+ "GEMPLUS",
+ },
+ {
+ USB_VENDOR_EXTENDED,
+ "Extended Systems",
+ },
+ {
+ USB_VENDOR_MSYSTEMS,
+ "M-Systems",
+ },
+ {
+ USB_VENDOR_DIGIANSWER,
+ "Digianswer",
+ },
+ {
+ USB_VENDOR_AUTHENTEC,
+ "AuthenTec",
+ },
+ {
+ USB_VENDOR_SIEMENS4,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA,
+ "Audio-Technica",
+ },
+ {
+ USB_VENDOR_TRUMPION,
+ "Trumpion Microelectronics",
+ },
+ {
+ USB_VENDOR_ALATION,
+ "Alation Systems",
+ },
+ {
+ USB_VENDOR_GLOBESPAN,
+ "Globespan",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA,
+ "Concord Camera",
+ },
+ {
+ USB_VENDOR_GARMIN,
+ "Garmin International",
+ },
+ {
+ USB_VENDOR_GOHUBS,
+ "GoHubs",
+ },
+ {
+ USB_VENDOR_BIOMETRIC,
+ "American Biometric Company",
+ },
+ {
+ USB_VENDOR_TOSHIBA,
+ "Toshiba Corp",
+ },
+ {
+ USB_VENDOR_INTREPIDCS,
+ "Intrepid",
+ },
+ {
+ USB_VENDOR_YANO,
+ "Yano",
+ },
+ {
+ USB_VENDOR_KINGSTON,
+ "Kingston Technology",
+ },
+ {
+ USB_VENDOR_BLUEWATER,
+ "BlueWater Systems",
+ },
+ {
+ USB_VENDOR_AGILENT,
+ "Agilent Technologies",
+ },
+ {
+ USB_VENDOR_GUDE,
+ "Gude ADS",
+ },
+ {
+ USB_VENDOR_PORTSMITH,
+ "Portsmith",
+ },
+ {
+ USB_VENDOR_ACERW,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ADIRONDACK,
+ "Adirondack Wire & Cable",
+ },
+ {
+ USB_VENDOR_BECKHOFF,
+ "Beckhoff",
+ },
+ {
+ USB_VENDOR_MINDSATWORK,
+ "Minds At Work",
+ },
+ {
+ USB_VENDOR_INTERSIL,
+ "Intersil",
+ },
+ {
+ USB_VENDOR_ALTIUS,
+ "Altius Solutions",
+ },
+ {
+ USB_VENDOR_ARRIS,
+ "Arris Interactive",
+ },
+ {
+ USB_VENDOR_ACTIVCARD,
+ "ACTIVCARD",
+ },
+ {
+ USB_VENDOR_ACTISYS,
+ "ACTiSYS",
+ },
+ {
+ USB_VENDOR_NOVATEL1,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_AFOURTECH,
+ "A-FOUR TECH",
+ },
+ {
+ USB_VENDOR_AIMEX,
+ "AIMEX",
+ },
+ {
+ USB_VENDOR_ADDONICS,
+ "Addonics Technologies",
+ },
+ {
+ USB_VENDOR_AKAI,
+ "AKAI professional M.I.",
+ },
+ {
+ USB_VENDOR_ARESCOM,
+ "ARESCOM",
+ },
+ {
+ USB_VENDOR_BAY,
+ "Bay Associates",
+ },
+ {
+ USB_VENDOR_ALTERA,
+ "Altera",
+ },
+ {
+ USB_VENDOR_CSR,
+ "Cambridge Silicon Radio",
+ },
+ {
+ USB_VENDOR_TREK,
+ "Trek Technology",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL,
+ "Asahi Optical",
+ },
+ {
+ USB_VENDOR_BOCASYSTEMS,
+ "Boca Systems",
+ },
+ {
+ USB_VENDOR_SHANTOU,
+ "ShanTou",
+ },
+ {
+ USB_VENDOR_HIROSE,
+ "Hirose",
+ },
+ {
+ USB_VENDOR_BROADCOM,
+ "Broadcom",
+ },
+ {
+ USB_VENDOR_GREENHOUSE,
+ "GREENHOUSE",
+ },
+ {
+ USB_VENDOR_GEOCAST,
+ "Geocast Network Systems",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY,
+ "Dream Cheeky",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE,
+ "id Quantique",
+ },
+ {
+ USB_VENDOR_IDTECH,
+ "ID TECH",
+ },
+ {
+ USB_VENDOR_ZYDAS,
+ "ZyDAS Technology",
+ },
+ {
+ USB_VENDOR_CHENSOURCE,
+ "Chen-Source",
+ },
+ {
+ USB_VENDOR_NEODIO,
+ "Neodio",
+ },
+ {
+ USB_VENDOR_OPTION,
+ "Option",
+ },
+ {
+ USB_VENDOR_ASUS,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_TODOS,
+ "Todos Data System",
+ },
+ {
+ USB_VENDOR_OCT,
+ "Omnidirectional Control Technology",
+ },
+ {
+ USB_VENDOR_TEKRAM,
+ "Tekram Technology",
+ },
+ {
+ USB_VENDOR_HAL,
+ "HAL Corporation",
+ },
+ {
+ USB_VENDOR_NEC2,
+ "NEC",
+ },
+ {
+ USB_VENDOR_ATI2,
+ "ATI",
+ },
+ {
+ USB_VENDOR_KURUSUGAWA,
+ "Kurusugawa Electronics",
+ },
+ {
+ USB_VENDOR_SMART,
+ "Smart Technologies",
+ },
+ {
+ USB_VENDOR_ASIX,
+ "ASIX Electronics",
+ },
+ {
+ USB_VENDOR_O2MICRO,
+ "O2 Micro",
+ },
+ {
+ USB_VENDOR_SACOM,
+ "System SACOM Industry Co.,Ltd",
+ },
+ {
+ USB_VENDOR_USR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_AMBIT,
+ "Ambit Microsystems",
+ },
+ {
+ USB_VENDOR_HTC,
+ "HTC",
+ },
+ {
+ USB_VENDOR_REALTEK,
+ "Realtek",
+ },
+ {
+ USB_VENDOR_MEI,
+ "MEI",
+ },
+ {
+ USB_VENDOR_ADDONICS2,
+ "Addonics Technology",
+ },
+ {
+ USB_VENDOR_FSC,
+ "Fujitsu Siemens Computers",
+ },
+ {
+ USB_VENDOR_AGATE,
+ "Agate Technologies",
+ },
+ {
+ USB_VENDOR_DMI,
+ "DMI",
+ },
+ {
+ USB_VENDOR_ICOM,
+ "Icom",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS,
+ "GN Otometrics",
+ },
+ {
+ USB_VENDOR_MICRODIA,
+ "Microdia / Sonix Technology Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SEALEVEL,
+ "Sealevel System",
+ },
+ {
+ USB_VENDOR_JETI,
+ "JETI",
+ },
+ {
+ USB_VENDOR_EASYDISK,
+ "EasyDisk",
+ },
+ {
+ USB_VENDOR_ELEKTOR,
+ "Elektor Electronics",
+ },
+ {
+ USB_VENDOR_KYOCERA2,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_TERRATEC,
+ "TerraTec Electronic GmbH",
+ },
+ {
+ USB_VENDOR_ZCOM,
+ "Z-Com",
+ },
+ {
+ USB_VENDOR_ATHEROS2,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_POSIFLEX,
+ "Posiflex Technologies",
+ },
+ {
+ USB_VENDOR_TANGTOP,
+ "Tangtop",
+ },
+ {
+ USB_VENDOR_KOBIL,
+ "Kobil Systems",
+ },
+ {
+ USB_VENDOR_SMC3,
+ "SMC",
+ },
+ {
+ USB_VENDOR_PEN,
+ "Pen Drive",
+ },
+ {
+ USB_VENDOR_ABC,
+ "ABC",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_MSI,
+ "Micro Star International",
+ },
+ {
+ USB_VENDOR_ELCON,
+ "ELCON Systemtechnik",
+ },
+ {
+ USB_VENDOR_UNKNOWN5,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_SITECOMEU,
+ "Sitecom Europe",
+ },
+ {
+ USB_VENDOR_MOBILEACTION,
+ "Mobile Action",
+ },
+ {
+ USB_VENDOR_AMIGO,
+ "Amigo Technology",
+ },
+ {
+ USB_VENDOR_VMWARE,
+ "VMware",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON,
+ "Speed Dragon Multimedia",
+ },
+ {
+ USB_VENDOR_CTC,
+ "CONWISE Technology",
+ },
+ {
+ USB_VENDOR_HAWKING,
+ "Hawking",
+ },
+ {
+ USB_VENDOR_FOSSIL,
+ "Fossil",
+ },
+ {
+ USB_VENDOR_GMATE,
+ "G.Mate",
+ },
+ {
+ USB_VENDOR_MEDIATEK,
+ "MediaTek Inc.",
+ },
+ {
+ USB_VENDOR_OTI,
+ "Ours Technology",
+ },
+ {
+ USB_VENDOR_PILOTECH,
+ "Pilotech",
+ },
+ {
+ USB_VENDOR_NOVATECH,
+ "Nova Tech",
+ },
+ {
+ USB_VENDOR_ITEGNO,
+ "iTegno",
+ },
+ {
+ USB_VENDOR_NORITAKE,
+ "Noritake itron Corp",
+ },
+ {
+ USB_VENDOR_EGALAX,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_XIRING,
+ "XIRING",
+ },
+ {
+ USB_VENDOR_AIRPRIME,
+ "Airprime",
+ },
+ {
+ USB_VENDOR_VTECH,
+ "VTech",
+ },
+ {
+ USB_VENDOR_FALCOM,
+ "Falcom Wireless Communications",
+ },
+ {
+ USB_VENDOR_RIM,
+ "Research In Motion",
+ },
+ {
+ USB_VENDOR_DYNASTREAM,
+ "Dynastream Innovations",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD,
+ "Larsen and Brusgaard",
+ },
+ {
+ USB_VENDOR_OREGONSCI,
+ "Oregon Scientific",
+ },
+ {
+ USB_VENDOR_UNKNOWN4,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_DVICO,
+ "DViCO",
+ },
+ {
+ USB_VENDOR_QUALCOMM2,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_MOTOROLA4,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_HP3,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_THURLBY,
+ "Thurlby Thandar Instruments",
+ },
+ {
+ USB_VENDOR_GIGABYTE,
+ "GIGABYTE",
+ },
+ {
+ USB_VENDOR_YUBICO,
+ "Yubico.com",
+ },
+ {
+ USB_VENDOR_MOTOROLA,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_CCYU,
+ "CCYU Technology",
+ },
+ {
+ USB_VENDOR_HYUNDAI,
+ "Hyundai",
+ },
+ {
+ USB_VENDOR_GCTSEMICON,
+ "GCT Semiconductor",
+ },
+ {
+ USB_VENDOR_SILABS2,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_USI,
+ "USI",
+ },
+ {
+ USB_VENDOR_LIEBERT2,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_PLX,
+ "PLX",
+ },
+ {
+ USB_VENDOR_ASANTE,
+ "Asante",
+ },
+ {
+ USB_VENDOR_SILABS,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS3,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS4,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_VELLEMAN,
+ "Velleman",
+ },
+ {
+ USB_VENDOR_MOXA,
+ "Moxa Technologies",
+ },
+ {
+ USB_VENDOR_ANALOG,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_TENX,
+ "Ten X Technology, Inc.",
+ },
+ {
+ USB_VENDOR_ISSC,
+ "Integrated System Solution Corp.",
+ },
+ {
+ USB_VENDOR_JRC,
+ "Japan Radio Company",
+ },
+ {
+ USB_VENDOR_SPHAIRON,
+ "Sphairon Access Systems",
+ },
+ {
+ USB_VENDOR_DELORME,
+ "DeLorme",
+ },
+ {
+ USB_VENDOR_SERVERWORKS,
+ "ServerWorks",
+ },
+ {
+ USB_VENDOR_ACERCM,
+ "Acer Communications & Multimedia",
+ },
+ {
+ USB_VENDOR_SIERRA,
+ "Sierra Wireless",
+ },
+ {
+ USB_VENDOR_SIEMENS3,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_ALCATEL,
+ "Alcatel",
+ },
+ {
+ USB_VENDOR_INTERBIO,
+ "InterBiometrics",
+ },
+ {
+ USB_VENDOR_UNKNOWN3,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_TSUNAMI,
+ "Tsunami",
+ },
+ {
+ USB_VENDOR_PHEENET,
+ "Pheenet",
+ },
+ {
+ USB_VENDOR_RAPTORGAMING,
+ "Raptor Gaming",
+ },
+ {
+ USB_VENDOR_TWINMOS,
+ "TwinMOS",
+ },
+ {
+ USB_VENDOR_TENDA,
+ "Tenda",
+ },
+ {
+ USB_VENDOR_TESTO,
+ "Testo AG",
+ },
+ {
+ USB_VENDOR_CREATIVE2,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_BELKIN2,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_CYBERTAN,
+ "CyberTAN Technology",
+ },
+ {
+ USB_VENDOR_HUAWEI,
+ "HUAWEI Technologies",
+ },
+ {
+ USB_VENDOR_ARANEUS,
+ "Araneus Information Systems",
+ },
+ {
+ USB_VENDOR_TAPWAVE,
+ "Tapwave",
+ },
+ {
+ USB_VENDOR_AINCOMM,
+ "Aincomm",
+ },
+ {
+ USB_VENDOR_MOBILITY,
+ "Mobility",
+ },
+ {
+ USB_VENDOR_DICKSMITH,
+ "Dick Smith Electronics",
+ },
+ {
+ USB_VENDOR_NETGEAR3,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_VALIDITY,
+ "Validity Sensors",
+ },
+ {
+ USB_VENDOR_BALTECH,
+ "Baltech",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_SHARK,
+ "Shark",
+ },
+ {
+ USB_VENDOR_AZUREWAVE,
+ "AsureWave",
+ },
+ {
+ USB_VENDOR_NOVATEL,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB,
+ "Wistron NeWeb",
+ },
+ {
+ USB_VENDOR_RADIOSHACK,
+ "Radio Shack",
+ },
+ {
+ USB_VENDOR_OPENMOKO,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM,
+ "Huawei 3Com",
+ },
+ {
+ USB_VENDOR_ABOCOM2,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_SILICOM,
+ "Silicom",
+ },
+ {
+ USB_VENDOR_RALINK,
+ "Ralink Technology",
+ },
+ {
+ USB_VENDOR_STARTECH,
+ "StarTech.com",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_SUPERTOP,
+ "SuperTop",
+ },
+ {
+ USB_VENDOR_PLANEX3,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS,
+ "Silicon Portals",
+ },
+ {
+ USB_VENDOR_UBLOX,
+ "U-blox",
+ },
+ {
+ USB_VENDOR_OWEN,
+ "Owen",
+ },
+ {
+ USB_VENDOR_OQO,
+ "OQO",
+ },
+ {
+ USB_VENDOR_UMEDIA,
+ "U-MEDIA Communications",
+ },
+ {
+ USB_VENDOR_FIBERLINE,
+ "Fiberline",
+ },
+ {
+ USB_VENDOR_SPARKLAN,
+ "SparkLAN",
+ },
+ {
+ USB_VENDOR_OLIMEX,
+ "Olimex",
+ },
+ {
+ USB_VENDOR_AMIT2,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_TRUST,
+ "Trust",
+ },
+ {
+ USB_VENDOR_SOHOWARE,
+ "SOHOware",
+ },
+ {
+ USB_VENDOR_UMAX,
+ "UMAX Data Systems",
+ },
+ {
+ USB_VENDOR_INSIDEOUT,
+ "Inside Out Networks",
+ },
+ {
+ USB_VENDOR_GOODWAY,
+ "Good Way Technology",
+ },
+ {
+ USB_VENDOR_ENTREGA,
+ "Entrega",
+ },
+ {
+ USB_VENDOR_ACTIONTEC,
+ "Actiontec Electronics",
+ },
+ {
+ USB_VENDOR_CLIPSAL,
+ "Clipsal",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_ATHEROS,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_GIGASET,
+ "Gigaset",
+ },
+ {
+ USB_VENDOR_GLOBALSUN,
+ "Global Sun Technology",
+ },
+ {
+ USB_VENDOR_VOTI,
+ "Van Ooijen Technische Informatica",
+ },
+ {
+ USB_VENDOR_ANYDATA,
+ "AnyDATA Inc.",
+ },
+ {
+ USB_VENDOR_JABLOTRON,
+ "Jablotron",
+ },
+ {
+ USB_VENDOR_CMOTECH,
+ "CMOTECH",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS,
+ "WIENER Plein & Baus",
+ },
+ {
+ USB_VENDOR_AXESSTEL,
+ "Axesstel",
+ },
+ {
+ USB_VENDOR_LINKSYS4,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_SENAO,
+ "Senao",
+ },
+ {
+ USB_VENDOR_ASUS2,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX,
+ "Strawberry linux Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SWEEX2,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_MECANIQUE,
+ "Mecanique",
+ },
+ {
+ USB_VENDOR_KAMSTRUP,
+ "Kamstrup A/S",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK,
+ "DisplayLink",
+ },
+ {
+ USB_VENDOR_LENOVO,
+ "Lenovo",
+ },
+ {
+ USB_VENDOR_WAVESENSE,
+ "WaveSense",
+ },
+ {
+ USB_VENDOR_VAISALA,
+ "VAISALA",
+ },
+ {
+ USB_VENDOR_AMIT,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_GOOGLE,
+ "Google",
+ },
+ {
+ USB_VENDOR_QCOM,
+ "Qcom",
+ },
+ {
+ USB_VENDOR_ELV,
+ "ELV",
+ },
+ {
+ USB_VENDOR_LINKSYS3,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_AVAGO,
+ "Avago",
+ },
+ {
+ USB_VENDOR_MEINBERG,
+ "Meinberg Funkuhren",
+ },
+ {
+ USB_VENDOR_ZTE,
+ "ZTE Inc.",
+ },
+ {
+ USB_VENDOR_QUANTA,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_TERMINUS,
+ "Terminus Technology",
+ },
+ {
+ USB_VENDOR_ABBOTT,
+ "Abbott Labs",
+ },
+ {
+ USB_VENDOR_BAYER,
+ "Bayer Health Care",
+ },
+ {
+ USB_VENDOR_WCH2,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_SEL,
+ "Schweitzer Engineering Laboratories",
+ },
+ {
+ USB_VENDOR_CORSAIR,
+ "Corsair",
+ },
+ {
+ USB_VENDOR_MATRIXORB,
+ "Matrix Orbital",
+ },
+ {
+ USB_VENDOR_TORADEX,
+ "Toradex inc.",
+ },
+ {
+ USB_VENDOR_FUSHICAI,
+ "Fushicai",
+ },
+ {
+ USB_VENDOR_OVISLINK,
+ "OvisLink",
+ },
+ {
+ USB_VENDOR_TML,
+ "The Mobility Lab",
+ },
+ {
+ USB_VENDOR_SILABS5,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_TCTMOBILE,
+ "TCT Mobile",
+ },
+ {
+ USB_VENDOR_MDS,
+ "MDS",
+ },
+ {
+ USB_VENDOR_ALTI2,
+ "Alti-2",
+ },
+ {
+ USB_VENDOR_SUNPLUS,
+ "Sunplus",
+ },
+ {
+ USB_VENDOR_WAGO,
+ "WAGO Kontakttechnik",
+ },
+ {
+ USB_VENDOR_LONGCHEER,
+ "Longcheer Technology",
+ },
+ {
+ USB_VENDOR_DRESDENELEC,
+ "Dresden Elektronic",
+ },
+ {
+ USB_VENDOR_DREAMLINK,
+ "Dream Link",
+ },
+ {
+ USB_VENDOR_PEGATRON,
+ "Pegatron",
+ },
+ {
+ USB_VENDOR_OPENMOKO2,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_SELUXIT,
+ "Seluxit",
+ },
+ {
+ USB_VENDOR_METAGEEK,
+ "MetaGeek",
+ },
+ {
+ USB_VENDOR_SIMCOM,
+ "SIMCom Wireless Solutions Co., Ltd.",
+ },
+ {
+ USB_VENDOR_FESTO,
+ "Festo",
+ },
+ {
+ USB_VENDOR_MODACOM,
+ "Modacom",
+ },
+ {
+ USB_VENDOR_AIRTIES,
+ "AirTies",
+ },
+ {
+ USB_VENDOR_LAKESHORE,
+ "Lake Shore",
+ },
+ {
+ USB_VENDOR_VERTEX,
+ "Vertex Wireless Co., Ltd.",
+ },
+ {
+ USB_VENDOR_DLINK,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_PLANEX2,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_ENCORE,
+ "Encore",
+ },
+ {
+ USB_VENDOR_PARA,
+ "PARA Industrial",
+ },
+ {
+ USB_VENDOR_TRENDNET,
+ "TRENDnet",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS,
+ "RT Systems",
+ },
+ {
+ USB_VENDOR_DLINK3,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_VIALABS,
+ "VIA Labs",
+ },
+ {
+ USB_VENDOR_MOTOROLA2,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_ARDUINO,
+ "Arduino SA",
+ },
+ {
+ USB_VENDOR_TPLINK,
+ "TP-Link",
+ },
+ {
+ USB_VENDOR_WMR,
+ "West Mountain Radio",
+ },
+ {
+ USB_VENDOR_TRIPPLITE,
+ "Tripp-Lite",
+ },
+ {
+ USB_VENDOR_ARUBA,
+ "Aruba",
+ },
+ {
+ USB_VENDOR_XIAOMI,
+ "Xiaomi",
+ },
+ {
+ USB_VENDOR_NHJ,
+ "NHJ",
+ },
+ {
+ USB_VENDOR_ASUSTEK,
+ "ASUSTeK Computer",
+ },
+ {
+ USB_VENDOR_PLANEX,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS,
+ "Link Instruments",
+ },
+ {
+ USB_VENDOR_AEI,
+ "AEI",
+ },
+ {
+ USB_VENDOR_PQI,
+ "PQI",
+ },
+ {
+ USB_VENDOR_DAISY,
+ "Daisy Technology",
+ },
+ {
+ USB_VENDOR_NI,
+ "National Instruments",
+ },
+ {
+ USB_VENDOR_MICRONET,
+ "Micronet Communications",
+ },
+ {
+ USB_VENDOR_IODATA2,
+ "I-O Data",
+ },
+ {
+ USB_VENDOR_IRIVER,
+ "iRiver",
+ },
+ {
+ USB_VENDOR_DELL,
+ "Dell",
+ },
+ {
+ USB_VENDOR_WCH,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_ACEECA,
+ "Aceeca",
+ },
+ {
+ USB_VENDOR_FEIXUN,
+ "FeiXun Communication",
+ },
+ {
+ USB_VENDOR_NETWEEN,
+ "NetweeN",
+ },
+ {
+ USB_VENDOR_PAPOUCH,
+ "Papouch s.r.o.",
+ },
+ {
+ USB_VENDOR_AVERATEC,
+ "Averatec",
+ },
+ {
+ USB_VENDOR_SWEEX,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_PROLIFIC2,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_ONSPEC2,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_ACERLABS2,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ZINWELL,
+ "Zinwell",
+ },
+ {
+ USB_VENDOR_SITECOM,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_ARKMICRO,
+ "Arkmicro",
+ },
+ {
+ USB_VENDOR_3COM2,
+ "3Com",
+ },
+ {
+ USB_VENDOR_EDIMAX,
+ "EDIMAX",
+ },
+ {
+ USB_VENDOR_INTEL,
+ "Intel",
+ },
+ {
+ USB_VENDOR_INTEL2,
+ "Intel",
+ },
+ {
+ USB_VENDOR_ALLWIN,
+ "ALLWIN Tech",
+ },
+ {
+ USB_VENDOR_SITECOM2,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_MOSCHIP,
+ "MosChip",
+ },
+ {
+ USB_VENDOR_NETGEAR4,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_MARVELL,
+ "Marvell",
+ },
+ {
+ USB_VENDOR_3COM3,
+ "3Com",
+ },
+ {
+ USB_VENDOR_CACE,
+ "CACE Technologies",
+ },
+ {
+ USB_VENDOR_COMPARE,
+ "Compare",
+ },
+ {
+ USB_VENDOR_DATAAPEX,
+ "DataApex",
+ },
+ {
+ USB_VENDOR_EVOLUTION,
+ "Evolution Robotics",
+ },
+ {
+ USB_VENDOR_EMPIA,
+ "eMPIA Technology",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test011.left.txt b/test/test011.left.txt
new file mode 100644
index 000000000000..2fbc5affa850
--- /dev/null
+++ b/test/test011.left.txt
@@ -0,0 +1,393 @@
+/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test011.right.txt b/test/test011.right.txt
new file mode 100644
index 000000000000..417db010011c
--- /dev/null
+++ b/test/test011.right.txt
@@ -0,0 +1,397 @@
+/* $OpenBSD$ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test012.left.txt b/test/test012.left.txt
new file mode 100644
index 000000000000..1081d16c6e49
--- /dev/null
+++ b/test/test012.left.txt
@@ -0,0 +1,23 @@
+1 left
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
diff --git a/test/test012.right.txt b/test/test012.right.txt
new file mode 100644
index 000000000000..dee7f5e68de3
--- /dev/null
+++ b/test/test012.right.txt
@@ -0,0 +1,29 @@
+1 right
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+14
+15
+16 right
+17
+18
+19
+20
+21
+22
+23
diff --git a/test/test013.left-w.txt b/test/test013.left-w.txt
new file mode 100644
index 000000000000..53b3adf33dac
--- /dev/null
+++ b/test/test013.left-w.txt
@@ -0,0 +1,7 @@
+A
+B
+C
+D
+E
+F
+G
diff --git a/test/test013.right-w.txt b/test/test013.right-w.txt
new file mode 100644
index 000000000000..1509b4b4fdfa
--- /dev/null
+++ b/test/test013.right-w.txt
@@ -0,0 +1,7 @@
+A
+ B
+C
+ D
+E
+F x
+y G
diff --git a/test/test014.left.txt b/test/test014.left.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/test014.left.txt
diff --git a/test/test014.right.txt b/test/test014.right.txt
new file mode 100644
index 000000000000..f70f10e4db19
--- /dev/null
+++ b/test/test014.right.txt
@@ -0,0 +1 @@
+A
diff --git a/test/test015.left.txt b/test/test015.left.txt
new file mode 100644
index 000000000000..f70f10e4db19
--- /dev/null
+++ b/test/test015.left.txt
@@ -0,0 +1 @@
+A
diff --git a/test/test015.right.txt b/test/test015.right.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/test015.right.txt
diff --git a/test/test016.left.txt b/test/test016.left.txt
new file mode 100644
index 000000000000..9a6e925fd9fb
--- /dev/null
+++ b/test/test016.left.txt
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 2017 Martin Pieuchot <mpi@openbsd.org>
+ * Copyright (c) 2018, 2019, 2020 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2020 Ori Bernstein <ori@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+
+static const struct got_error *
+cmd_import(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ char *path_dir = NULL, *repo_path = NULL, *logmsg = NULL;
+ char *gitconfig_path = NULL, *editor = NULL, *author = NULL;
+ const char *branch_name = "main";
+ char *refname = NULL, *id_str = NULL, *logmsg_path = NULL;
+ struct got_repository *repo = NULL;
+ struct got_reference *branch_ref = NULL, *head_ref = NULL;
+ struct got_object_id *new_commit_id = NULL;
+ int ch;
+ struct got_pathlist_head ignores;
+ struct got_pathlist_entry *pe;
+ int preserve_logmsg = 0;
+
+ TAILQ_INIT(&ignores);
+
+ while ((ch = getopt(argc, argv, "b:m:r:I:")) != -1) {
+ switch (ch) {
+ case 'b':
+ branch_name = optarg;
+ break;
+ case 'm':
+ logmsg = strdup(optarg);
+ if (logmsg == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
+ break;
+ case 'r':
+ repo_path = realpath(optarg, NULL);
+ if (repo_path == NULL) {
+ error = got_error_from_errno2("realpath",
+ optarg);
+ goto done;
+ }
+ break;
+ case 'I':
+ if (optarg[0] == '\0')
+ break;
+ error = got_pathlist_insert(&pe, &ignores, optarg,
+ NULL);
+ if (error)
+ goto done;
+ break;
+ default:
+ usage_import();
+ /* NOTREACHED */
+ }
+ }
+
+#ifndef PROFILE
+ if (pledge("stdio rpath wpath cpath fattr flock proc exec sendfd "
+ "unveil",
+ NULL) == -1)
+ err(1, "pledge");
+#endif
+ if (argc != 1)
+ usage_import();
+
+ if (repo_path == NULL) {
+ repo_path = getcwd(NULL, 0);
+ if (repo_path == NULL)
+ return got_error_from_errno("getcwd");
+ }
+ error = get_gitconfig_path(&gitconfig_path);
+ if (error)
+ goto done;
+ error = got_repo_open(&repo, repo_path, gitconfig_path);
+ if (error)
+ goto done;
+
+ error = get_author(&author, repo, NULL);
+ if (error)
+ return error;
+
+ /*
+ * Don't let the user create a branch name with a leading '-'.
+ * While technically a valid reference name, this case is usually
+ * an unintended typo.
+ */
+ if (branch_name[0] == '-')
+ return got_error_path(branch_name, GOT_ERR_REF_NAME_MINUS);
+
+ if (asprintf(&refname, "refs/heads/%s", branch_name) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+
+ error = got_ref_open(&branch_ref, repo, refname, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF)
+ goto done;
+ } else {
+ error = got_error_msg(GOT_ERR_BRANCH_EXISTS,
+ "import target branch already exists");
+ goto done;
+ }
+
+ path_dir = realpath(argv[0], NULL);
+ if (path_dir == NULL) {
+ error = got_error_from_errno2("realpath", argv[0]);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(path_dir);
+
+ /*
+ * unveil(2) traverses exec(2); if an editor is used we have
+ * to apply unveil after the log message has been written.
+ */
+ if (logmsg == NULL || strlen(logmsg) == 0) {
+ error = get_editor(&editor);
+ if (error)
+ goto done;
+ free(logmsg);
+ error = collect_import_msg(&logmsg, &logmsg_path, editor,
+ path_dir, refname);
+ if (error) {
+ if (error->code != GOT_ERR_COMMIT_MSG_EMPTY &&
+ logmsg_path != NULL)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ if (unveil(path_dir, "r") != 0) {
+ error = got_error_from_errno2("unveil", path_dir);
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = apply_unveil(got_repo_get_path(repo), 0, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_repo_import(&new_commit_id, path_dir, logmsg,
+ author, &ignores, repo, import_progress, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc(&branch_ref, refname, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(branch_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_object_id_str(&id_str, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc_symref(&head_ref, GOT_REF_HEAD,
+ branch_ref);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(head_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ printf("Created branch %s with commit %s\n",
+ got_ref_get_name(branch_ref), id_str);
+done:
+ if (preserve_logmsg) {
+ fprintf(stderr, "%s: log message preserved in %s\n",
+ getprogname(), logmsg_path);
+ } else if (logmsg_path && unlink(logmsg_path) == -1 && error == NULL)
+ error = got_error_from_errno2("unlink", logmsg_path);
+ free(logmsg);
+ free(logmsg_path);
+ free(repo_path);
+ free(editor);
+ free(refname);
+ free(new_commit_id);
+ free(id_str);
+ free(author);
+ free(gitconfig_path);
+ if (branch_ref)
+ got_ref_close(branch_ref);
+ if (head_ref)
+ got_ref_close(head_ref);
+ return error;
+}
+
+__dead static void
+usage_clone(void)
+{
+ fprintf(stderr, "usage: %s clone [-a] [-b branch] [-l] [-m] [-q] [-v] "
+ "[-R reference] repository-url [directory]\n", getprogname());
+ exit(1);
+}
+
+static const struct got_error *
+cmd_clone(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+ const char *repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+ struct got_object_id *pack_hash = NULL;
+ int ch, fetchfd = -1, fetchstatus;
+ pid_t fetchpid = -1;
+ x
+
+ /* Create got.conf(5). */
+ gotconfig_path = got_repo_get_path_gotconfig(repo);
+ if (gotconfig_path == NULL) {
+ error = got_error_from_errno("got_repo_get_path_gotconfig");
+ goto done;
+ }
+ gotconfig_file = fopen(gotconfig_path, "a");
+ if (gotconfig_file == NULL) {
+ error = got_error_from_errno2("fopen", gotconfig_path);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+ "\tprotocol %s\n"
+ "%s%s%s"
+ "\trepository \"%s\"\n"
+ "%s"
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+ server_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+ n = fwrite(gotconfig, 1, strlen(gotconfig), gotconfig_file);
+ if (n != strlen(gotconfig)) {
+ error = got_ferror(gotconfig_file, GOT_ERR_IO);
+ goto done;
+ }
+}
diff --git a/test/test016.right.txt b/test/test016.right.txt
new file mode 100644
index 000000000000..005c3dbd02ea
--- /dev/null
+++ b/test/test016.right.txt
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 2017 Martin Pieuchot <mpi@openbsd.org>
+ * Copyright (c) 2018, 2019, 2020 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2020 Ori Bernstein <ori@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+
+static const struct got_error *
+cmd_import(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ char *path_dir = NULL, *repo_path = NULL, *logmsg = NULL;
+ char *gitconfig_path = NULL, *editor = NULL, *author = NULL;
+ const char *branch_name = "main";
+ char *refname = NULL, *id_str = NULL, *logmsg_path = NULL;
+ struct got_repository *repo = NULL;
+ struct got_reference *branch_ref = NULL, *head_ref = NULL;
+ struct got_object_id *new_commit_id = NULL;
+ int ch;
+ struct got_pathlist_head ignores;
+ struct got_pathlist_entry *pe;
+ int preserve_logmsg = 0;
+
+ TAILQ_INIT(&ignores);
+
+ while ((ch = getopt(argc, argv, "b:m:r:I:")) != -1) {
+ switch (ch) {
+ case 'b':
+ branch_name = optarg;
+ break;
+ case 'm':
+ logmsg = strdup(optarg);
+ if (logmsg == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
+ break;
+ case 'r':
+ repo_path = realpath(optarg, NULL);
+ if (repo_path == NULL) {
+ error = got_error_from_errno2("realpath",
+ optarg);
+ goto done;
+ }
+ break;
+ case 'I':
+ if (optarg[0] == '\0')
+ break;
+ error = got_pathlist_insert(&pe, &ignores, optarg,
+ NULL);
+ if (error)
+ goto done;
+ break;
+ default:
+ usage_import();
+ /* NOTREACHED */
+ }
+ }
+
+#ifndef PROFILE
+ if (pledge("stdio rpath wpath cpath fattr flock proc exec sendfd "
+ "unveil",
+ NULL) == -1)
+ err(1, "pledge");
+#endif
+ if (argc != 1)
+ usage_import();
+
+ if (repo_path == NULL) {
+ repo_path = getcwd(NULL, 0);
+ if (repo_path == NULL)
+ return got_error_from_errno("getcwd");
+ }
+ error = get_gitconfig_path(&gitconfig_path);
+ if (error)
+ goto done;
+ error = got_repo_open(&repo, repo_path, gitconfig_path);
+ if (error)
+ goto done;
+
+ error = get_author(&author, repo, NULL);
+ if (error)
+ return error;
+
+ /*
+ * Don't let the user create a branch name with a leading '-'.
+ * While technically a valid reference name, this case is usually
+ * an unintended typo.
+ */
+ if (branch_name[0] == '-')
+ return got_error_path(branch_name, GOT_ERR_REF_NAME_MINUS);
+
+ if (asprintf(&refname, "refs/heads/%s", branch_name) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+
+ error = got_ref_open(&branch_ref, repo, refname, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF)
+ goto done;
+ } else {
+ error = got_error_msg(GOT_ERR_BRANCH_EXISTS,
+ "import target branch already exists");
+ goto done;
+ }
+
+ path_dir = realpath(argv[0], NULL);
+ if (path_dir == NULL) {
+ error = got_error_from_errno2("realpath", argv[0]);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(path_dir);
+
+ /*
+ * unveil(2) traverses exec(2); if an editor is used we have
+ * to apply unveil after the log message has been written.
+ */
+ if (logmsg == NULL || strlen(logmsg) == 0) {
+ error = get_editor(&editor);
+ if (error)
+ goto done;
+ free(logmsg);
+ error = collect_import_msg(&logmsg, &logmsg_path, editor,
+ path_dir, refname);
+ if (error) {
+ if (error->code != GOT_ERR_COMMIT_MSG_EMPTY &&
+ logmsg_path != NULL)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ if (unveil(path_dir, "r") != 0) {
+ error = got_error_from_errno2("unveil", path_dir);
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = apply_unveil(got_repo_get_path(repo), 0, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_repo_import(&new_commit_id, path_dir, logmsg,
+ author, &ignores, repo, import_progress, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc(&branch_ref, refname, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(branch_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_object_id_str(&id_str, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc_symref(&head_ref, GOT_REF_HEAD,
+ branch_ref);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(head_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ printf("Created branch %s with commit %s\n",
+ got_ref_get_name(branch_ref), id_str);
+done:
+ if (preserve_logmsg) {
+ fprintf(stderr, "%s: log message preserved in %s\n",
+ getprogname(), logmsg_path);
+ } else if (logmsg_path && unlink(logmsg_path) == -1 && error == NULL)
+ error = got_error_from_errno2("unlink", logmsg_path);
+ free(logmsg);
+ free(logmsg_path);
+ free(repo_path);
+ free(editor);
+ free(refname);
+ free(new_commit_id);
+ free(id_str);
+ free(author);
+ free(gitconfig_path);
+ if (branch_ref)
+ got_ref_close(branch_ref);
+ if (head_ref)
+ got_ref_close(head_ref);
+ return error;
+}
+
+__dead static void
+usage_clone(void)
+{
+ fprintf(stderr, "usage: %s clone [-a] [-b branch] [-l] [-m] [-q] [-v] "
+ "[-R reference] repository-url [directory]\n", getprogname());
+ exit(1);
+}
+
+static const struct got_error *
+cmd_clone(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+ const char *repo_path, *remote_repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+ struct got_object_id *pack_hash = NULL;
+ int ch, fetchfd = -1, fetchstatus;
+ pid_t fetchpid = -1;
+ x
+
+ /* Create got.conf(5). */
+ gotconfig_path = got_repo_get_path_gotconfig(repo);
+ if (gotconfig_path == NULL) {
+ error = got_error_from_errno("got_repo_get_path_gotconfig");
+ goto done;
+ }
+ gotconfig_file = fopen(gotconfig_path, "a");
+ if (gotconfig_file == NULL) {
+ error = got_error_from_errno2("fopen", gotconfig_path);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
+ remote_repo_path = server_path;
+ while (remote_repo_path[0] == '/')
+ remote_repo_path++;
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+ "\tprotocol %s\n"
+ "%s%s%s"
+ "\trepository \"%s\"\n"
+ "%s"
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+ remote_repo_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+ n = fwrite(gotconfig, 1, strlen(gotconfig), gotconfig_file);
+ if (n != strlen(gotconfig)) {
+ error = got_ferror(gotconfig_file, GOT_ERR_IO);
+ goto done;
+ }
+}
diff --git a/test/test017.left-U0.txt b/test/test017.left-U0.txt
new file mode 100644
index 000000000000..e622c0db8bdf
--- /dev/null
+++ b/test/test017.left-U0.txt
@@ -0,0 +1,15 @@
+a
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+f
+g
+h
+j
diff --git a/test/test017.right-U0.txt b/test/test017.right-U0.txt
new file mode 100644
index 000000000000..9495dcd762b8
--- /dev/null
+++ b/test/test017.right-U0.txt
@@ -0,0 +1,19 @@
+a
+b
+c
+d
+x
+x
+x
+x
+x
+k
+x
+x
+x
+x
+x
+c
+v
+b
+n
diff --git a/test/test018.left-T.txt b/test/test018.left-T.txt
new file mode 100644
index 000000000000..fd113b0f7150
--- /dev/null
+++ b/test/test018.left-T.txt
@@ -0,0 +1,7 @@
+A
+B
+C
+A
+B
+B
+A
diff --git a/test/test018.right-T.txt b/test/test018.right-T.txt
new file mode 100644
index 000000000000..0075e6d23de0
--- /dev/null
+++ b/test/test018.right-T.txt
@@ -0,0 +1,6 @@
+C
+B
+A
+B
+A
+C
diff --git a/test/test019.left.txt b/test/test019.left.txt
new file mode 100644
index 000000000000..ac4b5ececbb3
--- /dev/null
+++ b/test/test019.left.txt
@@ -0,0 +1,845 @@
+/*
+ * Copyright (c) 2017 Stefan Sperling <stsp@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/stat.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <sha1.h>
+#include <zlib.h>
+
+#include "got_object.h"
+#include "got_repository.h"
+#include "got_error.h"
+#include "got_diff.h"
+#include "got_opentemp.h"
+#include "got_path.h"
+#include "got_cancel.h"
+#include "got_worktree.h"
+
+#include "got_lib_diff.h"
+#include "got_lib_delta.h"
+#include "got_lib_inflate.h"
+#include "got_lib_object.h"
+
+static const struct got_error *
+diff_blobs(struct got_diffreg_result **resultp,
+struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL, *f2 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char hex2[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL, *idstr2 = NULL;
+ size_t size1, size2;
+ struct got_diffreg_result *result;
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ }
+
+ if (blob2) {
+ f2 = got_opentemp();
+ if (f2 == NULL) {
+ err = got_error_from_errno("got_opentemp");
+ fclose(f1);
+ return err;
+ }
+ }
+
+ size1 = 0;
+ if (blob1) {
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else
+ idstr1 = "/dev/null";
+
+ size2 = 0;
+ if (blob2) {
+ idstr2 = got_object_blob_id_str(blob2, hex2, sizeof(hex2));
+ err = got_object_blob_dump_to_file(&size2, NULL, NULL, f2,
+ blob2);
+ if (err)
+ goto done;
+ } else
+ idstr2 = "/dev/null";
+
+ if (outfile) {
+ char *modestr1 = NULL, *modestr2 = NULL;
+ int modebits;
+ if (mode1 && mode1 != mode2) {
+ if (S_ISLNK(mode1))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr1, " (mode %o)",
+ mode1 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ if (mode2 && mode1 != mode2) {
+ if (S_ISLNK(mode2))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr2, " (mode %o)",
+ mode2 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ fprintf(outfile, "blob - %s%s\n", idstr1,
+ modestr1 ? modestr1 : "");
+ fprintf(outfile, "blob + %s%s\n", idstr2,
+ modestr2 ? modestr2 : "");
+ free(modestr1);
+ free(modestr2);
+ }
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, result, f1, f2,
+ label1 ? label1 : idstr1,
+ label2 ? label2 : idstr2,
+ GOT_DIFF_OUTPUT_UNIDIFF, diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ if (f2 && fclose(f2) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_output_unidiff(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ const struct got_error *err;
+ struct got_diff_blob_output_unidiff_arg *a = arg;
+
+ err = diff_blobs(NULL, blob1, blob2, label1, label2, mode1, mode2,
+ a->diff_context, a->ignore_whitespace, a->outfile);
+ return err;
+}
+
+const struct got_error *
+got_diff_blob(struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blobs(NULL, blob1, blob2, label1, label2, 0, 0, diff_context,
+ ignore_whitespace, outfile);
+}
+
+static const struct got_error *
+diff_blob_file(struct got_diffreg_result **resultp,
+ struct got_blob_object *blob1, const char *label1, FILE *f2, size_t size2,
+ const char *label2, int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL;
+ size_t size1;
+ struct got_diffreg_result *result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ size1 = 0;
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else {
+ idstr1 = "/dev/null";
+ }
+
+ if (outfile) {
+ fprintf(outfile, "blob - %s\n", label1 ? label1 : idstr1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, result, f1, f2,
+ label2, label2, GOT_DIFF_OUTPUT_UNIDIFF, diff_context,
+ outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else if (result) {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_file(struct got_blob_object *blob1, const char *label1,
+ FILE *f2, size_t size2, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blob_file(NULL, blob1, label1, f2, size2, label2,
+ diff_context, ignore_whitespace, outfile);
+}
+
+const struct got_error *
+got_diff_blob_file_lines_changed(struct got_diffreg_result **result,
+ struct got_blob_object *blob1, FILE *f2, size_t size2)
+{
+ return diff_blob_file(result, blob1, NULL, f2, size2, NULL,
+ 0, 0, NULL);
+}
+
+const struct got_error *
+got_diff_blob_lines_changed(struct got_diffreg_result **result,
+ struct got_blob_object *blob1, struct got_blob_object *blob2)
+{
+ const struct got_error *err = NULL;
+
+ err = diff_blobs(result, blob1, blob2, NULL, NULL, 0, 0, 3, 0, NULL);
+ if (err) {
+ got_diffreg_result_free(*result);
+ *result = NULL;
+ }
+ return err;
+}
+
+static const struct got_error *
+diff_added_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, NULL, blob, NULL, id, NULL, label, 0, mode, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_blob(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_object *obj1 = NULL;
+ struct got_object *obj2 = NULL;
+ struct got_blob_object *blob1 = NULL;
+ struct got_blob_object *blob2 = NULL;
+
+ err = got_object_open(&obj1, repo, id1);
+ if (err)
+ return err;
+ if (obj1->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&obj2, repo, id2);
+ if (err)
+ goto done;
+ if (obj2->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_BAD_OBJ_DATA);
+ goto done;
+ }
+
+ err = got_object_blob_open(&blob1, repo, obj1, 8192);
+ if (err)
+ goto done;
+
+ err = got_object_blob_open(&blob2, repo, obj2, 8192);
+ if (err)
+ goto done;
+
+ err = cb(cb_arg, blob1, blob2, id1, id2, label1, label2, mode1, mode2,
+ repo);
+done:
+ if (obj1)
+ got_object_close(obj1);
+ if (obj2)
+ got_object_close(obj2);
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, blob, NULL, id, NULL, label, NULL, mode, 0, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_added_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(NULL, tree, NULL, label, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_tree(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj1 = NULL;
+ struct got_object *treeobj2 = NULL;
+ struct got_tree_object *tree1 = NULL;
+ struct got_tree_object *tree2 = NULL;
+
+ err = got_object_open(&treeobj1, repo, id1);
+ if (err)
+ goto done;
+
+ if (treeobj1->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&treeobj2, repo, id2);
+ if (err)
+ goto done;
+
+ if (treeobj2->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree1, repo, treeobj1);
+ if (err)
+ goto done;
+
+ err = got_object_tree_open(&tree2, repo, treeobj2);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree1, tree2, label1, label2, repo, cb, cb_arg,
+ diff_content);
+
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ if (treeobj1)
+ got_object_close(treeobj1);
+ if (treeobj2)
+ got_object_close(treeobj2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree, NULL, label, NULL, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_kind_mismatch(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg)
+{
+ /* XXX TODO */
+ return NULL;
+}
+
+static const struct got_error *
+diff_entry_old_new(struct got_tree_entry *te1,
+ struct got_tree_entry *te2, const char *label1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ int id_match;
+
+ if (got_object_tree_entry_is_submodule(te1))
+ return NULL;
+
+ if (te2 == NULL) {
+ if (S_ISDIR(te1->mode))
+ err = diff_deleted_tree(&te1->id, label1, repo,
+ cb, cb_arg, diff_content);
+ else {
+ if (diff_content)
+ err = diff_deleted_blob(&te1->id, label1,
+ te1->mode, repo, cb, cb_arg);
+ else
+ err = cb(cb_arg, NULL, NULL, &te1->id, NULL,
+ label1, NULL, te1->mode, 0, repo);
+ }
+ return err;
+ } else if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ id_match = (got_object_id_cmp(&te1->id, &te2->id) == 0);
+ if (S_ISDIR(te1->mode) && S_ISDIR(te2->mode)) {
+ if (!id_match)
+ return diff_modified_tree(&te1->id, &te2->id,
+ label1, label2, repo, cb, cb_arg, diff_content);
+ } else if ((S_ISREG(te1->mode) || S_ISLNK(te1->mode)) &&
+ (S_ISREG(te2->mode) || S_ISLNK(te2->mode))) {
+ if (!id_match ||
+ ((te1->mode & (S_IFLNK | S_IXUSR))) !=
+ (te2->mode & (S_IFLNK | S_IXUSR))) {
+ if (diff_content)
+ return diff_modified_blob(&te1->id, &te2->id,
+ label1, label2, te1->mode, te2->mode,
+ repo, cb, cb_arg);
+ else
+ return cb(cb_arg, NULL, NULL, &te1->id,
+ &te2->id, label1, label2, te1->mode,
+ te2->mode, repo);
+ }
+ }
+
+ if (id_match)
+ return NULL;
+
+ return diff_kind_mismatch(&te1->id, &te2->id, label1, label2, repo,
+ cb, cb_arg);
+}
+
+static const struct got_error *
+diff_entry_new_old(struct got_tree_entry *te2,
+ struct got_tree_entry *te1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ if (te1 != NULL) /* handled by diff_entry_old_new() */
+ return NULL;
+
+ if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ if (S_ISDIR(te2->mode))
+ return diff_added_tree(&te2->id, label2, repo, cb, cb_arg,
+ diff_content);
+
+ if (diff_content)
+ return diff_added_blob(&te2->id, label2, te2->mode, repo, cb,
+ cb_arg);
+
+ return cb(cb_arg, NULL, NULL, NULL, &te2->id, NULL, label2, 0,
+ te2->mode, repo);
+}
+
+const struct got_error *
+got_diff_tree_collect_changed_paths(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ const struct got_error *err = NULL;
+ struct got_pathlist_head *paths = arg;
+ struct got_diff_changed_path *change = NULL;
+ char *path = NULL;
+
+ path = strdup(label2 ? label2 : label1);
+ if (path == NULL)
+ return got_error_from_errno("malloc");
+
+ change = malloc(sizeof(*change));
+ if (change == NULL) {
+ err = got_error_from_errno("malloc");
+ goto done;
+ }
+
+ change->status = GOT_STATUS_NO_CHANGE;
+ if (id1 == NULL)
+ change->status = GOT_STATUS_ADD;
+ else if (id2 == NULL)
+ change->status = GOT_STATUS_DELETE;
+ else {
+ if (got_object_id_cmp(id1, id2) != 0)
+ change->status = GOT_STATUS_MODIFY;
+ else if (mode1 != mode2)
+ change->status = GOT_STATUS_MODE_CHANGE;
+ }
+
+ err = got_pathlist_insert(NULL, paths, path, change);
+done:
+ if (err) {
+ free(path);
+ free(change);
+ }
+ return err;
+}
+
+const struct got_error *
+got_diff_tree(struct got_tree_object *tree1, struct got_tree_object *tree2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_tree_entry *te1 = NULL;
+ struct got_tree_entry *te2 = NULL;
+ char *l1 = NULL, *l2 = NULL;
+ int tidx1 = 0, tidx2 = 0;
+
+ if (tree1) {
+ te1 = got_object_tree_get_entry(tree1, 0);
+ if (te1 && asprintf(&l1, "%s%s%s", label1, label1[0] ? "/" : "",
+ te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ if (tree2) {
+ te2 = got_object_tree_get_entry(tree2, 0);
+ if (te2 && asprintf(&l2, "%s%s%s", label2, label2[0] ? "/" : "",
+ te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+
+ do {
+ if (te1) {
+ struct got_tree_entry *te = NULL;
+ if (tree2)
+ te = got_object_tree_find_entry(tree2,
+ te1->name);
+ if (te) {
+ free(l2);
+ l2 = NULL;
+ if (te && asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_old_new(te1, te, l1, l2, repo, cb,
+ cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ if (te2) {
+ struct got_tree_entry *te = NULL;
+ if (tree1)
+ te = got_object_tree_find_entry(tree1,
+ te2->name);
+ free(l2);
+ if (te) {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ } else {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_new_old(te2, te, l2, repo,
+ cb, cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ free(l1);
+ l1 = NULL;
+ if (te1) {
+ tidx1++;
+ te1 = got_object_tree_get_entry(tree1, tidx1);
+ if (te1 &&
+ asprintf(&l1, "%s%s%s", label1,
+ label1[0] ? "/" : "", te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ free(l2);
+ l2 = NULL;
+ if (te2) {
+ tidx2++;
+ te2 = got_object_tree_get_entry(tree2, tidx2);
+ if (te2 &&
+ asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ } while (te1 || te2);
+
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_blobs(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob1 = NULL, *blob2 = NULL;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_blob(&blob1, repo, id1, 8192);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_blob(&blob2, repo, id2, 8192);
+ if (err)
+ goto done;
+ }
+ err = got_diff_blob(blob1, blob2, label1, label2, diff_context,
+ ignore_whitespace, outfile);
+done:
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_trees(struct got_object_id *id1, struct got_object_id *id2,
+ char *label1, char *label2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+ struct got_diff_blob_output_unidiff_arg arg;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_tree(&tree1, repo, id1);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_tree(&tree2, repo, id2);
+ if (err)
+ goto done;
+ }
+ arg.diff_context = diff_context;
+ arg.ignore_whitespace = ignore_whitespace;
+ arg.outfile = outfile;
+ err = got_diff_tree(tree1, tree2, label1, label2, repo,
+ got_diff_blob_output_unidiff, &arg, 1);
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_commits(struct got_object_id *id1,
+ struct got_object_id *id2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_commit_object *commit1 = NULL, *commit2 = NULL;
+
+ if (id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_commit(&commit1, repo, id1);
+ if (err)
+ goto done;
+ }
+
+ err = got_object_open_as_commit(&commit2, repo, id2);
+ if (err)
+ goto done;
+
+ err = got_diff_objects_as_trees(
+ commit1 ? got_object_commit_get_tree_id(commit1) : NULL,
+ got_object_commit_get_tree_id(commit2), "", "", diff_context,
+ ignore_whitespace, repo, outfile);
+done:
+ if (commit1)
+ got_object_commit_close(commit1);
+ if (commit2)
+ got_object_commit_close(commit2);
+ return err;
+}
+
+const struct got_error *
+got_diff_files(struct got_diffreg_result **resultp,
+ FILE *f1, const char *label1, FILE *f2, const char *label2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL;
+ struct got_diffreg_result *diffreg_result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (outfile) {
+ fprintf(outfile, "file - %s\n",
+ f1 == NULL ? "/dev/null" : label1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&diffreg_result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, diffreg_result,
+ f1, f2, label1, label2, GOT_DIFF_OUTPUT_UNIDIFF,
+ diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+done:
+ if (resultp && err == NULL)
+ *resultp = diffreg_result;
+ else if (diffreg_result) {
+ const struct got_error *free_err;
+ free_err = got_diffreg_result_free(diffreg_result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+
+ return err;
+}
diff --git a/test/test019.right.txt b/test/test019.right.txt
new file mode 100644
index 000000000000..69c2895af058
--- /dev/null
+++ b/test/test019.right.txt
@@ -0,0 +1,904 @@
+/*
+ * Copyright (c) 2017 Stefan Sperling <stsp@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/stat.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <sha1.h>
+#include <zlib.h>
+
+#include "got_object.h"
+#include "got_repository.h"
+#include "got_error.h"
+#include "got_diff.h"
+#include "got_opentemp.h"
+#include "got_path.h"
+#include "got_cancel.h"
+#include "got_worktree.h"
+
+#include "got_lib_diff.h"
+#include "got_lib_delta.h"
+#include "got_lib_inflate.h"
+#include "got_lib_object.h"
+
+static const struct got_error *
+add_line_offset(off_t **line_offsets, size_t *nlines, off_t off)
+{
+ off_t *p;
+
+ p = reallocarray(*line_offsets, *nlines + 1, sizeof(off_t));
+ if (p == NULL)
+ return got_error_from_errno("reallocarray");
+ *line_offsets = p;
+ (*line_offsets)[*nlines] = off;
+ (*nlines)++;
+ return NULL;
+}
+
+static const struct got_error *
+diff_blobs(off_t **line_offsets, size_t *nlines,
+ struct got_diffreg_result **resultp, struct got_blob_object *blob1,
+ struct got_blob_object *blob2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL, *f2 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char hex2[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL, *idstr2 = NULL;
+ size_t size1, size2;
+ struct got_diffreg_result *result;
+ off_t outoff = 0;
+ int n;
+
+ if (line_offsets && *line_offsets && *nlines > 0)
+ outoff = (*line_offsets)[*nlines - 1];
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ }
+
+ if (blob2) {
+ f2 = got_opentemp();
+ if (f2 == NULL) {
+ err = got_error_from_errno("got_opentemp");
+ fclose(f1);
+ return err;
+ }
+ }
+
+ size1 = 0;
+ if (blob1) {
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else
+ idstr1 = "/dev/null";
+
+ size2 = 0;
+ if (blob2) {
+ idstr2 = got_object_blob_id_str(blob2, hex2, sizeof(hex2));
+ err = got_object_blob_dump_to_file(&size2, NULL, NULL, f2,
+ blob2);
+ if (err)
+ goto done;
+ } else
+ idstr2 = "/dev/null";
+
+ if (outfile) {
+ char *modestr1 = NULL, *modestr2 = NULL;
+ int modebits;
+ if (mode1 && mode1 != mode2) {
+ if (S_ISLNK(mode1))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr1, " (mode %o)",
+ mode1 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ if (mode2 && mode1 != mode2) {
+ if (S_ISLNK(mode2))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr2, " (mode %o)",
+ mode2 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ n = fprintf(outfile, "blob - %s%s\n", idstr1,
+ modestr1 ? modestr1 : "");
+ if (n < 0) {
+ err = got_error_from_errno("fprintf");
+ goto done;
+ }
+ outoff += n;
+ if (line_offsets) {
+ err = add_line_offset(line_offsets, nlines, outoff);
+ if (err)
+ goto done;
+ }
+
+ n = fprintf(outfile, "blob + %s%s\n", idstr2,
+ modestr2 ? modestr2 : "");
+ if (n < 0) {
+ err = got_error_from_errno("fprintf");
+ goto done;
+ }
+ outoff += n;
+ if (line_offsets) {
+ err = add_line_offset(line_offsets, nlines, outoff);
+ if (err)
+ goto done;
+ }
+
+ free(modestr1);
+ free(modestr2);
+ }
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(line_offsets, nlines, result, f1, f2,
+ label1 ? label1 : idstr1,
+ label2 ? label2 : idstr2,
+ GOT_DIFF_OUTPUT_UNIDIFF, diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ if (f2 && fclose(f2) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_output_unidiff(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ struct got_diff_blob_output_unidiff_arg *a = arg;
+
+ return diff_blobs(&a->line_offsets, &a->nlines, NULL,
+ blob1, blob2, label1, label2, mode1, mode2, a->diff_context,
+ a->ignore_whitespace, a->outfile);
+}
+
+const struct got_error *
+got_diff_blob(off_t **line_offsets, size_t *nlines,
+ struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blobs(line_offsets, nlines, NULL, blob1, blob2,
+ label1, label2, 0, 0, diff_context, ignore_whitespace, outfile);
+}
+
+static const struct got_error *
+diff_blob_file(struct got_diffreg_result **resultp,
+ struct got_blob_object *blob1, const char *label1, FILE *f2, size_t size2,
+ const char *label2, int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL;
+ size_t size1;
+ struct got_diffreg_result *result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ size1 = 0;
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else {
+ idstr1 = "/dev/null";
+ }
+
+ if (outfile) {
+ fprintf(outfile, "blob - %s\n", label1 ? label1 : idstr1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, result, f1, f2,
+ label2, label2, GOT_DIFF_OUTPUT_UNIDIFF, diff_context,
+ outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else if (result) {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_file(struct got_blob_object *blob1, const char *label1,
+ FILE *f2, size_t size2, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blob_file(NULL, blob1, label1, f2, size2, label2,
+ diff_context, ignore_whitespace, outfile);
+}
+
+const struct got_error *
+got_diff_blob_file_lines_changed(struct got_diffreg_result **result,
+ struct got_blob_object *blob1, FILE *f2, size_t size2)
+{
+ return diff_blob_file(result, blob1, NULL, f2, size2, NULL,
+ 0, 0, NULL);
+}
+
+const struct got_error *
+got_diff_blob_lines_changed(struct got_diffreg_result **result,
+ struct got_blob_object *blob1, struct got_blob_object *blob2)
+{
+ const struct got_error *err = NULL;
+
+ err = diff_blobs(NULL, NULL, result, blob1, blob2,
+ NULL, NULL, 0, 0, 3, 0, NULL);
+ if (err) {
+ got_diffreg_result_free(*result);
+ *result = NULL;
+ }
+ return err;
+}
+
+static const struct got_error *
+diff_added_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, NULL, blob, NULL, id, NULL, label, 0, mode, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_blob(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_object *obj1 = NULL;
+ struct got_object *obj2 = NULL;
+ struct got_blob_object *blob1 = NULL;
+ struct got_blob_object *blob2 = NULL;
+
+ err = got_object_open(&obj1, repo, id1);
+ if (err)
+ return err;
+ if (obj1->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&obj2, repo, id2);
+ if (err)
+ goto done;
+ if (obj2->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_BAD_OBJ_DATA);
+ goto done;
+ }
+
+ err = got_object_blob_open(&blob1, repo, obj1, 8192);
+ if (err)
+ goto done;
+
+ err = got_object_blob_open(&blob2, repo, obj2, 8192);
+ if (err)
+ goto done;
+
+ err = cb(cb_arg, blob1, blob2, id1, id2, label1, label2, mode1, mode2,
+ repo);
+done:
+ if (obj1)
+ got_object_close(obj1);
+ if (obj2)
+ got_object_close(obj2);
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, blob, NULL, id, NULL, label, NULL, mode, 0, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_added_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(NULL, tree, NULL, label, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_tree(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj1 = NULL;
+ struct got_object *treeobj2 = NULL;
+ struct got_tree_object *tree1 = NULL;
+ struct got_tree_object *tree2 = NULL;
+
+ err = got_object_open(&treeobj1, repo, id1);
+ if (err)
+ goto done;
+
+ if (treeobj1->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&treeobj2, repo, id2);
+ if (err)
+ goto done;
+
+ if (treeobj2->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree1, repo, treeobj1);
+ if (err)
+ goto done;
+
+ err = got_object_tree_open(&tree2, repo, treeobj2);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree1, tree2, label1, label2, repo, cb, cb_arg,
+ diff_content);
+
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ if (treeobj1)
+ got_object_close(treeobj1);
+ if (treeobj2)
+ got_object_close(treeobj2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree, NULL, label, NULL, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_kind_mismatch(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg)
+{
+ /* XXX TODO */
+ return NULL;
+}
+
+static const struct got_error *
+diff_entry_old_new(struct got_tree_entry *te1,
+ struct got_tree_entry *te2, const char *label1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ int id_match;
+
+ if (got_object_tree_entry_is_submodule(te1))
+ return NULL;
+
+ if (te2 == NULL) {
+ if (S_ISDIR(te1->mode))
+ err = diff_deleted_tree(&te1->id, label1, repo,
+ cb, cb_arg, diff_content);
+ else {
+ if (diff_content)
+ err = diff_deleted_blob(&te1->id, label1,
+ te1->mode, repo, cb, cb_arg);
+ else
+ err = cb(cb_arg, NULL, NULL, &te1->id, NULL,
+ label1, NULL, te1->mode, 0, repo);
+ }
+ return err;
+ } else if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ id_match = (got_object_id_cmp(&te1->id, &te2->id) == 0);
+ if (S_ISDIR(te1->mode) && S_ISDIR(te2->mode)) {
+ if (!id_match)
+ return diff_modified_tree(&te1->id, &te2->id,
+ label1, label2, repo, cb, cb_arg, diff_content);
+ } else if ((S_ISREG(te1->mode) || S_ISLNK(te1->mode)) &&
+ (S_ISREG(te2->mode) || S_ISLNK(te2->mode))) {
+ if (!id_match ||
+ ((te1->mode & (S_IFLNK | S_IXUSR))) !=
+ (te2->mode & (S_IFLNK | S_IXUSR))) {
+ if (diff_content)
+ return diff_modified_blob(&te1->id, &te2->id,
+ label1, label2, te1->mode, te2->mode,
+ repo, cb, cb_arg);
+ else
+ return cb(cb_arg, NULL, NULL, &te1->id,
+ &te2->id, label1, label2, te1->mode,
+ te2->mode, repo);
+ }
+ }
+
+ if (id_match)
+ return NULL;
+
+ return diff_kind_mismatch(&te1->id, &te2->id, label1, label2, repo,
+ cb, cb_arg);
+}
+
+static const struct got_error *
+diff_entry_new_old(struct got_tree_entry *te2,
+ struct got_tree_entry *te1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ if (te1 != NULL) /* handled by diff_entry_old_new() */
+ return NULL;
+
+ if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ if (S_ISDIR(te2->mode))
+ return diff_added_tree(&te2->id, label2, repo, cb, cb_arg,
+ diff_content);
+
+ if (diff_content)
+ return diff_added_blob(&te2->id, label2, te2->mode, repo, cb,
+ cb_arg);
+
+ return cb(cb_arg, NULL, NULL, NULL, &te2->id, NULL, label2, 0,
+ te2->mode, repo);
+}
+
+const struct got_error *
+got_diff_tree_collect_changed_paths(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ const struct got_error *err = NULL;
+ struct got_pathlist_head *paths = arg;
+ struct got_diff_changed_path *change = NULL;
+ char *path = NULL;
+
+ path = strdup(label2 ? label2 : label1);
+ if (path == NULL)
+ return got_error_from_errno("malloc");
+
+ change = malloc(sizeof(*change));
+ if (change == NULL) {
+ err = got_error_from_errno("malloc");
+ goto done;
+ }
+
+ change->status = GOT_STATUS_NO_CHANGE;
+ if (id1 == NULL)
+ change->status = GOT_STATUS_ADD;
+ else if (id2 == NULL)
+ change->status = GOT_STATUS_DELETE;
+ else {
+ if (got_object_id_cmp(id1, id2) != 0)
+ change->status = GOT_STATUS_MODIFY;
+ else if (mode1 != mode2)
+ change->status = GOT_STATUS_MODE_CHANGE;
+ }
+
+ err = got_pathlist_insert(NULL, paths, path, change);
+done:
+ if (err) {
+ free(path);
+ free(change);
+ }
+ return err;
+}
+
+const struct got_error *
+got_diff_tree(struct got_tree_object *tree1, struct got_tree_object *tree2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_tree_entry *te1 = NULL;
+ struct got_tree_entry *te2 = NULL;
+ char *l1 = NULL, *l2 = NULL;
+ int tidx1 = 0, tidx2 = 0;
+
+ if (tree1) {
+ te1 = got_object_tree_get_entry(tree1, 0);
+ if (te1 && asprintf(&l1, "%s%s%s", label1, label1[0] ? "/" : "",
+ te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ if (tree2) {
+ te2 = got_object_tree_get_entry(tree2, 0);
+ if (te2 && asprintf(&l2, "%s%s%s", label2, label2[0] ? "/" : "",
+ te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+
+ do {
+ if (te1) {
+ struct got_tree_entry *te = NULL;
+ if (tree2)
+ te = got_object_tree_find_entry(tree2,
+ te1->name);
+ if (te) {
+ free(l2);
+ l2 = NULL;
+ if (te && asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_old_new(te1, te, l1, l2, repo, cb,
+ cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ if (te2) {
+ struct got_tree_entry *te = NULL;
+ if (tree1)
+ te = got_object_tree_find_entry(tree1,
+ te2->name);
+ free(l2);
+ if (te) {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ } else {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_new_old(te2, te, l2, repo,
+ cb, cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ free(l1);
+ l1 = NULL;
+ if (te1) {
+ tidx1++;
+ te1 = got_object_tree_get_entry(tree1, tidx1);
+ if (te1 &&
+ asprintf(&l1, "%s%s%s", label1,
+ label1[0] ? "/" : "", te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ free(l2);
+ l2 = NULL;
+ if (te2) {
+ tidx2++;
+ te2 = got_object_tree_get_entry(tree2, tidx2);
+ if (te2 &&
+ asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ } while (te1 || te2);
+
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_blobs(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob1 = NULL, *blob2 = NULL;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_blob(&blob1, repo, id1, 8192);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_blob(&blob2, repo, id2, 8192);
+ if (err)
+ goto done;
+ }
+ err = got_diff_blob(line_offsets, nlines, blob1, blob2,
+ label1, label2, diff_context, ignore_whitespace, outfile);
+done:
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_trees(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ char *label1, char *label2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+ struct got_diff_blob_output_unidiff_arg arg;
+ int want_lineoffsets = (line_offsets != NULL && *line_offsets != NULL);
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_tree(&tree1, repo, id1);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_tree(&tree2, repo, id2);
+ if (err)
+ goto done;
+ }
+ arg.diff_context = diff_context;
+ arg.ignore_whitespace = ignore_whitespace;
+ arg.outfile = outfile;
+ if (want_lineoffsets) {
+ arg.line_offsets = *line_offsets;
+ arg.nlines = *nlines;
+ } else {
+ arg.line_offsets = NULL;
+ arg.nlines = 0;
+ }
+ err = got_diff_tree(tree1, tree2, label1, label2, repo,
+ got_diff_blob_output_unidiff, &arg, 1);
+
+ if (want_lineoffsets) {
+ *line_offsets = arg.line_offsets; /* was likely re-allocated */
+ *nlines = arg.nlines;
+ }
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_commits(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_commit_object *commit1 = NULL, *commit2 = NULL;
+
+ if (id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_commit(&commit1, repo, id1);
+ if (err)
+ goto done;
+ }
+
+ err = got_object_open_as_commit(&commit2, repo, id2);
+ if (err)
+ goto done;
+
+ err = got_diff_objects_as_trees(line_offsets, nlines,
+ commit1 ? got_object_commit_get_tree_id(commit1) : NULL,
+ got_object_commit_get_tree_id(commit2), "", "", diff_context,
+ ignore_whitespace, repo, outfile);
+done:
+ if (commit1)
+ got_object_commit_close(commit1);
+ if (commit2)
+ got_object_commit_close(commit2);
+ return err;
+}
+
+const struct got_error *
+got_diff_files(struct got_diffreg_result **resultp,
+ FILE *f1, const char *label1, FILE *f2, const char *label2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL;
+ struct got_diffreg_result *diffreg_result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (outfile) {
+ fprintf(outfile, "file - %s\n",
+ f1 == NULL ? "/dev/null" : label1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&diffreg_result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, diffreg_result,
+ f1, f2, label1, label2, GOT_DIFF_OUTPUT_UNIDIFF,
+ diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+done:
+ if (resultp && err == NULL)
+ *resultp = diffreg_result;
+ else if (diffreg_result) {
+ const struct got_error *free_err;
+ free_err = got_diffreg_result_free(diffreg_result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+
+ return err;
+}
diff --git a/test/test020.left.txt b/test/test020.left.txt
new file mode 100644
index 000000000000..7e5ee06994a5
--- /dev/null
+++ b/test/test020.left.txt
@@ -0,0 +1,919 @@
+/*
+ * Copyright (c) 2017 Stefan Sperling <stsp@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/stat.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <sha1.h>
+#include <zlib.h>
+
+#include "got_object.h"
+#include "got_repository.h"
+#include "got_error.h"
+#include "got_diff.h"
+#include "got_opentemp.h"
+#include "got_path.h"
+#include "got_cancel.h"
+#include "got_worktree.h"
+
+#include "got_lib_diff.h"
+#include "got_lib_delta.h"
+#include "got_lib_inflate.h"
+#include "got_lib_object.h"
+
+static const struct got_error *
+diff_blobs(struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ int diff_context, int ignore_whitespace, FILE *outfile,
+ struct got_diff_changes *changes)
+{
+ struct got_diff_state ds;
+ struct got_diff_args args;
+ const struct got_error *err = NULL;
+ FILE *f1 = NULL, *f2 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char hex2[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL, *idstr2 = NULL;
+ size_t size1, size2;
+ int res, flags = 0;
+
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ } else
+ flags |= D_EMPTY1;
+
+ if (blob2) {
+ f2 = got_opentemp();
+ if (f2 == NULL) {
+ err = got_error_from_errno("got_opentemp");
+ fclose(f1);
+ return err;
+ }
+ } else
+ flags |= D_EMPTY2;
+
+ size1 = 0;
+ if (blob1) {
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else
+ idstr1 = "/dev/null";
+
+ size2 = 0;
+ if (blob2) {
+ idstr2 = got_object_blob_id_str(blob2, hex2, sizeof(hex2));
+ err = got_object_blob_dump_to_file(&size2, NULL, NULL, f2,
+ blob2);
+ if (err)
+ goto done;
+ } else
+ idstr2 = "/dev/null";
+
+ memset(&ds, 0, sizeof(ds));
+ /* XXX should stat buffers be passed in args instead of ds? */
+ ds.stb1.st_mode = S_IFREG;
+ if (blob1)
+ ds.stb1.st_size = size1;
+ ds.stb1.st_mtime = 0; /* XXX */
+
+ ds.stb2.st_mode = S_IFREG;
+ if (blob2)
+ ds.stb2.st_size = size2;
+ ds.stb2.st_mtime = 0; /* XXX */
+
+ memset(&args, 0, sizeof(args));
+ args.diff_format = D_UNIFIED;
+ args.label[0] = label1 ? label1 : idstr1;
+ args.label[1] = label2 ? label2 : idstr2;
+ args.diff_context = diff_context;
+ flags |= D_PROTOTYPE;
+ if (ignore_whitespace)
+ flags |= D_IGNOREBLANKS;
+
+ if (outfile) {
+ char *modestr1 = NULL, *modestr2 = NULL;
+ int modebits;
+ if (mode1 && mode1 != mode2) {
+ if (S_ISLNK(mode1))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr1, " (mode %o)",
+ mode1 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ if (mode2 && mode1 != mode2) {
+ if (S_ISLNK(mode2))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr2, " (mode %o)",
+ mode2 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ fprintf(outfile, "blob - %s%s\n", idstr1,
+ modestr1 ? modestr1 : "");
+ fprintf(outfile, "blob + %s%s\n", idstr2,
+ modestr2 ? modestr2 : "");
+ free(modestr1);
+ free(modestr2);
+ }
+ err = got_diffreg(&res, f1, f2, flags, &args, &ds, outfile, changes);
+ got_diff_state_free(&ds);
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ if (f2 && fclose(f2) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_output_unidiff(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ struct got_diff_blob_output_unidiff_arg *a = arg;
+
+ return diff_blobs(blob1, blob2, label1, label2, mode1, mode2,
+ a->diff_context, a->ignore_whitespace, a->outfile, NULL);
+}
+
+const struct got_error *
+got_diff_blob(struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blobs(blob1, blob2, label1, label2, 0, 0, diff_context,
+ ignore_whitespace, outfile, NULL);
+}
+
+static const struct got_error *
+alloc_changes(struct got_diff_changes **changes)
+{
+ *changes = calloc(1, sizeof(**changes));
+ if (*changes == NULL)
+ return got_error_from_errno("calloc");
+ SIMPLEQ_INIT(&(*changes)->entries);
+ return NULL;
+}
+
+static const struct got_error *
+diff_blob_file(struct got_diff_changes **changes,
+ struct got_blob_object *blob1, const char *label1, FILE *f2, size_t size2,
+ const char *label2, int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ struct got_diff_state ds;
+ struct got_diff_args args;
+ const struct got_error *err = NULL;
+ FILE *f1 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL;
+ size_t size1;
+ int res, flags = 0;
+
+ if (changes)
+ *changes = NULL;
+
+ size1 = 0;
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else {
+ flags |= D_EMPTY1;
+ idstr1 = "/dev/null";
+ }
+
+ if (f2 == NULL)
+ flags |= D_EMPTY2;
+
+ memset(&ds, 0, sizeof(ds));
+ /* XXX should stat buffers be passed in args instead of ds? */
+ ds.stb1.st_mode = S_IFREG;
+ if (blob1)
+ ds.stb1.st_size = size1;
+ ds.stb1.st_mtime = 0; /* XXX */
+
+ ds.stb2.st_mode = S_IFREG;
+ ds.stb2.st_size = size2;
+ ds.stb2.st_mtime = 0; /* XXX */
+
+ memset(&args, 0, sizeof(args));
+ args.diff_format = D_UNIFIED;
+ args.label[0] = label2;
+ args.label[1] = label2;
+ args.diff_context = diff_context;
+ flags |= D_PROTOTYPE;
+ if (ignore_whitespace)
+ flags |= D_IGNOREBLANKS;
+
+ if (outfile) {
+ fprintf(outfile, "blob - %s\n", label1 ? label1 : idstr1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+ if (changes) {
+ err = alloc_changes(changes);
+ if (err)
+ return err;
+ }
+ err = got_diffreg(&res, f1, f2, flags, &args, &ds, outfile,
+ changes ? *changes : NULL);
+ got_diff_state_free(&ds);
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_file(struct got_blob_object *blob1, const char *label1,
+ FILE *f2, size_t size2, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blob_file(NULL, blob1, label1, f2, size2, label2,
+ diff_context, ignore_whitespace, outfile);
+}
+
+const struct got_error *
+got_diff_blob_file_lines_changed(struct got_diff_changes **changes,
+ struct got_blob_object *blob1, FILE *f2, size_t size2)
+{
+ return diff_blob_file(changes, blob1, NULL, f2, size2, NULL,
+ 0, 0, NULL);
+}
+
+const struct got_error *
+got_diff_blob_lines_changed(struct got_diff_changes **changes,
+ struct got_blob_object *blob1, struct got_blob_object *blob2)
+{
+ const struct got_error *err = NULL;
+
+ err = alloc_changes(changes);
+ if (err)
+ return err;
+
+ err = diff_blobs(blob1, blob2, NULL, NULL, 0, 0, 3, 0, NULL, *changes);
+ if (err) {
+ got_diff_free_changes(*changes);
+ *changes = NULL;
+ }
+ return err;
+}
+
+void
+got_diff_free_changes(struct got_diff_changes *changes)
+{
+ struct got_diff_change *change;
+ while (!SIMPLEQ_EMPTY(&changes->entries)) {
+ change = SIMPLEQ_FIRST(&changes->entries);
+ SIMPLEQ_REMOVE_HEAD(&changes->entries, entry);
+ free(change);
+ }
+ free(changes);
+}
+
+static const struct got_error *
+diff_added_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, NULL, blob, NULL, id, NULL, label, 0, mode, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_blob(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_object *obj1 = NULL;
+ struct got_object *obj2 = NULL;
+ struct got_blob_object *blob1 = NULL;
+ struct got_blob_object *blob2 = NULL;
+
+ err = got_object_open(&obj1, repo, id1);
+ if (err)
+ return err;
+ if (obj1->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&obj2, repo, id2);
+ if (err)
+ goto done;
+ if (obj2->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_BAD_OBJ_DATA);
+ goto done;
+ }
+
+ err = got_object_blob_open(&blob1, repo, obj1, 8192);
+ if (err)
+ goto done;
+
+ err = got_object_blob_open(&blob2, repo, obj2, 8192);
+ if (err)
+ goto done;
+
+ err = cb(cb_arg, blob1, blob2, id1, id2, label1, label2, mode1, mode2,
+ repo);
+done:
+ if (obj1)
+ got_object_close(obj1);
+ if (obj2)
+ got_object_close(obj2);
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, blob, NULL, id, NULL, label, NULL, mode, 0, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_added_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(NULL, tree, NULL, label, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_tree(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj1 = NULL;
+ struct got_object *treeobj2 = NULL;
+ struct got_tree_object *tree1 = NULL;
+ struct got_tree_object *tree2 = NULL;
+
+ err = got_object_open(&treeobj1, repo, id1);
+ if (err)
+ goto done;
+
+ if (treeobj1->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&treeobj2, repo, id2);
+ if (err)
+ goto done;
+
+ if (treeobj2->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree1, repo, treeobj1);
+ if (err)
+ goto done;
+
+ err = got_object_tree_open(&tree2, repo, treeobj2);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree1, tree2, label1, label2, repo, cb, cb_arg,
+ diff_content);
+
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ if (treeobj1)
+ got_object_close(treeobj1);
+ if (treeobj2)
+ got_object_close(treeobj2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree, NULL, label, NULL, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_kind_mismatch(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg)
+{
+ /* XXX TODO */
+ return NULL;
+}
+
+static const struct got_error *
+diff_entry_old_new(struct got_tree_entry *te1,
+ struct got_tree_entry *te2, const char *label1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ int id_match;
+
+ if (got_object_tree_entry_is_submodule(te1))
+ return NULL;
+
+ if (te2 == NULL) {
+ if (S_ISDIR(te1->mode))
+ err = diff_deleted_tree(&te1->id, label1, repo,
+ cb, cb_arg, diff_content);
+ else {
+ if (diff_content)
+ err = diff_deleted_blob(&te1->id, label1,
+ te1->mode, repo, cb, cb_arg);
+ else
+ err = cb(cb_arg, NULL, NULL, &te1->id, NULL,
+ label1, NULL, te1->mode, 0, repo);
+ }
+ return err;
+ } else if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ id_match = (got_object_id_cmp(&te1->id, &te2->id) == 0);
+ if (S_ISDIR(te1->mode) && S_ISDIR(te2->mode)) {
+ if (!id_match)
+ return diff_modified_tree(&te1->id, &te2->id,
+ label1, label2, repo, cb, cb_arg, diff_content);
+ } else if ((S_ISREG(te1->mode) || S_ISLNK(te1->mode)) &&
+ (S_ISREG(te2->mode) || S_ISLNK(te2->mode))) {
+ if (!id_match ||
+ ((te1->mode & (S_IFLNK | S_IXUSR))) !=
+ (te2->mode & (S_IFLNK | S_IXUSR))) {
+ if (diff_content)
+ return diff_modified_blob(&te1->id, &te2->id,
+ label1, label2, te1->mode, te2->mode,
+ repo, cb, cb_arg);
+ else
+ return cb(cb_arg, NULL, NULL, &te1->id,
+ &te2->id, label1, label2, te1->mode,
+ te2->mode, repo);
+ }
+ }
+
+ if (id_match)
+ return NULL;
+
+ return diff_kind_mismatch(&te1->id, &te2->id, label1, label2, repo,
+ cb, cb_arg);
+}
+
+static const struct got_error *
+diff_entry_new_old(struct got_tree_entry *te2,
+ struct got_tree_entry *te1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ if (te1 != NULL) /* handled by diff_entry_old_new() */
+ return NULL;
+
+ if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ if (S_ISDIR(te2->mode))
+ return diff_added_tree(&te2->id, label2, repo, cb, cb_arg,
+ diff_content);
+
+ if (diff_content)
+ return diff_added_blob(&te2->id, label2, te2->mode, repo, cb,
+ cb_arg);
+
+ return cb(cb_arg, NULL, NULL, NULL, &te2->id, NULL, label2, 0,
+ te2->mode, repo);
+}
+
+const struct got_error *
+got_diff_tree_collect_changed_paths(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ const struct got_error *err = NULL;
+ struct got_pathlist_head *paths = arg;
+ struct got_diff_changed_path *change = NULL;
+ char *path = NULL;
+
+ path = strdup(label2 ? label2 : label1);
+ if (path == NULL)
+ return got_error_from_errno("malloc");
+
+ change = malloc(sizeof(*change));
+ if (change == NULL) {
+ err = got_error_from_errno("malloc");
+ goto done;
+ }
+
+ change->status = GOT_STATUS_NO_CHANGE;
+ if (id1 == NULL)
+ change->status = GOT_STATUS_ADD;
+ else if (id2 == NULL)
+ change->status = GOT_STATUS_DELETE;
+ else {
+ if (got_object_id_cmp(id1, id2) != 0)
+ change->status = GOT_STATUS_MODIFY;
+ else if (mode1 != mode2)
+ change->status = GOT_STATUS_MODE_CHANGE;
+ }
+
+ err = got_pathlist_insert(NULL, paths, path, change);
+done:
+ if (err) {
+ free(path);
+ free(change);
+ }
+ return err;
+}
+
+const struct got_error *
+got_diff_tree(struct got_tree_object *tree1, struct got_tree_object *tree2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_tree_entry *te1 = NULL;
+ struct got_tree_entry *te2 = NULL;
+ char *l1 = NULL, *l2 = NULL;
+ int tidx1 = 0, tidx2 = 0;
+
+ if (tree1) {
+ te1 = got_object_tree_get_entry(tree1, 0);
+ if (te1 && asprintf(&l1, "%s%s%s", label1, label1[0] ? "/" : "",
+ te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ if (tree2) {
+ te2 = got_object_tree_get_entry(tree2, 0);
+ if (te2 && asprintf(&l2, "%s%s%s", label2, label2[0] ? "/" : "",
+ te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+
+ do {
+ if (te1) {
+ struct got_tree_entry *te = NULL;
+ if (tree2)
+ te = got_object_tree_find_entry(tree2,
+ te1->name);
+ if (te) {
+ free(l2);
+ l2 = NULL;
+ if (te && asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_old_new(te1, te, l1, l2, repo, cb,
+ cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ if (te2) {
+ struct got_tree_entry *te = NULL;
+ if (tree1)
+ te = got_object_tree_find_entry(tree1,
+ te2->name);
+ free(l2);
+ if (te) {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ } else {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_new_old(te2, te, l2, repo,
+ cb, cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ free(l1);
+ l1 = NULL;
+ if (te1) {
+ tidx1++;
+ te1 = got_object_tree_get_entry(tree1, tidx1);
+ if (te1 &&
+ asprintf(&l1, "%s%s%s", label1,
+ label1[0] ? "/" : "", te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ free(l2);
+ l2 = NULL;
+ if (te2) {
+ tidx2++;
+ te2 = got_object_tree_get_entry(tree2, tidx2);
+ if (te2 &&
+ asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ } while (te1 || te2);
+
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_blobs(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob1 = NULL, *blob2 = NULL;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_blob(&blob1, repo, id1, 8192);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_blob(&blob2, repo, id2, 8192);
+ if (err)
+ goto done;
+ }
+ err = got_diff_blob(blob1, blob2, label1, label2, diff_context,
+ ignore_whitespace, outfile);
+done:
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_trees(struct got_object_id *id1, struct got_object_id *id2,
+ char *label1, char *label2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+ struct got_diff_blob_output_unidiff_arg arg;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_tree(&tree1, repo, id1);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_tree(&tree2, repo, id2);
+ if (err)
+ goto done;
+ }
+ arg.diff_context = diff_context;
+ arg.ignore_whitespace = ignore_whitespace;
+ arg.outfile = outfile;
+ err = got_diff_tree(tree1, tree2, label1, label2, repo,
+ got_diff_blob_output_unidiff, &arg, 1);
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_commits(struct got_object_id *id1,
+ struct got_object_id *id2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_commit_object *commit1 = NULL, *commit2 = NULL;
+
+ if (id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_commit(&commit1, repo, id1);
+ if (err)
+ goto done;
+ }
+
+ err = got_object_open_as_commit(&commit2, repo, id2);
+ if (err)
+ goto done;
+
+ err = got_diff_objects_as_trees(
+ commit1 ? got_object_commit_get_tree_id(commit1) : NULL,
+ got_object_commit_get_tree_id(commit2), "", "", diff_context,
+ ignore_whitespace, repo, outfile);
+done:
+ if (commit1)
+ got_object_commit_close(commit1);
+ if (commit2)
+ got_object_commit_close(commit2);
+ return err;
+}
+
+const struct got_error *
+got_diff_files(struct got_diff_changes **changes,
+ struct got_diff_state **ds,
+ struct got_diff_args **args,
+ int *flags,
+ FILE *f1, size_t size1, const char *label1,
+ FILE *f2, size_t size2, const char *label2,
+ int diff_context, FILE *outfile)
+{
+ const struct got_error *err = NULL;
+ int res;
+
+ *flags = 0;
+ *ds = calloc(1, sizeof(**ds));
+ if (*ds == NULL)
+ return got_error_from_errno("calloc");
+ *args = calloc(1, sizeof(**args));
+ if (*args == NULL) {
+ err = got_error_from_errno("calloc");
+ goto done;
+ }
+
+ if (changes)
+ *changes = NULL;
+
+ if (f1 == NULL)
+ *flags |= D_EMPTY1;
+
+ if (f2 == NULL)
+ *flags |= D_EMPTY2;
+
+ /* XXX should stat buffers be passed in args instead of ds? */
+ (*ds)->stb1.st_mode = S_IFREG;
+ (*ds)->stb1.st_size = size1;
+ (*ds)->stb1.st_mtime = 0; /* XXX */
+
+ (*ds)->stb2.st_mode = S_IFREG;
+ (*ds)->stb2.st_size = size2;
+ (*ds)->stb2.st_mtime = 0; /* XXX */
+
+ (*args)->diff_format = D_UNIFIED;
+ (*args)->label[0] = label1;
+ (*args)->label[1] = label2;
+ (*args)->diff_context = diff_context;
+ *flags |= D_PROTOTYPE;
+
+ if (outfile) {
+ fprintf(outfile, "file - %s\n",
+ f1 == NULL ? "/dev/null" : label1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+ if (changes) {
+ err = alloc_changes(changes);
+ if (err)
+ goto done;
+ }
+ err = got_diffreg(&res, f1, f2, *flags, *args, *ds, outfile,
+ changes ? *changes : NULL);
+done:
+ if (err) {
+ if (*ds) {
+ got_diff_state_free(*ds);
+ free(*ds);
+ *ds = NULL;
+ }
+ if (*args) {
+ free(*args);
+ *args = NULL;
+ }
+ if (changes) {
+ if (*changes)
+ got_diff_free_changes(*changes);
+ *changes = NULL;
+ }
+ }
+ return err;
+}
diff --git a/test/test020.right.txt b/test/test020.right.txt
new file mode 100644
index 000000000000..9ed331be5c5b
--- /dev/null
+++ b/test/test020.right.txt
@@ -0,0 +1,935 @@
+/*
+ * Copyright (c) 2017 Stefan Sperling <stsp@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/stat.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <sha1.h>
+#include <zlib.h>
+
+#include "got_object.h"
+#include "got_repository.h"
+#include "got_error.h"
+#include "got_diff.h"
+#include "got_opentemp.h"
+#include "got_path.h"
+#include "got_cancel.h"
+#include "got_worktree.h"
+
+#include "got_lib_diff.h"
+#include "got_lib_delta.h"
+#include "got_lib_inflate.h"
+#include "got_lib_object.h"
+
+static const struct got_error *
+add_line_offset(off_t **line_offsets, size_t *nlines, off_t off)
+{
+ off_t *p;
+
+ p = reallocarray(*line_offsets, *nlines + 1, sizeof(off_t));
+ if (p == NULL)
+ return got_error_from_errno("reallocarray");
+ *line_offsets = p;
+ (*line_offsets)[*nlines] = off;
+ (*nlines)++;
+ return NULL;
+}
+
+static const struct got_error *
+diff_blobs(off_t **line_offsets, size_t *nlines,
+ struct got_diffreg_result **resultp, struct got_blob_object *blob1,
+ struct got_blob_object *blob2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL, *f2 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char hex2[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL, *idstr2 = NULL;
+ size_t size1, size2;
+ struct got_diffreg_result *result;
+ off_t outoff = 0;
+ int n;
+
+ if (line_offsets && *line_offsets && *nlines > 0)
+ outoff = (*line_offsets)[*nlines - 1];
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ }
+
+ if (blob2) {
+ f2 = got_opentemp();
+ if (f2 == NULL) {
+ err = got_error_from_errno("got_opentemp");
+ fclose(f1);
+ return err;
+ }
+ }
+
+ size1 = 0;
+ if (blob1) {
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else
+ idstr1 = "/dev/null";
+
+ size2 = 0;
+ if (blob2) {
+ idstr2 = got_object_blob_id_str(blob2, hex2, sizeof(hex2));
+ err = got_object_blob_dump_to_file(&size2, NULL, NULL, f2,
+ blob2);
+ if (err)
+ goto done;
+ } else
+ idstr2 = "/dev/null";
+
+ if (outfile) {
+ char *modestr1 = NULL, *modestr2 = NULL;
+ int modebits;
+ if (mode1 && mode1 != mode2) {
+ if (S_ISLNK(mode1))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr1, " (mode %o)",
+ mode1 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ if (mode2 && mode1 != mode2) {
+ if (S_ISLNK(mode2))
+ modebits = S_IFLNK;
+ else
+ modebits = (S_IRWXU | S_IRWXG | S_IRWXO);
+ if (asprintf(&modestr2, " (mode %o)",
+ mode2 & modebits) == -1) {
+ err = got_error_from_errno("asprintf");
+ goto done;
+ }
+ }
+ n = fprintf(outfile, "blob - %s%s\n", idstr1,
+ modestr1 ? modestr1 : "");
+ if (n < 0) {
+ err = got_error_from_errno("fprintf");
+ goto done;
+ }
+ outoff += n;
+ if (line_offsets) {
+ err = add_line_offset(line_offsets, nlines, outoff);
+ if (err)
+ goto done;
+ }
+
+ n = fprintf(outfile, "blob + %s%s\n", idstr2,
+ modestr2 ? modestr2 : "");
+ if (n < 0) {
+ err = got_error_from_errno("fprintf");
+ goto done;
+ }
+ outoff += n;
+ if (line_offsets) {
+ err = add_line_offset(line_offsets, nlines, outoff);
+ if (err)
+ goto done;
+ }
+
+ free(modestr1);
+ free(modestr2);
+ }
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(line_offsets, nlines, result, f1, f2,
+ label1 ? label1 : idstr1,
+ label2 ? label2 : idstr2,
+ GOT_DIFF_OUTPUT_UNIDIFF, diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ if (f2 && fclose(f2) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_output_unidiff(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ struct got_diff_blob_output_unidiff_arg *a = arg;
+
+ return diff_blobs(&a->line_offsets, &a->nlines, NULL,
+ blob1, blob2, label1, label2, mode1, mode2, a->diff_context,
+ a->ignore_whitespace, a->outfile);
+}
+
+const struct got_error *
+got_diff_blob(off_t **line_offsets, size_t *nlines,
+ struct got_blob_object *blob1, struct got_blob_object *blob2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blobs(line_offsets, nlines, NULL, blob1, blob2,
+ label1, label2, 0, 0, diff_context, ignore_whitespace, outfile);
+}
+
+static const struct got_error *
+diff_blob_file(struct got_diffreg_result **resultp,
+ struct got_blob_object *blob1, const char *label1, FILE *f2, size_t size2,
+ const char *label2, int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL;
+ size_t size1;
+ struct got_diffreg_result *result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ size1 = 0;
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else {
+ idstr1 = "/dev/null";
+ }
+
+ if (outfile) {
+ fprintf(outfile, "blob - %s\n", label1 ? label1 : idstr1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, result, f1, f2,
+ label2, label2, GOT_DIFF_OUTPUT_UNIDIFF, diff_context,
+ outfile);
+ if (err)
+ goto done;
+ }
+
+ if (resultp && err == NULL)
+ *resultp = result;
+ else if (result) {
+ free_err = got_diffreg_result_free(result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+done:
+ if (f1 && fclose(f1) != 0 && err == NULL)
+ err = got_error_from_errno("fclose");
+ return err;
+}
+
+const struct got_error *
+got_diff_blob_file(struct got_blob_object *blob1, const char *label1,
+ FILE *f2, size_t size2, const char *label2, int diff_context,
+ int ignore_whitespace, FILE *outfile)
+{
+ return diff_blob_file(NULL, blob1, label1, f2, size2, label2,
+ diff_context, ignore_whitespace, outfile);
+}
+
+const struct got_error *
+got_diff_blob_prepared_file(struct got_diffreg_result **resultp,
+ struct diff_data *data1, struct got_blob_object *blob1,
+ struct diff_data *data2, FILE *f2, char *p2, size_t size2,
+ const struct diff_config *cfg, int ignore_whitespace)
+{
+ const struct got_error *err = NULL, *free_err;
+ FILE *f1 = NULL;
+ char hex1[SHA1_DIGEST_STRING_LENGTH];
+ char *idstr1 = NULL, *p1 = NULL;
+ size_t size1, size;
+ struct got_diffreg_result *result = NULL;
+ int f1_created = 0;
+
+ *resultp = NULL;
+
+ size1 = 0;
+ if (blob1) {
+ f1 = got_opentemp();
+ if (f1 == NULL)
+ return got_error_from_errno("got_opentemp");
+ idstr1 = got_object_blob_id_str(blob1, hex1, sizeof(hex1));
+ err = got_object_blob_dump_to_file(&size1, NULL, NULL, f1,
+ blob1);
+ if (err)
+ goto done;
+ } else {
+ idstr1 = "/dev/null";
+ }
+
+ err = got_diff_prepare_file(&f1, &p1, &f1_created, &size,
+ data1, cfg, ignore_whitespace);
+ if (err)
+ goto done;
+
+ err = got_diffreg_prepared_files(&result, cfg, data1, f1,
+ p1, size1, data2, f2, p2, size2);
+ if (err)
+ goto done;
+
+ *resultp = result;
+done:
+ if (err) {
+ if (result)
+ free_err = got_diffreg_result_free_left(result);
+ else
+ free_err = got_diffreg_close(f1, p1, size1, NULL,
+ NULL, 0);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+ return err;
+}
+
+static const struct got_error *
+diff_added_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, NULL, blob, NULL, id, NULL, label, 0, mode, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_blob(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, mode_t mode1, mode_t mode2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_object *obj1 = NULL;
+ struct got_object *obj2 = NULL;
+ struct got_blob_object *blob1 = NULL;
+ struct got_blob_object *blob2 = NULL;
+
+ err = got_object_open(&obj1, repo, id1);
+ if (err)
+ return err;
+ if (obj1->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&obj2, repo, id2);
+ if (err)
+ goto done;
+ if (obj2->type != GOT_OBJ_TYPE_BLOB) {
+ err = got_error(GOT_ERR_BAD_OBJ_DATA);
+ goto done;
+ }
+
+ err = got_object_blob_open(&blob1, repo, obj1, 8192);
+ if (err)
+ goto done;
+
+ err = got_object_blob_open(&blob2, repo, obj2, 8192);
+ if (err)
+ goto done;
+
+ err = cb(cb_arg, blob1, blob2, id1, id2, label1, label2, mode1, mode2,
+ repo);
+done:
+ if (obj1)
+ got_object_close(obj1);
+ if (obj2)
+ got_object_close(obj2);
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_blob(struct got_object_id *id, const char *label, mode_t mode,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob = NULL;
+ struct got_object *obj = NULL;
+
+ err = got_object_open(&obj, repo, id);
+ if (err)
+ return err;
+
+ err = got_object_blob_open(&blob, repo, obj, 8192);
+ if (err)
+ goto done;
+ err = cb(cb_arg, blob, NULL, id, NULL, label, NULL, mode, 0, repo);
+done:
+ got_object_close(obj);
+ if (blob)
+ got_object_blob_close(blob);
+ return err;
+}
+
+static const struct got_error *
+diff_added_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(NULL, tree, NULL, label, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_modified_tree(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj1 = NULL;
+ struct got_object *treeobj2 = NULL;
+ struct got_tree_object *tree1 = NULL;
+ struct got_tree_object *tree2 = NULL;
+
+ err = got_object_open(&treeobj1, repo, id1);
+ if (err)
+ goto done;
+
+ if (treeobj1->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_open(&treeobj2, repo, id2);
+ if (err)
+ goto done;
+
+ if (treeobj2->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree1, repo, treeobj1);
+ if (err)
+ goto done;
+
+ err = got_object_tree_open(&tree2, repo, treeobj2);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree1, tree2, label1, label2, repo, cb, cb_arg,
+ diff_content);
+
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ if (treeobj1)
+ got_object_close(treeobj1);
+ if (treeobj2)
+ got_object_close(treeobj2);
+ return err;
+}
+
+static const struct got_error *
+diff_deleted_tree(struct got_object_id *id, const char *label,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err;
+ struct got_object *treeobj = NULL;
+ struct got_tree_object *tree = NULL;
+
+ err = got_object_open(&treeobj, repo, id);
+ if (err)
+ goto done;
+
+ if (treeobj->type != GOT_OBJ_TYPE_TREE) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ goto done;
+ }
+
+ err = got_object_tree_open(&tree, repo, treeobj);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree, NULL, label, NULL, repo, cb, cb_arg,
+ diff_content);
+done:
+ if (tree)
+ got_object_tree_close(tree);
+ if (treeobj)
+ got_object_close(treeobj);
+ return err;
+}
+
+static const struct got_error *
+diff_kind_mismatch(struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg)
+{
+ /* XXX TODO */
+ return NULL;
+}
+
+static const struct got_error *
+diff_entry_old_new(struct got_tree_entry *te1,
+ struct got_tree_entry *te2, const char *label1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ const struct got_error *err = NULL;
+ int id_match;
+
+ if (got_object_tree_entry_is_submodule(te1))
+ return NULL;
+
+ if (te2 == NULL) {
+ if (S_ISDIR(te1->mode))
+ err = diff_deleted_tree(&te1->id, label1, repo,
+ cb, cb_arg, diff_content);
+ else {
+ if (diff_content)
+ err = diff_deleted_blob(&te1->id, label1,
+ te1->mode, repo, cb, cb_arg);
+ else
+ err = cb(cb_arg, NULL, NULL, &te1->id, NULL,
+ label1, NULL, te1->mode, 0, repo);
+ }
+ return err;
+ } else if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ id_match = (got_object_id_cmp(&te1->id, &te2->id) == 0);
+ if (S_ISDIR(te1->mode) && S_ISDIR(te2->mode)) {
+ if (!id_match)
+ return diff_modified_tree(&te1->id, &te2->id,
+ label1, label2, repo, cb, cb_arg, diff_content);
+ } else if ((S_ISREG(te1->mode) || S_ISLNK(te1->mode)) &&
+ (S_ISREG(te2->mode) || S_ISLNK(te2->mode))) {
+ if (!id_match ||
+ ((te1->mode & (S_IFLNK | S_IXUSR))) !=
+ (te2->mode & (S_IFLNK | S_IXUSR))) {
+ if (diff_content)
+ return diff_modified_blob(&te1->id, &te2->id,
+ label1, label2, te1->mode, te2->mode,
+ repo, cb, cb_arg);
+ else
+ return cb(cb_arg, NULL, NULL, &te1->id,
+ &te2->id, label1, label2, te1->mode,
+ te2->mode, repo);
+ }
+ }
+
+ if (id_match)
+ return NULL;
+
+ return diff_kind_mismatch(&te1->id, &te2->id, label1, label2, repo,
+ cb, cb_arg);
+}
+
+static const struct got_error *
+diff_entry_new_old(struct got_tree_entry *te2,
+ struct got_tree_entry *te1, const char *label2,
+ struct got_repository *repo, got_diff_blob_cb cb, void *cb_arg,
+ int diff_content)
+{
+ if (te1 != NULL) /* handled by diff_entry_old_new() */
+ return NULL;
+
+ if (got_object_tree_entry_is_submodule(te2))
+ return NULL;
+
+ if (S_ISDIR(te2->mode))
+ return diff_added_tree(&te2->id, label2, repo, cb, cb_arg,
+ diff_content);
+
+ if (diff_content)
+ return diff_added_blob(&te2->id, label2, te2->mode, repo, cb,
+ cb_arg);
+
+ return cb(cb_arg, NULL, NULL, NULL, &te2->id, NULL, label2, 0,
+ te2->mode, repo);
+}
+
+const struct got_error *
+got_diff_tree_collect_changed_paths(void *arg, struct got_blob_object *blob1,
+ struct got_blob_object *blob2, struct got_object_id *id1,
+ struct got_object_id *id2, const char *label1, const char *label2,
+ mode_t mode1, mode_t mode2, struct got_repository *repo)
+{
+ const struct got_error *err = NULL;
+ struct got_pathlist_head *paths = arg;
+ struct got_diff_changed_path *change = NULL;
+ char *path = NULL;
+
+ path = strdup(label2 ? label2 : label1);
+ if (path == NULL)
+ return got_error_from_errno("malloc");
+
+ change = malloc(sizeof(*change));
+ if (change == NULL) {
+ err = got_error_from_errno("malloc");
+ goto done;
+ }
+
+ change->status = GOT_STATUS_NO_CHANGE;
+ if (id1 == NULL)
+ change->status = GOT_STATUS_ADD;
+ else if (id2 == NULL)
+ change->status = GOT_STATUS_DELETE;
+ else {
+ if (got_object_id_cmp(id1, id2) != 0)
+ change->status = GOT_STATUS_MODIFY;
+ else if (mode1 != mode2)
+ change->status = GOT_STATUS_MODE_CHANGE;
+ }
+
+ err = got_pathlist_insert(NULL, paths, path, change);
+done:
+ if (err) {
+ free(path);
+ free(change);
+ }
+ return err;
+}
+
+const struct got_error *
+got_diff_tree(struct got_tree_object *tree1, struct got_tree_object *tree2,
+ const char *label1, const char *label2, struct got_repository *repo,
+ got_diff_blob_cb cb, void *cb_arg, int diff_content)
+{
+ const struct got_error *err = NULL;
+ struct got_tree_entry *te1 = NULL;
+ struct got_tree_entry *te2 = NULL;
+ char *l1 = NULL, *l2 = NULL;
+ int tidx1 = 0, tidx2 = 0;
+
+ if (tree1) {
+ te1 = got_object_tree_get_entry(tree1, 0);
+ if (te1 && asprintf(&l1, "%s%s%s", label1, label1[0] ? "/" : "",
+ te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ if (tree2) {
+ te2 = got_object_tree_get_entry(tree2, 0);
+ if (te2 && asprintf(&l2, "%s%s%s", label2, label2[0] ? "/" : "",
+ te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+
+ do {
+ if (te1) {
+ struct got_tree_entry *te = NULL;
+ if (tree2)
+ te = got_object_tree_find_entry(tree2,
+ te1->name);
+ if (te) {
+ free(l2);
+ l2 = NULL;
+ if (te && asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_old_new(te1, te, l1, l2, repo, cb,
+ cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ if (te2) {
+ struct got_tree_entry *te = NULL;
+ if (tree1)
+ te = got_object_tree_find_entry(tree1,
+ te2->name);
+ free(l2);
+ if (te) {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ } else {
+ if (asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return
+ got_error_from_errno("asprintf");
+ }
+ err = diff_entry_new_old(te2, te, l2, repo,
+ cb, cb_arg, diff_content);
+ if (err)
+ break;
+ }
+
+ free(l1);
+ l1 = NULL;
+ if (te1) {
+ tidx1++;
+ te1 = got_object_tree_get_entry(tree1, tidx1);
+ if (te1 &&
+ asprintf(&l1, "%s%s%s", label1,
+ label1[0] ? "/" : "", te1->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ free(l2);
+ l2 = NULL;
+ if (te2) {
+ tidx2++;
+ te2 = got_object_tree_get_entry(tree2, tidx2);
+ if (te2 &&
+ asprintf(&l2, "%s%s%s", label2,
+ label2[0] ? "/" : "", te2->name) == -1)
+ return got_error_from_errno("asprintf");
+ }
+ } while (te1 || te2);
+
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_blobs(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ const char *label1, const char *label2, int diff_context,
+ int ignore_whitespace, struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob1 = NULL, *blob2 = NULL;
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_blob(&blob1, repo, id1, 8192);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_blob(&blob2, repo, id2, 8192);
+ if (err)
+ goto done;
+ }
+ err = got_diff_blob(line_offsets, nlines, blob1, blob2,
+ label1, label2, diff_context, ignore_whitespace, outfile);
+done:
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_trees(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ char *label1, char *label2, int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+ struct got_diff_blob_output_unidiff_arg arg;
+ int want_lineoffsets = (line_offsets != NULL && *line_offsets != NULL);
+
+ if (id1 == NULL && id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_tree(&tree1, repo, id1);
+ if (err)
+ goto done;
+ }
+ if (id2) {
+ err = got_object_open_as_tree(&tree2, repo, id2);
+ if (err)
+ goto done;
+ }
+ arg.diff_context = diff_context;
+ arg.ignore_whitespace = ignore_whitespace;
+ arg.outfile = outfile;
+ if (want_lineoffsets) {
+ arg.line_offsets = *line_offsets;
+ arg.nlines = *nlines;
+ } else {
+ arg.line_offsets = NULL;
+ arg.nlines = 0;
+ }
+ err = got_diff_tree(tree1, tree2, label1, label2, repo,
+ got_diff_blob_output_unidiff, &arg, 1);
+
+ if (want_lineoffsets) {
+ *line_offsets = arg.line_offsets; /* was likely re-allocated */
+ *nlines = arg.nlines;
+ }
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_commits(off_t **line_offsets, size_t *nlines,
+ struct got_object_id *id1, struct got_object_id *id2,
+ int diff_context, int ignore_whitespace,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_commit_object *commit1 = NULL, *commit2 = NULL;
+
+ if (id2 == NULL)
+ return got_error(GOT_ERR_NO_OBJ);
+
+ if (id1) {
+ err = got_object_open_as_commit(&commit1, repo, id1);
+ if (err)
+ goto done;
+ }
+
+ err = got_object_open_as_commit(&commit2, repo, id2);
+ if (err)
+ goto done;
+
+ err = got_diff_objects_as_trees(line_offsets, nlines,
+ commit1 ? got_object_commit_get_tree_id(commit1) : NULL,
+ got_object_commit_get_tree_id(commit2), "", "", diff_context,
+ ignore_whitespace, repo, outfile);
+done:
+ if (commit1)
+ got_object_commit_close(commit1);
+ if (commit2)
+ got_object_commit_close(commit2);
+ return err;
+}
+
+const struct got_error *
+got_diff_files(struct got_diffreg_result **resultp,
+ FILE *f1, const char *label1, FILE *f2, const char *label2,
+ int diff_context, int ignore_whitespace, FILE *outfile)
+{
+ const struct got_error *err = NULL;
+ struct got_diffreg_result *diffreg_result = NULL;
+
+ if (resultp)
+ *resultp = NULL;
+
+ if (outfile) {
+ fprintf(outfile, "file - %s\n",
+ f1 == NULL ? "/dev/null" : label1);
+ fprintf(outfile, "file + %s\n",
+ f2 == NULL ? "/dev/null" : label2);
+ }
+
+ err = got_diffreg(&diffreg_result, f1, f2, GOT_DIFF_ALGORITHM_MYERS,
+ ignore_whitespace);
+ if (err)
+ goto done;
+
+ if (outfile) {
+ err = got_diffreg_output(NULL, NULL, diffreg_result,
+ f1, f2, label1, label2, GOT_DIFF_OUTPUT_UNIDIFF,
+ diff_context, outfile);
+ if (err)
+ goto done;
+ }
+
+done:
+ if (resultp && err == NULL)
+ *resultp = diffreg_result;
+ else if (diffreg_result) {
+ const struct got_error *free_err;
+ free_err = got_diffreg_result_free(diffreg_result);
+ if (free_err && err == NULL)
+ err = free_err;
+ }
+
+ return err;
+}
diff --git a/test/test021.left.txt b/test/test021.left.txt
new file mode 100644
index 000000000000..952d28523094
--- /dev/null
+++ b/test/test021.left.txt
@@ -0,0 +1,1367 @@
+/* $OpenBSD: softraid_crypto.c,v 1.91 2013/03/31 15:44:52 jsing Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/proc.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/cryptosoft.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+#include <dev/rndvar.h>
+
+/*
+ * The per-I/O data that we need to preallocate. We cannot afford to allow I/O
+ * to start failing when memory pressure kicks in. We can store this in the WU
+ * because we assert that only one ccb per WU will ever be active.
+ */
+struct sr_crypto_wu {
+ TAILQ_ENTRY(sr_crypto_wu) cr_link;
+ struct uio cr_uio;
+ struct iovec cr_iov;
+ struct cryptop *cr_crp;
+ struct cryptodesc *cr_descs;
+ struct sr_workunit *cr_wu;
+ void *cr_dmabuf;
+};
+
+
+struct sr_crypto_wu *sr_crypto_wu_get(struct sr_workunit *, int);
+void sr_crypto_wu_put(struct sr_crypto_wu *);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+int sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_rw2(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+int sr_crypto_read(struct cryptop *);
+void sr_crypto_finish_io(struct sr_workunit *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ sr_crypto_create_keys(sd);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ bcopy(data, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_wu_get(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr64_t blk = 0;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_get wu: %p encrypt: %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ if ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL)
+ TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+ if (crwu == NULL)
+ panic("sr_crypto_wu_get: out of wus");
+
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ bcopy(xs->data, crwu->cr_uio.uio_iov->iov_base, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ if (xs->cmdlen == 10)
+ blk = _4btol(((struct scsi_rw_big *)xs->cmd)->addr);
+ else if (xs->cmdlen == 16)
+ blk = _8btol(((struct scsi_rw_16 *)xs->cmd)->addr);
+ else if (xs->cmdlen == 6)
+ blk = _3btol(((struct scsi_rw *)xs->cmd)->addr);
+
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the linked list
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ crd = crwu->cr_descs;
+ for (i = 0; i < ((MAXPHYS >> DEV_BSHIFT) - n); i++) {
+ crd = crd->crd_next;
+ KASSERT(crd);
+ }
+ crwu->cr_crp->crp_desc = crd;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /* Select crypto session based on block number */
+ keyndx = blk >> SR_CRYPTO_KEY_BLKSHIFT;
+ if (keyndx >= SR_CRYPTO_MAXKEYS)
+ goto unwind;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+ if (crwu->cr_crp->crp_sid == (u_int64_t)-1)
+ goto unwind;
+
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0, crd = crwu->cr_crp->crp_desc; crd;
+ i++, blk++, crd = crd->crd_next) {
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = CRYPTO_AES_XTS;
+
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ crd->crd_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ crd->crd_klen = 512;
+ break;
+ default:
+ goto unwind;
+ }
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ bcopy(&blk, crd->crd_iv, sizeof(blk));
+ }
+ crwu->cr_wu = wu;
+ crwu->cr_crp->crp_opaque = crwu;
+
+ return (crwu);
+
+unwind:
+ /* steal the descriptors back from the cryptop */
+ crwu->cr_crp->crp_desc = NULL;
+
+ return (NULL);
+}
+
+void
+sr_crypto_wu_put(struct sr_crypto_wu *crwu)
+{
+ struct cryptop *crp = crwu->cr_crp;
+ struct sr_workunit *wu = crwu->cr_wu;
+ struct sr_discipline *sd = wu->swu_dis;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_put crwu: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu);
+
+ /* steal the descriptors back from the cryptop */
+ crp->crp_desc = NULL;
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ bcopy(&kdfinfo->genkdf,
+ sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ bcopy(&kdfinfo->maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %u\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %u\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ bcopy(check_digest, sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto fail;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ goto fail;
+ }
+ if (label.d_secsize != DEV_BSIZE) {
+ sr_error(sc, "%s has unsupported sector size (%d)",
+ devname, label.d_secsize);
+ goto fail;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)\n",
+ devname, label.d_partitions[part].p_fstype);
+ goto fail;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ bcopy(&sd->sd_meta->ssdi.ssd_uuid, &km->scmi.scm_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ bcopy(&sd->sd_meta->ssdi.ssd_uuid, &sm->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ bcopy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ if (key_disk)
+ free(key_disk, M_DEVBUF);
+ key_disk = NULL;
+
+done:
+ if (omi)
+ free(omi, M_DEVBUF);
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF);
+ if (fakesd)
+ free(fakesd, M_DEVBUF);
+ if (sm)
+ free(sm, M_DEVBUF);
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ goto done;
+ }
+ if (label.d_secsize != DEV_BSIZE) {
+ sr_error(sc, "%s has unsupported sector size (%d)",
+ devname, label.d_secsize);
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)\n",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * 512, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ bcopy((struct sr_meta_chunk *)(sm + 1), &key_disk->src_meta,
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ bcopy(&skm->skm_maskkey,
+ sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ bcopy(omh + sizeof(struct sr_meta_opt_hdr),
+ sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != SLIST_END(&som); omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ if (omi->omi_som)
+ free(omi->omi_som, M_DEVBUF);
+ free(omi, M_DEVBUF);
+ }
+
+ if (sm)
+ free(sm, M_DEVBUF);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct cryptoini cri;
+ struct sr_crypto_wu *crwu;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each wu allocate the uio, iovec and crypto structures.
+ * these have to be allocated now because during runtime we can't
+ * fail an allocation without failing the io (which can cause real
+ * problems).
+ */
+ mtx_init(&sd->mds.mdd_crypto.scr_mutex, IPL_BIO);
+ TAILQ_INIT(&sd->mds.mdd_crypto.scr_wus);
+ for (i = 0; i < sd->sd_max_wu; i++) {
+ crwu = malloc(sizeof(*crwu), M_DEVBUF,
+ M_WAITOK | M_ZERO | M_CANFAIL);
+ if (crwu == NULL)
+ return (ENOMEM);
+ /* put it on the list now so if we fail it'll be freed */
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ /* steal the list of cryptodescs */
+ crwu->cr_descs = crwu->cr_crp->crp_desc;
+ crwu->cr_crp->crp_desc = NULL;
+ }
+
+ bzero(&cri, sizeof(cri));
+ cri.cri_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ cri.cri_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ cri.cri_klen = 512;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks */
+ num_keys = sd->sd_meta->ssdi.ssd_size >> SR_CRYPTO_KEY_BLKSHIFT;
+ if (num_keys >= SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i <= num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ for (i = 0;
+ sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1;
+ i++) {
+ crypto_freesession(
+ sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_crypto_wu *crwu;
+ u_int i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk, sizeof
+ sd->mds.mdd_crypto.key_disk);
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF);
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ for (i = 0; sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1; i++) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ while ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL) {
+ TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+
+ if (crwu->cr_dmabuf != NULL)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp) {
+ /* twiddle cryptoreq back */
+ crwu->cr_crp->crp_desc = crwu->cr_descs;
+ crypto_freereq(crwu->cr_crp);
+ }
+ free(crwu, M_DEVBUF);
+ }
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ int s, rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_wu_get(wu, 1);
+ if (crwu == NULL)
+ return (1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ s = splvm();
+ if (crypto_invoke(crwu->cr_crp))
+ rv = 1;
+ else
+ rv = crwu->cr_crp->crp_etype;
+ splx(s);
+ } else
+ rv = sr_crypto_rw2(wu, NULL);
+
+ return (rv);
+}
+
+int
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %x xs: %x\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+ }
+
+ return (sr_crypto_rw2(wu, crwu));
+}
+
+int
+sr_crypto_rw2(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ int s;
+ daddr64_t blk;
+
+ if (sr_validate_io(wu, &blk, "sr_crypto_rw2"))
+ goto bad;
+
+ blk += sd->sd_meta->ssd_data_offset;
+
+ ccb = sr_ccb_rw(sd, 0, blk, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+
+ s = splbio();
+
+ if (sr_check_io_collision(wu))
+ goto queued;
+
+ sr_raid_startwu(wu);
+
+queued:
+ splx(s);
+ return (0);
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ struct sr_ccb *ccb;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ /* only fails on implementation error */
+ crwu = sr_crypto_wu_get(wu, 0);
+ if (crwu == NULL)
+ panic("sr_crypto_intr: no wu");
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ ccb = TAILQ_FIRST(&wu->swu_ccb);
+ if (ccb == NULL)
+ panic("sr_crypto_done: no ccbs on workunit");
+ ccb->ccb_opaque = crwu;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_intr: crypto_invoke %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ s = splvm();
+ crypto_invoke(crwu->cr_crp);
+ splx(s);
+ return;
+ }
+
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+}
+
+void
+sr_crypto_finish_io(struct sr_workunit *wu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+#ifdef SR_DEBUG
+ struct sr_softc *sc = sd->sd_sc;
+#endif /* SR_DEBUG */
+
+ splassert(IPL_BIO);
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_finish_io: wu %x xs: %x\n",
+ DEVNAME(sc), wu, xs);
+
+ if (wu->swu_cb_active == 1)
+ panic("%s: sr_crypto_finish_io", DEVNAME(sd->sd_sc));
+ TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link) {
+ if (ccb->ccb_opaque == NULL)
+ continue;
+ sr_crypto_wu_put(ccb->ccb_opaque);
+ }
+
+ sr_scsi_done(sd, xs);
+}
+
+int
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %x xs: %x\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+
+ return (0);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test021.right.txt b/test/test021.right.txt
new file mode 100644
index 000000000000..7e2cc400cddb
--- /dev/null
+++ b/test/test021.right.txt
@@ -0,0 +1,1251 @@
+/* $OpenBSD: softraid_crypto.c,v 1.139 2020/07/13 00:06:22 kn Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+
+/*
+ * The per-I/O data that we need to preallocate. We cannot afford to allow I/O
+ * to start failing when memory pressure kicks in. We can store this in the WU
+ * because we assert that only one ccb per WU will ever be active.
+ */
+struct sr_crypto_wu {
+ struct sr_workunit cr_wu; /* Must be first. */
+ struct uio cr_uio;
+ struct iovec cr_iov;
+ struct cryptop *cr_crp;
+ void *cr_dmabuf;
+};
+
+
+struct sr_crypto_wu *sr_crypto_prepare(struct sr_workunit *, int);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+void sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+void sr_crypto_read(struct cryptop *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_wu_size = sizeof(struct sr_crypto_wu);
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+ }
+
+ if (coerced_size > SR_CRYPTO_MAXSIZE) {
+ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
+ sd->sd_name, coerced_size, SR_CRYPTO_MAXSIZE);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ sr_crypto_create_keys(sd);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, data,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_prepare(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr_t blkno;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_prepare wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ memcpy(crwu->cr_uio.uio_iov->iov_base, xs->data, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ blkno = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the amount
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ KASSERT(crwu->cr_crp->crp_ndescalloc >= n);
+ crwu->cr_crp->crp_ndesc = n;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /*
+ * Select crypto session based on block number.
+ *
+ * XXX - this does not handle the case where the read/write spans
+ * across a different key blocks (e.g. 0.5TB boundary). Currently
+ * this is already broken by the use of scr_key[0] below.
+ */
+ keyndx = blkno >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+
+ crwu->cr_crp->crp_opaque = crwu;
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_NOQUEUE;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0; i < crwu->cr_crp->crp_ndesc; i++, blkno++) {
+ crd = &crwu->cr_crp->crp_desc[i];
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
+ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ memcpy(crd->crd_iv, &blkno, sizeof(blkno));
+ }
+
+ return (crwu);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo->genkdf, kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &kdfinfo->maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF, bc->bc_opaque_size);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Copy new KDF hint to metadata, if supplied. */
+ if (kdfinfo2->flags & SR_CRYPTOKDF_HINT) {
+ if (kdfinfo2->genkdf.len >
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint))
+ goto out;
+ explicit_bzero(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint));
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo2->genkdf, kdfinfo2->genkdf.len);
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ memcpy(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac, check_digest,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF, ksz);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ memcpy(&km->scmi.scm_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ memcpy(&sm->ssdi.ssd_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ memcpy(&skm->skm_maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ free(key_disk, M_DEVBUF, sizeof(struct sr_chunk));
+ key_disk = NULL;
+
+done:
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF,
+ sizeof(struct sr_chunk *));
+ free(fakesd, M_DEVBUF, sizeof(struct sr_discipline));
+ free(sm, M_DEVBUF, sizeof(struct sr_metadata));
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * DEV_BSIZE, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ memcpy(&key_disk->src_meta, (struct sr_meta_chunk *)(sm + 1),
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey,
+ omh + sizeof(struct sr_meta_opt_hdr),
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != NULL; omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ free(omi->omi_som, M_DEVBUF, 0);
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ }
+
+ free(sm, M_DEVBUF, SR_META_SIZE * DEV_BSIZE);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+static void
+sr_crypto_free_sessions(struct sr_discipline *sd)
+{
+ u_int i;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ if (sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ }
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+ struct cryptoini cri;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ sd->mds.mdd_crypto.scr_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ sd->mds.mdd_crypto.scr_klen = 512;
+ break;
+ default:
+ sr_error(sd->sd_sc, "unknown crypto algorithm");
+ return (EINVAL);
+ }
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each work unit allocate the uio, iovec and crypto structures.
+ * These have to be allocated now because during runtime we cannot
+ * fail an allocation without failing the I/O (which can cause real
+ * problems).
+ */
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ }
+
+ memset(&cri, 0, sizeof(cri));
+ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
+ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks. */
+ num_keys = ((sd->sd_meta->ssdi.ssd_size - 1) >>
+ SR_CRYPTO_KEY_BLKSHIFT) + 1;
+ if (num_keys > SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i < num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ sr_crypto_free_sessions(sd);
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ sr_crypto_free_sessions(sd);
+
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ if (crwu->cr_dmabuf)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp)
+ crypto_freereq(crwu->cr_crp);
+ }
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ daddr_t blkno;
+ int rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (sr_validate_io(wu, &blkno, "sr_crypto_rw"))
+ return (1);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_prepare(wu, 1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ rv = crypto_dispatch(crwu->cr_crp);
+ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+ } else
+ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+}
+
+void
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+ sr_crypto_dev_rw(wu, crwu);
+}
+
+int
+sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ daddr_t blkno;
+
+ blkno = wu->swu_blk_start;
+
+ ccb = sr_ccb_rw(sd, 0, blkno, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+ sr_schedule_wu(wu);
+
+ return (0);
+
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ crwu = sr_crypto_prepare(wu, 0);
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ crypto_dispatch(crwu->cr_crp);
+ return;
+ }
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test101.left-P.txt b/test/test101.left-P.txt
new file mode 100644
index 000000000000..fd113b0f7150
--- /dev/null
+++ b/test/test101.left-P.txt
@@ -0,0 +1,7 @@
+A
+B
+C
+A
+B
+B
+A
diff --git a/test/test101.right-P.txt b/test/test101.right-P.txt
new file mode 100644
index 000000000000..0075e6d23de0
--- /dev/null
+++ b/test/test101.right-P.txt
@@ -0,0 +1,6 @@
+C
+B
+A
+B
+A
+C
diff --git a/test/test102.left-P.txt b/test/test102.left-P.txt
new file mode 100644
index 000000000000..de77f56f2d47
--- /dev/null
+++ b/test/test102.left-P.txt
@@ -0,0 +1,10 @@
+A
+B
+C
+A
+B
+B
+A
+X
+Y
+Z
diff --git a/test/test102.right-P.txt b/test/test102.right-P.txt
new file mode 100644
index 000000000000..a9b4b8b851dd
--- /dev/null
+++ b/test/test102.right-P.txt
@@ -0,0 +1,9 @@
+C
+B
+A
+B
+A
+C
+X
+Z
+Q
diff --git a/test/test103.left-P.txt b/test/test103.left-P.txt
new file mode 100644
index 000000000000..940532533944
--- /dev/null
+++ b/test/test103.left-P.txt
@@ -0,0 +1,5 @@
+a
+b
+c
+d
+e
diff --git a/test/test103.right-P.txt b/test/test103.right-P.txt
new file mode 100644
index 000000000000..d9f266e14574
--- /dev/null
+++ b/test/test103.right-P.txt
@@ -0,0 +1,4 @@
+x
+b
+c
+y
diff --git a/test/test104.left-P.txt b/test/test104.left-P.txt
new file mode 100644
index 000000000000..72d95cf6331a
--- /dev/null
+++ b/test/test104.left-P.txt
@@ -0,0 +1,14 @@
+void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+{
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+ if (!Chunk_bounds_check(dst, dst_start, n)) return;
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+}
+
+int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+{
+ if (chunk == NULL) return 0;
+
+ return start <= chunk->length && n <= chunk->length - start;
+}
diff --git a/test/test104.right-P.txt b/test/test104.right-P.txt
new file mode 100644
index 000000000000..cfe8f2ed6be0
--- /dev/null
+++ b/test/test104.right-P.txt
@@ -0,0 +1,14 @@
+int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
+{
+ if (chunk == NULL) return 0;
+
+ return start <= chunk->length && n <= chunk->length - start;
+}
+
+void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
+{
+ if (!Chunk_bounds_check(src, src_start, n)) return;
+ if (!Chunk_bounds_check(dst, dst_start, n)) return;
+
+ memcpy(dst->data + dst_start, src->data + src_start, n);
+}
diff --git a/test/test105.left-P.txt b/test/test105.left-P.txt
new file mode 100644
index 000000000000..b77fc41c4c87
--- /dev/null
+++ b/test/test105.left-P.txt
@@ -0,0 +1,7 @@
+David Axelrod
+Electric Prunes
+Gil Scott Heron
+The Slits
+Faust
+The Sonics
+The Sonics
diff --git a/test/test105.right-P.txt b/test/test105.right-P.txt
new file mode 100644
index 000000000000..2480cecfba48
--- /dev/null
+++ b/test/test105.right-P.txt
@@ -0,0 +1,7 @@
+The Slits
+Gil Scott Heron
+David Axelrod
+Electric Prunes
+Faust
+The Sonics
+The Sonics
diff --git a/test/test106.left-P.txt b/test/test106.left-P.txt
new file mode 100644
index 000000000000..e01fce04d5ef
--- /dev/null
+++ b/test/test106.left-P.txt
@@ -0,0 +1,25 @@
+Below is an example license to be used for new code in OpenBSD,
+modeled after the ISC license.
+
+It is important to specify the year of the copyright. Additional years
+should be separated by a comma, e.g.
+ Copyright (c) 2003, 2004
+
+If you add extra text to the body of the license, be careful not to
+add further restrictions.
+
+/*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
diff --git a/test/test106.right-P.txt b/test/test106.right-P.txt
new file mode 100644
index 000000000000..40a0f253dd2e
--- /dev/null
+++ b/test/test106.right-P.txt
@@ -0,0 +1,25 @@
+Below is an example license to be used for new code in OpenBSD,
+modeled after the ISC license.
+
+It is important to specify the year of the copyright. Additional years
+should be separated by a comma, e.g.
+ Copyright (c) 2003, 2004, 2005
+
+If you add extra text to the body of the license, be careful not to
+add further restrictions.
+
+/*
+ * Copyright (c) CCYY YOUR NAME HERE <user@your.dom.ain>
+ *
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+An extra line
diff --git a/test/test107.left-P.txt b/test/test107.left-P.txt
new file mode 100644
index 000000000000..587be6b4c3f9
--- /dev/null
+++ b/test/test107.left-P.txt
@@ -0,0 +1 @@
+x
diff --git a/test/test107.right-P.txt b/test/test107.right-P.txt
new file mode 100644
index 000000000000..47b0ccb04734
--- /dev/null
+++ b/test/test107.right-P.txt
@@ -0,0 +1 @@
+abcdx
diff --git a/test/test108.left-P.txt b/test/test108.left-P.txt
new file mode 100644
index 000000000000..587be6b4c3f9
--- /dev/null
+++ b/test/test108.left-P.txt
@@ -0,0 +1 @@
+x
diff --git a/test/test108.right-P.txt b/test/test108.right-P.txt
new file mode 100644
index 000000000000..70b67eef4500
--- /dev/null
+++ b/test/test108.right-P.txt
@@ -0,0 +1,6 @@
+x
+a
+b
+c
+d
+x
diff --git a/test/test109.left-P.txt b/test/test109.left-P.txt
new file mode 100644
index 000000000000..e4e5238f8e5d
--- /dev/null
+++ b/test/test109.left-P.txt
@@ -0,0 +1,3 @@
+x
+a
+b
diff --git a/test/test109.right-P.txt b/test/test109.right-P.txt
new file mode 100644
index 000000000000..3a4386800dba
--- /dev/null
+++ b/test/test109.right-P.txt
@@ -0,0 +1,10 @@
+x
+a
+b
+c
+d
+e
+f
+x
+a
+b
diff --git a/test/test110.left-P.txt b/test/test110.left-P.txt
new file mode 100644
index 000000000000..f68ae6a8ceaa
--- /dev/null
+++ b/test/test110.left-P.txt
@@ -0,0 +1,14197 @@
+/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+/*
+ * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Descriptions of known vendors and devices ("products").
+ */
+struct usb_known_vendor {
+ u_int16_t vendor;
+ char *vendorname;
+};
+
+struct usb_known_product {
+ u_int16_t vendor;
+ u_int16_t product;
+ char *productname;
+};
+
+const struct usb_known_product usb_known_products[] = {
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_HOMECONN,
+ "HomeConnect",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CREB96,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C19250,
+ "3C19250 Ethernet",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CRSHEW696,
+ "3CRSHEW696",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460,
+ "HomeConnect 3C460",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460B,
+ "HomeConnect 3C460B",
+ },
+ {
+ USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075,
+ "3CRUSB10075",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_OFFICECONN,
+ "3Com OfficeConnect Analog Modem",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USRISDN,
+ "3Com U.S. Robotics Pro ISDN TA",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_HOMECONN,
+ "3Com HomeConnect",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG,
+ "Stereo Plug Cable",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1,
+ "XX1",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2,
+ "XX2",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_URE450,
+ "URE450 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000,
+ "UFE1000 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4,
+ "XX4",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5,
+ "XX5",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6,
+ "XX6",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7,
+ "XX7",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_LCS8138TX,
+ "LCS-8138TX",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8,
+ "XX8",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9,
+ "XX9",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UF200,
+ "UF200 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54,
+ "WL54",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10,
+ "XX10",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_BWU613,
+ "BWU613",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_HWU54DM,
+ "HWU54DM",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WUG2700,
+ "WUG2700",
+ },
+ {
+ USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC,
+ "USB320-EC Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_2664W,
+ "2664W",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_111,
+ "T-Sinus 111 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG,
+ "SMCWUSB-G",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2_NF,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001,
+ "SpeedStream Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN4501H_LF_IR,
+ "WN4501H-LF-IR",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WUS201,
+ "WUS-201",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN7512,
+ "WN7512",
+ },
+ {
+ USB_VENDOR_ACEECA, USB_PRODUCT_ACEECA_MEZ1000,
+ "MEZ1000 RDA",
+ },
+ {
+ USB_VENDOR_ACERCM, USB_PRODUCT_ACERCM_EP1427X2,
+ "EP-1427X-2 Ethernet",
+ },
+ {
+ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632,
+ "USB 2.0 Data Link",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_C310U,
+ "Acerscan C310U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_320U,
+ "Acerscan 320U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_640U,
+ "Acerscan 640U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_620U,
+ "Acerscan 620U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ATAPI,
+ "ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL300,
+ "AWL300",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL400,
+ "AWL400",
+ },
+ {
+ USB_VENDOR_ACERW, USB_PRODUCT_ACERW_WARPLINK,
+ "Warplink",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25,
+ "Prism2.5 WLAN",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25A,
+ "Prism2.5 WLAN A",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_FREELAN,
+ "ROPEX FreeLan 802.11b",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_802UAT1,
+ "802UAT1",
+ },
+ {
+ USB_VENDOR_ACTISYS, USB_PRODUCT_ACTISYS_IR2000U,
+ "ACT-IR2000U FIR",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD,
+ "I/O Board",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD_FW1,
+ "I/O Board, rev. 1",
+ },
+ {
+ USB_VENDOR_ADAPTEC, USB_PRODUCT_ADAPTEC_AWN8020,
+ "AWN-8020 WLAN",
+ },
+ {
+ USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_205,
+ "Cable 205",
+ },
+ {
+ USB_VENDOR_ADDTRON, USB_PRODUCT_ADDTRON_AWU120,
+ "AWU-120",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_4,
+ "AN986A Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS,
+ "AN986 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII,
+ "AN8511 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_2,
+ "AN8513 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_3,
+ "AN8515 Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BT,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BTX,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_AEI, USB_PRODUCT_AEI_FASTETHERNET,
+ "Fast Ethernet",
+ },
+ {
+ USB_VENDOR_AGATE, USB_PRODUCT_AGATE_QDRIVE,
+ "Q-Drive",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1236U,
+ "SnapScan 1236U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANTOUCH,
+ "SnapScan Touch",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U2,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE40,
+ "SnapScan e40",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE50,
+ "SnapScan e50",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE20,
+ "SnapScan e20",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE25,
+ "SnapScan e25",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE26,
+ "SnapScan e26",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE52,
+ "SnapScan e52",
+ },
+ {
+ USB_VENDOR_AINCOMM, USB_PRODUCT_AINCOMM_AWU2000B,
+ "AWU2000B",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220,
+ "CDMA Wireless EVDO card",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_AIRCARD_313U,
+ "Aircard 313U",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AKS, USB_PRODUCT_AKS_USBHASP,
+ "USB-HASP 0.06",
+ },
+ {
+ USB_VENDOR_ALCATEL, USB_PRODUCT_ALCATEL_OT535,
+ "One Touch 535/735",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST120G,
+ "SpeedTouch 120g",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST121G,
+ "SpeedTouch 121g",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_MA_KBD_HUB,
+ "MacAlly Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU9814,
+ "AU9814 Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_SM_KBD,
+ "MicroConnectors/StrongMan",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_NEC_KBD_HUB,
+ "NEC Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB,
+ "Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN, USB_PRODUCT_ALLIEDTELESYN_ATUSB100,
+ "AT-USB100",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70,
+ "ADA70 Speakers",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495,
+ "ASC495 Speakers",
+ },
+ {
+ USB_VENDOR_ALTI2, USB_PRODUCT_ALTI2_NEPTUNE3,
+ "Neptune 3",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250,
+ "NTL 250 cable modem",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GO,
+ "CG-WLUSB2GO",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR,
+ "CG-WLUSB2GNR",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI_NF,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII_NF,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC_NF,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII_NF,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICE,
+ "gnICE",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICEPLUS,
+ "gnICE+",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZUSB,
+ "EZUSB",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK,
+ "EZLINK",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_A2502,
+ "NTT DoCoMo A2502",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100H,
+ "ADU-E100H",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A,
+ "ADU-500A",
+ },
+ {
+ USB_VENDOR_AOX, USB_PRODUCT_AOX_USB101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS5G,
+ "5G UPS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_OPTMOUSE,
+ "Optical mouse",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH_HCI,
+ "HID-proxy",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_SPEAKERS,
+ "Speakers",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
+ "iPhone",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH,
+ "iPod Touch",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3G,
+ "iPhone 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_2G,
+ "iPod Touch 2G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3GS,
+ "iPhone 3GS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_GSM,
+ "iPhone 4 GSM",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_3G,
+ "iPod Touch 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD,
+ "iPad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_CDMA,
+ "iPhone 4 CDMA",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_4G,
+ "iPod Touch 4G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD2,
+ "iPad 2",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4S,
+ "iPhone 4S",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_6,
+ "iPhone 6",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ETHERNET,
+ "Ethernet A1277",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT_1,
+ "iSight",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT,
+ "iSight",
+ },
+ {
+ USB_VENDOR_ARANEUS, USB_PRODUCT_ARANEUS_ALEA,
+ "True Random Number Generator",
+ },
+ {
+ USB_VENDOR_ARDUINO, USB_PRODUCT_ARDUINO_LEONARDO,
+ "Leonardo",
+ },
+ {
+ USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116,
+ "ARK3116 Serial",
+ },
+ {
+ USB_VENDOR_ARUBA, USB_PRODUCT_ARUBA_CP210X,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO230,
+ "PENTAX Optio230",
+ },
+ {
+ USB_VENDOR_ASANTE, USB_PRODUCT_ASANTE_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178,
+ "AX88178",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772,
+ "AX88772",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B_1,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013I,
+ "WLL013 (Intersil)",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_VOYAGER1010,
+ "Voyager 1010",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G,
+ "WL-159g",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI,
+ "A9T wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P5B_WIFI,
+ "P5B wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN13,
+ "USB-N13",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN10,
+ "USB-N10",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN53,
+ "USB-N53",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN66,
+ "USB-N66",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_MYPAL_A730,
+ "MyPal A730",
+ },
+ {
+ USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11,
+ "USB-N11",
+ },
+ {
+ USB_VENDOR_ASUSTEK, USB_PRODUCT_ASUSTEK_WL140,
+ "WL-140",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC1284,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC10T,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC110T,
+ "UC-110T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A,
+ "UC232A Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T,
+ "UC210T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC2324,
+ "UC2324 Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_DSB650C,
+ "DSB-650C",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_TG121N,
+ "TG121N",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN821NV2,
+ "WN821NV2",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_3CRUSBN275,
+ "3CRUSBN275",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN612,
+ "WN612",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR3011,
+ "AR3011",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9170,
+ "AR9170",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATI2, USB_PRODUCT_ATI2_205,
+ "USB Cable 205",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_STK541,
+ "STK541 Zigbee",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_UHB124,
+ "UHB124 hub",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_WN210,
+ "W-Buddie WN210",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_DWL900AP,
+ "DWL-900AP Wireless access point",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT91_CDC_ACM,
+ "AT91 CDC ACM",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I1,
+ "AT76C503 (Intersil 3861 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I2,
+ "AT76C503 (Intersil 3863 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503RFMD,
+ "AT76C503 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD,
+ "AT76C505 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD2958,
+ "AT76C505 (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505A,
+ "AT76C505A (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505AS,
+ "AT76C505AS (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA, USB_PRODUCT_AUDIOTECHNICA_ATCHA4USB,
+ "ATC-HA4USB USB headphone",
+ },
+ {
+ USB_VENDOR_AVAGO, USB_PRODUCT_AVAGO_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
+ "USB Audio Speaker",
+ },
+ {
+ USB_VENDOR_AVERATEC, USB_PRODUCT_AVERATEC_USBWLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AVISION, USB_PRODUCT_AVISION_1200U,
+ "1200U",
+ },
+ {
+ USB_VENDOR_AVM, USB_PRODUCT_AVM_FRITZWLAN,
+ "FRITZ!WLAN N",
+ },
+ {
+ USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM,
+ "Data Modem",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_4,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_5,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_4,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_5,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_6,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_2,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER,
+ "Card reader",
+ },
+ {
+ USB_VENDOR_BAYER, USB_PRODUCT_BAYER_CONTOUR,
+ "Ascensia Contour",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOTL4,
+ "USOTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USTL4,
+ "USTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2,
+ "USO9ML2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4,
+ "USOPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USPTL4,
+ "USPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR2,
+ "USO9ML2DR-2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR,
+ "USO9ML2DR RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR2,
+ "USOPTL4DR-2 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR,
+ "USOPTL4DR RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F2W,
+ "485USB9F-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F4W,
+ "485USB9F-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_232USB9M,
+ "232USB9M RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_2W,
+ "485USBTB-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_4W,
+ "485USBTB-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL5USB9M,
+ "TTL5USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL3USB9M,
+ "TTL3USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_ZZ_PROG1,
+ "ZZ Programmer",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D6050,
+ "F5D6050 802.11b Wireless adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT001V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F8T003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103,
+ "F5U103 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U109,
+ "F5U109 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_SCSI,
+ "SCSI",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5050,
+ "F5D5050 Ethernet",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U234,
+ "F5U234 USB 2.0 4-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U237,
+ "F5U237 USB 2.0 7-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U257,
+ "F5U257 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6H375,
+ "F6H375 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U409,
+ "F5U409 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR,
+ "F6C550-AVR UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1250EITWRK,
+ "F6C1250EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1500EITWRK,
+ "F6C1500EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C900,
+ "F6C900 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C100,
+ "F6C100 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C120,
+ "F6C120 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C800,
+ "F6C800 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1004V1,
+ "F9L1004V1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1100,
+ "F6C1100/1200 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1103,
+ "F9L1103 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120,
+ "F5U120-PC Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D2102,
+ "F7D2102",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055,
+ "F5D5055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050,
+ "F5D7050 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050A,
+ "F5D705A 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050C,
+ "F5D705C 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050E,
+ "F5D705E 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3,
+ "F5D8053 v3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055,
+ "F5D8055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055V2,
+ "F5D8055 v2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050V3,
+ "F5D9050 ver 3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050C,
+ "F5D9050C",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1,
+ "F6D4050 ver 1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V2,
+ "F6D4050 ver 2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D1101V2,
+ "F7D1101 v2",
+ },
+ {
+ USB_VENDOR_BELKIN2, USB_PRODUCT_BELKIN2_F5U002,
+ "F5U002 Parallel",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_BWIFI_USB54AR,
+ "BWIFI-USB54AR",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100,
+ "USB100N 10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100,
+ "USB100LP",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100,
+ "USB100EL",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100,
+ "USBE100",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB2AR,
+ "USB2AR Ethernet",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCMFW,
+ "BCMFW",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033,
+ "BCM2033",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033NF,
+ "BCM2033 (no fw)",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43236,
+ "BCM43236",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43143,
+ "BCM43143",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43242,
+ "BCM43242",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43569,
+ "BCM43569",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_HL1050,
+ "HL-1050 laser printer",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_MFC210C,
+ "MFC 210C",
+ },
+ {
+ USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932,
+ "Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_BWCT, USB_PRODUCT_BWCT_6CHCONSER,
+ "6ch ConSer",
+ },
+ {
+ USB_VENDOR_CACE, USB_PRODUCT_CACE_AIRPCAPNX,
+ "AirPcap Nx",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N656U,
+ "CANOSCAN N656U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1220U,
+ "CANOSCAN N1220U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N670U,
+ "CANOSCAN N670U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1240U,
+ "CANOSCAN N1240U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_LIDE60,
+ "CANOSCAN LiDE60",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S10,
+ "PowerShot S10",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S20,
+ "PowerShot S20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_US,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_EU,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_G1,
+ "PowerShot G1",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A20,
+ "PowerShot A20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A540,
+ "PowerShot A540",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_SX100,
+ "PowerShot SX100",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_QV,
+ "QV",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300,
+ "BE-300 PDA",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_NAMELAND,
+ "CASIO Nameland EZ-USB",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE,
+ "Netmate Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE2,
+ "Netmate2 Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_CHIEF,
+ "USB Chief Bus & Protocol Analyzer",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_ANDROMEDA,
+ "Andromeda hub",
+ },
+ {
+ USB_VENDOR_CCYU, USB_PRODUCT_CCYU_EASYDISK,
+ "EasyDisk Portable",
+ },
+ {
+ USB_VENDOR_CHENSOURCE, USB_PRODUCT_CHENSOURCE_CM12402,
+ "CM12402 Eagle IR Cam",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000KBD,
+ "My3000 keyboard",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000HUB,
+ "My3000 hub",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_CYPRESS,
+ "Cypress",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_KB8933,
+ "KB-8933 keyboard",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_CAMERA,
+ "Integrated Camera",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_1,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_2,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_3,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_4,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_5,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_6,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROTHROTTLE,
+ "Pro Throttle",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROPEDALS,
+ "Pro Pedals",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FIGHTERSTICK,
+ "Fighterstick",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FLIGHTYOKE,
+ "Flight Sim Yoke",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GV2,
+ "WUSB54G v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54AG,
+ "WUSB54AG",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54G,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GP,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_USB200MV2,
+ "USB200M v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_HU200TS,
+ "HU200-TS",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GC,
+ "WUSB54GC",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GR,
+ "WUSB54GR",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G,
+ "WUSBF54G",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB200,
+ "WUSB200",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AE1000,
+ "AE1000",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AM10,
+ "AM10",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2, USB_PRODUCT_CISCOLINKSYS2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3, USB_PRODUCT_CISCOLINKSYS3_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_560884,
+ "560884 C-Bus Switch",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PACA,
+ "5500PACA C-Bus Controller",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5800PC,
+ "5800PC C-Bus Wireless",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PCU,
+ "5500PCU C-Bus",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5000CT2,
+ "5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_C5000CT2,
+ "C5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_L51XX,
+ "L51xx C-Bus Dimmer",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU510,
+ "CDMA Technologies USB modem",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CM5100P,
+ "CM-5100P EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CCU550,
+ "CCU-550 EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU550PRO,
+ "CNU-550pro EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628,
+ "CGU-628",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU680,
+ "CNU-680",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628_DISK,
+ "CGU-628 disk mode",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC,
+ "iPAQ PocketPC",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_A1500,
+ "A1500",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQWLAN,
+ "iPAQ WLAN",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W100,
+ "W100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W200,
+ "WLAN MultiPort W200",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_PJB100,
+ "Personal Jukebox PJB100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX,
+ "iPAQ Linux",
+ },
+ {
+ USB_VENDOR_COMPARE, USB_PRODUCT_COMPARE_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_C11U,
+ "C11U",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_WL210,
+ "WL-210",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU,
+ "C54RU WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU2,
+ "C54RU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2573,
+ "RT2573M",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61,
+ "VIGORN61",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA, USB_PRODUCT_CONCORDCAMERA_EYE_Q_3X,
+ "Eye Q 3x",
+ },
+ {
+ USB_VENDOR_CONNECTIX, USB_PRODUCT_CONNECTIX_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_ETHER_USB_T,
+ "Ether USB-T",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX,
+ "FEther USB-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLAN_USB_USB_11,
+ "WirelessLAN USB-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS,
+ "FEther USB-TXS",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLANUSB,
+ "Wireless LAN Stick-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB2_TX,
+ "FEther USB2-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_KEY,
+ "ULUSB-11 Key",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GL,
+ "CG-WLUSB2GL",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GPX,
+ "CG-WLUSB2GPX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM,
+ "CG-WLUSB300GNM",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300N,
+ "CG-WLUSB300N",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_STICK,
+ "WLAN USB Stick 11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC,
+ "FEther USB-TXC",
+ },
+ {
+ USB_VENDOR_CORSAIR, USB_PRODUCT_CORSAIR_CP210X,
+ "CP210X",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_II,
+ "Nomad II",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_EMU0202,
+ "E-Mu 0202",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_IIMG,
+ "Nomad II MG",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD,
+ "Nomad",
+ },
+ {
+ USB_VENDOR_CREATIVE2, USB_PRODUCT_CREATIVE2_VOIP_BLASTER,
+ "Voip Blaster",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUECORE,
+ "BlueCore",
+ },
+ {
+ USB_VENDOR_CTC, USB_PRODUCT_CTC_CW6622,
+ "CW6622",
+ },
+ {
+ USB_VENDOR_CTX, USB_PRODUCT_CTX_EX1300,
+ "Ex1300 hub",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_1500,
+ "1500 UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_OR2200,
+ "OR2200 UPS",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_GIGASET108,
+ "Siemens Gigaset 108",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB,
+ "TG54USB",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_MOUSE,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_THERMO,
+ "thermometer",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_KBDHUB,
+ "Keyboard/Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO,
+ "FM Radio",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_USBRS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_HUB2,
+ "USB2 Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_LPRDK,
+ "CY4636 LP RDK Bridge",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD,
+ "Sispm - old version",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM,
+ "Sispm",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH,
+ "Sispm - flash",
+ },
+ {
+ USB_VENDOR_DAISY, USB_PRODUCT_DAISY_DMC,
+ "PhotoClip",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_USB_FOB_IBUTTON,
+ "USB-FOB/iBUTTON",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,
+ "J-6502 speakers",
+ },
+ {
+ USB_VENDOR_DATAAPEX, USB_PRODUCT_DATAAPEX_MULTICOM,
+ "MultiCom",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_WK668,
+ "HenTong WK-668",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_AXIM,
+ "Axim X51v",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BC02,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_TM1180,
+ "TrueMobile 1180 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BLUETOOTH350,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_W5500,
+ "W5500 HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_U740,
+ "Dell U740 CDMA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_EU870D,
+ "EU870D HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_DW700,
+ "DW700 GPS",
+ },
+ {
+ USB_VENDOR_DELL2, USB_PRODUCT_DELL2_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMUSB,
+ "Earthmate GPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMLT20,
+ "Earthmate LT20",
+ },
+ {
+ USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB,
+ "Rio 500",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRAEXPRESS56K,
+ "Supra Express 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRA2890,
+ "SupraMax 2890 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB,
+ "Rio 600",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB,
+ "Rio 800",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_PSAPLAY120,
+ "Nike psa[play 120",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL200U,
+ "WL-200U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CHUSB611G,
+ "CHUSB 611G",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL240U,
+ "WL-240U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_XH1153,
+ "XH1153 802.11b",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CWD854F,
+ "C-Net CWD-854 rev F",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT2,
+ "AccelePort 2",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT4,
+ "AccelePort 4",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT8,
+ "AccelePort 8",
+ },
+ {
+ USB_VENDOR_DIGIANSWER, USB_PRODUCT_DIGIANSWER_ZIGBEE802154,
+ "ZigBee",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM, USB_PRODUCT_DIGITALSTREAM_PS2,
+ "PS/2 Active",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_GUC2020,
+ "IOGEAR DVI GUC2020",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LD220,
+ "Samsung LD220",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_POLARIS2,
+ "Polaris2 USB dock",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VCUD60,
+ "Rextron DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_CONV,
+ "StarTech CONV-USB2DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_DLDVI,
+ "DisplayLink DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VGA10,
+ "CMP-USBVGA10",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_WSDVI,
+ "WS Tech DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_EC008,
+ "EasyCAP008 DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD4300U,
+ "LCD-4300U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD8000U,
+ "LCD-8000U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_HPDOCK,
+ "HP USB Docking",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NL571,
+ "HP USB DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_M01061,
+ "Lenovo DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NBDOCK,
+ "VideoHome NBdock1920",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_SWDVI,
+ "SUNWEIT DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LUM70,
+ "Lilliput UM-70",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LT1421,
+ "Lenovo ThinkVision LT1421",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_UM7X0,
+ "nanovision MiMo",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100C1,
+ "DUB-E100 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120E,
+ "DWL-120 rev E",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130C,
+ "DWA-130 rev C",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_4,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131B,
+ "DWA-131 rev B",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125D1,
+ "DWA-125 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA123D1,
+ "DWA-123 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA137A1,
+ "DWA-137 rev A1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131E1,
+ "DWA-131 rev E1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA182D1,
+ "DWA-182 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA171C1,
+ "DWA-171 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL122,
+ "DWL-122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG120,
+ "DWL-G120",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120F,
+ "DWL-120 rev F",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG122A2,
+ "DWL-G122 rev A2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132_NF,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132_NF,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122_NF,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100B1,
+ "DUB-E100 rev B1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140B3,
+ "DWA-140 rev B3",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA160B2,
+ "DWA-160 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA127,
+ "DWA-127",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125B2,
+ "DWA-125 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA162,
+ "DWA-162 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140D1,
+ "DWA-140 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130F1,
+ "DWA-130 rev F1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUB1312,
+ "DUB-1312",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA131A1,
+ "DWA-131 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340_NF,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A2,
+ "DWA-160 A2",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130D1,
+ "DWA-130 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWLG122C1,
+ "DWL-G122 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA1340,
+ "WUA-1340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA111,
+ "DWA-111",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA110,
+ "DWA-110",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A1,
+ "DWA-160 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130,
+ "DWA-130",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK3, USB_PRODUCT_DLINK3_KVM221,
+ "KVM-221",
+ },
+ {
+ USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0,
+ "Storage Adapter",
+ },
+ {
+ USB_VENDOR_DOMAIN, USB_PRODUCT_DOMAIN_ROCKCHIP,
+ "RockChip Media Player",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550,
+ "Vigor550",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR600,
+ "Vigor600",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY, USB_PRODUCT_DREAMCHEEKY_ROCKETBABY,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_ULMB1,
+ "USB LED Message Board v1.0",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_STB,
+ "Sensor Terminal",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_WHT,
+ "Wireless Terminal",
+ },
+ {
+ USB_VENDOR_DVICO, USB_PRODUCT_DVICO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANT2USB,
+ "ANT2USB",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD2,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSB2,
+ "ANTUSB-2 Stick",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSBM,
+ "ANTUSB-m Stick",
+ },
+ {
+ USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK,
+ "Flash Disk",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7318,
+ "EW-7318",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7618,
+ "EW-7618",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717,
+ "EW-7717",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718,
+ "EW-7718",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7722UTN,
+ "EW-7722UTn",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7811UN,
+ "EW-7811Un",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7611ULB,
+ "EW-7611ULB",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7822ULC,
+ "EW-7822ULC",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL2,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX2, USB_PRODUCT_EGALAX2_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
+ "Diva 852 ISDN TA",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_MONITOR,
+ "monitor",
+ },
+ {
+ USB_VENDOR_ELAN, USB_PRODUCT_ELAN_BARCODE,
+ "Barcode Scanner",
+ },
+ {
+ USB_VENDOR_ELCON, USB_PRODUCT_ELCON_PLAN,
+ "Goldpfeil P-LAN",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_MOUSE29UO,
+ "29UO",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBLTX,
+ "LD-USBL/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_WDC150SU2M,
+ "WDC-150SU2M",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSB20,
+ "LD-USB20",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT,
+ "UC-SGT Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT0,
+ "UC-SGT0 Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELEKTOR, USB_PRODUCT_ELEKTOR_FT323R,
+ "FT323R",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_MODEM1,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET,
+ "Microlink USB2Ethernet",
+ },
+ {
+ USB_VENDOR_ELV, USB_PRODUCT_ELV_USBI2C,
+ "USB-I2C",
+ },
+ {
+ USB_VENDOR_EMPIA, USB_PRODUCT_EMPIA_EEEPC701_VIDEO,
+ "EeePC701 camera",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S,
+ "1S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2S,
+ "2S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S25,
+ "1S25 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_4S,
+ "4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_E45,
+ "E45 Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_CENTRONICS,
+ "Centronics",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S9,
+ "1S9 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_EZUSB,
+ "EZ-USB",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2U4S,
+ "2U4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER1,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER2,
+ "ISD Smart Cable for Mac",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER3,
+ "ISD Smart Cable",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER5,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_636,
+ "Perfection 636U / 636Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_610,
+ "Perfection 610",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1200,
+ "Perfection 1200U / 1200Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1600,
+ "Expression 1600",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1640,
+ "Perfection 1640SU",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1240,
+ "Perfection 1240U / 1240Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_640U,
+ "Perfection 640U",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1650,
+ "Perfection 1650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9700F,
+ "GT-9700F",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_2400,
+ "Perfection 2400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1260,
+ "Perfection 1260",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1660,
+ "Perfection 1660",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1670,
+ "Perfection 1670",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX5400,
+ "CX5400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX3650,
+ "Stylus CX3650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX3800,
+ "Stylus DX3800",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX5000,
+ "Stylus DX5000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX6000,
+ "Stylus DX6000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX4000,
+ "Stylus DX4000",
+ },
+ {
+ USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM,
+ "Serial",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_ER1,
+ "ER1 Control Module",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_1,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_2,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EXAR, USB_PRODUCT_EXAR_XR21V1410,
+ "XR21V1410",
+ },
+ {
+ USB_VENDOR_EXTENDED, USB_PRODUCT_EXTENDED_XTNDACCESS,
+ "XTNDAccess IrDA",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST,
+ "Twist",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA,
+ "Samba",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CPX_USB,
+ "CPX-USB",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CMSP,
+ "CMSP",
+ },
+ {
+ USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U,
+ "WL-430U",
+ },
+ {
+ USB_VENDOR_FOSSIL, USB_PRODUCT_FOSSIL_WRISTPDA,
+ "Wrist PDA",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_TCOM_TC_300,
+ "T-Com TC 300",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_PIRELLI_DP_L10,
+ "Pirelli DP-L10",
+ },
+ {
+ USB_VENDOR_FREECOM, USB_PRODUCT_FREECOM_DVD,
+ "Connector for DVD drive",
+ },
+ {
+ USB_VENDOR_FSC, USB_PRODUCT_FSC_E5400,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM4,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C,
+ "2232C Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT4232H,
+ "FT4232H",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FTX,
+ "FTX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PS2KBDMS,
+ "PS/2 Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_2,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENRD,
+ "OpenRD JTAGKey",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANDAPTER,
+ "CANdapter",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_NXTCAM,
+ "Mindstorms NXTCam",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OOCDLINK,
+ "OOCDlink",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_DEVEL,
+ "LM3S Devel",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_EVAL,
+ "LM3S Eval",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TURTELIZER_JTAG,
+ "JTAG/RS-232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC,
+ "OpenDCC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_SNIFFER,
+ "OpenDCC Sniffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_THROTTLE,
+ "OpenDCC Throttle",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_GATEWAY,
+ "OpenDCC Gateway",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LOCOBUFFER,
+ "RR-CirKits LocoBuffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DMX4ALL,
+ "DMX4ALL DMX interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_1,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_2,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_3,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_4,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_5,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_6,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_7,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_8,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_1,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CHAMELEON,
+ "uChameleon",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13M,
+ "OpenPort 1.3 Mitsubishi",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13S,
+ "OpenPort 1.3 Subaru",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13U,
+ "OpenPort 1.3 Universal",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L,
+ "2232L Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_0,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_1,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_2,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_3,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_4,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_5,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_6,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_7,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS2,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GAMMASCOUT,
+ "Gamma Scout Online",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_JTAGCABLEII,
+ "Propox JTAG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_777,
+ "Westrex 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_8900F,
+ "Westrex 8900F",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACG_HFDUAL,
+ "HF Dual ISO Reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ARTEMIS,
+ "CCD camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16,
+ "ATK-16 Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HR,
+ "ATK-16HR Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16C,
+ "ATK-16C Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HRC,
+ "ATK-16HRC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16IC,
+ "ATK-16IC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USR,
+ "USR",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_MSM1,
+ "Mini-Sound-Modul",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_KL100,
+ "KL 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS888,
+ "WS 888",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TWS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FEM,
+ "Funk Energie Monitor",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_YEI_SC31,
+ "ServoCenter3.1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1300PC,
+ "FHZ 1300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS500,
+ "WS 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_HS485,
+ "RS-485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UMS100,
+ "UMS 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFD128,
+ "TFD 128",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FM3RX,
+ "FM3 RX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS777,
+ "WS 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1010PC,
+ "EM 1010 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CSI8,
+ "CSI 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1000DL,
+ "EM 1000 DL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCK100,
+ "PCK 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_RFP500,
+ "RFP 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FS20SIG,
+ "FS 20 SIG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UTP8,
+ "UTP 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS300PC,
+ "WS 300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS444PC,
+ "WS 444 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FISCO,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECO_PRO,
+ "EVER Eco Pro UPS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTROBOTS,
+ "Active Robots comms",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PYRAMID,
+ "Pyramid Display",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UNICOM,
+ "Unicom III",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EISCOU,
+ "Expert ISDN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UOPTBR,
+ "RS232 OptoBridge",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DCF,
+ "Expert mouseCLOCK USB II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MSF,
+ "Expert mouseCLOCK USB II MSF",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HBG,
+ "Expert mouseCLOCK USB II HBG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_9,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_A,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_B,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECLO_1WIRE,
+ "1-Wire",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TNCX,
+ "TNC-X packet-radio",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_VCP,
+ "VCP",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_D2XX,
+ "D2XX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_REU_TINY,
+ "RigExpert Tiny",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO870,
+ "HO870",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO820,
+ "HO820",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232BM,
+ "FT232BM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW,
+ "KW",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS,
+ "YS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6,
+ "Y6",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8,
+ "Y8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC,
+ "IC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9,
+ "DB9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9,
+ "Y9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DGQG,
+ "DGQG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DUSB,
+ "DUSB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD8,
+ "UAD 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD7,
+ "UAD 7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USI2,
+ "USI 2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_T1100,
+ "T 1100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCD200,
+ "PCD 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ULA200,
+ "ULA 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ALC8500,
+ "ALC 8500 Expert",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1000PC,
+ "FHZ 1000 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PERLE_UP,
+ "UltraPort",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SPROG_II,
+ "Sprog II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PIEGROUP_IR,
+ "Infrared",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTZWAVE,
+ "HomePro ZWave",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX,
+ "Coastal ChipWorks TNC-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_MASTER2,
+ "Master Development 2.0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OCEANIC,
+ "Oceanic instrument",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SUUNTO,
+ "Suunto Sports",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBUIRT,
+ "USB-UIRT",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBX_707,
+ "USBX-707",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU20,
+ "ICD-U20",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU40,
+ "ICD-U40",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_MACHX,
+ "MACH-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_LOAD_N_GO,
+ "LOAD N GO",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU64,
+ "ICDU64",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_PRIME8,
+ "PRIME8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ITM_TOUCH,
+ "ITM Touchscreen",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBSERIAL,
+ "Matrix Orbital USB Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MX200,
+ "Matrix Orbital MX200 Series LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MTXO,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK202_24,
+ "Matrix Orbital LK202-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK204_24,
+ "Matrix Orbital LK204-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_2,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_3,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_RELAIS,
+ "Relais",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TIRA1,
+ "Tira-1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PCDJ_DAC2,
+ "DAC-2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACCESSO,
+ "Accesso reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_THORLABS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UR100,
+ "UR 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CLI7000,
+ "CLI 7000",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UM100,
+ "UM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UO100,
+ "UO 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PPS7330,
+ "PPS 7330",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFM100,
+ "TFM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UDF77,
+ "UDF 77",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UIO88,
+ "UIO 88",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_R2000KU_RNG,
+ "R2000KU RNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_BCS_SE923,
+ "BCS SE923",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232RL,
+ "FT232RL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_632,
+ "Crystalfontz CFA-632 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_634,
+ "Crystalfontz CFA-634 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_547,
+ "Crystalfontz CFA-547 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_633,
+ "Crystalfontz CFA-633 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_631,
+ "Crystalfontz CFA-631 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_635,
+ "Crystalfontz CFA-635 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_640,
+ "Crystalfontz CFA-640 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_642,
+ "Crystalfontz CFA-642 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IRTRANS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_1,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_R200,
+ "R200-USB TRNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_3,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_4,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20,
+ "SEMC DSS-20 SyncStation",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANVIEW,
+ "CANview",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_VNHC,
+ "Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_AMC232,
+ "AMC-232USB0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TTUSB,
+ "TT-USB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_US485,
+ "US485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PICPRO,
+ "PIC-Programmer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PCMCIA,
+ "PCMCIA SRAM-cards reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PK1,
+ "Particel counter PK1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_RS232MON,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_APP70,
+ "APP 70 dust monitoring",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PEDO,
+ "IBS PEDO-Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANUSB,
+ "CANUSB",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100,
+ "Mass Storage",
+ },
+ {
+ USB_VENDOR_FUJITSU, USB_PRODUCT_FUJITSU_AH_F401U,
+ "AH-F401U Air H device",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD6,
+ "Type 6 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD7,
+ "Type 7 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_MOUSE,
+ "Type 6 Mouse",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5204PS,
+ "Smart Power Strip FX-5204PS",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5251WB,
+ "Base Station FX-5251WB",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_VIRTETH,
+ "Virtual Eth Device",
+ },
+ {
+ USB_VENDOR_FUSHICAI, USB_PRODUCT_FUSHICAI_USBTV007,
+ "Fushicai Audio-Video Grabber",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP60CSX,
+ "GPSmap 60Csx",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE3600,
+ "Ique 3600",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_DAKOTA20,
+ "Dakota 20",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP62S,
+ "GPSmap 62s",
+ },
+ {
+ USB_VENDOR_GCTSEMICON, USB_PRODUCT_GCTSEMICON_INSTALL,
+ "GDM720x MASS storage mode",
+ },
+ {
+ USB_VENDOR_GEMPLUS, USB_PRODUCT_GEMPLUS_PROXPU,
+ "Prox-PU/CU",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A,
+ "GL620USB-A GeneLink USB-USB Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GENELINK,
+ "GeneLink Host-Host Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL650,
+ "GL650 Hub",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB,
+ "GL641USB CompactFlash",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNBR402W,
+ "GN-BR402W",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWLBM101,
+ "GN-WLBM101",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWBKG,
+ "GN-WBKG",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB01GS,
+ "GN-WB01GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWI05GS,
+ "GN-WI05GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N,
+ "GN-WB31N",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L,
+ "GN-WB32L",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG_NF,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00,
+ "YP3X00 PDA",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS, USB_PRODUCT_GNOTOMETRICS_AURICAL,
+ "Aurical",
+ },
+ {
+ USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232,
+ "GoCOM232 Serial converter",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_GWUSB2E,
+ "GWUSB2E",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GRAVIS, USB_PRODUCT_GRAVIS_GAMEPADPRO,
+ "GamePad Pro",
+ },
+ {
+ USB_VENDOR_GREENHOUSE, USB_PRODUCT_GREENHOUSE_KANA21,
+ "CF-writer/MP3 Player",
+ },
+ {
+ USB_VENDOR_GRIFFIN, USB_PRODUCT_GRIFFIN_IMATE,
+ "iMate, ADB adapter",
+ },
+ {
+ USB_VENDOR_GUDE, USB_PRODUCT_GUDE_DCF,
+ "Expert mouseCLOCK USB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_DALEADER,
+ "DA Leader",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254,
+ "HWGUSB2-54 WLAN",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254LB,
+ "HWGUSB2-54-LB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254V2AP,
+ "HWGUSB2-54V2-AP",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNU300,
+ "HWNU-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUM300,
+ "HWNUm-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUN54,
+ "HWGUn-54",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUP150,
+ "HWNUP-150",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_GUNZE, USB_PRODUCT_GUNZE_TOUCHPANEL,
+ "Gunze USB Touch Panel",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGSM,
+ "FlashGate SmartMedia",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGCF,
+ "FlashGate CompactFlash",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FG,
+ "FlashGate",
+ },
+ {
+ USB_VENDOR_HAL, USB_PRODUCT_HAL_IMR001,
+ "Crossam2+USB IR commander",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR,
+ "Handspring Visor",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO,
+ "Handspring Treo",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO600,
+ "Handspring Treo 600",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE, USB_PRODUCT_HAUPPAUGE_WINTV_USB_FM,
+ "WinTV FM",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2,
+ "HWUN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWDN2,
+ "HWDN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_UF100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_HIROSE, USB_PRODUCT_HIROSE_USB100,
+ "USB-100",
+ },
+ {
+ USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DZMV100A,
+ "DVD-CAM DZ-MV100A Camcorder",
+ },
+ {
+ USB_VENDOR_HOLTEK, USB_PRODUCT_HOLTEK_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_895C,
+ "DeskJet 895C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4100C,
+ "Scanjet 4100C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20,
+ "Photosmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_880C,
+ "DeskJet 880C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4200C,
+ "ScanJet 4200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS,
+ "CD-Writer Plus",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_KBDHUB,
+ "Multimedia Keyboard Hub",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210W,
+ "HN210W",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HPX9GP,
+ "HP-x9G+",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6200C,
+ "ScanJet 6200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20B,
+ "PhotoSmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_815C,
+ "DeskJet 815C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3300C,
+ "ScanJet 3300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDW8200,
+ "CD-Writer Plus 8200e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1220C,
+ "DeskJet 1220C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_810C,
+ "DeskJet 810C/812C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4300C,
+ "Scanjet 4300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CD4E,
+ "CD-Writer+ CD-4e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_G85XI,
+ "OfficeJet G85xi",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1200,
+ "LaserJet 1200",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5200C,
+ "Scanjet 5200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_830C,
+ "DeskJet 830C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3400CSE,
+ "ScanJet 3400cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_885C,
+ "DeskJet 885C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1000,
+ "LaserJet 1000",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6300C,
+ "Scanjet 6300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_840C,
+ "DeskJet 840c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2200C,
+ "ScanJet 2200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5300C,
+ "Scanjet 5300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_816C,
+ "DeskJet 816C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_970CSE,
+ "Deskjet 970Cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5400C,
+ "Scanjet 5400C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2215,
+ "iPAQ 22xx/Jornada 548",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_959C,
+ "Deskjet 959C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_568J,
+ "Jornada 568",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_930C,
+ "DeskJet 930c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1005,
+ "LaserJet 1005",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P2000U,
+ "Inkjet P-2000U",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HS2300,
+ "HS2300",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750,
+ "T750 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1000,
+ "T1000 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1500,
+ "T1500 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_RT2200,
+ "R/T2200 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_R1500G2,
+ "R1500 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750G2,
+ "T750 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_640C,
+ "DeskJet 640c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1020,
+ "LaserJet 1020",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P1100,
+ "Photosmart P1100",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_LD220,
+ "LD220",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1018,
+ "LaserJet 1018",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210E,
+ "HN210E Ethernet",
+ },
+ {
+ USB_VENDOR_HP2, USB_PRODUCT_HP2_C500,
+ "PhotoSmart C500",
+ },
+ {
+ USB_VENDOR_HP3, USB_PRODUCT_HP3_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM,
+ "PPC6700 Modem",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE,
+ "SmartPhone",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_ANDROID,
+ "Android phone",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E618,
+ "HUAWEI Mobile E618",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_EM770W,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1750,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E180,
+ "HUAWEI Mobile E180",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E510,
+ "HUAWEI Mobile E510",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E181,
+ "HUAWEI Mobile E181",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1752,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E182,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3372,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E161,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765,
+ "HUAWEI Mobile K3765",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1820,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4511,
+ "HUAWEI Mobile Modem K4511",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4510,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772,
+ "HUAWEI Mobile K3772",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E353_INIT,
+ "HUAWEI Mobile E353 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E392_INIT,
+ "HUAWEI Mobile E392 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765_INIT,
+ "HUAWEI Mobile K3765 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772_INIT,
+ "HUAWEI Mobile K3772 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MU609,
+ "HUAWEI Mobile ME906",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S,
+ "HUAWEI Mobile E173s",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S_INIT,
+ "HUAWEI Mobile E173s Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E303,
+ "HUAWEI Mobile E303",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM, USB_PRODUCT_HUAWEI3COM_WUB320G,
+ "Aolynk WUB320g",
+ },
+ {
+ USB_VENDOR_HUMAX, USB_PRODUCT_HUMAX_PVRSMART,
+ "PVR-SMART",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_PC5740,
+ "PC5740 EVDO",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_UM175,
+ "UM175 EVDO",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTTRAVELMOUSE,
+ "Optical",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTWHEELMOUSE,
+ "Wheel",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_USBCDROMDRIVE,
+ "CD-ROM",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_THINKPADHUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_ID1,
+ "ID-1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C1,
+ "ID-RP2C service 1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C2,
+ "ID-RP2C service 2",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2D,
+ "ID-RP2D",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VT,
+ "ID-RP2V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VR,
+ "ID-RP2V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VT,
+ "ID-RP4000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VR,
+ "ID-RP4000V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VT,
+ "ID-RP2000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VR,
+ "ID-RP2000V service R",
+ },
+ {
+ USB_VENDOR_IDOWELL, USB_PRODUCT_IDOWELL_IDOWELL,
+ "UPS",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE, USB_PRODUCT_IDQUANTIQUE_QUANTISUSB,
+ "Quantis USB",
+ },
+ {
+ USB_VENDOR_IDTECH, USB_PRODUCT_IDTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_IIYAMA, USB_PRODUCT_IIYAMA_HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO,
+ "Flash Go!",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
+ "EdgePort/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT7,
+ "Hubport/7",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_RAPIDPORT4,
+ "Rapidport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4T,
+ "Edgeport/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2,
+ "Edgeport/2 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4I,
+ "Edgeport/4 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2I,
+ "Edgeport/2 RS422/RS485",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT4,
+ "Hubport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8HAND,
+ "Hand-built Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MULTIMODEM,
+ "MultiTech version of RP/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTPPORT,
+ "Edgeport/(4)21 Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT421,
+ "Edgeport/421 Hub+RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT21,
+ "Edgeport/21 RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8DC,
+ "1/2 Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8,
+ "Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2DIN,
+ "Edgeport/2 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4DIN,
+ "Edgeport/4 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT16DC,
+ "1/2 Edgeport/16",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTCOMP,
+ "Edgeport Compatible",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8I,
+ "Edgeport/8 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_WATCHPORTH,
+ "WatchPort/H",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MT4X56USB,
+ "OEM device",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_F5U002,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI,
+ "ATAPI",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2,
+ "USB2 Storage",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD110,
+ "IDE ISD110",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD105,
+ "IDE ISD105",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE,
+ "USB cable",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2,
+ "USB Storage Adapter V2",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_EASYPC_CAMERA,
+ "EasyPC",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_AP310,
+ "AP310 AnyPoint II",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_I2011B,
+ "Wireless 2011B",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD,
+ "82930 test board",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_1,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_2,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_3,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_5,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_7,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_4,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_6,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_8,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_IOBOARD,
+ "IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD2,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_2X,
+ "Prism2.x WLAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_VALUECAN,
+ "ValueCAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_NEOVI,
+ "NeoVI Blue",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSSMRW,
+ "USB-SSMRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSDRW,
+ "USB-SDRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETT,
+ "USB ET/T",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX,
+ "USB ET/TX",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTXS,
+ "USB ET/TX-S",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11A,
+ "USB WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11,
+ "USB Airport WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US_NF,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETXUS2,
+ "ETX-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETGUS2,
+ "ETG-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_FT232R,
+ "FT232R",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNGDNUS2,
+ "WN-GDN/US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNG150UM,
+ "WN-G150UM",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ,
+ "RSAQ1 Serial",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ5,
+ "RSAQ5 Serial",
+ },
+ {
+ USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC,
+ "USB2.0-SCSI Bridge USB2-SC",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100,
+ "Zip 100",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_CDRW,
+ "CDRW 9602",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX,
+ "iFP-1xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX,
+ "iFP-3xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_5XX,
+ "iFP-5xx",
+ },
+ {
+ USB_VENDOR_ISSC, USB_PRODUCT_ISSC_KYBT100,
+ "KY-BT100 Bluetooth",
+ },
+ {
+ USB_VENDOR_ITEGNO, USB_PRODUCT_ITEGNO_WM1080A,
+ "WM1080A",
+ },
+ {
+ USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B,
+ "PC-60B",
+ },
+ {
+ USB_VENDOR_JATON, USB_PRODUCT_JATON_EDA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_JENOPTIK, USB_PRODUCT_JENOPTIK_JD350,
+ "JD 350",
+ },
+ {
+ USB_VENDOR_JETI, USB_PRODUCT_JETI_SPC1201,
+ "SPECBOS 1201",
+ },
+ {
+ USB_VENDOR_JRC, USB_PRODUCT_JRC_AH_J3001V_J3002V,
+ "AirH\"PHONE AH-J3001V/J3002V",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_PRX1,
+ "MP-PRX1",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_XP7250_WL,
+ "MP-XP7250 Builtin WLAN",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_OPTICALEYE,
+ "Optical Eye/3-wire",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_MBUS_250D,
+ "M-Bus Master MultiPort 250D",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_MH4000P,
+ "MiniHub 4000P",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_KC180,
+ "KC-180 IrDA",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN, USB_PRODUCT_KEISOKUGIKEN_USBDAQ,
+ "HKS-0200 USBDAQ",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT,
+ "Orbit trackball",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_TURBOBALL,
+ "TurboBall",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT_MAC,
+ "Orbit trackball for Mac",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_BT_EDR,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_VIDEOCAM_VGA,
+ "VideoCAM VGA",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28_NF,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28X_NF,
+ "USA-28X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19_NF,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18_NF,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X_NF,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W_NF,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W_NF,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI_NF,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q_NF,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XXB,
+ "USA-28X/XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XB_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA,
+ "USA-28XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA_NF,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW_NF,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19HS,
+ "USA-19HS serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA10,
+ "UIA-10 remote control",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA11,
+ "UIA-11 remote control",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX,
+ "KNU101TX Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BT,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BTN,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_B1,
+ "Konverter for B1",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_KAAN,
+ "Konverter for KAAN",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC220,
+ "Digital Science DC220",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC260,
+ "Digital Science DC260",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC265,
+ "Digital Science DC265",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC290,
+ "Digital Science DC290",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC240,
+ "Digital Science DC240",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC280,
+ "Digital Science DC280",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DX4900,
+ "EasyShare DX4900",
+ },
+ {
+ USB_VENDOR_KONICA, USB_PRODUCT_KONICA_CAMERA,
+ "Camera",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE,
+ "Niche mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NETSCROLL,
+ "Genius NetScroll mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_FLIGHT2000,
+ "Flight 2000 joystick",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO,
+ "ColorPage Vivid-Pro",
+ },
+ {
+ USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V,
+ "AH-K3001V",
+ },
+ {
+ USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_KPC650,
+ "KPC650 EVDO",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD,
+ "Hard Disk",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_CDRW,
+ "CD R/W",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M121,
+ "Model 121",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M218A,
+ "Model 218A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M219,
+ "Model 219",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M233,
+ "Model 233",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M235,
+ "Model 235",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M335,
+ "Model 335",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M336,
+ "Model 336",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M350,
+ "Model 350",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M371,
+ "Model 371",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M411,
+ "Model 411",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M425,
+ "Model 425",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M455A,
+ "Model 455A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M475A,
+ "Model 475A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M465,
+ "Model 465",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M625A,
+ "Model 625A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M642A,
+ "Model 642A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M648,
+ "Model 648",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M737,
+ "Model 737",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M776,
+ "Model 776",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD, USB_PRODUCT_LARSENBRUSGAARD_ALTITRACK,
+ "AltiTrack",
+ },
+ {
+ USB_VENDOR_LEADTEK, USB_PRODUCT_LEADTEK_9531,
+ "9531 GPS",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_DOCK_ETHERNET,
+ "USB-C Dock Ethernet",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET,
+ "USB 2.0 Ethernet",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT,
+ "jumpSHOT CompactFlash",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_2662WAR,
+ "2662W-AR",
+ },
+ {
+ USB_VENDOR_LEXMARK, USB_PRODUCT_LEXMARK_S2450,
+ "Optra S 2450",
+ },
+ {
+ USB_VENDOR_LIEBERT, USB_PRODUCT_LIEBERT_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_LIEBERT2, USB_PRODUCT_LIEBERT2_PSA,
+ "PowerSure PSA UPS",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO19,
+ "Link Instruments MSO-19",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28_2,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_MAUSB2,
+ "Camedia MAUSB-2",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_HG20F9,
+ "HG20F9 Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T,
+ "USB10T Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX,
+ "USB100TX Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1,
+ "USB100H1 Ethernet/HPNA",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA,
+ "USB10TA Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11,
+ "WUSB11 802.11b",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11_25,
+ "WUSB11 802.11b v2.5",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB12_11,
+ "WUSB12 802.11b v1.1",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_NWU11B,
+ "NWU11B",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_USB200M,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V28,
+ "WUSB11 v2.8",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V30,
+ "WUSB11 v3.0",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_USB1000,
+ "USB1000",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100,
+ "WUSB100",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N,
+ "WUSB600N",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV2,
+ "WUSB54GC v2",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3,
+ "WUSB54GC v3",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2,
+ "WUSB600N v2",
+ },
+ {
+ USB_VENDOR_LITEON, USB_PRODUCT_LITEON_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LAN_GTJU2,
+ "LAN-GTJ/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANTX,
+ "LAN-TX",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2,
+ "LAN-W300N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW150NU2,
+ "LAN-W150N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2S,
+ "LAN-W300N/U2S",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M2452,
+ "M2452 keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M4848,
+ "M4848 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_PAGESCAN,
+ "PageScan",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMWEB,
+ "QuickCam Web",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC200,
+ "Webcam C200",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC250,
+ "Webcam C250",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC500,
+ "Webcam C500",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC210,
+ "Webcam C210",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC310,
+ "Webcam C310",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_HDPROC910,
+ "HD Pro Webcam C910",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC270,
+ "Webcam C270",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMEXP,
+ "QuickCam Express",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBDLX,
+ "QuickCam Notebook Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO3K,
+ "QuickCam Pro 3000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_1,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO4K,
+ "QuickCam Pro 4000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMZOOM,
+ "QuickCam Zoom",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_1,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_1,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_1,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_1,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_2,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMULTVIS,
+ "QuickCam Ultra Vision",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_2,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_2,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_2,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_2,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO9K,
+ "QuickCam Pro 9000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRONB,
+ "QuickCam Pro Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMDLX,
+ "QuickCam Communicate Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITAF,
+ "QuickCam Orbit AF",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMMP,
+ "QuickCam Communicate MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAME3500P,
+ "QuickCam E 3500 Plus",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMDLXNB,
+ "QuickCam Deluxe Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N43,
+ "N43",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N48,
+ "N48 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_MBA47,
+ "M-BA47 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMMOUSE,
+ "WingMan Gaming Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BD58,
+ "BD58 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN58A,
+ "iFeel Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMPAD,
+ "WingMan GamePad Extreme",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMRPAD,
+ "WingMan RumblePad",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMJOY,
+ "WingMan Force joystick",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMFFGP,
+ "WingMan Formula Force GP (GT-Force)",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_ITOUCH,
+ "iTouch Keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB13,
+ "USB-PS/2 Trackball",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB18,
+ "TrackMan Wheel",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RK53,
+ "Cordless mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RB6,
+ "Cordless keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_CDO,
+ "Cordless Desktop Optical",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO2,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LCMASS,
+ "Emobile D21LC Mass only mode",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LC,
+ "Emobile D21LC",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FU,
+ "IIJmobile 510FU",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FUMASS,
+ "IIJmobile 510FU Mass only mode",
+ },
+ {
+ USB_VENDOR_LUCENT, USB_PRODUCT_LUCENT_EVALKIT,
+ "USS-720 evaluation kit",
+ },
+ {
+ USB_VENDOR_MACALLY, USB_PRODUCT_MACALLY_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_MARVELL, USB_PRODUCT_MARVELL_SHEEVAPLUG,
+ "SheevaPlug",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0100,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0101,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0102,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0103,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0104,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0105,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0106,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0107,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0108,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0109,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0110,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0111,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0112,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0113,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0114,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0115,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0116,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0117,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0118,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0119,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0120,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0121,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0122,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0123,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0124,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0125,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0126,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0127,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0128,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0129,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0130,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0131,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0132,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0133,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0134,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0135,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0136,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0137,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0138,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0139,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0140,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0141,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0142,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0143,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0144,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0145,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0146,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0147,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0148,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0149,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0150,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0151,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0152,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0153,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0154,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0155,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0156,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0157,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0158,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0159,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0160,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0161,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0162,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0163,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0164,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0165,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0166,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0167,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0168,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0169,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0170,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0171,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0172,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0173,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0174,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0175,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0176,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0177,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0178,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0179,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0180,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0181,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0182,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0183,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0184,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0185,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0186,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0187,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0188,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0189,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0190,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0191,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0192,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0193,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0194,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0195,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0196,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0197,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0198,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0199,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01ED,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100,
+ "Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232,
+ "D-Link DU-H3SP BAY Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232,
+ "Sitecom RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_ML_4500,
+ "ML-4500",
+ },
+ {
+ USB_VENDOR_MDS, USB_PRODUCT_MDS_ISDBT,
+ "MDS ISDB-T tuner",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_WISPY,
+ "MetaGeek Wi-Spy",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_TELLSTICK,
+ "Telldus Tellstick",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_UMASS,
+ "USB MSM installer",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_DC_4COM,
+ "UMTS USB modem",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_CASHFLOW_SC,
+ "Cashflow-SC",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_S2000,
+ "Series 2000",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_USB5131,
+ "USB 5131 DCF77 - Radio Clock",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_DCF600USB,
+ "DCF600USB - Radio Clock",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5,
+ "LUA2-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX,
+ "LUA-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_S11,
+ "WLI-USB-S11",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_MCRSM2,
+ "MCR-SM2 SmartMedia",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG,
+ "USB-IDE Bridge: DUB-PxxG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KS11G,
+ "WLI-USB-KS11G wlan",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2KTX,
+ "LUA-U2-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KB11,
+ "WLI-USB-KB11 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54YB,
+ "WLI-U2-KG54-YB WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54,
+ "WLI-U2-KG54 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54AI,
+ "WLI-U2-KG54-AI WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2GT,
+ "LUA-U2-GT Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_NINWIFI,
+ "Nintendo Wi-Fi",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54_NF,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_PCOPRS1,
+ "PC-OP-RS1 RemoteStation",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HP,
+ "WLI-U2-SG54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_G54HP,
+ "WLI-U2-G54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L,
+ "WLI-U2-KG54L",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N,
+ "WLI-UC-G300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HG,
+ "WLI-U2-SG54HG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N,
+ "WLI-UC-AG300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNHP,
+ "WLI-UC-GNHP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN,
+ "WLI-UC-GN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG301N,
+ "WLI-UC-G301N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM,
+ "WLI-UC-GNM",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM2,
+ "WLI-UC-GNM2",
+ },
+ {
+ USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24I,
+ "Wi-Spy 2.4i",
+ },
+ {
+ USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
+ "Ricochet GS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD20X2,
+ "USB-LCD-20x2",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD256X64,
+ "USB-LCD-256x64",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_YUREX,
+ "YUREX",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_CAM_1,
+ "CAM_1",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPERHUM,
+ "TEMPerHUM sensor",
+ },
+ {
+ USB_VENDOR_MICRONET, USB_PRODUCT_MICRONET_SP128AR,
+ "SP128AR EtherFast",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEPREC,
+ "SideWinder Precision Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIMOUSE,
+ "IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_NATURALKBD,
+ "Natural",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_DDS80,
+ "Digital Sound System 80",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEWINDER,
+ "Sidewinder Precision Racing Wheel",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_TBEXPLORER,
+ "Trackball Explorer",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIEYE,
+ "IntelliEye mouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO2,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN510,
+ "MN510 Wireless",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_700WX,
+ "Palm 700WX",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN110,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
+ "Wireless Optical IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
+ "Wireless Optical Mouse (Model 1023)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK3,
+ "Wireless Optical Mouse 3000 (Model 1049)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
+ "Wireless Optical Mouse 3000 (Model 1056)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360_CONTROLLER,
+ "XBOX 360 Controller",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360,
+ "XBOX 360 WLAN",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLMOBILEMOUSE3500,
+ "Wireless Mobile Mouse 3500",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_LIFECAM,
+ "Microsoft LifeCam",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLARCMOUSE,
+ "Wireless Arc Mouse (Model 1350)",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25,
+ "SCSI-DB25",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIHD50,
+ "SCSI-HD50",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM,
+ "CameraMate",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_FREECOM,
+ "Freecom IDE",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_X6U,
+ "ScanMaker X6 - X6U",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_C6,
+ "Phantom C6",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX2,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL2,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6UL,
+ "ScanMaker V6UL",
+ },
+ {
+ USB_VENDOR_MIDIMAN, USB_PRODUCT_MIDIMAN_MIDISPORT2X2,
+ "Midisport 2x2",
+ },
+ {
+ USB_VENDOR_MINDSATWORK, USB_PRODUCT_MINDSATWORK_DW,
+ "Digital Wallet",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304,
+ "Dimage S304",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X,
+ "Dimage X",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGE7I,
+ "Dimage 7i",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1,
+ "Dimage A1",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_CDRRW,
+ "CD-R/RW Drive",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_FDD,
+ "FDD",
+ },
+ {
+ USB_VENDOR_MOBILEACTION, USB_PRODUCT_MOBILEACTION_MA620,
+ "MA-620 IrDA",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_ED200H,
+ "EasiDock 200 Serial",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EASIDOCK,
+ "EasiDock Ethernet",
+ },
+ {
+ USB_VENDOR_MODACOM, USB_PRODUCT_MODACOM_MWIMAX,
+ "MODACOM Mobile wimax adaptor",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703,
+ "MCS7703 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7715,
+ "MCS7715 Serial Parallel",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730,
+ "MCS7730 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7810,
+ "MCS7810 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820,
+ "MCS7820 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7830,
+ "MCS7830 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7832,
+ "MCS7832 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840,
+ "MCS7840 Serial",
+ },
+ {
+ USB_VENDOR_MOTOROLA, USB_PRODUCT_MOTOROLA_MC141555,
+ "MC141555 hub controller",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
+ "T720c",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_V360,
+ "V360",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB4100,
+ "SB4100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB5100,
+ "SB5100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MOXA, USB_PRODUCT_MOXA_UPORT1110,
+ "UPort 1110",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_8,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_9,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_10,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_12,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_13,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_11,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_14,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_15,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MULTITECH, USB_PRODUCT_MULTITECH_ATLAS,
+ "MT5634ZBA modem",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CU,
+ "1200 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600CU,
+ "600 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USB,
+ "1200",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200UB,
+ "1200 UB",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USBPLUS,
+ "1200 Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CUPLUS,
+ "1200 CU Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_BEARPAW1200F,
+ "BearPaw 1200F",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600USB,
+ "600",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_MDC800,
+ "MDC-800",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_DV2000,
+ "DV2000",
+ },
+ {
+ USB_VENDOR_MUSTEK2, USB_PRODUCT_MUSTEK2_PM800,
+ "PowerMust 800",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW1200,
+ "BearPaw 1200",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW2400,
+ "BearPaw 2400",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_WL300NUG,
+ "WL300NU-G",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_USB2EXTEND,
+ "Repeater",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_B,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_C,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY760,
+ "Picty760",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY900,
+ "Picty900",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY920,
+ "Picty920",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY800,
+ "Picty800",
+ },
+ {
+ USB_VENDOR_NEC2, USB_PRODUCT_NEC2_HUB2_0,
+ "USB2.0 Hub",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050,
+ "6-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260,
+ "8-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010,
+ "Multi-format Flash Controller",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT,
+ "Turbo-Connect",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_CLIK40,
+ "Clik! 40",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET,
+ "EthernetGadget",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101X,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA101,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA120,
+ "USB 2.0 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_M7100,
+ "M7100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111NA,
+ "802.11b",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111V2,
+ "802.11b V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V3,
+ "WG111v3",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U_NF,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2,
+ "WG111v2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WN111V2,
+ "WN111V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3100,
+ "WNDA3100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3200,
+ "WNDA3200",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1100,
+ "WNA1100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000,
+ "WNA1000",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000M,
+ "WNA1000M",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000MV2,
+ "WNA1000Mv2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_N300MA,
+ "N300MA",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101,
+ "MA101",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101B,
+ "MA101 Rev B",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_NF,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_1,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111_NF,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR4, USB_PRODUCT_NETGEAR4_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NETWEEN, USB_PRODUCT_NETWEEN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NHJ, USB_PRODUCT_NHJ_CAM2,
+ "Camera",
+ },
+ {
+ USB_VENDOR_NI, USB_PRODUCT_NI_GPIB_USB_A,
+ "GPIB-USB-A",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E990,
+ "E990",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E880,
+ "E880",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E885,
+ "E885",
+ },
+ {
+ USB_VENDOR_NOKIA, USB_PRODUCT_NOKIA_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15UMASS,
+ "Internet Stick CS-15 (umass mode)",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15,
+ "Internet Stick CS-15",
+ },
+ {
+ USB_VENDOR_NORITAKE, USB_PRODUCT_NORITAKE_COMEMO,
+ "Noritake COMEMO",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_NV902W,
+ "NV-902W",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD,
+ "ExpressCard 3G",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620,
+ "V620",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV740,
+ "V740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V720,
+ "V720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740_2,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U870,
+ "U870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_XU870,
+ "XU870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_X950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620,
+ "ES620 CDMA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U720,
+ "U720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EU870D,
+ "EU870D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U727,
+ "U727",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC950D,
+ "MC950D HSUPA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINX950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ZEROCD2,
+ "ZeroCD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760CD,
+ "MC760 CD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U760,
+ "U760",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760,
+ "MC760",
+ },
+ {
+ USB_VENDOR_NOVATEL1, USB_PRODUCT_NOVATEL1_FLEXPACKGPS,
+ "NovAtel FlexPack GPS",
+ },
+ {
+ USB_VENDOR_O2MICRO, USB_PRODUCT_O2MICRO_OZ776HUB,
+ "OZ776 Hub",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_USBTOETHER,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_US2308,
+ "Serial",
+ },
+ {
+ USB_VENDOR_OLIMEX, USB_PRODUCT_OLIMEX_OPENOCD_JTAG,
+ "OpenOCD JTAG",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1,
+ "C-1",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700,
+ "C-700 Ultra Zoom",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511,
+ "OV511",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511PLUS,
+ "OV511+",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX50F,
+ "BX50F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX35F,
+ "BX35F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BY35S,
+ "BY35S UPS",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2,
+ "disk",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFEB,
+ "MDCFE-B CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SIIGMS,
+ "Memory Stick+CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB3,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB4,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_PNYCFSM,
+ "PNY/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_STECHCFSM,
+ "Simple Tech/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_LC1,
+ "CF + SM Combo (LC1)",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II,
+ "Datafab MD1-II PC-Card",
+ },
+ {
+ USB_VENDOR_ONSPEC2, USB_PRODUCT_ONSPEC2_8IN2,
+ "8In2",
+ },
+ {
+ USB_VENDOR_OPENMOKO, USB_PRODUCT_OPENMOKO_N1793D,
+ "Neo1973 Debug",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_ONERNG,
+ "Moonbase Otago OneRNG",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_CHAOSKEY,
+ "Altusmetrum ChaosKey 1.0",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G,
+ "Vodafone Mobile Connect 3G",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GFUSION,
+ "GlobeTrotter 3G FUSION",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD,
+ "GlobeTrotter 3G QUAD",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUADPLUS,
+ "GlobeTrotter 3G QUAD PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36,
+ "GlobeTrotter MAX 3.6/7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS,
+ "GlobeTrotter 3G PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_SCORPION,
+ "GlobeTrotter HSDPA Modem",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GSICON72,
+ "GlobeSurfer iCON 7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON225,
+ "iCON 225",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTHSUPA380E,
+ "GlobeTrotter HSUPA 380E",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON322,
+ "iCON 322",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON505,
+ "iCON 505",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_WIFI01,
+ "model 01 WiFi",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_BT01,
+ "model 01 Bluetooth",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01PLUS,
+ "model 01+ Ethernet",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01,
+ "model 01 Ethernet",
+ },
+ {
+ USB_VENDOR_OREGONSCI, USB_PRODUCT_OREGONSCI_OWL_CM160,
+ "OWL CM-160",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID,
+ "Solid state disk",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_DKU5,
+ "DKU-5 Serial",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_OWEN, USB_PRODUCT_OWEN_AC4,
+ "AC4 USB-RS485",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500,
+ "Palm m500",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505,
+ "Palm m505",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M515,
+ "Palm m515",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_I705,
+ "Palm i705",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_Z,
+ "Palm Tungsten Z",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125,
+ "Palm m125",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M130,
+ "Palm m130",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_T,
+ "Palm Tungsten T",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE_31,
+ "Palm Zire 31",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE,
+ "Palm Zire",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_SERIAL,
+ "USB Serial Adaptor",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_LS120,
+ "LS-120",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_SDCAAE,
+ "MultiMediaCard",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_TYTP50P6S,
+ "TY-TP50P6-S 50in Touch Panel",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_N5HBZ0000055,
+ "UB94",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_1,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_1,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_1,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_2,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_2,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_2,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485S,
+ "SB485S USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485C,
+ "SB485C USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_LEC,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB232,
+ "SB232 USB-RS232",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_TMU,
+ "TMU Thermometer",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_IRAMP,
+ "IRAmp Duplex",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK5,
+ "DRAK5",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO88,
+ "QUIDO USB 8/8",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO44,
+ "QUIDO USB 4/4",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO22,
+ "QUIDO USB 2/2",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO101,
+ "QUIDO USB 10/1",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO303,
+ "QUIDO USB 30/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO603,
+ "QUIDO USB 60(100)/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO216,
+ "QUIDO USB 2/16",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO332,
+ "QUIDO USB 3/32",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK6,
+ "DRAK6 USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_STAVOVY,
+ "UPS-USB Stavovy",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_MUC,
+ "MU Controller",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SIMUKEY,
+ "SimuKey",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AD4USB,
+ "AD4USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MUX,
+ "GOLIATH MUX",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MSR,
+ "GOLIATH MSR",
+ },
+ {
+ USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER,
+ "6 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE,
+ "3 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK,
+ "Disk",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1,
+ "Serial Converter",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET3,
+ "At-Home Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WM168B,
+ "WM-168b",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WL503IA,
+ "WL-503IA",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_GWU513,
+ "GWU513",
+ },
+ {
+ USB_VENDOR_PHIDGETS, USB_PRODUCT_PHIDGETS_2X2,
+ "2x2 Interface Kit",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS350,
+ "DSS 350 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS,
+ "DSS XXX Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA645VC,
+ "PCA645VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA646VC,
+ "PCA646VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC675K,
+ "PCVC675K Vesta",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC680K,
+ "PCVC680K Vesta Pro",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC690K,
+ "PCVC690K Vesta Pro Scan Camera",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC730K,
+ "PCVC730K ToUCam Fun",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC740K,
+ "PCVC740K ToUCam Pro PC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC750K,
+ "PCVC750K ToUCam Pro Scan",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS150,
+ "DSS 150 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_ACE1001,
+ "AKTAKOM ACE-1001",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_CPWUA054,
+ "CPWUA054",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500_NF,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600,
+ "SNU5600",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5630NS05,
+ "SNU5630NS/05",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DIVAUSB,
+ "DIVA mp3 player",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI, USB_PRODUCT_PHILIPSSEMI_HUB1122,
+ "hub",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_PS2USB,
+ "PS2 to Mac",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_XKEYS,
+ "Xkeys Programmable Keyboard",
+ },
+ {
+ USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600,
+ "CRW-600 6-in-1",
+ },
+ {
+ USB_VENDOR_PLANEX, USB_PRODUCT_PLANEX_GW_US11H,
+ "GW-US11H WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US11S,
+ "GW-US11S WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS,
+ "GW-US54GXS WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US300,
+ "GW-US300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54HP,
+ "GW-US54HP",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS,
+ "GW-US300MiniS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSNANO,
+ "GW-USNano",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRO300,
+ "GW-USMicro300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54MINI2,
+ "GW-US54Mini2",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54SG,
+ "GW-US54SG",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL,
+ "GW-US54GZL",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD,
+ "GW-US54GD",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMM,
+ "GW-USMM",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON,
+ "GW-USMicroN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON2W,
+ "GW-USMicroN2W",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ,
+ "GW-US54GZ",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GU1000T,
+ "GU-1000T",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI,
+ "GW-US54Mini",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_GWUS54ZGL,
+ "GW-US54ZGL",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
+ "DSP-400 Headset",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_TESTBOARD,
+ "test board",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA8,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA9,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTSMITH, USB_PRODUCT_PORTSMITH_EEA,
+ "Express Ethernet",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_1,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_2,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH,
+ "Travel Flash Drive",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2X300,
+ "G2-200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E300,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2300,
+ "G2-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E3002,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_9600,
+ "Colorado 9600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_600U,
+ "Colorado 600u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_6200,
+ "Visioneer 6200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_19200,
+ "Colorado 19200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_1200U,
+ "Colorado 1200u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_636I,
+ "ReadyScan 636i",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E600,
+ "G2E-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_COMFORT,
+ "Comfort",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_MOUSEINABOX,
+ "Mouse-in-a-Box",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_PCGAUMS1,
+ "Sony PCGA-UMS1",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301,
+ "PL2301 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302,
+ "PL2302 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303BENQ,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2305,
+ "Parallel printer",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_ATAPI4,
+ "ATAPI-4 Bridge Controller",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501,
+ "PL2501 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PUTERCOM, USB_PRODUCT_PUTERCOM_UPA100,
+ "USB-1284 BRIDGE",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_MODEM,
+ "CDMA MSM modem",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA2,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA3,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER2,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_MSM_PHONE,
+ "CDMA MSM phone",
+ },
+ {
+ USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_UMASS,
+ "Quanta USB MSM (umass mode)",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_Q101,
+ "Quanta Q101 HSDPA USB modem",
+ },
+ {
+ USB_VENDOR_QUICKSHOT, USB_PRODUCT_QUICKSHOT_STRIKEPAD,
+ "USB StrikePad",
+ },
+ {
+ USB_VENDOR_RADIOSHACK, USB_PRODUCT_RADIOSHACK_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_RAINBOW, USB_PRODUCT_RAINBOW_IKEY2000,
+ "i-Key 2000",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2671,
+ "RT2671",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3370,
+ "RT3370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3573,
+ "RT3573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5370,
+ "RT5370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5572,
+ "RT5572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_MT7601,
+ "MT7601",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT8070,
+ "RT8070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60,
+ "USB serial REX-USB60",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60F,
+ "REX-USB60F",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188ETV,
+ "RTL8188ETV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CTV,
+ "RTL8188CTV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_2,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8150,
+ "RTL8150",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8151,
+ "RTL8151 PNA",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152,
+ "RTL8152",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153,
+ "RTL8153",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8156,
+ "RTL8156",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_0,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8171,
+ "RTL8171",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8172,
+ "RTL8172",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8173,
+ "RTL8173",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8174,
+ "RTL8174",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_0,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8191CU,
+ "RTL8191CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_3,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE_VAU,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_0,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192U,
+ "RTL8192U",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_1,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_2,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_5,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8712,
+ "RTL8712",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8713,
+ "RTL8713",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_COMBO,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8723BU,
+ "RTL8723BU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_RENESAS, USB_PRODUCT_RENESAS_RX610,
+ "RX610 RX-Stick",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC3,
+ "VGP-VCC3 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_3,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC5,
+ "VGP-VCC5 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4_2,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC6,
+ "VGP-VCC6 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC7,
+ "VGP-VCC7 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC8,
+ "VGP-VCC8 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC9,
+ "VGP-VCC9 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VPGVCCX,
+ "VGP-VCCX Camera",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_BLACKBERRY,
+ "BlackBerry",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL_DUAL,
+ "RIM Mass Storage Device",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL,
+ "BlackBerry pearl",
+ },
+ {
+ USB_VENDOR_ROCKFIRE, USB_PRODUCT_ROCKFIRE_GAMEPAD,
+ "Gamepad 203USB",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA100,
+ "UA-100 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM4,
+ "UM-4 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8850,
+ "SC-8850 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_U8,
+ "U-8 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM2,
+ "UM-2 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8820,
+ "SC-8820 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_PC300,
+ "PC-300 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM1,
+ "UM-1 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SK500,
+ "SK-500 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SCD70,
+ "SC-D70 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM880N,
+ "UM-880 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD90,
+ "SD-90 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM550,
+ "UM-550 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD20,
+ "SD-20 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD80,
+ "SD-80 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA700,
+ "UA-700 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UMONE,
+ "UM-ONE MIDI I/F",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS, USB_PRODUCT_RTSYSTEMS_CT57B,
+ "CT57B Radio Cable",
+ },
+ {
+ USB_VENDOR_SACOM, USB_PRODUCT_SACOM_USB485BL,
+ "USB-485-BL",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A,
+ "XG-760A",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA,
+ "XG-76NA",
+ },
+ {
+ USB_VENDOR_SAITEK, USB_PRODUCT_SAITEK_CYBORG_3D_GOLD,
+ "Cyborg 3D Gold Joystick",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_WIS09ABGN,
+ "WIS09ABGN Wireless LAN adapter",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_SWL2100W,
+ "SWL-2100U",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID2,
+ "Android v2",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID,
+ "Android",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_I330,
+ "I330",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05A,
+ "ImageMate SDDR-05a",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31,
+ "ImageMate SDDR-31",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05,
+ "ImageMate SDDR-05",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR12,
+ "ImageMate SDDR-12",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR09,
+ "ImageMate SDDR-09",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR75,
+ "ImageMate SDDR-75",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY, USB_PRODUCT_SANWASUPPLY_JYDV9USB,
+ "JY-DV9USB gamepad",
+ },
+ {
+ USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
+ "Sanyo SCP-4900 Phone",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R,
+ "SL11R-IDE",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2101,
+ "SeaLINK+232 (2101/2105)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2102,
+ "SeaLINK+485 (2102)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2103,
+ "SeaLINK+232I (2103)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2104,
+ "SeaLINK+485I (2104)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_1,
+ "SeaPORT+2/232 (2201) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_1,
+ "SeaPORT+2/485 (2202) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_1,
+ "SeaPORT+2 (2203) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_2,
+ "SeaPORT+2/232 (2201) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_2,
+ "SeaPORT+2/485 (2202) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_2,
+ "SeaPORT+2 (2203) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_1,
+ "SeaPORT+4/232 (2401) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_1,
+ "SeaPORT+4/485 (2402) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_1,
+ "SeaPORT+4 (2403) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_2,
+ "SeaPORT+4/232 (2401) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_2,
+ "SeaPORT+4/485 (2402) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_2,
+ "SeaPORT+4 (2403) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_3,
+ "SeaPORT+4/232 (2401) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_3,
+ "SeaPORT+4/485 (2402) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_3,
+ "SeaPORT+4 (2403) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_4,
+ "SeaPORT+4/232 (2401) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_4,
+ "SeaPORT+4/485 (2402) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_4,
+ "SeaPORT+4 (2403) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_1,
+ "SeaLINK+8/232 (2801) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_1,
+ "SeaLINK+8/485 (2802) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_1,
+ "SeaLINK+8 (2803) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_2,
+ "SeaLINK+8/232 (2801) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_2,
+ "SeaLINK+8/485 (2802) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_2,
+ "SeaLINK+8 (2803) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_3,
+ "SeaLINK+8/232 (2801) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_3,
+ "SeaLINK+8/485 (2802) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_3,
+ "SeaLINK+8 (2803) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_4,
+ "SeaLINK+8/232 (2801) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_4,
+ "SeaLINK+8/485 (2802) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_4,
+ "SeaLINK+8 (2803) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_5,
+ "SeaLINK+8/232 (2801) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_5,
+ "SeaLINK+8/485 (2802) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_5,
+ "SeaLINK+8 (2803) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_6,
+ "SeaLINK+8/232 (2801) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_6,
+ "SeaLINK+8/485 (2802) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_6,
+ "SeaLINK+8 (2803) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_7,
+ "SeaLINK+8/232 (2801) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_7,
+ "SeaLINK+8/485 (2802) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_7,
+ "SeaLINK+8 (2803) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_8,
+ "SeaLINK+8/232 (2801) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_8,
+ "SeaLINK+8/485 (2802) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_8,
+ "SeaLINK+8 (2803) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2106,
+ "SeaLINK+422 (2106)",
+ },
+ {
+ USB_VENDOR_SEL, USB_PRODUCT_SEL_C662,
+ "C662",
+ },
+ {
+ USB_VENDOR_SELUXIT, USB_PRODUCT_SELUXIT_RF,
+ "RF Dongle",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301,
+ "NUB-8301",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB862,
+ "NUB-862",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SERVERWORKS, USB_PRODUCT_SERVERWORKS_HUB,
+ "Root Hub",
+ },
+ {
+ USB_VENDOR_SGI, USB_PRODUCT_SGI_SN1_L1_SC,
+ "SN1 L1 System Controller",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268,
+ "ST268",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620A,
+ "DM9620A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621A,
+ "DM9621A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ZT6688,
+ "ZT6688",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515,
+ "ADM8515 Ethernet",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9000E,
+ "DM9000E",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620,
+ "DM9620",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621,
+ "DM9621",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9622,
+ "DM9622",
+ },
+ {
+ USB_VENDOR_SHARK, USB_PRODUCT_SHARK_PA,
+ "Pocket Adapter",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500,
+ "SL5500",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300,
+ "A300",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600,
+ "SL5600",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700,
+ "C700",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750,
+ "C750",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB,
+ "E-USB Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SDDR09,
+ "ImageMate SDDR09",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBSMCF,
+ "eUSB SmartMedia / CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC,
+ "eUSB MultiMediaCard",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_HIFD,
+ "Sony Hifd",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBATAPI,
+ "eUSB ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CF,
+ "eUSB CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_B,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_C,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CDRW,
+ "CD-RW Device",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SCM,
+ "SCM Micro",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM,
+ "SpeedStream",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM22,
+ "SpeedStream 1022",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
+ "GSM module MC35",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_SX1,
+ "SX1",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X65,
+ "X65",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X75,
+ "X75",
+ },
+ {
+ USB_VENDOR_SIEMENS4, USB_PRODUCT_SIEMENS4_RUGGEDCOM,
+ "RUGGEDCOM",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM5625,
+ "EM5625",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_595,
+ "AirCard 595",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC597E,
+ "597E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C597,
+ "Compass 597",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_580,
+ "Aircard 580 EVDO",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC595U,
+ "595U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720_2,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725_2,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_TRUINSTALL,
+ "Aircard Tru Installer",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_2,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8765,
+ "MC8765",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775_2,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_875,
+ "875",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8780,
+ "MC8780",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8781,
+ "MC8781",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8790,
+ "MC8790",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880,
+ "880",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881,
+ "881",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880E,
+ "880E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881E,
+ "881E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880U,
+ "880U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881U,
+ "881U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC885U,
+ "885U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C01SW,
+ "C01SW",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7700,
+ "MC7700",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_USB305,
+ "USB305",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7304,
+ "MC7304",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8355,
+ "MC8355",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_340U,
+ "Aircard 340U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_770S,
+ "Aircard 770S",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7455,
+ "MC7455",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM7455,
+ "EM7455",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_IRDA,
+ "IrDA",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X,
+ "Datum Networks SSF-7X Multi Players",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_DIGIFILMREADER,
+ "DigiFilm-Combo",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER,
+ "MULTICARDREADER",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_VSTABI,
+ "VStabi Controller",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_M,
+ "Arkham DS101 Monitor",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_A,
+ "Arkham DS101 Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BSM7DUSB,
+ "BSM7-D-USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_POLOLU,
+ "Pololu Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_DEBUG,
+ "Cygnal Debug Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME2,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EDG1228,
+ "EDG1228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_GSM2228,
+ "Enfora GSM2228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP,
+ "Argussoft ISP",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IMS_USB_RS422,
+ "IMS USB-RS422",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128,
+ "Crumb128",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_OPTRIS_MSPRO,
+ "Optris MSpro LT Thermometer",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEGREECONT,
+ "Degree Controls",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRACIENT,
+ "Tracient RFID",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRAQMATE,
+ "Track Systems Traqmate",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SUUNTO,
+ "Suunto sports",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARYGON_MIFARE,
+ "Arygon Mifare RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DESKTOPMOBILE,
+ "Burnside Desktop mobile",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TAMSMASTER,
+ "Tams Master Easy Control",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGBLASTER,
+ "RIGblaster P&P",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGTALK,
+ "RIGtalk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_B_G_H3000,
+ "B&G H3000 Data Cable",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IPLINK1220,
+ "IP-Link 1220",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HAMLINKUSB,
+ "Timewave HamLinkUSB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AVIT_USB_TTL,
+ "AVIT Research USB-TTL",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MJS_TOSLINK,
+ "MJS USB-TOSLINK",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_WAVIT,
+ "ThinkOptics WavIt",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MULTIPLEX_RC,
+ "Multiplex RC adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MSD_DASHHAWK,
+ "MSD DashHawk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INSYS_MODEM,
+ "INSYS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_JTAG,
+ "Lipowsky Baby-JTAG",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_LIN,
+ "Lipowsky Baby-LIN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AEROCOMM,
+ "Aerocomm Radio",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ZEPHYR_BIO,
+ "Zephyr Bioharness",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EMS_C1007,
+ "EMS C1007 HF RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_HARP,
+ "Lipowsky HARP-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_C2_EDGE_MODEM,
+ "Commander 2 EDGE(GSM) Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_GPS,
+ "Cygnal Fasttrax GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PLUGDRIVE,
+ "Nanotec Plug & Drive",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TELEGESIS_ETRX2,
+ "Telegesis ETRX2USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PROCYON_AVS,
+ "Procyon AVS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MC35PU,
+ "MC35pu",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL,
+ "Cygnal",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AMBER_AMB2560,
+ "Amber Wireless AMB2560",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEKTEK_DTAPLUS,
+ "DekTec DTA Plus VHF/UHF Booster",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KYOCERA_GPS,
+ "Kyocera GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IRZ_SG10,
+ "IRZ SG-10 GSM/GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BEI_VCP,
+ "BEI USB Sensor (VCP)",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_JUNIPER_BX_CONS,
+ "Juniper BX Console",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BALLUFF_RFID,
+ "Balluff RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_IBUS,
+ "AC-Services IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CIS,
+ "AC-Services CIS-IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PREON32,
+ "Virtenio Preon32",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CAN,
+ "AC-Services CAN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_OBD,
+ "AC-Services OBD",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357LR,
+ "CEL EM357 LR",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357,
+ "CEL EM357",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MMB_ZIGBEE,
+ "MMB Networks ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PII_ZIGBEE,
+ "Planet Innovation Ingeni ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KETRA_N1,
+ "Ketra N1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CELDEVKIT,
+ "CEL MeshWorks DevKit",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KCF_PRN,
+ "KCF Technologies PRN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HUBZ,
+ "HubZ ZigBee/Z-Wave",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_1,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_2,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_3,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INFINITY_MIC,
+ "Infinity GPS-MIC-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP2110,
+ "CP2110 USB HID Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBSCOPE50,
+ "USBscope50",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBWAVE12,
+ "USBwave12",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBPULSE100,
+ "USBpulse100",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBCOUNT50,
+ "USBcount50",
+ },
+ {
+ USB_VENDOR_SILABS2, USB_PRODUCT_SILABS2_DCU11CLONE,
+ "DCU-11 clone",
+ },
+ {
+ USB_VENDOR_SILABS3, USB_PRODUCT_SILABS3_GPRS_MODEM,
+ "GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS4, USB_PRODUCT_SILABS4_100EU_MODEM,
+ "GPRS Modem 100EU",
+ },
+ {
+ USB_VENDOR_SILABS5, USB_PRODUCT_SILABS5_EM358X,
+ "EM358x",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_U2E,
+ "U2E",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_GPE,
+ "Psion Dacom Gold Port Ethernet",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPH_NF,
+ "YAP Phone (no firmware)",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
+ "YAP Phone",
+ },
+ {
+ USB_VENDOR_SIMCOM, USB_PRODUCT_SIMCOM_SIM7600E,
+ "SIM7600E modem",
+ },
+ {
+ USB_VENDOR_SIRIUS, USB_PRODUCT_SIRIUS_ROADSTER,
+ "NetComm Roadster II 56",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_LN029,
+ "LN029",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_CN104,
+ "CN104",
+ },
+ {
+ USB_VENDOR_SITECOM2, USB_PRODUCT_SITECOM2_WL022,
+ "WL-022",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V1,
+ "WL-168 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN030,
+ "LN-030",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V4,
+ "WL-168 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL302,
+ "WL-302",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL603,
+ "WL-603",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL315,
+ "WL-315",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL321,
+ "WL-321",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL324,
+ "WL-324",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL343,
+ "WL-343",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608,
+ "WL-608",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL344,
+ "WL-344",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL329,
+ "WL-329",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL345,
+ "WL-345",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL353,
+ "WL-353",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V1,
+ "WL-349 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V4,
+ "WL-349 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA4000,
+ "WLA-4000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA5000,
+ "WLA-5000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN032,
+ "LN-032",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA2100V2,
+ "WLA-2100 v2",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028,
+ "LN-028",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113,
+ "WL-113",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL172,
+ "WL-172",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113R2,
+ "WL-113 rev 2",
+ },
+ {
+ USB_VENDOR_SMART, USB_PRODUCT_SMART_PL2303,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTLINK,
+ "SmartLink Ethernet",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC,
+ "smartNIC 2 PnP",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2102USB,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2206USB,
+ "EZ Connect Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2862WG,
+ "EZ Connect 54Mbps",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2020HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2504HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2513HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7500,
+ "LAN7500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7505,
+ "LAN7505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7800,
+ "LAN7800",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7801,
+ "LAN7801",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7850,
+ "LAN7850",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9530,
+ "LAN9530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9730,
+ "LAN9730",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_SAL10,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505_SAL10,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_SAL10,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_SAL10,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_SAL10,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_HAL,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_HAL,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_ALT,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_ALT,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_ALT,
+ "SMSC9512",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN89530,
+ "LAN89530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV1,
+ "EZ Connect 11Mbps",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV2,
+ "EZ Connect 11Mbps v2",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100,
+ "NUB100 Ethernet",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB110,
+ "NUB110 Ethernet",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR, USB_PRODUCT_SOLIDYEAR_KEYBOARD,
+ "Keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC,
+ "DSC Cameras",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_NWMS7,
+ "Memorystick NW-MS7",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2,
+ "Harddrive V2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSACUS1,
+ "Memorystick MSAC-US1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM,
+ "Handycam",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC,
+ "MSC Memorystick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35,
+ "Clie v3.5",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARD,
+ "PlayStation2 keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARDHUB,
+ "PlayStation2 keyboard hub",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2MOUSE,
+ "PlayStation2 mouse",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40,
+ "Clie v4.0",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40_MS,
+ "Clie v4.0 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360,
+ "Clie s360",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41_MS,
+ "Clie v4.1 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41,
+ "Clie v4.1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60,
+ "Clie nx60",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TJ25,
+ "Clie tj25",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_IFU_WLM2,
+ "IFU-WLM2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CXD9192,
+ "1seg TV tuner",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8_CHG,
+ "KeikaiDenwa 8 with charger",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8,
+ "KeikaiDenwa 8",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON, USB_PRODUCT_SPEEDDRAGON_MS3303H,
+ "MS3303H Serial",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_UB801R,
+ "UB801R",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X,
+ "ICUSB2321X/2X/4X",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_BIOMETRIC_COPR,
+ "Biometric Coprocessor",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_COMMUNICATOR,
+ "Communicator",
+ },
+ {
+ USB_VENDOR_STOLLMANN, USB_PRODUCT_STOLLMANN_ISDN_TA_USBA,
+ "ISDN TA+USBA",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX, USB_PRODUCT_STRAWBERRYLINUX_USBRH,
+ "USBRH sensor",
+ },
+ {
+ USB_VENDOR_STSN, USB_PRODUCT_STSN_STSN0001,
+ "Internet Access Device",
+ },
+ {
+ USB_VENDOR_SUNCOMM, USB_PRODUCT_SUNCOMM_MB_ADAPTOR,
+ "Mobile Adaptor",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_DS96L,
+ "U-Cable type D2",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_PS64P1,
+ "U-Cable type P1",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U,
+ "Slipper U",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_IS96U,
+ "Ir-Trinity",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX,
+ "U-Cable type A3",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4,
+ "U-Cable type A4",
+ },
+ {
+ USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
+ "SuperTop IDE Bridge",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_EP9001G2A,
+ "EP-9001-G rev 2A",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SUSTEEN, USB_PRODUCT_SUSTEEN_DCU11,
+ "Ericsson DCU-10/11",
+ },
+ {
+ USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW153,
+ "LW153",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW154,
+ "LW154",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303,
+ "LW303",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313,
+ "LW313",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_CIPHERLAB100,
+ "CipherLab Barcode Scanner",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS, USB_PRODUCT_SYSTEMTALKS_SGCX2UL,
+ "SGC-X2UL",
+ },
+ {
+ USB_VENDOR_TANGTOP, USB_PRODUCT_TANGTOP_USBPS2,
+ "USBPS2",
+ },
+ {
+ USB_VENDOR_TAPWAVE, USB_PRODUCT_TAPWAVE_ZODIAC,
+ "Zodiac",
+ },
+ {
+ USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE,
+ "CameraMate (DPCM_USB)",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_2,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_3,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS_2,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA9664,
+ "USB-PDC Adapter UPA9664",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UCA1464,
+ "USB-cdmaOne Adapter UCA1464",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UHA6400,
+ "USB-PHS Adapter UHA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA6400,
+ "USB-PHS Adapter UPA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB,
+ "FD-05PUB",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_0193,
+ "ALLNET 0193 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZYAIR_B200,
+ "ZyXEL ZyAIR B200 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_U300C,
+ "U-300C",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN,
+ "QuickWLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1,
+ "Microphone",
+ },
+ {
+ USB_VENDOR_TENDA, USB_PRODUCT_TENDA_TWL541U,
+ "TWL541U WLAN",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON,
+ "Aureon Dual USB",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_175,
+ "175/177 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_330,
+ "330 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_435,
+ "435/635/735 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_845,
+ "845 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERVICE,
+ "Service adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_580,
+ "580 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_174,
+ "174 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_556,
+ "556/560 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_1,
+ "USB adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_2,
+ "USB to serial converter",
+ },
+ {
+ USB_VENDOR_THRUST, USB_PRODUCT_THRUST_FUSION_PAD,
+ "Fusion Digital Gamepad",
+ },
+ {
+ USB_VENDOR_THURLBY, USB_PRODUCT_THURLBY_QL355P,
+ "QL355P power supply",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41,
+ "UT-USB41 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB2046,
+ "TUSB2046 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB3410,
+ "TUSB3410",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_NEXII,
+ "Nex II Digital",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430_JTAG,
+ "MSP-FET430UIF JTAG",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430,
+ "MSP-FET430UIF",
+ },
+ {
+ USB_VENDOR_TML, USB_PRODUCT_TML_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_TODOS, USB_PRODUCT_TODOS_ARGOS_MINI,
+ "Argos Mini Smartcard",
+ },
+ {
+ USB_VENDOR_TOPRE, USB_PRODUCT_TOPRE_HHKB,
+ "HHKB Professional",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RH,
+ "Toradex OAK RH sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_P,
+ "Toradex OAK P sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LUX,
+ "Toradex OAK LUX sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_TILT,
+ "Toradex OAK Tilt sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_DIST,
+ "Toradex OAK DIST sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MOVE,
+ "Toradex OAK MOVE sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_4_20,
+ "Toradex OAK 4-20mA sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_G,
+ "Toradex OAK G sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MAGR,
+ "Toradex OAK MAGR sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RELAY,
+ "Toradex OAK RELAY",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_10V,
+ "Toradex OAK 10V sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LN,
+ "Toradex OAK LN sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_IO,
+ "Toradex OAK IO",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_ORIENT,
+ "Toradex ORIENT Tilt sensor",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_HSDPA,
+ "HSDPA",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB,
+ "ThumbDrive 8MB",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_TRIPPLITE, USB_PRODUCT_TRIPPLITE_U209,
+ "U209 Serial",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_T33521,
+ "USB/MP3 decoder",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100,
+ "XXX 1100",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_OPTMOUSE,
+ "Optical Mouse",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_TSUNAMI, USB_PRODUCT_TSUNAMI_SM2000,
+ "SM-2000",
+ },
+ {
+ USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240,
+ "G240",
+ },
+ {
+ USB_VENDOR_UBLOX, USB_PRODUCT_UBLOX_ANTARIS4,
+ "ANTARIS4 GPS",
+ },
+ {
+ USB_VENDOR_ULTIMA, USB_PRODUCT_ULTIMA_1200UBPLUS,
+ "1200 UB Plus",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1236U,
+ "Astra 1236U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1220U,
+ "Astra 1220U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2000U,
+ "Astra 2000U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA3400,
+ "Astra 3400",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2100U,
+ "Astra 2100U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2200U,
+ "Astra 2200U",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU_NF,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A,
+ "TEW-429UB_A",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB,
+ "TEW-429UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1,
+ "TEW-429UB C1",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW645UB,
+ "TEW-645UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2,
+ "ALL0298 v2",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UNIACCESS, USB_PRODUCT_UNIACCESS_PANACHE,
+ "Panache Surf ISDN",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_NW3100,
+ "NW-3100",
+ },
+ {
+ USB_VENDOR_UNKNOWN3, USB_PRODUCT_UNKNOWN3_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_RD9700,
+ "RD9700",
+ },
+ {
+ USB_VENDOR_UNKNOWN5, USB_PRODUCT_UNKNOWN5_NF_RIC,
+ "NF RIC",
+ },
+ {
+ USB_VENDOR_UNKNOWN6, USB_PRODUCT_UNKNOWN6_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_USI, USB_PRODUCT_USI_MC60,
+ "MC60 Serial",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR1120,
+ "USR1120 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5422,
+ "USR5422 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5421A,
+ "USR5421A WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5423,
+ "USR5423 WLAN",
+ },
+ {
+ USB_VENDOR_VAISALA, USB_PRODUCT_VAISALA_USBINSTCABLE,
+ "USB instrument cable",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS101,
+ "VFS101 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS301,
+ "VFS301 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS451,
+ "VFS451 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS300,
+ "VFS300 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_2,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_3,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5471,
+ "VFS471 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VELLEMAN, USB_PRODUCT_VELLEMAN_K8055,
+ "K8055 USB Experiment interface board",
+ },
+ {
+ USB_VENDOR_VERTEX, USB_PRODUCT_VERTEX_VW110L,
+ "VW110L",
+ },
+ {
+ USB_VENDOR_VIA, USB_PRODUCT_VIA_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773HUB,
+ "G773 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_P815HUB,
+ "P815 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_AIRSYNC,
+ "Airsync",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773CTRL,
+ "G773 Monitor Control",
+ },
+ {
+ USB_VENDOR_VISION, USB_PRODUCT_VISION_VC6452V002,
+ "CPiA Camera",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_7600,
+ "OneTouch 7600",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_5300,
+ "OneTouch 5300",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_3000,
+ "Scanport 3000",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6100,
+ "OneTouch 6100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6200,
+ "OneTouch 6200",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8100,
+ "OneTouch 8100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8600,
+ "OneTouch 8600",
+ },
+ {
+ USB_VENDOR_VIVITAR, USB_PRODUCT_VIVITAR_DSC350,
+ "DSC350",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_1,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_2,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_CT0405U,
+ "CT-0405-U Tablet",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE,
+ "Graphire",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_4X5,
+ "Graphire3 4x5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_4X5,
+ "Graphire4 Classic A6",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOSA5,
+ "Intuos A5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW,
+ "Intuos Draw (CTL-490)",
+ },
+ {
+ USB_VENDOR_WAGO, USB_PRODUCT_WAGO_SERVICECABLE,
+ "Service Cable 750-923",
+ },
+ {
+ USB_VENDOR_WAVESENSE, USB_PRODUCT_WAVESENSE_JAZZ,
+ "Jazz blood glucose meter",
+ },
+ {
+ USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341,
+ "CH341 serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341A,
+ "CH341A serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH340,
+ "CH340 serial/parallel",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_PL512,
+ "PL512 PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_RCM,
+ "RCM Remote Control",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_MPOD,
+ "MPOD PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_CML,
+ "CML Data Logger",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_WNC0600,
+ "WNC-0600USB",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR045G,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G,
+ "UR055G",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_O8494,
+ "ORiNOCO 802.11n",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WMR, USB_PRODUCT_WMR_RIGBLASTER,
+ "RIGblaster",
+ },
+ {
+ USB_VENDOR_XIAOMI, USB_PRODUCT_XIAOMI_MT7601U,
+ "MT7601U",
+ },
+ {
+ USB_VENDOR_XIRING, USB_PRODUCT_XIRING_XIMAX,
+ "Ximax CDC",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_IMAGING,
+ "Imaging Device",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_PCCAM,
+ "IBM PC Camera",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256,
+ "UX256 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX96,
+ "UX96 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UR22,
+ "UR22",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RPU200,
+ "RP-U200",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
+ "NetVolante RTA54i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65B,
+ "NetVolante RTW65b",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65I,
+ "NetVolante RTW65i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA55I,
+ "NetVolante RTA55i",
+ },
+ {
+ USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO,
+ "U640MO-03",
+ },
+ {
+ USB_VENDOR_YCCABLE, USB_PRODUCT_YCCABLE_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU,
+ "Flashbuster-U",
+ },
+ {
+ USB_VENDOR_YUBICO, USB_PRODUCT_YUBICO_YUBIKEY,
+ "Yubikey",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_M4Y750,
+ "M4Y-750",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI725,
+ "XI-725/726",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI735,
+ "XI-735",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_MD40900,
+ "MD40900",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XG703A,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB81,
+ "UB81",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB82,
+ "UB82",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZOOM, USB_PRODUCT_ZOOM_2986L,
+ "2986L Fax Modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_CDMA_MSM,
+ "CDMA Technologies MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF633,
+ "ZTE MF633 USUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637,
+ "ZTE MF637 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z,
+ "ZTE K3565-Z USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP,
+ "ONDA MSA110UP USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER2,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF112,
+ "ZTE MF112 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_HSUSB,
+ "ZTE HSUSB",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC2746,
+ "AC2746 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER3,
+ "ZTE USB CDMA installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC8700,
+ "AC8700 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1201,
+ "ZD1201",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1221,
+ "ZD1221",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ALL0298,
+ "ALL0298",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B_2,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_OMNI56K,
+ "Omni 56K Plus",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220,
+ "G-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220F,
+ "G-220F",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2,
+ "G-200 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H,
+ "AG-225H",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202,
+ "M-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G270S,
+ "G-270S",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2,
+ "G-220 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G202,
+ "G-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG220,
+ "AG-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225HV2,
+ "AG-225H v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD271N,
+ "NWD-271N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD211AN,
+ "NWD-211AN",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD2105,
+ "NWD2105",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_PRESTIGE,
+ "Prestige",
+ },
+ { 0, 0, NULL }
+};
+
+const struct usb_known_vendor usb_known_vendors[] = {
+ {
+ USB_VENDOR_PLANEX4,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_UNKNOWN2,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_EGALAX2,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_UNKNOWN6,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_HUMAX,
+ "HUMAX",
+ },
+ {
+ USB_VENDOR_BWCT,
+ "Bernd Walter Computer Technology",
+ },
+ {
+ USB_VENDOR_AOX,
+ "AOX",
+ },
+ {
+ USB_VENDOR_ATMEL,
+ "Atmel",
+ },
+ {
+ USB_VENDOR_MITSUMI,
+ "Mitsumi",
+ },
+ {
+ USB_VENDOR_HP,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_ADAPTEC,
+ "Adaptec",
+ },
+ {
+ USB_VENDOR_NATIONAL,
+ "National Semiconductor",
+ },
+ {
+ USB_VENDOR_ACERLABS,
+ "Acer Labs",
+ },
+ {
+ USB_VENDOR_FTDI,
+ "Future Technology Devices",
+ },
+ {
+ USB_VENDOR_QUANTA2,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_NEC,
+ "NEC",
+ },
+ {
+ USB_VENDOR_KODAK,
+ "Eastman Kodak",
+ },
+ {
+ USB_VENDOR_VIA,
+ "VIA",
+ },
+ {
+ USB_VENDOR_MELCO,
+ "Melco",
+ },
+ {
+ USB_VENDOR_LEADTEK,
+ "Leadtek",
+ },
+ {
+ USB_VENDOR_CREATIVE,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_NOKIA2,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_ADI,
+ "ADI Systems",
+ },
+ {
+ USB_VENDOR_CATC,
+ "Computer Access Technology",
+ },
+ {
+ USB_VENDOR_SMC2,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_GRAVIS,
+ "Advanced Gravis Computer",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP,
+ "Fujitsu Component",
+ },
+ {
+ USB_VENDOR_TAUGA,
+ "Taugagreining HF",
+ },
+ {
+ USB_VENDOR_AMD,
+ "Advanced Micro Devices",
+ },
+ {
+ USB_VENDOR_LEXMARK,
+ "Lexmark International",
+ },
+ {
+ USB_VENDOR_NANAO,
+ "NANAO",
+ },
+ {
+ USB_VENDOR_ALPS,
+ "Alps Electric",
+ },
+ {
+ USB_VENDOR_THRUST,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_TI,
+ "Texas Instruments",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_SIS,
+ "Silicon Integrated Systems Corp.",
+ },
+ {
+ USB_VENDOR_KYE,
+ "KYE Systems",
+ },
+ {
+ USB_VENDOR_DIAMOND2,
+ "Diamond (Supra)",
+ },
+ {
+ USB_VENDOR_RENESAS,
+ "Renesas",
+ },
+ {
+ USB_VENDOR_MICROSOFT,
+ "Microsoft",
+ },
+ {
+ USB_VENDOR_PRIMAX,
+ "Primax Electronics",
+ },
+ {
+ USB_VENDOR_MGE,
+ "Eaton (MGE)",
+ },
+ {
+ USB_VENDOR_AMP,
+ "AMP",
+ },
+ {
+ USB_VENDOR_CHERRY,
+ "Cherry Mikroschalter",
+ },
+ {
+ USB_VENDOR_MEGATRENDS,
+ "American Megatrends",
+ },
+ {
+ USB_VENDOR_LOGITECH,
+ "Logitech",
+ },
+ {
+ USB_VENDOR_BTC,
+ "Behavior Tech. Computer",
+ },
+ {
+ USB_VENDOR_PHILIPS,
+ "Philips",
+ },
+ {
+ USB_VENDOR_SANYO,
+ "Sanyo Electric",
+ },
+ {
+ USB_VENDOR_CONNECTIX,
+ "Connectix",
+ },
+ {
+ USB_VENDOR_DELL2,
+ "Dell",
+ },
+ {
+ USB_VENDOR_KENSINGTON,
+ "Kensington",
+ },
+ {
+ USB_VENDOR_LUCENT,
+ "Lucent",
+ },
+ {
+ USB_VENDOR_PLANTRONICS,
+ "Plantronics",
+ },
+ {
+ USB_VENDOR_KYOCERA,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_STMICRO,
+ "STMicroelectronics",
+ },
+ {
+ USB_VENDOR_FOXCONN,
+ "Foxconn",
+ },
+ {
+ USB_VENDOR_YAMAHA,
+ "YAMAHA",
+ },
+ {
+ USB_VENDOR_COMPAQ,
+ "Compaq",
+ },
+ {
+ USB_VENDOR_HITACHI,
+ "Hitachi",
+ },
+ {
+ USB_VENDOR_ACERP,
+ "Acer Peripherals",
+ },
+ {
+ USB_VENDOR_DAVICOM,
+ "Davicom",
+ },
+ {
+ USB_VENDOR_VISIONEER,
+ "Visioneer",
+ },
+ {
+ USB_VENDOR_CANON,
+ "Canon",
+ },
+ {
+ USB_VENDOR_NIKON,
+ "Nikon",
+ },
+ {
+ USB_VENDOR_IBM,
+ "IBM",
+ },
+ {
+ USB_VENDOR_CYPRESS,
+ "Cypress Semiconductor",
+ },
+ {
+ USB_VENDOR_EPSON,
+ "Seiko Epson",
+ },
+ {
+ USB_VENDOR_RAINBOW,
+ "Rainbow Technologies",
+ },
+ {
+ USB_VENDOR_IODATA,
+ "I/O Data",
+ },
+ {
+ USB_VENDOR_TDK,
+ "TDK",
+ },
+ {
+ USB_VENDOR_3COMUSR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_METHODE,
+ "Methode Electronics Far East",
+ },
+ {
+ USB_VENDOR_MAXISWITCH,
+ "Maxi Switch",
+ },
+ {
+ USB_VENDOR_LOCKHEEDMER,
+ "Lockheed Martin Energy Research",
+ },
+ {
+ USB_VENDOR_FUJITSU,
+ "Fujitsu",
+ },
+ {
+ USB_VENDOR_TOSHIBAAM,
+ "Toshiba America",
+ },
+ {
+ USB_VENDOR_MICROMACRO,
+ "Micro Macro Technologies",
+ },
+ {
+ USB_VENDOR_KONICA,
+ "Konica",
+ },
+ {
+ USB_VENDOR_LITEON,
+ "Lite-On Technology",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO,
+ "Fuji Photo Film",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI,
+ "Philips Semiconductors",
+ },
+ {
+ USB_VENDOR_TATUNG,
+ "Tatung Co. Of America",
+ },
+ {
+ USB_VENDOR_SCANLOGIC,
+ "ScanLogic",
+ },
+ {
+ USB_VENDOR_MYSON,
+ "Myson Technology",
+ },
+ {
+ USB_VENDOR_DIGI2,
+ "Digi",
+ },
+ {
+ USB_VENDOR_ITTCANON,
+ "ITT Canon",
+ },
+ {
+ USB_VENDOR_ALTEC,
+ "Altec Lansing",
+ },
+ {
+ USB_VENDOR_MICROCHIP,
+ "Microchip Technology, Inc.",
+ },
+ {
+ USB_VENDOR_HOLTEK,
+ "Holtek",
+ },
+ {
+ USB_VENDOR_PANASONIC,
+ "Panasonic (Matsushita)",
+ },
+ {
+ USB_VENDOR_SHARP,
+ "Sharp",
+ },
+ {
+ USB_VENDOR_IIYAMA,
+ "Iiyama",
+ },
+ {
+ USB_VENDOR_EXAR,
+ "Exar",
+ },
+ {
+ USB_VENDOR_SHUTTLE,
+ "Shuttle Technology",
+ },
+ {
+ USB_VENDOR_SAMSUNG2,
+ "Samsung Electronics",
+ },
+ {
+ USB_VENDOR_ANNABOOKS,
+ "Annabooks",
+ },
+ {
+ USB_VENDOR_JVC,
+ "JVC",
+ },
+ {
+ USB_VENDOR_CHICONY,
+ "Chicony Electronics",
+ },
+ {
+ USB_VENDOR_ELAN,
+ "Elan",
+ },
+ {
+ USB_VENDOR_BROTHER,
+ "Brother Industries",
+ },
+ {
+ USB_VENDOR_DALLAS,
+ "Dallas Semiconductor",
+ },
+ {
+ USB_VENDOR_ACER,
+ "Acer",
+ },
+ {
+ USB_VENDOR_3COM,
+ "3Com",
+ },
+ {
+ USB_VENDOR_AZTECH,
+ "Aztech Systems",
+ },
+ {
+ USB_VENDOR_BELKIN,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_KAWATSU,
+ "Kawatsu Semiconductor",
+ },
+ {
+ USB_VENDOR_APC,
+ "American Power Conversion",
+ },
+ {
+ USB_VENDOR_CONNECTEK,
+ "Advanced Connectek USA",
+ },
+ {
+ USB_VENDOR_NETCHIP,
+ "NetChip Technology",
+ },
+ {
+ USB_VENDOR_ALTRA,
+ "ALTRA",
+ },
+ {
+ USB_VENDOR_ATI,
+ "ATI Technologies",
+ },
+ {
+ USB_VENDOR_AKS,
+ "Aladdin Knowledge Systems",
+ },
+ {
+ USB_VENDOR_UNIACCESS,
+ "Universal Access",
+ },
+ {
+ USB_VENDOR_VIEWSONIC,
+ "ViewSonic",
+ },
+ {
+ USB_VENDOR_XIRLINK,
+ "Xirlink",
+ },
+ {
+ USB_VENDOR_ANCHOR,
+ "Anchor Chips",
+ },
+ {
+ USB_VENDOR_SONY,
+ "Sony",
+ },
+ {
+ USB_VENDOR_VISION,
+ "VLSI Vision",
+ },
+ {
+ USB_VENDOR_ASAHIKASEI,
+ "Asahi Kasei Microsystems",
+ },
+ {
+ USB_VENDOR_ATEN,
+ "ATEN International",
+ },
+ {
+ USB_VENDOR_SAMSUNG,
+ "Samsung",
+ },
+ {
+ USB_VENDOR_MUSTEK,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_TELEX,
+ "Telex Communications",
+ },
+ {
+ USB_VENDOR_PERACOM,
+ "Peracom Networks",
+ },
+ {
+ USB_VENDOR_ALCOR2,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_WACOM,
+ "WACOM",
+ },
+ {
+ USB_VENDOR_ETEK,
+ "e-TEK Labs",
+ },
+ {
+ USB_VENDOR_EIZO,
+ "EIZO",
+ },
+ {
+ USB_VENDOR_ELECOM,
+ "Elecom",
+ },
+ {
+ USB_VENDOR_XYRATEX,
+ "Xyratex",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE,
+ "Hauppauge Computer Works",
+ },
+ {
+ USB_VENDOR_BAFO,
+ "BAFO/Quality Computer Accessories",
+ },
+ {
+ USB_VENDOR_YEDATA,
+ "Y-E Data",
+ },
+ {
+ USB_VENDOR_AVM,
+ "AVM",
+ },
+ {
+ USB_VENDOR_QUICKSHOT,
+ "Quickshot",
+ },
+ {
+ USB_VENDOR_ROLAND,
+ "Roland",
+ },
+ {
+ USB_VENDOR_ROCKFIRE,
+ "Rockfire",
+ },
+ {
+ USB_VENDOR_RATOC,
+ "RATOC Systems",
+ },
+ {
+ USB_VENDOR_ZYXEL,
+ "ZyXEL Communication",
+ },
+ {
+ USB_VENDOR_ALCOR,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_OMRON,
+ "OMRON Corporation",
+ },
+ {
+ USB_VENDOR_IOMEGA,
+ "Iomega",
+ },
+ {
+ USB_VENDOR_ATREND,
+ "A-Trend Technology",
+ },
+ {
+ USB_VENDOR_AID,
+ "Advanced Input Devices",
+ },
+ {
+ USB_VENDOR_LACIE,
+ "LaCie",
+ },
+ {
+ USB_VENDOR_THRUSTMASTER,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_OMNIVISION,
+ "OmniVision",
+ },
+ {
+ USB_VENDOR_INSYSTEM,
+ "In-System Design",
+ },
+ {
+ USB_VENDOR_APPLE,
+ "Apple Computer",
+ },
+ {
+ USB_VENDOR_YCCABLE,
+ "Y.C. Cable",
+ },
+ {
+ USB_VENDOR_JINGMOLD,
+ "Jing Mold",
+ },
+ {
+ USB_VENDOR_DIGI,
+ "Digi International",
+ },
+ {
+ USB_VENDOR_QUALCOMM,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_QTRONIX,
+ "Qtronix",
+ },
+ {
+ USB_VENDOR_RICOH,
+ "Ricoh",
+ },
+ {
+ USB_VENDOR_ELSA,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_BRAINBOXES,
+ "Brainboxes",
+ },
+ {
+ USB_VENDOR_ULTIMA,
+ "Ultima",
+ },
+ {
+ USB_VENDOR_AXIOHM,
+ "Axiohm Transaction Solutions",
+ },
+ {
+ USB_VENDOR_MICROTEK,
+ "Microtek",
+ },
+ {
+ USB_VENDOR_SUNTAC,
+ "SUN Corporation",
+ },
+ {
+ USB_VENDOR_LEXAR,
+ "Lexar Media",
+ },
+ {
+ USB_VENDOR_ADDTRON,
+ "Addtron",
+ },
+ {
+ USB_VENDOR_SYMBOL,
+ "Symbol Technologies",
+ },
+ {
+ USB_VENDOR_GENESYS,
+ "Genesys Logic",
+ },
+ {
+ USB_VENDOR_FUJI,
+ "Fuji Electric",
+ },
+ {
+ USB_VENDOR_KEITHLEY,
+ "Keithley Instruments",
+ },
+ {
+ USB_VENDOR_EIZONANAO,
+ "EIZO Nanao",
+ },
+ {
+ USB_VENDOR_KLSI,
+ "Kawasaki LSI",
+ },
+ {
+ USB_VENDOR_FFC,
+ "FFC",
+ },
+ {
+ USB_VENDOR_ANKO,
+ "Anko Electronic",
+ },
+ {
+ USB_VENDOR_PIENGINEERING,
+ "P.I. Engineering",
+ },
+ {
+ USB_VENDOR_AOC,
+ "AOC International",
+ },
+ {
+ USB_VENDOR_CHIC,
+ "Chic Technology",
+ },
+ {
+ USB_VENDOR_BARCO,
+ "Barco Display Systems",
+ },
+ {
+ USB_VENDOR_BRIDGE,
+ "Bridge Information",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR,
+ "Solid Year",
+ },
+ {
+ USB_VENDOR_BIORAD,
+ "Bio-Rad Laboratories",
+ },
+ {
+ USB_VENDOR_MACALLY,
+ "Macally",
+ },
+ {
+ USB_VENDOR_ACTLABS,
+ "Act Labs",
+ },
+ {
+ USB_VENDOR_ALARIS,
+ "Alaris",
+ },
+ {
+ USB_VENDOR_APEX,
+ "Apex",
+ },
+ {
+ USB_VENDOR_VIVITAR,
+ "Vivitar",
+ },
+ {
+ USB_VENDOR_GUNZE,
+ "Gunze Electronics USA",
+ },
+ {
+ USB_VENDOR_AVISION,
+ "Avision",
+ },
+ {
+ USB_VENDOR_TEAC,
+ "TEAC",
+ },
+ {
+ USB_VENDOR_SGI,
+ "Silicon Graphics",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY,
+ "Sanwa Supply",
+ },
+ {
+ USB_VENDOR_MUSTEK2,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_LINKSYS,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_ACERSA,
+ "Acer Semiconductor America",
+ },
+ {
+ USB_VENDOR_SIGMATEL,
+ "Sigmatel",
+ },
+ {
+ USB_VENDOR_DRAYTEK,
+ "DrayTek",
+ },
+ {
+ USB_VENDOR_AIWA,
+ "Aiwa",
+ },
+ {
+ USB_VENDOR_ACARD,
+ "ACARD Technology",
+ },
+ {
+ USB_VENDOR_PROLIFIC,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_SIEMENS,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC,
+ "Avance Logic",
+ },
+ {
+ USB_VENDOR_SIEMENS2,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_MINOLTA,
+ "Minolta",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS,
+ "CH Products",
+ },
+ {
+ USB_VENDOR_HAGIWARA,
+ "Hagiwara Sys-Com",
+ },
+ {
+ USB_VENDOR_CTX,
+ "Chuntex",
+ },
+ {
+ USB_VENDOR_ASKEY,
+ "Askey Computer",
+ },
+ {
+ USB_VENDOR_SAITEK,
+ "Saitek",
+ },
+ {
+ USB_VENDOR_ALCATELT,
+ "Alcatel Telecom",
+ },
+ {
+ USB_VENDOR_AGFA,
+ "AGFA-Gevaert",
+ },
+ {
+ USB_VENDOR_ASIAMD,
+ "Asia Microelectronic Development",
+ },
+ {
+ USB_VENDOR_PHIDGETS,
+ "Phidgets",
+ },
+ {
+ USB_VENDOR_BIZLINK,
+ "Bizlink International",
+ },
+ {
+ USB_VENDOR_KEYSPAN,
+ "Keyspan",
+ },
+ {
+ USB_VENDOR_AASHIMA,
+ "Aashima Technology",
+ },
+ {
+ USB_VENDOR_LIEBERT,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_MULTITECH,
+ "MultiTech",
+ },
+ {
+ USB_VENDOR_ADS,
+ "ADS Technologies",
+ },
+ {
+ USB_VENDOR_ALCATELM,
+ "Alcatel Microelectronics",
+ },
+ {
+ USB_VENDOR_SIRIUS,
+ "Sirius Technologies",
+ },
+ {
+ USB_VENDOR_GUILLEMOT,
+ "Guillemot",
+ },
+ {
+ USB_VENDOR_BOSTON,
+ "Boston Acoustics",
+ },
+ {
+ USB_VENDOR_SMC,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_PUTERCOM,
+ "Putercom",
+ },
+ {
+ USB_VENDOR_MCT,
+ "MCT",
+ },
+ {
+ USB_VENDOR_IMATION,
+ "Imation",
+ },
+ {
+ USB_VENDOR_DOMAIN,
+ "Domain Technologies, Inc.",
+ },
+ {
+ USB_VENDOR_SUSTEEN,
+ "Susteen",
+ },
+ {
+ USB_VENDOR_EICON,
+ "Eicon Networks",
+ },
+ {
+ USB_VENDOR_STOLLMANN,
+ "Stollmann",
+ },
+ {
+ USB_VENDOR_SYNTECH,
+ "Syntech Information",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM,
+ "Digital Stream",
+ },
+ {
+ USB_VENDOR_AUREAL,
+ "Aureal Semiconductor",
+ },
+ {
+ USB_VENDOR_IDOWELL,
+ "iDowell",
+ },
+ {
+ USB_VENDOR_MIDIMAN,
+ "Midiman",
+ },
+ {
+ USB_VENDOR_CYBERPOWER,
+ "CyberPower",
+ },
+ {
+ USB_VENDOR_SURECOM,
+ "Surecom Technology",
+ },
+ {
+ USB_VENDOR_LINKSYS2,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_GRIFFIN,
+ "Griffin Technology",
+ },
+ {
+ USB_VENDOR_SANDISK,
+ "SanDisk",
+ },
+ {
+ USB_VENDOR_JENOPTIK,
+ "Jenoptik",
+ },
+ {
+ USB_VENDOR_LOGITEC,
+ "Logitec",
+ },
+ {
+ USB_VENDOR_NOKIA,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_BRIMAX,
+ "Brimax",
+ },
+ {
+ USB_VENDOR_AXIS,
+ "Axis Communications",
+ },
+ {
+ USB_VENDOR_ABL,
+ "ABL Electronics",
+ },
+ {
+ USB_VENDOR_SAGEM,
+ "Sagem",
+ },
+ {
+ USB_VENDOR_SUNCOMM,
+ "Sun Communications",
+ },
+ {
+ USB_VENDOR_ALFADATA,
+ "Alfadata Computer",
+ },
+ {
+ USB_VENDOR_NATIONALTECH,
+ "National Technical Systems",
+ },
+ {
+ USB_VENDOR_ONNTO,
+ "Onnto",
+ },
+ {
+ USB_VENDOR_BE,
+ "Be",
+ },
+ {
+ USB_VENDOR_ADMTEK,
+ "ADMtek",
+ },
+ {
+ USB_VENDOR_COREGA,
+ "Corega",
+ },
+ {
+ USB_VENDOR_FREECOM,
+ "Freecom",
+ },
+ {
+ USB_VENDOR_MICROTECH,
+ "Microtech",
+ },
+ {
+ USB_VENDOR_MOTOROLA3,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_OLYMPUS,
+ "Olympus",
+ },
+ {
+ USB_VENDOR_ABOCOM,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN,
+ "Keisokugiken",
+ },
+ {
+ USB_VENDOR_ONSPEC,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_APG,
+ "APG Cash Drawer",
+ },
+ {
+ USB_VENDOR_BUG,
+ "B.U.G.",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN,
+ "Allied Telesyn International",
+ },
+ {
+ USB_VENDOR_AVERMEDIA,
+ "AVerMedia Technologies",
+ },
+ {
+ USB_VENDOR_SIIG,
+ "SIIG",
+ },
+ {
+ USB_VENDOR_CASIO,
+ "CASIO",
+ },
+ {
+ USB_VENDOR_DLINK2,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_APTIO,
+ "Aptio Products",
+ },
+ {
+ USB_VENDOR_ARASAN,
+ "Arasan Chip Systems",
+ },
+ {
+ USB_VENDOR_ALLIEDCABLE,
+ "Allied Cable",
+ },
+ {
+ USB_VENDOR_STSN,
+ "STSN",
+ },
+ {
+ USB_VENDOR_BEWAN,
+ "Bewan",
+ },
+ {
+ USB_VENDOR_ZOOM,
+ "Zoom Telephonics",
+ },
+ {
+ USB_VENDOR_BROADLOGIC,
+ "BroadLogic",
+ },
+ {
+ USB_VENDOR_HANDSPRING,
+ "Handspring",
+ },
+ {
+ USB_VENDOR_PALM,
+ "Palm Computing",
+ },
+ {
+ USB_VENDOR_SOURCENEXT,
+ "SOURCENEXT",
+ },
+ {
+ USB_VENDOR_ACTIONSTAR,
+ "Action Star Enterprise",
+ },
+ {
+ USB_VENDOR_ACCTON,
+ "Accton Technology",
+ },
+ {
+ USB_VENDOR_DIAMOND,
+ "Diamond",
+ },
+ {
+ USB_VENDOR_NETGEAR,
+ "BayNETGEAR",
+ },
+ {
+ USB_VENDOR_TOPRE,
+ "Topre Corporation",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE,
+ "ActiveWire",
+ },
+ {
+ USB_VENDOR_BBELECTR,
+ "B&B Electronics",
+ },
+ {
+ USB_VENDOR_PORTGEAR,
+ "PortGear",
+ },
+ {
+ USB_VENDOR_NETGEAR2,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS,
+ "System Talks",
+ },
+ {
+ USB_VENDOR_METRICOM,
+ "Metricom",
+ },
+ {
+ USB_VENDOR_ADESSOKBTEK,
+ "ADESSO/Kbtek America",
+ },
+ {
+ USB_VENDOR_JATON,
+ "Jaton",
+ },
+ {
+ USB_VENDOR_APT,
+ "APT Technologies",
+ },
+ {
+ USB_VENDOR_BOCARESEARCH,
+ "Boca Research",
+ },
+ {
+ USB_VENDOR_ANDREA,
+ "Andrea Electronics",
+ },
+ {
+ USB_VENDOR_BURRBROWN,
+ "Burr-Brown Japan",
+ },
+ {
+ USB_VENDOR_2WIRE,
+ "2Wire",
+ },
+ {
+ USB_VENDOR_AIPTEK,
+ "AIPTEK International",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES,
+ "SmartBridges",
+ },
+ {
+ USB_VENDOR_BILLIONTON,
+ "Billionton Systems",
+ },
+ {
+ USB_VENDOR_GEMPLUS,
+ "GEMPLUS",
+ },
+ {
+ USB_VENDOR_EXTENDED,
+ "Extended Systems",
+ },
+ {
+ USB_VENDOR_MSYSTEMS,
+ "M-Systems",
+ },
+ {
+ USB_VENDOR_DIGIANSWER,
+ "Digianswer",
+ },
+ {
+ USB_VENDOR_AUTHENTEC,
+ "AuthenTec",
+ },
+ {
+ USB_VENDOR_SIEMENS4,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA,
+ "Audio-Technica",
+ },
+ {
+ USB_VENDOR_TRUMPION,
+ "Trumpion Microelectronics",
+ },
+ {
+ USB_VENDOR_ALATION,
+ "Alation Systems",
+ },
+ {
+ USB_VENDOR_GLOBESPAN,
+ "Globespan",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA,
+ "Concord Camera",
+ },
+ {
+ USB_VENDOR_GARMIN,
+ "Garmin International",
+ },
+ {
+ USB_VENDOR_GOHUBS,
+ "GoHubs",
+ },
+ {
+ USB_VENDOR_BIOMETRIC,
+ "American Biometric Company",
+ },
+ {
+ USB_VENDOR_TOSHIBA,
+ "Toshiba Corp",
+ },
+ {
+ USB_VENDOR_INTREPIDCS,
+ "Intrepid",
+ },
+ {
+ USB_VENDOR_YANO,
+ "Yano",
+ },
+ {
+ USB_VENDOR_KINGSTON,
+ "Kingston Technology",
+ },
+ {
+ USB_VENDOR_BLUEWATER,
+ "BlueWater Systems",
+ },
+ {
+ USB_VENDOR_AGILENT,
+ "Agilent Technologies",
+ },
+ {
+ USB_VENDOR_GUDE,
+ "Gude ADS",
+ },
+ {
+ USB_VENDOR_PORTSMITH,
+ "Portsmith",
+ },
+ {
+ USB_VENDOR_ACERW,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ADIRONDACK,
+ "Adirondack Wire & Cable",
+ },
+ {
+ USB_VENDOR_BECKHOFF,
+ "Beckhoff",
+ },
+ {
+ USB_VENDOR_MINDSATWORK,
+ "Minds At Work",
+ },
+ {
+ USB_VENDOR_INTERSIL,
+ "Intersil",
+ },
+ {
+ USB_VENDOR_ALTIUS,
+ "Altius Solutions",
+ },
+ {
+ USB_VENDOR_ARRIS,
+ "Arris Interactive",
+ },
+ {
+ USB_VENDOR_ACTIVCARD,
+ "ACTIVCARD",
+ },
+ {
+ USB_VENDOR_ACTISYS,
+ "ACTiSYS",
+ },
+ {
+ USB_VENDOR_NOVATEL1,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_AFOURTECH,
+ "A-FOUR TECH",
+ },
+ {
+ USB_VENDOR_AIMEX,
+ "AIMEX",
+ },
+ {
+ USB_VENDOR_ADDONICS,
+ "Addonics Technologies",
+ },
+ {
+ USB_VENDOR_AKAI,
+ "AKAI professional M.I.",
+ },
+ {
+ USB_VENDOR_ARESCOM,
+ "ARESCOM",
+ },
+ {
+ USB_VENDOR_BAY,
+ "Bay Associates",
+ },
+ {
+ USB_VENDOR_ALTERA,
+ "Altera",
+ },
+ {
+ USB_VENDOR_CSR,
+ "Cambridge Silicon Radio",
+ },
+ {
+ USB_VENDOR_TREK,
+ "Trek Technology",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL,
+ "Asahi Optical",
+ },
+ {
+ USB_VENDOR_BOCASYSTEMS,
+ "Boca Systems",
+ },
+ {
+ USB_VENDOR_SHANTOU,
+ "ShanTou",
+ },
+ {
+ USB_VENDOR_HIROSE,
+ "Hirose",
+ },
+ {
+ USB_VENDOR_BROADCOM,
+ "Broadcom",
+ },
+ {
+ USB_VENDOR_GREENHOUSE,
+ "GREENHOUSE",
+ },
+ {
+ USB_VENDOR_GEOCAST,
+ "Geocast Network Systems",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY,
+ "Dream Cheeky",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE,
+ "id Quantique",
+ },
+ {
+ USB_VENDOR_IDTECH,
+ "ID TECH",
+ },
+ {
+ USB_VENDOR_ZYDAS,
+ "ZyDAS Technology",
+ },
+ {
+ USB_VENDOR_CHENSOURCE,
+ "Chen-Source",
+ },
+ {
+ USB_VENDOR_NEODIO,
+ "Neodio",
+ },
+ {
+ USB_VENDOR_OPTION,
+ "Option",
+ },
+ {
+ USB_VENDOR_ASUS,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_TODOS,
+ "Todos Data System",
+ },
+ {
+ USB_VENDOR_OCT,
+ "Omnidirectional Control Technology",
+ },
+ {
+ USB_VENDOR_TEKRAM,
+ "Tekram Technology",
+ },
+ {
+ USB_VENDOR_HAL,
+ "HAL Corporation",
+ },
+ {
+ USB_VENDOR_NEC2,
+ "NEC",
+ },
+ {
+ USB_VENDOR_ATI2,
+ "ATI",
+ },
+ {
+ USB_VENDOR_KURUSUGAWA,
+ "Kurusugawa Electronics",
+ },
+ {
+ USB_VENDOR_SMART,
+ "Smart Technologies",
+ },
+ {
+ USB_VENDOR_ASIX,
+ "ASIX Electronics",
+ },
+ {
+ USB_VENDOR_O2MICRO,
+ "O2 Micro",
+ },
+ {
+ USB_VENDOR_SACOM,
+ "System SACOM Industry Co.,Ltd",
+ },
+ {
+ USB_VENDOR_USR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_AMBIT,
+ "Ambit Microsystems",
+ },
+ {
+ USB_VENDOR_HTC,
+ "HTC",
+ },
+ {
+ USB_VENDOR_REALTEK,
+ "Realtek",
+ },
+ {
+ USB_VENDOR_MEI,
+ "MEI",
+ },
+ {
+ USB_VENDOR_ADDONICS2,
+ "Addonics Technology",
+ },
+ {
+ USB_VENDOR_FSC,
+ "Fujitsu Siemens Computers",
+ },
+ {
+ USB_VENDOR_AGATE,
+ "Agate Technologies",
+ },
+ {
+ USB_VENDOR_DMI,
+ "DMI",
+ },
+ {
+ USB_VENDOR_ICOM,
+ "Icom",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS,
+ "GN Otometrics",
+ },
+ {
+ USB_VENDOR_MICRODIA,
+ "Microdia / Sonix Technology Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SEALEVEL,
+ "Sealevel System",
+ },
+ {
+ USB_VENDOR_JETI,
+ "JETI",
+ },
+ {
+ USB_VENDOR_EASYDISK,
+ "EasyDisk",
+ },
+ {
+ USB_VENDOR_ELEKTOR,
+ "Elektor Electronics",
+ },
+ {
+ USB_VENDOR_KYOCERA2,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_TERRATEC,
+ "TerraTec Electronic GmbH",
+ },
+ {
+ USB_VENDOR_ZCOM,
+ "Z-Com",
+ },
+ {
+ USB_VENDOR_ATHEROS2,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_POSIFLEX,
+ "Posiflex Technologies",
+ },
+ {
+ USB_VENDOR_TANGTOP,
+ "Tangtop",
+ },
+ {
+ USB_VENDOR_KOBIL,
+ "Kobil Systems",
+ },
+ {
+ USB_VENDOR_SMC3,
+ "SMC",
+ },
+ {
+ USB_VENDOR_PEN,
+ "Pen Drive",
+ },
+ {
+ USB_VENDOR_ABC,
+ "ABC",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_MSI,
+ "Micro Star International",
+ },
+ {
+ USB_VENDOR_ELCON,
+ "ELCON Systemtechnik",
+ },
+ {
+ USB_VENDOR_UNKNOWN5,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_SITECOMEU,
+ "Sitecom Europe",
+ },
+ {
+ USB_VENDOR_MOBILEACTION,
+ "Mobile Action",
+ },
+ {
+ USB_VENDOR_AMIGO,
+ "Amigo Technology",
+ },
+ {
+ USB_VENDOR_VMWARE,
+ "VMware",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON,
+ "Speed Dragon Multimedia",
+ },
+ {
+ USB_VENDOR_CTC,
+ "CONWISE Technology",
+ },
+ {
+ USB_VENDOR_HAWKING,
+ "Hawking",
+ },
+ {
+ USB_VENDOR_FOSSIL,
+ "Fossil",
+ },
+ {
+ USB_VENDOR_GMATE,
+ "G.Mate",
+ },
+ {
+ USB_VENDOR_MEDIATEK,
+ "MediaTek Inc.",
+ },
+ {
+ USB_VENDOR_OTI,
+ "Ours Technology",
+ },
+ {
+ USB_VENDOR_PILOTECH,
+ "Pilotech",
+ },
+ {
+ USB_VENDOR_NOVATECH,
+ "Nova Tech",
+ },
+ {
+ USB_VENDOR_ITEGNO,
+ "iTegno",
+ },
+ {
+ USB_VENDOR_NORITAKE,
+ "Noritake itron Corp",
+ },
+ {
+ USB_VENDOR_EGALAX,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_XIRING,
+ "XIRING",
+ },
+ {
+ USB_VENDOR_AIRPRIME,
+ "Airprime",
+ },
+ {
+ USB_VENDOR_VTECH,
+ "VTech",
+ },
+ {
+ USB_VENDOR_FALCOM,
+ "Falcom Wireless Communications",
+ },
+ {
+ USB_VENDOR_RIM,
+ "Research In Motion",
+ },
+ {
+ USB_VENDOR_DYNASTREAM,
+ "Dynastream Innovations",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD,
+ "Larsen and Brusgaard",
+ },
+ {
+ USB_VENDOR_OREGONSCI,
+ "Oregon Scientific",
+ },
+ {
+ USB_VENDOR_UNKNOWN4,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_DVICO,
+ "DViCO",
+ },
+ {
+ USB_VENDOR_QUALCOMM2,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_MOTOROLA4,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_HP3,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_THURLBY,
+ "Thurlby Thandar Instruments",
+ },
+ {
+ USB_VENDOR_GIGABYTE,
+ "GIGABYTE",
+ },
+ {
+ USB_VENDOR_YUBICO,
+ "Yubico.com",
+ },
+ {
+ USB_VENDOR_MOTOROLA,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_CCYU,
+ "CCYU Technology",
+ },
+ {
+ USB_VENDOR_HYUNDAI,
+ "Hyundai",
+ },
+ {
+ USB_VENDOR_GCTSEMICON,
+ "GCT Semiconductor",
+ },
+ {
+ USB_VENDOR_SILABS2,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_USI,
+ "USI",
+ },
+ {
+ USB_VENDOR_LIEBERT2,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_PLX,
+ "PLX",
+ },
+ {
+ USB_VENDOR_ASANTE,
+ "Asante",
+ },
+ {
+ USB_VENDOR_SILABS,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS3,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS4,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_VELLEMAN,
+ "Velleman",
+ },
+ {
+ USB_VENDOR_MOXA,
+ "Moxa Technologies",
+ },
+ {
+ USB_VENDOR_ANALOG,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_TENX,
+ "Ten X Technology, Inc.",
+ },
+ {
+ USB_VENDOR_ISSC,
+ "Integrated System Solution Corp.",
+ },
+ {
+ USB_VENDOR_JRC,
+ "Japan Radio Company",
+ },
+ {
+ USB_VENDOR_SPHAIRON,
+ "Sphairon Access Systems",
+ },
+ {
+ USB_VENDOR_DELORME,
+ "DeLorme",
+ },
+ {
+ USB_VENDOR_SERVERWORKS,
+ "ServerWorks",
+ },
+ {
+ USB_VENDOR_ACERCM,
+ "Acer Communications & Multimedia",
+ },
+ {
+ USB_VENDOR_SIERRA,
+ "Sierra Wireless",
+ },
+ {
+ USB_VENDOR_SIEMENS3,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_ALCATEL,
+ "Alcatel",
+ },
+ {
+ USB_VENDOR_INTERBIO,
+ "InterBiometrics",
+ },
+ {
+ USB_VENDOR_UNKNOWN3,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_TSUNAMI,
+ "Tsunami",
+ },
+ {
+ USB_VENDOR_PHEENET,
+ "Pheenet",
+ },
+ {
+ USB_VENDOR_RAPTORGAMING,
+ "Raptor Gaming",
+ },
+ {
+ USB_VENDOR_TWINMOS,
+ "TwinMOS",
+ },
+ {
+ USB_VENDOR_TENDA,
+ "Tenda",
+ },
+ {
+ USB_VENDOR_TESTO,
+ "Testo AG",
+ },
+ {
+ USB_VENDOR_CREATIVE2,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_BELKIN2,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_CYBERTAN,
+ "CyberTAN Technology",
+ },
+ {
+ USB_VENDOR_HUAWEI,
+ "HUAWEI Technologies",
+ },
+ {
+ USB_VENDOR_ARANEUS,
+ "Araneus Information Systems",
+ },
+ {
+ USB_VENDOR_TAPWAVE,
+ "Tapwave",
+ },
+ {
+ USB_VENDOR_AINCOMM,
+ "Aincomm",
+ },
+ {
+ USB_VENDOR_MOBILITY,
+ "Mobility",
+ },
+ {
+ USB_VENDOR_DICKSMITH,
+ "Dick Smith Electronics",
+ },
+ {
+ USB_VENDOR_NETGEAR3,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_VALIDITY,
+ "Validity Sensors",
+ },
+ {
+ USB_VENDOR_BALTECH,
+ "Baltech",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_SHARK,
+ "Shark",
+ },
+ {
+ USB_VENDOR_AZUREWAVE,
+ "AsureWave",
+ },
+ {
+ USB_VENDOR_NOVATEL,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB,
+ "Wistron NeWeb",
+ },
+ {
+ USB_VENDOR_RADIOSHACK,
+ "Radio Shack",
+ },
+ {
+ USB_VENDOR_OPENMOKO,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM,
+ "Huawei 3Com",
+ },
+ {
+ USB_VENDOR_ABOCOM2,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_SILICOM,
+ "Silicom",
+ },
+ {
+ USB_VENDOR_RALINK,
+ "Ralink Technology",
+ },
+ {
+ USB_VENDOR_STARTECH,
+ "StarTech.com",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_SUPERTOP,
+ "SuperTop",
+ },
+ {
+ USB_VENDOR_PLANEX3,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS,
+ "Silicon Portals",
+ },
+ {
+ USB_VENDOR_UBLOX,
+ "U-blox",
+ },
+ {
+ USB_VENDOR_OWEN,
+ "Owen",
+ },
+ {
+ USB_VENDOR_OQO,
+ "OQO",
+ },
+ {
+ USB_VENDOR_UMEDIA,
+ "U-MEDIA Communications",
+ },
+ {
+ USB_VENDOR_FIBERLINE,
+ "Fiberline",
+ },
+ {
+ USB_VENDOR_SPARKLAN,
+ "SparkLAN",
+ },
+ {
+ USB_VENDOR_OLIMEX,
+ "Olimex",
+ },
+ {
+ USB_VENDOR_AMIT2,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_TRUST,
+ "Trust",
+ },
+ {
+ USB_VENDOR_SOHOWARE,
+ "SOHOware",
+ },
+ {
+ USB_VENDOR_UMAX,
+ "UMAX Data Systems",
+ },
+ {
+ USB_VENDOR_INSIDEOUT,
+ "Inside Out Networks",
+ },
+ {
+ USB_VENDOR_GOODWAY,
+ "Good Way Technology",
+ },
+ {
+ USB_VENDOR_ENTREGA,
+ "Entrega",
+ },
+ {
+ USB_VENDOR_ACTIONTEC,
+ "Actiontec Electronics",
+ },
+ {
+ USB_VENDOR_CLIPSAL,
+ "Clipsal",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_ATHEROS,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_GIGASET,
+ "Gigaset",
+ },
+ {
+ USB_VENDOR_GLOBALSUN,
+ "Global Sun Technology",
+ },
+ {
+ USB_VENDOR_VOTI,
+ "Van Ooijen Technische Informatica",
+ },
+ {
+ USB_VENDOR_ANYDATA,
+ "AnyDATA Inc.",
+ },
+ {
+ USB_VENDOR_JABLOTRON,
+ "Jablotron",
+ },
+ {
+ USB_VENDOR_CMOTECH,
+ "CMOTECH",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS,
+ "WIENER Plein & Baus",
+ },
+ {
+ USB_VENDOR_AXESSTEL,
+ "Axesstel",
+ },
+ {
+ USB_VENDOR_LINKSYS4,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_SENAO,
+ "Senao",
+ },
+ {
+ USB_VENDOR_ASUS2,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX,
+ "Strawberry linux Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SWEEX2,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_MECANIQUE,
+ "Mecanique",
+ },
+ {
+ USB_VENDOR_KAMSTRUP,
+ "Kamstrup A/S",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK,
+ "DisplayLink",
+ },
+ {
+ USB_VENDOR_LENOVO,
+ "Lenovo",
+ },
+ {
+ USB_VENDOR_WAVESENSE,
+ "WaveSense",
+ },
+ {
+ USB_VENDOR_VAISALA,
+ "VAISALA",
+ },
+ {
+ USB_VENDOR_AMIT,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_GOOGLE,
+ "Google",
+ },
+ {
+ USB_VENDOR_QCOM,
+ "Qcom",
+ },
+ {
+ USB_VENDOR_ELV,
+ "ELV",
+ },
+ {
+ USB_VENDOR_LINKSYS3,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_AVAGO,
+ "Avago",
+ },
+ {
+ USB_VENDOR_MEINBERG,
+ "Meinberg Funkuhren",
+ },
+ {
+ USB_VENDOR_ZTE,
+ "ZTE Inc.",
+ },
+ {
+ USB_VENDOR_QUANTA,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_TERMINUS,
+ "Terminus Technology",
+ },
+ {
+ USB_VENDOR_ABBOTT,
+ "Abbott Labs",
+ },
+ {
+ USB_VENDOR_BAYER,
+ "Bayer Health Care",
+ },
+ {
+ USB_VENDOR_WCH2,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_SEL,
+ "Schweitzer Engineering Laboratories",
+ },
+ {
+ USB_VENDOR_CORSAIR,
+ "Corsair",
+ },
+ {
+ USB_VENDOR_MATRIXORB,
+ "Matrix Orbital",
+ },
+ {
+ USB_VENDOR_TORADEX,
+ "Toradex inc.",
+ },
+ {
+ USB_VENDOR_FUSHICAI,
+ "Fushicai",
+ },
+ {
+ USB_VENDOR_OVISLINK,
+ "OvisLink",
+ },
+ {
+ USB_VENDOR_TML,
+ "The Mobility Lab",
+ },
+ {
+ USB_VENDOR_SILABS5,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_TCTMOBILE,
+ "TCT Mobile",
+ },
+ {
+ USB_VENDOR_MDS,
+ "MDS",
+ },
+ {
+ USB_VENDOR_ALTI2,
+ "Alti-2",
+ },
+ {
+ USB_VENDOR_SUNPLUS,
+ "Sunplus",
+ },
+ {
+ USB_VENDOR_WAGO,
+ "WAGO Kontakttechnik",
+ },
+ {
+ USB_VENDOR_LONGCHEER,
+ "Longcheer Technology",
+ },
+ {
+ USB_VENDOR_DRESDENELEC,
+ "Dresden Elektronic",
+ },
+ {
+ USB_VENDOR_DREAMLINK,
+ "Dream Link",
+ },
+ {
+ USB_VENDOR_PEGATRON,
+ "Pegatron",
+ },
+ {
+ USB_VENDOR_OPENMOKO2,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_SELUXIT,
+ "Seluxit",
+ },
+ {
+ USB_VENDOR_METAGEEK,
+ "MetaGeek",
+ },
+ {
+ USB_VENDOR_SIMCOM,
+ "SIMCom Wireless Solutions Co., Ltd.",
+ },
+ {
+ USB_VENDOR_FESTO,
+ "Festo",
+ },
+ {
+ USB_VENDOR_MODACOM,
+ "Modacom",
+ },
+ {
+ USB_VENDOR_AIRTIES,
+ "AirTies",
+ },
+ {
+ USB_VENDOR_LAKESHORE,
+ "Lake Shore",
+ },
+ {
+ USB_VENDOR_VERTEX,
+ "Vertex Wireless Co., Ltd.",
+ },
+ {
+ USB_VENDOR_DLINK,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_PLANEX2,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_ENCORE,
+ "Encore",
+ },
+ {
+ USB_VENDOR_PARA,
+ "PARA Industrial",
+ },
+ {
+ USB_VENDOR_TRENDNET,
+ "TRENDnet",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS,
+ "RT Systems",
+ },
+ {
+ USB_VENDOR_DLINK3,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_VIALABS,
+ "VIA Labs",
+ },
+ {
+ USB_VENDOR_MOTOROLA2,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_ARDUINO,
+ "Arduino SA",
+ },
+ {
+ USB_VENDOR_TPLINK,
+ "TP-Link",
+ },
+ {
+ USB_VENDOR_WMR,
+ "West Mountain Radio",
+ },
+ {
+ USB_VENDOR_TRIPPLITE,
+ "Tripp-Lite",
+ },
+ {
+ USB_VENDOR_ARUBA,
+ "Aruba",
+ },
+ {
+ USB_VENDOR_XIAOMI,
+ "Xiaomi",
+ },
+ {
+ USB_VENDOR_NHJ,
+ "NHJ",
+ },
+ {
+ USB_VENDOR_ASUSTEK,
+ "ASUSTeK Computer",
+ },
+ {
+ USB_VENDOR_PLANEX,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS,
+ "Link Instruments",
+ },
+ {
+ USB_VENDOR_AEI,
+ "AEI",
+ },
+ {
+ USB_VENDOR_PQI,
+ "PQI",
+ },
+ {
+ USB_VENDOR_DAISY,
+ "Daisy Technology",
+ },
+ {
+ USB_VENDOR_NI,
+ "National Instruments",
+ },
+ {
+ USB_VENDOR_MICRONET,
+ "Micronet Communications",
+ },
+ {
+ USB_VENDOR_IODATA2,
+ "I-O Data",
+ },
+ {
+ USB_VENDOR_IRIVER,
+ "iRiver",
+ },
+ {
+ USB_VENDOR_DELL,
+ "Dell",
+ },
+ {
+ USB_VENDOR_WCH,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_ACEECA,
+ "Aceeca",
+ },
+ {
+ USB_VENDOR_FEIXUN,
+ "FeiXun Communication",
+ },
+ {
+ USB_VENDOR_NETWEEN,
+ "NetweeN",
+ },
+ {
+ USB_VENDOR_PAPOUCH,
+ "Papouch s.r.o.",
+ },
+ {
+ USB_VENDOR_AVERATEC,
+ "Averatec",
+ },
+ {
+ USB_VENDOR_SWEEX,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_PROLIFIC2,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_ONSPEC2,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_ACERLABS2,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ZINWELL,
+ "Zinwell",
+ },
+ {
+ USB_VENDOR_SITECOM,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_ARKMICRO,
+ "Arkmicro",
+ },
+ {
+ USB_VENDOR_3COM2,
+ "3Com",
+ },
+ {
+ USB_VENDOR_EDIMAX,
+ "EDIMAX",
+ },
+ {
+ USB_VENDOR_INTEL,
+ "Intel",
+ },
+ {
+ USB_VENDOR_INTEL2,
+ "Intel",
+ },
+ {
+ USB_VENDOR_ALLWIN,
+ "ALLWIN Tech",
+ },
+ {
+ USB_VENDOR_SITECOM2,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_MOSCHIP,
+ "MosChip",
+ },
+ {
+ USB_VENDOR_NETGEAR4,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_MARVELL,
+ "Marvell",
+ },
+ {
+ USB_VENDOR_3COM3,
+ "3Com",
+ },
+ {
+ USB_VENDOR_CACE,
+ "CACE Technologies",
+ },
+ {
+ USB_VENDOR_COMPARE,
+ "Compare",
+ },
+ {
+ USB_VENDOR_DATAAPEX,
+ "DataApex",
+ },
+ {
+ USB_VENDOR_EVOLUTION,
+ "Evolution Robotics",
+ },
+ {
+ USB_VENDOR_EMPIA,
+ "eMPIA Technology",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test110.right-P.txt b/test/test110.right-P.txt
new file mode 100644
index 000000000000..46844afad663
--- /dev/null
+++ b/test/test110.right-P.txt
@@ -0,0 +1,14201 @@
+/* $OpenBSD$ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+/*
+ * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Descriptions of known vendors and devices ("products").
+ */
+struct usb_known_vendor {
+ u_int16_t vendor;
+ char *vendorname;
+};
+
+struct usb_known_product {
+ u_int16_t vendor;
+ u_int16_t product;
+ char *productname;
+};
+
+const struct usb_known_product usb_known_products[] = {
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_HOMECONN,
+ "HomeConnect",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CREB96,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C19250,
+ "3C19250 Ethernet",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3CRSHEW696,
+ "3CRSHEW696",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460,
+ "HomeConnect 3C460",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460B,
+ "HomeConnect 3C460B",
+ },
+ {
+ USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075,
+ "3CRUSB10075",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COM3, USB_PRODUCT_3COM3_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_OFFICECONN,
+ "3Com OfficeConnect Analog Modem",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USRISDN,
+ "3Com U.S. Robotics Pro ISDN TA",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_HOMECONN,
+ "3Com HomeConnect",
+ },
+ {
+ USB_VENDOR_3COMUSR, USB_PRODUCT_3COMUSR_USR56K,
+ "U.S.Robotics 56000",
+ },
+ {
+ USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG,
+ "Stereo Plug Cable",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1,
+ "XX1",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2,
+ "XX2",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_URE450,
+ "URE450 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000,
+ "UFE1000 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4,
+ "XX4",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5,
+ "XX5",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6,
+ "XX6",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7,
+ "XX7",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_LCS8138TX,
+ "LCS-8138TX",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8,
+ "XX8",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9,
+ "XX9",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UF200,
+ "UF200 Ethernet",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54,
+ "WL54",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10,
+ "XX10",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_BWU613,
+ "BWU613",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_HWU54DM,
+ "HWU54DM",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WUG2700,
+ "WUG2700",
+ },
+ {
+ USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC,
+ "USB320-EC Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_2664W,
+ "2664W",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_111,
+ "T-Sinus 111 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG,
+ "SMCWUSB-G",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBTG2_NF,
+ "SMCWUSBT-G2",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001,
+ "SpeedStream Ethernet",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN4501H_LF_IR,
+ "WN4501H-LF-IR",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WUS201,
+ "WUS-201",
+ },
+ {
+ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_WN7512,
+ "WN7512",
+ },
+ {
+ USB_VENDOR_ACEECA, USB_PRODUCT_ACEECA_MEZ1000,
+ "MEZ1000 RDA",
+ },
+ {
+ USB_VENDOR_ACERCM, USB_PRODUCT_ACERCM_EP1427X2,
+ "EP-1427X-2 Ethernet",
+ },
+ {
+ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632,
+ "USB 2.0 Data Link",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_C310U,
+ "Acerscan C310U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_320U,
+ "Acerscan 320U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_640U,
+ "Acerscan 640U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ACERSCAN_620U,
+ "Acerscan 620U",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_ATAPI,
+ "ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL300,
+ "AWL300",
+ },
+ {
+ USB_VENDOR_ACERP, USB_PRODUCT_ACERP_AWL400,
+ "AWL400",
+ },
+ {
+ USB_VENDOR_ACERW, USB_PRODUCT_ACERW_WARPLINK,
+ "Warplink",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25,
+ "Prism2.5 WLAN",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_PRISM_25A,
+ "Prism2.5 WLAN A",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_FREELAN,
+ "ROPEX FreeLan 802.11b",
+ },
+ {
+ USB_VENDOR_ACTIONTEC, USB_PRODUCT_ACTIONTEC_802UAT1,
+ "802UAT1",
+ },
+ {
+ USB_VENDOR_ACTISYS, USB_PRODUCT_ACTISYS_IR2000U,
+ "ACT-IR2000U FIR",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD,
+ "I/O Board",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE, USB_PRODUCT_ACTIVEWIRE_IOBOARD_FW1,
+ "I/O Board, rev. 1",
+ },
+ {
+ USB_VENDOR_ADAPTEC, USB_PRODUCT_ADAPTEC_AWN8020,
+ "AWN-8020 WLAN",
+ },
+ {
+ USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_205,
+ "Cable 205",
+ },
+ {
+ USB_VENDOR_ADDTRON, USB_PRODUCT_ADDTRON_AWU120,
+ "AWU-120",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_4,
+ "AN986A Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS,
+ "AN986 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII,
+ "AN8511 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_2,
+ "AN8513 Ethernet",
+ },
+ {
+ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_3,
+ "AN8515 Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BT,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BTX,
+ "UBS-10BT Ethernet",
+ },
+ {
+ USB_VENDOR_AEI, USB_PRODUCT_AEI_FASTETHERNET,
+ "Fast Ethernet",
+ },
+ {
+ USB_VENDOR_AGATE, USB_PRODUCT_AGATE_QDRIVE,
+ "Q-Drive",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1236U,
+ "SnapScan 1236U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANTOUCH,
+ "SnapScan Touch",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U2,
+ "SnapScan 1212U",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE40,
+ "SnapScan e40",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE50,
+ "SnapScan e50",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE20,
+ "SnapScan e20",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE25,
+ "SnapScan e25",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE26,
+ "SnapScan e26",
+ },
+ {
+ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE52,
+ "SnapScan e52",
+ },
+ {
+ USB_VENDOR_AINCOMM, USB_PRODUCT_AINCOMM_AWU2000B,
+ "AWU2000B",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220,
+ "CDMA Wireless EVDO card",
+ },
+ {
+ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_AIRCARD_313U,
+ "Aircard 313U",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AKS, USB_PRODUCT_AKS_USBHASP,
+ "USB-HASP 0.06",
+ },
+ {
+ USB_VENDOR_ALCATEL, USB_PRODUCT_ALCATEL_OT535,
+ "One Touch 535/735",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST120G,
+ "SpeedTouch 120g",
+ },
+ {
+ USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST121G,
+ "SpeedTouch 121g",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_MA_KBD_HUB,
+ "MacAlly Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU9814,
+ "AU9814 Hub",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_SM_KBD,
+ "MicroConnectors/StrongMan",
+ },
+ {
+ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_NEC_KBD_HUB,
+ "NEC Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB,
+ "Kbd Hub",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN, USB_PRODUCT_ALLIEDTELESYN_ATUSB100,
+ "AT-USB100",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70,
+ "ADA70 Speakers",
+ },
+ {
+ USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495,
+ "ASC495 Speakers",
+ },
+ {
+ USB_VENDOR_ALTI2, USB_PRODUCT_ALTI2_NEPTUNE3,
+ "Neptune 3",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250,
+ "NTL 250 cable modem",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GO,
+ "CG-WLUSB2GO",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR,
+ "CG-WLUSB2GNR",
+ },
+ {
+ USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEI_NF,
+ "Eagle I",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEII_NF,
+ "Eagle II",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIIC_NF,
+ "Eagle IIC",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOG, USB_PRODUCT_ANALOG_EAGLEIII_NF,
+ "Eagle III",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICE,
+ "gnICE",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES, USB_PRODUCT_ANALOGDEVICES_GNICEPLUS,
+ "gnICE+",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZUSB,
+ "EZUSB",
+ },
+ {
+ USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK,
+ "EZLINK",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_A2502,
+ "NTT DoCoMo A2502",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100H,
+ "ADU-E100H",
+ },
+ {
+ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A,
+ "ADU-500A",
+ },
+ {
+ USB_VENDOR_AOX, USB_PRODUCT_AOX_USB101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_APC, USB_PRODUCT_APC_UPS5G,
+ "5G UPS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_FOUNTAIN_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_GEYSER_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING2_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING3_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING4A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING6_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING5A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7A_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING7_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ANSI,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_ISO,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING8_JIS,
+ "Keyboard/Trackpad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_OPTMOUSE,
+ "Optical mouse",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH_HCI,
+ "HID-proxy",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_SPEAKERS,
+ "Speakers",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
+ "iPhone",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH,
+ "iPod Touch",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3G,
+ "iPhone 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_2G,
+ "iPod Touch 2G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3GS,
+ "iPhone 3GS",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_GSM,
+ "iPhone 4 GSM",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_3G,
+ "iPod Touch 3G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD,
+ "iPad",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4_CDMA,
+ "iPhone 4 CDMA",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD_TOUCH_4G,
+ "iPod Touch 4G",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD2,
+ "iPad 2",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_4S,
+ "iPhone 4S",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_6,
+ "iPhone 6",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ETHERNET,
+ "Ethernet A1277",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT_1,
+ "iSight",
+ },
+ {
+ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ISIGHT,
+ "iSight",
+ },
+ {
+ USB_VENDOR_ARANEUS, USB_PRODUCT_ARANEUS_ALEA,
+ "True Random Number Generator",
+ },
+ {
+ USB_VENDOR_ARDUINO, USB_PRODUCT_ARDUINO_LEONARDO,
+ "Leonardo",
+ },
+ {
+ USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116,
+ "ARK3116 Serial",
+ },
+ {
+ USB_VENDOR_ARUBA, USB_PRODUCT_ARUBA_CP210X,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO230,
+ "PENTAX Optio230",
+ },
+ {
+ USB_VENDOR_ASANTE, USB_PRODUCT_ASANTE_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178,
+ "AX88178",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772,
+ "AX88772",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B_1,
+ "AX88772B",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013I,
+ "WLL013 (Intersil)",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_ASKEY, USB_PRODUCT_ASKEY_VOYAGER1010,
+ "Voyager 1010",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G,
+ "WL-159g",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI,
+ "A9T wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_P5B_WIFI,
+ "P5B wireless",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN13,
+ "USB-N13",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN10,
+ "USB-N10",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN53,
+ "USB-N53",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN66,
+ "USB-N66",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ASUS, USB_PRODUCT_ASUS_MYPAL_A730,
+ "MyPal A730",
+ },
+ {
+ USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11,
+ "USB-N11",
+ },
+ {
+ USB_VENDOR_ASUSTEK, USB_PRODUCT_ASUSTEK_WL140,
+ "WL-140",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC1284,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC10T,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC110T,
+ "UC-110T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A,
+ "UC232A Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T,
+ "UC210T Ethernet",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC2324,
+ "UC2324 Serial",
+ },
+ {
+ USB_VENDOR_ATEN, USB_PRODUCT_ATEN_DSB650C,
+ "DSB-650C",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS, USB_PRODUCT_ATHEROS_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR5523_3_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_TG121N,
+ "TG121N",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN821NV2,
+ "WN821NV2",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_3CRUSBN275,
+ "3CRUSBN275",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_WN612,
+ "WN612",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR3011,
+ "AR3011",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9280,
+ "AR9280+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9287,
+ "AR9287+AR7010",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9170,
+ "AR9170",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATHEROS2, USB_PRODUCT_ATHEROS2_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_ATI2, USB_PRODUCT_ATI2_205,
+ "USB Cable 205",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_STK541,
+ "STK541 Zigbee",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_UHB124,
+ "UHB124 hub",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_WN210,
+ "W-Buddie WN210",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_DWL900AP,
+ "DWL-900AP Wireless access point",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT91_CDC_ACM,
+ "AT91 CDC ACM",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I1,
+ "AT76C503 (Intersil 3861 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503I2,
+ "AT76C503 (Intersil 3863 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C503RFMD,
+ "AT76C503 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD,
+ "AT76C505 (RFMD Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505RFMD2958,
+ "AT76C505 (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505A,
+ "AT76C505A (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_AT76C505AS,
+ "AT76C505AS (RFMD 2958 Radio)",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA, USB_PRODUCT_AUDIOTECHNICA_ATCHA4USB,
+ "ATC-HA4USB USB headphone",
+ },
+ {
+ USB_VENDOR_AVAGO, USB_PRODUCT_AVAGO_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
+ "USB Audio Speaker",
+ },
+ {
+ USB_VENDOR_AVERATEC, USB_PRODUCT_AVERATEC_USBWLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_AVISION, USB_PRODUCT_AVISION_1200U,
+ "1200U",
+ },
+ {
+ USB_VENDOR_AVM, USB_PRODUCT_AVM_FRITZWLAN,
+ "FRITZ!WLAN N",
+ },
+ {
+ USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM,
+ "Data Modem",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_4,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8192SU_5,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_1,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_2,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_3,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_4,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_5,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_AR9271_6,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RTL8188CE_2,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER,
+ "Card reader",
+ },
+ {
+ USB_VENDOR_BAYER, USB_PRODUCT_BAYER_CONTOUR,
+ "Ascensia Contour",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOTL4,
+ "USOTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USTL4,
+ "USTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2,
+ "USO9ML2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4,
+ "USOPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USPTL4,
+ "USPTL4 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR2,
+ "USO9ML2DR-2 RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USO9ML2DR,
+ "USO9ML2DR RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR2,
+ "USOPTL4DR-2 RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_USOPTL4DR,
+ "USOPTL4DR RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F2W,
+ "485USB9F-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USB9F4W,
+ "485USB9F-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_232USB9M,
+ "232USB9M RS-232",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_2W,
+ "485USBTB-2W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_485USBTB_4W,
+ "485USBTB-4W RS-422/485",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL5USB9M,
+ "TTL5USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_TTL3USB9M,
+ "TTL3USB9M",
+ },
+ {
+ USB_VENDOR_BBELECTR, USB_PRODUCT_BBELECTR_ZZ_PROG1,
+ "ZZ Programmer",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D6050,
+ "F5D6050 802.11b Wireless adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT001V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F8T003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_FBT003V,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103,
+ "F5U103 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U109,
+ "F5U109 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_SCSI,
+ "SCSI",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5050,
+ "F5D5050 Ethernet",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U234,
+ "F5U234 USB 2.0 4-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U237,
+ "F5U237 USB 2.0 7-Port Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U257,
+ "F5U257 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6H375,
+ "F6H375 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U409,
+ "F5U409 Serial",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR,
+ "F6C550-AVR UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1250EITWRK,
+ "F6C1250EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1500EITWRK,
+ "F6C1500EITW-RK UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C900,
+ "F6C900 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C100,
+ "F6C100 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C120,
+ "F6C120 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C800,
+ "F6C800 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1004V1,
+ "F9L1004V1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C1100,
+ "F6C1100/1200 UPS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F9L1103,
+ "F9L1103 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120,
+ "F5U120-PC Hub",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D2102,
+ "F7D2102",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055,
+ "F5D5055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050,
+ "F5D7050 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050A,
+ "F5D705A 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050C,
+ "F5D705C 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050E,
+ "F5D705E 54g USB Network Adapter",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3,
+ "F5D8053 v3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055,
+ "F5D8055",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055V2,
+ "F5D8055 v2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050V3,
+ "F5D9050 ver 3",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D9050C,
+ "F5D9050C",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1,
+ "F6D4050 ver 1",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V2,
+ "F6D4050 ver 2",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F7D1101V2,
+ "F7D1101 v2",
+ },
+ {
+ USB_VENDOR_BELKIN2, USB_PRODUCT_BELKIN2_F5U002,
+ "F5U002 Parallel",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_BWIFI_USB54AR,
+ "BWIFI-USB54AR",
+ },
+ {
+ USB_VENDOR_BEWAN, USB_PRODUCT_BEWAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100,
+ "USB100N 10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100,
+ "USB100LP",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100,
+ "USB100EL",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100,
+ "USBE100",
+ },
+ {
+ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB2AR,
+ "USB2AR Ethernet",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCMFW,
+ "BCMFW",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033,
+ "BCM2033",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033NF,
+ "BCM2033 (no fw)",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43236,
+ "BCM43236",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43143,
+ "BCM43143",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43242,
+ "BCM43242",
+ },
+ {
+ USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM43569,
+ "BCM43569",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_HL1050,
+ "HL-1050 laser printer",
+ },
+ {
+ USB_VENDOR_BROTHER, USB_PRODUCT_BROTHER_MFC210C,
+ "MFC 210C",
+ },
+ {
+ USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932,
+ "Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_BWCT, USB_PRODUCT_BWCT_6CHCONSER,
+ "6ch ConSer",
+ },
+ {
+ USB_VENDOR_CACE, USB_PRODUCT_CACE_AIRPCAPNX,
+ "AirPcap Nx",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N656U,
+ "CANOSCAN N656U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1220U,
+ "CANOSCAN N1220U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N670U,
+ "CANOSCAN N670U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1240U,
+ "CANOSCAN N1240U",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_LIDE60,
+ "CANOSCAN LiDE60",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S10,
+ "PowerShot S10",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S20,
+ "PowerShot S20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_US,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_S100_EU,
+ "PowerShot S100",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_G1,
+ "PowerShot G1",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A20,
+ "PowerShot A20",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_A540,
+ "PowerShot A540",
+ },
+ {
+ USB_VENDOR_CANON, USB_PRODUCT_CANON_SX100,
+ "PowerShot SX100",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_QV,
+ "QV",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_BE300,
+ "BE-300 PDA",
+ },
+ {
+ USB_VENDOR_CASIO, USB_PRODUCT_CASIO_NAMELAND,
+ "CASIO Nameland EZ-USB",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE,
+ "Netmate Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE2,
+ "Netmate2 Ethernet",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_CHIEF,
+ "USB Chief Bus & Protocol Analyzer",
+ },
+ {
+ USB_VENDOR_CATC, USB_PRODUCT_CATC_ANDROMEDA,
+ "Andromeda hub",
+ },
+ {
+ USB_VENDOR_CCYU, USB_PRODUCT_CCYU_EASYDISK,
+ "EasyDisk Portable",
+ },
+ {
+ USB_VENDOR_CHENSOURCE, USB_PRODUCT_CHENSOURCE_CM12402,
+ "CM12402 Eagle IR Cam",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000KBD,
+ "My3000 keyboard",
+ },
+ {
+ USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000HUB,
+ "My3000 hub",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CHIC, USB_PRODUCT_CHIC_CYPRESS,
+ "Cypress",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_KB8933,
+ "KB-8933 keyboard",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_CAMERA,
+ "Integrated Camera",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_1,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_2,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_3,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_4,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_5,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_RTL8188CUS_6,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROTHROTTLE,
+ "Pro Throttle",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_PROPEDALS,
+ "Pro Pedals",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FIGHTERSTICK,
+ "Fighterstick",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS, USB_PRODUCT_CHPRODUCTS_FLIGHTYOKE,
+ "Flight Sim Yoke",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GV2,
+ "WUSB54G v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54AG,
+ "WUSB54AG",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54G,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GP,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_USB200MV2,
+ "USB200M v2",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_HU200TS,
+ "HU200-TS",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GC,
+ "WUSB54GC",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GR,
+ "WUSB54GR",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G,
+ "WUSBF54G",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB200,
+ "WUSB200",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AE1000,
+ "AE1000",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_AM10,
+ "AM10",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2, USB_PRODUCT_CISCOLINKSYS2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3, USB_PRODUCT_CISCOLINKSYS3_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_560884,
+ "560884 C-Bus Switch",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PACA,
+ "5500PACA C-Bus Controller",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5800PC,
+ "5800PC C-Bus Wireless",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5500PCU,
+ "5500PCU C-Bus",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_5000CT2,
+ "5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_C5000CT2,
+ "C5000CT2 C-Bus Touch Screen",
+ },
+ {
+ USB_VENDOR_CLIPSAL, USB_PRODUCT_CLIPSAL_L51XX,
+ "L51xx C-Bus Dimmer",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU510,
+ "CDMA Technologies USB modem",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CM5100P,
+ "CM-5100P EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CCU550,
+ "CCU-550 EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU550PRO,
+ "CNU-550pro EVDO",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628,
+ "CGU-628",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CNU680,
+ "CNU-680",
+ },
+ {
+ USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CGU628_DISK,
+ "CGU-628 disk mode",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQPOCKETPC,
+ "iPAQ PocketPC",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_A1500,
+ "A1500",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQWLAN,
+ "iPAQ WLAN",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W100,
+ "W100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_W200,
+ "WLAN MultiPort W200",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_PJB100,
+ "Personal Jukebox PJB100",
+ },
+ {
+ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX,
+ "iPAQ Linux",
+ },
+ {
+ USB_VENDOR_COMPARE, USB_PRODUCT_COMPARE_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_C11U,
+ "C11U",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_WL210,
+ "WL-210",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU,
+ "C54RU WLAN",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU2,
+ "C54RU",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2573,
+ "RT2573M",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61,
+ "VIGORN61",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA, USB_PRODUCT_CONCORDCAMERA_EYE_Q_3X,
+ "Eye Q 3x",
+ },
+ {
+ USB_VENDOR_CONNECTIX, USB_PRODUCT_CONNECTIX_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_ETHER_USB_T,
+ "Ether USB-T",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX,
+ "FEther USB-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLAN_USB_USB_11,
+ "WirelessLAN USB-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS,
+ "FEther USB-TXS",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLANUSB,
+ "Wireless LAN Stick-11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB2_TX,
+ "FEther USB2-TX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_KEY,
+ "ULUSB-11 Key",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GL,
+ "CG-WLUSB2GL",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB2GPX,
+ "CG-WLUSB2GPX",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM,
+ "CG-WLUSB300GNM",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300N,
+ "CG-WLUSB300N",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_WLUSB_11_STICK,
+ "WLAN USB Stick 11",
+ },
+ {
+ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC,
+ "FEther USB-TXC",
+ },
+ {
+ USB_VENDOR_CORSAIR, USB_PRODUCT_CORSAIR_CP210X,
+ "CP210X",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_II,
+ "Nomad II",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_EMU0202,
+ "E-Mu 0202",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_IIMG,
+ "Nomad II MG",
+ },
+ {
+ USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD,
+ "Nomad",
+ },
+ {
+ USB_VENDOR_CREATIVE2, USB_PRODUCT_CREATIVE2_VOIP_BLASTER,
+ "Voip Blaster",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_CSR, USB_PRODUCT_CSR_BLUECORE,
+ "BlueCore",
+ },
+ {
+ USB_VENDOR_CTC, USB_PRODUCT_CTC_CW6622,
+ "CW6622",
+ },
+ {
+ USB_VENDOR_CTX, USB_PRODUCT_CTX_EX1300,
+ "Ex1300 hub",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_1500,
+ "1500 UPS",
+ },
+ {
+ USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_OR2200,
+ "OR2200 UPS",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_GIGASET108,
+ "Siemens Gigaset 108",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB,
+ "TG54USB",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_MOUSE,
+ "mouse",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_THERMO,
+ "thermometer",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_KBDHUB,
+ "Keyboard/Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO,
+ "FM Radio",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_USBRS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_HUB2,
+ "USB2 Hub",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_LPRDK,
+ "CY4636 LP RDK Bridge",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD,
+ "Sispm - old version",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM,
+ "Sispm",
+ },
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH,
+ "Sispm - flash",
+ },
+ {
+ USB_VENDOR_DAISY, USB_PRODUCT_DAISY_DMC,
+ "PhotoClip",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_USB_FOB_IBUTTON,
+ "USB-FOB/iBUTTON",
+ },
+ {
+ USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,
+ "J-6502 speakers",
+ },
+ {
+ USB_VENDOR_DATAAPEX, USB_PRODUCT_DATAAPEX_MULTICOM,
+ "MultiCom",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_WK668,
+ "HenTong WK-668",
+ },
+ {
+ USB_VENDOR_DAVICOM, USB_PRODUCT_DAVICOM_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_AXIM,
+ "Axim X51v",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BC02,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_TM1180,
+ "TrueMobile 1180 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_BLUETOOTH350,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_W5500,
+ "W5500 HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_U740,
+ "Dell U740 CDMA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_EU870D,
+ "EU870D HSDPA",
+ },
+ {
+ USB_VENDOR_DELL, USB_PRODUCT_DELL_DW700,
+ "DW700 GPS",
+ },
+ {
+ USB_VENDOR_DELL2, USB_PRODUCT_DELL2_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMUSB,
+ "Earthmate GPS",
+ },
+ {
+ USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EMLT20,
+ "Earthmate LT20",
+ },
+ {
+ USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB,
+ "Rio 500",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRAEXPRESS56K,
+ "Supra Express 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_SUPRA2890,
+ "SupraMax 2890 56K",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB,
+ "Rio 600",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB,
+ "Rio 800",
+ },
+ {
+ USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_PSAPLAY120,
+ "Nike psa[play 120",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL200U,
+ "WL-200U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CHUSB611G,
+ "CHUSB 611G",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_WL240U,
+ "WL-240U",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_XH1153,
+ "XH1153 802.11b",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_CWD854F,
+ "C-Net CWD-854 rev F",
+ },
+ {
+ USB_VENDOR_DICKSMITH, USB_PRODUCT_DICKSMITH_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT2,
+ "AccelePort 2",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT4,
+ "AccelePort 4",
+ },
+ {
+ USB_VENDOR_DIGI, USB_PRODUCT_DIGI_ACCELEPORT8,
+ "AccelePort 8",
+ },
+ {
+ USB_VENDOR_DIGIANSWER, USB_PRODUCT_DIGIANSWER_ZIGBEE802154,
+ "ZigBee",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM, USB_PRODUCT_DIGITALSTREAM_PS2,
+ "PS/2 Active",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_GUC2020,
+ "IOGEAR DVI GUC2020",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LD220,
+ "Samsung LD220",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_POLARIS2,
+ "Polaris2 USB dock",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VCUD60,
+ "Rextron DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_CONV,
+ "StarTech CONV-USB2DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_DLDVI,
+ "DisplayLink DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_VGA10,
+ "CMP-USBVGA10",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_WSDVI,
+ "WS Tech DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_EC008,
+ "EasyCAP008 DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD4300U,
+ "LCD-4300U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LCD8000U,
+ "LCD-8000U",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_HPDOCK,
+ "HP USB Docking",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NL571,
+ "HP USB DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_M01061,
+ "Lenovo DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_NBDOCK,
+ "VideoHome NBdock1920",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_SWDVI,
+ "SUNWEIT DVI",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LUM70,
+ "Lilliput UM-70",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_LT1421,
+ "Lenovo ThinkVision LT1421",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_UM7X0,
+ "nanovision MiMo",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100C1,
+ "DUB-E100 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120E,
+ "DWL-120 rev E",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130C,
+ "DWA-130 rev C",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_1,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_3,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RTL8192CU_4,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131B,
+ "DWA-131 rev B",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125D1,
+ "DWA-125 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA123D1,
+ "DWA-123 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA137A1,
+ "DWA-137 rev A1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA131E1,
+ "DWA-131 rev E1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA182D1,
+ "DWA-182 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA171C1,
+ "DWA-171 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL122,
+ "DWL-122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG120,
+ "DWL-G120",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWL120F,
+ "DWL-120 rev F",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG122A2,
+ "DWL-G122 rev A2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG132_NF,
+ "DWL-AG132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG132_NF,
+ "DWL-G132",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLAG122_NF,
+ "DWL-AG122",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100B1,
+ "DUB-E100 rev B1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140B3,
+ "DWA-140 rev B3",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA160B2,
+ "DWA-160 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA127,
+ "DWA-127",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA125B2,
+ "DWA-125 rev B2",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA162,
+ "DWA-162 Wireless Adapter",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA140D1,
+ "DWA-140 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWA130F1,
+ "DWA-130 rev F1",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA,
+ "1/10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUB1312,
+ "DUB-1312",
+ },
+ {
+ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA131A1,
+ "DWA-131 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA2340_NF,
+ "WUA-2340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A2,
+ "DWA-160 A2",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130D1,
+ "DWA-130 rev D1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWLG122C1,
+ "DWL-G122 rev C1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_WUA1340,
+ "WUA-1340",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA111,
+ "DWA-111",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA110,
+ "DWA-110",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA160A1,
+ "DWA-160 A1",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130,
+ "DWA-130",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DLINK3, USB_PRODUCT_DLINK3_KVM221,
+ "KVM-221",
+ },
+ {
+ USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0,
+ "Storage Adapter",
+ },
+ {
+ USB_VENDOR_DOMAIN, USB_PRODUCT_DOMAIN_ROCKCHIP,
+ "RockChip Media Player",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550,
+ "Vigor550",
+ },
+ {
+ USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR600,
+ "Vigor600",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY, USB_PRODUCT_DREAMCHEEKY_ROCKETBABY,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_ULMB1,
+ "USB LED Message Board v1.0",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_STB,
+ "Sensor Terminal",
+ },
+ {
+ USB_VENDOR_DRESDENELEC, USB_PRODUCT_DRESDENELEC_WHT,
+ "Wireless Terminal",
+ },
+ {
+ USB_VENDOR_DVICO, USB_PRODUCT_DVICO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANT2USB,
+ "ANT2USB",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD2,
+ "ANT dev board",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSB2,
+ "ANTUSB-2 Stick",
+ },
+ {
+ USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTUSBM,
+ "ANTUSB-m Stick",
+ },
+ {
+ USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK,
+ "Flash Disk",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7318,
+ "EW-7318",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7618,
+ "EW-7618",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192SU_3,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717,
+ "EW-7717",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718,
+ "EW-7718",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7722UTN,
+ "EW-7722UTn",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7811UN,
+ "EW-7811Un",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7611ULB,
+ "EW-7611ULB",
+ },
+ {
+ USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7822ULC,
+ "EW-7822ULC",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL2,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EGALAX2, USB_PRODUCT_EGALAX2_TPANEL,
+ "Touch Panel",
+ },
+ {
+ USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
+ "Diva 852 ISDN TA",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_EIZO, USB_PRODUCT_EIZO_MONITOR,
+ "monitor",
+ },
+ {
+ USB_VENDOR_ELAN, USB_PRODUCT_ELAN_BARCODE,
+ "Barcode Scanner",
+ },
+ {
+ USB_VENDOR_ELCON, USB_PRODUCT_ELCON_PLAN,
+ "Goldpfeil P-LAN",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_MOUSE29UO,
+ "29UO",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBLTX,
+ "LD-USBL/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_WDC150SU2M,
+ "WDC-150SU2M",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSB20,
+ "LD-USB20",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT,
+ "UC-SGT Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT0,
+ "UC-SGT0 Serial",
+ },
+ {
+ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3,
+ "LD-USB/TX",
+ },
+ {
+ USB_VENDOR_ELEKTOR, USB_PRODUCT_ELEKTOR_FT323R,
+ "FT323R",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_MODEM1,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET,
+ "Microlink USB2Ethernet",
+ },
+ {
+ USB_VENDOR_ELV, USB_PRODUCT_ELV_USBI2C,
+ "USB-I2C",
+ },
+ {
+ USB_VENDOR_EMPIA, USB_PRODUCT_EMPIA_EEEPC701_VIDEO,
+ "EeePC701 camera",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S,
+ "1S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2S,
+ "2S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S25,
+ "1S25 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_4S,
+ "4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_E45,
+ "E45 Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_CENTRONICS,
+ "Centronics",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_1S9,
+ "1S9 serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_EZUSB,
+ "EZ-USB",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_2U4S,
+ "2U4S serial",
+ },
+ {
+ USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER1,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER2,
+ "ISD Smart Cable for Mac",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER3,
+ "ISD Smart Cable",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_PRINTER5,
+ "USB Printer",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_636,
+ "Perfection 636U / 636Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_610,
+ "Perfection 610",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1200,
+ "Perfection 1200U / 1200Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1600,
+ "Expression 1600",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1640,
+ "Perfection 1640SU",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1240,
+ "Perfection 1240U / 1240Photo",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_640U,
+ "Perfection 640U",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1650,
+ "Perfection 1650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9700F,
+ "GT-9700F",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_2400,
+ "Perfection 2400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1260,
+ "Perfection 1260",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1660,
+ "Perfection 1660",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1670,
+ "Perfection 1670",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX5400,
+ "CX5400",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_CX3650,
+ "Stylus CX3650",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX3800,
+ "Stylus DX3800",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX5000,
+ "Stylus DX5000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX6000,
+ "Stylus DX6000",
+ },
+ {
+ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_DX4000,
+ "Stylus DX4000",
+ },
+ {
+ USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM,
+ "Serial",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_ER1,
+ "ER1 Control Module",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_1,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EVOLUTION, USB_PRODUCT_EVOLUTION_RCM4_2,
+ "RCM4 interface",
+ },
+ {
+ USB_VENDOR_EXAR, USB_PRODUCT_EXAR_XR21V1410,
+ "XR21V1410",
+ },
+ {
+ USB_VENDOR_EXTENDED, USB_PRODUCT_EXTENDED_XTNDACCESS,
+ "XTNDAccess IrDA",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST,
+ "Twist",
+ },
+ {
+ USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA,
+ "Samba",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_FEIXUN, USB_PRODUCT_FEIXUN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CPX_USB,
+ "CPX-USB",
+ },
+ {
+ USB_VENDOR_FESTO, USB_PRODUCT_FESTO_CMSP,
+ "CMSP",
+ },
+ {
+ USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U,
+ "WL-430U",
+ },
+ {
+ USB_VENDOR_FOSSIL, USB_PRODUCT_FOSSIL_WRISTPDA,
+ "Wrist PDA",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_TCOM_TC_300,
+ "T-Com TC 300",
+ },
+ {
+ USB_VENDOR_FOXCONN, USB_PRODUCT_FOXCONN_PIRELLI_DP_L10,
+ "Pirelli DP-L10",
+ },
+ {
+ USB_VENDOR_FREECOM, USB_PRODUCT_FREECOM_DVD,
+ "Connector for DVD drive",
+ },
+ {
+ USB_VENDOR_FSC, USB_PRODUCT_FSC_E5400,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM4,
+ "8U232AM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C,
+ "2232C Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT4232H,
+ "FT4232H",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FTX,
+ "FTX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PS2KBDMS,
+ "PS/2 Keyboard/Mouse",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_2,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENRD,
+ "OpenRD JTAGKey",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANDAPTER,
+ "CANdapter",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_NXTCAM,
+ "Mindstorms NXTCam",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OOCDLINK,
+ "OOCDlink",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_DEVEL,
+ "LM3S Devel",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LM3S_EVAL,
+ "LM3S Eval",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TURTELIZER_JTAG,
+ "JTAG/RS-232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC,
+ "OpenDCC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_SNIFFER,
+ "OpenDCC Sniffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_THROTTLE,
+ "OpenDCC Throttle",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENDCC_GATEWAY,
+ "OpenDCC Gateway",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LOCOBUFFER,
+ "RR-CirKits LocoBuffer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DMX4ALL,
+ "DMX4ALL DMX interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_1,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_2,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_3,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_4,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_5,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_6,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_7,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ASK_RDR4X7_8,
+ "ASK RDR 4X7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MJS_SIRIUS_PC_1,
+ "MJS Sirius To PC Interface",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CHAMELEON,
+ "uChameleon",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13M,
+ "OpenPort 1.3 Mitsubishi",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13S,
+ "OpenPort 1.3 Subaru",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OPENPORT_13U,
+ "OpenPort 1.3 Universal",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L,
+ "2232L Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_0,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_1,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_2,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_3,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_4,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_5,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_6,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SCS_7,
+ "Radio Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IPLUS2,
+ "iPlus",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_XSENS_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GAMMASCOUT,
+ "Gamma Scout Online",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_JTAGCABLEII,
+ "Propox JTAG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_777,
+ "Westrex 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_WESTREX_8900F,
+ "Westrex 8900F",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACG_HFDUAL,
+ "HF Dual ISO Reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ARTEMIS,
+ "CCD camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16,
+ "ATK-16 Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HR,
+ "ATK-16HR Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16C,
+ "ATK-16C Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16HRC,
+ "ATK-16HRC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ATK16IC,
+ "ATK-16IC Camera",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USR,
+ "USR",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_MSM1,
+ "Mini-Sound-Modul",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_KL100,
+ "KL 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS888,
+ "WS 888",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TWS550,
+ "WS 550",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FEM,
+ "Funk Energie Monitor",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_YEI_SC31,
+ "ServoCenter3.1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1300PC,
+ "FHZ 1300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS500,
+ "WS 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_HS485,
+ "RS-485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UMS100,
+ "UMS 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFD128,
+ "TFD 128",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FM3RX,
+ "FM3 RX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS777,
+ "WS 777",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1010PC,
+ "EM 1010 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CSI8,
+ "CSI 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_EM1000DL,
+ "EM 1000 DL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCK100,
+ "PCK 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_RFP500,
+ "RFP 500",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FS20SIG,
+ "FS 20 SIG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UTP8,
+ "UTP 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS300PC,
+ "WS 300 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_WS444PC,
+ "WS 444 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FISCO,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECO_PRO,
+ "EVER Eco Pro UPS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTROBOTS,
+ "Active Robots comms",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PYRAMID,
+ "Pyramid Display",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UNICOM,
+ "Unicom III",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_4,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_5,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_6,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_7,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_8,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EISCOU,
+ "Expert ISDN",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UOPTBR,
+ "RS232 OptoBridge",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DCF,
+ "Expert mouseCLOCK USB II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MSF,
+ "Expert mouseCLOCK USB II MSF",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HBG,
+ "Expert mouseCLOCK USB II HBG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_9,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_A,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GUDE_B,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ECLO_1WIRE,
+ "1-Wire",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TNCX,
+ "TNC-X packet-radio",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_VCP,
+ "VCP",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TERATRONIK_D2XX,
+ "D2XX",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_REU_TINY,
+ "RigExpert Tiny",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO870,
+ "HO870",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_HO820,
+ "HO820",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232BM,
+ "FT232BM Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW,
+ "KW",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS,
+ "YS",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6,
+ "Y6",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8,
+ "Y8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC,
+ "IC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9,
+ "DB9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9,
+ "Y9",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DGQG,
+ "DGQG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_DUSB,
+ "DUSB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD8,
+ "UAD 8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UAD7,
+ "UAD 7",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_USI2,
+ "USI 2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_T1100,
+ "T 1100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PCD200,
+ "PCD 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ULA200,
+ "ULA 200",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_ALC8500,
+ "ALC 8500 Expert",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_FHZ1000PC,
+ "FHZ 1000 PC",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PERLE_UP,
+ "UltraPort",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SPROG_II,
+ "Sprog II",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PIEGROUP_IR,
+ "Infrared",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACTZWAVE,
+ "HomePro ZWave",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_GALAXY_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX,
+ "Coastal ChipWorks TNC-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_MASTER2,
+ "Master Development 2.0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_2,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LINX_3,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_OCEANIC,
+ "Oceanic instrument",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SUUNTO,
+ "Suunto Sports",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBUIRT,
+ "USB-UIRT",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBX_707,
+ "USBX-707",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU20,
+ "ICD-U20",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU40,
+ "ICD-U40",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_MACHX,
+ "MACH-X",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_LOAD_N_GO,
+ "LOAD N GO",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_ICDU64,
+ "ICDU64",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CCS_PRIME8,
+ "PRIME8",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ITM_TOUCH,
+ "ITM Touchscreen",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBSERIAL,
+ "Matrix Orbital USB Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MX200,
+ "Matrix Orbital MX200 Series LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_MTXO,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK202_24,
+ "Matrix Orbital LK202-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_LK204_24,
+ "Matrix Orbital LK204-24 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_2,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MATRIX_3,
+ "Matrix Orbital LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_RELAIS,
+ "Relais",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TIRA1,
+ "Tira-1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PCDJ_DAC2,
+ "DAC-2",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ACCESSO,
+ "Accesso reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_THORLABS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UR100,
+ "UR 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_CLI7000,
+ "CLI 7000",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UM100,
+ "UM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UO100,
+ "UO 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_PPS7330,
+ "PPS 7330",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_TFM100,
+ "TFM 100",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UDF77,
+ "UDF 77",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_ELV_UIO88,
+ "UIO 88",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_R2000KU_RNG,
+ "R2000KU RNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_BCS_SE923,
+ "BCS SE923",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_FT232RL,
+ "FT232RL",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_632,
+ "Crystalfontz CFA-632 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_634,
+ "Crystalfontz CFA-634 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_547,
+ "Crystalfontz CFA-547 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_633,
+ "Crystalfontz CFA-633 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_631,
+ "Crystalfontz CFA-631 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_635,
+ "Crystalfontz CFA-635 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_640,
+ "Crystalfontz CFA-640 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LCD_CFA_642,
+ "Crystalfontz CFA-642 LCD",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IRTRANS,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_1,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_R200,
+ "R200-USB TRNG",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_3,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PROTEGO_4,
+ "Protego",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20,
+ "SEMC DSS-20 SyncStation",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANVIEW,
+ "CANview",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_VNHC,
+ "Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_AMC232,
+ "AMC-232USB0",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TTUSB,
+ "TT-USB",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_US485,
+ "US485",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PICPRO,
+ "PIC-Programmer",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PCMCIA,
+ "PCMCIA SRAM-cards reader",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PK1,
+ "Particel counter PK1",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_RS232MON,
+ "RS232",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_APP70,
+ "APP 70 dust monitoring",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_PEDO,
+ "IBS PEDO-Modem",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_IBS_1,
+ "Serial",
+ },
+ {
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CANUSB,
+ "CANUSB",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100,
+ "Mass Storage",
+ },
+ {
+ USB_VENDOR_FUJITSU, USB_PRODUCT_FUJITSU_AH_F401U,
+ "AH-F401U Air H device",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD6,
+ "Type 6 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_KEYBOARD7,
+ "Type 7 Keyboard",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_MOUSE,
+ "Type 6 Mouse",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5204PS,
+ "Smart Power Strip FX-5204PS",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_FX5251WB,
+ "Base Station FX-5251WB",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP, USB_PRODUCT_FUJITSUCOMP_VIRTETH,
+ "Virtual Eth Device",
+ },
+ {
+ USB_VENDOR_FUSHICAI, USB_PRODUCT_FUSHICAI_USBTV007,
+ "Fushicai Audio-Video Grabber",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP60CSX,
+ "GPSmap 60Csx",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE3600,
+ "Ique 3600",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_DAKOTA20,
+ "Dakota 20",
+ },
+ {
+ USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_GPSMAP62S,
+ "GPSmap 62s",
+ },
+ {
+ USB_VENDOR_GCTSEMICON, USB_PRODUCT_GCTSEMICON_INSTALL,
+ "GDM720x MASS storage mode",
+ },
+ {
+ USB_VENDOR_GEMPLUS, USB_PRODUCT_GEMPLUS_PROXPU,
+ "Prox-PU/CU",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A,
+ "GL620USB-A GeneLink USB-USB Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GENELINK,
+ "GeneLink Host-Host Bridge",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL650,
+ "GL650 Hub",
+ },
+ {
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB,
+ "GL641USB CompactFlash",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNBR402W,
+ "GN-BR402W",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWLBM101,
+ "GN-WLBM101",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWBKG,
+ "GN-WBKG",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB01GS,
+ "GN-WB01GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWI05GS,
+ "GN-WI05GS",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N,
+ "GN-WB31N",
+ },
+ {
+ USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L,
+ "GN-WB32L",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_SMCWUSBTG_NF,
+ "SMCWUSBT-G",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GIGASET, USB_PRODUCT_GIGASET_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBALSUN, USB_PRODUCT_GLOBALSUN_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GLOBESPAN, USB_PRODUCT_GLOBESPAN_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00,
+ "YP3X00 PDA",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS, USB_PRODUCT_GNOTOMETRICS_AURICAL,
+ "Aurical",
+ },
+ {
+ USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232,
+ "GoCOM232 Serial converter",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_GWUSB2E,
+ "GWUSB2E",
+ },
+ {
+ USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_GRAVIS, USB_PRODUCT_GRAVIS_GAMEPADPRO,
+ "GamePad Pro",
+ },
+ {
+ USB_VENDOR_GREENHOUSE, USB_PRODUCT_GREENHOUSE_KANA21,
+ "CF-writer/MP3 Player",
+ },
+ {
+ USB_VENDOR_GRIFFIN, USB_PRODUCT_GRIFFIN_IMATE,
+ "iMate, ADB adapter",
+ },
+ {
+ USB_VENDOR_GUDE, USB_PRODUCT_GUDE_DCF,
+ "Expert mouseCLOCK USB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_DALEADER,
+ "DA Leader",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254,
+ "HWGUSB2-54 WLAN",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254LB,
+ "HWGUSB2-54-LB",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254V2AP,
+ "HWGUSB2-54V2-AP",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNU300,
+ "HWNU-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUM300,
+ "HWNUm-300",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUN54,
+ "HWGUn-54",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWNUP150,
+ "HWNUP-150",
+ },
+ {
+ USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_GUNZE, USB_PRODUCT_GUNZE_TOUCHPANEL,
+ "Gunze USB Touch Panel",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGSM,
+ "FlashGate SmartMedia",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGCF,
+ "FlashGate CompactFlash",
+ },
+ {
+ USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FG,
+ "FlashGate",
+ },
+ {
+ USB_VENDOR_HAL, USB_PRODUCT_HAL_IMR001,
+ "Crossam2+USB IR commander",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR,
+ "Handspring Visor",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO,
+ "Handspring Treo",
+ },
+ {
+ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO600,
+ "Handspring Treo 600",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE, USB_PRODUCT_HAUPPAUGE_WINTV_USB_FM,
+ "WinTV FM",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2,
+ "HWUN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWDN2,
+ "HWDN2",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_5,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_UF100,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_HIROSE, USB_PRODUCT_HIROSE_USB100,
+ "USB-100",
+ },
+ {
+ USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DZMV100A,
+ "DVD-CAM DZ-MV100A Camcorder",
+ },
+ {
+ USB_VENDOR_HOLTEK, USB_PRODUCT_HOLTEK_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_895C,
+ "DeskJet 895C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4100C,
+ "Scanjet 4100C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20,
+ "Photosmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_880C,
+ "DeskJet 880C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4200C,
+ "ScanJet 4200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS,
+ "CD-Writer Plus",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_KBDHUB,
+ "Multimedia Keyboard Hub",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210W,
+ "HN210W",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HPX9GP,
+ "HP-x9G+",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6200C,
+ "ScanJet 6200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_S20B,
+ "PhotoSmart S20",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_815C,
+ "DeskJet 815C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3300C,
+ "ScanJet 3300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CDW8200,
+ "CD-Writer Plus 8200e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1220C,
+ "DeskJet 1220C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_810C,
+ "DeskJet 810C/812C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_4300C,
+ "Scanjet 4300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_CD4E,
+ "CD-Writer+ CD-4e",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_G85XI,
+ "OfficeJet G85xi",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1200,
+ "LaserJet 1200",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5200C,
+ "Scanjet 5200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_830C,
+ "DeskJet 830C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_3400CSE,
+ "ScanJet 3400cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_885C,
+ "DeskJet 885C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1000,
+ "LaserJet 1000",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_6300C,
+ "Scanjet 6300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_840C,
+ "DeskJet 840c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2200C,
+ "ScanJet 2200C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5300C,
+ "Scanjet 5300C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_816C,
+ "DeskJet 816C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_970CSE,
+ "Deskjet 970Cse",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_5400C,
+ "Scanjet 5400C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_2215,
+ "iPAQ 22xx/Jornada 548",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_959C,
+ "Deskjet 959C",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_568J,
+ "Jornada 568",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_930C,
+ "DeskJet 930c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1005,
+ "LaserJet 1005",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P2000U,
+ "Inkjet P-2000U",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HS2300,
+ "HS2300",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750,
+ "T750 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1000,
+ "T1000 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T1500,
+ "T1500 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_RT2200,
+ "R/T2200 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_R1500G2,
+ "R1500 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_T750G2,
+ "T750 G2 UPS",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_640C,
+ "DeskJet 640c",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1020,
+ "LaserJet 1020",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_P1100,
+ "Photosmart P1100",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_LD220,
+ "LD220",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_1018,
+ "LaserJet 1018",
+ },
+ {
+ USB_VENDOR_HP, USB_PRODUCT_HP_HN210E,
+ "HN210E Ethernet",
+ },
+ {
+ USB_VENDOR_HP2, USB_PRODUCT_HP2_C500,
+ "PhotoSmart C500",
+ },
+ {
+ USB_VENDOR_HP3, USB_PRODUCT_HP3_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_PPC6700MODEM,
+ "PPC6700 Modem",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_SMARTPHONE,
+ "SmartPhone",
+ },
+ {
+ USB_VENDOR_HTC, USB_PRODUCT_HTC_ANDROID,
+ "Android phone",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E618,
+ "HUAWEI Mobile E618",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_EM770W,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1750,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E180,
+ "HUAWEI Mobile E180",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E510,
+ "HUAWEI Mobile E510",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E181,
+ "HUAWEI Mobile E181",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1752,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E182,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3372,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E161,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765,
+ "HUAWEI Mobile K3765",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E1820,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4511,
+ "HUAWEI Mobile Modem K4511",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4510,
+ "HUAWEI Mobile Modem",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772,
+ "HUAWEI Mobile K3772",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E353_INIT,
+ "HUAWEI Mobile E353 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E392_INIT,
+ "HUAWEI Mobile E392 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3765_INIT,
+ "HUAWEI Mobile K3765 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K3772_INIT,
+ "HUAWEI Mobile K3772 Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MU609,
+ "HUAWEI Mobile ME906",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S,
+ "HUAWEI Mobile E173s",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E173S_INIT,
+ "HUAWEI Mobile E173s Initial",
+ },
+ {
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E303,
+ "HUAWEI Mobile E303",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM, USB_PRODUCT_HUAWEI3COM_WUB320G,
+ "Aolynk WUB320g",
+ },
+ {
+ USB_VENDOR_HUMAX, USB_PRODUCT_HUMAX_PVRSMART,
+ "PVR-SMART",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_PC5740,
+ "PC5740 EVDO",
+ },
+ {
+ USB_VENDOR_HYUNDAI, USB_PRODUCT_HYUNDAI_UM175,
+ "UM175 EVDO",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTTRAVELMOUSE,
+ "Optical",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_OPTWHEELMOUSE,
+ "Wheel",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_USBCDROMDRIVE,
+ "CD-ROM",
+ },
+ {
+ USB_VENDOR_IBM, USB_PRODUCT_IBM_THINKPADHUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_ID1,
+ "ID-1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C1,
+ "ID-RP2C service 1",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2C2,
+ "ID-RP2C service 2",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2D,
+ "ID-RP2D",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VT,
+ "ID-RP2V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2VR,
+ "ID-RP2V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VT,
+ "ID-RP4000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP4000VR,
+ "ID-RP4000V service R",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VT,
+ "ID-RP2000V service T",
+ },
+ {
+ USB_VENDOR_ICOM, USB_PRODUCT_ICOM_RP2000VR,
+ "ID-RP2000V service R",
+ },
+ {
+ USB_VENDOR_IDOWELL, USB_PRODUCT_IDOWELL_IDOWELL,
+ "UPS",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE, USB_PRODUCT_IDQUANTIQUE_QUANTISUSB,
+ "Quantis USB",
+ },
+ {
+ USB_VENDOR_IDTECH, USB_PRODUCT_IDTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_IIYAMA, USB_PRODUCT_IIYAMA_HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO,
+ "Flash Go!",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
+ "EdgePort/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT7,
+ "Hubport/7",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_RAPIDPORT4,
+ "Rapidport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4T,
+ "Edgeport/4 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2,
+ "Edgeport/2 RS232",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4I,
+ "Edgeport/4 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2I,
+ "Edgeport/2 RS422/RS485",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_HUBPORT4,
+ "Hubport/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8HAND,
+ "Hand-built Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MULTIMODEM,
+ "MultiTech version of RP/4",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTPPORT,
+ "Edgeport/(4)21 Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT421,
+ "Edgeport/421 Hub+RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT21,
+ "Edgeport/21 RS232+Parallel",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8DC,
+ "1/2 Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8,
+ "Edgeport/8",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT2DIN,
+ "Edgeport/2 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4DIN,
+ "Edgeport/4 RS232/DIN",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT16DC,
+ "1/2 Edgeport/16",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORTCOMP,
+ "Edgeport Compatible",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT8I,
+ "Edgeport/8 RS422",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_WATCHPORTH,
+ "WatchPort/H",
+ },
+ {
+ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_MT4X56USB,
+ "OEM device",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_F5U002,
+ "Parallel",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI,
+ "ATAPI",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2,
+ "USB2 Storage",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD110,
+ "IDE ISD110",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD105,
+ "IDE ISD105",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5,
+ "Portable USB Harddrive V2",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE,
+ "USB cable",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2,
+ "USB Storage Adapter V2",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_EASYPC_CAMERA,
+ "EasyPC",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_AP310,
+ "AP310 AnyPoint II",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_I2011B,
+ "Wireless 2011B",
+ },
+ {
+ USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD,
+ "82930 test board",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_1,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_2,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_BLUETOOTH2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_3,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_5,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_7,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_4,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_6,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTEL2, USB_PRODUCT_INTEL2_RMH_8,
+ "Rate Matching Hub",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_IOBOARD,
+ "IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERBIO, USB_PRODUCT_INTERBIO_MINIIOBOARD2,
+ "Mini IO Board",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_GT,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_INTERSIL, USB_PRODUCT_INTERSIL_PRISM_2X,
+ "Prism2.x WLAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_VALUECAN,
+ "ValueCAN",
+ },
+ {
+ USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_NEOVI,
+ "NeoVI Blue",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSSMRW,
+ "USB-SSMRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBSDRW,
+ "USB-SDRW SD-card",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETT,
+ "USB ET/T",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX,
+ "USB ET/TX",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTXS,
+ "USB ET/TX-S",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11A,
+ "USB WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNB11,
+ "USB Airport WN-B11",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBWNG54US_NF,
+ "USB WN-G54/US",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETXUS2,
+ "ETX-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETGUS2,
+ "ETG-US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_FT232R,
+ "FT232R",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNGDNUS2,
+ "WN-GDN/US2",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_WNG150UM,
+ "WN-G150UM",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ,
+ "RSAQ1 Serial",
+ },
+ {
+ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ5,
+ "RSAQ5 Serial",
+ },
+ {
+ USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC,
+ "USB2.0-SCSI Bridge USB2-SC",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100,
+ "Zip 100",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2,
+ "Zip 250",
+ },
+ {
+ USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_CDRW,
+ "CDRW 9602",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX,
+ "iFP-1xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX,
+ "iFP-3xx",
+ },
+ {
+ USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_5XX,
+ "iFP-5xx",
+ },
+ {
+ USB_VENDOR_ISSC, USB_PRODUCT_ISSC_KYBT100,
+ "KY-BT100 Bluetooth",
+ },
+ {
+ USB_VENDOR_ITEGNO, USB_PRODUCT_ITEGNO_WM1080A,
+ "WM1080A",
+ },
+ {
+ USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B,
+ "PC-60B",
+ },
+ {
+ USB_VENDOR_JATON, USB_PRODUCT_JATON_EDA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_JENOPTIK, USB_PRODUCT_JENOPTIK_JD350,
+ "JD 350",
+ },
+ {
+ USB_VENDOR_JETI, USB_PRODUCT_JETI_SPC1201,
+ "SPECBOS 1201",
+ },
+ {
+ USB_VENDOR_JRC, USB_PRODUCT_JRC_AH_J3001V_J3002V,
+ "AirH\"PHONE AH-J3001V/J3002V",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_PRX1,
+ "MP-PRX1",
+ },
+ {
+ USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_XP7250_WL,
+ "MP-XP7250 Builtin WLAN",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_OPTICALEYE,
+ "Optical Eye/3-wire",
+ },
+ {
+ USB_VENDOR_KAMSTRUP, USB_PRODUCT_KAMSTRUP_MBUS_250D,
+ "M-Bus Master MultiPort 250D",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_MH4000P,
+ "MiniHub 4000P",
+ },
+ {
+ USB_VENDOR_KAWATSU, USB_PRODUCT_KAWATSU_KC180,
+ "KC-180 IrDA",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN, USB_PRODUCT_KEISOKUGIKEN_USBDAQ,
+ "HKS-0200 USBDAQ",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT,
+ "Orbit trackball",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_TURBOBALL,
+ "TurboBall",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_ORBIT_MAC,
+ "Orbit trackball for Mac",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_BT_EDR,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_VIDEOCAM_VGA,
+ "VideoCAM VGA",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28_NF,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28X_NF,
+ "USA-28X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19_NF,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18_NF,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X_NF,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W_NF,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19,
+ "USA-19 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19W,
+ "USA-19W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W_NF,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA49W,
+ "USA-49W serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI_NF,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QI,
+ "USA-19QI serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q_NF,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19Q,
+ "USA-19Q serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28,
+ "USA-28 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XXB,
+ "USA-28X/XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18,
+ "USA-18 serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18X,
+ "USA-18X serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XB_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA_NF,
+ "USA-28XB serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA28XA,
+ "USA-28XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA_NF,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA18XA,
+ "USA-18XA serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW_NF,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19QW,
+ "USA-19WQ serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_USA19HS,
+ "USA-19HS serial",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA10,
+ "UIA-10 remote control",
+ },
+ {
+ USB_VENDOR_KEYSPAN, USB_PRODUCT_KEYSPAN_UIA11,
+ "UIA-11 remote control",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_XX1,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX,
+ "KNU101TX Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BT,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BTN,
+ "10BT Ethernet",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_B1,
+ "Konverter for B1",
+ },
+ {
+ USB_VENDOR_KOBIL, USB_PRODUCT_KOBIL_KAAN,
+ "Konverter for KAAN",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC220,
+ "Digital Science DC220",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC260,
+ "Digital Science DC260",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC265,
+ "Digital Science DC265",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC290,
+ "Digital Science DC290",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC240,
+ "Digital Science DC240",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC280,
+ "Digital Science DC280",
+ },
+ {
+ USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DX4900,
+ "EasyShare DX4900",
+ },
+ {
+ USB_VENDOR_KONICA, USB_PRODUCT_KONICA_CAMERA,
+ "Camera",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE,
+ "Niche mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_NETSCROLL,
+ "Genius NetScroll mouse",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_FLIGHT2000,
+ "Flight 2000 joystick",
+ },
+ {
+ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO,
+ "ColorPage Vivid-Pro",
+ },
+ {
+ USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V,
+ "AH-K3001V",
+ },
+ {
+ USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_KPC650,
+ "KPC650 EVDO",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD,
+ "Hard Disk",
+ },
+ {
+ USB_VENDOR_LACIE, USB_PRODUCT_LACIE_CDRW,
+ "CD R/W",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M121,
+ "Model 121",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M218A,
+ "Model 218A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M219,
+ "Model 219",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M233,
+ "Model 233",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M235,
+ "Model 235",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M335,
+ "Model 335",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M336,
+ "Model 336",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M350,
+ "Model 350",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M371,
+ "Model 371",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M411,
+ "Model 411",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M425,
+ "Model 425",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M455A,
+ "Model 455A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M475A,
+ "Model 475A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M465,
+ "Model 465",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M625A,
+ "Model 625A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M642A,
+ "Model 642A",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M648,
+ "Model 648",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M737,
+ "Model 737",
+ },
+ {
+ USB_VENDOR_LAKESHORE, USB_PRODUCT_LAKESHORE_M776,
+ "Model 776",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD, USB_PRODUCT_LARSENBRUSGAARD_ALTITRACK,
+ "AltiTrack",
+ },
+ {
+ USB_VENDOR_LEADTEK, USB_PRODUCT_LEADTEK_9531,
+ "9531 GPS",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_DOCK_ETHERNET,
+ "USB-C Dock Ethernet",
+ },
+ {
+ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET,
+ "USB 2.0 Ethernet",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT,
+ "jumpSHOT CompactFlash",
+ },
+ {
+ USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_2662WAR,
+ "2662W-AR",
+ },
+ {
+ USB_VENDOR_LEXMARK, USB_PRODUCT_LEXMARK_S2450,
+ "Optra S 2450",
+ },
+ {
+ USB_VENDOR_LIEBERT, USB_PRODUCT_LIEBERT_UPS,
+ "UPS",
+ },
+ {
+ USB_VENDOR_LIEBERT2, USB_PRODUCT_LIEBERT2_PSA,
+ "PowerSure PSA UPS",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO19,
+ "Link Instruments MSO-19",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS, USB_PRODUCT_LINKINSTRUMENTS_MSO28_2,
+ "Link Instruments MSO-28",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_MAUSB2,
+ "Camedia MAUSB-2",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_HG20F9,
+ "HG20F9 Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T,
+ "USB10T Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX,
+ "USB100TX Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1,
+ "USB100H1 Ethernet/HPNA",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA,
+ "USB10TA Ethernet",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11,
+ "WUSB11 802.11b",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB11_25,
+ "WUSB11 802.11b v2.5",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_WUSB12_11,
+ "WUSB12 802.11b v1.1",
+ },
+ {
+ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2,
+ "USB10TX",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_NWU11B,
+ "NWU11B",
+ },
+ {
+ USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_USB200M,
+ "USB 2.0 10/100 Ethernet controller",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V28,
+ "WUSB11 v2.8",
+ },
+ {
+ USB_VENDOR_LINKSYS3, USB_PRODUCT_LINKSYS3_WUSB11V30,
+ "WUSB11 v3.0",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_USB1000,
+ "USB1000",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100,
+ "WUSB100",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N,
+ "WUSB600N",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV2,
+ "WUSB54GC v2",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3,
+ "WUSB54GC v3",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2,
+ "WUSB600N v2",
+ },
+ {
+ USB_VENDOR_LITEON, USB_PRODUCT_LITEON_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LAN_GTJU2,
+ "LAN-GTJ/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANTX,
+ "LAN-TX",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2,
+ "LAN-W300N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW150NU2,
+ "LAN-W150N/U2",
+ },
+ {
+ USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LANW300NU2S,
+ "LAN-W300N/U2S",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M2452,
+ "M2452 keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M4848,
+ "M4848 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_PAGESCAN,
+ "PageScan",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMWEB,
+ "QuickCam Web",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC200,
+ "Webcam C200",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC250,
+ "Webcam C250",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC500,
+ "Webcam C500",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC210,
+ "Webcam C210",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC310,
+ "Webcam C310",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_HDPROC910,
+ "HD Pro Webcam C910",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WEBCAMC270,
+ "Webcam C270",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMEXP,
+ "QuickCam Express",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAM,
+ "QuickCam",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBDLX,
+ "QuickCam Notebook Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO3K,
+ "QuickCam Pro 3000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_1,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO4K,
+ "QuickCam Pro 4000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMZOOM,
+ "QuickCam Zoom",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_1,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_1,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_1,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_1,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMOEM_2,
+ "QuickCam OEM",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMULTVIS,
+ "QuickCam Ultra Vision",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMFUSION_2,
+ "QuickCam Fusion",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMNBPRO_2,
+ "QuickCam Notebook Pro",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITMP_2,
+ "QuickCam Orbit MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO5K_2,
+ "QuickCam Pro 5000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO9K,
+ "QuickCam Pro 9000",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRONB,
+ "QuickCam Pro Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMDLX,
+ "QuickCam Communicate Deluxe",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMORBITAF,
+ "QuickCam Orbit AF",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMCOMMMP,
+ "QuickCam Communicate MP",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAME3500P,
+ "QuickCam E 3500 Plus",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMDLXNB,
+ "QuickCam Deluxe Notebook",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N43,
+ "N43",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_N48,
+ "N48 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_MBA47,
+ "M-BA47 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMMOUSE,
+ "WingMan Gaming Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BD58,
+ "BD58 mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN58A,
+ "iFeel Mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMPAD,
+ "WingMan GamePad Extreme",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMRPAD,
+ "WingMan RumblePad",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMJOY,
+ "WingMan Force joystick",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_WMFFGP,
+ "WingMan Formula Force GP (GT-Force)",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_ITOUCH,
+ "iTouch Keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB13,
+ "USB-PS/2 Trackball",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_BB18,
+ "TrackMan Wheel",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RK53,
+ "Cordless mouse",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_RB6,
+ "Cordless keyboard",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_CDO,
+ "Cordless Desktop Optical",
+ },
+ {
+ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO2,
+ "QuickCam Pro",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LCMASS,
+ "Emobile D21LC Mass only mode",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_D21LC,
+ "Emobile D21LC",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FU,
+ "IIJmobile 510FU",
+ },
+ {
+ USB_VENDOR_LONGCHEER, USB_PRODUCT_LONGCHEER_510FUMASS,
+ "IIJmobile 510FU Mass only mode",
+ },
+ {
+ USB_VENDOR_LUCENT, USB_PRODUCT_LUCENT_EVALKIT,
+ "USS-720 evaluation kit",
+ },
+ {
+ USB_VENDOR_MACALLY, USB_PRODUCT_MACALLY_MOUSE1,
+ "mouse",
+ },
+ {
+ USB_VENDOR_MARVELL, USB_PRODUCT_MARVELL_SHEEVAPLUG,
+ "SheevaPlug",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0100,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0101,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0102,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0103,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0104,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0105,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0106,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0107,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0108,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0109,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_010F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0110,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0111,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0112,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0113,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0114,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0115,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0116,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0117,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0118,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0119,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_011F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0120,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0121,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0122,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0123,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0124,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0125,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0126,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0127,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0128,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0129,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_012F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0130,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0131,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0132,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0133,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0134,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0135,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0136,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0137,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0138,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0139,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_013F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0140,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0141,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0142,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0143,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0144,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0145,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0146,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0147,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0148,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0149,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_014F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0150,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0151,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0152,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0153,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0154,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0155,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0156,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0157,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0158,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0159,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_015F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0160,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0161,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0162,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0163,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0164,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0165,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0166,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0167,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0168,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0169,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_016F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0170,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0171,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0172,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0173,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0174,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0175,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0176,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0177,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0178,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0179,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_017F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0180,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0181,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0182,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0183,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0184,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0185,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0186,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0187,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0188,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0189,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_018F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0190,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0191,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0192,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0193,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0194,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0195,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0196,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0197,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0198,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_0199,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019A,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019B,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019C,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019D,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019E,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_019F,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01A9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01AF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01B9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01BF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01C9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01CF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01D9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01DF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01E9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01ED,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01EF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F0,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F1,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F2,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F3,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F4,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F5,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F6,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F7,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F8,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01F9,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FA,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FB,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FC,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FD,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FE,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MATRIXORB, USB_PRODUCT_MATRIXORB_LCD_01FF,
+ "LCD",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100,
+ "Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232,
+ "D-Link DU-H3SP BAY Hub",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232,
+ "RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232,
+ "Sitecom RS232",
+ },
+ {
+ USB_VENDOR_MCT, USB_PRODUCT_MCT_ML_4500,
+ "ML-4500",
+ },
+ {
+ USB_VENDOR_MDS, USB_PRODUCT_MDS_ISDBT,
+ "MDS ISDB-T tuner",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_WISPY,
+ "MetaGeek Wi-Spy",
+ },
+ {
+ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_TELLSTICK,
+ "Telldus Tellstick",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_UMASS,
+ "USB MSM installer",
+ },
+ {
+ USB_VENDOR_MEDIATEK, USB_PRODUCT_MEDIATEK_DC_4COM,
+ "UMTS USB modem",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_CASHFLOW_SC,
+ "Cashflow-SC",
+ },
+ {
+ USB_VENDOR_MEI, USB_PRODUCT_MEI_S2000,
+ "Series 2000",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_USB5131,
+ "USB 5131 DCF77 - Radio Clock",
+ },
+ {
+ USB_VENDOR_MEINBERG, USB_PRODUCT_MEINBERG_DCF600USB,
+ "DCF600USB - Radio Clock",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5,
+ "LUA-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5,
+ "LUA2-TX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX,
+ "LUA-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_S11,
+ "WLI-USB-S11",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_MCRSM2,
+ "MCR-SM2 SmartMedia",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG,
+ "USB-IDE Bridge: DUB-PxxG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KS11G,
+ "WLI-USB-KS11G wlan",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2KTX,
+ "LUA-U2-KTX Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KB11,
+ "WLI-USB-KB11 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54YB,
+ "WLI-U2-KG54-YB WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54,
+ "WLI-U2-KG54 WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54AI,
+ "WLI-U2-KG54-AI WLAN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2GT,
+ "LUA-U2-GT Ethernet",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_NINWIFI,
+ "Nintendo Wi-Fi",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIU2KAMG54_NF,
+ "WLI-U2-KAMG54",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_PCOPRS1,
+ "PC-OP-RS1 RemoteStation",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HP,
+ "WLI-U2-SG54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_G54HP,
+ "WLI-U2-G54HP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L,
+ "WLI-U2-KG54L",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N,
+ "WLI-UC-G300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_SG54HG,
+ "WLI-U2-SG54HG",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N,
+ "WLI-UC-AG300N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNHP,
+ "WLI-UC-GNHP",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN,
+ "WLI-UC-GN",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG301N,
+ "WLI-UC-G301N",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM,
+ "WLI-UC-GNM",
+ },
+ {
+ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGNM2,
+ "WLI-UC-GNM2",
+ },
+ {
+ USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24I,
+ "Wi-Spy 2.4i",
+ },
+ {
+ USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
+ "Ricochet GS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,
+ "UPS",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD20X2,
+ "USB-LCD-20x2",
+ },
+ {
+ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD256X64,
+ "USB-LCD-256x64",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_YUREX,
+ "YUREX",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_CAM_1,
+ "CAM_1",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_MICRODIA, USB_PRODUCT_MICRODIA_TEMPERHUM,
+ "TEMPerHUM sensor",
+ },
+ {
+ USB_VENDOR_MICRONET, USB_PRODUCT_MICRONET_SP128AR,
+ "SP128AR EtherFast",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEPREC,
+ "SideWinder Precision Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIMOUSE,
+ "IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_NATURALKBD,
+ "Natural",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_DDS80,
+ "Digital Sound System 80",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_SIDEWINDER,
+ "Sidewinder Precision Racing Wheel",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_TBEXPLORER,
+ "Trackball Explorer",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIEYE,
+ "IntelliEye mouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INETPRO2,
+ "Internet Keyboard Pro",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN510,
+ "MN510 Wireless",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_700WX,
+ "Palm 700WX",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN110,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
+ "Wireless Optical IntelliMouse",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
+ "Wireless Optical Mouse (Model 1023)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK3,
+ "Wireless Optical Mouse 3000 (Model 1049)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
+ "Wireless Optical Mouse 3000 (Model 1056)",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360_CONTROLLER,
+ "XBOX 360 Controller",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360,
+ "XBOX 360 WLAN",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLMOBILEMOUSE3500,
+ "Wireless Mobile Mouse 3500",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_LIFECAM,
+ "Microsoft LifeCam",
+ },
+ {
+ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLARCMOUSE,
+ "Wireless Arc Mouse (Model 1350)",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25,
+ "SCSI-DB25",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIHD50,
+ "SCSI-HD50",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM,
+ "CameraMate",
+ },
+ {
+ USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_FREECOM,
+ "Freecom IDE",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_X6U,
+ "ScanMaker X6 - X6U",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_C6,
+ "Phantom C6",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_336CX2,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6USL2,
+ "ScanMaker V6USL",
+ },
+ {
+ USB_VENDOR_MICROTEK, USB_PRODUCT_MICROTEK_V6UL,
+ "ScanMaker V6UL",
+ },
+ {
+ USB_VENDOR_MIDIMAN, USB_PRODUCT_MIDIMAN_MIDISPORT2X2,
+ "Midisport 2x2",
+ },
+ {
+ USB_VENDOR_MINDSATWORK, USB_PRODUCT_MINDSATWORK_DW,
+ "Digital Wallet",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304,
+ "Dimage S304",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X,
+ "Dimage X",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGE7I,
+ "Dimage 7i",
+ },
+ {
+ USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1,
+ "Dimage A1",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_CDRRW,
+ "CD-R/RW Drive",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_FDD,
+ "FDD",
+ },
+ {
+ USB_VENDOR_MOBILEACTION, USB_PRODUCT_MOBILEACTION_MA620,
+ "MA-620 IrDA",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_ED200H,
+ "EasiDock 200 Serial",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EA,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EASIDOCK,
+ "EasiDock Ethernet",
+ },
+ {
+ USB_VENDOR_MODACOM, USB_PRODUCT_MODACOM_MWIMAX,
+ "MODACOM Mobile wimax adaptor",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703,
+ "MCS7703 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7715,
+ "MCS7715 Serial Parallel",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730,
+ "MCS7730 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7810,
+ "MCS7810 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820,
+ "MCS7820 Serial",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7830,
+ "MCS7830 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7832,
+ "MCS7832 Ethernet",
+ },
+ {
+ USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840,
+ "MCS7840 Serial",
+ },
+ {
+ USB_VENDOR_MOTOROLA, USB_PRODUCT_MOTOROLA_MC141555,
+ "MC141555 hub controller",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
+ "T720c",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_V360,
+ "V360",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2,
+ "USBLAN",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB4100,
+ "SB4100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA3, USB_PRODUCT_MOTOROLA3_SB5100,
+ "SB5100 Cable Modem",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MOXA, USB_PRODUCT_MOXA_UPORT1110,
+ "UPort 1110",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_WLAN,
+ "WLAN",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_8,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_9,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_1,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_10,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_12,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_13,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_11,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_14,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_15,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2573_4,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_AX88772A,
+ "AX88772A",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_2,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSI, USB_PRODUCT_MSI_BLUETOOTH_3,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2,
+ "DiskOnKey",
+ },
+ {
+ USB_VENDOR_MULTITECH, USB_PRODUCT_MULTITECH_ATLAS,
+ "MT5634ZBA modem",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CU,
+ "1200 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600CU,
+ "600 CU",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USB,
+ "1200",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200UB,
+ "1200 UB",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200USBPLUS,
+ "1200 Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_1200CUPLUS,
+ "1200 CU Plus",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_BEARPAW1200F,
+ "BearPaw 1200F",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_600USB,
+ "600",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_MDC800,
+ "MDC-800",
+ },
+ {
+ USB_VENDOR_MUSTEK, USB_PRODUCT_MUSTEK_DV2000,
+ "DV2000",
+ },
+ {
+ USB_VENDOR_MUSTEK2, USB_PRODUCT_MUSTEK2_PM800,
+ "PowerMust 800",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW1200,
+ "BearPaw 1200",
+ },
+ {
+ USB_VENDOR_NATIONAL, USB_PRODUCT_NATIONAL_BEARPAW2400,
+ "BearPaw 2400",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_WL300NUG,
+ "WL300NU-G",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_USB2EXTEND,
+ "Repeater",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_B,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_C,
+ "hub",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY760,
+ "Picty760",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY900,
+ "Picty900",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY920,
+ "Picty920",
+ },
+ {
+ USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY800,
+ "Picty800",
+ },
+ {
+ USB_VENDOR_NEC2, USB_PRODUCT_NEC2_HUB2_0,
+ "USB2.0 Hub",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050,
+ "6-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260,
+ "8-in-1 Flash Device Controller",
+ },
+ {
+ USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010,
+ "Multi-format Flash Controller",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT,
+ "Turbo-Connect",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_CLIK40,
+ "Clik! 40",
+ },
+ {
+ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET,
+ "EthernetGadget",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101X,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA101,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA120,
+ "USB 2.0 Fast Ethernet",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_M7100,
+ "M7100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111NA,
+ "802.11b",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_MA111V2,
+ "802.11b V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V3,
+ "WG111v3",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111U_NF,
+ "WG111U",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WG111V2,
+ "WG111v2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WN111V2,
+ "WN111V2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3100,
+ "WNDA3100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNDA3200,
+ "WNDA3200",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1100,
+ "WNA1100",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000,
+ "WNA1000",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000M,
+ "WNA1000M",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_WNA1000MV2,
+ "WNA1000Mv2",
+ },
+ {
+ USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_N300MA,
+ "N300MA",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101,
+ "MA101",
+ },
+ {
+ USB_VENDOR_NETGEAR2, USB_PRODUCT_NETGEAR2_MA101B,
+ "MA101 Rev B",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_NF,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WG111T_1,
+ "WG111T",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR3, USB_PRODUCT_NETGEAR3_WPN111_NF,
+ "WPN111",
+ },
+ {
+ USB_VENDOR_NETGEAR4, USB_PRODUCT_NETGEAR4_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NETWEEN, USB_PRODUCT_NETWEEN_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_NHJ, USB_PRODUCT_NHJ_CAM2,
+ "Camera",
+ },
+ {
+ USB_VENDOR_NI, USB_PRODUCT_NI_GPIB_USB_A,
+ "GPIB-USB-A",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E990,
+ "E990",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E880,
+ "E880",
+ },
+ {
+ USB_VENDOR_NIKON, USB_PRODUCT_NIKON_E885,
+ "E885",
+ },
+ {
+ USB_VENDOR_NOKIA, USB_PRODUCT_NOKIA_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15UMASS,
+ "Internet Stick CS-15 (umass mode)",
+ },
+ {
+ USB_VENDOR_NOKIA2, USB_PRODUCT_NOKIA2_CS15,
+ "Internet Stick CS-15",
+ },
+ {
+ USB_VENDOR_NORITAKE, USB_PRODUCT_NORITAKE_COMEMO,
+ "Noritake COMEMO",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_NV902W,
+ "NV-902W",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD,
+ "ExpressCard 3G",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620,
+ "V620",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV740,
+ "V740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V720,
+ "V720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740_2,
+ "U740",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U870,
+ "U870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_XU870,
+ "XU870",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_X950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620,
+ "ES620 CDMA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U720,
+ "U720",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EU870D,
+ "EU870D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U727,
+ "U727",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC950D,
+ "MC950D HSUPA",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINX950D,
+ "X950D",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ZEROCD2,
+ "ZeroCD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760CD,
+ "MC760 CD",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U760,
+ "U760",
+ },
+ {
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC760,
+ "MC760",
+ },
+ {
+ USB_VENDOR_NOVATEL1, USB_PRODUCT_NOVATEL1_FLEXPACKGPS,
+ "NovAtel FlexPack GPS",
+ },
+ {
+ USB_VENDOR_O2MICRO, USB_PRODUCT_O2MICRO_OZ776HUB,
+ "OZ776 Hub",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_USBTOETHER,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_OCT, USB_PRODUCT_OCT_US2308,
+ "Serial",
+ },
+ {
+ USB_VENDOR_OLIMEX, USB_PRODUCT_OLIMEX_OPENOCD_JTAG,
+ "OpenOCD JTAG",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1,
+ "C-1",
+ },
+ {
+ USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700,
+ "C-700 Ultra Zoom",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511,
+ "OV511",
+ },
+ {
+ USB_VENDOR_OMNIVISION, USB_PRODUCT_OMNIVISION_OV511PLUS,
+ "OV511+",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX50F,
+ "BX50F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX35F,
+ "BX35F UPS",
+ },
+ {
+ USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BY35S,
+ "BY35S UPS",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2,
+ "disk",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFEB,
+ "MDCFE-B CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SIIGMS,
+ "Memory Stick+CF",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB3,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_DATAFAB4,
+ "Datafab-based",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_PNYCFSM,
+ "PNY/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_STECHCFSM,
+ "Simple Tech/Datafab CF+SM",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_LC1,
+ "CF + SM Combo (LC1)",
+ },
+ {
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II,
+ "Datafab MD1-II PC-Card",
+ },
+ {
+ USB_VENDOR_ONSPEC2, USB_PRODUCT_ONSPEC2_8IN2,
+ "8In2",
+ },
+ {
+ USB_VENDOR_OPENMOKO, USB_PRODUCT_OPENMOKO_N1793D,
+ "Neo1973 Debug",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_ONERNG,
+ "Moonbase Otago OneRNG",
+ },
+ {
+ USB_VENDOR_OPENMOKO2, USB_PRODUCT_OPENMOKO2_CHAOSKEY,
+ "Altusmetrum ChaosKey 1.0",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G,
+ "Vodafone Mobile Connect 3G",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GFUSION,
+ "GlobeTrotter 3G FUSION",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD,
+ "GlobeTrotter 3G QUAD",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUADPLUS,
+ "GlobeTrotter 3G QUAD PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36,
+ "GlobeTrotter MAX 3.6/7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS,
+ "GlobeTrotter 3G PLUS",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_SCORPION,
+ "GlobeTrotter HSDPA Modem",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GSICON72,
+ "GlobeSurfer iCON 7.2",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON225,
+ "iCON 225",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTHSUPA380E,
+ "GlobeTrotter HSUPA 380E",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON322,
+ "iCON 322",
+ },
+ {
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_ICON505,
+ "iCON 505",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_WIFI01,
+ "model 01 WiFi",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_BT01,
+ "model 01 Bluetooth",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01PLUS,
+ "model 01+ Ethernet",
+ },
+ {
+ USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01,
+ "model 01 Ethernet",
+ },
+ {
+ USB_VENDOR_OREGONSCI, USB_PRODUCT_OREGONSCI_OWL_CM160,
+ "OWL CM-160",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID,
+ "Solid state disk",
+ },
+ {
+ USB_VENDOR_OTI, USB_PRODUCT_OTI_DKU5,
+ "DKU-5 Serial",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_OWEN, USB_PRODUCT_OWEN_AC4,
+ "AC4 USB-RS485",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500,
+ "Palm m500",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505,
+ "Palm m505",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M515,
+ "Palm m515",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_I705,
+ "Palm i705",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_Z,
+ "Palm Tungsten Z",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125,
+ "Palm m125",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_M130,
+ "Palm m130",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_T,
+ "Palm Tungsten T",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE_31,
+ "Palm Zire 31",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE,
+ "Palm Zire",
+ },
+ {
+ USB_VENDOR_PALM, USB_PRODUCT_PALM_SERIAL,
+ "USB Serial Adaptor",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_LS120,
+ "LS-120",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_SDCAAE,
+ "MultiMediaCard",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_TYTP50P6S,
+ "TY-TP50P6-S 50in Touch Panel",
+ },
+ {
+ USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_N5HBZ0000055,
+ "UB94",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_1,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_1,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_1,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485_2,
+ "SB485 USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AP485_2,
+ "AP485 USB-RS485",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB422_2,
+ "SB422 USB-RS422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485S,
+ "SB485S USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB485C,
+ "SB485C USB-485/422",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_LEC,
+ "Serial",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SB232,
+ "SB232 USB-RS232",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_TMU,
+ "TMU Thermometer",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_IRAMP,
+ "IRAmp Duplex",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK5,
+ "DRAK5",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO88,
+ "QUIDO USB 8/8",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO44,
+ "QUIDO USB 4/4",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO22,
+ "QUIDO USB 2/2",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO101,
+ "QUIDO USB 10/1",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO303,
+ "QUIDO USB 30/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO603,
+ "QUIDO USB 60(100)/3",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO216,
+ "QUIDO USB 2/16",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_QUIDO332,
+ "QUIDO USB 3/32",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_DRAK6,
+ "DRAK6 USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_STAVOVY,
+ "UPS-USB Stavovy",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_MUC,
+ "MU Controller",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_SIMUKEY,
+ "SimuKey",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_AD4USB,
+ "AD4USB",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MUX,
+ "GOLIATH MUX",
+ },
+ {
+ USB_VENDOR_PAPOUCH, USB_PRODUCT_PAPOUCH_GOLIATH_MSR,
+ "GOLIATH MSR",
+ },
+ {
+ USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER,
+ "6 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE,
+ "3 in 1",
+ },
+ {
+ USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK,
+ "Disk",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1,
+ "Serial Converter",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET3,
+ "At-Home Ethernet",
+ },
+ {
+ USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET2,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WM168B,
+ "WM-168b",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_WL503IA,
+ "WL-503IA",
+ },
+ {
+ USB_VENDOR_PHEENET, USB_PRODUCT_PHEENET_GWU513,
+ "GWU513",
+ },
+ {
+ USB_VENDOR_PHIDGETS, USB_PRODUCT_PHIDGETS_2X2,
+ "2x2 Interface Kit",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS350,
+ "DSS 350 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS,
+ "DSS XXX Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_HUB,
+ "hub",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA645VC,
+ "PCA645VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCA646VC,
+ "PCA646VC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC675K,
+ "PCVC675K Vesta",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC680K,
+ "PCVC680K Vesta Pro",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC690K,
+ "PCVC690K Vesta Pro Scan Camera",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC730K,
+ "PCVC730K ToUCam Fun",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC740K,
+ "PCVC740K ToUCam Pro PC",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC750K,
+ "PCVC750K ToUCam Pro Scan",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS150,
+ "DSS 150 Digital Speaker System",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_ACE1001,
+ "AKTAKOM ACE-1001",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_CPWUA054,
+ "CPWUA054",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU6500_NF,
+ "SNU6500",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600,
+ "SNU5600",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5630NS05,
+ "SNU5630NS/05",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DIVAUSB,
+ "DIVA mp3 player",
+ },
+ {
+ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI, USB_PRODUCT_PHILIPSSEMI_HUB1122,
+ "hub",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_PS2USB,
+ "PS2 to Mac",
+ },
+ {
+ USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_XKEYS,
+ "Xkeys Programmable Keyboard",
+ },
+ {
+ USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600,
+ "CRW-600 6-in-1",
+ },
+ {
+ USB_VENDOR_PLANEX, USB_PRODUCT_PLANEX_GW_US11H,
+ "GW-US11H WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US11S,
+ "GW-US11S WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS,
+ "GW-US54GXS WLAN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US300,
+ "GW-US300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54HP,
+ "GW-US54HP",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS,
+ "GW-US300MiniS",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSNANO,
+ "GW-USNano",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRO300,
+ "GW-USMicro300",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54MINI2,
+ "GW-US54Mini2",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54SG,
+ "GW-US54SG",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL,
+ "GW-US54GZL",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD,
+ "GW-US54GD",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMM,
+ "GW-USMM",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON,
+ "GW-USMicroN",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON2W,
+ "GW-USMicroN2W",
+ },
+ {
+ USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ,
+ "GW-US54GZ",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GU1000T,
+ "GU-1000T",
+ },
+ {
+ USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI,
+ "GW-US54Mini",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_GWUS54ZGL,
+ "GW-US54ZGL",
+ },
+ {
+ USB_VENDOR_PLANEX4, USB_PRODUCT_PLANEX4_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
+ "DSP-400 Headset",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_TESTBOARD,
+ "test board",
+ },
+ {
+ USB_VENDOR_PLX, USB_PRODUCT_PLX_CA42,
+ "CA-42 Serial",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA8,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA9,
+ "Ethernet",
+ },
+ {
+ USB_VENDOR_PORTSMITH, USB_PRODUCT_PORTSMITH_EEA,
+ "Express Ethernet",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_1,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_POSIFLEX, USB_PRODUCT_POSIFLEX_PP7000_2,
+ "PP7000 series printer",
+ },
+ {
+ USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH,
+ "Travel Flash Drive",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2X300,
+ "G2-200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E300,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2300,
+ "G2-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E3002,
+ "G2E-300",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_9600,
+ "Colorado 9600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_600U,
+ "Colorado 600u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_6200,
+ "Visioneer 6200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_19200,
+ "Colorado 19200",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_1200U,
+ "Colorado 1200u",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_636I,
+ "ReadyScan 636i",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2600,
+ "G2-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_G2E600,
+ "G2E-600",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_COMFORT,
+ "Comfort",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_MOUSEINABOX,
+ "Mouse-in-a-Box",
+ },
+ {
+ USB_VENDOR_PRIMAX, USB_PRODUCT_PRIMAX_PCGAUMS1,
+ "Sony PCGA-UMS1",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301,
+ "PL2301 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302,
+ "PL2302 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303BENQ,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2305,
+ "Parallel printer",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_ATAPI4,
+ "ATAPI-4 Bridge Controller",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501,
+ "PL2501 Host-Host",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303X2,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_PUTERCOM, USB_PRODUCT_PUTERCOM_UPA100,
+ "USB-1284 BRIDGE",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2573_3,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_MODEM,
+ "CDMA MSM modem",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA2,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA3,
+ "HSDPA MSM",
+ },
+ {
+ USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_DRIVER2,
+ "MSM driver",
+ },
+ {
+ USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_MSM_PHONE,
+ "CDMA MSM phone",
+ },
+ {
+ USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_UMASS,
+ "Quanta USB MSM (umass mode)",
+ },
+ {
+ USB_VENDOR_QUANTA2, USB_PRODUCT_QUANTA2_Q101,
+ "Quanta Q101 HSDPA USB modem",
+ },
+ {
+ USB_VENDOR_QUICKSHOT, USB_PRODUCT_QUICKSHOT_STRIKEPAD,
+ "USB StrikePad",
+ },
+ {
+ USB_VENDOR_RADIOSHACK, USB_PRODUCT_RADIOSHACK_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_RAINBOW, USB_PRODUCT_RAINBOW_IKEY2000,
+ "i-Key 2000",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070,
+ "RT2070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_2,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2671,
+ "RT2671",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770,
+ "RT2770",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3370,
+ "RT3370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572,
+ "RT3572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3573,
+ "RT3573",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5370,
+ "RT5370",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT5572,
+ "RT5572",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_MT7601,
+ "MT7601",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT8070,
+ "RT8070",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_3,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2573_2,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60,
+ "USB serial REX-USB60",
+ },
+ {
+ USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60F,
+ "REX-USB60F",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188ETV,
+ "RTL8188ETV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CTV,
+ "RTL8188CTV",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_2,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_4,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8150,
+ "RTL8150",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8151,
+ "RTL8151 PNA",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152,
+ "RTL8152",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153,
+ "RTL8153",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8156,
+ "RTL8156",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_0,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8171,
+ "RTL8171",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8172,
+ "RTL8172",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8173,
+ "RTL8173",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8174,
+ "RTL8174",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_0,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8191CU,
+ "RTL8191CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188EU,
+ "RTL8188EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_1,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CE_1,
+ "RTL8188CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188RU_3,
+ "RTL8188RU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192CE_VAU,
+ "RTL8192CE",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_0,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CUS,
+ "RTL8188CUS",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_3,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192U,
+ "RTL8192U",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_1,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8187B_2,
+ "RTL8187B",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_5,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8712,
+ "RTL8712",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8713,
+ "RTL8713",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8188CU_COMBO,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8723BU,
+ "RTL8723BU",
+ },
+ {
+ USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8192SU,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_RENESAS, USB_PRODUCT_RENESAS_RX610,
+ "RX610 RX-Stick",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC3,
+ "VGP-VCC3 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_2,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC2_3,
+ "VGP-VCC2 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC5,
+ "VGP-VCC5 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC4_2,
+ "VGP-VCC4 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC6,
+ "VGP-VCC6 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC7,
+ "VGP-VCC7 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC8,
+ "VGP-VCC8 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VGPVCC9,
+ "VGP-VCC9 Camera",
+ },
+ {
+ USB_VENDOR_RICOH, USB_PRODUCT_RICOH_VPGVCCX,
+ "VGP-VCCX Camera",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_BLACKBERRY,
+ "BlackBerry",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL_DUAL,
+ "RIM Mass Storage Device",
+ },
+ {
+ USB_VENDOR_RIM, USB_PRODUCT_RIM_PEARL,
+ "BlackBerry pearl",
+ },
+ {
+ USB_VENDOR_ROCKFIRE, USB_PRODUCT_ROCKFIRE_GAMEPAD,
+ "Gamepad 203USB",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA100,
+ "UA-100 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM4,
+ "UM-4 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8850,
+ "SC-8850 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_U8,
+ "U-8 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM2,
+ "UM-2 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8820,
+ "SC-8820 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_PC300,
+ "PC-300 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM1,
+ "UM-1 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SK500,
+ "SK-500 MIDI Keyboard",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SCD70,
+ "SC-D70 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM880N,
+ "UM-880 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD90,
+ "SD-90 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM550,
+ "UM-550 MIDI I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD20,
+ "SD-20 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD80,
+ "SD-80 MIDI Synth",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA700,
+ "UA-700 Audio I/F",
+ },
+ {
+ USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UMONE,
+ "UM-ONE MIDI I/F",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS, USB_PRODUCT_RTSYSTEMS_CT57B,
+ "CT57B Radio Cable",
+ },
+ {
+ USB_VENDOR_SACOM, USB_PRODUCT_SACOM_USB485BL,
+ "USB-485-BL",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A,
+ "XG-760A",
+ },
+ {
+ USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA,
+ "XG-76NA",
+ },
+ {
+ USB_VENDOR_SAITEK, USB_PRODUCT_SAITEK_CYBORG_3D_GOLD,
+ "Cyborg 3D Gold Joystick",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_WIS09ABGN,
+ "WIS09ABGN Wireless LAN adapter",
+ },
+ {
+ USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_SWL2100W,
+ "SWL-2100U",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID2,
+ "Android v2",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_ANDROID,
+ "Android",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_I330,
+ "I330",
+ },
+ {
+ USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_AX88179,
+ "AX88179",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05A,
+ "ImageMate SDDR-05a",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31,
+ "ImageMate SDDR-31",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05,
+ "ImageMate SDDR-05",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR12,
+ "ImageMate SDDR-12",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR09,
+ "ImageMate SDDR-09",
+ },
+ {
+ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR75,
+ "ImageMate SDDR-75",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY, USB_PRODUCT_SANWASUPPLY_JYDV9USB,
+ "JY-DV9USB gamepad",
+ },
+ {
+ USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
+ "Sanyo SCP-4900 Phone",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R,
+ "SL11R-IDE",
+ },
+ {
+ USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_336CX,
+ "Phantom 336CX - C3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2101,
+ "SeaLINK+232 (2101/2105)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2102,
+ "SeaLINK+485 (2102)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2103,
+ "SeaLINK+232I (2103)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2104,
+ "SeaLINK+485I (2104)",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_1,
+ "SeaPORT+2/232 (2201) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_1,
+ "SeaPORT+2/485 (2202) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_1,
+ "SeaPORT+2 (2203) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2201_2,
+ "SeaPORT+2/232 (2201) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2202_2,
+ "SeaPORT+2/485 (2202) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2203_2,
+ "SeaPORT+2 (2203) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_1,
+ "SeaPORT+4/232 (2401) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_1,
+ "SeaPORT+4/485 (2402) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_1,
+ "SeaPORT+4 (2403) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_2,
+ "SeaPORT+4/232 (2401) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_2,
+ "SeaPORT+4/485 (2402) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_2,
+ "SeaPORT+4 (2403) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_3,
+ "SeaPORT+4/232 (2401) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_3,
+ "SeaPORT+4/485 (2402) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_3,
+ "SeaPORT+4 (2403) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2401_4,
+ "SeaPORT+4/232 (2401) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2402_4,
+ "SeaPORT+4/485 (2402) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2403_4,
+ "SeaPORT+4 (2403) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_1,
+ "SeaLINK+8/232 (2801) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_1,
+ "SeaLINK+8/485 (2802) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_1,
+ "SeaLINK+8 (2803) Port 1",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_2,
+ "SeaLINK+8/232 (2801) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_2,
+ "SeaLINK+8/485 (2802) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_2,
+ "SeaLINK+8 (2803) Port 2",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_3,
+ "SeaLINK+8/232 (2801) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_3,
+ "SeaLINK+8/485 (2802) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_3,
+ "SeaLINK+8 (2803) Port 3",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_4,
+ "SeaLINK+8/232 (2801) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_4,
+ "SeaLINK+8/485 (2802) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_4,
+ "SeaLINK+8 (2803) Port 4",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_5,
+ "SeaLINK+8/232 (2801) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_5,
+ "SeaLINK+8/485 (2802) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_5,
+ "SeaLINK+8 (2803) Port 5",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_6,
+ "SeaLINK+8/232 (2801) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_6,
+ "SeaLINK+8/485 (2802) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_6,
+ "SeaLINK+8 (2803) Port 6",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_7,
+ "SeaLINK+8/232 (2801) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_7,
+ "SeaLINK+8/485 (2802) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_7,
+ "SeaLINK+8 (2803) Port 7",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2801_8,
+ "SeaLINK+8/232 (2801) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2802_8,
+ "SeaLINK+8/485 (2802) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2803_8,
+ "SeaLINK+8 (2803) Port 8",
+ },
+ {
+ USB_VENDOR_SEALEVEL, USB_PRODUCT_SEALEVEL_2106,
+ "SeaLINK+422 (2106)",
+ },
+ {
+ USB_VENDOR_SEL, USB_PRODUCT_SEL_C662,
+ "C662",
+ },
+ {
+ USB_VENDOR_SELUXIT, USB_PRODUCT_SELUXIT_RF,
+ "RF Dongle",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301,
+ "NUB-8301",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB862,
+ "NUB-862",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_1,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RTL8192SU_2,
+ "RTL8192SU",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071,
+ "RT3071",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SERVERWORKS, USB_PRODUCT_SERVERWORKS_HUB,
+ "Root Hub",
+ },
+ {
+ USB_VENDOR_SGI, USB_PRODUCT_SGI_SN1_L1_SC,
+ "SN1 L1 System Controller",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ST268,
+ "ST268",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620A,
+ "DM9620A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621A,
+ "DM9621A",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ZT6688,
+ "ZT6688",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515,
+ "ADM8515 Ethernet",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9000E,
+ "DM9000E",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9620,
+ "DM9620",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9621,
+ "DM9621",
+ },
+ {
+ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9622,
+ "DM9622",
+ },
+ {
+ USB_VENDOR_SHARK, USB_PRODUCT_SHARK_PA,
+ "Pocket Adapter",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500,
+ "SL5500",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300,
+ "A300",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600,
+ "SL5600",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700,
+ "C700",
+ },
+ {
+ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750,
+ "C750",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB,
+ "E-USB Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SDDR09,
+ "ImageMate SDDR09",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBSMCF,
+ "eUSB SmartMedia / CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC,
+ "eUSB MultiMediaCard",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_HIFD,
+ "Sony Hifd",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBATAPI,
+ "eUSB ATA/ATAPI",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CF,
+ "eUSB CompactFlash",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_B,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI_C,
+ "eUSCSI Bridge",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CDRW,
+ "CD-RW Device",
+ },
+ {
+ USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SCM,
+ "SCM Micro",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM,
+ "SpeedStream",
+ },
+ {
+ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM22,
+ "SpeedStream 1022",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_WLL013,
+ "WLL013",
+ },
+ {
+ USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
+ "GSM module MC35",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_SX1,
+ "SX1",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X65,
+ "X65",
+ },
+ {
+ USB_VENDOR_SIEMENS3, USB_PRODUCT_SIEMENS3_X75,
+ "X75",
+ },
+ {
+ USB_VENDOR_SIEMENS4, USB_PRODUCT_SIEMENS4_RUGGEDCOM,
+ "RUGGEDCOM",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM5625,
+ "EM5625",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_595,
+ "AirCard 595",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC597E,
+ "597E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C597,
+ "Compass 597",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_580,
+ "Aircard 580 EVDO",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC595U,
+ "595U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720_2,
+ "MC5720",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725_2,
+ "MC5725",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_TRUINSTALL,
+ "Aircard Tru Installer",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_2,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8765,
+ "MC8765",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3,
+ "MC8755",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775_2,
+ "MC8775",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_875,
+ "875",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8780,
+ "MC8780",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8781,
+ "MC8781",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8790,
+ "MC8790",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880,
+ "880",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881,
+ "881",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880E,
+ "880E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881E,
+ "881E",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC880U,
+ "880U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC881U,
+ "881U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AC885U,
+ "885U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_C01SW,
+ "C01SW",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7700,
+ "MC7700",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_USB305,
+ "USB305",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7304,
+ "MC7304",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8355,
+ "MC8355",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_340U,
+ "Aircard 340U",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_770S,
+ "Aircard 770S",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC7455,
+ "MC7455",
+ },
+ {
+ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM7455,
+ "EM7455",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_IRDA,
+ "IrDA",
+ },
+ {
+ USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X,
+ "Datum Networks SSF-7X Multi Players",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_DIGIFILMREADER,
+ "DigiFilm-Combo",
+ },
+ {
+ USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER,
+ "MULTICARDREADER",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_VSTABI,
+ "VStabi Controller",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_M,
+ "Arkham DS101 Monitor",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARKHAM_DS101_A,
+ "Arkham DS101 Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BSM7DUSB,
+ "BSM7-D-USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_POLOLU,
+ "Pololu Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_DEBUG,
+ "Cygnal Debug Adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SB_PARAMOUNT_ME2,
+ "Software Bisque Paramount ME",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EDG1228,
+ "EDG1228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_GSM2228,
+ "Enfora GSM2228",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP,
+ "Argussoft ISP",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IMS_USB_RS422,
+ "IMS USB-RS422",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128,
+ "Crumb128",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_OPTRIS_MSPRO,
+ "Optris MSpro LT Thermometer",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEGREECONT,
+ "Degree Controls",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRACIENT,
+ "Tracient RFID",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TRAQMATE,
+ "Track Systems Traqmate",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_SUUNTO,
+ "Suunto sports",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARYGON_MIFARE,
+ "Arygon Mifare RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DESKTOPMOBILE,
+ "Burnside Desktop mobile",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TAMSMASTER,
+ "Tams Master Easy Control",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGBLASTER,
+ "RIGblaster P&P",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_RIGTALK,
+ "RIGtalk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_B_G_H3000,
+ "B&G H3000 Data Cable",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IPLINK1220,
+ "IP-Link 1220",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HAMLINKUSB,
+ "Timewave HamLinkUSB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AVIT_USB_TTL,
+ "AVIT Research USB-TTL",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MJS_TOSLINK,
+ "MJS USB-TOSLINK",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_WAVIT,
+ "ThinkOptics WavIt",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MULTIPLEX_RC,
+ "Multiplex RC adapter",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MSD_DASHHAWK,
+ "MSD DashHawk",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INSYS_MODEM,
+ "INSYS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_JTAG,
+ "Lipowsky Baby-JTAG",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_LIN,
+ "Lipowsky Baby-LIN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AEROCOMM,
+ "Aerocomm Radio",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ZEPHYR_BIO,
+ "Zephyr Bioharness",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EMS_C1007,
+ "EMS C1007 HF RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_LIPOWSKY_HARP,
+ "Lipowsky HARP-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_C2_EDGE_MODEM,
+ "Commander 2 EDGE(GSM) Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL_GPS,
+ "Cygnal Fasttrax GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PLUGDRIVE,
+ "Nanotec Plug & Drive",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_TELEGESIS_ETRX2,
+ "Telegesis ETRX2USB",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PROCYON_AVS,
+ "Procyon AVS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MC35PU,
+ "MC35pu",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CYGNAL,
+ "Cygnal",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AMBER_AMB2560,
+ "Amber Wireless AMB2560",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_DEKTEK_DTAPLUS,
+ "DekTec DTA Plus VHF/UHF Booster",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KYOCERA_GPS,
+ "Kyocera GPS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_IRZ_SG10,
+ "IRZ SG-10 GSM/GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BEI_VCP,
+ "BEI USB Sensor (VCP)",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_JUNIPER_BX_CONS,
+ "Juniper BX Console",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_BALLUFF_RFID,
+ "Balluff RFID reader",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_IBUS,
+ "AC-Services IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CIS,
+ "AC-Services CIS-IBUS",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PREON32,
+ "Virtenio Preon32",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_CAN,
+ "AC-Services CAN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_AC_SERV_OBD,
+ "AC-Services OBD",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357LR,
+ "CEL EM357 LR",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EM357,
+ "CEL EM357",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_MMB_ZIGBEE,
+ "MMB Networks ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_PII_ZIGBEE,
+ "Planet Innovation Ingeni ZigBee",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KETRA_N1,
+ "Ketra N1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CELDEVKIT,
+ "CEL MeshWorks DevKit",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_KCF_PRN,
+ "KCF Technologies PRN",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_HUBZ,
+ "HubZ ZigBee/Z-Wave",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_1,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_2,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP210X_3,
+ "CP210x Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_INFINITY_MIC,
+ "Infinity GPS-MIC-1",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CP2110,
+ "CP2110 USB HID Serial",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBSCOPE50,
+ "USBscope50",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBWAVE12,
+ "USBwave12",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBPULSE100,
+ "USBpulse100",
+ },
+ {
+ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_USBCOUNT50,
+ "USBcount50",
+ },
+ {
+ USB_VENDOR_SILABS2, USB_PRODUCT_SILABS2_DCU11CLONE,
+ "DCU-11 clone",
+ },
+ {
+ USB_VENDOR_SILABS3, USB_PRODUCT_SILABS3_GPRS_MODEM,
+ "GPRS Modem",
+ },
+ {
+ USB_VENDOR_SILABS4, USB_PRODUCT_SILABS4_100EU_MODEM,
+ "GPRS Modem 100EU",
+ },
+ {
+ USB_VENDOR_SILABS5, USB_PRODUCT_SILABS5_EM358X,
+ "EM358x",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_U2E,
+ "U2E",
+ },
+ {
+ USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_GPE,
+ "Psion Dacom Gold Port Ethernet",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPH_NF,
+ "YAP Phone (no firmware)",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
+ "YAP Phone",
+ },
+ {
+ USB_VENDOR_SIMCOM, USB_PRODUCT_SIMCOM_SIM7600E,
+ "SIM7600E modem",
+ },
+ {
+ USB_VENDOR_SIRIUS, USB_PRODUCT_SIRIUS_ROADSTER,
+ "NetComm Roadster II 56",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_LN029,
+ "LN029",
+ },
+ {
+ USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_CN104,
+ "CN104",
+ },
+ {
+ USB_VENDOR_SITECOM2, USB_PRODUCT_SITECOM2_WL022,
+ "WL-022",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V1,
+ "WL-168 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN030,
+ "LN-030",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL168V4,
+ "WL-168 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL302,
+ "WL-302",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL603,
+ "WL-603",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL315,
+ "WL-315",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL321,
+ "WL-321",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL324,
+ "WL-324",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL343,
+ "WL-343",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608,
+ "WL-608",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL344,
+ "WL-344",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL329,
+ "WL-329",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL345,
+ "WL-345",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL353,
+ "WL-353",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V1,
+ "WL-349 v1",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL349V4,
+ "WL-349 v4",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_1,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8188CU_2,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA4000,
+ "WLA-4000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA5000,
+ "WLA-5000",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RTL8192CU_2,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN032,
+ "LN-032",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WLA2100V2,
+ "WLA-2100 v2",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028,
+ "LN-028",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113,
+ "WL-113",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL172,
+ "WL-172",
+ },
+ {
+ USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113R2,
+ "WL-113 rev 2",
+ },
+ {
+ USB_VENDOR_SMART, USB_PRODUCT_SMART_PL2303,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTLINK,
+ "SmartLink Ethernet",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC,
+ "smartNIC 2 PnP",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2102USB,
+ "10Mbps Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB,
+ "10/100 Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2206USB,
+ "EZ Connect Ethernet",
+ },
+ {
+ USB_VENDOR_SMC, USB_PRODUCT_SMC_2862WG,
+ "EZ Connect 54Mbps",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2020HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2504HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_2513HUB,
+ "Hub",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7500,
+ "LAN7500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7505,
+ "LAN7505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7800,
+ "LAN7800",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7801,
+ "LAN7801",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN7850,
+ "LAN7850",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9530,
+ "LAN9530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN9730,
+ "LAN9730",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_SAL10,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505_SAL10,
+ "SMSC9505",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_SAL10,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_SAL10,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_SAL10,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_HAL,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A_HAL,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500_ALT,
+ "SMSC9500",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A_ALT,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14_ALT,
+ "SMSC9512",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9500A,
+ "SMSC9500A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9505A,
+ "SMSC9505A",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_LAN89530,
+ "LAN89530",
+ },
+ {
+ USB_VENDOR_SMC2, USB_PRODUCT_SMC2_SMSC9512_14,
+ "SMSC9512/14",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV1,
+ "EZ Connect 11Mbps",
+ },
+ {
+ USB_VENDOR_SMC3, USB_PRODUCT_SMC3_2662WV2,
+ "EZ Connect 11Mbps v2",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100,
+ "NUB100 Ethernet",
+ },
+ {
+ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB110,
+ "NUB110 Ethernet",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR, USB_PRODUCT_SOLIDYEAR_KEYBOARD,
+ "Keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC,
+ "DSC Cameras",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_NWMS7,
+ "Memorystick NW-MS7",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2,
+ "Harddrive V2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSACUS1,
+ "Memorystick MSAC-US1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM,
+ "Handycam",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC,
+ "MSC Memorystick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35,
+ "Clie v3.5",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARD,
+ "PlayStation2 keyboard",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2KEYBOARDHUB,
+ "PlayStation2 keyboard hub",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_PS2MOUSE,
+ "PlayStation2 mouse",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40,
+ "Clie v4.0",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40_MS,
+ "Clie v4.0 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360,
+ "Clie s360",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41_MS,
+ "Clie v4.1 Memory Stick",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41,
+ "Clie v4.1",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60,
+ "Clie nx60",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TJ25,
+ "Clie tj25",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_IFU_WLM2,
+ "IFU-WLM2",
+ },
+ {
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_CXD9192,
+ "1seg TV tuner",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8_CHG,
+ "KeikaiDenwa 8 with charger",
+ },
+ {
+ USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8,
+ "KeikaiDenwa 8",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON, USB_PRODUCT_SPEEDDRAGON_MS3303H,
+ "MS3303H Serial",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_UB801R,
+ "UB801R",
+ },
+ {
+ USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_RTL8187,
+ "RTL8187",
+ },
+ {
+ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X,
+ "ICUSB2321X/2X/4X",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_BIOMETRIC_COPR,
+ "Biometric Coprocessor",
+ },
+ {
+ USB_VENDOR_STMICRO, USB_PRODUCT_STMICRO_COMMUNICATOR,
+ "Communicator",
+ },
+ {
+ USB_VENDOR_STOLLMANN, USB_PRODUCT_STOLLMANN_ISDN_TA_USBA,
+ "ISDN TA+USBA",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX, USB_PRODUCT_STRAWBERRYLINUX_USBRH,
+ "USBRH sensor",
+ },
+ {
+ USB_VENDOR_STSN, USB_PRODUCT_STSN_STSN0001,
+ "Internet Access Device",
+ },
+ {
+ USB_VENDOR_SUNCOMM, USB_PRODUCT_SUNCOMM_MB_ADAPTOR,
+ "Mobile Adaptor",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_DS96L,
+ "U-Cable type D2",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_PS64P1,
+ "U-Cable type P1",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U,
+ "Slipper U",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_IS96U,
+ "Ir-Trinity",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX,
+ "U-Cable type A3",
+ },
+ {
+ USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4,
+ "U-Cable type A4",
+ },
+ {
+ USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
+ "SuperTop IDE Bridge",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_EP9001G2A,
+ "EP-9001-G rev 2A",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_SUSTEEN, USB_PRODUCT_SUSTEEN_DCU11,
+ "Ericsson DCU-10/11",
+ },
+ {
+ USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW153,
+ "LW153",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW154,
+ "LW154",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303,
+ "LW303",
+ },
+ {
+ USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313,
+ "LW313",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_SYNTECH, USB_PRODUCT_SYNTECH_CIPHERLAB100,
+ "CipherLab Barcode Scanner",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS, USB_PRODUCT_SYSTEMTALKS_SGCX2UL,
+ "SGC-X2UL",
+ },
+ {
+ USB_VENDOR_TANGTOP, USB_PRODUCT_TANGTOP_USBPS2,
+ "USBPS2",
+ },
+ {
+ USB_VENDOR_TAPWAVE, USB_PRODUCT_TAPWAVE_ZODIAC,
+ "Zodiac",
+ },
+ {
+ USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE,
+ "CameraMate (DPCM_USB)",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_2,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMSM_3,
+ "Modem mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS_2,
+ "Storage mode",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA9664,
+ "USB-PDC Adapter UPA9664",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UCA1464,
+ "USB-cdmaOne Adapter UCA1464",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UHA6400,
+ "USB-PHS Adapter UHA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_UPA6400,
+ "USB-PHS Adapter UPA6400",
+ },
+ {
+ USB_VENDOR_TDK, USB_PRODUCT_TDK_BLUETOOTH,
+ "Bluetooth",
+ },
+ {
+ USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB,
+ "FD-05PUB",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_0193,
+ "ALLNET 0193 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZYAIR_B200,
+ "ZyXEL ZyAIR B200 WLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_U300C,
+ "U-300C",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN,
+ "QuickWLAN",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1,
+ "Microphone",
+ },
+ {
+ USB_VENDOR_TENDA, USB_PRODUCT_TENDA_TWL541U,
+ "TWL541U WLAN",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE,
+ "Missile Launcher",
+ },
+ {
+ USB_VENDOR_TENX, USB_PRODUCT_TENX_TEMPER,
+ "TEMPer sensor",
+ },
+ {
+ USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON,
+ "Aureon Dual USB",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_175,
+ "175/177 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_330,
+ "330 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_435,
+ "435/635/735 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_845,
+ "845 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERVICE,
+ "Service adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_580,
+ "580 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_174,
+ "174 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_556,
+ "556/560 USB interface",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_1,
+ "USB adapter",
+ },
+ {
+ USB_VENDOR_TESTO, USB_PRODUCT_TESTO_SERIAL_2,
+ "USB to serial converter",
+ },
+ {
+ USB_VENDOR_THRUST, USB_PRODUCT_THRUST_FUSION_PAD,
+ "Fusion Digital Gamepad",
+ },
+ {
+ USB_VENDOR_THURLBY, USB_PRODUCT_THURLBY_QL355P,
+ "QL355P power supply",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41,
+ "UT-USB41 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB2046,
+ "TUSB2046 hub",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB3410,
+ "TUSB3410",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_NEXII,
+ "Nex II Digital",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430_JTAG,
+ "MSP-FET430UIF JTAG",
+ },
+ {
+ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430,
+ "MSP-FET430UIF",
+ },
+ {
+ USB_VENDOR_TML, USB_PRODUCT_TML_SERIAL,
+ "Serial",
+ },
+ {
+ USB_VENDOR_TODOS, USB_PRODUCT_TODOS_ARGOS_MINI,
+ "Argos Mini Smartcard",
+ },
+ {
+ USB_VENDOR_TOPRE, USB_PRODUCT_TOPRE_HHKB,
+ "HHKB Professional",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RH,
+ "Toradex OAK RH sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_P,
+ "Toradex OAK P sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LUX,
+ "Toradex OAK LUX sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_TILT,
+ "Toradex OAK Tilt sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_DIST,
+ "Toradex OAK DIST sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MOVE,
+ "Toradex OAK MOVE sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_4_20,
+ "Toradex OAK 4-20mA sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_G,
+ "Toradex OAK G sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_MAGR,
+ "Toradex OAK MAGR sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_RELAY,
+ "Toradex OAK RELAY",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_10V,
+ "Toradex OAK 10V sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_LN,
+ "Toradex OAK LN sensor",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_IO,
+ "Toradex OAK IO",
+ },
+ {
+ USB_VENDOR_TORADEX, USB_PRODUCT_TORADEX_ORIENT,
+ "Toradex ORIENT Tilt sensor",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_HSDPA,
+ "HSDPA",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB,
+ "ThumbDrive 8MB",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8188CU,
+ "RTL8188CU",
+ },
+ {
+ USB_VENDOR_TRIPPLITE, USB_PRODUCT_TRIPPLITE_U209,
+ "U209 Serial",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_T33521,
+ "USB/MP3 decoder",
+ },
+ {
+ USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100,
+ "XXX 1100",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_OPTMOUSE,
+ "Optical Mouse",
+ },
+ {
+ USB_VENDOR_TRUST, USB_PRODUCT_TRUST_MOUSE,
+ "Mouse",
+ },
+ {
+ USB_VENDOR_TSUNAMI, USB_PRODUCT_TSUNAMI_SM2000,
+ "SM-2000",
+ },
+ {
+ USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240,
+ "G240",
+ },
+ {
+ USB_VENDOR_UBLOX, USB_PRODUCT_UBLOX_ANTARIS4,
+ "ANTARIS4 GPS",
+ },
+ {
+ USB_VENDOR_ULTIMA, USB_PRODUCT_ULTIMA_1200UBPLUS,
+ "1200 UB Plus",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1236U,
+ "Astra 1236U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1220U,
+ "Astra 1220U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2000U,
+ "Astra 2000U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA3400,
+ "Astra 3400",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2100U,
+ "Astra 2100U",
+ },
+ {
+ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA2200U,
+ "Astra 2200U",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW444UBEU_NF,
+ "TEW-444UB EU",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A,
+ "TEW-429UB_A",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB,
+ "TEW-429UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1,
+ "TEW-429UB C1",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW645UB,
+ "TEW-645UB",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2,
+ "ALL0298 v2",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_UNIACCESS, USB_PRODUCT_UNIACCESS_PANACHE,
+ "Panache Surf ISDN",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN2, USB_PRODUCT_UNKNOWN2_NW3100,
+ "NW-3100",
+ },
+ {
+ USB_VENDOR_UNKNOWN3, USB_PRODUCT_UNKNOWN3_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_UNKNOWN4, USB_PRODUCT_UNKNOWN4_RD9700,
+ "RD9700",
+ },
+ {
+ USB_VENDOR_UNKNOWN5, USB_PRODUCT_UNKNOWN5_NF_RIC,
+ "NF RIC",
+ },
+ {
+ USB_VENDOR_UNKNOWN6, USB_PRODUCT_UNKNOWN6_DM9601,
+ "DM9601",
+ },
+ {
+ USB_VENDOR_USI, USB_PRODUCT_USI_MC60,
+ "MC60 Serial",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR1120,
+ "USR1120 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_A_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_HEINEKEN_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_MILLER_B_NF,
+ "USR9000 SureConnect ADSL",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5422,
+ "USR5422 WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5421A,
+ "USR5421A WLAN",
+ },
+ {
+ USB_VENDOR_USR, USB_PRODUCT_USR_USR5423,
+ "USR5423 WLAN",
+ },
+ {
+ USB_VENDOR_VAISALA, USB_PRODUCT_VAISALA_USBINSTCABLE,
+ "USB instrument cable",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS101,
+ "VFS101 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS301,
+ "VFS301 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS451,
+ "VFS451 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS300,
+ "VFS300 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_2,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5011_3,
+ "VFS5011 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VALIDITY, USB_PRODUCT_VALIDITY_VFS5471,
+ "VFS471 Fingerprint Reader",
+ },
+ {
+ USB_VENDOR_VELLEMAN, USB_PRODUCT_VELLEMAN_K8055,
+ "K8055 USB Experiment interface board",
+ },
+ {
+ USB_VENDOR_VERTEX, USB_PRODUCT_VERTEX_VW110L,
+ "VW110L",
+ },
+ {
+ USB_VENDOR_VIA, USB_PRODUCT_VIA_AR9271,
+ "AR9271",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773HUB,
+ "G773 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_P815HUB,
+ "P815 Monitor Hub",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_AIRSYNC,
+ "Airsync",
+ },
+ {
+ USB_VENDOR_VIEWSONIC, USB_PRODUCT_VIEWSONIC_G773CTRL,
+ "G773 Monitor Control",
+ },
+ {
+ USB_VENDOR_VISION, USB_PRODUCT_VISION_VC6452V002,
+ "CPiA Camera",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_7600,
+ "OneTouch 7600",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_5300,
+ "OneTouch 5300",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_3000,
+ "Scanport 3000",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6100,
+ "OneTouch 6100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_6200,
+ "OneTouch 6200",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8100,
+ "OneTouch 8100",
+ },
+ {
+ USB_VENDOR_VISIONEER, USB_PRODUCT_VISIONEER_8600,
+ "OneTouch 8600",
+ },
+ {
+ USB_VENDOR_VIVITAR, USB_PRODUCT_VIVITAR_DSC350,
+ "DSC350",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_1,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VOTI, USB_PRODUCT_VOTI_SELETEK_2,
+ "Lunatico Seletek",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_CT0405U,
+ "CT-0405-U Tablet",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE,
+ "Graphire",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_4X5,
+ "Graphire3 4x5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_4X5,
+ "Graphire4 Classic A6",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOSA5,
+ "Intuos A5",
+ },
+ {
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW,
+ "Intuos Draw (CTL-490)",
+ },
+ {
+ USB_VENDOR_WAGO, USB_PRODUCT_WAGO_SERVICECABLE,
+ "Service Cable 750-923",
+ },
+ {
+ USB_VENDOR_WAVESENSE, USB_PRODUCT_WAVESENSE_JAZZ,
+ "Jazz blood glucose meter",
+ },
+ {
+ USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341,
+ "CH341 serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341A,
+ "CH341A serial/parallel",
+ },
+ {
+ USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH340,
+ "CH340 serial/parallel",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_PL512,
+ "PL512 PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_RCM,
+ "RCM Remote Control",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_MPOD,
+ "MPOD PSU",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS, USB_PRODUCT_WIENERPLEINBAUS_CML,
+ "CML Data Logger",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_WNC0600,
+ "WNC-0600USB",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR045G,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G,
+ "UR055G",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_O8494,
+ "ORiNOCO 802.11n",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_1_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_AR5523_2,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_WMR, USB_PRODUCT_WMR_RIGBLASTER,
+ "RIGblaster",
+ },
+ {
+ USB_VENDOR_XIAOMI, USB_PRODUCT_XIAOMI_MT7601U,
+ "MT7601U",
+ },
+ {
+ USB_VENDOR_XIRING, USB_PRODUCT_XIRING_XIMAX,
+ "Ximax CDC",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_IMAGING,
+ "Imaging Device",
+ },
+ {
+ USB_VENDOR_XIRLINK, USB_PRODUCT_XIRLINK_PCCAM,
+ "IBM PC Camera",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_1,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_XYRATEX, USB_PRODUCT_XYRATEX_PRISM_GT_2,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256,
+ "UX256 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX96,
+ "UX96 MIDI I/F",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UR22,
+ "UR22",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RPU200,
+ "RP-U200",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
+ "NetVolante RTA54i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65B,
+ "NetVolante RTW65b",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65I,
+ "NetVolante RTW65i",
+ },
+ {
+ USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA55I,
+ "NetVolante RTA55i",
+ },
+ {
+ USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO,
+ "U640MO-03",
+ },
+ {
+ USB_VENDOR_YCCABLE, USB_PRODUCT_YCCABLE_PL2303,
+ "PL2303 Serial",
+ },
+ {
+ USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU,
+ "Flashbuster-U",
+ },
+ {
+ USB_VENDOR_YUBICO, USB_PRODUCT_YUBICO_YUBIKEY,
+ "Yubikey",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_M4Y750,
+ "M4Y-750",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI725,
+ "XI-725/726",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XI735,
+ "XI-735",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_MD40900,
+ "MD40900",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_XG703A,
+ "PrismGT USB 2.0 WLAN",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_AR5523_NF,
+ "AR5523",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB81,
+ "UB81",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_UB82,
+ "UB82",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2570,
+ "RT2570",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2,
+ "RT3072",
+ },
+ {
+ USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZOOM, USB_PRODUCT_ZOOM_2986L,
+ "2986L Fax Modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_CDMA_MSM,
+ "CDMA Technologies MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF633,
+ "ZTE MF633 USUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637,
+ "ZTE MF637 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z,
+ "ZTE K3565-Z USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP,
+ "ONDA MSA110UP USB MSM modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER2,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF112,
+ "ZTE MF112 HSUPA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_HSUSB,
+ "ZTE HSUSB",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER,
+ "ZTE USB MSM installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC2746,
+ "AC2746 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER3,
+ "ZTE USB CDMA installer",
+ },
+ {
+ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC8700,
+ "AC8700 CDMA USB modem",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1201,
+ "ZD1201",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211,
+ "ZD1211",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1221,
+ "ZD1221",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ALL0298,
+ "ALL0298",
+ },
+ {
+ USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B_2,
+ "ZD1211B",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_OMNI56K,
+ "Omni 56K Plus",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_980N,
+ "Scorpion-980N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220,
+ "G-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220F,
+ "G-220F",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2,
+ "G-200 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H,
+ "AG-225H",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202,
+ "M-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G270S,
+ "G-270S",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2,
+ "G-220 v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G202,
+ "G-202",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG220,
+ "AG-220",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225HV2,
+ "AG-225H v2",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2573,
+ "RT2573",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD271N,
+ "NWD-271N",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD211AN,
+ "NWD-211AN",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_2,
+ "RT2870",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_NWD2105,
+ "NWD2105",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RTL8192CU,
+ "RTL8192CU",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT3070,
+ "RT3070",
+ },
+ {
+ USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_PRESTIGE,
+ "Prestige",
+ },
+ { 0, 0, NULL }
+};
+
+const struct usb_known_vendor usb_known_vendors[] = {
+ {
+ USB_VENDOR_PLANEX4,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_UNKNOWN2,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_EGALAX2,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_UNKNOWN6,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_HUMAX,
+ "HUMAX",
+ },
+ {
+ USB_VENDOR_BWCT,
+ "Bernd Walter Computer Technology",
+ },
+ {
+ USB_VENDOR_AOX,
+ "AOX",
+ },
+ {
+ USB_VENDOR_ATMEL,
+ "Atmel",
+ },
+ {
+ USB_VENDOR_MITSUMI,
+ "Mitsumi",
+ },
+ {
+ USB_VENDOR_HP,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_ADAPTEC,
+ "Adaptec",
+ },
+ {
+ USB_VENDOR_NATIONAL,
+ "National Semiconductor",
+ },
+ {
+ USB_VENDOR_ACERLABS,
+ "Acer Labs",
+ },
+ {
+ USB_VENDOR_FTDI,
+ "Future Technology Devices",
+ },
+ {
+ USB_VENDOR_QUANTA2,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_NEC,
+ "NEC",
+ },
+ {
+ USB_VENDOR_KODAK,
+ "Eastman Kodak",
+ },
+ {
+ USB_VENDOR_VIA,
+ "VIA",
+ },
+ {
+ USB_VENDOR_MELCO,
+ "Melco",
+ },
+ {
+ USB_VENDOR_LEADTEK,
+ "Leadtek",
+ },
+ {
+ USB_VENDOR_CREATIVE,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_NOKIA2,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_ADI,
+ "ADI Systems",
+ },
+ {
+ USB_VENDOR_CATC,
+ "Computer Access Technology",
+ },
+ {
+ USB_VENDOR_SMC2,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_GRAVIS,
+ "Advanced Gravis Computer",
+ },
+ {
+ USB_VENDOR_FUJITSUCOMP,
+ "Fujitsu Component",
+ },
+ {
+ USB_VENDOR_TAUGA,
+ "Taugagreining HF",
+ },
+ {
+ USB_VENDOR_AMD,
+ "Advanced Micro Devices",
+ },
+ {
+ USB_VENDOR_LEXMARK,
+ "Lexmark International",
+ },
+ {
+ USB_VENDOR_NANAO,
+ "NANAO",
+ },
+ {
+ USB_VENDOR_ALPS,
+ "Alps Electric",
+ },
+ {
+ USB_VENDOR_THRUST,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_TI,
+ "Texas Instruments",
+ },
+ {
+ USB_VENDOR_ANALOGDEVICES,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_SIS,
+ "Silicon Integrated Systems Corp.",
+ },
+ {
+ USB_VENDOR_KYE,
+ "KYE Systems",
+ },
+ {
+ USB_VENDOR_DIAMOND2,
+ "Diamond (Supra)",
+ },
+ {
+ USB_VENDOR_RENESAS,
+ "Renesas",
+ },
+ {
+ USB_VENDOR_MICROSOFT,
+ "Microsoft",
+ },
+ {
+ USB_VENDOR_PRIMAX,
+ "Primax Electronics",
+ },
+ {
+ USB_VENDOR_MGE,
+ "Eaton (MGE)",
+ },
+ {
+ USB_VENDOR_AMP,
+ "AMP",
+ },
+ {
+ USB_VENDOR_CHERRY,
+ "Cherry Mikroschalter",
+ },
+ {
+ USB_VENDOR_MEGATRENDS,
+ "American Megatrends",
+ },
+ {
+ USB_VENDOR_LOGITECH,
+ "Logitech",
+ },
+ {
+ USB_VENDOR_BTC,
+ "Behavior Tech. Computer",
+ },
+ {
+ USB_VENDOR_PHILIPS,
+ "Philips",
+ },
+ {
+ USB_VENDOR_SANYO,
+ "Sanyo Electric",
+ },
+ {
+ USB_VENDOR_CONNECTIX,
+ "Connectix",
+ },
+ {
+ USB_VENDOR_DELL2,
+ "Dell",
+ },
+ {
+ USB_VENDOR_KENSINGTON,
+ "Kensington",
+ },
+ {
+ USB_VENDOR_LUCENT,
+ "Lucent",
+ },
+ {
+ USB_VENDOR_PLANTRONICS,
+ "Plantronics",
+ },
+ {
+ USB_VENDOR_KYOCERA,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_STMICRO,
+ "STMicroelectronics",
+ },
+ {
+ USB_VENDOR_FOXCONN,
+ "Foxconn",
+ },
+ {
+ USB_VENDOR_YAMAHA,
+ "YAMAHA",
+ },
+ {
+ USB_VENDOR_COMPAQ,
+ "Compaq",
+ },
+ {
+ USB_VENDOR_HITACHI,
+ "Hitachi",
+ },
+ {
+ USB_VENDOR_ACERP,
+ "Acer Peripherals",
+ },
+ {
+ USB_VENDOR_DAVICOM,
+ "Davicom",
+ },
+ {
+ USB_VENDOR_VISIONEER,
+ "Visioneer",
+ },
+ {
+ USB_VENDOR_CANON,
+ "Canon",
+ },
+ {
+ USB_VENDOR_NIKON,
+ "Nikon",
+ },
+ {
+ USB_VENDOR_IBM,
+ "IBM",
+ },
+ {
+ USB_VENDOR_CYPRESS,
+ "Cypress Semiconductor",
+ },
+ {
+ USB_VENDOR_EPSON,
+ "Seiko Epson",
+ },
+ {
+ USB_VENDOR_RAINBOW,
+ "Rainbow Technologies",
+ },
+ {
+ USB_VENDOR_IODATA,
+ "I/O Data",
+ },
+ {
+ USB_VENDOR_TDK,
+ "TDK",
+ },
+ {
+ USB_VENDOR_3COMUSR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_METHODE,
+ "Methode Electronics Far East",
+ },
+ {
+ USB_VENDOR_MAXISWITCH,
+ "Maxi Switch",
+ },
+ {
+ USB_VENDOR_LOCKHEEDMER,
+ "Lockheed Martin Energy Research",
+ },
+ {
+ USB_VENDOR_FUJITSU,
+ "Fujitsu",
+ },
+ {
+ USB_VENDOR_TOSHIBAAM,
+ "Toshiba America",
+ },
+ {
+ USB_VENDOR_MICROMACRO,
+ "Micro Macro Technologies",
+ },
+ {
+ USB_VENDOR_KONICA,
+ "Konica",
+ },
+ {
+ USB_VENDOR_LITEON,
+ "Lite-On Technology",
+ },
+ {
+ USB_VENDOR_FUJIPHOTO,
+ "Fuji Photo Film",
+ },
+ {
+ USB_VENDOR_PHILIPSSEMI,
+ "Philips Semiconductors",
+ },
+ {
+ USB_VENDOR_TATUNG,
+ "Tatung Co. Of America",
+ },
+ {
+ USB_VENDOR_SCANLOGIC,
+ "ScanLogic",
+ },
+ {
+ USB_VENDOR_MYSON,
+ "Myson Technology",
+ },
+ {
+ USB_VENDOR_DIGI2,
+ "Digi",
+ },
+ {
+ USB_VENDOR_ITTCANON,
+ "ITT Canon",
+ },
+ {
+ USB_VENDOR_ALTEC,
+ "Altec Lansing",
+ },
+ {
+ USB_VENDOR_MICROCHIP,
+ "Microchip Technology, Inc.",
+ },
+ {
+ USB_VENDOR_HOLTEK,
+ "Holtek",
+ },
+ {
+ USB_VENDOR_PANASONIC,
+ "Panasonic (Matsushita)",
+ },
+ {
+ USB_VENDOR_SHARP,
+ "Sharp",
+ },
+ {
+ USB_VENDOR_IIYAMA,
+ "Iiyama",
+ },
+ {
+ USB_VENDOR_EXAR,
+ "Exar",
+ },
+ {
+ USB_VENDOR_SHUTTLE,
+ "Shuttle Technology",
+ },
+ {
+ USB_VENDOR_SAMSUNG2,
+ "Samsung Electronics",
+ },
+ {
+ USB_VENDOR_ANNABOOKS,
+ "Annabooks",
+ },
+ {
+ USB_VENDOR_JVC,
+ "JVC",
+ },
+ {
+ USB_VENDOR_CHICONY,
+ "Chicony Electronics",
+ },
+ {
+ USB_VENDOR_ELAN,
+ "Elan",
+ },
+ {
+ USB_VENDOR_BROTHER,
+ "Brother Industries",
+ },
+ {
+ USB_VENDOR_DALLAS,
+ "Dallas Semiconductor",
+ },
+ {
+ USB_VENDOR_ACER,
+ "Acer",
+ },
+ {
+ USB_VENDOR_3COM,
+ "3Com",
+ },
+ {
+ USB_VENDOR_AZTECH,
+ "Aztech Systems",
+ },
+ {
+ USB_VENDOR_BELKIN,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_KAWATSU,
+ "Kawatsu Semiconductor",
+ },
+ {
+ USB_VENDOR_APC,
+ "American Power Conversion",
+ },
+ {
+ USB_VENDOR_CONNECTEK,
+ "Advanced Connectek USA",
+ },
+ {
+ USB_VENDOR_NETCHIP,
+ "NetChip Technology",
+ },
+ {
+ USB_VENDOR_ALTRA,
+ "ALTRA",
+ },
+ {
+ USB_VENDOR_ATI,
+ "ATI Technologies",
+ },
+ {
+ USB_VENDOR_AKS,
+ "Aladdin Knowledge Systems",
+ },
+ {
+ USB_VENDOR_UNIACCESS,
+ "Universal Access",
+ },
+ {
+ USB_VENDOR_VIEWSONIC,
+ "ViewSonic",
+ },
+ {
+ USB_VENDOR_XIRLINK,
+ "Xirlink",
+ },
+ {
+ USB_VENDOR_ANCHOR,
+ "Anchor Chips",
+ },
+ {
+ USB_VENDOR_SONY,
+ "Sony",
+ },
+ {
+ USB_VENDOR_VISION,
+ "VLSI Vision",
+ },
+ {
+ USB_VENDOR_ASAHIKASEI,
+ "Asahi Kasei Microsystems",
+ },
+ {
+ USB_VENDOR_ATEN,
+ "ATEN International",
+ },
+ {
+ USB_VENDOR_SAMSUNG,
+ "Samsung",
+ },
+ {
+ USB_VENDOR_MUSTEK,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_TELEX,
+ "Telex Communications",
+ },
+ {
+ USB_VENDOR_PERACOM,
+ "Peracom Networks",
+ },
+ {
+ USB_VENDOR_ALCOR2,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_WACOM,
+ "WACOM",
+ },
+ {
+ USB_VENDOR_ETEK,
+ "e-TEK Labs",
+ },
+ {
+ USB_VENDOR_EIZO,
+ "EIZO",
+ },
+ {
+ USB_VENDOR_ELECOM,
+ "Elecom",
+ },
+ {
+ USB_VENDOR_XYRATEX,
+ "Xyratex",
+ },
+ {
+ USB_VENDOR_HAUPPAUGE,
+ "Hauppauge Computer Works",
+ },
+ {
+ USB_VENDOR_BAFO,
+ "BAFO/Quality Computer Accessories",
+ },
+ {
+ USB_VENDOR_YEDATA,
+ "Y-E Data",
+ },
+ {
+ USB_VENDOR_AVM,
+ "AVM",
+ },
+ {
+ USB_VENDOR_QUICKSHOT,
+ "Quickshot",
+ },
+ {
+ USB_VENDOR_ROLAND,
+ "Roland",
+ },
+ {
+ USB_VENDOR_ROCKFIRE,
+ "Rockfire",
+ },
+ {
+ USB_VENDOR_RATOC,
+ "RATOC Systems",
+ },
+ {
+ USB_VENDOR_ZYXEL,
+ "ZyXEL Communication",
+ },
+ {
+ USB_VENDOR_ALCOR,
+ "Alcor Micro",
+ },
+ {
+ USB_VENDOR_OMRON,
+ "OMRON Corporation",
+ },
+ {
+ USB_VENDOR_IOMEGA,
+ "Iomega",
+ },
+ {
+ USB_VENDOR_ATREND,
+ "A-Trend Technology",
+ },
+ {
+ USB_VENDOR_AID,
+ "Advanced Input Devices",
+ },
+ {
+ USB_VENDOR_LACIE,
+ "LaCie",
+ },
+ {
+ USB_VENDOR_THRUSTMASTER,
+ "Thrustmaster",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS3,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_OMNIVISION,
+ "OmniVision",
+ },
+ {
+ USB_VENDOR_INSYSTEM,
+ "In-System Design",
+ },
+ {
+ USB_VENDOR_APPLE,
+ "Apple Computer",
+ },
+ {
+ USB_VENDOR_YCCABLE,
+ "Y.C. Cable",
+ },
+ {
+ USB_VENDOR_JINGMOLD,
+ "Jing Mold",
+ },
+ {
+ USB_VENDOR_DIGI,
+ "Digi International",
+ },
+ {
+ USB_VENDOR_QUALCOMM,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_QTRONIX,
+ "Qtronix",
+ },
+ {
+ USB_VENDOR_RICOH,
+ "Ricoh",
+ },
+ {
+ USB_VENDOR_ELSA,
+ "ELSA",
+ },
+ {
+ USB_VENDOR_BRAINBOXES,
+ "Brainboxes",
+ },
+ {
+ USB_VENDOR_ULTIMA,
+ "Ultima",
+ },
+ {
+ USB_VENDOR_AXIOHM,
+ "Axiohm Transaction Solutions",
+ },
+ {
+ USB_VENDOR_MICROTEK,
+ "Microtek",
+ },
+ {
+ USB_VENDOR_SUNTAC,
+ "SUN Corporation",
+ },
+ {
+ USB_VENDOR_LEXAR,
+ "Lexar Media",
+ },
+ {
+ USB_VENDOR_ADDTRON,
+ "Addtron",
+ },
+ {
+ USB_VENDOR_SYMBOL,
+ "Symbol Technologies",
+ },
+ {
+ USB_VENDOR_GENESYS,
+ "Genesys Logic",
+ },
+ {
+ USB_VENDOR_FUJI,
+ "Fuji Electric",
+ },
+ {
+ USB_VENDOR_KEITHLEY,
+ "Keithley Instruments",
+ },
+ {
+ USB_VENDOR_EIZONANAO,
+ "EIZO Nanao",
+ },
+ {
+ USB_VENDOR_KLSI,
+ "Kawasaki LSI",
+ },
+ {
+ USB_VENDOR_FFC,
+ "FFC",
+ },
+ {
+ USB_VENDOR_ANKO,
+ "Anko Electronic",
+ },
+ {
+ USB_VENDOR_PIENGINEERING,
+ "P.I. Engineering",
+ },
+ {
+ USB_VENDOR_AOC,
+ "AOC International",
+ },
+ {
+ USB_VENDOR_CHIC,
+ "Chic Technology",
+ },
+ {
+ USB_VENDOR_BARCO,
+ "Barco Display Systems",
+ },
+ {
+ USB_VENDOR_BRIDGE,
+ "Bridge Information",
+ },
+ {
+ USB_VENDOR_SOLIDYEAR,
+ "Solid Year",
+ },
+ {
+ USB_VENDOR_BIORAD,
+ "Bio-Rad Laboratories",
+ },
+ {
+ USB_VENDOR_MACALLY,
+ "Macally",
+ },
+ {
+ USB_VENDOR_ACTLABS,
+ "Act Labs",
+ },
+ {
+ USB_VENDOR_ALARIS,
+ "Alaris",
+ },
+ {
+ USB_VENDOR_APEX,
+ "Apex",
+ },
+ {
+ USB_VENDOR_VIVITAR,
+ "Vivitar",
+ },
+ {
+ USB_VENDOR_GUNZE,
+ "Gunze Electronics USA",
+ },
+ {
+ USB_VENDOR_AVISION,
+ "Avision",
+ },
+ {
+ USB_VENDOR_TEAC,
+ "TEAC",
+ },
+ {
+ USB_VENDOR_SGI,
+ "Silicon Graphics",
+ },
+ {
+ USB_VENDOR_SANWASUPPLY,
+ "Sanwa Supply",
+ },
+ {
+ USB_VENDOR_MUSTEK2,
+ "Mustek Systems",
+ },
+ {
+ USB_VENDOR_LINKSYS,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_ACERSA,
+ "Acer Semiconductor America",
+ },
+ {
+ USB_VENDOR_SIGMATEL,
+ "Sigmatel",
+ },
+ {
+ USB_VENDOR_DRAYTEK,
+ "DrayTek",
+ },
+ {
+ USB_VENDOR_AIWA,
+ "Aiwa",
+ },
+ {
+ USB_VENDOR_ACARD,
+ "ACARD Technology",
+ },
+ {
+ USB_VENDOR_PROLIFIC,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_SIEMENS,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AVANCELOGIC,
+ "Avance Logic",
+ },
+ {
+ USB_VENDOR_SIEMENS2,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_MINOLTA,
+ "Minolta",
+ },
+ {
+ USB_VENDOR_CHPRODUCTS,
+ "CH Products",
+ },
+ {
+ USB_VENDOR_HAGIWARA,
+ "Hagiwara Sys-Com",
+ },
+ {
+ USB_VENDOR_CTX,
+ "Chuntex",
+ },
+ {
+ USB_VENDOR_ASKEY,
+ "Askey Computer",
+ },
+ {
+ USB_VENDOR_SAITEK,
+ "Saitek",
+ },
+ {
+ USB_VENDOR_ALCATELT,
+ "Alcatel Telecom",
+ },
+ {
+ USB_VENDOR_AGFA,
+ "AGFA-Gevaert",
+ },
+ {
+ USB_VENDOR_ASIAMD,
+ "Asia Microelectronic Development",
+ },
+ {
+ USB_VENDOR_PHIDGETS,
+ "Phidgets",
+ },
+ {
+ USB_VENDOR_BIZLINK,
+ "Bizlink International",
+ },
+ {
+ USB_VENDOR_KEYSPAN,
+ "Keyspan",
+ },
+ {
+ USB_VENDOR_AASHIMA,
+ "Aashima Technology",
+ },
+ {
+ USB_VENDOR_LIEBERT,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_MULTITECH,
+ "MultiTech",
+ },
+ {
+ USB_VENDOR_ADS,
+ "ADS Technologies",
+ },
+ {
+ USB_VENDOR_ALCATELM,
+ "Alcatel Microelectronics",
+ },
+ {
+ USB_VENDOR_SIRIUS,
+ "Sirius Technologies",
+ },
+ {
+ USB_VENDOR_GUILLEMOT,
+ "Guillemot",
+ },
+ {
+ USB_VENDOR_BOSTON,
+ "Boston Acoustics",
+ },
+ {
+ USB_VENDOR_SMC,
+ "Standard Microsystems",
+ },
+ {
+ USB_VENDOR_PUTERCOM,
+ "Putercom",
+ },
+ {
+ USB_VENDOR_MCT,
+ "MCT",
+ },
+ {
+ USB_VENDOR_IMATION,
+ "Imation",
+ },
+ {
+ USB_VENDOR_DOMAIN,
+ "Domain Technologies, Inc.",
+ },
+ {
+ USB_VENDOR_SUSTEEN,
+ "Susteen",
+ },
+ {
+ USB_VENDOR_EICON,
+ "Eicon Networks",
+ },
+ {
+ USB_VENDOR_STOLLMANN,
+ "Stollmann",
+ },
+ {
+ USB_VENDOR_SYNTECH,
+ "Syntech Information",
+ },
+ {
+ USB_VENDOR_DIGITALSTREAM,
+ "Digital Stream",
+ },
+ {
+ USB_VENDOR_AUREAL,
+ "Aureal Semiconductor",
+ },
+ {
+ USB_VENDOR_IDOWELL,
+ "iDowell",
+ },
+ {
+ USB_VENDOR_MIDIMAN,
+ "Midiman",
+ },
+ {
+ USB_VENDOR_CYBERPOWER,
+ "CyberPower",
+ },
+ {
+ USB_VENDOR_SURECOM,
+ "Surecom Technology",
+ },
+ {
+ USB_VENDOR_LINKSYS2,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_GRIFFIN,
+ "Griffin Technology",
+ },
+ {
+ USB_VENDOR_SANDISK,
+ "SanDisk",
+ },
+ {
+ USB_VENDOR_JENOPTIK,
+ "Jenoptik",
+ },
+ {
+ USB_VENDOR_LOGITEC,
+ "Logitec",
+ },
+ {
+ USB_VENDOR_NOKIA,
+ "Nokia",
+ },
+ {
+ USB_VENDOR_BRIMAX,
+ "Brimax",
+ },
+ {
+ USB_VENDOR_AXIS,
+ "Axis Communications",
+ },
+ {
+ USB_VENDOR_ABL,
+ "ABL Electronics",
+ },
+ {
+ USB_VENDOR_SAGEM,
+ "Sagem",
+ },
+ {
+ USB_VENDOR_SUNCOMM,
+ "Sun Communications",
+ },
+ {
+ USB_VENDOR_ALFADATA,
+ "Alfadata Computer",
+ },
+ {
+ USB_VENDOR_NATIONALTECH,
+ "National Technical Systems",
+ },
+ {
+ USB_VENDOR_ONNTO,
+ "Onnto",
+ },
+ {
+ USB_VENDOR_BE,
+ "Be",
+ },
+ {
+ USB_VENDOR_ADMTEK,
+ "ADMtek",
+ },
+ {
+ USB_VENDOR_COREGA,
+ "Corega",
+ },
+ {
+ USB_VENDOR_FREECOM,
+ "Freecom",
+ },
+ {
+ USB_VENDOR_MICROTECH,
+ "Microtech",
+ },
+ {
+ USB_VENDOR_MOTOROLA3,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_OLYMPUS,
+ "Olympus",
+ },
+ {
+ USB_VENDOR_ABOCOM,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_KEISOKUGIKEN,
+ "Keisokugiken",
+ },
+ {
+ USB_VENDOR_ONSPEC,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_APG,
+ "APG Cash Drawer",
+ },
+ {
+ USB_VENDOR_BUG,
+ "B.U.G.",
+ },
+ {
+ USB_VENDOR_ALLIEDTELESYN,
+ "Allied Telesyn International",
+ },
+ {
+ USB_VENDOR_AVERMEDIA,
+ "AVerMedia Technologies",
+ },
+ {
+ USB_VENDOR_SIIG,
+ "SIIG",
+ },
+ {
+ USB_VENDOR_CASIO,
+ "CASIO",
+ },
+ {
+ USB_VENDOR_DLINK2,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_APTIO,
+ "Aptio Products",
+ },
+ {
+ USB_VENDOR_ARASAN,
+ "Arasan Chip Systems",
+ },
+ {
+ USB_VENDOR_ALLIEDCABLE,
+ "Allied Cable",
+ },
+ {
+ USB_VENDOR_STSN,
+ "STSN",
+ },
+ {
+ USB_VENDOR_BEWAN,
+ "Bewan",
+ },
+ {
+ USB_VENDOR_ZOOM,
+ "Zoom Telephonics",
+ },
+ {
+ USB_VENDOR_BROADLOGIC,
+ "BroadLogic",
+ },
+ {
+ USB_VENDOR_HANDSPRING,
+ "Handspring",
+ },
+ {
+ USB_VENDOR_PALM,
+ "Palm Computing",
+ },
+ {
+ USB_VENDOR_SOURCENEXT,
+ "SOURCENEXT",
+ },
+ {
+ USB_VENDOR_ACTIONSTAR,
+ "Action Star Enterprise",
+ },
+ {
+ USB_VENDOR_ACCTON,
+ "Accton Technology",
+ },
+ {
+ USB_VENDOR_DIAMOND,
+ "Diamond",
+ },
+ {
+ USB_VENDOR_NETGEAR,
+ "BayNETGEAR",
+ },
+ {
+ USB_VENDOR_TOPRE,
+ "Topre Corporation",
+ },
+ {
+ USB_VENDOR_ACTIVEWIRE,
+ "ActiveWire",
+ },
+ {
+ USB_VENDOR_BBELECTR,
+ "B&B Electronics",
+ },
+ {
+ USB_VENDOR_PORTGEAR,
+ "PortGear",
+ },
+ {
+ USB_VENDOR_NETGEAR2,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_SYSTEMTALKS,
+ "System Talks",
+ },
+ {
+ USB_VENDOR_METRICOM,
+ "Metricom",
+ },
+ {
+ USB_VENDOR_ADESSOKBTEK,
+ "ADESSO/Kbtek America",
+ },
+ {
+ USB_VENDOR_JATON,
+ "Jaton",
+ },
+ {
+ USB_VENDOR_APT,
+ "APT Technologies",
+ },
+ {
+ USB_VENDOR_BOCARESEARCH,
+ "Boca Research",
+ },
+ {
+ USB_VENDOR_ANDREA,
+ "Andrea Electronics",
+ },
+ {
+ USB_VENDOR_BURRBROWN,
+ "Burr-Brown Japan",
+ },
+ {
+ USB_VENDOR_2WIRE,
+ "2Wire",
+ },
+ {
+ USB_VENDOR_AIPTEK,
+ "AIPTEK International",
+ },
+ {
+ USB_VENDOR_SMARTBRIDGES,
+ "SmartBridges",
+ },
+ {
+ USB_VENDOR_BILLIONTON,
+ "Billionton Systems",
+ },
+ {
+ USB_VENDOR_GEMPLUS,
+ "GEMPLUS",
+ },
+ {
+ USB_VENDOR_EXTENDED,
+ "Extended Systems",
+ },
+ {
+ USB_VENDOR_MSYSTEMS,
+ "M-Systems",
+ },
+ {
+ USB_VENDOR_DIGIANSWER,
+ "Digianswer",
+ },
+ {
+ USB_VENDOR_AUTHENTEC,
+ "AuthenTec",
+ },
+ {
+ USB_VENDOR_SIEMENS4,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_AUDIOTECHNICA,
+ "Audio-Technica",
+ },
+ {
+ USB_VENDOR_TRUMPION,
+ "Trumpion Microelectronics",
+ },
+ {
+ USB_VENDOR_ALATION,
+ "Alation Systems",
+ },
+ {
+ USB_VENDOR_GLOBESPAN,
+ "Globespan",
+ },
+ {
+ USB_VENDOR_CONCORDCAMERA,
+ "Concord Camera",
+ },
+ {
+ USB_VENDOR_GARMIN,
+ "Garmin International",
+ },
+ {
+ USB_VENDOR_GOHUBS,
+ "GoHubs",
+ },
+ {
+ USB_VENDOR_BIOMETRIC,
+ "American Biometric Company",
+ },
+ {
+ USB_VENDOR_TOSHIBA,
+ "Toshiba Corp",
+ },
+ {
+ USB_VENDOR_INTREPIDCS,
+ "Intrepid",
+ },
+ {
+ USB_VENDOR_YANO,
+ "Yano",
+ },
+ {
+ USB_VENDOR_KINGSTON,
+ "Kingston Technology",
+ },
+ {
+ USB_VENDOR_BLUEWATER,
+ "BlueWater Systems",
+ },
+ {
+ USB_VENDOR_AGILENT,
+ "Agilent Technologies",
+ },
+ {
+ USB_VENDOR_GUDE,
+ "Gude ADS",
+ },
+ {
+ USB_VENDOR_PORTSMITH,
+ "Portsmith",
+ },
+ {
+ USB_VENDOR_ACERW,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ADIRONDACK,
+ "Adirondack Wire & Cable",
+ },
+ {
+ USB_VENDOR_BECKHOFF,
+ "Beckhoff",
+ },
+ {
+ USB_VENDOR_MINDSATWORK,
+ "Minds At Work",
+ },
+ {
+ USB_VENDOR_INTERSIL,
+ "Intersil",
+ },
+ {
+ USB_VENDOR_ALTIUS,
+ "Altius Solutions",
+ },
+ {
+ USB_VENDOR_ARRIS,
+ "Arris Interactive",
+ },
+ {
+ USB_VENDOR_ACTIVCARD,
+ "ACTIVCARD",
+ },
+ {
+ USB_VENDOR_ACTISYS,
+ "ACTiSYS",
+ },
+ {
+ USB_VENDOR_NOVATEL1,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_AFOURTECH,
+ "A-FOUR TECH",
+ },
+ {
+ USB_VENDOR_AIMEX,
+ "AIMEX",
+ },
+ {
+ USB_VENDOR_ADDONICS,
+ "Addonics Technologies",
+ },
+ {
+ USB_VENDOR_AKAI,
+ "AKAI professional M.I.",
+ },
+ {
+ USB_VENDOR_ARESCOM,
+ "ARESCOM",
+ },
+ {
+ USB_VENDOR_BAY,
+ "Bay Associates",
+ },
+ {
+ USB_VENDOR_ALTERA,
+ "Altera",
+ },
+ {
+ USB_VENDOR_CSR,
+ "Cambridge Silicon Radio",
+ },
+ {
+ USB_VENDOR_TREK,
+ "Trek Technology",
+ },
+ {
+ USB_VENDOR_ASAHIOPTICAL,
+ "Asahi Optical",
+ },
+ {
+ USB_VENDOR_BOCASYSTEMS,
+ "Boca Systems",
+ },
+ {
+ USB_VENDOR_SHANTOU,
+ "ShanTou",
+ },
+ {
+ USB_VENDOR_HIROSE,
+ "Hirose",
+ },
+ {
+ USB_VENDOR_BROADCOM,
+ "Broadcom",
+ },
+ {
+ USB_VENDOR_GREENHOUSE,
+ "GREENHOUSE",
+ },
+ {
+ USB_VENDOR_GEOCAST,
+ "Geocast Network Systems",
+ },
+ {
+ USB_VENDOR_DREAMCHEEKY,
+ "Dream Cheeky",
+ },
+ {
+ USB_VENDOR_IDQUANTIQUE,
+ "id Quantique",
+ },
+ {
+ USB_VENDOR_IDTECH,
+ "ID TECH",
+ },
+ {
+ USB_VENDOR_ZYDAS,
+ "ZyDAS Technology",
+ },
+ {
+ USB_VENDOR_CHENSOURCE,
+ "Chen-Source",
+ },
+ {
+ USB_VENDOR_NEODIO,
+ "Neodio",
+ },
+ {
+ USB_VENDOR_OPTION,
+ "Option",
+ },
+ {
+ USB_VENDOR_ASUS,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_TODOS,
+ "Todos Data System",
+ },
+ {
+ USB_VENDOR_OCT,
+ "Omnidirectional Control Technology",
+ },
+ {
+ USB_VENDOR_TEKRAM,
+ "Tekram Technology",
+ },
+ {
+ USB_VENDOR_HAL,
+ "HAL Corporation",
+ },
+ {
+ USB_VENDOR_NEC2,
+ "NEC",
+ },
+ {
+ USB_VENDOR_ATI2,
+ "ATI",
+ },
+ {
+ USB_VENDOR_KURUSUGAWA,
+ "Kurusugawa Electronics",
+ },
+ {
+ USB_VENDOR_SMART,
+ "Smart Technologies",
+ },
+ {
+ USB_VENDOR_ASIX,
+ "ASIX Electronics",
+ },
+ {
+ USB_VENDOR_O2MICRO,
+ "O2 Micro",
+ },
+ {
+ USB_VENDOR_SACOM,
+ "System SACOM Industry Co.,Ltd",
+ },
+ {
+ USB_VENDOR_USR,
+ "U.S. Robotics",
+ },
+ {
+ USB_VENDOR_AMBIT,
+ "Ambit Microsystems",
+ },
+ {
+ USB_VENDOR_HTC,
+ "HTC",
+ },
+ {
+ USB_VENDOR_REALTEK,
+ "Realtek",
+ },
+ {
+ USB_VENDOR_MEI,
+ "MEI",
+ },
+ {
+ USB_VENDOR_ADDONICS2,
+ "Addonics Technology",
+ },
+ {
+ USB_VENDOR_FSC,
+ "Fujitsu Siemens Computers",
+ },
+ {
+ USB_VENDOR_AGATE,
+ "Agate Technologies",
+ },
+ {
+ USB_VENDOR_DMI,
+ "DMI",
+ },
+ {
+ USB_VENDOR_ICOM,
+ "Icom",
+ },
+ {
+ USB_VENDOR_GNOTOMETRICS,
+ "GN Otometrics",
+ },
+ {
+ USB_VENDOR_MICRODIA,
+ "Microdia / Sonix Technology Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SEALEVEL,
+ "Sealevel System",
+ },
+ {
+ USB_VENDOR_JETI,
+ "JETI",
+ },
+ {
+ USB_VENDOR_EASYDISK,
+ "EasyDisk",
+ },
+ {
+ USB_VENDOR_ELEKTOR,
+ "Elektor Electronics",
+ },
+ {
+ USB_VENDOR_KYOCERA2,
+ "Kyocera",
+ },
+ {
+ USB_VENDOR_TERRATEC,
+ "TerraTec Electronic GmbH",
+ },
+ {
+ USB_VENDOR_ZCOM,
+ "Z-Com",
+ },
+ {
+ USB_VENDOR_ATHEROS2,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_POSIFLEX,
+ "Posiflex Technologies",
+ },
+ {
+ USB_VENDOR_TANGTOP,
+ "Tangtop",
+ },
+ {
+ USB_VENDOR_KOBIL,
+ "Kobil Systems",
+ },
+ {
+ USB_VENDOR_SMC3,
+ "SMC",
+ },
+ {
+ USB_VENDOR_PEN,
+ "Pen Drive",
+ },
+ {
+ USB_VENDOR_ABC,
+ "ABC",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_MSI,
+ "Micro Star International",
+ },
+ {
+ USB_VENDOR_ELCON,
+ "ELCON Systemtechnik",
+ },
+ {
+ USB_VENDOR_UNKNOWN5,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_SITECOMEU,
+ "Sitecom Europe",
+ },
+ {
+ USB_VENDOR_MOBILEACTION,
+ "Mobile Action",
+ },
+ {
+ USB_VENDOR_AMIGO,
+ "Amigo Technology",
+ },
+ {
+ USB_VENDOR_VMWARE,
+ "VMware",
+ },
+ {
+ USB_VENDOR_SPEEDDRAGON,
+ "Speed Dragon Multimedia",
+ },
+ {
+ USB_VENDOR_CTC,
+ "CONWISE Technology",
+ },
+ {
+ USB_VENDOR_HAWKING,
+ "Hawking",
+ },
+ {
+ USB_VENDOR_FOSSIL,
+ "Fossil",
+ },
+ {
+ USB_VENDOR_GMATE,
+ "G.Mate",
+ },
+ {
+ USB_VENDOR_MEDIATEK,
+ "MediaTek Inc.",
+ },
+ {
+ USB_VENDOR_OTI,
+ "Ours Technology",
+ },
+ {
+ USB_VENDOR_PILOTECH,
+ "Pilotech",
+ },
+ {
+ USB_VENDOR_NOVATECH,
+ "Nova Tech",
+ },
+ {
+ USB_VENDOR_ITEGNO,
+ "iTegno",
+ },
+ {
+ USB_VENDOR_NORITAKE,
+ "Noritake itron Corp",
+ },
+ {
+ USB_VENDOR_EGALAX,
+ "eGalax",
+ },
+ {
+ USB_VENDOR_XIRING,
+ "XIRING",
+ },
+ {
+ USB_VENDOR_AIRPRIME,
+ "Airprime",
+ },
+ {
+ USB_VENDOR_VTECH,
+ "VTech",
+ },
+ {
+ USB_VENDOR_FALCOM,
+ "Falcom Wireless Communications",
+ },
+ {
+ USB_VENDOR_RIM,
+ "Research In Motion",
+ },
+ {
+ USB_VENDOR_DYNASTREAM,
+ "Dynastream Innovations",
+ },
+ {
+ USB_VENDOR_LARSENBRUSGAARD,
+ "Larsen and Brusgaard",
+ },
+ {
+ USB_VENDOR_OREGONSCI,
+ "Oregon Scientific",
+ },
+ {
+ USB_VENDOR_UNKNOWN4,
+ "Unknown Vendor",
+ },
+ {
+ USB_VENDOR_DVICO,
+ "DViCO",
+ },
+ {
+ USB_VENDOR_QUALCOMM2,
+ "Qualcomm",
+ },
+ {
+ USB_VENDOR_MOTOROLA4,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_HP3,
+ "Hewlett Packard",
+ },
+ {
+ USB_VENDOR_THURLBY,
+ "Thurlby Thandar Instruments",
+ },
+ {
+ USB_VENDOR_GIGABYTE,
+ "GIGABYTE",
+ },
+ {
+ USB_VENDOR_YUBICO,
+ "Yubico.com",
+ },
+ {
+ USB_VENDOR_MOTOROLA,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_CCYU,
+ "CCYU Technology",
+ },
+ {
+ USB_VENDOR_HYUNDAI,
+ "Hyundai",
+ },
+ {
+ USB_VENDOR_GCTSEMICON,
+ "GCT Semiconductor",
+ },
+ {
+ USB_VENDOR_SILABS2,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_USI,
+ "USI",
+ },
+ {
+ USB_VENDOR_LIEBERT2,
+ "Liebert",
+ },
+ {
+ USB_VENDOR_PLX,
+ "PLX",
+ },
+ {
+ USB_VENDOR_ASANTE,
+ "Asante",
+ },
+ {
+ USB_VENDOR_SILABS,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS3,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_SILABS4,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_VELLEMAN,
+ "Velleman",
+ },
+ {
+ USB_VENDOR_MOXA,
+ "Moxa Technologies",
+ },
+ {
+ USB_VENDOR_ANALOG,
+ "Analog Devices",
+ },
+ {
+ USB_VENDOR_TENX,
+ "Ten X Technology, Inc.",
+ },
+ {
+ USB_VENDOR_ISSC,
+ "Integrated System Solution Corp.",
+ },
+ {
+ USB_VENDOR_JRC,
+ "Japan Radio Company",
+ },
+ {
+ USB_VENDOR_SPHAIRON,
+ "Sphairon Access Systems",
+ },
+ {
+ USB_VENDOR_DELORME,
+ "DeLorme",
+ },
+ {
+ USB_VENDOR_SERVERWORKS,
+ "ServerWorks",
+ },
+ {
+ USB_VENDOR_ACERCM,
+ "Acer Communications & Multimedia",
+ },
+ {
+ USB_VENDOR_SIERRA,
+ "Sierra Wireless",
+ },
+ {
+ USB_VENDOR_SIEMENS3,
+ "Siemens",
+ },
+ {
+ USB_VENDOR_ALCATEL,
+ "Alcatel",
+ },
+ {
+ USB_VENDOR_INTERBIO,
+ "InterBiometrics",
+ },
+ {
+ USB_VENDOR_UNKNOWN3,
+ "Unknown vendor",
+ },
+ {
+ USB_VENDOR_TSUNAMI,
+ "Tsunami",
+ },
+ {
+ USB_VENDOR_PHEENET,
+ "Pheenet",
+ },
+ {
+ USB_VENDOR_RAPTORGAMING,
+ "Raptor Gaming",
+ },
+ {
+ USB_VENDOR_TWINMOS,
+ "TwinMOS",
+ },
+ {
+ USB_VENDOR_TENDA,
+ "Tenda",
+ },
+ {
+ USB_VENDOR_TESTO,
+ "Testo AG",
+ },
+ {
+ USB_VENDOR_CREATIVE2,
+ "Creative Labs",
+ },
+ {
+ USB_VENDOR_BELKIN2,
+ "Belkin Components",
+ },
+ {
+ USB_VENDOR_CYBERTAN,
+ "CyberTAN Technology",
+ },
+ {
+ USB_VENDOR_HUAWEI,
+ "HUAWEI Technologies",
+ },
+ {
+ USB_VENDOR_ARANEUS,
+ "Araneus Information Systems",
+ },
+ {
+ USB_VENDOR_TAPWAVE,
+ "Tapwave",
+ },
+ {
+ USB_VENDOR_AINCOMM,
+ "Aincomm",
+ },
+ {
+ USB_VENDOR_MOBILITY,
+ "Mobility",
+ },
+ {
+ USB_VENDOR_DICKSMITH,
+ "Dick Smith Electronics",
+ },
+ {
+ USB_VENDOR_NETGEAR3,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_VALIDITY,
+ "Validity Sensors",
+ },
+ {
+ USB_VENDOR_BALTECH,
+ "Baltech",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_SHARK,
+ "Shark",
+ },
+ {
+ USB_VENDOR_AZUREWAVE,
+ "AsureWave",
+ },
+ {
+ USB_VENDOR_NOVATEL,
+ "Novatel",
+ },
+ {
+ USB_VENDOR_WISTRONNEWEB,
+ "Wistron NeWeb",
+ },
+ {
+ USB_VENDOR_RADIOSHACK,
+ "Radio Shack",
+ },
+ {
+ USB_VENDOR_OPENMOKO,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_HUAWEI3COM,
+ "Huawei 3Com",
+ },
+ {
+ USB_VENDOR_ABOCOM2,
+ "AboCom Systems",
+ },
+ {
+ USB_VENDOR_SILICOM,
+ "Silicom",
+ },
+ {
+ USB_VENDOR_RALINK,
+ "Ralink Technology",
+ },
+ {
+ USB_VENDOR_STARTECH,
+ "StarTech.com",
+ },
+ {
+ USB_VENDOR_CONCEPTRONIC2,
+ "Conceptronic",
+ },
+ {
+ USB_VENDOR_SUPERTOP,
+ "SuperTop",
+ },
+ {
+ USB_VENDOR_PLANEX3,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_SILICONPORTALS,
+ "Silicon Portals",
+ },
+ {
+ USB_VENDOR_UBLOX,
+ "U-blox",
+ },
+ {
+ USB_VENDOR_OWEN,
+ "Owen",
+ },
+ {
+ USB_VENDOR_OQO,
+ "OQO",
+ },
+ {
+ USB_VENDOR_UMEDIA,
+ "U-MEDIA Communications",
+ },
+ {
+ USB_VENDOR_FIBERLINE,
+ "Fiberline",
+ },
+ {
+ USB_VENDOR_SPARKLAN,
+ "SparkLAN",
+ },
+ {
+ USB_VENDOR_OLIMEX,
+ "Olimex",
+ },
+ {
+ USB_VENDOR_AMIT2,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_TRUST,
+ "Trust",
+ },
+ {
+ USB_VENDOR_SOHOWARE,
+ "SOHOware",
+ },
+ {
+ USB_VENDOR_UMAX,
+ "UMAX Data Systems",
+ },
+ {
+ USB_VENDOR_INSIDEOUT,
+ "Inside Out Networks",
+ },
+ {
+ USB_VENDOR_GOODWAY,
+ "Good Way Technology",
+ },
+ {
+ USB_VENDOR_ENTREGA,
+ "Entrega",
+ },
+ {
+ USB_VENDOR_ACTIONTEC,
+ "Actiontec Electronics",
+ },
+ {
+ USB_VENDOR_CLIPSAL,
+ "Clipsal",
+ },
+ {
+ USB_VENDOR_CISCOLINKSYS2,
+ "Cisco-Linksys",
+ },
+ {
+ USB_VENDOR_ATHEROS,
+ "Atheros Communications",
+ },
+ {
+ USB_VENDOR_GIGASET,
+ "Gigaset",
+ },
+ {
+ USB_VENDOR_GLOBALSUN,
+ "Global Sun Technology",
+ },
+ {
+ USB_VENDOR_VOTI,
+ "Van Ooijen Technische Informatica",
+ },
+ {
+ USB_VENDOR_ANYDATA,
+ "AnyDATA Inc.",
+ },
+ {
+ USB_VENDOR_JABLOTRON,
+ "Jablotron",
+ },
+ {
+ USB_VENDOR_CMOTECH,
+ "CMOTECH",
+ },
+ {
+ USB_VENDOR_WIENERPLEINBAUS,
+ "WIENER Plein & Baus",
+ },
+ {
+ USB_VENDOR_AXESSTEL,
+ "Axesstel",
+ },
+ {
+ USB_VENDOR_LINKSYS4,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_SENAO,
+ "Senao",
+ },
+ {
+ USB_VENDOR_ASUS2,
+ "ASUS",
+ },
+ {
+ USB_VENDOR_STRAWBERRYLINUX,
+ "Strawberry linux Co., Ltd.",
+ },
+ {
+ USB_VENDOR_SWEEX2,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_MECANIQUE,
+ "Mecanique",
+ },
+ {
+ USB_VENDOR_KAMSTRUP,
+ "Kamstrup A/S",
+ },
+ {
+ USB_VENDOR_DISPLAYLINK,
+ "DisplayLink",
+ },
+ {
+ USB_VENDOR_LENOVO,
+ "Lenovo",
+ },
+ {
+ USB_VENDOR_WAVESENSE,
+ "WaveSense",
+ },
+ {
+ USB_VENDOR_VAISALA,
+ "VAISALA",
+ },
+ {
+ USB_VENDOR_AMIT,
+ "AMIT",
+ },
+ {
+ USB_VENDOR_GOOGLE,
+ "Google",
+ },
+ {
+ USB_VENDOR_QCOM,
+ "Qcom",
+ },
+ {
+ USB_VENDOR_ELV,
+ "ELV",
+ },
+ {
+ USB_VENDOR_LINKSYS3,
+ "Linksys",
+ },
+ {
+ USB_VENDOR_AVAGO,
+ "Avago",
+ },
+ {
+ USB_VENDOR_MEINBERG,
+ "Meinberg Funkuhren",
+ },
+ {
+ USB_VENDOR_ZTE,
+ "ZTE Inc.",
+ },
+ {
+ USB_VENDOR_QUANTA,
+ "Quanta",
+ },
+ {
+ USB_VENDOR_TERMINUS,
+ "Terminus Technology",
+ },
+ {
+ USB_VENDOR_ABBOTT,
+ "Abbott Labs",
+ },
+ {
+ USB_VENDOR_BAYER,
+ "Bayer Health Care",
+ },
+ {
+ USB_VENDOR_WCH2,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_SEL,
+ "Schweitzer Engineering Laboratories",
+ },
+ {
+ USB_VENDOR_CORSAIR,
+ "Corsair",
+ },
+ {
+ USB_VENDOR_MATRIXORB,
+ "Matrix Orbital",
+ },
+ {
+ USB_VENDOR_TORADEX,
+ "Toradex inc.",
+ },
+ {
+ USB_VENDOR_FUSHICAI,
+ "Fushicai",
+ },
+ {
+ USB_VENDOR_OVISLINK,
+ "OvisLink",
+ },
+ {
+ USB_VENDOR_TML,
+ "The Mobility Lab",
+ },
+ {
+ USB_VENDOR_SILABS5,
+ "Silicon Labs",
+ },
+ {
+ USB_VENDOR_TCTMOBILE,
+ "TCT Mobile",
+ },
+ {
+ USB_VENDOR_MDS,
+ "MDS",
+ },
+ {
+ USB_VENDOR_ALTI2,
+ "Alti-2",
+ },
+ {
+ USB_VENDOR_SUNPLUS,
+ "Sunplus",
+ },
+ {
+ USB_VENDOR_WAGO,
+ "WAGO Kontakttechnik",
+ },
+ {
+ USB_VENDOR_LONGCHEER,
+ "Longcheer Technology",
+ },
+ {
+ USB_VENDOR_DRESDENELEC,
+ "Dresden Elektronic",
+ },
+ {
+ USB_VENDOR_DREAMLINK,
+ "Dream Link",
+ },
+ {
+ USB_VENDOR_PEGATRON,
+ "Pegatron",
+ },
+ {
+ USB_VENDOR_OPENMOKO2,
+ "OpenMoko",
+ },
+ {
+ USB_VENDOR_SELUXIT,
+ "Seluxit",
+ },
+ {
+ USB_VENDOR_METAGEEK,
+ "MetaGeek",
+ },
+ {
+ USB_VENDOR_SIMCOM,
+ "SIMCom Wireless Solutions Co., Ltd.",
+ },
+ {
+ USB_VENDOR_FESTO,
+ "Festo",
+ },
+ {
+ USB_VENDOR_MODACOM,
+ "Modacom",
+ },
+ {
+ USB_VENDOR_AIRTIES,
+ "AirTies",
+ },
+ {
+ USB_VENDOR_LAKESHORE,
+ "Lake Shore",
+ },
+ {
+ USB_VENDOR_VERTEX,
+ "Vertex Wireless Co., Ltd.",
+ },
+ {
+ USB_VENDOR_DLINK,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_PLANEX2,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_ENCORE,
+ "Encore",
+ },
+ {
+ USB_VENDOR_PARA,
+ "PARA Industrial",
+ },
+ {
+ USB_VENDOR_TRENDNET,
+ "TRENDnet",
+ },
+ {
+ USB_VENDOR_RTSYSTEMS,
+ "RT Systems",
+ },
+ {
+ USB_VENDOR_DLINK3,
+ "D-Link",
+ },
+ {
+ USB_VENDOR_VIALABS,
+ "VIA Labs",
+ },
+ {
+ USB_VENDOR_MOTOROLA2,
+ "Motorola",
+ },
+ {
+ USB_VENDOR_ARDUINO,
+ "Arduino SA",
+ },
+ {
+ USB_VENDOR_TPLINK,
+ "TP-Link",
+ },
+ {
+ USB_VENDOR_WMR,
+ "West Mountain Radio",
+ },
+ {
+ USB_VENDOR_TRIPPLITE,
+ "Tripp-Lite",
+ },
+ {
+ USB_VENDOR_ARUBA,
+ "Aruba",
+ },
+ {
+ USB_VENDOR_XIAOMI,
+ "Xiaomi",
+ },
+ {
+ USB_VENDOR_NHJ,
+ "NHJ",
+ },
+ {
+ USB_VENDOR_ASUSTEK,
+ "ASUSTeK Computer",
+ },
+ {
+ USB_VENDOR_PLANEX,
+ "Planex Communications",
+ },
+ {
+ USB_VENDOR_LINKINSTRUMENTS,
+ "Link Instruments",
+ },
+ {
+ USB_VENDOR_AEI,
+ "AEI",
+ },
+ {
+ USB_VENDOR_PQI,
+ "PQI",
+ },
+ {
+ USB_VENDOR_DAISY,
+ "Daisy Technology",
+ },
+ {
+ USB_VENDOR_NI,
+ "National Instruments",
+ },
+ {
+ USB_VENDOR_MICRONET,
+ "Micronet Communications",
+ },
+ {
+ USB_VENDOR_IODATA2,
+ "I-O Data",
+ },
+ {
+ USB_VENDOR_IRIVER,
+ "iRiver",
+ },
+ {
+ USB_VENDOR_DELL,
+ "Dell",
+ },
+ {
+ USB_VENDOR_WCH,
+ "QinHeng Electronics",
+ },
+ {
+ USB_VENDOR_ACEECA,
+ "Aceeca",
+ },
+ {
+ USB_VENDOR_FEIXUN,
+ "FeiXun Communication",
+ },
+ {
+ USB_VENDOR_NETWEEN,
+ "NetweeN",
+ },
+ {
+ USB_VENDOR_PAPOUCH,
+ "Papouch s.r.o.",
+ },
+ {
+ USB_VENDOR_AVERATEC,
+ "Averatec",
+ },
+ {
+ USB_VENDOR_SWEEX,
+ "Sweex",
+ },
+ {
+ USB_VENDOR_PROLIFIC2,
+ "Prolific Technology",
+ },
+ {
+ USB_VENDOR_ONSPEC2,
+ "OnSpec",
+ },
+ {
+ USB_VENDOR_ACERLABS2,
+ "Acer",
+ },
+ {
+ USB_VENDOR_ZINWELL,
+ "Zinwell",
+ },
+ {
+ USB_VENDOR_SITECOM,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_ARKMICRO,
+ "Arkmicro",
+ },
+ {
+ USB_VENDOR_3COM2,
+ "3Com",
+ },
+ {
+ USB_VENDOR_EDIMAX,
+ "EDIMAX",
+ },
+ {
+ USB_VENDOR_INTEL,
+ "Intel",
+ },
+ {
+ USB_VENDOR_INTEL2,
+ "Intel",
+ },
+ {
+ USB_VENDOR_ALLWIN,
+ "ALLWIN Tech",
+ },
+ {
+ USB_VENDOR_SITECOM2,
+ "Sitecom",
+ },
+ {
+ USB_VENDOR_MOSCHIP,
+ "MosChip",
+ },
+ {
+ USB_VENDOR_NETGEAR4,
+ "Netgear",
+ },
+ {
+ USB_VENDOR_MARVELL,
+ "Marvell",
+ },
+ {
+ USB_VENDOR_3COM3,
+ "3Com",
+ },
+ {
+ USB_VENDOR_CACE,
+ "CACE Technologies",
+ },
+ {
+ USB_VENDOR_COMPARE,
+ "Compare",
+ },
+ {
+ USB_VENDOR_DATAAPEX,
+ "DataApex",
+ },
+ {
+ USB_VENDOR_EVOLUTION,
+ "Evolution Robotics",
+ },
+ {
+ USB_VENDOR_EMPIA,
+ "eMPIA Technology",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test111.left-P.txt b/test/test111.left-P.txt
new file mode 100644
index 000000000000..2fbc5affa850
--- /dev/null
+++ b/test/test111.left-P.txt
@@ -0,0 +1,393 @@
+/* $OpenBSD: usbdevs_data.h,v 1.715 2020/01/20 07:09:11 jsg Exp $ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test111.right-P.txt b/test/test111.right-P.txt
new file mode 100644
index 000000000000..417db010011c
--- /dev/null
+++ b/test/test111.right-P.txt
@@ -0,0 +1,397 @@
+/* $OpenBSD$ */
+
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * OpenBSD: usbdevs,v 1.709 2020/01/20 07:08:20 jsg Exp
+ */
+/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8812AU,
+ "RTL8812AU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8192EU_2,
+ "RTL8192EU",
+ },
+ {
+ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS,
+ "RTL8188EUS",
+ },
+ {
+ USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE,
+ "ThumbDrive",
+ },
+ {
+ USB_VENDOR_HP2,
+ "Hewlett Packard",
+ },
+ { 0, NULL }
+};
diff --git a/test/test112.left-P.txt b/test/test112.left-P.txt
new file mode 100644
index 000000000000..1081d16c6e49
--- /dev/null
+++ b/test/test112.left-P.txt
@@ -0,0 +1,23 @@
+1 left
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
diff --git a/test/test112.right-P.txt b/test/test112.right-P.txt
new file mode 100644
index 000000000000..dee7f5e68de3
--- /dev/null
+++ b/test/test112.right-P.txt
@@ -0,0 +1,29 @@
+1 right
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+14
+15
+16 right
+17
+18
+19
+20
+21
+22
+23
diff --git a/test/test113.left-Pw.txt b/test/test113.left-Pw.txt
new file mode 100644
index 000000000000..53b3adf33dac
--- /dev/null
+++ b/test/test113.left-Pw.txt
@@ -0,0 +1,7 @@
+A
+B
+C
+D
+E
+F
+G
diff --git a/test/test113.right-Pw.txt b/test/test113.right-Pw.txt
new file mode 100644
index 000000000000..1509b4b4fdfa
--- /dev/null
+++ b/test/test113.right-Pw.txt
@@ -0,0 +1,7 @@
+A
+ B
+C
+ D
+E
+F x
+y G
diff --git a/test/test114.left-P.txt b/test/test114.left-P.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/test114.left-P.txt
diff --git a/test/test114.right-P.txt b/test/test114.right-P.txt
new file mode 100644
index 000000000000..f70f10e4db19
--- /dev/null
+++ b/test/test114.right-P.txt
@@ -0,0 +1 @@
+A
diff --git a/test/test115.left-P.txt b/test/test115.left-P.txt
new file mode 100644
index 000000000000..f70f10e4db19
--- /dev/null
+++ b/test/test115.left-P.txt
@@ -0,0 +1 @@
+A
diff --git a/test/test115.right-P.txt b/test/test115.right-P.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/test115.right-P.txt
diff --git a/test/test116.left-P.txt b/test/test116.left-P.txt
new file mode 100644
index 000000000000..9a6e925fd9fb
--- /dev/null
+++ b/test/test116.left-P.txt
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 2017 Martin Pieuchot <mpi@openbsd.org>
+ * Copyright (c) 2018, 2019, 2020 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2020 Ori Bernstein <ori@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+
+static const struct got_error *
+cmd_import(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ char *path_dir = NULL, *repo_path = NULL, *logmsg = NULL;
+ char *gitconfig_path = NULL, *editor = NULL, *author = NULL;
+ const char *branch_name = "main";
+ char *refname = NULL, *id_str = NULL, *logmsg_path = NULL;
+ struct got_repository *repo = NULL;
+ struct got_reference *branch_ref = NULL, *head_ref = NULL;
+ struct got_object_id *new_commit_id = NULL;
+ int ch;
+ struct got_pathlist_head ignores;
+ struct got_pathlist_entry *pe;
+ int preserve_logmsg = 0;
+
+ TAILQ_INIT(&ignores);
+
+ while ((ch = getopt(argc, argv, "b:m:r:I:")) != -1) {
+ switch (ch) {
+ case 'b':
+ branch_name = optarg;
+ break;
+ case 'm':
+ logmsg = strdup(optarg);
+ if (logmsg == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
+ break;
+ case 'r':
+ repo_path = realpath(optarg, NULL);
+ if (repo_path == NULL) {
+ error = got_error_from_errno2("realpath",
+ optarg);
+ goto done;
+ }
+ break;
+ case 'I':
+ if (optarg[0] == '\0')
+ break;
+ error = got_pathlist_insert(&pe, &ignores, optarg,
+ NULL);
+ if (error)
+ goto done;
+ break;
+ default:
+ usage_import();
+ /* NOTREACHED */
+ }
+ }
+
+#ifndef PROFILE
+ if (pledge("stdio rpath wpath cpath fattr flock proc exec sendfd "
+ "unveil",
+ NULL) == -1)
+ err(1, "pledge");
+#endif
+ if (argc != 1)
+ usage_import();
+
+ if (repo_path == NULL) {
+ repo_path = getcwd(NULL, 0);
+ if (repo_path == NULL)
+ return got_error_from_errno("getcwd");
+ }
+ error = get_gitconfig_path(&gitconfig_path);
+ if (error)
+ goto done;
+ error = got_repo_open(&repo, repo_path, gitconfig_path);
+ if (error)
+ goto done;
+
+ error = get_author(&author, repo, NULL);
+ if (error)
+ return error;
+
+ /*
+ * Don't let the user create a branch name with a leading '-'.
+ * While technically a valid reference name, this case is usually
+ * an unintended typo.
+ */
+ if (branch_name[0] == '-')
+ return got_error_path(branch_name, GOT_ERR_REF_NAME_MINUS);
+
+ if (asprintf(&refname, "refs/heads/%s", branch_name) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+
+ error = got_ref_open(&branch_ref, repo, refname, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF)
+ goto done;
+ } else {
+ error = got_error_msg(GOT_ERR_BRANCH_EXISTS,
+ "import target branch already exists");
+ goto done;
+ }
+
+ path_dir = realpath(argv[0], NULL);
+ if (path_dir == NULL) {
+ error = got_error_from_errno2("realpath", argv[0]);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(path_dir);
+
+ /*
+ * unveil(2) traverses exec(2); if an editor is used we have
+ * to apply unveil after the log message has been written.
+ */
+ if (logmsg == NULL || strlen(logmsg) == 0) {
+ error = get_editor(&editor);
+ if (error)
+ goto done;
+ free(logmsg);
+ error = collect_import_msg(&logmsg, &logmsg_path, editor,
+ path_dir, refname);
+ if (error) {
+ if (error->code != GOT_ERR_COMMIT_MSG_EMPTY &&
+ logmsg_path != NULL)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ if (unveil(path_dir, "r") != 0) {
+ error = got_error_from_errno2("unveil", path_dir);
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = apply_unveil(got_repo_get_path(repo), 0, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_repo_import(&new_commit_id, path_dir, logmsg,
+ author, &ignores, repo, import_progress, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc(&branch_ref, refname, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(branch_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_object_id_str(&id_str, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc_symref(&head_ref, GOT_REF_HEAD,
+ branch_ref);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(head_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ printf("Created branch %s with commit %s\n",
+ got_ref_get_name(branch_ref), id_str);
+done:
+ if (preserve_logmsg) {
+ fprintf(stderr, "%s: log message preserved in %s\n",
+ getprogname(), logmsg_path);
+ } else if (logmsg_path && unlink(logmsg_path) == -1 && error == NULL)
+ error = got_error_from_errno2("unlink", logmsg_path);
+ free(logmsg);
+ free(logmsg_path);
+ free(repo_path);
+ free(editor);
+ free(refname);
+ free(new_commit_id);
+ free(id_str);
+ free(author);
+ free(gitconfig_path);
+ if (branch_ref)
+ got_ref_close(branch_ref);
+ if (head_ref)
+ got_ref_close(head_ref);
+ return error;
+}
+
+__dead static void
+usage_clone(void)
+{
+ fprintf(stderr, "usage: %s clone [-a] [-b branch] [-l] [-m] [-q] [-v] "
+ "[-R reference] repository-url [directory]\n", getprogname());
+ exit(1);
+}
+
+static const struct got_error *
+cmd_clone(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+ const char *repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+ struct got_object_id *pack_hash = NULL;
+ int ch, fetchfd = -1, fetchstatus;
+ pid_t fetchpid = -1;
+ x
+
+ /* Create got.conf(5). */
+ gotconfig_path = got_repo_get_path_gotconfig(repo);
+ if (gotconfig_path == NULL) {
+ error = got_error_from_errno("got_repo_get_path_gotconfig");
+ goto done;
+ }
+ gotconfig_file = fopen(gotconfig_path, "a");
+ if (gotconfig_file == NULL) {
+ error = got_error_from_errno2("fopen", gotconfig_path);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+ "\tprotocol %s\n"
+ "%s%s%s"
+ "\trepository \"%s\"\n"
+ "%s"
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+ server_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+ n = fwrite(gotconfig, 1, strlen(gotconfig), gotconfig_file);
+ if (n != strlen(gotconfig)) {
+ error = got_ferror(gotconfig_file, GOT_ERR_IO);
+ goto done;
+ }
+}
diff --git a/test/test116.right-P.txt b/test/test116.right-P.txt
new file mode 100644
index 000000000000..005c3dbd02ea
--- /dev/null
+++ b/test/test116.right-P.txt
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 2017 Martin Pieuchot <mpi@openbsd.org>
+ * Copyright (c) 2018, 2019, 2020 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2020 Ori Bernstein <ori@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+
+static const struct got_error *
+cmd_import(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ char *path_dir = NULL, *repo_path = NULL, *logmsg = NULL;
+ char *gitconfig_path = NULL, *editor = NULL, *author = NULL;
+ const char *branch_name = "main";
+ char *refname = NULL, *id_str = NULL, *logmsg_path = NULL;
+ struct got_repository *repo = NULL;
+ struct got_reference *branch_ref = NULL, *head_ref = NULL;
+ struct got_object_id *new_commit_id = NULL;
+ int ch;
+ struct got_pathlist_head ignores;
+ struct got_pathlist_entry *pe;
+ int preserve_logmsg = 0;
+
+ TAILQ_INIT(&ignores);
+
+ while ((ch = getopt(argc, argv, "b:m:r:I:")) != -1) {
+ switch (ch) {
+ case 'b':
+ branch_name = optarg;
+ break;
+ case 'm':
+ logmsg = strdup(optarg);
+ if (logmsg == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
+ break;
+ case 'r':
+ repo_path = realpath(optarg, NULL);
+ if (repo_path == NULL) {
+ error = got_error_from_errno2("realpath",
+ optarg);
+ goto done;
+ }
+ break;
+ case 'I':
+ if (optarg[0] == '\0')
+ break;
+ error = got_pathlist_insert(&pe, &ignores, optarg,
+ NULL);
+ if (error)
+ goto done;
+ break;
+ default:
+ usage_import();
+ /* NOTREACHED */
+ }
+ }
+
+#ifndef PROFILE
+ if (pledge("stdio rpath wpath cpath fattr flock proc exec sendfd "
+ "unveil",
+ NULL) == -1)
+ err(1, "pledge");
+#endif
+ if (argc != 1)
+ usage_import();
+
+ if (repo_path == NULL) {
+ repo_path = getcwd(NULL, 0);
+ if (repo_path == NULL)
+ return got_error_from_errno("getcwd");
+ }
+ error = get_gitconfig_path(&gitconfig_path);
+ if (error)
+ goto done;
+ error = got_repo_open(&repo, repo_path, gitconfig_path);
+ if (error)
+ goto done;
+
+ error = get_author(&author, repo, NULL);
+ if (error)
+ return error;
+
+ /*
+ * Don't let the user create a branch name with a leading '-'.
+ * While technically a valid reference name, this case is usually
+ * an unintended typo.
+ */
+ if (branch_name[0] == '-')
+ return got_error_path(branch_name, GOT_ERR_REF_NAME_MINUS);
+
+ if (asprintf(&refname, "refs/heads/%s", branch_name) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+
+ error = got_ref_open(&branch_ref, repo, refname, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF)
+ goto done;
+ } else {
+ error = got_error_msg(GOT_ERR_BRANCH_EXISTS,
+ "import target branch already exists");
+ goto done;
+ }
+
+ path_dir = realpath(argv[0], NULL);
+ if (path_dir == NULL) {
+ error = got_error_from_errno2("realpath", argv[0]);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(path_dir);
+
+ /*
+ * unveil(2) traverses exec(2); if an editor is used we have
+ * to apply unveil after the log message has been written.
+ */
+ if (logmsg == NULL || strlen(logmsg) == 0) {
+ error = get_editor(&editor);
+ if (error)
+ goto done;
+ free(logmsg);
+ error = collect_import_msg(&logmsg, &logmsg_path, editor,
+ path_dir, refname);
+ if (error) {
+ if (error->code != GOT_ERR_COMMIT_MSG_EMPTY &&
+ logmsg_path != NULL)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ if (unveil(path_dir, "r") != 0) {
+ error = got_error_from_errno2("unveil", path_dir);
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = apply_unveil(got_repo_get_path(repo), 0, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_repo_import(&new_commit_id, path_dir, logmsg,
+ author, &ignores, repo, import_progress, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc(&branch_ref, refname, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(branch_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_object_id_str(&id_str, new_commit_id);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0);
+ if (error) {
+ if (error->code != GOT_ERR_NOT_REF) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_alloc_symref(&head_ref, GOT_REF_HEAD,
+ branch_ref);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
+ error = got_ref_write(head_ref, repo);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+ }
+
+ printf("Created branch %s with commit %s\n",
+ got_ref_get_name(branch_ref), id_str);
+done:
+ if (preserve_logmsg) {
+ fprintf(stderr, "%s: log message preserved in %s\n",
+ getprogname(), logmsg_path);
+ } else if (logmsg_path && unlink(logmsg_path) == -1 && error == NULL)
+ error = got_error_from_errno2("unlink", logmsg_path);
+ free(logmsg);
+ free(logmsg_path);
+ free(repo_path);
+ free(editor);
+ free(refname);
+ free(new_commit_id);
+ free(id_str);
+ free(author);
+ free(gitconfig_path);
+ if (branch_ref)
+ got_ref_close(branch_ref);
+ if (head_ref)
+ got_ref_close(head_ref);
+ return error;
+}
+
+__dead static void
+usage_clone(void)
+{
+ fprintf(stderr, "usage: %s clone [-a] [-b branch] [-l] [-m] [-q] [-v] "
+ "[-R reference] repository-url [directory]\n", getprogname());
+ exit(1);
+}
+
+static const struct got_error *
+cmd_clone(int argc, char *argv[])
+{
+ const struct got_error *error = NULL;
+ const char *uri, *dirname;
+ char *proto, *host, *port, *repo_name, *server_path;
+ char *default_destdir = NULL, *id_str = NULL;
+ const char *repo_path, *remote_repo_path;
+ struct got_repository *repo = NULL;
+ struct got_pathlist_head refs, symrefs, wanted_branches, wanted_refs;
+ struct got_pathlist_entry *pe;
+ struct got_object_id *pack_hash = NULL;
+ int ch, fetchfd = -1, fetchstatus;
+ pid_t fetchpid = -1;
+ x
+
+ /* Create got.conf(5). */
+ gotconfig_path = got_repo_get_path_gotconfig(repo);
+ if (gotconfig_path == NULL) {
+ error = got_error_from_errno("got_repo_get_path_gotconfig");
+ goto done;
+ }
+ gotconfig_file = fopen(gotconfig_path, "a");
+ if (gotconfig_file == NULL) {
+ error = got_error_from_errno2("fopen", gotconfig_path);
+ goto done;
+ }
+ got_path_strip_trailing_slashes(server_path);
+ remote_repo_path = server_path;
+ while (remote_repo_path[0] == '/')
+ remote_repo_path++;
+ if (asprintf(&gotconfig,
+ "remote \"%s\" {\n"
+ "\tserver %s\n"
+ "\tprotocol %s\n"
+ "%s%s%s"
+ "\trepository \"%s\"\n"
+ "%s"
+ "}\n",
+ GOT_FETCH_DEFAULT_REMOTE_NAME, host, proto,
+ port ? "\tport " : "", port ? port : "", port ? "\n" : "",
+ remote_repo_path,
+ mirror_references ? "\tmirror-references yes\n" : "") == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+ n = fwrite(gotconfig, 1, strlen(gotconfig), gotconfig_file);
+ if (n != strlen(gotconfig)) {
+ error = got_ferror(gotconfig_file, GOT_ERR_IO);
+ goto done;
+ }
+}
diff --git a/test/test117.left-P.txt b/test/test117.left-P.txt
new file mode 100644
index 000000000000..ea2d2cd6156c
--- /dev/null
+++ b/test/test117.left-P.txt
@@ -0,0 +1,1237 @@
+/* $OpenBSD: softraid_crypto.c,v 1.139 2020/07/13 00:06:22 kn Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+
+struct sr_crypto_wu *sr_crypto_prepare(struct sr_workunit *, int);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+void sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+void sr_crypto_read(struct cryptop *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_wu_size = sizeof(struct sr_crypto_wu);
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+ }
+
+ if (coerced_size > SR_CRYPTO_MAXSIZE) {
+ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
+ sd->sd_name, coerced_size, SR_CRYPTO_MAXSIZE);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ sr_crypto_create_keys(sd);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, data,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_prepare(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr_t blkno;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_prepare wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ memcpy(crwu->cr_uio.uio_iov->iov_base, xs->data, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ blkno = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the amount
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ KASSERT(crwu->cr_crp->crp_ndescalloc >= n);
+ crwu->cr_crp->crp_ndesc = n;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /*
+ * Select crypto session based on block number.
+ *
+ * XXX - this does not handle the case where the read/write spans
+ * across a different key blocks (e.g. 0.5TB boundary). Currently
+ * this is already broken by the use of scr_key[0] below.
+ */
+ keyndx = blkno >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+
+ crwu->cr_crp->crp_opaque = crwu;
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_NOQUEUE;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0; i < crwu->cr_crp->crp_ndesc; i++, blkno++) {
+ crd = &crwu->cr_crp->crp_desc[i];
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
+ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ memcpy(crd->crd_iv, &blkno, sizeof(blkno));
+ }
+
+ return (crwu);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo->genkdf, kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &kdfinfo->maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF, bc->bc_opaque_size);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Copy new KDF hint to metadata, if supplied. */
+ if (kdfinfo2->flags & SR_CRYPTOKDF_HINT) {
+ if (kdfinfo2->genkdf.len >
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint))
+ goto out;
+ explicit_bzero(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint));
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo2->genkdf, kdfinfo2->genkdf.len);
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ memcpy(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac, check_digest,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF, ksz);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ memcpy(&km->scmi.scm_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ memcpy(&sm->ssdi.ssd_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ memcpy(&skm->skm_maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ free(key_disk, M_DEVBUF, sizeof(struct sr_chunk));
+ key_disk = NULL;
+
+done:
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF,
+ sizeof(struct sr_chunk *));
+ free(fakesd, M_DEVBUF, sizeof(struct sr_discipline));
+ free(sm, M_DEVBUF, sizeof(struct sr_metadata));
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * DEV_BSIZE, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ memcpy(&key_disk->src_meta, (struct sr_meta_chunk *)(sm + 1),
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey,
+ omh + sizeof(struct sr_meta_opt_hdr),
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != NULL; omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ free(omi->omi_som, M_DEVBUF, 0);
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ }
+
+ free(sm, M_DEVBUF, SR_META_SIZE * DEV_BSIZE);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+static void
+sr_crypto_free_sessions(struct sr_discipline *sd)
+{
+ u_int i;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ if (sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ }
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+ struct cryptoini cri;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ sd->mds.mdd_crypto.scr_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ sd->mds.mdd_crypto.scr_klen = 512;
+ break;
+ default:
+ sr_error(sd->sd_sc, "unknown crypto algorithm");
+ return (EINVAL);
+ }
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each work unit allocate the uio, iovec and crypto structures.
+ * These have to be allocated now because during runtime we cannot
+ * fail an allocation without failing the I/O (which can cause real
+ * problems).
+ */
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ }
+
+ memset(&cri, 0, sizeof(cri));
+ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
+ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks. */
+ num_keys = ((sd->sd_meta->ssdi.ssd_size - 1) >>
+ SR_CRYPTO_KEY_BLKSHIFT) + 1;
+ if (num_keys > SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i < num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ sr_crypto_free_sessions(sd);
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ sr_crypto_free_sessions(sd);
+
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ if (crwu->cr_dmabuf)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp)
+ crypto_freereq(crwu->cr_crp);
+ }
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ daddr_t blkno;
+ int rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (sr_validate_io(wu, &blkno, "sr_crypto_rw"))
+ return (1);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_prepare(wu, 1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ rv = crypto_dispatch(crwu->cr_crp);
+ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+ } else
+ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+}
+
+void
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+ sr_crypto_dev_rw(wu, crwu);
+}
+
+int
+sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ daddr_t blkno;
+
+ blkno = wu->swu_blk_start;
+
+ ccb = sr_ccb_rw(sd, 0, blkno, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+ sr_schedule_wu(wu);
+
+ return (0);
+
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ crwu = sr_crypto_prepare(wu, 0);
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ crypto_dispatch(crwu->cr_crp);
+ return;
+ }
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test117.right-P.txt b/test/test117.right-P.txt
new file mode 100644
index 000000000000..b4d9d440ef18
--- /dev/null
+++ b/test/test117.right-P.txt
@@ -0,0 +1,1251 @@
+/* $OpenBSD: softraid_crypto.c,v 1.139 2020/07/13 00:06:22 kn Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+
+struct sr_crypto_wu *sr_crypto_prepare(struct sr_workunit *, int);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_init(struct sr_discipline *,
+ struct bioc_createraid *);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+void sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+void sr_crypto_read(struct cryptop *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_wu_size = sizeof(struct sr_crypto_wu);
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ return (rv);
+ }
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ rv = sr_crypto_init(sd, bc);
+ if (rv)
+ return (rv);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+ return (0);
+}
+
+int
+sr_crypto_init(struct sr_discipline *sd, struct bioc_createraid *bc)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (sd->sd_meta->ssdi.ssd_size > SR_CRYPTO_MAXSIZE) {
+ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
+ sd->sd_name, sd->sd_meta->ssdi.ssd_size,
+ SR_CRYPTO_MAXSIZE);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sr_crypto_create_keys(sd);
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, data,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_prepare(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr_t blkno;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_prepare wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ memcpy(crwu->cr_uio.uio_iov->iov_base, xs->data, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ blkno = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the amount
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ KASSERT(crwu->cr_crp->crp_ndescalloc >= n);
+ crwu->cr_crp->crp_ndesc = n;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /*
+ * Select crypto session based on block number.
+ *
+ * XXX - this does not handle the case where the read/write spans
+ * across a different key blocks (e.g. 0.5TB boundary). Currently
+ * this is already broken by the use of scr_key[0] below.
+ */
+ keyndx = blkno >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+
+ crwu->cr_crp->crp_opaque = crwu;
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_NOQUEUE;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0; i < crwu->cr_crp->crp_ndesc; i++, blkno++) {
+ crd = &crwu->cr_crp->crp_desc[i];
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
+ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ memcpy(crd->crd_iv, &blkno, sizeof(blkno));
+ }
+
+ return (crwu);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo->genkdf, kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &kdfinfo->maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF, bc->bc_opaque_size);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Copy new KDF hint to metadata, if supplied. */
+ if (kdfinfo2->flags & SR_CRYPTOKDF_HINT) {
+ if (kdfinfo2->genkdf.len >
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint))
+ goto out;
+ explicit_bzero(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint));
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo2->genkdf, kdfinfo2->genkdf.len);
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ memcpy(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac, check_digest,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF, ksz);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ memcpy(&km->scmi.scm_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ memcpy(&sm->ssdi.ssd_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ memcpy(&skm->skm_maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ free(key_disk, M_DEVBUF, sizeof(struct sr_chunk));
+ key_disk = NULL;
+
+done:
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF,
+ sizeof(struct sr_chunk *));
+ free(fakesd, M_DEVBUF, sizeof(struct sr_discipline));
+ free(sm, M_DEVBUF, sizeof(struct sr_metadata));
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * DEV_BSIZE, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ memcpy(&key_disk->src_meta, (struct sr_meta_chunk *)(sm + 1),
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey,
+ omh + sizeof(struct sr_meta_opt_hdr),
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != NULL; omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ free(omi->omi_som, M_DEVBUF, 0);
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ }
+
+ free(sm, M_DEVBUF, SR_META_SIZE * DEV_BSIZE);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+static void
+sr_crypto_free_sessions(struct sr_discipline *sd)
+{
+ u_int i;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ if (sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ }
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+ struct cryptoini cri;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ sd->mds.mdd_crypto.scr_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ sd->mds.mdd_crypto.scr_klen = 512;
+ break;
+ default:
+ sr_error(sd->sd_sc, "unknown crypto algorithm");
+ return (EINVAL);
+ }
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each work unit allocate the uio, iovec and crypto structures.
+ * These have to be allocated now because during runtime we cannot
+ * fail an allocation without failing the I/O (which can cause real
+ * problems).
+ */
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ }
+
+ memset(&cri, 0, sizeof(cri));
+ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
+ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks. */
+ num_keys = ((sd->sd_meta->ssdi.ssd_size - 1) >>
+ SR_CRYPTO_KEY_BLKSHIFT) + 1;
+ if (num_keys > SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i < num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ sr_crypto_free_sessions(sd);
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ sr_crypto_free_sessions(sd);
+
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ if (crwu->cr_dmabuf)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp)
+ crypto_freereq(crwu->cr_crp);
+ }
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ daddr_t blkno;
+ int rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (sr_validate_io(wu, &blkno, "sr_crypto_rw"))
+ return (1);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_prepare(wu, 1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ rv = crypto_dispatch(crwu->cr_crp);
+ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+ } else
+ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+}
+
+void
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+ sr_crypto_dev_rw(wu, crwu);
+}
+
+int
+sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ daddr_t blkno;
+
+ blkno = wu->swu_blk_start;
+
+ ccb = sr_ccb_rw(sd, 0, blkno, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+ sr_schedule_wu(wu);
+
+ return (0);
+
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ crwu = sr_crypto_prepare(wu, 0);
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ crypto_dispatch(crwu->cr_crp);
+ return;
+ }
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test122.left-P.txt b/test/test122.left-P.txt
new file mode 100644
index 000000000000..50def6afef62
--- /dev/null
+++ b/test/test122.left-P.txt
@@ -0,0 +1,1338 @@
+/* $OpenBSD: softraid_crypto.c,v 1.104 2014/01/21 04:23:14 jsing Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/proc.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/cryptosoft.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+#include <dev/rndvar.h>
+
+/*
+ * The per-I/O data that we need to preallocate. We cannot afford to allow I/O
+ * to start failing when memory pressure kicks in. We can store this in the WU
+ * because we assert that only one ccb per WU will ever be active.
+ */
+struct sr_crypto_wu {
+ TAILQ_ENTRY(sr_crypto_wu) cr_link;
+ struct uio cr_uio;
+ struct iovec cr_iov;
+ struct cryptop *cr_crp;
+ struct cryptodesc *cr_descs;
+ struct sr_workunit *cr_wu;
+ void *cr_dmabuf;
+};
+
+
+struct sr_crypto_wu *sr_crypto_wu_get(struct sr_workunit *, int);
+void sr_crypto_wu_put(struct sr_crypto_wu *);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+int sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+int sr_crypto_read(struct cryptop *);
+void sr_crypto_finish_io(struct sr_workunit *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ sr_crypto_create_keys(sd);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ bcopy(data, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_wu_get(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr_t blk;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_get wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ if ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL)
+ TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+ if (crwu == NULL)
+ panic("sr_crypto_wu_get: out of work units");
+
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ bcopy(xs->data, crwu->cr_uio.uio_iov->iov_base, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ blk = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the linked list
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ crd = crwu->cr_descs;
+ for (i = 0; i < ((MAXPHYS >> DEV_BSHIFT) - n); i++) {
+ crd = crd->crd_next;
+ KASSERT(crd);
+ }
+ crwu->cr_crp->crp_desc = crd;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /*
+ * Select crypto session based on block number.
+ *
+ * XXX - this does not handle the case where the read/write spans
+ * across a different key blocks (e.g. 0.5TB boundary). Currently
+ * this is already broken by the use of scr_key[0] below.
+ */
+ keyndx = blk >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0, crd = crwu->cr_crp->crp_desc; crd;
+ i++, blk++, crd = crd->crd_next) {
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
+ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ bcopy(&blk, crd->crd_iv, sizeof(blk));
+ }
+ crwu->cr_wu = wu;
+ crwu->cr_crp->crp_opaque = crwu;
+
+ return (crwu);
+}
+
+void
+sr_crypto_wu_put(struct sr_crypto_wu *crwu)
+{
+ struct sr_workunit *wu = crwu->cr_wu;
+ struct sr_discipline *sd = wu->swu_dis;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_wu_put crwu: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu);
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ bcopy(&kdfinfo->genkdf,
+ sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ bcopy(&kdfinfo->maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ bcopy(check_digest, sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto fail;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ goto fail;
+ }
+ if (label.d_secsize != DEV_BSIZE) {
+ sr_error(sc, "%s has unsupported sector size (%d)",
+ devname, label.d_secsize);
+ goto fail;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)\n",
+ devname, label.d_partitions[part].p_fstype);
+ goto fail;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ bcopy(&sd->sd_meta->ssdi.ssd_uuid, &km->scmi.scm_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ bcopy(&sd->sd_meta->ssdi.ssd_uuid, &sm->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ bcopy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ if (key_disk)
+ free(key_disk, M_DEVBUF);
+ key_disk = NULL;
+
+done:
+ if (omi)
+ free(omi, M_DEVBUF);
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF);
+ if (fakesd)
+ free(fakesd, M_DEVBUF);
+ if (sm)
+ free(sm, M_DEVBUF);
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ goto done;
+ }
+ if (label.d_secsize != DEV_BSIZE) {
+ sr_error(sc, "%s has unsupported sector size (%d)",
+ devname, label.d_secsize);
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)\n",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * 512, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ bcopy((struct sr_meta_chunk *)(sm + 1), &key_disk->src_meta,
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ bcopy(&skm->skm_maskkey,
+ sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ bcopy(omh + sizeof(struct sr_meta_opt_hdr),
+ sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != SLIST_END(&som); omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ if (omi->omi_som)
+ free(omi->omi_som, M_DEVBUF);
+ free(omi, M_DEVBUF);
+ }
+
+ if (sm)
+ free(sm, M_DEVBUF);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct cryptoini cri;
+ struct sr_crypto_wu *crwu;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ sd->mds.mdd_crypto.scr_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ sd->mds.mdd_crypto.scr_klen = 512;
+ break;
+ default:
+ sr_error(sd->sd_sc, "unknown crypto algorithm");
+ return (EINVAL);
+ }
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd, sizeof(struct sr_workunit))) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each wu allocate the uio, iovec and crypto structures.
+ * these have to be allocated now because during runtime we can't
+ * fail an allocation without failing the io (which can cause real
+ * problems).
+ */
+ mtx_init(&sd->mds.mdd_crypto.scr_mutex, IPL_BIO);
+ TAILQ_INIT(&sd->mds.mdd_crypto.scr_wus);
+ for (i = 0; i < sd->sd_max_wu; i++) {
+ crwu = malloc(sizeof(*crwu), M_DEVBUF,
+ M_WAITOK | M_ZERO | M_CANFAIL);
+ if (crwu == NULL)
+ return (ENOMEM);
+ /* put it on the list now so if we fail it'll be freed */
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ TAILQ_INSERT_TAIL(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ crwu->cr_descs = crwu->cr_crp->crp_desc;
+ }
+
+ memset(&cri, 0, sizeof(cri));
+ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
+ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks */
+ num_keys = sd->sd_meta->ssdi.ssd_size >> SR_CRYPTO_KEY_BLKSHIFT;
+ if (num_keys >= SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i <= num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ for (i = 0;
+ sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1;
+ i++) {
+ crypto_freesession(
+ sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_crypto_wu *crwu;
+ u_int i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk, sizeof
+ sd->mds.mdd_crypto.key_disk);
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF);
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ for (i = 0; sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1; i++) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+
+ mtx_enter(&sd->mds.mdd_crypto.scr_mutex);
+ while ((crwu = TAILQ_FIRST(&sd->mds.mdd_crypto.scr_wus)) != NULL) {
+ TAILQ_REMOVE(&sd->mds.mdd_crypto.scr_wus, crwu, cr_link);
+
+ if (crwu->cr_dmabuf != NULL)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp) {
+ crwu->cr_crp->crp_desc = crwu->cr_descs;
+ crypto_freereq(crwu->cr_crp);
+ }
+ free(crwu, M_DEVBUF);
+ }
+ mtx_leave(&sd->mds.mdd_crypto.scr_mutex);
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ daddr_t blk;
+ int s, rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (sr_validate_io(wu, &blk, "sr_crypto_rw"))
+ return (1);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_wu_get(wu, 1);
+ if (crwu == NULL)
+ return (1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ s = splvm();
+ rv = crypto_invoke(crwu->cr_crp);
+ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+ splx(s);
+ } else
+ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+}
+
+int
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %x xs: %x\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+ }
+
+ return (sr_crypto_dev_rw(wu, crwu));
+}
+
+int
+sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ daddr_t blk;
+
+ blk = wu->swu_blk_start;
+ blk += sd->sd_meta->ssd_data_offset;
+
+ ccb = sr_ccb_rw(sd, 0, blk, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+ sr_schedule_wu(wu);
+
+ return (0);
+
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ struct sr_ccb *ccb;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ /* only fails on implementation error */
+ crwu = sr_crypto_wu_get(wu, 0);
+ if (crwu == NULL)
+ panic("sr_crypto_intr: no wu");
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ ccb = TAILQ_FIRST(&wu->swu_ccb);
+ if (ccb == NULL)
+ panic("sr_crypto_done: no ccbs on workunit");
+ ccb->ccb_opaque = crwu;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_intr: crypto_invoke %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ s = splvm();
+ crypto_invoke(crwu->cr_crp);
+ splx(s);
+ return;
+ }
+
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+}
+
+void
+sr_crypto_finish_io(struct sr_workunit *wu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+#ifdef SR_DEBUG
+ struct sr_softc *sc = sd->sd_sc;
+#endif /* SR_DEBUG */
+
+ splassert(IPL_BIO);
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_finish_io: wu %x xs: %x\n",
+ DEVNAME(sc), wu, xs);
+
+ if (wu->swu_cb_active == 1)
+ panic("%s: sr_crypto_finish_io", DEVNAME(sd->sd_sc));
+ TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link) {
+ if (ccb->ccb_opaque == NULL)
+ continue;
+ sr_crypto_wu_put(ccb->ccb_opaque);
+ }
+
+ sr_scsi_done(sd, xs);
+}
+
+int
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %x xs: %x\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_crypto_finish_io(wu);
+ splx(s);
+
+ return (0);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test122.right-P.txt b/test/test122.right-P.txt
new file mode 100644
index 000000000000..7e2cc400cddb
--- /dev/null
+++ b/test/test122.right-P.txt
@@ -0,0 +1,1251 @@
+/* $OpenBSD: softraid_crypto.c,v 1.139 2020/07/13 00:06:22 kn Exp $ */
+/*
+ * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org>
+ * Copyright (c) 2008 Damien Miller <djm@mindrot.org>
+ * Copyright (c) 2009 Joel Sing <jsing@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bio.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/device.h>
+#include <sys/ioctl.h>
+#include <sys/malloc.h>
+#include <sys/pool.h>
+#include <sys/kernel.h>
+#include <sys/disk.h>
+#include <sys/rwlock.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/disklabel.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/sensors.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/dkio.h>
+
+#include <crypto/cryptodev.h>
+#include <crypto/rijndael.h>
+#include <crypto/md5.h>
+#include <crypto/sha1.h>
+#include <crypto/sha2.h>
+#include <crypto/hmac.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <scsi/scsi_disk.h>
+
+#include <dev/softraidvar.h>
+
+/*
+ * The per-I/O data that we need to preallocate. We cannot afford to allow I/O
+ * to start failing when memory pressure kicks in. We can store this in the WU
+ * because we assert that only one ccb per WU will ever be active.
+ */
+struct sr_crypto_wu {
+ struct sr_workunit cr_wu; /* Must be first. */
+ struct uio cr_uio;
+ struct iovec cr_iov;
+ struct cryptop *cr_crp;
+ void *cr_dmabuf;
+};
+
+
+struct sr_crypto_wu *sr_crypto_prepare(struct sr_workunit *, int);
+int sr_crypto_create_keys(struct sr_discipline *);
+int sr_crypto_get_kdf(struct bioc_createraid *,
+ struct sr_discipline *);
+int sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_encrypt(u_char *, u_char *, u_char *, size_t, int);
+int sr_crypto_decrypt_key(struct sr_discipline *);
+int sr_crypto_change_maskkey(struct sr_discipline *,
+ struct sr_crypto_kdfinfo *, struct sr_crypto_kdfinfo *);
+int sr_crypto_create(struct sr_discipline *,
+ struct bioc_createraid *, int, int64_t);
+int sr_crypto_assemble(struct sr_discipline *,
+ struct bioc_createraid *, int, void *);
+int sr_crypto_alloc_resources(struct sr_discipline *);
+void sr_crypto_free_resources(struct sr_discipline *);
+int sr_crypto_ioctl(struct sr_discipline *,
+ struct bioc_discipline *);
+int sr_crypto_meta_opt_handler(struct sr_discipline *,
+ struct sr_meta_opt_hdr *);
+void sr_crypto_write(struct cryptop *);
+int sr_crypto_rw(struct sr_workunit *);
+int sr_crypto_dev_rw(struct sr_workunit *, struct sr_crypto_wu *);
+void sr_crypto_done(struct sr_workunit *);
+void sr_crypto_read(struct cryptop *);
+void sr_crypto_calculate_check_hmac_sha1(u_int8_t *, int,
+ u_int8_t *, int, u_char *);
+void sr_crypto_hotplug(struct sr_discipline *, struct disk *, int);
+
+#ifdef SR_DEBUG0
+void sr_crypto_dumpkeys(struct sr_discipline *);
+#endif
+
+/* Discipline initialisation. */
+void
+sr_crypto_discipline_init(struct sr_discipline *sd)
+{
+ int i;
+
+ /* Fill out discipline members. */
+ sd->sd_wu_size = sizeof(struct sr_crypto_wu);
+ sd->sd_type = SR_MD_CRYPTO;
+ strlcpy(sd->sd_name, "CRYPTO", sizeof(sd->sd_name));
+ sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE;
+ sd->sd_max_wu = SR_CRYPTO_NOWU;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ /* Setup discipline specific function pointers. */
+ sd->sd_alloc_resources = sr_crypto_alloc_resources;
+ sd->sd_assemble = sr_crypto_assemble;
+ sd->sd_create = sr_crypto_create;
+ sd->sd_free_resources = sr_crypto_free_resources;
+ sd->sd_ioctl_handler = sr_crypto_ioctl;
+ sd->sd_meta_opt_handler = sr_crypto_meta_opt_handler;
+ sd->sd_scsi_rw = sr_crypto_rw;
+ sd->sd_scsi_done = sr_crypto_done;
+}
+
+int
+sr_crypto_create(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, int64_t coerced_size)
+{
+ struct sr_meta_opt_item *omi;
+ int rv = EINVAL;
+
+ if (no_chunk != 1) {
+ sr_error(sd->sd_sc, "%s requires exactly one chunk",
+ sd->sd_name);
+ goto done;
+ }
+
+ if (coerced_size > SR_CRYPTO_MAXSIZE) {
+ sr_error(sd->sd_sc, "%s exceeds maximum size (%lli > %llu)",
+ sd->sd_name, coerced_size, SR_CRYPTO_MAXSIZE);
+ goto done;
+ }
+
+ /* Create crypto optional metadata. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_crypto), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_CRYPTO;
+ omi->omi_som->som_length = sizeof(struct sr_meta_crypto);
+ SLIST_INSERT_HEAD(&sd->sd_meta_opt, omi, omi_link);
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)omi->omi_som;
+ sd->sd_meta->ssdi.ssd_opt_no++;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ if (bc->bc_key_disk != NODEV) {
+
+ /* Create a key disk. */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_create_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ sd->sd_capabilities |= SR_CAP_AUTO_ASSEMBLE;
+
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+
+ /* No hint available yet. */
+ bc->bc_opaque_status = BIOC_SOINOUT_FAILED;
+ rv = EAGAIN;
+ goto done;
+
+ } else if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+
+ /* Passphrase volumes cannot be automatically assembled. */
+ if (!(bc->bc_flags & BIOC_SCNOAUTOASSEMBLE) && bc->bc_key_disk == NODEV)
+ goto done;
+
+ sd->sd_meta->ssdi.ssd_size = coerced_size;
+
+ sr_crypto_create_keys(sd);
+
+ sd->sd_max_ccb_per_wu = no_chunk;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+int
+sr_crypto_assemble(struct sr_discipline *sd, struct bioc_createraid *bc,
+ int no_chunk, void *data)
+{
+ int rv = EINVAL;
+
+ sd->mds.mdd_crypto.key_disk = NULL;
+
+ /* Crypto optional metadata must already exist... */
+ if (sd->mds.mdd_crypto.scr_meta == NULL)
+ goto done;
+
+ if (data != NULL) {
+ /* Kernel already has mask key. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, data,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (bc->bc_key_disk != NODEV) {
+ /* Read the mask key from the key disk. */
+ sd->mds.mdd_crypto.key_disk =
+ sr_crypto_read_key_disk(sd, bc->bc_key_disk);
+ if (sd->mds.mdd_crypto.key_disk == NULL)
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOOUT) {
+ /* provide userland with kdf hint */
+ if (bc->bc_opaque == NULL)
+ goto done;
+
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ bc->bc_opaque_size)
+ goto done;
+
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bc->bc_opaque, bc->bc_opaque_size))
+ goto done;
+
+ /* we're done */
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = EAGAIN;
+ goto done;
+ } else if (bc->bc_opaque_flags & BIOC_SOIN) {
+ /* get kdf with maskkey from userland */
+ if (sr_crypto_get_kdf(bc, sd))
+ goto done;
+ } else
+ goto done;
+
+ sd->sd_max_ccb_per_wu = sd->sd_meta->ssdi.ssd_chunk_no;
+
+ rv = 0;
+done:
+ return (rv);
+}
+
+struct sr_crypto_wu *
+sr_crypto_prepare(struct sr_workunit *wu, int encrypt)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_discipline *sd = wu->swu_dis;
+ struct sr_crypto_wu *crwu;
+ struct cryptodesc *crd;
+ int flags, i, n;
+ daddr_t blkno;
+ u_int keyndx;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_prepare wu %p encrypt %d\n",
+ DEVNAME(sd->sd_sc), wu, encrypt);
+
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iovcnt = 1;
+ crwu->cr_uio.uio_iov->iov_len = xs->datalen;
+ if (xs->flags & SCSI_DATA_OUT) {
+ crwu->cr_uio.uio_iov->iov_base = crwu->cr_dmabuf;
+ memcpy(crwu->cr_uio.uio_iov->iov_base, xs->data, xs->datalen);
+ } else
+ crwu->cr_uio.uio_iov->iov_base = xs->data;
+
+ blkno = wu->swu_blk_start;
+ n = xs->datalen >> DEV_BSHIFT;
+
+ /*
+ * We preallocated enough crypto descs for up to MAXPHYS of I/O.
+ * Since there may be less than that we need to tweak the amount
+ * of crypto desc structures to be just long enough for our needs.
+ */
+ KASSERT(crwu->cr_crp->crp_ndescalloc >= n);
+ crwu->cr_crp->crp_ndesc = n;
+ flags = (encrypt ? CRD_F_ENCRYPT : 0) |
+ CRD_F_IV_PRESENT | CRD_F_IV_EXPLICIT;
+
+ /*
+ * Select crypto session based on block number.
+ *
+ * XXX - this does not handle the case where the read/write spans
+ * across a different key blocks (e.g. 0.5TB boundary). Currently
+ * this is already broken by the use of scr_key[0] below.
+ */
+ keyndx = blkno >> SR_CRYPTO_KEY_BLKSHIFT;
+ crwu->cr_crp->crp_sid = sd->mds.mdd_crypto.scr_sid[keyndx];
+
+ crwu->cr_crp->crp_opaque = crwu;
+ crwu->cr_crp->crp_ilen = xs->datalen;
+ crwu->cr_crp->crp_alloctype = M_DEVBUF;
+ crwu->cr_crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_NOQUEUE;
+ crwu->cr_crp->crp_buf = &crwu->cr_uio;
+ for (i = 0; i < crwu->cr_crp->crp_ndesc; i++, blkno++) {
+ crd = &crwu->cr_crp->crp_desc[i];
+ crd->crd_skip = i << DEV_BSHIFT;
+ crd->crd_len = DEV_BSIZE;
+ crd->crd_inject = 0;
+ crd->crd_flags = flags;
+ crd->crd_alg = sd->mds.mdd_crypto.scr_alg;
+ crd->crd_klen = sd->mds.mdd_crypto.scr_klen;
+ crd->crd_key = sd->mds.mdd_crypto.scr_key[0];
+ memcpy(crd->crd_iv, &blkno, sizeof(blkno));
+ }
+
+ return (crwu);
+}
+
+int
+sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd)
+{
+ int rv = EINVAL;
+ struct sr_crypto_kdfinfo *kdfinfo;
+
+ if (!(bc->bc_opaque_flags & BIOC_SOIN))
+ return (rv);
+ if (bc->bc_opaque == NULL)
+ return (rv);
+ if (bc->bc_opaque_size != sizeof(*kdfinfo))
+ return (rv);
+
+ kdfinfo = malloc(bc->bc_opaque_size, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (copyin(bc->bc_opaque, kdfinfo, bc->bc_opaque_size))
+ goto out;
+
+ if (kdfinfo->len != bc->bc_opaque_size)
+ goto out;
+
+ /* copy KDF hint to disk meta data */
+ if (kdfinfo->flags & SR_CRYPTOKDF_HINT) {
+ if (sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint) <
+ kdfinfo->genkdf.len)
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo->genkdf, kdfinfo->genkdf.len);
+ }
+
+ /* copy mask key to run-time meta data */
+ if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) {
+ if (sizeof(sd->mds.mdd_crypto.scr_maskkey) <
+ sizeof(kdfinfo->maskkey))
+ goto out;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &kdfinfo->maskkey,
+ sizeof(kdfinfo->maskkey));
+ }
+
+ bc->bc_opaque_status = BIOC_SOINOUT_OK;
+ rv = 0;
+out:
+ explicit_bzero(kdfinfo, bc->bc_opaque_size);
+ free(kdfinfo, M_DEVBUF, bc->bc_opaque_size);
+
+ return (rv);
+}
+
+int
+sr_crypto_encrypt(u_char *p, u_char *c, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key_enc_only(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_encrypt(&ctx, &p[i], &c[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+int
+sr_crypto_decrypt(u_char *c, u_char *p, u_char *key, size_t size, int alg)
+{
+ rijndael_ctx ctx;
+ int i, rv = 1;
+
+ switch (alg) {
+ case SR_CRYPTOM_AES_ECB_256:
+ if (rijndael_set_key(&ctx, key, 256) != 0)
+ goto out;
+ for (i = 0; i < size; i += RIJNDAEL128_BLOCK_LEN)
+ rijndael_decrypt(&ctx, &c[i], &p[i]);
+ rv = 0;
+ break;
+ default:
+ DNPRINTF(SR_D_DIS, "%s: unsupported encryption algorithm %d\n",
+ "softraid", alg);
+ rv = -1;
+ goto out;
+ }
+
+out:
+ explicit_bzero(&ctx, sizeof(ctx));
+ return (rv);
+}
+
+void
+sr_crypto_calculate_check_hmac_sha1(u_int8_t *maskkey, int maskkey_size,
+ u_int8_t *key, int key_size, u_char *check_digest)
+{
+ u_char check_key[SHA1_DIGEST_LENGTH];
+ HMAC_SHA1_CTX hmacctx;
+ SHA1_CTX shactx;
+
+ bzero(check_key, sizeof(check_key));
+ bzero(&hmacctx, sizeof(hmacctx));
+ bzero(&shactx, sizeof(shactx));
+
+ /* k = SHA1(mask_key) */
+ SHA1Init(&shactx);
+ SHA1Update(&shactx, maskkey, maskkey_size);
+ SHA1Final(check_key, &shactx);
+
+ /* mac = HMAC_SHA1_k(unencrypted key) */
+ HMAC_SHA1_Init(&hmacctx, check_key, sizeof(check_key));
+ HMAC_SHA1_Update(&hmacctx, key, key_size);
+ HMAC_SHA1_Final(check_digest, &hmacctx);
+
+ explicit_bzero(check_key, sizeof(check_key));
+ explicit_bzero(&hmacctx, sizeof(hmacctx));
+ explicit_bzero(&shactx, sizeof(shactx));
+}
+
+int
+sr_crypto_decrypt_key(struct sr_discipline *sd)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_decrypt_key\n", DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ if (sr_crypto_decrypt((u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ (u_char *)sd->mds.mdd_crypto.scr_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ /* Check that the key decrypted properly. */
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+ goto out;
+ }
+
+ rv = 0; /* Success */
+out:
+ /* we don't need the mask key anymore */
+ explicit_bzero(&sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+
+ return rv;
+}
+
+int
+sr_crypto_create_keys(struct sr_discipline *sd)
+{
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_create_keys\n",
+ DEVNAME(sd->sd_sc));
+
+ if (AES_MAXKEYBYTES < sizeof(sd->mds.mdd_crypto.scr_maskkey))
+ return (1);
+
+ /* XXX allow user to specify */
+ sd->mds.mdd_crypto.scr_meta->scm_alg = SR_CRYPTOA_AES_XTS_256;
+
+ /* generate crypto keys */
+ arc4random_buf(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+ /* Mask the disk keys. */
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg = SR_CRYPTOM_AES_ECB_256;
+ sr_crypto_encrypt((u_char *)sd->mds.mdd_crypto.scr_key,
+ (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key,
+ sd->mds.mdd_crypto.scr_maskkey, sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg);
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey),
+ (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key),
+ sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac);
+
+ /* Erase the plaintext disk keys */
+ explicit_bzero(sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key));
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sd->mds.mdd_crypto.scr_meta->scm_flags = SR_CRYPTOF_KEY |
+ SR_CRYPTOF_KDFHINT;
+
+ return (0);
+}
+
+int
+sr_crypto_change_maskkey(struct sr_discipline *sd,
+ struct sr_crypto_kdfinfo *kdfinfo1, struct sr_crypto_kdfinfo *kdfinfo2)
+{
+ u_char check_digest[SHA1_DIGEST_LENGTH];
+ u_char *c, *p = NULL;
+ size_t ksz;
+ int rv = 1;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_change_maskkey\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.scr_meta->scm_check_alg != SR_CRYPTOC_HMAC_SHA1)
+ goto out;
+
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ ksz = sizeof(sd->mds.mdd_crypto.scr_key);
+ p = malloc(ksz, M_DEVBUF, M_WAITOK | M_CANFAIL | M_ZERO);
+ if (p == NULL)
+ goto out;
+
+ if (sr_crypto_decrypt(c, p, kdfinfo1->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+#ifdef SR_DEBUG0
+ sr_crypto_dumpkeys(sd);
+#endif
+
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo1->maskkey,
+ sizeof(kdfinfo1->maskkey), p, ksz, check_digest);
+ if (memcmp(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac,
+ check_digest, sizeof(check_digest)) != 0) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ rv = EPERM;
+ goto out;
+ }
+
+ /* Copy new KDF hint to metadata, if supplied. */
+ if (kdfinfo2->flags & SR_CRYPTOKDF_HINT) {
+ if (kdfinfo2->genkdf.len >
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint))
+ goto out;
+ explicit_bzero(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint));
+ memcpy(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ &kdfinfo2->genkdf, kdfinfo2->genkdf.len);
+ }
+
+ /* Mask the disk keys. */
+ c = (u_char *)sd->mds.mdd_crypto.scr_meta->scm_key;
+ if (sr_crypto_encrypt(p, c, kdfinfo2->maskkey, ksz,
+ sd->mds.mdd_crypto.scr_meta->scm_mask_alg) == -1)
+ goto out;
+
+ /* Prepare key decryption check code. */
+ sd->mds.mdd_crypto.scr_meta->scm_check_alg = SR_CRYPTOC_HMAC_SHA1;
+ sr_crypto_calculate_check_hmac_sha1(kdfinfo2->maskkey,
+ sizeof(kdfinfo2->maskkey), (u_int8_t *)sd->mds.mdd_crypto.scr_key,
+ sizeof(sd->mds.mdd_crypto.scr_key), check_digest);
+
+ /* Copy new encrypted key and HMAC to metadata. */
+ memcpy(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac, check_digest,
+ sizeof(sd->mds.mdd_crypto.scr_meta->chk_hmac_sha1.sch_mac));
+
+ rv = 0; /* Success */
+
+out:
+ if (p) {
+ explicit_bzero(p, ksz);
+ free(p, M_DEVBUF, ksz);
+ }
+
+ explicit_bzero(check_digest, sizeof(check_digest));
+ explicit_bzero(&kdfinfo1->maskkey, sizeof(kdfinfo1->maskkey));
+ explicit_bzero(&kdfinfo2->maskkey, sizeof(kdfinfo2->maskkey));
+
+ return (rv);
+}
+
+struct sr_chunk *
+sr_crypto_create_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_discipline *fakesd = NULL;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_chunk *km;
+ struct sr_meta_opt_item *omi = NULL;
+ struct sr_meta_keydisk *skm;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Create a metadata structure on the key disk and store
+ * keying material in the optional metadata.
+ */
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_create_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label,
+ FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_create_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Create and populate chunk metadata.
+ */
+
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ km = &key_disk->src_meta;
+
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ strlcpy(key_disk->src_devname, devname, sizeof(km->scmi.scm_devname));
+ key_disk->src_size = 0;
+
+ km->scmi.scm_volid = sd->sd_meta->ssdi.ssd_level;
+ km->scmi.scm_chunk_id = 0;
+ km->scmi.scm_size = 0;
+ km->scmi.scm_coerced_size = 0;
+ strlcpy(km->scmi.scm_devname, devname, sizeof(km->scmi.scm_devname));
+ memcpy(&km->scmi.scm_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+
+ sr_checksum(sc, km, &km->scm_checksum,
+ sizeof(struct sr_meta_chunk_invariant));
+
+ km->scm_status = BIOC_SDONLINE;
+
+ /*
+ * Create and populate our own discipline and metadata.
+ */
+
+ sm = malloc(sizeof(struct sr_metadata), M_DEVBUF, M_WAITOK | M_ZERO);
+ sm->ssdi.ssd_magic = SR_MAGIC;
+ sm->ssdi.ssd_version = SR_META_VERSION;
+ sm->ssd_ondisk = 0;
+ sm->ssdi.ssd_vol_flags = 0;
+ memcpy(&sm->ssdi.ssd_uuid, &sd->sd_meta->ssdi.ssd_uuid,
+ sizeof(struct sr_uuid));
+ sm->ssdi.ssd_chunk_no = 1;
+ sm->ssdi.ssd_volid = SR_KEYDISK_VOLID;
+ sm->ssdi.ssd_level = SR_KEYDISK_LEVEL;
+ sm->ssdi.ssd_size = 0;
+ strlcpy(sm->ssdi.ssd_vendor, "OPENBSD", sizeof(sm->ssdi.ssd_vendor));
+ snprintf(sm->ssdi.ssd_product, sizeof(sm->ssdi.ssd_product),
+ "SR %s", "KEYDISK");
+ snprintf(sm->ssdi.ssd_revision, sizeof(sm->ssdi.ssd_revision),
+ "%03d", SR_META_VERSION);
+
+ fakesd = malloc(sizeof(struct sr_discipline), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_sc = sd->sd_sc;
+ fakesd->sd_meta = sm;
+ fakesd->sd_meta_type = SR_META_F_NATIVE;
+ fakesd->sd_vol_status = BIOC_SVONLINE;
+ strlcpy(fakesd->sd_name, "KEYDISK", sizeof(fakesd->sd_name));
+ SLIST_INIT(&fakesd->sd_meta_opt);
+
+ /* Add chunk to volume. */
+ fakesd->sd_vol.sv_chunks = malloc(sizeof(struct sr_chunk *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ fakesd->sd_vol.sv_chunks[0] = key_disk;
+ SLIST_INIT(&fakesd->sd_vol.sv_chunk_list);
+ SLIST_INSERT_HEAD(&fakesd->sd_vol.sv_chunk_list, key_disk, src_link);
+
+ /* Generate mask key. */
+ arc4random_buf(sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+
+ /* Copy mask key to optional metadata area. */
+ omi = malloc(sizeof(struct sr_meta_opt_item), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som = malloc(sizeof(struct sr_meta_keydisk), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ omi->omi_som->som_type = SR_OPT_KEYDISK;
+ omi->omi_som->som_length = sizeof(struct sr_meta_keydisk);
+ skm = (struct sr_meta_keydisk *)omi->omi_som;
+ memcpy(&skm->skm_maskkey, sd->mds.mdd_crypto.scr_maskkey,
+ sizeof(skm->skm_maskkey));
+ SLIST_INSERT_HEAD(&fakesd->sd_meta_opt, omi, omi_link);
+ fakesd->sd_meta->ssdi.ssd_opt_no++;
+
+ /* Save metadata. */
+ if (sr_meta_save(fakesd, SR_META_DIRTY)) {
+ sr_error(sc, "could not save metadata to %s", devname);
+ goto fail;
+ }
+
+ goto done;
+
+fail:
+ free(key_disk, M_DEVBUF, sizeof(struct sr_chunk));
+ key_disk = NULL;
+
+done:
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ if (fakesd && fakesd->sd_vol.sv_chunks)
+ free(fakesd->sd_vol.sv_chunks, M_DEVBUF,
+ sizeof(struct sr_chunk *));
+ free(fakesd, M_DEVBUF, sizeof(struct sr_discipline));
+ free(sm, M_DEVBUF, sizeof(struct sr_metadata));
+ if (open) {
+ VOP_CLOSE(vn, FREAD | FWRITE, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+struct sr_chunk *
+sr_crypto_read_key_disk(struct sr_discipline *sd, dev_t dev)
+{
+ struct sr_softc *sc = sd->sd_sc;
+ struct sr_metadata *sm = NULL;
+ struct sr_meta_opt_item *omi, *omi_next;
+ struct sr_meta_opt_hdr *omh;
+ struct sr_meta_keydisk *skm;
+ struct sr_meta_opt_head som;
+ struct sr_chunk *key_disk = NULL;
+ struct disklabel label;
+ struct vnode *vn = NULL;
+ char devname[32];
+ int c, part, open = 0;
+
+ /*
+ * Load a key disk and load keying material into memory.
+ */
+
+ SLIST_INIT(&som);
+
+ sr_meta_getdevname(sc, dev, devname, sizeof(devname));
+
+ /* Make sure chunk is not already in use. */
+ c = sr_chunk_in_use(sc, dev);
+ if (c != BIOC_SDINVALID && c != BIOC_SDOFFLINE) {
+ sr_error(sc, "%s is already in use", devname);
+ goto done;
+ }
+
+ /* Open device. */
+ if (bdevvp(dev, &vn)) {
+ sr_error(sc, "cannot open key disk %s", devname);
+ goto done;
+ }
+ if (VOP_OPEN(vn, FREAD, NOCRED, curproc)) {
+ DNPRINTF(SR_D_META,"%s: sr_crypto_read_key_disk cannot "
+ "open %s\n", DEVNAME(sc), devname);
+ vput(vn);
+ goto done;
+ }
+ open = 1; /* close dev on error */
+
+ /* Get partition details. */
+ part = DISKPART(dev);
+ if (VOP_IOCTL(vn, DIOCGDINFO, (caddr_t)&label, FREAD,
+ NOCRED, curproc)) {
+ DNPRINTF(SR_D_META, "%s: sr_crypto_read_key_disk ioctl "
+ "failed\n", DEVNAME(sc));
+ goto done;
+ }
+ if (label.d_partitions[part].p_fstype != FS_RAID) {
+ sr_error(sc, "%s partition not of type RAID (%d)",
+ devname, label.d_partitions[part].p_fstype);
+ goto done;
+ }
+
+ /*
+ * Read and validate key disk metadata.
+ */
+ sm = malloc(SR_META_SIZE * DEV_BSIZE, M_DEVBUF, M_WAITOK | M_ZERO);
+ if (sr_meta_native_read(sd, dev, sm, NULL)) {
+ sr_error(sc, "native bootprobe could not read native metadata");
+ goto done;
+ }
+
+ if (sr_meta_validate(sd, dev, sm, NULL)) {
+ DNPRINTF(SR_D_META, "%s: invalid metadata\n",
+ DEVNAME(sc));
+ goto done;
+ }
+
+ /* Make sure this is a key disk. */
+ if (sm->ssdi.ssd_level != SR_KEYDISK_LEVEL) {
+ sr_error(sc, "%s is not a key disk", devname);
+ goto done;
+ }
+
+ /* Construct key disk chunk. */
+ key_disk = malloc(sizeof(struct sr_chunk), M_DEVBUF, M_WAITOK | M_ZERO);
+ key_disk->src_dev_mm = dev;
+ key_disk->src_vn = vn;
+ key_disk->src_size = 0;
+
+ memcpy(&key_disk->src_meta, (struct sr_meta_chunk *)(sm + 1),
+ sizeof(key_disk->src_meta));
+
+ /* Read mask key from optional metadata. */
+ sr_meta_opt_load(sc, sm, &som);
+ SLIST_FOREACH(omi, &som, omi_link) {
+ omh = omi->omi_som;
+ if (omh->som_type == SR_OPT_KEYDISK) {
+ skm = (struct sr_meta_keydisk *)omh;
+ memcpy(sd->mds.mdd_crypto.scr_maskkey, &skm->skm_maskkey,
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ } else if (omh->som_type == SR_OPT_CRYPTO) {
+ /* Original keydisk format with key in crypto area. */
+ memcpy(sd->mds.mdd_crypto.scr_maskkey,
+ omh + sizeof(struct sr_meta_opt_hdr),
+ sizeof(sd->mds.mdd_crypto.scr_maskkey));
+ }
+ }
+
+ open = 0;
+
+done:
+ for (omi = SLIST_FIRST(&som); omi != NULL; omi = omi_next) {
+ omi_next = SLIST_NEXT(omi, omi_link);
+ free(omi->omi_som, M_DEVBUF, 0);
+ free(omi, M_DEVBUF, sizeof(struct sr_meta_opt_item));
+ }
+
+ free(sm, M_DEVBUF, SR_META_SIZE * DEV_BSIZE);
+
+ if (vn && open) {
+ VOP_CLOSE(vn, FREAD, NOCRED, curproc);
+ vput(vn);
+ }
+
+ return key_disk;
+}
+
+static void
+sr_crypto_free_sessions(struct sr_discipline *sd)
+{
+ u_int i;
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ if (sd->mds.mdd_crypto.scr_sid[i] != (u_int64_t)-1) {
+ crypto_freesession(sd->mds.mdd_crypto.scr_sid[i]);
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+ }
+ }
+}
+
+int
+sr_crypto_alloc_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+ struct cryptoini cri;
+ u_int num_keys, i;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_alloc_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ sd->mds.mdd_crypto.scr_alg = CRYPTO_AES_XTS;
+ switch (sd->mds.mdd_crypto.scr_meta->scm_alg) {
+ case SR_CRYPTOA_AES_XTS_128:
+ sd->mds.mdd_crypto.scr_klen = 256;
+ break;
+ case SR_CRYPTOA_AES_XTS_256:
+ sd->mds.mdd_crypto.scr_klen = 512;
+ break;
+ default:
+ sr_error(sd->sd_sc, "unknown crypto algorithm");
+ return (EINVAL);
+ }
+
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++)
+ sd->mds.mdd_crypto.scr_sid[i] = (u_int64_t)-1;
+
+ if (sr_wu_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate work units");
+ return (ENOMEM);
+ }
+ if (sr_ccb_alloc(sd)) {
+ sr_error(sd->sd_sc, "unable to allocate CCBs");
+ return (ENOMEM);
+ }
+ if (sr_crypto_decrypt_key(sd)) {
+ sr_error(sd->sd_sc, "incorrect key or passphrase");
+ return (EPERM);
+ }
+
+ /*
+ * For each work unit allocate the uio, iovec and crypto structures.
+ * These have to be allocated now because during runtime we cannot
+ * fail an allocation without failing the I/O (which can cause real
+ * problems).
+ */
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ crwu->cr_uio.uio_iov = &crwu->cr_iov;
+ crwu->cr_dmabuf = dma_alloc(MAXPHYS, PR_WAITOK);
+ crwu->cr_crp = crypto_getreq(MAXPHYS >> DEV_BSHIFT);
+ if (crwu->cr_crp == NULL)
+ return (ENOMEM);
+ }
+
+ memset(&cri, 0, sizeof(cri));
+ cri.cri_alg = sd->mds.mdd_crypto.scr_alg;
+ cri.cri_klen = sd->mds.mdd_crypto.scr_klen;
+
+ /* Allocate a session for every 2^SR_CRYPTO_KEY_BLKSHIFT blocks. */
+ num_keys = ((sd->sd_meta->ssdi.ssd_size - 1) >>
+ SR_CRYPTO_KEY_BLKSHIFT) + 1;
+ if (num_keys > SR_CRYPTO_MAXKEYS)
+ return (EFBIG);
+ for (i = 0; i < num_keys; i++) {
+ cri.cri_key = sd->mds.mdd_crypto.scr_key[i];
+ if (crypto_newsession(&sd->mds.mdd_crypto.scr_sid[i],
+ &cri, 0) != 0) {
+ sr_crypto_free_sessions(sd);
+ return (EINVAL);
+ }
+ }
+
+ sr_hotplug_register(sd, sr_crypto_hotplug);
+
+ return (0);
+}
+
+void
+sr_crypto_free_resources(struct sr_discipline *sd)
+{
+ struct sr_workunit *wu;
+ struct sr_crypto_wu *crwu;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_free_resources\n",
+ DEVNAME(sd->sd_sc));
+
+ if (sd->mds.mdd_crypto.key_disk != NULL) {
+ explicit_bzero(sd->mds.mdd_crypto.key_disk,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ free(sd->mds.mdd_crypto.key_disk, M_DEVBUF,
+ sizeof(*sd->mds.mdd_crypto.key_disk));
+ }
+
+ sr_hotplug_unregister(sd, sr_crypto_hotplug);
+
+ sr_crypto_free_sessions(sd);
+
+ TAILQ_FOREACH(wu, &sd->sd_wu, swu_next) {
+ crwu = (struct sr_crypto_wu *)wu;
+ if (crwu->cr_dmabuf)
+ dma_free(crwu->cr_dmabuf, MAXPHYS);
+ if (crwu->cr_crp)
+ crypto_freereq(crwu->cr_crp);
+ }
+
+ sr_wu_free(sd);
+ sr_ccb_free(sd);
+}
+
+int
+sr_crypto_ioctl(struct sr_discipline *sd, struct bioc_discipline *bd)
+{
+ struct sr_crypto_kdfpair kdfpair;
+ struct sr_crypto_kdfinfo kdfinfo1, kdfinfo2;
+ int size, rv = 1;
+
+ DNPRINTF(SR_D_IOCTL, "%s: sr_crypto_ioctl %u\n",
+ DEVNAME(sd->sd_sc), bd->bd_cmd);
+
+ switch (bd->bd_cmd) {
+ case SR_IOCTL_GET_KDFHINT:
+
+ /* Get KDF hint for userland. */
+ size = sizeof(sd->mds.mdd_crypto.scr_meta->scm_kdfhint);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyout(sd->mds.mdd_crypto.scr_meta->scm_kdfhint,
+ bd->bd_data, bd->bd_size))
+ goto bad;
+
+ rv = 0;
+
+ break;
+
+ case SR_IOCTL_CHANGE_PASSPHRASE:
+
+ /* Attempt to change passphrase. */
+
+ size = sizeof(kdfpair);
+ if (bd->bd_data == NULL || bd->bd_size > size)
+ goto bad;
+ if (copyin(bd->bd_data, &kdfpair, size))
+ goto bad;
+
+ size = sizeof(kdfinfo1);
+ if (kdfpair.kdfinfo1 == NULL || kdfpair.kdfsize1 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo1, &kdfinfo1, size))
+ goto bad;
+
+ size = sizeof(kdfinfo2);
+ if (kdfpair.kdfinfo2 == NULL || kdfpair.kdfsize2 > size)
+ goto bad;
+ if (copyin(kdfpair.kdfinfo2, &kdfinfo2, size))
+ goto bad;
+
+ if (sr_crypto_change_maskkey(sd, &kdfinfo1, &kdfinfo2))
+ goto bad;
+
+ /* Save metadata to disk. */
+ rv = sr_meta_save(sd, SR_META_DIRTY);
+
+ break;
+ }
+
+bad:
+ explicit_bzero(&kdfpair, sizeof(kdfpair));
+ explicit_bzero(&kdfinfo1, sizeof(kdfinfo1));
+ explicit_bzero(&kdfinfo2, sizeof(kdfinfo2));
+
+ return (rv);
+}
+
+int
+sr_crypto_meta_opt_handler(struct sr_discipline *sd, struct sr_meta_opt_hdr *om)
+{
+ int rv = EINVAL;
+
+ if (om->som_type == SR_OPT_CRYPTO) {
+ sd->mds.mdd_crypto.scr_meta = (struct sr_meta_crypto *)om;
+ rv = 0;
+ }
+
+ return (rv);
+}
+
+int
+sr_crypto_rw(struct sr_workunit *wu)
+{
+ struct sr_crypto_wu *crwu;
+ daddr_t blkno;
+ int rv = 0;
+
+ DNPRINTF(SR_D_DIS, "%s: sr_crypto_rw wu %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu);
+
+ if (sr_validate_io(wu, &blkno, "sr_crypto_rw"))
+ return (1);
+
+ if (wu->swu_xs->flags & SCSI_DATA_OUT) {
+ crwu = sr_crypto_prepare(wu, 1);
+ crwu->cr_crp->crp_callback = sr_crypto_write;
+ rv = crypto_dispatch(crwu->cr_crp);
+ if (rv == 0)
+ rv = crwu->cr_crp->crp_etype;
+ } else
+ rv = sr_crypto_dev_rw(wu, NULL);
+
+ return (rv);
+}
+
+void
+sr_crypto_write(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_write: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype) {
+ /* fail io */
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+ }
+
+ sr_crypto_dev_rw(wu, crwu);
+}
+
+int
+sr_crypto_dev_rw(struct sr_workunit *wu, struct sr_crypto_wu *crwu)
+{
+ struct sr_discipline *sd = wu->swu_dis;
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_ccb *ccb;
+ struct uio *uio;
+ daddr_t blkno;
+
+ blkno = wu->swu_blk_start;
+
+ ccb = sr_ccb_rw(sd, 0, blkno, xs->datalen, xs->data, xs->flags, 0);
+ if (!ccb) {
+ /* should never happen but handle more gracefully */
+ printf("%s: %s: too many ccbs queued\n",
+ DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname);
+ goto bad;
+ }
+ if (!ISSET(xs->flags, SCSI_DATA_IN)) {
+ uio = crwu->cr_crp->crp_buf;
+ ccb->ccb_buf.b_data = uio->uio_iov->iov_base;
+ ccb->ccb_opaque = crwu;
+ }
+ sr_wu_enqueue_ccb(wu, ccb);
+ sr_schedule_wu(wu);
+
+ return (0);
+
+bad:
+ /* wu is unwound by sr_wu_put */
+ if (crwu)
+ crwu->cr_crp->crp_etype = EINVAL;
+ return (1);
+}
+
+void
+sr_crypto_done(struct sr_workunit *wu)
+{
+ struct scsi_xfer *xs = wu->swu_xs;
+ struct sr_crypto_wu *crwu;
+ int s;
+
+ /* If this was a successful read, initiate decryption of the data. */
+ if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
+ crwu = sr_crypto_prepare(wu, 0);
+ crwu->cr_crp->crp_callback = sr_crypto_read;
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
+ crypto_dispatch(crwu->cr_crp);
+ return;
+ }
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_read(struct cryptop *crp)
+{
+ struct sr_crypto_wu *crwu = crp->crp_opaque;
+ struct sr_workunit *wu = &crwu->cr_wu;
+ int s;
+
+ DNPRINTF(SR_D_INTR, "%s: sr_crypto_read: wu %p xs: %p\n",
+ DEVNAME(wu->swu_dis->sd_sc), wu, wu->swu_xs);
+
+ if (crp->crp_etype)
+ wu->swu_xs->error = XS_DRIVER_STUFFUP;
+
+ s = splbio();
+ sr_scsi_done(wu->swu_dis, wu->swu_xs);
+ splx(s);
+}
+
+void
+sr_crypto_hotplug(struct sr_discipline *sd, struct disk *diskp, int action)
+{
+ DNPRINTF(SR_D_MISC, "%s: sr_crypto_hotplug: %s %d\n",
+ DEVNAME(sd->sd_sc), diskp->dk_name, action);
+}
+
+#ifdef SR_DEBUG0
+void
+sr_crypto_dumpkeys(struct sr_discipline *sd)
+{
+ int i, j;
+
+ printf("sr_crypto_dumpkeys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscm_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_meta->scm_key[i][j]);
+ }
+ printf("\n");
+ }
+ printf("sr_crypto_dumpkeys: runtime data keys:\n");
+ for (i = 0; i < SR_CRYPTO_MAXKEYS; i++) {
+ printf("\tscr_key[%d]: 0x", i);
+ for (j = 0; j < SR_CRYPTO_KEYBYTES; j++) {
+ printf("%02x",
+ sd->mds.mdd_crypto.scr_key[i][j]);
+ }
+ printf("\n");
+ }
+}
+#endif /* SR_DEBUG */
diff --git a/test/test123.left-e.txt b/test/test123.left-e.txt
new file mode 100644
index 000000000000..4a58007052a6
--- /dev/null
+++ b/test/test123.left-e.txt
@@ -0,0 +1 @@
+alpha
diff --git a/test/test123.right-e.txt b/test/test123.right-e.txt
new file mode 100644
index 000000000000..177941793e94
--- /dev/null
+++ b/test/test123.right-e.txt
@@ -0,0 +1,2 @@
+first line
+alpha
diff --git a/test/test124.left-p.txt b/test/test124.left-p.txt
new file mode 100644
index 000000000000..2c5778978ce3
--- /dev/null
+++ b/test/test124.left-p.txt
@@ -0,0 +1,15 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("goodbye\n");
+}
+
+struct testfile *
+return_test(int test) {
+ return NULL;
+}
diff --git a/test/test124.right-p.txt b/test/test124.right-p.txt
new file mode 100644
index 000000000000..9f2252ebec77
--- /dev/null
+++ b/test/test124.right-p.txt
@@ -0,0 +1,15 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("goodbye\n");
+}
+
+struct testfile *
+return_test(int test) {
+ return test*2;
+}
diff --git a/test/test125.left.txt b/test/test125.left.txt
new file mode 100644
index 000000000000..ecce2a6d7d49
--- /dev/null
+++ b/test/test125.left.txt
@@ -0,0 +1,7 @@
+This is a test
+of missing trailing new lines
+in context
+this line has a change
+this is the same
+this is too
+and this one \ No newline at end of file
diff --git a/test/test125.right.txt b/test/test125.right.txt
new file mode 100644
index 000000000000..1242106e06a7
--- /dev/null
+++ b/test/test125.right.txt
@@ -0,0 +1,7 @@
+This is a test
+of missing trailing new lines
+in context
+this line has the change
+this is the same
+this is too
+and this one \ No newline at end of file
diff --git a/test/test126.left.txt b/test/test126.left.txt
new file mode 100644
index 000000000000..a3628b8eba12
--- /dev/null
+++ b/test/test126.left.txt
@@ -0,0 +1,171 @@
+/* $OpenBSD: a_time_tm.c,v 1.15 2018/04/25 11:48:21 tb Exp $ */
+/*
+ * Copyright (c) 2015 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "includes.h"
+
+#include <ctype.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#define GENTIME_LENGTH 15
+#define UTCTIME_LENGTH 13
+
+#define V_ASN1_UTCTIME 23
+#define V_ASN1_GENERALIZEDTIME 24
+
+int
+ASN1_time_tm_cmp(struct tm *tm1, struct tm *tm2)
+{
+ if (tm1->tm_year < tm2->tm_year)
+ return (-1);
+ if (tm1->tm_year > tm2->tm_year)
+ return (1);
+ if (tm1->tm_mon < tm2->tm_mon)
+ return (-1);
+ if (tm1->tm_mon > tm2->tm_mon)
+ return (1);
+ if (tm1->tm_mday < tm2->tm_mday)
+ return (-1);
+ if (tm1->tm_mday > tm2->tm_mday)
+ return (1);
+ if (tm1->tm_hour < tm2->tm_hour)
+ return (-1);
+ if (tm1->tm_hour > tm2->tm_hour)
+ return (1);
+ if (tm1->tm_min < tm2->tm_min)
+ return (-1);
+ if (tm1->tm_min > tm2->tm_min)
+ return (1);
+ if (tm1->tm_sec < tm2->tm_sec)
+ return (-1);
+ if (tm1->tm_sec > tm2->tm_sec)
+ return (1);
+ return 0;
+}
+
+int
+ASN1_time_tm_clamp_notafter(struct tm *tm)
+{
+#ifdef SMALL_TIME_T
+ struct tm broken_os_epoch_tm;
+ time_t broken_os_epoch_time = INT_MAX;
+
+ if (gmtime_r(&broken_os_epoch_time, &broken_os_epoch_tm) == NULL)
+ return 0;
+
+ if (ASN1_time_tm_cmp(tm, &broken_os_epoch_tm) == 1)
+ memcpy(tm, &broken_os_epoch_tm, sizeof(*tm));
+#endif
+ return 1;
+}
+
+/*
+ * Parse an RFC 5280 format ASN.1 time string.
+ *
+ * mode must be:
+ * 0 if we expect to parse a time as specified in RFC 5280 for an X509 object.
+ * V_ASN1_UTCTIME if we wish to parse an RFC5280 format UTC time.
+ * V_ASN1_GENERALIZEDTIME if we wish to parse an RFC5280 format Generalized time.
+ *
+ * Returns:
+ * -1 if the string was invalid.
+ * V_ASN1_UTCTIME if the string validated as a UTC time string.
+ * V_ASN1_GENERALIZEDTIME if the string validated as a Generalized time string.
+ *
+ * Fills in *tm with the corresponding time if tm is non NULL.
+ */
+#define ATOI2(ar) ((ar) += 2, ((ar)[-2] - '0') * 10 + ((ar)[-1] - '0'))
+int
+ASN1_time_parse(const char *bytes, size_t len, struct tm *tm, int mode)
+{
+ size_t i;
+ int type = 0;
+ struct tm ltm;
+ struct tm *lt;
+ const char *p;
+
+ if (bytes == NULL)
+ return (-1);
+
+ /* Constrain to valid lengths. */
+ if (len != UTCTIME_LENGTH && len != GENTIME_LENGTH)
+ return (-1);
+
+ lt = tm;
+ if (lt == NULL) {
+ memset(&ltm, 0, sizeof(ltm));
+ lt = &ltm;
+ }
+
+ /* Timezone is required and must be GMT (Zulu). */
+ if (bytes[len - 1] != 'Z')
+ return (-1);
+
+ /* Make sure everything else is digits. */
+ for (i = 0; i < len - 1; i++) {
+ if (isdigit((unsigned char)bytes[i]))
+ continue;
+ return (-1);
+ }
+
+ /*
+ * Validate and convert the time
+ */
+ p = bytes;
+ switch (len) {
+ case GENTIME_LENGTH:
+ if (mode == V_ASN1_UTCTIME)
+ return (-1);
+ lt->tm_year = (ATOI2(p) * 100) - 1900; /* cc */
+ type = V_ASN1_GENERALIZEDTIME;
+ /* FALLTHROUGH */
+ case UTCTIME_LENGTH:
+ if (type == 0) {
+ if (mode == V_ASN1_GENERALIZEDTIME)
+ return (-1);
+ type = V_ASN1_UTCTIME;
+ }
+ lt->tm_year += ATOI2(p); /* yy */
+ if (type == V_ASN1_UTCTIME) {
+ if (lt->tm_year < 50)
+ lt->tm_year += 100;
+ }
+ lt->tm_mon = ATOI2(p) - 1; /* mm */
+ if (lt->tm_mon < 0 || lt->tm_mon > 11)
+ return (-1);
+ lt->tm_mday = ATOI2(p); /* dd */
+ if (lt->tm_mday < 1 || lt->tm_mday > 31)
+ return (-1);
+ lt->tm_hour = ATOI2(p); /* HH */
+ if (lt->tm_hour < 0 || lt->tm_hour > 23)
+ return (-1);
+ lt->tm_min = ATOI2(p); /* MM */
+ if (lt->tm_min < 0 || lt->tm_min > 59)
+ return (-1);
+ lt->tm_sec = ATOI2(p); /* SS */
+ /* Leap second 60 is not accepted. Reconsider later? */
+ if (lt->tm_sec < 0 || lt->tm_sec > 59)
+ return (-1);
+ break;
+ default:
+ return (-1);
+ }
+
+ return (type);
+}
diff --git a/test/test126.right.txt b/test/test126.right.txt
new file mode 100644
index 000000000000..8d81d0fe0db5
--- /dev/null
+++ b/test/test126.right.txt
@@ -0,0 +1,170 @@
+/* $OpenBSD: a_time_tm.c,v 1.16 2020/12/16 18:35:59 tb Exp $ */
+/*
+ * Copyright (c) 2015 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "includes.h"
+
+#include <ctype.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#define GENTIME_LENGTH 15
+#define UTCTIME_LENGTH 13
+
+#define V_ASN1_UTCTIME 23
+#define V_ASN1_GENERALIZEDTIME 24
+
+int
+ASN1_time_tm_cmp(struct tm *tm1, struct tm *tm2)
+{
+ if (tm1->tm_year < tm2->tm_year)
+ return (-1);
+ if (tm1->tm_year > tm2->tm_year)
+ return (1);
+ if (tm1->tm_mon < tm2->tm_mon)
+ return (-1);
+ if (tm1->tm_mon > tm2->tm_mon)
+ return (1);
+ if (tm1->tm_mday < tm2->tm_mday)
+ return (-1);
+ if (tm1->tm_mday > tm2->tm_mday)
+ return (1);
+ if (tm1->tm_hour < tm2->tm_hour)
+ return (-1);
+ if (tm1->tm_hour > tm2->tm_hour)
+ return (1);
+ if (tm1->tm_min < tm2->tm_min)
+ return (-1);
+ if (tm1->tm_min > tm2->tm_min)
+ return (1);
+ if (tm1->tm_sec < tm2->tm_sec)
+ return (-1);
+ if (tm1->tm_sec > tm2->tm_sec)
+ return (1);
+ return 0;
+}
+
+int
+ASN1_time_tm_clamp_notafter(struct tm *tm)
+{
+#ifdef SMALL_TIME_T
+ struct tm broken_os_epoch_tm;
+ time_t broken_os_epoch_time = INT_MAX;
+
+ if (gmtime_r(&broken_os_epoch_time, &broken_os_epoch_tm) == NULL)
+ return 0;
+
+ if (ASN1_time_tm_cmp(tm, &broken_os_epoch_tm) == 1)
+ memcpy(tm, &broken_os_epoch_tm, sizeof(*tm));
+#endif
+ return 1;
+}
+
+/*
+ * Parse an RFC 5280 format ASN.1 time string.
+ *
+ * mode must be:
+ * 0 if we expect to parse a time as specified in RFC 5280 for an X509 object.
+ * V_ASN1_UTCTIME if we wish to parse an RFC5280 format UTC time.
+ * V_ASN1_GENERALIZEDTIME if we wish to parse an RFC5280 format Generalized time.
+ *
+ * Returns:
+ * -1 if the string was invalid.
+ * V_ASN1_UTCTIME if the string validated as a UTC time string.
+ * V_ASN1_GENERALIZEDTIME if the string validated as a Generalized time string.
+ *
+ * Fills in *tm with the corresponding time if tm is non NULL.
+ */
+#define ATOI2(ar) ((ar) += 2, ((ar)[-2] - '0') * 10 + ((ar)[-1] - '0'))
+int
+ASN1_time_parse(const char *bytes, size_t len, struct tm *tm, int mode)
+{
+ size_t i;
+ int type = 0;
+ struct tm ltm;
+ struct tm *lt;
+ const char *p;
+
+ if (bytes == NULL)
+ return (-1);
+
+ /* Constrain to valid lengths. */
+ if (len != UTCTIME_LENGTH && len != GENTIME_LENGTH)
+ return (-1);
+
+ lt = tm;
+ if (lt == NULL)
+ lt = &ltm;
+ memset(lt, 0, sizeof(*lt));
+
+ /* Timezone is required and must be GMT (Zulu). */
+ if (bytes[len - 1] != 'Z')
+ return (-1);
+
+ /* Make sure everything else is digits. */
+ for (i = 0; i < len - 1; i++) {
+ if (isdigit((unsigned char)bytes[i]))
+ continue;
+ return (-1);
+ }
+
+ /*
+ * Validate and convert the time
+ */
+ p = bytes;
+ switch (len) {
+ case GENTIME_LENGTH:
+ if (mode == V_ASN1_UTCTIME)
+ return (-1);
+ lt->tm_year = (ATOI2(p) * 100) - 1900; /* cc */
+ type = V_ASN1_GENERALIZEDTIME;
+ /* FALLTHROUGH */
+ case UTCTIME_LENGTH:
+ if (type == 0) {
+ if (mode == V_ASN1_GENERALIZEDTIME)
+ return (-1);
+ type = V_ASN1_UTCTIME;
+ }
+ lt->tm_year += ATOI2(p); /* yy */
+ if (type == V_ASN1_UTCTIME) {
+ if (lt->tm_year < 50)
+ lt->tm_year += 100;
+ }
+ lt->tm_mon = ATOI2(p) - 1; /* mm */
+ if (lt->tm_mon < 0 || lt->tm_mon > 11)
+ return (-1);
+ lt->tm_mday = ATOI2(p); /* dd */
+ if (lt->tm_mday < 1 || lt->tm_mday > 31)
+ return (-1);
+ lt->tm_hour = ATOI2(p); /* HH */
+ if (lt->tm_hour < 0 || lt->tm_hour > 23)
+ return (-1);
+ lt->tm_min = ATOI2(p); /* MM */
+ if (lt->tm_min < 0 || lt->tm_min > 59)
+ return (-1);
+ lt->tm_sec = ATOI2(p); /* SS */
+ /* Leap second 60 is not accepted. Reconsider later? */
+ if (lt->tm_sec < 0 || lt->tm_sec > 59)
+ return (-1);
+ break;
+ default:
+ return (-1);
+ }
+
+ return (type);
+} \ No newline at end of file
diff --git a/test/verify_all.sh b/test/verify_all.sh
new file mode 100755
index 000000000000..84f898a2d3fd
--- /dev/null
+++ b/test/verify_all.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+
+diff_prog="../diff/obj/diff"
+if [ ! -x $diff_prog ]; then
+ diff_prog="../diff/diff"
+fi
+
+# At present, test015 only passes with GNU patch.
+# Larry's patch has a bug with empty files in combination with -R...
+if command -v gpatch >/dev/null 2>&1; then
+ patch_prog="gpatch"
+else
+ patch_prog="patch"
+fi
+
+diff_type=unidiff
+
+rm -f errors
+
+verify_diff_script() {
+ orig_left="$1"
+ orig_right="$2"
+ the_diff="$3"
+ expected_diff="$4"
+ diff_opts="$5"
+
+ if echo -- $diff_opts | grep -q -- 'w'; then
+ ignore_whitespace="true"
+ else
+ ignore_whitespace=""
+ fi
+
+ if echo -- $diff_opts | grep -q -- 'e'; then
+ is_edscript="true"
+ else
+ is_edscript=""
+ fi
+
+ verify_left="verify.$orig_left"
+ verify_right="verify.$orig_right"
+
+ if [ -e "$expected_diff" ]; then
+ echo cmp "$got_diff" "$expected_diff"
+ if ! cmp "$got_diff" "$expected_diff" ; then
+ echo "FAIL: $got_diff != $expected_diff" | tee -a errors
+ return 1
+ fi
+ fi
+ if [ -z "$ignore_whitespace" -a -z "$is_edscript" -a "x$diff_type" = "xunidiff" ]; then
+ cp "$orig_left" "$verify_right"
+ $patch_prog --quiet -u "$verify_right" "$the_diff"
+ if ! cmp "$orig_right" "$verify_right" ; then
+ echo "FAIL: $orig_right != $verify_right" | tee -a errors
+ return 1
+ fi
+
+ cp "$orig_right" "$verify_left"
+ $patch_prog --quiet -u -R "$verify_left" "$the_diff"
+ if ! cmp "$orig_left" "$verify_left" ; then
+ echo "FAIL: $orig_left != $verify_left" | tee -a errors
+ return 1
+ fi
+ elif [ -z "$ignore_whitespace" -a -z "$is_edscript" ]; then
+ tail -n +3 "$the_diff" | grep -v "^+" | sed 's/^.//' > "$verify_left"
+ tail -n +3 "$the_diff" | grep -v "^-" | sed 's/^.//' > "$verify_right"
+
+ if ! cmp "$orig_left" "$verify_left" ; then
+ echo "FAIL: $orig_left != $verify_left" | tee -a errors
+ return 1
+ fi
+ if ! cmp "$orig_right" "$verify_right" ; then
+ echo "FAIL: $orig_right != $verify_right" | tee -a errors
+ return 1
+ fi
+ fi
+ echo "OK: $diff_prog $orig_left $orig_right"
+ return 0
+}
+
+for left in test*.left* ; do
+ right="$(echo "$left" | sed 's/\.left/\.right/')"
+ diff_opts="$(echo "$left" | sed 's/test[0-9]*\.left\([-a-zA-Z0-9]*\).txt/\1/')"
+ expected_diff="$(echo "$left" | sed 's/test\([-0-9a-zA-Z]*\)\..*/expect\1.diff/')"
+ got_diff="verify.$expected_diff"
+
+ "$diff_prog" $diff_opts "$left" "$right" > "$got_diff"
+
+ verify_diff_script "$left" "$right" "$got_diff" "$expected_diff" "$diff_opts"
+done
+
+# XXX required to keep GNU make completely silent during 'make regress'
+if make -h 2>/dev/null | grep -q no-print-directory; then
+ make_opts="--no-print-directory"
+fi
+for ctest in *_test.c ; do
+ prog="$(echo "$ctest" | sed 's/.c//')"
+ expect_output="expect.${prog}"
+ prog_output="verify.$expect_output"
+ make $make_opts -s -C "$prog" regress > "$prog_output"
+ if ! cmp "$prog_output" "$expect_output" ; then
+ echo "FAIL: $prog_output != $expect_output" | tee -a errors
+ else
+ echo "OK: $prog"
+ fi
+done
+
+echo
+if [ -f errors ]; then
+ echo "Tests failed:"
+ cat errors
+ exit 1
+else
+ echo "All tests OK"
+ echo
+fi