summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-11-03 22:15:42 +0100
committerHenrik Rydberg <rydberg@euromail.se>2010-11-03 22:15:42 +0100
commit407587667f25e91ad09bfa25a4ade216fb2e4e9e (patch)
tree69962ac2d0745c49218cb52be2082ad49e2920b0
initial test of mba31 keyboard patches
-rw-r--r--.gitignore6
-rw-r--r--GIT1
-rw-r--r--HACKING27
-rw-r--r--Makefile30
-rw-r--r--debian/README.Debian15
-rw-r--r--debian/changelog6
-rw-r--r--debian/compat1
-rw-r--r--debian/control13
-rw-r--r--debian/copyright28
-rw-r--r--debian/dirs1
-rw-r--r--debian/postinst71
-rw-r--r--debian/postrm27
-rw-r--r--debian/prerm28
-rwxr-xr-xdebian/rules53
-rwxr-xr-xscripts/patch-name-version.sh9
-rw-r--r--usr/src/dkms_main_tree/dkms_dbversion1
-rw-r--r--usr/src/dkms_source_tree/Makefile5
-rw-r--r--usr/src/dkms_source_tree/dkms.conf10
-rw-r--r--usr/src/dkms_source_tree/hid-apple.c525
-rw-r--r--usr/src/dkms_source_tree/hid-ids.h552
20 files changed, 1409 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..413d3ad
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
1.bzr
2.bzrignore
3debian/files
4debian/hid-*
5*-stamp
6usr/src/*.dkms.tar.gz
diff --git a/GIT b/GIT
new file mode 100644
index 0000000..0cec806
--- /dev/null
+++ b/GIT
@@ -0,0 +1 @@
git-clone http://bitmath.org/git/hid-apple-dkms.git
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..4a27fda
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,27 @@
1Modifying and building the DKMS package
2
31. use bzr to sync source with launchpad
4
52. make your changes
6
73. modify the VERSION variable in Makefile, then do
8
9 make bump
10
114. add a new entry to debian/changelog, matching VERSION
12
135. build binary package for testing with
14
15 dpkg-buildpackage
16
176. clean the checkout with
18
19 make distclean
20
217. build source package for upload with
22
23 debuild -S -sa
24
258. upload packacke to ppa with (see ~/.dput.cf)
26
27 dput your-mactel-ppa-dput-entry name-and-version_source.changes
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..bacfb4a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
1NAME = hid-apple
2VERSION = 1.0.0
3SRC = usr/src
4
5TARBALL = $(NAME)-$(VERSION).dkms.tar.gz
6PATCH = ./scripts/patch-name-version.sh $(NAME) $(VERSION)
7
8all: $(SRC)/$(TARBALL)
9
10$(SRC)/$(TARBALL): $(SRC)/dkms_source_tree/hid-apple.c
11 (cd $(SRC); tar cvfz $(TARBALL) dkms*)
12
13clean:
14 rm -f $(SRC)/$(TARBALL)
15
16distclean: clean
17 rm -rf *-stamp debian/$(NAME)-dkms debian/*.log debian/files
18
19install: $(SRC)/$(TARBALL)
20 install -d "$(DESTDIR)/$(SRC)"
21 install -m 644 $(SRC)/$(NAME)-$(VERSION).dkms.tar.gz "$(DESTDIR)/$(SRC)"
22
23bump:
24 $(PATCH) debian/postinst
25 $(PATCH) debian/postrm
26 $(PATCH) debian/prerm
27 $(PATCH) debian/rules
28 $(PATCH) debian/postinst
29 $(PATCH) usr/src/dkms_source_tree/dkms.conf
30 chmod 0755 debian/rules
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..d3fbc34
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,15 @@
1hid-apple DKMS module for Debian
2
3hid-apple: This driver adds MT support for the apple keyboards
4
5* Install the debian package (uses dkms)
6
7* Reboot
8
9Post installation
10
11* Make sure your /etc/X11/xorg.conf settings are sane.
12
13Enjoy!
14
15Henrik Rydberg <rydberg@bitmath.org>
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..54b3117
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
1hid-apple-dkms (1.0.0) maverick; urgency=low
2
3 * Apple keyboard support
4
5 -- Henrik Rydberg <rydberg@bitmath.org> Wed, 03 Nov 2010 22:10:22 +0100
6
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
5
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..26ef71c
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,13 @@
1Source: hid-apple-dkms
2Section: misc
3Priority: optional
4Maintainer: Henrik Rydberg <rydberg@bitmath.org>
5Build-Depends: debhelper (>= 5)
6Standards-Version: 3.7.2
7Homepage: http://bitmath.org/code/hid-apple-dkms/
8
9Package: hid-apple-dkms
10Architecture: all
11Depends: dkms (>= 1.95), bash (>> 1.99), hid-dkms(>= 1.0.4)
12Description: Supplementary multitouch support for Apple
13 This driver adds support for the apple keyboards.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..06e41d9
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,28 @@
1The hid-apple-dkms package was created using DKMS <dkms-devel@dell.com>
2
3Source URL: http://bitmath.org/code/hid-apple-dkms/
4
5Upstream Author: Henrik Rydberg <rydberg@bitmath.org>
6
7Copyright:
8 Copyright (C) 2010 Henrik Rydberg (rydberg@bitmath.org)
9
10License:
11
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
26Packaging:
27 Copyright (C) 2010 by Henrik Rydberg <rydberg@bitmath.org>
28 released under GPL 2
diff --git a/debian/dirs b/debian/dirs
new file mode 100644
index 0000000..b601f22
--- /dev/null
+++ b/debian/dirs
@@ -0,0 +1 @@
usr/src
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..af5f835
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,71 @@
1#!/bin/sh
2
3set -e
4
5NAME=hid-apple
6VERSION=1.0.0
7
8case "$1" in
9 configure)
10 # Determine current arch / kernel
11 c_arch=`uname -m`
12 c_kern=`uname -r`
13
14 if [ -e "/var/lib/dkms/$NAME/$VERSION" ]; then
15 echo "Removing old $NAME-$VERSION DKMS files..."
16 dkms remove -m $NAME -v $VERSION --all
17 fi
18
19 echo "Loading new $NAME-$VERSION DKMS files..."
20 #dkms add -m $NAME -v $VERSION
21 dkms ldtarball --archive "/usr/src/$NAME-$VERSION.dkms.tar.gz"
22 rm -f "/usr/src/$NAME-$VERSION.dkms.tar.gz"
23
24 echo "Installing prebuilt kernel module binaries (if any)"
25 set +e
26 IFS='
27'
28 for kern in `dkms status -m $NAME -v $VERSION -a $c_arch | grep ": built" | awk {'print $3'} | sed 's/,$//'`; do
29 echo "Trying kernel: $kern"
30 dkms install --force -m $NAME -v $VERSION -k $kern -a $c_arch
31 done
32 unset IFS
33 set -e
34
35 # If none installed, install.
36 ##if [ `dkms status -m $NAME -v $VERSION -k $c_kern -a $c_arch | grep -c ": installed"` -eq 0 ]; then
37 dkms_status=`dkms status -m $NAME -v $VERSION -k $c_kern -a $c_arch`
38 if [ `echo $dkms_status | grep -c ": installed"` -eq 0 ]; then
39 if [ `echo $c_kern | grep -c "BOOT"` -eq 0 ] && [ -e "/lib/modules/$c_kern/build/include" ]; then
40 # Only build if we need to.
41 if [ `echo $dkms_status | grep -c ": built"` -eq 0 ]; then
42 echo "Building module..."
43 dkms build -m $NAME -v $VERSION
44 fi
45 echo "Installing module..."
46 dkms install -m $NAME -v $VERSION
47 elif [ `echo $c_kern | grep -c "BOOT"` -gt 0 ]; then
48 echo -e ""
49 echo -e "Module build for the currently running kernel was skipped since you"
50 echo -e "are running a BOOT variant of the kernel."
51 else
52 echo -e ""
53 echo -e "Module build for the currently running kernel was skipped since the"
54 echo -e "kernel source for this kernel does not seem to be installed."
55 fi
56 fi
57 ;;
58
59 abort-upgrade|abort-remove|abort-deconfigure)
60 ;;
61
62 *)
63 echo "postinst called with unknown argument \`$1'" >&2
64 exit 1
65 ;;
66esac
67
68#DEBHELPER#
69
70exit 0
71
diff --git a/debian/postrm b/debian/postrm
new file mode 100644
index 0000000..1104717
--- /dev/null
+++ b/debian/postrm
@@ -0,0 +1,27 @@
1#!/bin/sh
2
3NAME=hid-apple
4VERSION=1.0.0
5
6set -e
7
8case "$1" in
9 purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
10 moddir="/lib/modules/`uname -r`/kernel/"
11 depmod
12 if [ -d "/usr/src/$NAME-$VERSION" ]; then
13 echo "Removing old module source..."
14 rm -rf "/usr/src/$NAME-$VERSION"
15 fi
16 ;;
17
18 *)
19 echo "postrm called with unknown argument \`$1'" >&2
20 exit 1
21 ;;
22esac
23
24#DEBHELPER#
25
26exit 0
27
diff --git a/debian/prerm b/debian/prerm
new file mode 100644
index 0000000..44e6684
--- /dev/null
+++ b/debian/prerm
@@ -0,0 +1,28 @@
1#!/bin/sh
2
3NAME=hid-apple
4VERSION=1.0.0
5
6set -e
7
8case "$1" in
9 remove|upgrade|deconfigure)
10 if [ "`dkms status -m $NAME`" ]; then
11 dkms remove -m $NAME -v $VERSION --all
12 fi
13 ;;
14
15 failed-upgrade)
16 ;;
17
18 *)
19 echo "prerm called with unknown argument \`$1'" >&2
20 exit 1
21 ;;
22esac
23
24#DEBHELPER#
25
26exit 0
27
28
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..3c953cd
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,53 @@
1#!/usr/bin/make -f
2# -*- makefile -*-
3
4# Uncomment this to turn on verbose mode.
5#export DH_VERBOSE=1
6
7NAME=hid-apple
8VERSION=1.0.0
9
10configure: configure-stamp
11configure-stamp:
12 dh_testdir
13 touch configure-stamp
14
15
16build: build-stamp
17
18build-stamp: configure-stamp
19 dh_testdir
20 $(MAKE)
21 touch $@
22
23clean:
24 dh_testdir
25 dh_testroot
26 rm -f build-stamp configure-stamp
27 -$(MAKE) clean
28 dh_clean
29
30install: build
31 dh_testdir
32 dh_testroot
33 dh_clean -k
34 dh_installdirs
35 $(MAKE) DESTDIR=$(CURDIR)/debian/$(NAME)-dkms NAME=$(NAME) VERSION=$(VERSION) install
36
37binary-arch: build install
38
39binary-indep: build install
40 dh_testdir
41 dh_testroot
42 dh_link
43 dh_strip
44 dh_compress
45 dh_fixperms
46 dh_installdeb
47 dh_shlibdeps
48 dh_gencontrol
49 dh_md5sums
50 dh_builddeb
51
52binary: binary-indep binary-arch
53.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/scripts/patch-name-version.sh b/scripts/patch-name-version.sh
new file mode 100755
index 0000000..d1a7796
--- /dev/null
+++ b/scripts/patch-name-version.sh
@@ -0,0 +1,9 @@
1#!/bin/sh
2#1: name
3#2: version
4#3: file
5cat $3 \
6| sed "s/^NAME=.*/NAME=$1/" \
7| sed "s/^VERSION=.*/VERSION=$2/" \
8> /tmp/$1.$$
9mv /tmp/$1.$$ $3
diff --git a/usr/src/dkms_main_tree/dkms_dbversion b/usr/src/dkms_main_tree/dkms_dbversion
new file mode 100644
index 0000000..227cea2
--- /dev/null
+++ b/usr/src/dkms_main_tree/dkms_dbversion
@@ -0,0 +1 @@
2.0.0
diff --git a/usr/src/dkms_source_tree/Makefile b/usr/src/dkms_source_tree/Makefile
new file mode 100644
index 0000000..fd3a6ed
--- /dev/null
+++ b/usr/src/dkms_source_tree/Makefile
@@ -0,0 +1,5 @@
1#
2# Makefile for input/mouse drivers
3#
4
5obj-m := hid-apple.o
diff --git a/usr/src/dkms_source_tree/dkms.conf b/usr/src/dkms_source_tree/dkms.conf
new file mode 100644
index 0000000..7d33d28
--- /dev/null
+++ b/usr/src/dkms_source_tree/dkms.conf
@@ -0,0 +1,10 @@
1NAME=hid-apple
2VERSION=1.0.0
3PACKAGE_NAME="$NAME"
4PACKAGE_VERSION="$VERSION"
5MAKE[0]="make -C ${kernel_source_dir}
6 SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules"
7BUILT_MODULE_NAME[0]="hid-apple"
8DEST_MODULE_LOCATION[0]="/kernel/drivers/hid"
9POST_INSTALL="scripts/hid-apple-post-install"
10AUTOINSTALL="yes"
diff --git a/usr/src/dkms_source_tree/hid-apple.c b/usr/src/dkms_source_tree/hid-apple.c
new file mode 100644
index 0000000..9a5f485
--- /dev/null
+++ b/usr/src/dkms_source_tree/hid-apple.c
@@ -0,0 +1,525 @@
1/*
2 * USB HID quirks support for Linux
3 *
4 * Copyright (c) 1999 Andreas Gal
5 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 * Copyright (c) 2006-2007 Jiri Kosina
8 * Copyright (c) 2007 Paul Walmsley
9 * Copyright (c) 2008 Jiri Slaby <jirislaby@gmail.com>
10 */
11
12/*
13 * This program is free software; you can redistribute it and/or modify it
14 * under the terms of the GNU General Public License as published by the Free
15 * Software Foundation; either version 2 of the License, or (at your option)
16 * any later version.
17 */
18
19#include <linux/device.h>
20#include <linux/hid.h>
21#include <linux/module.h>
22#include <linux/slab.h>
23#include <linux/usb.h>
24
25#include "hid-ids.h"
26
27#define APPLE_RDESC_JIS 0x0001
28#define APPLE_IGNORE_MOUSE 0x0002
29#define APPLE_HAS_FN 0x0004
30#define APPLE_HIDDEV 0x0008
31#define APPLE_ISO_KEYBOARD 0x0010
32#define APPLE_MIGHTYMOUSE 0x0020
33#define APPLE_INVERT_HWHEEL 0x0040
34#define APPLE_IGNORE_HIDINPUT 0x0080
35#define APPLE_NUMLOCK_EMULATION 0x0100
36
37#define APPLE_FLAG_FKEY 0x01
38
39static unsigned int fnmode = 1;
40module_param(fnmode, uint, 0644);
41MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, "
42 "[1] = fkeyslast, 2 = fkeysfirst)");
43
44static unsigned int iso_layout = 1;
45module_param(iso_layout, uint, 0644);
46MODULE_PARM_DESC(iso_layout, "Enable/Disable hardcoded ISO-layout of the keyboard. "
47 "(0 = disabled, [1] = enabled)");
48
49struct apple_sc {
50 unsigned long quirks;
51 unsigned int fn_on;
52 DECLARE_BITMAP(pressed_fn, KEY_CNT);
53 DECLARE_BITMAP(pressed_numlock, KEY_CNT);
54};
55
56struct apple_key_translation {
57 u16 from;
58 u16 to;
59 u8 flags;
60};
61
62static const struct apple_key_translation macbookair_fn_keys[] = {
63 { KEY_BACKSPACE, KEY_DELETE },
64 { KEY_ENTER, KEY_INSERT },
65 { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
66 { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
67 { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY },
68 { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY },
69 { KEY_F6, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY },
70 { KEY_F7, KEY_PLAYPAUSE, APPLE_FLAG_FKEY },
71 { KEY_F8, KEY_NEXTSONG, APPLE_FLAG_FKEY },
72 { KEY_F9, KEY_MUTE, APPLE_FLAG_FKEY },
73 { KEY_F10, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY },
74 { KEY_F11, KEY_VOLUMEUP, APPLE_FLAG_FKEY },
75 { KEY_F12, KEY_EJECTCD, APPLE_FLAG_FKEY },
76 { KEY_UP, KEY_PAGEUP },
77 { KEY_DOWN, KEY_PAGEDOWN },
78 { KEY_LEFT, KEY_HOME },
79 { KEY_RIGHT, KEY_END },
80 { }
81};
82
83static const struct apple_key_translation apple_fn_keys[] = {
84 { KEY_BACKSPACE, KEY_DELETE },
85 { KEY_ENTER, KEY_INSERT },
86 { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
87 { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
88 { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY },
89 { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY },
90 { KEY_F5, KEY_KBDILLUMDOWN, APPLE_FLAG_FKEY },
91 { KEY_F6, KEY_KBDILLUMUP, APPLE_FLAG_FKEY },
92 { KEY_F7, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY },
93 { KEY_F8, KEY_PLAYPAUSE, APPLE_FLAG_FKEY },
94 { KEY_F9, KEY_NEXTSONG, APPLE_FLAG_FKEY },
95 { KEY_F10, KEY_MUTE, APPLE_FLAG_FKEY },
96 { KEY_F11, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY },
97 { KEY_F12, KEY_VOLUMEUP, APPLE_FLAG_FKEY },
98 { KEY_UP, KEY_PAGEUP },
99 { KEY_DOWN, KEY_PAGEDOWN },
100 { KEY_LEFT, KEY_HOME },
101 { KEY_RIGHT, KEY_END },
102 { }
103};
104
105static const struct apple_key_translation powerbook_fn_keys[] = {
106 { KEY_BACKSPACE, KEY_DELETE },
107 { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
108 { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
109 { KEY_F3, KEY_MUTE, APPLE_FLAG_FKEY },
110 { KEY_F4, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY },
111 { KEY_F5, KEY_VOLUMEUP, APPLE_FLAG_FKEY },
112 { KEY_F6, KEY_NUMLOCK, APPLE_FLAG_FKEY },
113 { KEY_F7, KEY_SWITCHVIDEOMODE, APPLE_FLAG_FKEY },
114 { KEY_F8, KEY_KBDILLUMTOGGLE, APPLE_FLAG_FKEY },
115 { KEY_F9, KEY_KBDILLUMDOWN, APPLE_FLAG_FKEY },
116 { KEY_F10, KEY_KBDILLUMUP, APPLE_FLAG_FKEY },
117 { KEY_UP, KEY_PAGEUP },
118 { KEY_DOWN, KEY_PAGEDOWN },
119 { KEY_LEFT, KEY_HOME },
120 { KEY_RIGHT, KEY_END },
121 { }
122};
123
124static const struct apple_key_translation powerbook_numlock_keys[] = {
125 { KEY_J, KEY_KP1 },
126 { KEY_K, KEY_KP2 },
127 { KEY_L, KEY_KP3 },
128 { KEY_U, KEY_KP4 },
129 { KEY_I, KEY_KP5 },
130 { KEY_O, KEY_KP6 },
131 { KEY_7, KEY_KP7 },
132 { KEY_8, KEY_KP8 },
133 { KEY_9, KEY_KP9 },
134 { KEY_M, KEY_KP0 },
135 { KEY_DOT, KEY_KPDOT },
136 { KEY_SLASH, KEY_KPPLUS },
137 { KEY_SEMICOLON, KEY_KPMINUS },
138 { KEY_P, KEY_KPASTERISK },
139 { KEY_MINUS, KEY_KPEQUAL },
140 { KEY_0, KEY_KPSLASH },
141 { KEY_F6, KEY_NUMLOCK },
142 { KEY_KPENTER, KEY_KPENTER },
143 { KEY_BACKSPACE, KEY_BACKSPACE },
144 { }
145};
146
147static const struct apple_key_translation apple_iso_keyboard[] = {
148 { KEY_GRAVE, KEY_102ND },
149 { KEY_102ND, KEY_GRAVE },
150 { }
151};
152
153static const struct apple_key_translation *apple_find_translation(
154 const struct apple_key_translation *table, u16 from)
155{
156 const struct apple_key_translation *trans;
157
158 /* Look for the translation */
159 for (trans = table; trans->from; trans++)
160 if (trans->from == from)
161 return trans;
162
163 return NULL;
164}
165
166static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
167 struct hid_usage *usage, __s32 value)
168{
169 struct apple_sc *asc = hid_get_drvdata(hid);
170 const struct apple_key_translation *trans;
171
172 if (usage->code == KEY_FN) {
173 asc->fn_on = !!value;
174 input_event(input, usage->type, usage->code, value);
175 return 1;
176 }
177
178 if (fnmode) {
179 int do_translate;
180
181 if(hid->product >= 0x023f && hid->product <= 0x0244 ) {
182 trans = apple_find_translation(macbookair_fn_keys, usage->code);
183 } else {
184 trans = apple_find_translation((hid->product < 0x21d ||
185 hid->product >= 0x300) ?
186 powerbook_fn_keys : apple_fn_keys,
187 usage->code);
188 }
189 if (trans) {
190 if (test_bit(usage->code, asc->pressed_fn))
191 do_translate = 1;
192 else if (trans->flags & APPLE_FLAG_FKEY)
193 do_translate = (fnmode == 2 && asc->fn_on) ||
194 (fnmode == 1 && !asc->fn_on);
195 else
196 do_translate = asc->fn_on;
197
198 if (do_translate) {
199 if (value)
200 set_bit(usage->code, asc->pressed_fn);
201 else
202 clear_bit(usage->code, asc->pressed_fn);
203
204 input_event(input, usage->type, trans->to,
205 value);
206
207 return 1;
208 }
209 }
210
211 if (asc->quirks & APPLE_NUMLOCK_EMULATION &&
212 (test_bit(usage->code, asc->pressed_numlock) ||
213 test_bit(LED_NUML, input->led))) {
214 trans = apple_find_translation(powerbook_numlock_keys,
215 usage->code);
216
217 if (trans) {
218 if (value)
219 set_bit(usage->code,
220 asc->pressed_numlock);
221 else
222 clear_bit(usage->code,
223 asc->pressed_numlock);
224
225 input_event(input, usage->type, trans->to,
226 value);
227 }
228
229 return 1;
230 }
231 }
232
233 if (iso_layout) {
234 if (asc->quirks & APPLE_ISO_KEYBOARD) {
235 trans = apple_find_translation(apple_iso_keyboard, usage->code);
236 if (trans) {
237 input_event(input, usage->type, trans->to, value);
238 return 1;
239 }
240 }
241 }
242
243 return 0;
244}
245
246static int apple_event(struct hid_device *hdev, struct hid_field *field,
247 struct hid_usage *usage, __s32 value)
248{
249 struct apple_sc *asc = hid_get_drvdata(hdev);
250
251 if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput ||
252 !usage->type)
253 return 0;
254
255 if ((asc->quirks & APPLE_INVERT_HWHEEL) &&
256 usage->code == REL_HWHEEL) {
257 input_event(field->hidinput->input, usage->type, usage->code,
258 -value);
259 return 1;
260 }
261
262 if ((asc->quirks & APPLE_HAS_FN) &&
263 hidinput_apple_event(hdev, field->hidinput->input,
264 usage, value))
265 return 1;
266
267
268 return 0;
269}
270
271/*
272 * MacBook JIS keyboard has wrong logical maximum
273 */
274static __u8 *apple_report_fixup(struct hid_device *hdev, __u8 *rdesc,
275 unsigned int *rsize)
276{
277 struct apple_sc *asc = hid_get_drvdata(hdev);
278
279 if ((asc->quirks & APPLE_RDESC_JIS) && *rsize >= 60 &&
280 rdesc[53] == 0x65 && rdesc[59] == 0x65) {
281 dev_info(&hdev->dev, "fixing up MacBook JIS keyboard report "
282 "descriptor\n");
283 rdesc[53] = rdesc[59] = 0xe7;
284 }
285 return rdesc;
286}
287
288static void apple_setup_input(struct input_dev *input)
289{
290 const struct apple_key_translation *trans;
291
292 set_bit(KEY_NUMLOCK, input->keybit);
293
294 /* Enable all needed keys */
295 for (trans = apple_fn_keys; trans->from; trans++)
296 set_bit(trans->to, input->keybit);
297
298 for (trans = powerbook_fn_keys; trans->from; trans++)
299 set_bit(trans->to, input->keybit);
300
301 for (trans = powerbook_numlock_keys; trans->from; trans++)
302 set_bit(trans->to, input->keybit);
303
304 for (trans = apple_iso_keyboard; trans->from; trans++)
305 set_bit(trans->to, input->keybit);
306}
307
308static int apple_input_mapping(struct hid_device *hdev, struct hid_input *hi,
309 struct hid_field *field, struct hid_usage *usage,
310 unsigned long **bit, int *max)
311{
312 if (usage->hid == (HID_UP_CUSTOM | 0x0003)) {
313 /* The fn key on Apple USB keyboards */
314 set_bit(EV_REP, hi->input->evbit);
315 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN);
316 apple_setup_input(hi->input);
317 return 1;
318 }
319
320 /* we want the hid layer to go through standard path (set and ignore) */
321 return 0;
322}
323
324static int apple_input_mapped(struct hid_device *hdev, struct hid_input *hi,
325 struct hid_field *field, struct hid_usage *usage,
326 unsigned long **bit, int *max)
327{
328 struct apple_sc *asc = hid_get_drvdata(hdev);
329
330 if (asc->quirks & APPLE_MIGHTYMOUSE) {
331 if (usage->hid == HID_GD_Z)
332 hid_map_usage(hi, usage, bit, max, EV_REL, REL_HWHEEL);
333 else if (usage->code == BTN_1)
334 hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_2);
335 else if (usage->code == BTN_2)
336 hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_1);
337 }
338
339 return 0;
340}
341
342static int apple_probe(struct hid_device *hdev,
343 const struct hid_device_id *id)
344{
345 unsigned long quirks = id->driver_data;
346 struct apple_sc *asc;
347 unsigned int connect_mask = HID_CONNECT_DEFAULT;
348 int ret;
349
350 asc = kzalloc(sizeof(*asc), GFP_KERNEL);
351 if (asc == NULL) {
352 dev_err(&hdev->dev, "can't alloc apple descriptor\n");
353 return -ENOMEM;
354 }
355
356 asc->quirks = quirks;
357
358 hid_set_drvdata(hdev, asc);
359
360 ret = hid_parse(hdev);
361 if (ret) {
362 dev_err(&hdev->dev, "parse failed\n");
363 goto err_free;
364 }
365
366 if (quirks & APPLE_HIDDEV)
367 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
368 if (quirks & APPLE_IGNORE_HIDINPUT)
369 connect_mask &= ~HID_CONNECT_HIDINPUT;
370
371 ret = hid_hw_start(hdev, connect_mask);
372 if (ret) {
373 dev_err(&hdev->dev, "hw start failed\n");
374 goto err_free;
375 }
376
377 return 0;
378err_free:
379 kfree(asc);
380 return ret;
381}
382
383static void apple_remove(struct hid_device *hdev)
384{
385 hid_hw_stop(hdev);
386 kfree(hid_get_drvdata(hdev));
387}
388
389static const struct hid_device_id apple_devices[] = {
390 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL),
391 .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
392 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4),
393 .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
394 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE),
395 .driver_data = APPLE_MIGHTYMOUSE | APPLE_INVERT_HWHEEL },
396
397 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI),
398 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
399 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO),
400 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
401 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI),
402 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
403 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO),
404 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
405 APPLE_ISO_KEYBOARD },
406 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS),
407 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
408 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI),
409 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
410 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO),
411 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
412 APPLE_ISO_KEYBOARD },
413 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS),
414 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
415 APPLE_RDESC_JIS },
416 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI),
417 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
418 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO),
419 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
420 APPLE_ISO_KEYBOARD },
421 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS),
422 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
423 APPLE_RDESC_JIS },
424 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ANSI),
425 .driver_data = APPLE_HAS_FN },
426 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ISO),
427 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
428 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_JIS),
429 .driver_data = APPLE_HAS_FN },
430 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI),
431 .driver_data = APPLE_HAS_FN },
432 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO),
433 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
434 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS),
435 .driver_data = APPLE_HAS_FN },
436 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI),
437 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
438 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO),
439 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
440 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS),
441 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
442 APPLE_RDESC_JIS },
443 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
444 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
445 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO),
446 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
447 APPLE_ISO_KEYBOARD },
448 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS),
449 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
450 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI),
451 .driver_data = APPLE_HAS_FN },
452 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO),
453 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
454 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS),
455 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
456 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI),
457 .driver_data = APPLE_HAS_FN },
458 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO),
459 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
460 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS),
461 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
462 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI),
463 .driver_data = APPLE_HAS_FN },
464 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO),
465 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
466 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
467 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
468 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
469 .driver_data = APPLE_HAS_FN },
470 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
471 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
472 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
473 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
474 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
475 .driver_data = APPLE_HAS_FN },
476 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
477 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
478 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
479 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
480 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
481 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
482 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
483 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
484 APPLE_ISO_KEYBOARD },
485 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS),
486 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
487 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY),
488 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
489 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY),
490 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
491
492 { }
493};
494MODULE_DEVICE_TABLE(hid, apple_devices);
495
496static struct hid_driver apple_driver = {
497 .name = "apple",
498 .id_table = apple_devices,
499 .report_fixup = apple_report_fixup,
500 .probe = apple_probe,
501 .remove = apple_remove,
502 .event = apple_event,
503 .input_mapping = apple_input_mapping,
504 .input_mapped = apple_input_mapped,
505};
506
507static int __init apple_init(void)
508{
509 int ret;
510
511 ret = hid_register_driver(&apple_driver);
512 if (ret)
513 printk(KERN_ERR "can't register apple driver\n");
514
515 return ret;
516}
517
518static void __exit apple_exit(void)
519{
520 hid_unregister_driver(&apple_driver);
521}
522
523module_init(apple_init);
524module_exit(apple_exit);
525MODULE_LICENSE("GPL");
diff --git a/usr/src/dkms_source_tree/hid-ids.h b/usr/src/dkms_source_tree/hid-ids.h
new file mode 100644
index 0000000..7320631
--- /dev/null
+++ b/usr/src/dkms_source_tree/hid-ids.h
@@ -0,0 +1,552 @@
1/*
2 * USB HID quirks support for Linux
3 *
4 * Copyright (c) 1999 Andreas Gal
5 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 * Copyright (c) 2006-2007 Jiri Kosina
8 * Copyright (c) 2007 Paul Walmsley
9 */
10
11/*
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 */
17
18#ifndef HID_IDS_H_FILE
19#define HID_IDS_H_FILE
20
21#define USB_VENDOR_ID_3M 0x0596
22#define USB_DEVICE_ID_3M1968 0x0500
23#define USB_DEVICE_ID_3M2256 0x0502
24
25#define USB_VENDOR_ID_A4TECH 0x09da
26#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006
27#define USB_DEVICE_ID_A4TECH_X5_005D 0x000a
28
29#define USB_VENDOR_ID_AASHIMA 0x06d6
30#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025
31#define USB_DEVICE_ID_AASHIMA_PREDATOR 0x0026
32
33#define USB_VENDOR_ID_ACECAD 0x0460
34#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
35#define USB_DEVICE_ID_ACECAD_302 0x0008
36
37#define USB_VENDOR_ID_ACRUX 0x1a34
38
39#define USB_VENDOR_ID_ADS_TECH 0x06e1
40#define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155
41
42#define USB_VENDOR_ID_AFATECH 0x15a4
43#define USB_DEVICE_ID_AFATECH_AF9016 0x9016
44
45#define USB_VENDOR_ID_AIPTEK 0x08ca
46#define USB_DEVICE_ID_AIPTEK_01 0x0001
47#define USB_DEVICE_ID_AIPTEK_10 0x0010
48#define USB_DEVICE_ID_AIPTEK_20 0x0020
49#define USB_DEVICE_ID_AIPTEK_21 0x0021
50#define USB_DEVICE_ID_AIPTEK_22 0x0022
51#define USB_DEVICE_ID_AIPTEK_23 0x0023
52#define USB_DEVICE_ID_AIPTEK_24 0x0024
53
54#define USB_VENDOR_ID_AIRCABLE 0x16CA
55#define USB_DEVICE_ID_AIRCABLE1 0x1502
56
57#define USB_VENDOR_ID_ALCOR 0x058f
58#define USB_DEVICE_ID_ALCOR_USBRS232 0x9720
59
60#define USB_VENDOR_ID_ALPS 0x0433
61#define USB_DEVICE_ID_IBM_GAMEPAD 0x1101
62
63#define USB_VENDOR_ID_APPLE 0x05ac
64#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304
65#define USB_DEVICE_ID_APPLE_MAGICMOUSE 0x030d
66#define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI 0x020e
67#define USB_DEVICE_ID_APPLE_FOUNTAIN_ISO 0x020f
68#define USB_DEVICE_ID_APPLE_GEYSER_ANSI 0x0214
69#define USB_DEVICE_ID_APPLE_GEYSER_ISO 0x0215
70#define USB_DEVICE_ID_APPLE_GEYSER_JIS 0x0216
71#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI 0x0217
72#define USB_DEVICE_ID_APPLE_GEYSER3_ISO 0x0218
73#define USB_DEVICE_ID_APPLE_GEYSER3_JIS 0x0219
74#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI 0x021a
75#define USB_DEVICE_ID_APPLE_GEYSER4_ISO 0x021b
76#define USB_DEVICE_ID_APPLE_GEYSER4_JIS 0x021c
77#define USB_DEVICE_ID_APPLE_ALU_MINI_ANSI 0x021d
78#define USB_DEVICE_ID_APPLE_ALU_MINI_ISO 0x021e
79#define USB_DEVICE_ID_APPLE_ALU_MINI_JIS 0x021f
80#define USB_DEVICE_ID_APPLE_ALU_ANSI 0x0220
81#define USB_DEVICE_ID_APPLE_ALU_ISO 0x0221
82#define USB_DEVICE_ID_APPLE_ALU_JIS 0x0222
83#define USB_DEVICE_ID_APPLE_WELLSPRING_ANSI 0x0223
84#define USB_DEVICE_ID_APPLE_WELLSPRING_ISO 0x0224
85#define USB_DEVICE_ID_APPLE_WELLSPRING_JIS 0x0225
86#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI 0x0229
87#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO 0x022a
88#define USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS 0x022b
89#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI 0x022c
90#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO 0x022d
91#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS 0x022e
92#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI 0x0230
93#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO 0x0231
94#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS 0x0232
95#define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
96#define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
97#define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
98#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f
99#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240
100#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241
101#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
102#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243
103#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244
104#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
105#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
106#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
107#define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a
108#define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b
109#define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241
110#define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242
111
112#define USB_VENDOR_ID_ASUS 0x0486
113#define USB_DEVICE_ID_ASUS_T91MT 0x0185
114#define USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO 0x0186
115
116#define USB_VENDOR_ID_ASUSTEK 0x0b05
117#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726
118#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b
119
120#define USB_VENDOR_ID_ATEN 0x0557
121#define USB_DEVICE_ID_ATEN_UC100KM 0x2004
122#define USB_DEVICE_ID_ATEN_CS124U 0x2202
123#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204
124#define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205
125#define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208
126
127#define USB_VENDOR_ID_AVERMEDIA 0x07ca
128#define USB_DEVICE_ID_AVER_FM_MR800 0xb800
129
130#define USB_VENDOR_ID_BELKIN 0x050d
131#define USB_DEVICE_ID_FLIP_KVM 0x3201
132
133#define USB_VENDOR_ID_BERKSHIRE 0x0c98
134#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140
135
136#define USB_VENDOR_ID_BTC 0x046e
137#define USB_DEVICE_ID_BTC_EMPREX_REMOTE 0x5578
138#define USB_DEVICE_ID_BTC_EMPREX_REMOTE_2 0x5577
139
140#define USB_VENDOR_ID_CANDO 0x2087
141#define USB_DEVICE_ID_CANDO_MULTI_TOUCH 0x0a01
142#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03
143
144#define USB_VENDOR_ID_CH 0x068e
145#define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2
146#define USB_DEVICE_ID_CH_COMBATSTICK 0x00f4
147#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051
148#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
149#define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK 0x00d3
150
151#define USB_VENDOR_ID_CHERRY 0x046a
152#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
153#define USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR 0x0027
154
155#define USB_VENDOR_ID_CHIC 0x05fe
156#define USB_DEVICE_ID_CHIC_GAMEPAD 0x0014
157
158#define USB_VENDOR_ID_CHICONY 0x04f2
159#define USB_DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418
160#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH 0xb19d
161
162#define USB_VENDOR_ID_CIDC 0x1677
163
164#define USB_VENDOR_ID_CMEDIA 0x0d8c
165#define USB_DEVICE_ID_CM109 0x000e
166
167#define USB_VENDOR_ID_CODEMERCS 0x07c0
168#define USB_DEVICE_ID_CODEMERCS_IOW_FIRST 0x1500
169#define USB_DEVICE_ID_CODEMERCS_IOW_LAST 0x15ff
170
171#define USB_VENDOR_ID_CREATIVELABS 0x041e
172#define USB_DEVICE_ID_PRODIKEYS_PCMIDI 0x2801
173
174#define USB_VENDOR_ID_CYGNAL 0x10c4
175#define USB_DEVICE_ID_CYGNAL_RADIO_SI470X 0x818a
176
177#define USB_VENDOR_ID_CYPRESS 0x04b4
178#define USB_DEVICE_ID_CYPRESS_MOUSE 0x0001
179#define USB_DEVICE_ID_CYPRESS_HIDCOM 0x5500
180#define USB_DEVICE_ID_CYPRESS_ULTRAMOUSE 0x7417
181#define USB_DEVICE_ID_CYPRESS_BARCODE_1 0xde61
182#define USB_DEVICE_ID_CYPRESS_BARCODE_2 0xde64
183#define USB_DEVICE_ID_CYPRESS_BARCODE_3 0xbca1
184
185#define USB_VENDOR_ID_DEALEXTREAME 0x10c5
186#define USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 0x819a
187
188#define USB_VENDOR_ID_DELORME 0x1163
189#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
190#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200
191
192#define USB_VENDOR_ID_DMI 0x0c0b
193#define USB_DEVICE_ID_DMI_ENC 0x5fab
194
195#define USB_VENDOR_ID_DRAGONRISE 0x0079
196
197#define USB_VENDOR_ID_DWAV 0x0eef
198#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001
199#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d
200#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c
201
202#define USB_VENDOR_ID_ELECOM 0x056e
203#define USB_DEVICE_ID_ELECOM_BM084 0x0061
204
205#define USB_VENDOR_ID_ELO 0x04E7
206#define USB_DEVICE_ID_ELO_TS2700 0x0020
207
208#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f
209#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
210
211#define USB_VENDOR_ID_ETT 0x0664
212#define USB_DEVICE_ID_TC5UH 0x0309
213#define USB_DEVICE_ID_TC4UM 0x0306
214
215#define USB_VENDOR_ID_ETURBOTOUCH 0x22b9
216#define USB_DEVICE_ID_ETURBOTOUCH 0x0006
217
218#define USB_VENDOR_ID_EZKEY 0x0518
219#define USB_DEVICE_ID_BTC_8193 0x0002
220
221#define USB_VENDOR_ID_GAMERON 0x0810
222#define USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR 0x0001
223#define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002
224
225#define USB_VENDOR_ID_GENERAL_TOUCH 0x0dfc
226
227#define USB_VENDOR_ID_GLAB 0x06c2
228#define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038
229#define USB_DEVICE_ID_1_PHIDGETSERVO_30 0x0039
230#define USB_DEVICE_ID_0_0_4_IF_KIT 0x0040
231#define USB_DEVICE_ID_0_16_16_IF_KIT 0x0044
232#define USB_DEVICE_ID_8_8_8_IF_KIT 0x0045
233#define USB_DEVICE_ID_0_8_7_IF_KIT 0x0051
234#define USB_DEVICE_ID_0_8_8_IF_KIT 0x0053
235#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL 0x0058
236
237#define USB_VENDOR_ID_GOTOP 0x08f2
238#define USB_DEVICE_ID_SUPER_Q2 0x007f
239#define USB_DEVICE_ID_GOGOPEN 0x00ce
240#define USB_DEVICE_ID_PENPOWER 0x00f4
241
242#define USB_VENDOR_ID_GREENASIA 0x0e8f
243
244#define USB_VENDOR_ID_GRETAGMACBETH 0x0971
245#define USB_DEVICE_ID_GRETAGMACBETH_HUEY 0x2005
246
247#define USB_VENDOR_ID_GRIFFIN 0x077d
248#define USB_DEVICE_ID_POWERMATE 0x0410
249#define USB_DEVICE_ID_SOUNDKNOB 0x04AA
250
251#define USB_VENDOR_ID_GTCO 0x078c
252#define USB_DEVICE_ID_GTCO_90 0x0090
253#define USB_DEVICE_ID_GTCO_100 0x0100
254#define USB_DEVICE_ID_GTCO_101 0x0101
255#define USB_DEVICE_ID_GTCO_103 0x0103
256#define USB_DEVICE_ID_GTCO_104 0x0104
257#define USB_DEVICE_ID_GTCO_105 0x0105
258#define USB_DEVICE_ID_GTCO_106 0x0106
259#define USB_DEVICE_ID_GTCO_107 0x0107
260#define USB_DEVICE_ID_GTCO_108 0x0108
261#define USB_DEVICE_ID_GTCO_200 0x0200
262#define USB_DEVICE_ID_GTCO_201 0x0201
263#define USB_DEVICE_ID_GTCO_202 0x0202
264#define USB_DEVICE_ID_GTCO_203 0x0203
265#define USB_DEVICE_ID_GTCO_204 0x0204
266#define USB_DEVICE_ID_GTCO_205 0x0205
267#define USB_DEVICE_ID_GTCO_206 0x0206
268#define USB_DEVICE_ID_GTCO_207 0x0207
269#define USB_DEVICE_ID_GTCO_300 0x0300
270#define USB_DEVICE_ID_GTCO_301 0x0301
271#define USB_DEVICE_ID_GTCO_302 0x0302
272#define USB_DEVICE_ID_GTCO_303 0x0303
273#define USB_DEVICE_ID_GTCO_304 0x0304
274#define USB_DEVICE_ID_GTCO_305 0x0305
275#define USB_DEVICE_ID_GTCO_306 0x0306
276#define USB_DEVICE_ID_GTCO_307 0x0307
277#define USB_DEVICE_ID_GTCO_308 0x0308
278#define USB_DEVICE_ID_GTCO_309 0x0309
279#define USB_DEVICE_ID_GTCO_400 0x0400
280#define USB_DEVICE_ID_GTCO_401 0x0401
281#define USB_DEVICE_ID_GTCO_402 0x0402
282#define USB_DEVICE_ID_GTCO_403 0x0403
283#define USB_DEVICE_ID_GTCO_404 0x0404
284#define USB_DEVICE_ID_GTCO_405 0x0405
285#define USB_DEVICE_ID_GTCO_500 0x0500
286#define USB_DEVICE_ID_GTCO_501 0x0501
287#define USB_DEVICE_ID_GTCO_502 0x0502
288#define USB_DEVICE_ID_GTCO_503 0x0503
289#define USB_DEVICE_ID_GTCO_504 0x0504
290#define USB_DEVICE_ID_GTCO_1000 0x1000
291#define USB_DEVICE_ID_GTCO_1001 0x1001
292#define USB_DEVICE_ID_GTCO_1002 0x1002
293#define USB_DEVICE_ID_GTCO_1003 0x1003
294#define USB_DEVICE_ID_GTCO_1004 0x1004
295#define USB_DEVICE_ID_GTCO_1005 0x1005
296#define USB_DEVICE_ID_GTCO_1006 0x1006
297#define USB_DEVICE_ID_GTCO_1007 0x1007
298
299#define USB_VENDOR_ID_GYRATION 0x0c16
300#define USB_DEVICE_ID_GYRATION_REMOTE 0x0002
301#define USB_DEVICE_ID_GYRATION_REMOTE_2 0x0003
302#define USB_DEVICE_ID_GYRATION_REMOTE_3 0x0008
303
304#define USB_VENDOR_ID_HAPP 0x078b
305#define USB_DEVICE_ID_UGCI_DRIVING 0x0010
306#define USB_DEVICE_ID_UGCI_FLYING 0x0020
307#define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
308
309#define USB_VENDOR_ID_IMATION 0x0718
310#define USB_DEVICE_ID_DISC_STAKKA 0xd000
311
312#define USB_VENDOR_ID_KBGEAR 0x084e
313#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001
314
315#define USB_VENDOR_ID_KENSINGTON 0x047d
316#define USB_DEVICE_ID_KS_SLIMBLADE 0x2041
317
318#define USB_VENDOR_ID_KWORLD 0x1b80
319#define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700
320
321#define USB_VENDOR_ID_KYE 0x0458
322#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
323#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
324
325#define USB_VENDOR_ID_LABTEC 0x1020
326#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
327
328#define USB_VENDOR_ID_LD 0x0f11
329#define USB_DEVICE_ID_LD_CASSY 0x1000
330#define USB_DEVICE_ID_LD_POCKETCASSY 0x1010
331#define USB_DEVICE_ID_LD_MOBILECASSY 0x1020
332#define USB_DEVICE_ID_LD_JWM 0x1080
333#define USB_DEVICE_ID_LD_DMMP 0x1081
334#define USB_DEVICE_ID_LD_UMIP 0x1090
335#define USB_DEVICE_ID_LD_XRAY1 0x1100
336#define USB_DEVICE_ID_LD_XRAY2 0x1101
337#define USB_DEVICE_ID_LD_VIDEOCOM 0x1200
338#define USB_DEVICE_ID_LD_COM3LAB 0x2000
339#define USB_DEVICE_ID_LD_TELEPORT 0x2010
340#define USB_DEVICE_ID_LD_NETWORKANALYSER 0x2020
341#define USB_DEVICE_ID_LD_POWERCONTROL 0x2030
342#define USB_DEVICE_ID_LD_MACHINETEST 0x2040
343
344#define USB_VENDOR_ID_LOGITECH 0x046d
345#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
346#define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110
347#define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
348#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD 0xc211
349#define USB_DEVICE_ID_LOGITECH_EXTREME_3D 0xc215
350#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD2 0xc218
351#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2 0xc219
352#define USB_DEVICE_ID_LOGITECH_WINGMAN_F3D 0xc283
353#define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO 0xc286
354#define USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940 0xc287
355#define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294
356#define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG 0xc293
357#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295
358#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299
359#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a
360#define USB_DEVICE_ID_S510_RECEIVER 0xc50c
361#define USB_DEVICE_ID_S510_RECEIVER_2 0xc517
362#define USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500 0xc512
363#define USB_DEVICE_ID_MX3000_RECEIVER 0xc513
364#define USB_DEVICE_ID_SPACETRAVELLER 0xc623
365#define USB_DEVICE_ID_SPACENAVIGATOR 0xc626
366#define USB_DEVICE_ID_DINOVO_DESKTOP 0xc704
367#define USB_DEVICE_ID_DINOVO_EDGE 0xc714
368#define USB_DEVICE_ID_DINOVO_MINI 0xc71f
369#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2 0xca03
370
371#define USB_VENDOR_ID_MCC 0x09db
372#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
373#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
374
375#define USB_VENDOR_ID_MGE 0x0463
376#define USB_DEVICE_ID_MGE_UPS 0xffff
377#define USB_DEVICE_ID_MGE_UPS1 0x0001
378
379#define USB_VENDOR_ID_MICROCHIP 0x04d8
380#define USB_DEVICE_ID_PICKIT1 0x0032
381#define USB_DEVICE_ID_PICKIT2 0x0033
382#define USB_DEVICE_ID_PICOLCD 0xc002
383#define USB_DEVICE_ID_PICOLCD_BOOTLOADER 0xf002
384
385#define USB_VENDOR_ID_MICROSOFT 0x045e
386#define USB_DEVICE_ID_SIDEWINDER_GV 0x003b
387#define USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0 0x009d
388#define USB_DEVICE_ID_MS_NE4K 0x00db
389#define USB_DEVICE_ID_MS_LK6K 0x00f9
390#define USB_DEVICE_ID_MS_PRESENTER_8K_BT 0x0701
391#define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713
392
393#define USB_VENDOR_ID_MOJO 0x8282
394#define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
395
396#define USB_VENDOR_ID_MONTEREY 0x0566
397#define USB_DEVICE_ID_GENIUS_KB29E 0x3004
398
399#define USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR 0x0400
400#define USB_DEVICE_ID_N_S_HARMONY 0xc359
401
402#define USB_VENDOR_ID_NATSU 0x08b7
403#define USB_DEVICE_ID_NATSU_GAMEPAD 0x0001
404
405#define USB_VENDOR_ID_NCR 0x0404
406#define USB_DEVICE_ID_NCR_FIRST 0x0300
407#define USB_DEVICE_ID_NCR_LAST 0x03ff
408
409#define USB_VENDOR_ID_NEC 0x073e
410#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301
411
412#define USB_VENDOR_ID_NEXTWINDOW 0x1926
413#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003
414
415#define USB_VENDOR_ID_NTRIG 0x1b96
416#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN 0x0001
417#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1 0x0003
418#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2 0x0004
419#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_3 0x0005
420#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_4 0x0006
421#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_5 0x0007
422#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_6 0x0008
423#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_7 0x0009
424#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_8 0x000A
425#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_9 0x000B
426#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_10 0x000C
427#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_11 0x000D
428#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_12 0x000E
429#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_13 0x000F
430#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_14 0x0010
431#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_15 0x0011
432#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16 0x0012
433#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17 0x0013
434#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18 0x0014
435
436#define USB_VENDOR_ID_ONTRAK 0x0a07
437#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064
438
439#define USB_VENDOR_ID_ORTEK 0x05a4
440#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000
441
442#define USB_VENDOR_ID_PANJIT 0x134c
443
444#define USB_VENDOR_ID_PANTHERLORD 0x0810
445#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001
446
447#define USB_VENDOR_ID_PETALYNX 0x18b1
448#define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037
449
450#define USB_VENDOR_ID_PHILIPS 0x0471
451#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
452
453#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
454#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
455
456#define USB_VENDOR_ID_PLAYDOTCOM 0x0b43
457#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003
458
459#define USB_VENDOR_ID_POWERCOM 0x0d9f
460#define USB_DEVICE_ID_POWERCOM_UPS 0x0002
461
462#define USB_VENDOR_ID_PRODIGE 0x05af
463#define USB_DEVICE_ID_PRODIGE_CORDLESS 0x3062
464
465#define USB_VENDOR_ID_QUANTA 0x0408
466#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH 0x3000
467#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
468
469#define USB_VENDOR_ID_ROCCAT 0x1e7d
470#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced
471
472#define USB_VENDOR_ID_SAITEK 0x06a3
473#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
474
475#define USB_VENDOR_ID_SAMSUNG 0x0419
476#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
477#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600
478
479#define USB_VENDOR_ID_SONY 0x054c
480#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
481#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
482
483#define USB_VENDOR_ID_SOUNDGRAPH 0x15c2
484#define USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST 0x0034
485#define USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST 0x0046
486
487#define USB_VENDOR_ID_STANTUM 0x1f87
488#define USB_DEVICE_ID_MTP 0x0002
489
490#define USB_VENDOR_ID_SUN 0x0430
491#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab
492
493#define USB_VENDOR_ID_SUNPLUS 0x04fc
494#define USB_DEVICE_ID_SUNPLUS_WDESKTOP 0x05d8
495
496#define USB_VENDOR_ID_THRUSTMASTER 0x044f
497
498#define USB_VENDOR_ID_TOPSEED 0x0766
499#define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204
500
501#define USB_VENDOR_ID_TOPSEED2 0x1784
502#define USB_DEVICE_ID_TOPSEED2_RF_COMBO 0x0004
503
504#define USB_VENDOR_ID_TOPMAX 0x0663
505#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103
506
507#define USB_VENDOR_ID_TOUCHPACK 0x1bfd
508#define USB_DEVICE_ID_TOUCHPACK_RTS 0x1688
509
510#define USB_VENDOR_ID_TURBOX 0x062a
511#define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201
512#define USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART 0x7100
513
514#define USB_VENDOR_ID_TWINHAN 0x6253
515#define USB_DEVICE_ID_TWINHAN_IR_REMOTE 0x0100
516
517#define USB_VENDOR_ID_UCLOGIC 0x5543
518#define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 0x0042
519#define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U 0x0003
520#define USB_DEVICE_ID_UCLOGIC_TABLET_KNA5 0x6001
521
522#define USB_VENDOR_ID_VERNIER 0x08f7
523#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001
524#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002
525#define USB_DEVICE_ID_VERNIER_SKIP 0x0003
526#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
527#define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006
528
529#define USB_VENDOR_ID_WACOM 0x056a
530#define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81
531
532#define USB_VENDOR_ID_WISEGROUP 0x0925
533#define USB_DEVICE_ID_SMARTJOY_PLUS 0x0005
534#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101
535#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104
536#define USB_DEVICE_ID_8_8_4_IF_KIT 0x8201
537#define USB_DEVICE_ID_QUAD_USB_JOYPAD 0x8800
538#define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866
539
540#define USB_VENDOR_ID_WISEGROUP_LTD 0x6666
541#define USB_VENDOR_ID_WISEGROUP_LTD2 0x6677
542#define USB_DEVICE_ID_SMARTJOY_DUAL_PLUS 0x8802
543
544#define USB_VENDOR_ID_YEALINK 0x6993
545#define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K 0xb001
546
547#define USB_VENDOR_ID_ZEROPLUS 0x0c12
548
549#define USB_VENDOR_ID_ZYDACRON 0x13EC
550#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006
551
552#endif