--- /dev/null
+From cbaee472f274ea9a98aabe47025f6e5551acadcb Mon Sep 17 00:00:00 2001
+From: Tao Ma <tao.ma@oracle.com>
+Date: Fri, 26 Feb 2010 10:54:52 +0800
+Subject: ocfs2: Only bug out in direct io write for reflinked extent.
+
+From: Tao Ma <tao.ma@oracle.com>
+
+commit cbaee472f274ea9a98aabe47025f6e5551acadcb upstream.
+
+In ocfs2_direct_IO_get_blocks, we only need to bug out
+in case of we are going to write a recounted extent rec.
+
+What a silly bug introduced by me!
+
+Signed-off-by: Tao Ma <tao.ma@oracle.com>
+Signed-off-by: Joel Becker <joel.becker@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ocfs2/aops.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/fs/ocfs2/aops.c
++++ b/fs/ocfs2/aops.c
+@@ -591,8 +591,9 @@ static int ocfs2_direct_IO_get_blocks(st
+ goto bail;
+ }
+
+- /* We should already CoW the refcounted extent. */
+- BUG_ON(ext_flags & OCFS2_EXT_REFCOUNTED);
++ /* We should already CoW the refcounted extent in case of create. */
++ BUG_ON(create && (ext_flags & OCFS2_EXT_REFCOUNTED));
++
+ /*
+ * get_more_blocks() expects us to describe a hole by clearing
+ * the mapped bit on bh_result().
netfilter-xt_recent-fix-buffer-overflow.patch
netfilter-xt_recent-fix-false-match.patch
sunxvr500-additional-pci-id-for-sunxvr500-driver.patch
+thinkpad-acpi-fix-poll-thread-auto-start.patch
+thinkpad-acpi-r52-brightness_mode-has-been-confirmed.patch
+thinkpad-acpi-document-hkey-event-3006.patch
+thinkpad-acpi-make-driver-events-work-in-nvram-poll-mode.patch
+thinkpad-acpi-fix-bluetooth-wwan-resume.patch
+ocfs2-only-bug-out-in-direct-io-write-for-reflinked-extent.patch
+x86-ia32_aout-do-not-kill-argument-mapping.patch
+x86-add-imac9-1-to-pci_reboot_dmi_table.patch
+x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch
+x86-avoid-race-condition-in-pci_enable_msix.patch
+x86-fix-sci-on-ioapic-0.patch
+usb-xhci-fix-finding-extended-capabilities-registers.patch
+usb-fix-the-idproduct-value-for-usb-3.0-root-hubs.patch
+usb-fix-crash-in-uhci_scan_schedule.patch
+usb-remove-debugging-message-for-uevent-constructions.patch
+usb-move-hcd-free_dev-call-into-usb_disconnect-to-fix-oops.patch
+usb-ftdi_sio-isolate-all-device-ids-to-new-ftdi_sio_ids.h-header.patch
+usb-ftdi_sio-sort-pid-vid-entries-in-new-ftdi_sio_ids.h-header.patch
sched-fix-sched_mv_power_savings-for-smt.patch
sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch
sched-don-t-use-possibly-stale-sched_class.patch
--- /dev/null
+From bf8b29c8f7f8269e99eca8b19048ed5b34b51810 Mon Sep 17 00:00:00 2001
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Date: Thu, 25 Feb 2010 21:28:56 -0300
+Subject: thinkpad-acpi: document HKEY event 3006
+
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+
+commit bf8b29c8f7f8269e99eca8b19048ed5b34b51810 upstream.
+
+Event 0x3006 is used to help power management of the ODD in the
+UltraBay. The EC generates this event when the ODD eject button is
+pressed (even if the bay is powered down).
+
+Normally, Linux doesn't need this as we keep the SATA link powered
+up (which wastes power). The EC powers up the bay by itself when the
+ODD eject button is pressed, and the SATA PHY reports the hotplug.
+
+However, we could also power that SATA link down (and for that matter,
+also power down the Ultrabay) if the ODD is left idle for a while with
+no disk inside, and use event 0x3006 to know when we need that SATA link
+powered back up.
+
+For now, just stop asking for more information when event 0x3006 is
+seen, there is no point in pestering users about it anymore.
+
+Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -3630,13 +3630,19 @@ static void hotkey_notify(struct ibm_str
+ break;
+ case 3:
+ /* 0x3000-0x3FFF: bay-related wakeups */
+- if (hkey == TP_HKEY_EV_BAYEJ_ACK) {
++ switch (hkey) {
++ case TP_HKEY_EV_BAYEJ_ACK:
+ hotkey_autosleep_ack = 1;
+ printk(TPACPI_INFO
+ "bay ejected\n");
+ hotkey_wakeup_hotunplug_complete_notify_change();
+ known_ev = true;
+- } else {
++ break;
++ case TP_HKEY_EV_OPTDRV_EJ:
++ /* FIXME: kick libata if SATA link offline */
++ known_ev = true;
++ break;
++ default:
+ known_ev = false;
+ }
+ break;
--- /dev/null
+From 08fedfc903c78e380b0baa7b57c52d367794d0a5 Mon Sep 17 00:00:00 2001
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Date: Thu, 25 Feb 2010 22:22:07 -0300
+Subject: thinkpad-acpi: fix bluetooth/wwan resume
+
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+
+commit 08fedfc903c78e380b0baa7b57c52d367794d0a5 upstream.
+
+Studying the DSDTs of various thinkpads, it looks like bit 3 of the
+argument to SBDC and SWAN is not "set radio to last state on resume".
+Rather, it seems to be "if this bit is set, enable radio on resume,
+otherwise disable it on resume".
+
+So, the proper way to prepare the radios for S3 suspend is: disable
+radio and clear bit 3 on the SBDC/SWAN call to to resume with radio
+disabled, and enable radio and set bit 3 on the SBDC/SWAN call to
+resume with the radio enabled.
+
+Also, for persistent devices, the rfkill core does not restore state,
+so we really need to get the firmware to do the right thing.
+
+We don't sync the radio state on suspend, instead we trust the BIOS to
+not do anything weird if we never touched the radio state since boot.
+Time will tell if that's a wise way of doing things...
+
+Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -3860,7 +3860,7 @@ enum {
+ TP_ACPI_BLUETOOTH_HWPRESENT = 0x01, /* Bluetooth hw available */
+ TP_ACPI_BLUETOOTH_RADIOSSW = 0x02, /* Bluetooth radio enabled */
+ TP_ACPI_BLUETOOTH_RESUMECTRL = 0x04, /* Bluetooth state at resume:
+- off / last state */
++ 0 = disable, 1 = enable */
+ };
+
+ enum {
+@@ -3906,10 +3906,11 @@ static int bluetooth_set_status(enum tpa
+ }
+ #endif
+
+- /* We make sure to keep TP_ACPI_BLUETOOTH_RESUMECTRL off */
+- status = TP_ACPI_BLUETOOTH_RESUMECTRL;
+ if (state == TPACPI_RFK_RADIO_ON)
+- status |= TP_ACPI_BLUETOOTH_RADIOSSW;
++ status = TP_ACPI_BLUETOOTH_RADIOSSW
++ | TP_ACPI_BLUETOOTH_RESUMECTRL;
++ else
++ status = 0;
+
+ if (!acpi_evalf(hkey_handle, NULL, "SBDC", "vd", status))
+ return -EIO;
+@@ -4060,7 +4061,7 @@ enum {
+ TP_ACPI_WANCARD_HWPRESENT = 0x01, /* Wan hw available */
+ TP_ACPI_WANCARD_RADIOSSW = 0x02, /* Wan radio enabled */
+ TP_ACPI_WANCARD_RESUMECTRL = 0x04, /* Wan state at resume:
+- off / last state */
++ 0 = disable, 1 = enable */
+ };
+
+ #define TPACPI_RFK_WWAN_SW_NAME "tpacpi_wwan_sw"
+@@ -4097,10 +4098,11 @@ static int wan_set_status(enum tpacpi_rf
+ }
+ #endif
+
+- /* We make sure to set TP_ACPI_WANCARD_RESUMECTRL */
+- status = TP_ACPI_WANCARD_RESUMECTRL;
+ if (state == TPACPI_RFK_RADIO_ON)
+- status |= TP_ACPI_WANCARD_RADIOSSW;
++ status = TP_ACPI_WANCARD_RADIOSSW
++ | TP_ACPI_WANCARD_RESUMECTRL;
++ else
++ status = 0;
+
+ if (!acpi_evalf(hkey_handle, NULL, "SWAN", "vd", status))
+ return -EIO;
--- /dev/null
+From b589ea4c44170d3f7a845684e2d1b3b9571663af Mon Sep 17 00:00:00 2001
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Date: Thu, 25 Feb 2010 21:28:58 -0300
+Subject: thinkpad-acpi: fix poll thread auto-start
+
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+
+commit b589ea4c44170d3f7a845684e2d1b3b9571663af upstream.
+
+The driver was not starting the NVRAM polling thread if the input
+device was bound immediately after registration.
+
+This fixes:
+http://bugzilla.kernel.org/show_bug.cgi?id=15118
+
+Reported-by: Florian Zumbiehl <florz@florz.de>
+Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -2597,16 +2597,11 @@ static int hotkey_inputdev_open(struct i
+ {
+ switch (tpacpi_lifecycle) {
+ case TPACPI_LIFE_INIT:
+- /*
+- * hotkey_init will call hotkey_poll_setup_safe
+- * at the appropriate moment
+- */
+- return 0;
+- case TPACPI_LIFE_EXITING:
+- return -EBUSY;
+ case TPACPI_LIFE_RUNNING:
+ hotkey_poll_setup_safe(false);
+ return 0;
++ case TPACPI_LIFE_EXITING:
++ return -EBUSY;
+ }
+
+ /* Should only happen if tpacpi_lifecycle is corrupt */
+@@ -2617,7 +2612,7 @@ static int hotkey_inputdev_open(struct i
+ static void hotkey_inputdev_close(struct input_dev *dev)
+ {
+ /* disable hotkey polling when possible */
+- if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING &&
++ if (tpacpi_lifecycle != TPACPI_LIFE_EXITING &&
+ !(hotkey_source_mask & hotkey_driver_mask))
+ hotkey_poll_setup_safe(false);
+ }
+@@ -8362,6 +8357,9 @@ static int __init thinkpad_acpi_module_i
+ return ret;
+ }
+ }
++
++ tpacpi_lifecycle = TPACPI_LIFE_RUNNING;
++
+ ret = input_register_device(tpacpi_inputdev);
+ if (ret < 0) {
+ printk(TPACPI_ERR "unable to register input device\n");
+@@ -8371,7 +8369,6 @@ static int __init thinkpad_acpi_module_i
+ tp_features.input_device_registered = 1;
+ }
+
+- tpacpi_lifecycle = TPACPI_LIFE_RUNNING;
+ return 0;
+ }
+
--- /dev/null
+From 7f0cf712a74fcc3ad21f0bde95bd32c2f2cc3888 Mon Sep 17 00:00:00 2001
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Date: Thu, 25 Feb 2010 21:29:00 -0300
+Subject: thinkpad-acpi: make driver events work in NVRAM poll mode
+
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+
+commit 7f0cf712a74fcc3ad21f0bde95bd32c2f2cc3888 upstream.
+
+Thadeu Lima de Souza Cascardo reports this:
+
+Brightness notification does not work until the user writes to
+hotkey_mask attribute. That's because the polling thread will only run
+if hotkey_user_mask is set and someone is reading the input device or
+if hotkey_driver_mask is set. In this second case, this condition is
+not tested after the mask is changed, because the brightness and
+volume drivers are started after the hotkey drivers.
+
+Fix tpacpi_hotkey_driver_mask_set() to call hotkey_poll_setup(), so
+that the poller kthread will be started when needed.
+
+Reported-by: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
+Tested-by: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
+Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -2073,6 +2073,7 @@ static struct attribute_set *hotkey_dev_
+
+ static void tpacpi_driver_event(const unsigned int hkey_event);
+ static void hotkey_driver_event(const unsigned int scancode);
++static void hotkey_poll_setup(const bool may_warn);
+
+ /* HKEY.MHKG() return bits */
+ #define TP_HOTKEY_TABLET_MASK (1 << 3)
+@@ -2254,6 +2255,8 @@ static int tpacpi_hotkey_driver_mask_set
+
+ rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
+ ~hotkey_source_mask);
++ hotkey_poll_setup(true);
++
+ mutex_unlock(&hotkey_mutex);
+
+ return rc;
+@@ -2538,7 +2541,7 @@ static void hotkey_poll_stop_sync(void)
+ }
+
+ /* call with hotkey_mutex held */
+-static void hotkey_poll_setup(bool may_warn)
++static void hotkey_poll_setup(const bool may_warn)
+ {
+ const u32 poll_driver_mask = hotkey_driver_mask & hotkey_source_mask;
+ const u32 poll_user_mask = hotkey_user_mask & hotkey_source_mask;
+@@ -2569,7 +2572,7 @@ static void hotkey_poll_setup(bool may_w
+ }
+ }
+
+-static void hotkey_poll_setup_safe(bool may_warn)
++static void hotkey_poll_setup_safe(const bool may_warn)
+ {
+ mutex_lock(&hotkey_mutex);
+ hotkey_poll_setup(may_warn);
+@@ -2587,7 +2590,11 @@ static void hotkey_poll_set_freq(unsigne
+
+ #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
+
+-static void hotkey_poll_setup_safe(bool __unused)
++static void hotkey_poll_setup(const bool __unused)
++{
++}
++
++static void hotkey_poll_setup_safe(const bool __unused)
+ {
+ }
+
--- /dev/null
+From 7d1894d8d1c411d2dad95abfe0f65bacf68c4afa Mon Sep 17 00:00:00 2001
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Date: Thu, 25 Feb 2010 21:28:56 -0300
+Subject: thinkpad-acpi: R52 brightness_mode has been confirmed
+
+From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+
+commit 7d1894d8d1c411d2dad95abfe0f65bacf68c4afa upstream.
+
+We can stop pestering users for confirmation of the brightness_mode
+default for firmware TP-76.
+
+While at it, add a few missing comments in that quirk table.
+
+Reported-by: Whoopie <whoopie79@gmx.net>
+Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -6089,13 +6089,13 @@ static const struct tpacpi_quirk brightn
+ TPACPI_Q_IBM('1', 'Y', TPACPI_BRGHT_Q_EC), /* T43/p ATI */
+
+ /* Models with ATI GPUs that can use ECNVRAM */
+- TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC),
++ TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC), /* R50,51 T40-42 */
+ TPACPI_Q_IBM('1', 'Q', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
+- TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
++ TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_EC), /* R52 */
+ TPACPI_Q_IBM('7', '8', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
+
+ /* Models with Intel Extreme Graphics 2 */
+- TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC),
++ TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC), /* X40 */
+ TPACPI_Q_IBM('1', 'V', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
+ TPACPI_Q_IBM('1', 'W', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
+
--- /dev/null
+From d23356da714595b888686d22cd19061323c09190 Mon Sep 17 00:00:00 2001
+From: Pete Zaitcev <zaitcev@redhat.com>
+Date: Fri, 8 Jan 2010 15:39:22 -0700
+Subject: USB: fix crash in uhci_scan_schedule
+
+From: Pete Zaitcev <zaitcev@redhat.com>
+
+commit d23356da714595b888686d22cd19061323c09190 upstream.
+
+When hardware is removed on a Stratus, the system may crash like this:
+
+ACPI: PCI interrupt for device 0000:7c:00.1 disabled
+Trying to free nonexistent resource <00000000a8000000-00000000afffffff>
+Trying to free nonexistent resource <00000000a4800000-00000000a480ffff>
+uhci_hcd 0000:7e:1d.0: remove, state 1
+usb usb2: USB disconnect, address 1
+usb 2-1: USB disconnect, address 2
+Unable to handle kernel paging request at 0000000000100100 RIP:
+ [<ffffffff88021950>] :uhci_hcd:uhci_scan_schedule+0xa2/0x89c
+
+ #4 [ffff81011de17e50] uhci_scan_schedule at ffffffff88021918
+ #5 [ffff81011de17ed0] uhci_irq at ffffffff88023cb8
+ #6 [ffff81011de17f10] usb_hcd_irq at ffffffff801f1c1f
+ #7 [ffff81011de17f20] handle_IRQ_event at ffffffff8001123b
+ #8 [ffff81011de17f50] __do_IRQ at ffffffff800ba749
+
+This occurs because an interrupt scans uhci->skelqh, which is
+being freed. We do the right thing: disable the interrupts in the
+device, and do not do any processing if the interrupt is shared
+with other source, but it's possible that another CPU gets
+delayed somewhere (e.g. loops) until we started freeing.
+
+The agreed-upon solution is to wait for interrupts to play out
+before proceeding. No other bareers are neceesary.
+
+A backport of this patch was tested on a 2.6.18 based kernel.
+Testing of 2.6.32-based kernels is under way, but it takes us
+forever (months) to turn this around. So I think it's a good
+patch and we should keep it.
+
+Tracked in RH bz#516851
+
+Signed-Off-By: Pete Zaitcev <zaitcev@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/uhci-hcd.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/host/uhci-hcd.c
++++ b/drivers/usb/host/uhci-hcd.c
+@@ -735,6 +735,7 @@ static void uhci_stop(struct usb_hcd *hc
+ uhci_hc_died(uhci);
+ uhci_scan_schedule(uhci);
+ spin_unlock_irq(&uhci->lock);
++ synchronize_irq(hcd->irq);
+
+ del_timer_sync(&uhci->fsbr_timer);
+ release_uhci(uhci);
--- /dev/null
+From cd780694920fbf869b23c8afb0bd083e7b0448c7 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Thu, 25 Feb 2010 13:19:37 -0500
+Subject: USB: fix the idProduct value for USB-3.0 root hubs
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit cd780694920fbf869b23c8afb0bd083e7b0448c7 upstream.
+
+This patch (as1346) changes the idProduct value for USB-3.0 root hubs
+from 0x0002 (which we already use for USB-2.0 root hubs) to 0x0003.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Acked-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hcd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/core/hcd.c
++++ b/drivers/usb/core/hcd.c
+@@ -140,7 +140,7 @@ static const u8 usb3_rh_dev_descriptor[1
+ 0x09, /* __u8 bMaxPacketSize0; 2^9 = 512 Bytes */
+
+ 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */
+- 0x02, 0x00, /* __le16 idProduct; device 0x0002 */
++ 0x03, 0x00, /* __le16 idProduct; device 0x0003 */
+ KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */
+
+ 0x03, /* __u8 iManufacturer; */
--- /dev/null
+From 31844d55800e1b93fe75c4d6188a4a44db2e1bbe Mon Sep 17 00:00:00 2001
+From: Andreas Mohr <andi@lisas.de>
+Date: Wed, 16 Dec 2009 21:45:10 +0100
+Subject: USB: ftdi_sio: isolate all device IDs to new ftdi_sio_ids.h header
+
+From: Andreas Mohr <andi@lisas.de>
+
+commit 31844d55800e1b93fe75c4d6188a4a44db2e1bbe upstream.
+
+This is a strictly move-only patch to relocate all FTDI device
+product ID definitions to their own ftdi_sio_ids.h header
+(following the usual *_ids.h kernel tree convention, too),
+thus correcting the slightly too messy appearance
+(crucial driver defines were stuck somewhere in the decaying middle swamp
+of the huge existing header).
+
+Compile-tested, based on latest mainline git.
+
+Signed-off-by: Andreas Mohr <andi@lisas.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 1
+ drivers/usb/serial/ftdi_sio.h | 959 --------------------------------------
+ drivers/usb/serial/ftdi_sio_ids.h | 959 ++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 964 insertions(+), 955 deletions(-)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -44,6 +44,7 @@
+ #include <linux/serial.h>
+ #include <linux/usb/serial.h>
+ #include "ftdi_sio.h"
++#include "ftdi_sio_ids.h"
+
+ /*
+ * Version Information
+--- a/drivers/usb/serial/ftdi_sio.h
++++ b/drivers/usb/serial/ftdi_sio.h
+@@ -1,7 +1,10 @@
+ /*
+- * Definitions for the FTDI USB Single Port Serial Converter -
++ * Driver definitions for the FTDI USB Single Port Serial Converter -
+ * known as FTDI_SIO (Serial Input/Output application of the chipset)
+ *
++ * For USB vendor/product IDs (VID/PID), please see ftdi_sio_ids.h
++ *
++ *
+ * The example I have is known as the USC-1000 which is available from
+ * http://www.dse.co.nz - cat no XH4214 It looks similar to this:
+ * http://www.dansdata.com/usbser.htm but I can't be sure There are other
+@@ -17,880 +20,7 @@
+ * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the
+ * FTDI_SIO implementation.
+ *
+- * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais
+- * from Rudolf Gugler
+- *
+- */
+-
+-#define FTDI_VID 0x0403 /* Vendor Id */
+-#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
+-#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
+-#define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
+-#define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
+-#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */
+-#define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */
+-#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */
+-#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */
+-#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
+-#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 */
+-
+-/* Larsen and Brusgaard AltiTrack/USBtrack */
+-#define LARSENBRUSGAARD_VID 0x0FD8
+-#define LB_ALTITRACK_PID 0x0001
+-
+-/* www.canusb.com Lawicel CANUSB device */
+-#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */
+-
+-/* AlphaMicro Components AMC-232USB01 device */
+-#define FTDI_AMC232_PID 0xFF00 /* Product Id */
+-
+-/* www.candapter.com Ewert Energy Systems CANdapter device */
+-#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
+-
+-/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
+-/* the VID is the standard ftdi vid (FTDI_VID) */
+-#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
+-#define FTDI_SCS_DEVICE_1_PID 0xD011 /* SCS Tracker / DSP TNC */
+-#define FTDI_SCS_DEVICE_2_PID 0xD012
+-#define FTDI_SCS_DEVICE_3_PID 0xD013
+-#define FTDI_SCS_DEVICE_4_PID 0xD014
+-#define FTDI_SCS_DEVICE_5_PID 0xD015
+-#define FTDI_SCS_DEVICE_6_PID 0xD016
+-#define FTDI_SCS_DEVICE_7_PID 0xD017
+-
+-/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */
+-#define FTDI_ACTZWAVE_PID 0xF2D0
+-
+-
+-/* www.starting-point-systems.com µChameleon device */
+-#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */
+-
+-/* www.irtrans.de device */
+-#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */
+-
+-
+-/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */
+-#define FTDI_TTUSB_PID 0xFF20 /* Product Id */
+-
+-/* iPlus device */
+-#define FTDI_IPLUS_PID 0xD070 /* Product Id */
+-#define FTDI_IPLUS2_PID 0xD071 /* Product Id */
+-
+-/* DMX4ALL DMX Interfaces */
+-#define FTDI_DMX4ALL 0xC850
+-
+-/* OpenDCC (www.opendcc.de) product id */
+-#define FTDI_OPENDCC_PID 0xBFD8
+-#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9
+-#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
+-#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
+-
+-/* Sprog II (Andrew Crosland's SprogII DCC interface) */
+-#define FTDI_SPROG_II 0xF0C8
+-
+-/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
+-/* they use the ftdi chipset for the USB interface and the vendor id is the same */
+-#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
+-#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */
+-#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */
+-#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */
+-#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */
+-#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */
+-#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */
+-#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */
+-
+-/* Video Networks Limited / Homechoice in the UK use an ftdi-based device for their 1Mb */
+-/* broadband internet service. The following PID is exhibited by the usb device supplied */
+-/* (the VID is the standard ftdi vid (FTDI_VID) */
+-#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */
+-
+-/*
+- * PCDJ use ftdi based dj-controllers. The following PID is for their DAC-2 device
+- * http://www.pcdjhardware.com/DAC2.asp (PID sent by Wouter Paesen)
+- * (the VID is the standard ftdi vid (FTDI_VID) */
+-#define FTDI_PCDJ_DAC2_PID 0xFA88
+-
+-/*
+- * The following are the values for the Matrix Orbital LCD displays,
+- * which are the FT232BM ( similar to the 8U232AM )
+- */
+-#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */
+-
+-/* OOCDlink by Joern Kaipf <joernk@web.de>
+- * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
+-#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
+-
+-/*
+- * The following are the values for the Matrix Orbital FTDI Range
+- * Anything in this range will use an FT232RL.
+- */
+-#define MTXORB_VID 0x1B3D
+-#define MTXORB_FTDI_RANGE_0100_PID 0x0100
+-#define MTXORB_FTDI_RANGE_0101_PID 0x0101
+-#define MTXORB_FTDI_RANGE_0102_PID 0x0102
+-#define MTXORB_FTDI_RANGE_0103_PID 0x0103
+-#define MTXORB_FTDI_RANGE_0104_PID 0x0104
+-#define MTXORB_FTDI_RANGE_0105_PID 0x0105
+-#define MTXORB_FTDI_RANGE_0106_PID 0x0106
+-#define MTXORB_FTDI_RANGE_0107_PID 0x0107
+-#define MTXORB_FTDI_RANGE_0108_PID 0x0108
+-#define MTXORB_FTDI_RANGE_0109_PID 0x0109
+-#define MTXORB_FTDI_RANGE_010A_PID 0x010A
+-#define MTXORB_FTDI_RANGE_010B_PID 0x010B
+-#define MTXORB_FTDI_RANGE_010C_PID 0x010C
+-#define MTXORB_FTDI_RANGE_010D_PID 0x010D
+-#define MTXORB_FTDI_RANGE_010E_PID 0x010E
+-#define MTXORB_FTDI_RANGE_010F_PID 0x010F
+-#define MTXORB_FTDI_RANGE_0110_PID 0x0110
+-#define MTXORB_FTDI_RANGE_0111_PID 0x0111
+-#define MTXORB_FTDI_RANGE_0112_PID 0x0112
+-#define MTXORB_FTDI_RANGE_0113_PID 0x0113
+-#define MTXORB_FTDI_RANGE_0114_PID 0x0114
+-#define MTXORB_FTDI_RANGE_0115_PID 0x0115
+-#define MTXORB_FTDI_RANGE_0116_PID 0x0116
+-#define MTXORB_FTDI_RANGE_0117_PID 0x0117
+-#define MTXORB_FTDI_RANGE_0118_PID 0x0118
+-#define MTXORB_FTDI_RANGE_0119_PID 0x0119
+-#define MTXORB_FTDI_RANGE_011A_PID 0x011A
+-#define MTXORB_FTDI_RANGE_011B_PID 0x011B
+-#define MTXORB_FTDI_RANGE_011C_PID 0x011C
+-#define MTXORB_FTDI_RANGE_011D_PID 0x011D
+-#define MTXORB_FTDI_RANGE_011E_PID 0x011E
+-#define MTXORB_FTDI_RANGE_011F_PID 0x011F
+-#define MTXORB_FTDI_RANGE_0120_PID 0x0120
+-#define MTXORB_FTDI_RANGE_0121_PID 0x0121
+-#define MTXORB_FTDI_RANGE_0122_PID 0x0122
+-#define MTXORB_FTDI_RANGE_0123_PID 0x0123
+-#define MTXORB_FTDI_RANGE_0124_PID 0x0124
+-#define MTXORB_FTDI_RANGE_0125_PID 0x0125
+-#define MTXORB_FTDI_RANGE_0126_PID 0x0126
+-#define MTXORB_FTDI_RANGE_0127_PID 0x0127
+-#define MTXORB_FTDI_RANGE_0128_PID 0x0128
+-#define MTXORB_FTDI_RANGE_0129_PID 0x0129
+-#define MTXORB_FTDI_RANGE_012A_PID 0x012A
+-#define MTXORB_FTDI_RANGE_012B_PID 0x012B
+-#define MTXORB_FTDI_RANGE_012C_PID 0x012C
+-#define MTXORB_FTDI_RANGE_012D_PID 0x012D
+-#define MTXORB_FTDI_RANGE_012E_PID 0x012E
+-#define MTXORB_FTDI_RANGE_012F_PID 0x012F
+-#define MTXORB_FTDI_RANGE_0130_PID 0x0130
+-#define MTXORB_FTDI_RANGE_0131_PID 0x0131
+-#define MTXORB_FTDI_RANGE_0132_PID 0x0132
+-#define MTXORB_FTDI_RANGE_0133_PID 0x0133
+-#define MTXORB_FTDI_RANGE_0134_PID 0x0134
+-#define MTXORB_FTDI_RANGE_0135_PID 0x0135
+-#define MTXORB_FTDI_RANGE_0136_PID 0x0136
+-#define MTXORB_FTDI_RANGE_0137_PID 0x0137
+-#define MTXORB_FTDI_RANGE_0138_PID 0x0138
+-#define MTXORB_FTDI_RANGE_0139_PID 0x0139
+-#define MTXORB_FTDI_RANGE_013A_PID 0x013A
+-#define MTXORB_FTDI_RANGE_013B_PID 0x013B
+-#define MTXORB_FTDI_RANGE_013C_PID 0x013C
+-#define MTXORB_FTDI_RANGE_013D_PID 0x013D
+-#define MTXORB_FTDI_RANGE_013E_PID 0x013E
+-#define MTXORB_FTDI_RANGE_013F_PID 0x013F
+-#define MTXORB_FTDI_RANGE_0140_PID 0x0140
+-#define MTXORB_FTDI_RANGE_0141_PID 0x0141
+-#define MTXORB_FTDI_RANGE_0142_PID 0x0142
+-#define MTXORB_FTDI_RANGE_0143_PID 0x0143
+-#define MTXORB_FTDI_RANGE_0144_PID 0x0144
+-#define MTXORB_FTDI_RANGE_0145_PID 0x0145
+-#define MTXORB_FTDI_RANGE_0146_PID 0x0146
+-#define MTXORB_FTDI_RANGE_0147_PID 0x0147
+-#define MTXORB_FTDI_RANGE_0148_PID 0x0148
+-#define MTXORB_FTDI_RANGE_0149_PID 0x0149
+-#define MTXORB_FTDI_RANGE_014A_PID 0x014A
+-#define MTXORB_FTDI_RANGE_014B_PID 0x014B
+-#define MTXORB_FTDI_RANGE_014C_PID 0x014C
+-#define MTXORB_FTDI_RANGE_014D_PID 0x014D
+-#define MTXORB_FTDI_RANGE_014E_PID 0x014E
+-#define MTXORB_FTDI_RANGE_014F_PID 0x014F
+-#define MTXORB_FTDI_RANGE_0150_PID 0x0150
+-#define MTXORB_FTDI_RANGE_0151_PID 0x0151
+-#define MTXORB_FTDI_RANGE_0152_PID 0x0152
+-#define MTXORB_FTDI_RANGE_0153_PID 0x0153
+-#define MTXORB_FTDI_RANGE_0154_PID 0x0154
+-#define MTXORB_FTDI_RANGE_0155_PID 0x0155
+-#define MTXORB_FTDI_RANGE_0156_PID 0x0156
+-#define MTXORB_FTDI_RANGE_0157_PID 0x0157
+-#define MTXORB_FTDI_RANGE_0158_PID 0x0158
+-#define MTXORB_FTDI_RANGE_0159_PID 0x0159
+-#define MTXORB_FTDI_RANGE_015A_PID 0x015A
+-#define MTXORB_FTDI_RANGE_015B_PID 0x015B
+-#define MTXORB_FTDI_RANGE_015C_PID 0x015C
+-#define MTXORB_FTDI_RANGE_015D_PID 0x015D
+-#define MTXORB_FTDI_RANGE_015E_PID 0x015E
+-#define MTXORB_FTDI_RANGE_015F_PID 0x015F
+-#define MTXORB_FTDI_RANGE_0160_PID 0x0160
+-#define MTXORB_FTDI_RANGE_0161_PID 0x0161
+-#define MTXORB_FTDI_RANGE_0162_PID 0x0162
+-#define MTXORB_FTDI_RANGE_0163_PID 0x0163
+-#define MTXORB_FTDI_RANGE_0164_PID 0x0164
+-#define MTXORB_FTDI_RANGE_0165_PID 0x0165
+-#define MTXORB_FTDI_RANGE_0166_PID 0x0166
+-#define MTXORB_FTDI_RANGE_0167_PID 0x0167
+-#define MTXORB_FTDI_RANGE_0168_PID 0x0168
+-#define MTXORB_FTDI_RANGE_0169_PID 0x0169
+-#define MTXORB_FTDI_RANGE_016A_PID 0x016A
+-#define MTXORB_FTDI_RANGE_016B_PID 0x016B
+-#define MTXORB_FTDI_RANGE_016C_PID 0x016C
+-#define MTXORB_FTDI_RANGE_016D_PID 0x016D
+-#define MTXORB_FTDI_RANGE_016E_PID 0x016E
+-#define MTXORB_FTDI_RANGE_016F_PID 0x016F
+-#define MTXORB_FTDI_RANGE_0170_PID 0x0170
+-#define MTXORB_FTDI_RANGE_0171_PID 0x0171
+-#define MTXORB_FTDI_RANGE_0172_PID 0x0172
+-#define MTXORB_FTDI_RANGE_0173_PID 0x0173
+-#define MTXORB_FTDI_RANGE_0174_PID 0x0174
+-#define MTXORB_FTDI_RANGE_0175_PID 0x0175
+-#define MTXORB_FTDI_RANGE_0176_PID 0x0176
+-#define MTXORB_FTDI_RANGE_0177_PID 0x0177
+-#define MTXORB_FTDI_RANGE_0178_PID 0x0178
+-#define MTXORB_FTDI_RANGE_0179_PID 0x0179
+-#define MTXORB_FTDI_RANGE_017A_PID 0x017A
+-#define MTXORB_FTDI_RANGE_017B_PID 0x017B
+-#define MTXORB_FTDI_RANGE_017C_PID 0x017C
+-#define MTXORB_FTDI_RANGE_017D_PID 0x017D
+-#define MTXORB_FTDI_RANGE_017E_PID 0x017E
+-#define MTXORB_FTDI_RANGE_017F_PID 0x017F
+-#define MTXORB_FTDI_RANGE_0180_PID 0x0180
+-#define MTXORB_FTDI_RANGE_0181_PID 0x0181
+-#define MTXORB_FTDI_RANGE_0182_PID 0x0182
+-#define MTXORB_FTDI_RANGE_0183_PID 0x0183
+-#define MTXORB_FTDI_RANGE_0184_PID 0x0184
+-#define MTXORB_FTDI_RANGE_0185_PID 0x0185
+-#define MTXORB_FTDI_RANGE_0186_PID 0x0186
+-#define MTXORB_FTDI_RANGE_0187_PID 0x0187
+-#define MTXORB_FTDI_RANGE_0188_PID 0x0188
+-#define MTXORB_FTDI_RANGE_0189_PID 0x0189
+-#define MTXORB_FTDI_RANGE_018A_PID 0x018A
+-#define MTXORB_FTDI_RANGE_018B_PID 0x018B
+-#define MTXORB_FTDI_RANGE_018C_PID 0x018C
+-#define MTXORB_FTDI_RANGE_018D_PID 0x018D
+-#define MTXORB_FTDI_RANGE_018E_PID 0x018E
+-#define MTXORB_FTDI_RANGE_018F_PID 0x018F
+-#define MTXORB_FTDI_RANGE_0190_PID 0x0190
+-#define MTXORB_FTDI_RANGE_0191_PID 0x0191
+-#define MTXORB_FTDI_RANGE_0192_PID 0x0192
+-#define MTXORB_FTDI_RANGE_0193_PID 0x0193
+-#define MTXORB_FTDI_RANGE_0194_PID 0x0194
+-#define MTXORB_FTDI_RANGE_0195_PID 0x0195
+-#define MTXORB_FTDI_RANGE_0196_PID 0x0196
+-#define MTXORB_FTDI_RANGE_0197_PID 0x0197
+-#define MTXORB_FTDI_RANGE_0198_PID 0x0198
+-#define MTXORB_FTDI_RANGE_0199_PID 0x0199
+-#define MTXORB_FTDI_RANGE_019A_PID 0x019A
+-#define MTXORB_FTDI_RANGE_019B_PID 0x019B
+-#define MTXORB_FTDI_RANGE_019C_PID 0x019C
+-#define MTXORB_FTDI_RANGE_019D_PID 0x019D
+-#define MTXORB_FTDI_RANGE_019E_PID 0x019E
+-#define MTXORB_FTDI_RANGE_019F_PID 0x019F
+-#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0
+-#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1
+-#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2
+-#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3
+-#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4
+-#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5
+-#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6
+-#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7
+-#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8
+-#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9
+-#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA
+-#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB
+-#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC
+-#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD
+-#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE
+-#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF
+-#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0
+-#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1
+-#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2
+-#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3
+-#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4
+-#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5
+-#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6
+-#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7
+-#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8
+-#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9
+-#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA
+-#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB
+-#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC
+-#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD
+-#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE
+-#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF
+-#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0
+-#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1
+-#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2
+-#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3
+-#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4
+-#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5
+-#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6
+-#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7
+-#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8
+-#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9
+-#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA
+-#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB
+-#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC
+-#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD
+-#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE
+-#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF
+-#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0
+-#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1
+-#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2
+-#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3
+-#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4
+-#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5
+-#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6
+-#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7
+-#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8
+-#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9
+-#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA
+-#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB
+-#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC
+-#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD
+-#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE
+-#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF
+-#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0
+-#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1
+-#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2
+-#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3
+-#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4
+-#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5
+-#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6
+-#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7
+-#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8
+-#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9
+-#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA
+-#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB
+-#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC
+-#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED
+-#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE
+-#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF
+-#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0
+-#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1
+-#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2
+-#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3
+-#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4
+-#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5
+-#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6
+-#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7
+-#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8
+-#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9
+-#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA
+-#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB
+-#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC
+-#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD
+-#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE
+-#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF
+-
+-
+-
+-/* Interbiometrics USB I/O Board */
+-/* Developed for Interbiometrics by Rudolf Gugler */
+-#define INTERBIOMETRICS_VID 0x1209
+-#define INTERBIOMETRICS_IOBOARD_PID 0x1002
+-#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006
+-
+-/*
+- * The following are the values for the Perle Systems
+- * UltraPort USB serial converters
+- */
+-#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */
+-
+-/*
+- * The following are the values for the Sealevel SeaLINK+ adapters.
+- * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and
+- * removed some PIDs that don't seem to match any existing products.)
+- */
+-#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */
+-#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */
+-#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */
+-#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */
+-#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */
+-#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */
+-#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */
+-#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */
+-#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */
+-#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */
+-#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */
+-#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */
+-#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */
+-#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */
+-#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */
+-#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */
+-#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */
+-#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */
+-#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */
+-#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */
+-#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */
+-#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */
+-#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */
+-#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */
+-#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */
+-#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */
+-#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */
+-#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */
+-#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */
+-#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */
+-#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */
+-#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */
+-#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */
+-#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */
+-#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */
+-#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */
+-#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */
+-#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */
+-#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */
+-#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */
+-#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */
+-#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */
+-#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */
+-#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */
+-#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */
+-#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */
+-#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */
+-#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */
+-
+-/*
+- * The following are the values for two KOBIL chipcard terminals.
+- */
+-#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */
+-#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */
+-#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */
+-
+-/*
+- * Icom ID-1 digital transceiver
+- */
+-
+-#define ICOM_ID1_VID 0x0C26
+-#define ICOM_ID1_PID 0x0004
+-
+-/*
+- * ASK.fr devices
+- */
+-#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */
+-
+-/*
+- * FTDI USB UART chips used in construction projects from the
+- * Elektor Electronics magazine (http://elektor-electronics.co.uk)
+- */
+-#define ELEKTOR_VID 0x0C7D
+-#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */
+-
+-/*
+- * DSS-20 Sync Station for Sony Ericsson P800
+- */
+-#define FTDI_DSS20_PID 0xFC82
+-
+-/*
+- * Home Electronics (www.home-electro.com) USB gadgets
+- */
+-#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */
+-
+-/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
+-/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
+-#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */
+-
+-/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */
+-
+-#define FTDI_TNC_X_PID 0xEBE0
+-
+-/*
+- * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).
+- * All of these devices use FTDI's vendor ID (0x0403).
+- *
+- * The previously included PID for the UO 100 module was incorrect.
+- * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58).
+- *
+- * Armin Laeuger originally sent the PID for the UM 100 module.
+- */
+-#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG */
+-#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */
+-#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */
+-#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */
+-#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */
+-/* Additional ELV PIDs that default to using the FTDI D2XX drivers on
+- * MS Windows, rather than the FTDI Virtual Com Port drivers.
+- * Maybe these will be easier to use with the libftdi/libusb user-space
+- * drivers, or possibly the Comedi drivers in some cases. */
+-#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */
+-#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */
+-#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */
+-#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */
+-#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */
+-#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */
+-#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */
+-#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */
+-#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */
+-#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */
+-#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */
+-#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */
+-#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */
+-#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */
+-#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */
+-#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */
+-#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */
+-#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */
+-#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */
+-#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
+-#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */
+-#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */
+-#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */
+-
+-/*
+- * Definitions for ID TECH (www.idt-net.com) devices
+- */
+-#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */
+-#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */
+-
+-/*
+- * Definitions for Omnidirectional Control Technology, Inc. devices
+- */
+-#define OCT_VID 0x0B39 /* OCT vendor ID */
+-/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
+-/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
+-/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
+-#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
+-
+-/* an infrared receiver for user access control with IR tags */
+-#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */
+-
+-/*
+- * Definitions for Artemis astronomical USB based cameras
+- * Check it at http://www.artemisccd.co.uk/
+- */
+-#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */
+-
+-/*
+- * Definitions for ATIK Instruments astronomical USB based cameras
+- * Check it at http://www.atik-instruments.com/
+- */
+-#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */
+-#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */
+-#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */
+-#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */
+-#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */
+-
+-/*
+- * Protego product ids
+- */
+-#define PROTEGO_SPECIAL_1 0xFC70 /* special/unknown device */
+-#define PROTEGO_R2X0 0xFC71 /* R200-USB TRNG unit (R210, R220, and R230) */
+-#define PROTEGO_SPECIAL_3 0xFC72 /* special/unknown device */
+-#define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */
+-
+-/*
+- * Gude Analog- und Digitalsysteme GmbH
+- */
+-#define FTDI_GUDEADS_E808_PID 0xE808
+-#define FTDI_GUDEADS_E809_PID 0xE809
+-#define FTDI_GUDEADS_E80A_PID 0xE80A
+-#define FTDI_GUDEADS_E80B_PID 0xE80B
+-#define FTDI_GUDEADS_E80C_PID 0xE80C
+-#define FTDI_GUDEADS_E80D_PID 0xE80D
+-#define FTDI_GUDEADS_E80E_PID 0xE80E
+-#define FTDI_GUDEADS_E80F_PID 0xE80F
+-#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */
+-#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */
+-#define FTDI_GUDEADS_E88A_PID 0xE88A
+-#define FTDI_GUDEADS_E88B_PID 0xE88B
+-#define FTDI_GUDEADS_E88C_PID 0xE88C
+-#define FTDI_GUDEADS_E88D_PID 0xE88D
+-#define FTDI_GUDEADS_E88E_PID 0xE88E
+-#define FTDI_GUDEADS_E88F_PID 0xE88F
+-
+-/*
+- * Linx Technologies product ids
+- */
+-#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */
+-#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */
+-#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */
+-#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */
+-#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */
+-
+-/* CCS Inc. ICDU/ICDU40 product ID - the FT232BM is used in an in-circuit-debugger */
+-/* unit for PIC16's/PIC18's */
+-#define FTDI_CCSICDU20_0_PID 0xF9D0
+-#define FTDI_CCSICDU40_1_PID 0xF9D1
+-#define FTDI_CCSMACHX_2_PID 0xF9D2
+-#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3
+-#define FTDI_CCSICDU64_4_PID 0xF9D4
+-#define FTDI_CCSPRIME8_5_PID 0xF9D5
+-
+-/* Inside Accesso contactless reader (http://www.insidefr.com) */
+-#define INSIDE_ACCESSO 0xFAD0
+-
+-/*
+- * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI
+- */
+-#define INTREPID_VID 0x093C
+-#define INTREPID_VALUECAN_PID 0x0601
+-#define INTREPID_NEOVI_PID 0x0701
+-
+-/*
+- * Falcom Wireless Communications GmbH
+- */
+-#define FALCOM_VID 0x0F94 /* Vendor Id */
+-#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */
+-#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */
+-
+-/*
+- * SUUNTO product ids
+- */
+-#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */
+-
+-/*
+- * Oceanic product ids
+- */
+-#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */
+-
+-/*
+- * TTi (Thurlby Thandar Instruments)
+- */
+-#define TTI_VID 0x103E /* Vendor Id */
+-#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */
+-
+-/*
+- * Definitions for B&B Electronics products.
+- */
+-#define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */
+-#define BANDB_USOTL4_PID 0xAC01 /* USOTL4 Isolated RS-485 Converter */
+-#define BANDB_USTL4_PID 0xAC02 /* USTL4 RS-485 Converter */
+-#define BANDB_USO9ML2_PID 0xAC03 /* USO9ML2 Isolated RS-232 Converter */
+-#define BANDB_USOPTL4_PID 0xAC11
+-#define BANDB_USPTL4_PID 0xAC12
+-#define BANDB_USO9ML2DR_2_PID 0xAC16
+-#define BANDB_USO9ML2DR_PID 0xAC17
+-#define BANDB_USOPTL4DR2_PID 0xAC18 /* USOPTL4R-2 2-port Isolated RS-232 Converter */
+-#define BANDB_USOPTL4DR_PID 0xAC19
+-#define BANDB_485USB9F_2W_PID 0xAC25
+-#define BANDB_485USB9F_4W_PID 0xAC26
+-#define BANDB_232USB9M_PID 0xAC27
+-#define BANDB_485USBTB_2W_PID 0xAC33
+-#define BANDB_485USBTB_4W_PID 0xAC34
+-#define BANDB_TTL5USB9M_PID 0xAC49
+-#define BANDB_TTL3USB9M_PID 0xAC50
+-#define BANDB_ZZ_PROG1_USB_PID 0xBA02
+-
+-/*
+- * RM Michaelides CANview USB (http://www.rmcan.com)
+- * CAN fieldbus interface adapter, added by port GmbH www.port.de)
+- * Ian Abbott changed the macro names for consistency.
+- */
+-#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */
+-
+-/*
+- * EVER Eco Pro UPS (http://www.ever.com.pl/)
+- */
+-
+-#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */
+-
+-/*
+- * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
+- * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices
+- * and I'm not entirely sure which are used by which.
+- */
+-#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0
+-#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1
+-
+-/*
+- * Mobility Electronics products.
+- */
+-#define MOBILITY_VID 0x1342
+-#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */
+-
+-/*
+- * microHAM product IDs (http://www.microham.com).
+- * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>
+- * and Mike Studer (K6EEP) <k6eep@hamsoftware.org>.
+- * Ian Abbott <abbotti@mev.co.uk> added a few more from the driver INF file.
+- */
+-#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */
+-#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */
+-#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */
+-#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */
+-#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */
+-#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */
+-#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */
+-#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */
+-
+-/*
+- * Active Robots product ids.
+- */
+-#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */
+-
+-/*
+- * Xsens Technologies BV products (http://www.xsens.com).
+- */
+-#define XSENS_CONVERTER_0_PID 0xD388
+-#define XSENS_CONVERTER_1_PID 0xD389
+-#define XSENS_CONVERTER_2_PID 0xD38A
+-#define XSENS_CONVERTER_3_PID 0xD38B
+-#define XSENS_CONVERTER_4_PID 0xD38C
+-#define XSENS_CONVERTER_5_PID 0xD38D
+-#define XSENS_CONVERTER_6_PID 0xD38E
+-#define XSENS_CONVERTER_7_PID 0xD38F
+-
+-/*
+- * Teratronik product ids.
+- * Submitted by O. Wölfelschneider.
+- */
+-#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */
+-#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */
+-
+-/*
+- * Evolution Robotics products (http://www.evolution.com/).
+- * Submitted by Shawn M. Lavelle.
+- */
+-#define EVOLUTION_VID 0xDEEE /* Vendor ID */
+-#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */
+-#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/
+-#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/
+-#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */
+-
+-/* Pyramid Computer GmbH */
+-#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */
+-
+-/*
+- * NDI (www.ndigital.com) product ids
+- */
+-#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */
+-#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */
+-#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */
+-#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */
+-#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */
+-
+-/*
+- * Posiflex inc retail equipment (http://www.posiflex.com.tw)
+- */
+-#define POSIFLEX_VID 0x0d3a /* Vendor ID */
+-#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */
+-
+-/*
+- * Westrex International devices submitted by Cory Lee
+- */
+-#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */
+-#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */
+-
+-/*
+- * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com)
+- */
+-#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */
+-
+-/*
+- * Eclo (http://www.eclo.pt/) product IDs.
+- * PID 0xEA90 submitted by Martin Grill.
+- */
+-#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */
+-
+-/*
+- * Papouch products (http://www.papouch.com/)
+- * Submitted by Folkert van Heusden
+- */
+-
+-#define PAPOUCH_VID 0x5050 /* Vendor ID */
+-#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */
+-#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */
+-
+-/*
+- * ACG Identification Technologies GmbH products (http://www.acg.de/).
+- * Submitted by anton -at- goto10 -dot- org.
+- */
+-#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */
+-
+-/*
+- * Yost Engineering, Inc. products (www.yostengineering.com).
+- * PID 0xE050 submitted by Aaron Prose.
+- */
+-#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */
+-
+-/*
+- * ThorLabs USB motor drivers
+- */
+-#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */
+-
+-/*
+- * Testo products (http://www.testo.com/)
+- * Submitted by Colin Leroy
+- */
+-#define TESTO_VID 0x128D
+-#define TESTO_USB_INTERFACE_PID 0x0001
+-
+-/*
+- * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com.
+- */
+-#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */
+-
+-/*
+- * Tactrix OpenPort (ECU) devices.
+- * OpenPort 1.3M submitted by Donour Sizemore.
+- * OpenPort 1.3S and 1.3U submitted by Ian Abbott.
+- */
+-#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */
+-#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */
+-#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */
+-
+-/*
+- * Telldus Technologies
+ */
+-#define TELLDUS_VID 0x1781 /* Vendor ID */
+-#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
+-
+-/*
+- * IBS elektronik product ids
+- * Submitted by Thomas Schleusener
+- */
+-#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */
+-#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */
+-#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */
+-#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */
+-#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */
+-#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */
+-#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */
+-#define FTDI_IBS_PROD_PID 0xff3f /* future device */
+-
+-/*
+- * MaxStream devices www.maxstream.net
+- */
+-#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */
+-
+-/* Olimex */
+-#define OLIMEX_VID 0x15BA
+-#define OLIMEX_ARM_USB_OCD_PID 0x0003
+-
+-/* Luminary Micro Stellaris Boards, VID = FTDI_VID */
+-/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */
+-#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8
+-#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9
+-
+-/* www.elsterelectricity.com Elster Unicom III Optical Probe */
+-#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */
+-
+-/*
+- * The Mobility Lab (TML)
+- * Submitted by Pierre Castella
+- */
+-#define TML_VID 0x1B91 /* Vendor ID */
+-#define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */
+-
+-/* Propox devices */
+-#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738
+-
+-/* Rig Expert Ukraine devices */
+-#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */
+-
+-/* Domintell products http://www.domintell.com */
+-#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */
+-#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */
+-
+-/* Alti-2 products http://www.alti-2.com */
+-#define ALTI2_VID 0x1BC9
+-#define ALTI2_N3_PID 0x6001 /* Neptune 3 */
+
+ /* Commands */
+ #define FTDI_SIO_RESET 0 /* Reset the port */
+@@ -910,86 +40,6 @@
+ #define INTERFACE_C 3
+ #define INTERFACE_D 4
+
+-/*
+- * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3
+- * Submitted by Harald Welte <laforge@openmoko.org>
+- */
+-#define FIC_VID 0x1457
+-#define FIC_NEO1973_DEBUG_PID 0x5118
+-
+-/*
+- * RATOC REX-USB60F
+- */
+-#define RATOC_VENDOR_ID 0x0584
+-#define RATOC_PRODUCT_ID_USB60F 0xb020
+-
+-/*
+- * DIEBOLD BCS SE923
+- */
+-#define DIEBOLD_BCS_SE923_PID 0xfb99
+-
+-/*
+- * Atmel STK541
+- */
+-#define ATMEL_VID 0x03eb /* Vendor ID */
+-#define STK541_PID 0x2109 /* Zigbee Controller */
+-
+-/*
+- * Dresden Elektronic Sensor Terminal Board
+- */
+-#define DE_VID 0x1cf1 /* Vendor ID */
+-#define STB_PID 0x0001 /* Sensor Terminal Board */
+-#define WHT_PID 0x0004 /* Wireless Handheld Terminal */
+-
+-/*
+- * Blackfin gnICE JTAG
+- * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
+- */
+-#define ADI_VID 0x0456
+-#define ADI_GNICE_PID 0xF000
+-#define ADI_GNICEPLUS_PID 0xF001
+-
+-/*
+- * JETI SPECTROMETER SPECBOS 1201
+- * http://www.jeti.com/products/sys/scb/scb1201.php
+- */
+-#define JETI_VID 0x0c6c
+-#define JETI_SPC1201_PID 0x04b2
+-
+-/*
+- * Marvell SheevaPlug
+- */
+-#define MARVELL_VID 0x9e88
+-#define MARVELL_SHEEVAPLUG_PID 0x9e8f
+-
+-#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */
+-
+-/*
+- * GN Otometrics (http://www.otometrics.com)
+- * Submitted by Ville Sundberg.
+- */
+-#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */
+-#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */
+-
+-/*
+- * Bayer Ascensia Contour blood glucose meter USB-converter cable.
+- * http://winglucofacts.com/cables/
+- */
+-#define BAYER_VID 0x1A79
+-#define BAYER_CONTOUR_CABLE_PID 0x6001
+-
+-/*
+- * Marvell OpenRD Base, Client
+- * http://www.open-rd.org
+- * OpenRD Base, Client use VID 0x0403
+- */
+-#define MARVELL_OPENRD_PID 0x9e90
+-
+-/*
+- * Hameg HO820 and HO870 interface (using VID 0x0403)
+- */
+-#define HAMEG_HO820_PID 0xed74
+-#define HAMEG_HO870_PID 0xed71
+
+ /*
+ * BmRequestType: 1100 0000b
+@@ -1504,4 +554,3 @@ typedef enum {
+ * B2..7 Length of message - (not including Byte 0)
+ *
+ */
+-
+--- /dev/null
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -0,0 +1,959 @@
++/*
++ * vendor/product IDs (VID/PID) of devices using FTDI USB serial converters.
++ *
++ * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais
++ * from Rudolf Gugler
++ *
++ */
++
++#define FTDI_VID 0x0403 /* Vendor Id */
++#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
++#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
++#define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
++#define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
++#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */
++#define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */
++#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */
++#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */
++#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
++#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 */
++
++/* Larsen and Brusgaard AltiTrack/USBtrack */
++#define LARSENBRUSGAARD_VID 0x0FD8
++#define LB_ALTITRACK_PID 0x0001
++
++/* www.canusb.com Lawicel CANUSB device */
++#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */
++
++/* AlphaMicro Components AMC-232USB01 device */
++#define FTDI_AMC232_PID 0xFF00 /* Product Id */
++
++/* www.candapter.com Ewert Energy Systems CANdapter device */
++#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
++
++/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
++/* the VID is the standard ftdi vid (FTDI_VID) */
++#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
++#define FTDI_SCS_DEVICE_1_PID 0xD011 /* SCS Tracker / DSP TNC */
++#define FTDI_SCS_DEVICE_2_PID 0xD012
++#define FTDI_SCS_DEVICE_3_PID 0xD013
++#define FTDI_SCS_DEVICE_4_PID 0xD014
++#define FTDI_SCS_DEVICE_5_PID 0xD015
++#define FTDI_SCS_DEVICE_6_PID 0xD016
++#define FTDI_SCS_DEVICE_7_PID 0xD017
++
++/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */
++#define FTDI_ACTZWAVE_PID 0xF2D0
++
++
++/* www.starting-point-systems.com µChameleon device */
++#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */
++
++/* www.irtrans.de device */
++#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */
++
++
++/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */
++#define FTDI_TTUSB_PID 0xFF20 /* Product Id */
++
++/* iPlus device */
++#define FTDI_IPLUS_PID 0xD070 /* Product Id */
++#define FTDI_IPLUS2_PID 0xD071 /* Product Id */
++
++/* DMX4ALL DMX Interfaces */
++#define FTDI_DMX4ALL 0xC850
++
++/* OpenDCC (www.opendcc.de) product id */
++#define FTDI_OPENDCC_PID 0xBFD8
++#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9
++#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
++#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
++
++/* Sprog II (Andrew Crosland's SprogII DCC interface) */
++#define FTDI_SPROG_II 0xF0C8
++
++/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
++/* they use the ftdi chipset for the USB interface and the vendor id is the same */
++#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
++#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */
++#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */
++#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */
++#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */
++#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */
++#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */
++#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */
++
++/* Video Networks Limited / Homechoice in the UK use an ftdi-based device for their 1Mb */
++/* broadband internet service. The following PID is exhibited by the usb device supplied */
++/* (the VID is the standard ftdi vid (FTDI_VID) */
++#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */
++
++/*
++ * PCDJ use ftdi based dj-controllers. The following PID is for their DAC-2 device
++ * http://www.pcdjhardware.com/DAC2.asp (PID sent by Wouter Paesen)
++ * (the VID is the standard ftdi vid (FTDI_VID) */
++#define FTDI_PCDJ_DAC2_PID 0xFA88
++
++/*
++ * The following are the values for the Matrix Orbital LCD displays,
++ * which are the FT232BM ( similar to the 8U232AM )
++ */
++#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */
++
++/* OOCDlink by Joern Kaipf <joernk@web.de>
++ * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
++#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
++
++/*
++ * The following are the values for the Matrix Orbital FTDI Range
++ * Anything in this range will use an FT232RL.
++ */
++#define MTXORB_VID 0x1B3D
++#define MTXORB_FTDI_RANGE_0100_PID 0x0100
++#define MTXORB_FTDI_RANGE_0101_PID 0x0101
++#define MTXORB_FTDI_RANGE_0102_PID 0x0102
++#define MTXORB_FTDI_RANGE_0103_PID 0x0103
++#define MTXORB_FTDI_RANGE_0104_PID 0x0104
++#define MTXORB_FTDI_RANGE_0105_PID 0x0105
++#define MTXORB_FTDI_RANGE_0106_PID 0x0106
++#define MTXORB_FTDI_RANGE_0107_PID 0x0107
++#define MTXORB_FTDI_RANGE_0108_PID 0x0108
++#define MTXORB_FTDI_RANGE_0109_PID 0x0109
++#define MTXORB_FTDI_RANGE_010A_PID 0x010A
++#define MTXORB_FTDI_RANGE_010B_PID 0x010B
++#define MTXORB_FTDI_RANGE_010C_PID 0x010C
++#define MTXORB_FTDI_RANGE_010D_PID 0x010D
++#define MTXORB_FTDI_RANGE_010E_PID 0x010E
++#define MTXORB_FTDI_RANGE_010F_PID 0x010F
++#define MTXORB_FTDI_RANGE_0110_PID 0x0110
++#define MTXORB_FTDI_RANGE_0111_PID 0x0111
++#define MTXORB_FTDI_RANGE_0112_PID 0x0112
++#define MTXORB_FTDI_RANGE_0113_PID 0x0113
++#define MTXORB_FTDI_RANGE_0114_PID 0x0114
++#define MTXORB_FTDI_RANGE_0115_PID 0x0115
++#define MTXORB_FTDI_RANGE_0116_PID 0x0116
++#define MTXORB_FTDI_RANGE_0117_PID 0x0117
++#define MTXORB_FTDI_RANGE_0118_PID 0x0118
++#define MTXORB_FTDI_RANGE_0119_PID 0x0119
++#define MTXORB_FTDI_RANGE_011A_PID 0x011A
++#define MTXORB_FTDI_RANGE_011B_PID 0x011B
++#define MTXORB_FTDI_RANGE_011C_PID 0x011C
++#define MTXORB_FTDI_RANGE_011D_PID 0x011D
++#define MTXORB_FTDI_RANGE_011E_PID 0x011E
++#define MTXORB_FTDI_RANGE_011F_PID 0x011F
++#define MTXORB_FTDI_RANGE_0120_PID 0x0120
++#define MTXORB_FTDI_RANGE_0121_PID 0x0121
++#define MTXORB_FTDI_RANGE_0122_PID 0x0122
++#define MTXORB_FTDI_RANGE_0123_PID 0x0123
++#define MTXORB_FTDI_RANGE_0124_PID 0x0124
++#define MTXORB_FTDI_RANGE_0125_PID 0x0125
++#define MTXORB_FTDI_RANGE_0126_PID 0x0126
++#define MTXORB_FTDI_RANGE_0127_PID 0x0127
++#define MTXORB_FTDI_RANGE_0128_PID 0x0128
++#define MTXORB_FTDI_RANGE_0129_PID 0x0129
++#define MTXORB_FTDI_RANGE_012A_PID 0x012A
++#define MTXORB_FTDI_RANGE_012B_PID 0x012B
++#define MTXORB_FTDI_RANGE_012C_PID 0x012C
++#define MTXORB_FTDI_RANGE_012D_PID 0x012D
++#define MTXORB_FTDI_RANGE_012E_PID 0x012E
++#define MTXORB_FTDI_RANGE_012F_PID 0x012F
++#define MTXORB_FTDI_RANGE_0130_PID 0x0130
++#define MTXORB_FTDI_RANGE_0131_PID 0x0131
++#define MTXORB_FTDI_RANGE_0132_PID 0x0132
++#define MTXORB_FTDI_RANGE_0133_PID 0x0133
++#define MTXORB_FTDI_RANGE_0134_PID 0x0134
++#define MTXORB_FTDI_RANGE_0135_PID 0x0135
++#define MTXORB_FTDI_RANGE_0136_PID 0x0136
++#define MTXORB_FTDI_RANGE_0137_PID 0x0137
++#define MTXORB_FTDI_RANGE_0138_PID 0x0138
++#define MTXORB_FTDI_RANGE_0139_PID 0x0139
++#define MTXORB_FTDI_RANGE_013A_PID 0x013A
++#define MTXORB_FTDI_RANGE_013B_PID 0x013B
++#define MTXORB_FTDI_RANGE_013C_PID 0x013C
++#define MTXORB_FTDI_RANGE_013D_PID 0x013D
++#define MTXORB_FTDI_RANGE_013E_PID 0x013E
++#define MTXORB_FTDI_RANGE_013F_PID 0x013F
++#define MTXORB_FTDI_RANGE_0140_PID 0x0140
++#define MTXORB_FTDI_RANGE_0141_PID 0x0141
++#define MTXORB_FTDI_RANGE_0142_PID 0x0142
++#define MTXORB_FTDI_RANGE_0143_PID 0x0143
++#define MTXORB_FTDI_RANGE_0144_PID 0x0144
++#define MTXORB_FTDI_RANGE_0145_PID 0x0145
++#define MTXORB_FTDI_RANGE_0146_PID 0x0146
++#define MTXORB_FTDI_RANGE_0147_PID 0x0147
++#define MTXORB_FTDI_RANGE_0148_PID 0x0148
++#define MTXORB_FTDI_RANGE_0149_PID 0x0149
++#define MTXORB_FTDI_RANGE_014A_PID 0x014A
++#define MTXORB_FTDI_RANGE_014B_PID 0x014B
++#define MTXORB_FTDI_RANGE_014C_PID 0x014C
++#define MTXORB_FTDI_RANGE_014D_PID 0x014D
++#define MTXORB_FTDI_RANGE_014E_PID 0x014E
++#define MTXORB_FTDI_RANGE_014F_PID 0x014F
++#define MTXORB_FTDI_RANGE_0150_PID 0x0150
++#define MTXORB_FTDI_RANGE_0151_PID 0x0151
++#define MTXORB_FTDI_RANGE_0152_PID 0x0152
++#define MTXORB_FTDI_RANGE_0153_PID 0x0153
++#define MTXORB_FTDI_RANGE_0154_PID 0x0154
++#define MTXORB_FTDI_RANGE_0155_PID 0x0155
++#define MTXORB_FTDI_RANGE_0156_PID 0x0156
++#define MTXORB_FTDI_RANGE_0157_PID 0x0157
++#define MTXORB_FTDI_RANGE_0158_PID 0x0158
++#define MTXORB_FTDI_RANGE_0159_PID 0x0159
++#define MTXORB_FTDI_RANGE_015A_PID 0x015A
++#define MTXORB_FTDI_RANGE_015B_PID 0x015B
++#define MTXORB_FTDI_RANGE_015C_PID 0x015C
++#define MTXORB_FTDI_RANGE_015D_PID 0x015D
++#define MTXORB_FTDI_RANGE_015E_PID 0x015E
++#define MTXORB_FTDI_RANGE_015F_PID 0x015F
++#define MTXORB_FTDI_RANGE_0160_PID 0x0160
++#define MTXORB_FTDI_RANGE_0161_PID 0x0161
++#define MTXORB_FTDI_RANGE_0162_PID 0x0162
++#define MTXORB_FTDI_RANGE_0163_PID 0x0163
++#define MTXORB_FTDI_RANGE_0164_PID 0x0164
++#define MTXORB_FTDI_RANGE_0165_PID 0x0165
++#define MTXORB_FTDI_RANGE_0166_PID 0x0166
++#define MTXORB_FTDI_RANGE_0167_PID 0x0167
++#define MTXORB_FTDI_RANGE_0168_PID 0x0168
++#define MTXORB_FTDI_RANGE_0169_PID 0x0169
++#define MTXORB_FTDI_RANGE_016A_PID 0x016A
++#define MTXORB_FTDI_RANGE_016B_PID 0x016B
++#define MTXORB_FTDI_RANGE_016C_PID 0x016C
++#define MTXORB_FTDI_RANGE_016D_PID 0x016D
++#define MTXORB_FTDI_RANGE_016E_PID 0x016E
++#define MTXORB_FTDI_RANGE_016F_PID 0x016F
++#define MTXORB_FTDI_RANGE_0170_PID 0x0170
++#define MTXORB_FTDI_RANGE_0171_PID 0x0171
++#define MTXORB_FTDI_RANGE_0172_PID 0x0172
++#define MTXORB_FTDI_RANGE_0173_PID 0x0173
++#define MTXORB_FTDI_RANGE_0174_PID 0x0174
++#define MTXORB_FTDI_RANGE_0175_PID 0x0175
++#define MTXORB_FTDI_RANGE_0176_PID 0x0176
++#define MTXORB_FTDI_RANGE_0177_PID 0x0177
++#define MTXORB_FTDI_RANGE_0178_PID 0x0178
++#define MTXORB_FTDI_RANGE_0179_PID 0x0179
++#define MTXORB_FTDI_RANGE_017A_PID 0x017A
++#define MTXORB_FTDI_RANGE_017B_PID 0x017B
++#define MTXORB_FTDI_RANGE_017C_PID 0x017C
++#define MTXORB_FTDI_RANGE_017D_PID 0x017D
++#define MTXORB_FTDI_RANGE_017E_PID 0x017E
++#define MTXORB_FTDI_RANGE_017F_PID 0x017F
++#define MTXORB_FTDI_RANGE_0180_PID 0x0180
++#define MTXORB_FTDI_RANGE_0181_PID 0x0181
++#define MTXORB_FTDI_RANGE_0182_PID 0x0182
++#define MTXORB_FTDI_RANGE_0183_PID 0x0183
++#define MTXORB_FTDI_RANGE_0184_PID 0x0184
++#define MTXORB_FTDI_RANGE_0185_PID 0x0185
++#define MTXORB_FTDI_RANGE_0186_PID 0x0186
++#define MTXORB_FTDI_RANGE_0187_PID 0x0187
++#define MTXORB_FTDI_RANGE_0188_PID 0x0188
++#define MTXORB_FTDI_RANGE_0189_PID 0x0189
++#define MTXORB_FTDI_RANGE_018A_PID 0x018A
++#define MTXORB_FTDI_RANGE_018B_PID 0x018B
++#define MTXORB_FTDI_RANGE_018C_PID 0x018C
++#define MTXORB_FTDI_RANGE_018D_PID 0x018D
++#define MTXORB_FTDI_RANGE_018E_PID 0x018E
++#define MTXORB_FTDI_RANGE_018F_PID 0x018F
++#define MTXORB_FTDI_RANGE_0190_PID 0x0190
++#define MTXORB_FTDI_RANGE_0191_PID 0x0191
++#define MTXORB_FTDI_RANGE_0192_PID 0x0192
++#define MTXORB_FTDI_RANGE_0193_PID 0x0193
++#define MTXORB_FTDI_RANGE_0194_PID 0x0194
++#define MTXORB_FTDI_RANGE_0195_PID 0x0195
++#define MTXORB_FTDI_RANGE_0196_PID 0x0196
++#define MTXORB_FTDI_RANGE_0197_PID 0x0197
++#define MTXORB_FTDI_RANGE_0198_PID 0x0198
++#define MTXORB_FTDI_RANGE_0199_PID 0x0199
++#define MTXORB_FTDI_RANGE_019A_PID 0x019A
++#define MTXORB_FTDI_RANGE_019B_PID 0x019B
++#define MTXORB_FTDI_RANGE_019C_PID 0x019C
++#define MTXORB_FTDI_RANGE_019D_PID 0x019D
++#define MTXORB_FTDI_RANGE_019E_PID 0x019E
++#define MTXORB_FTDI_RANGE_019F_PID 0x019F
++#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0
++#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1
++#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2
++#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3
++#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4
++#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5
++#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6
++#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7
++#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8
++#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9
++#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA
++#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB
++#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC
++#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD
++#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE
++#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF
++#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0
++#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1
++#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2
++#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3
++#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4
++#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5
++#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6
++#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7
++#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8
++#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9
++#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA
++#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB
++#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC
++#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD
++#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE
++#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF
++#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0
++#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1
++#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2
++#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3
++#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4
++#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5
++#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6
++#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7
++#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8
++#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9
++#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA
++#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB
++#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC
++#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD
++#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE
++#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF
++#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0
++#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1
++#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2
++#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3
++#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4
++#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5
++#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6
++#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7
++#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8
++#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9
++#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA
++#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB
++#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC
++#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD
++#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE
++#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF
++#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0
++#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1
++#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2
++#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3
++#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4
++#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5
++#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6
++#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7
++#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8
++#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9
++#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA
++#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB
++#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC
++#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED
++#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE
++#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF
++#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0
++#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1
++#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2
++#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3
++#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4
++#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5
++#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6
++#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7
++#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8
++#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9
++#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA
++#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB
++#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC
++#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD
++#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE
++#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF
++
++
++
++/* Interbiometrics USB I/O Board */
++/* Developed for Interbiometrics by Rudolf Gugler */
++#define INTERBIOMETRICS_VID 0x1209
++#define INTERBIOMETRICS_IOBOARD_PID 0x1002
++#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006
++
++/*
++ * The following are the values for the Perle Systems
++ * UltraPort USB serial converters
++ */
++#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */
++
++/*
++ * The following are the values for the Sealevel SeaLINK+ adapters.
++ * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and
++ * removed some PIDs that don't seem to match any existing products.)
++ */
++#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */
++#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */
++#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */
++#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */
++#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */
++#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */
++#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */
++#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */
++#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */
++#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */
++#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */
++#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */
++#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */
++#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */
++#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */
++#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */
++#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */
++#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */
++#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */
++#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */
++#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */
++#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */
++#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */
++#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */
++#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */
++#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */
++#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */
++#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */
++#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */
++#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */
++#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */
++#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */
++#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */
++#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */
++#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */
++#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */
++#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */
++#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */
++#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */
++#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */
++#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */
++#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */
++#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */
++#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */
++#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */
++#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */
++#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */
++#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */
++
++/*
++ * The following are the values for two KOBIL chipcard terminals.
++ */
++#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */
++#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */
++#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */
++
++/*
++ * Icom ID-1 digital transceiver
++ */
++
++#define ICOM_ID1_VID 0x0C26
++#define ICOM_ID1_PID 0x0004
++
++/*
++ * ASK.fr devices
++ */
++#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */
++
++/*
++ * FTDI USB UART chips used in construction projects from the
++ * Elektor Electronics magazine (http://elektor-electronics.co.uk)
++ */
++#define ELEKTOR_VID 0x0C7D
++#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */
++
++/*
++ * DSS-20 Sync Station for Sony Ericsson P800
++ */
++#define FTDI_DSS20_PID 0xFC82
++
++/*
++ * Home Electronics (www.home-electro.com) USB gadgets
++ */
++#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */
++
++/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
++/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
++#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */
++
++/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */
++
++#define FTDI_TNC_X_PID 0xEBE0
++
++/*
++ * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).
++ * All of these devices use FTDI's vendor ID (0x0403).
++ *
++ * The previously included PID for the UO 100 module was incorrect.
++ * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58).
++ *
++ * Armin Laeuger originally sent the PID for the UM 100 module.
++ */
++#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG */
++#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */
++#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */
++#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */
++#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */
++/* Additional ELV PIDs that default to using the FTDI D2XX drivers on
++ * MS Windows, rather than the FTDI Virtual Com Port drivers.
++ * Maybe these will be easier to use with the libftdi/libusb user-space
++ * drivers, or possibly the Comedi drivers in some cases. */
++#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */
++#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */
++#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */
++#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */
++#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */
++#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */
++#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */
++#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */
++#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */
++#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */
++#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */
++#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */
++#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */
++#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */
++#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */
++#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */
++#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */
++#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */
++#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */
++#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
++#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */
++#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */
++#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */
++
++/*
++ * Definitions for ID TECH (www.idt-net.com) devices
++ */
++#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */
++#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */
++
++/*
++ * Definitions for Omnidirectional Control Technology, Inc. devices
++ */
++#define OCT_VID 0x0B39 /* OCT vendor ID */
++/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
++/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
++/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
++#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
++
++/* an infrared receiver for user access control with IR tags */
++#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */
++
++/*
++ * Definitions for Artemis astronomical USB based cameras
++ * Check it at http://www.artemisccd.co.uk/
++ */
++#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */
++
++/*
++ * Definitions for ATIK Instruments astronomical USB based cameras
++ * Check it at http://www.atik-instruments.com/
++ */
++#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */
++#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */
++#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */
++#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */
++#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */
++
++/*
++ * Protego product ids
++ */
++#define PROTEGO_SPECIAL_1 0xFC70 /* special/unknown device */
++#define PROTEGO_R2X0 0xFC71 /* R200-USB TRNG unit (R210, R220, and R230) */
++#define PROTEGO_SPECIAL_3 0xFC72 /* special/unknown device */
++#define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */
++
++/*
++ * Gude Analog- und Digitalsysteme GmbH
++ */
++#define FTDI_GUDEADS_E808_PID 0xE808
++#define FTDI_GUDEADS_E809_PID 0xE809
++#define FTDI_GUDEADS_E80A_PID 0xE80A
++#define FTDI_GUDEADS_E80B_PID 0xE80B
++#define FTDI_GUDEADS_E80C_PID 0xE80C
++#define FTDI_GUDEADS_E80D_PID 0xE80D
++#define FTDI_GUDEADS_E80E_PID 0xE80E
++#define FTDI_GUDEADS_E80F_PID 0xE80F
++#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */
++#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */
++#define FTDI_GUDEADS_E88A_PID 0xE88A
++#define FTDI_GUDEADS_E88B_PID 0xE88B
++#define FTDI_GUDEADS_E88C_PID 0xE88C
++#define FTDI_GUDEADS_E88D_PID 0xE88D
++#define FTDI_GUDEADS_E88E_PID 0xE88E
++#define FTDI_GUDEADS_E88F_PID 0xE88F
++
++/*
++ * Linx Technologies product ids
++ */
++#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */
++#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */
++#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */
++#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */
++#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */
++
++/* CCS Inc. ICDU/ICDU40 product ID - the FT232BM is used in an in-circuit-debugger */
++/* unit for PIC16's/PIC18's */
++#define FTDI_CCSICDU20_0_PID 0xF9D0
++#define FTDI_CCSICDU40_1_PID 0xF9D1
++#define FTDI_CCSMACHX_2_PID 0xF9D2
++#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3
++#define FTDI_CCSICDU64_4_PID 0xF9D4
++#define FTDI_CCSPRIME8_5_PID 0xF9D5
++
++/* Inside Accesso contactless reader (http://www.insidefr.com) */
++#define INSIDE_ACCESSO 0xFAD0
++
++/*
++ * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI
++ */
++#define INTREPID_VID 0x093C
++#define INTREPID_VALUECAN_PID 0x0601
++#define INTREPID_NEOVI_PID 0x0701
++
++/*
++ * Falcom Wireless Communications GmbH
++ */
++#define FALCOM_VID 0x0F94 /* Vendor Id */
++#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */
++#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */
++
++/*
++ * SUUNTO product ids
++ */
++#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */
++
++/*
++ * Oceanic product ids
++ */
++#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */
++
++/*
++ * TTi (Thurlby Thandar Instruments)
++ */
++#define TTI_VID 0x103E /* Vendor Id */
++#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */
++
++/*
++ * Definitions for B&B Electronics products.
++ */
++#define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */
++#define BANDB_USOTL4_PID 0xAC01 /* USOTL4 Isolated RS-485 Converter */
++#define BANDB_USTL4_PID 0xAC02 /* USTL4 RS-485 Converter */
++#define BANDB_USO9ML2_PID 0xAC03 /* USO9ML2 Isolated RS-232 Converter */
++#define BANDB_USOPTL4_PID 0xAC11
++#define BANDB_USPTL4_PID 0xAC12
++#define BANDB_USO9ML2DR_2_PID 0xAC16
++#define BANDB_USO9ML2DR_PID 0xAC17
++#define BANDB_USOPTL4DR2_PID 0xAC18 /* USOPTL4R-2 2-port Isolated RS-232 Converter */
++#define BANDB_USOPTL4DR_PID 0xAC19
++#define BANDB_485USB9F_2W_PID 0xAC25
++#define BANDB_485USB9F_4W_PID 0xAC26
++#define BANDB_232USB9M_PID 0xAC27
++#define BANDB_485USBTB_2W_PID 0xAC33
++#define BANDB_485USBTB_4W_PID 0xAC34
++#define BANDB_TTL5USB9M_PID 0xAC49
++#define BANDB_TTL3USB9M_PID 0xAC50
++#define BANDB_ZZ_PROG1_USB_PID 0xBA02
++
++/*
++ * RM Michaelides CANview USB (http://www.rmcan.com)
++ * CAN fieldbus interface adapter, added by port GmbH www.port.de)
++ * Ian Abbott changed the macro names for consistency.
++ */
++#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */
++
++/*
++ * EVER Eco Pro UPS (http://www.ever.com.pl/)
++ */
++
++#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */
++
++/*
++ * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
++ * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices
++ * and I'm not entirely sure which are used by which.
++ */
++#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0
++#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1
++
++/*
++ * Mobility Electronics products.
++ */
++#define MOBILITY_VID 0x1342
++#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */
++
++/*
++ * microHAM product IDs (http://www.microham.com).
++ * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>
++ * and Mike Studer (K6EEP) <k6eep@hamsoftware.org>.
++ * Ian Abbott <abbotti@mev.co.uk> added a few more from the driver INF file.
++ */
++#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */
++#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */
++#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */
++#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */
++#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */
++#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */
++#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */
++#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */
++
++/*
++ * Active Robots product ids.
++ */
++#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */
++
++/*
++ * Xsens Technologies BV products (http://www.xsens.com).
++ */
++#define XSENS_CONVERTER_0_PID 0xD388
++#define XSENS_CONVERTER_1_PID 0xD389
++#define XSENS_CONVERTER_2_PID 0xD38A
++#define XSENS_CONVERTER_3_PID 0xD38B
++#define XSENS_CONVERTER_4_PID 0xD38C
++#define XSENS_CONVERTER_5_PID 0xD38D
++#define XSENS_CONVERTER_6_PID 0xD38E
++#define XSENS_CONVERTER_7_PID 0xD38F
++
++/*
++ * Teratronik product ids.
++ * Submitted by O. Wölfelschneider.
++ */
++#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */
++#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */
++
++/*
++ * Evolution Robotics products (http://www.evolution.com/).
++ * Submitted by Shawn M. Lavelle.
++ */
++#define EVOLUTION_VID 0xDEEE /* Vendor ID */
++#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */
++#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/
++#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/
++#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */
++
++/* Pyramid Computer GmbH */
++#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */
++
++/*
++ * NDI (www.ndigital.com) product ids
++ */
++#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */
++#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */
++#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */
++#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */
++#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */
++
++/*
++ * Posiflex inc retail equipment (http://www.posiflex.com.tw)
++ */
++#define POSIFLEX_VID 0x0d3a /* Vendor ID */
++#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */
++
++/*
++ * Westrex International devices submitted by Cory Lee
++ */
++#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */
++#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */
++
++/*
++ * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com)
++ */
++#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */
++
++/*
++ * Eclo (http://www.eclo.pt/) product IDs.
++ * PID 0xEA90 submitted by Martin Grill.
++ */
++#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */
++
++/*
++ * Papouch products (http://www.papouch.com/)
++ * Submitted by Folkert van Heusden
++ */
++
++#define PAPOUCH_VID 0x5050 /* Vendor ID */
++#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */
++#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */
++
++/*
++ * ACG Identification Technologies GmbH products (http://www.acg.de/).
++ * Submitted by anton -at- goto10 -dot- org.
++ */
++#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */
++
++/*
++ * Yost Engineering, Inc. products (www.yostengineering.com).
++ * PID 0xE050 submitted by Aaron Prose.
++ */
++#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */
++
++/*
++ * ThorLabs USB motor drivers
++ */
++#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */
++
++/*
++ * Testo products (http://www.testo.com/)
++ * Submitted by Colin Leroy
++ */
++#define TESTO_VID 0x128D
++#define TESTO_USB_INTERFACE_PID 0x0001
++
++/*
++ * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com.
++ */
++#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */
++
++/*
++ * Tactrix OpenPort (ECU) devices.
++ * OpenPort 1.3M submitted by Donour Sizemore.
++ * OpenPort 1.3S and 1.3U submitted by Ian Abbott.
++ */
++#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */
++#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */
++#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */
++
++/*
++ * Telldus Technologies
++ */
++#define TELLDUS_VID 0x1781 /* Vendor ID */
++#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
++
++/*
++ * IBS elektronik product ids
++ * Submitted by Thomas Schleusener
++ */
++#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */
++#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */
++#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */
++#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */
++#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */
++#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */
++#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */
++#define FTDI_IBS_PROD_PID 0xff3f /* future device */
++
++/*
++ * MaxStream devices www.maxstream.net
++ */
++#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */
++
++/* Olimex */
++#define OLIMEX_VID 0x15BA
++#define OLIMEX_ARM_USB_OCD_PID 0x0003
++
++/* Luminary Micro Stellaris Boards, VID = FTDI_VID */
++/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */
++#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8
++#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9
++
++/* www.elsterelectricity.com Elster Unicom III Optical Probe */
++#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */
++
++/*
++ * The Mobility Lab (TML)
++ * Submitted by Pierre Castella
++ */
++#define TML_VID 0x1B91 /* Vendor ID */
++#define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */
++
++/* Propox devices */
++#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738
++
++/* Rig Expert Ukraine devices */
++#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */
++
++/* Domintell products http://www.domintell.com */
++#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */
++#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */
++
++/* Alti-2 products http://www.alti-2.com */
++#define ALTI2_VID 0x1BC9
++#define ALTI2_N3_PID 0x6001 /* Neptune 3 */
++
++/*
++ * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3
++ * Submitted by Harald Welte <laforge@openmoko.org>
++ */
++#define FIC_VID 0x1457
++#define FIC_NEO1973_DEBUG_PID 0x5118
++
++/*
++ * RATOC REX-USB60F
++ */
++#define RATOC_VENDOR_ID 0x0584
++#define RATOC_PRODUCT_ID_USB60F 0xb020
++
++/*
++ * DIEBOLD BCS SE923
++ */
++#define DIEBOLD_BCS_SE923_PID 0xfb99
++
++/*
++ * Atmel STK541
++ */
++#define ATMEL_VID 0x03eb /* Vendor ID */
++#define STK541_PID 0x2109 /* Zigbee Controller */
++
++/*
++ * Dresden Elektronic Sensor Terminal Board
++ */
++#define DE_VID 0x1cf1 /* Vendor ID */
++#define STB_PID 0x0001 /* Sensor Terminal Board */
++#define WHT_PID 0x0004 /* Wireless Handheld Terminal */
++
++/*
++ * Blackfin gnICE JTAG
++ * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
++ */
++#define ADI_VID 0x0456
++#define ADI_GNICE_PID 0xF000
++#define ADI_GNICEPLUS_PID 0xF001
++
++/*
++ * JETI SPECTROMETER SPECBOS 1201
++ * http://www.jeti.com/products/sys/scb/scb1201.php
++ */
++#define JETI_VID 0x0c6c
++#define JETI_SPC1201_PID 0x04b2
++
++/*
++ * Marvell SheevaPlug
++ */
++#define MARVELL_VID 0x9e88
++#define MARVELL_SHEEVAPLUG_PID 0x9e8f
++
++#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */
++
++/*
++ * GN Otometrics (http://www.otometrics.com)
++ * Submitted by Ville Sundberg.
++ */
++#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */
++#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */
++
++/*
++ * Bayer Ascensia Contour blood glucose meter USB-converter cable.
++ * http://winglucofacts.com/cables/
++ */
++#define BAYER_VID 0x1A79
++#define BAYER_CONTOUR_CABLE_PID 0x6001
++
++/*
++ * Marvell OpenRD Base, Client
++ * http://www.open-rd.org
++ * OpenRD Base, Client use VID 0x0403
++ */
++#define MARVELL_OPENRD_PID 0x9e90
++
++/*
++ * Hameg HO820 and HO870 interface (using VID 0x0403)
++ */
++#define HAMEG_HO820_PID 0xed74
++#define HAMEG_HO870_PID 0xed71
++
--- /dev/null
+From 4e092d110fe931db3878865db185be1c9df3e182 Mon Sep 17 00:00:00 2001
+From: Andreas Mohr <andi@lisas.de>
+Date: Thu, 17 Dec 2009 11:56:09 +0100
+Subject: USB: ftdi_sio: sort PID/VID entries in new ftdi_sio_ids.h header
+
+From: Andreas Mohr <andi@lisas.de>
+
+commit 4e092d110fe931db3878865db185be1c9df3e182 upstream.
+
+This is a (almost) sort-only patch to sort FTDI device
+product ID definitions in new ftdi_sio_ids.h header.
+
+Advantage is that new device ID submissions will now have a specific (sorted)
+position - less future merge conflicts.
+
+Compile-tested, based on _current_ mainline git.
+Minor checkpatch.pl warnings were eliminated whereever it made sense,
+very minor text changes.
+
+
+Signed-off-by: Andreas Mohr <andi@lisas.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio_ids.h | 1487 +++++++++++++++++++-------------------
+ 1 file changed, 757 insertions(+), 730 deletions(-)
+
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -1,36 +1,85 @@
+ /*
+ * vendor/product IDs (VID/PID) of devices using FTDI USB serial converters.
++ * Please keep numerically sorted within individual areas, thanks!
+ *
+ * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais
+ * from Rudolf Gugler
+ *
+ */
+
++
++/**********************************/
++/***** devices using FTDI VID *****/
++/**********************************/
++
++
+ #define FTDI_VID 0x0403 /* Vendor Id */
+-#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
++
++
++/*** "original" FTDI device PIDs ***/
++
+ #define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
+ #define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
+ #define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
+-#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */
+ #define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */
+-#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */
+-#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */
+-#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
+-#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 */
++#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
++#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */
+
+-/* Larsen and Brusgaard AltiTrack/USBtrack */
+-#define LARSENBRUSGAARD_VID 0x0FD8
+-#define LB_ALTITRACK_PID 0x0001
+
+-/* www.canusb.com Lawicel CANUSB device */
+-#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */
++/*** third-party PIDs (using FTDI_VID) ***/
+
+-/* AlphaMicro Components AMC-232USB01 device */
+-#define FTDI_AMC232_PID 0xFF00 /* Product Id */
++/*
++ * Marvell OpenRD Base, Client
++ * http://www.open-rd.org
++ * OpenRD Base, Client use VID 0x0403
++ */
++#define MARVELL_OPENRD_PID 0x9e90
+
+ /* www.candapter.com Ewert Energy Systems CANdapter device */
+ #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
+
++/* OOCDlink by Joern Kaipf <joernk@web.de>
++ * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
++#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
++
++/* Luminary Micro Stellaris Boards, VID = FTDI_VID */
++/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */
++#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8
++#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9
++
++#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */
++
++/* OpenDCC (www.opendcc.de) product id */
++#define FTDI_OPENDCC_PID 0xBFD8
++#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9
++#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
++#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
++
++/*
++ * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com)
++ */
++#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */
++
++/* DMX4ALL DMX Interfaces */
++#define FTDI_DMX4ALL 0xC850
++
++/*
++ * ASK.fr devices
++ */
++#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */
++
++/* www.starting-point-systems.com µChameleon device */
++#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */
++
++/*
++ * Tactrix OpenPort (ECU) devices.
++ * OpenPort 1.3M submitted by Donour Sizemore.
++ * OpenPort 1.3S and 1.3U submitted by Ian Abbott.
++ */
++#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */
++#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */
++#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */
++
+ /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
+ /* the VID is the standard ftdi vid (FTDI_VID) */
+ #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
+@@ -42,523 +91,280 @@
+ #define FTDI_SCS_DEVICE_6_PID 0xD016
+ #define FTDI_SCS_DEVICE_7_PID 0xD017
+
+-/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */
+-#define FTDI_ACTZWAVE_PID 0xF2D0
++/* iPlus device */
++#define FTDI_IPLUS_PID 0xD070 /* Product Id */
++#define FTDI_IPLUS2_PID 0xD071 /* Product Id */
+
++/*
++ * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com.
++ */
++#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */
+
+-/* www.starting-point-systems.com µChameleon device */
+-#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */
++/* Propox devices */
++#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738
+
+-/* www.irtrans.de device */
+-#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */
++/*
++ * Xsens Technologies BV products (http://www.xsens.com).
++ */
++#define XSENS_CONVERTER_0_PID 0xD388
++#define XSENS_CONVERTER_1_PID 0xD389
++#define XSENS_CONVERTER_2_PID 0xD38A
++#define XSENS_CONVERTER_3_PID 0xD38B
++#define XSENS_CONVERTER_4_PID 0xD38C
++#define XSENS_CONVERTER_5_PID 0xD38D
++#define XSENS_CONVERTER_6_PID 0xD38E
++#define XSENS_CONVERTER_7_PID 0xD38F
+
++/*
++ * NDI (www.ndigital.com) product ids
++ */
++#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */
++#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */
++#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */
++#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */
++#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */
+
+-/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */
+-#define FTDI_TTUSB_PID 0xFF20 /* Product Id */
++/*
++ * Westrex International devices submitted by Cory Lee
++ */
++#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */
++#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */
+
+-/* iPlus device */
+-#define FTDI_IPLUS_PID 0xD070 /* Product Id */
+-#define FTDI_IPLUS2_PID 0xD071 /* Product Id */
++/*
++ * ACG Identification Technologies GmbH products (http://www.acg.de/).
++ * Submitted by anton -at- goto10 -dot- org.
++ */
++#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */
+
+-/* DMX4ALL DMX Interfaces */
+-#define FTDI_DMX4ALL 0xC850
++/*
++ * Definitions for Artemis astronomical USB based cameras
++ * Check it at http://www.artemisccd.co.uk/
++ */
++#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */
+
+-/* OpenDCC (www.opendcc.de) product id */
+-#define FTDI_OPENDCC_PID 0xBFD8
+-#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9
+-#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
+-#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
++/*
++ * Definitions for ATIK Instruments astronomical USB based cameras
++ * Check it at http://www.atik-instruments.com/
++ */
++#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */
++#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */
++#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */
++#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */
++#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */
+
+-/* Sprog II (Andrew Crosland's SprogII DCC interface) */
+-#define FTDI_SPROG_II 0xF0C8
++/*
++ * Yost Engineering, Inc. products (www.yostengineering.com).
++ * PID 0xE050 submitted by Aaron Prose.
++ */
++#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */
+
+-/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
+-/* they use the ftdi chipset for the USB interface and the vendor id is the same */
+-#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
+-#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */
+-#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */
+-#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */
+-#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */
+-#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */
+-#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */
+-#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */
++/*
++ * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).
++ * All of these devices use FTDI's vendor ID (0x0403).
++ *
++ * The previously included PID for the UO 100 module was incorrect.
++ * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58).
++ *
++ * Armin Laeuger originally sent the PID for the UM 100 module.
++ */
++#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */
++#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
++#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */
++#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */
++#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */
++#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */
++#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */
++#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */
++#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */
++#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */
++#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */
++#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */
++#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */
++#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */
++#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */
++#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */
++#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */
++#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */
++#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */
++#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */
++#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */
++#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */
++/* Additional ELV PIDs that default to using the FTDI D2XX drivers on
++ * MS Windows, rather than the FTDI Virtual Com Port drivers.
++ * Maybe these will be easier to use with the libftdi/libusb user-space
++ * drivers, or possibly the Comedi drivers in some cases. */
++#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */
++#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */
++#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */
++#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */
++#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */
+
+-/* Video Networks Limited / Homechoice in the UK use an ftdi-based device for their 1Mb */
+-/* broadband internet service. The following PID is exhibited by the usb device supplied */
+-/* (the VID is the standard ftdi vid (FTDI_VID) */
+-#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */
++/*
++ * EVER Eco Pro UPS (http://www.ever.com.pl/)
++ */
++
++#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */
+
+ /*
+- * PCDJ use ftdi based dj-controllers. The following PID is for their DAC-2 device
+- * http://www.pcdjhardware.com/DAC2.asp (PID sent by Wouter Paesen)
+- * (the VID is the standard ftdi vid (FTDI_VID) */
+-#define FTDI_PCDJ_DAC2_PID 0xFA88
++ * Active Robots product ids.
++ */
++#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */
++
++/* Pyramid Computer GmbH */
++#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */
++
++/* www.elsterelectricity.com Elster Unicom III Optical Probe */
++#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */
+
+ /*
+- * The following are the values for the Matrix Orbital LCD displays,
+- * which are the FT232BM ( similar to the 8U232AM )
++ * Gude Analog- und Digitalsysteme GmbH
+ */
+-#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */
+-#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */
++#define FTDI_GUDEADS_E808_PID 0xE808
++#define FTDI_GUDEADS_E809_PID 0xE809
++#define FTDI_GUDEADS_E80A_PID 0xE80A
++#define FTDI_GUDEADS_E80B_PID 0xE80B
++#define FTDI_GUDEADS_E80C_PID 0xE80C
++#define FTDI_GUDEADS_E80D_PID 0xE80D
++#define FTDI_GUDEADS_E80E_PID 0xE80E
++#define FTDI_GUDEADS_E80F_PID 0xE80F
++#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */
++#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */
++#define FTDI_GUDEADS_E88A_PID 0xE88A
++#define FTDI_GUDEADS_E88B_PID 0xE88B
++#define FTDI_GUDEADS_E88C_PID 0xE88C
++#define FTDI_GUDEADS_E88D_PID 0xE88D
++#define FTDI_GUDEADS_E88E_PID 0xE88E
++#define FTDI_GUDEADS_E88F_PID 0xE88F
+
+-/* OOCDlink by Joern Kaipf <joernk@web.de>
+- * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
+-#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
++/*
++ * Eclo (http://www.eclo.pt/) product IDs.
++ * PID 0xEA90 submitted by Martin Grill.
++ */
++#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */
++
++/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */
++#define FTDI_TNC_X_PID 0xEBE0
+
+ /*
+- * The following are the values for the Matrix Orbital FTDI Range
+- * Anything in this range will use an FT232RL.
++ * Teratronik product ids.
++ * Submitted by O. Wölfelschneider.
+ */
+-#define MTXORB_VID 0x1B3D
+-#define MTXORB_FTDI_RANGE_0100_PID 0x0100
+-#define MTXORB_FTDI_RANGE_0101_PID 0x0101
+-#define MTXORB_FTDI_RANGE_0102_PID 0x0102
+-#define MTXORB_FTDI_RANGE_0103_PID 0x0103
+-#define MTXORB_FTDI_RANGE_0104_PID 0x0104
+-#define MTXORB_FTDI_RANGE_0105_PID 0x0105
+-#define MTXORB_FTDI_RANGE_0106_PID 0x0106
+-#define MTXORB_FTDI_RANGE_0107_PID 0x0107
+-#define MTXORB_FTDI_RANGE_0108_PID 0x0108
+-#define MTXORB_FTDI_RANGE_0109_PID 0x0109
+-#define MTXORB_FTDI_RANGE_010A_PID 0x010A
+-#define MTXORB_FTDI_RANGE_010B_PID 0x010B
+-#define MTXORB_FTDI_RANGE_010C_PID 0x010C
+-#define MTXORB_FTDI_RANGE_010D_PID 0x010D
+-#define MTXORB_FTDI_RANGE_010E_PID 0x010E
+-#define MTXORB_FTDI_RANGE_010F_PID 0x010F
+-#define MTXORB_FTDI_RANGE_0110_PID 0x0110
+-#define MTXORB_FTDI_RANGE_0111_PID 0x0111
+-#define MTXORB_FTDI_RANGE_0112_PID 0x0112
+-#define MTXORB_FTDI_RANGE_0113_PID 0x0113
+-#define MTXORB_FTDI_RANGE_0114_PID 0x0114
+-#define MTXORB_FTDI_RANGE_0115_PID 0x0115
+-#define MTXORB_FTDI_RANGE_0116_PID 0x0116
+-#define MTXORB_FTDI_RANGE_0117_PID 0x0117
+-#define MTXORB_FTDI_RANGE_0118_PID 0x0118
+-#define MTXORB_FTDI_RANGE_0119_PID 0x0119
+-#define MTXORB_FTDI_RANGE_011A_PID 0x011A
+-#define MTXORB_FTDI_RANGE_011B_PID 0x011B
+-#define MTXORB_FTDI_RANGE_011C_PID 0x011C
+-#define MTXORB_FTDI_RANGE_011D_PID 0x011D
+-#define MTXORB_FTDI_RANGE_011E_PID 0x011E
+-#define MTXORB_FTDI_RANGE_011F_PID 0x011F
+-#define MTXORB_FTDI_RANGE_0120_PID 0x0120
+-#define MTXORB_FTDI_RANGE_0121_PID 0x0121
+-#define MTXORB_FTDI_RANGE_0122_PID 0x0122
+-#define MTXORB_FTDI_RANGE_0123_PID 0x0123
+-#define MTXORB_FTDI_RANGE_0124_PID 0x0124
+-#define MTXORB_FTDI_RANGE_0125_PID 0x0125
+-#define MTXORB_FTDI_RANGE_0126_PID 0x0126
+-#define MTXORB_FTDI_RANGE_0127_PID 0x0127
+-#define MTXORB_FTDI_RANGE_0128_PID 0x0128
+-#define MTXORB_FTDI_RANGE_0129_PID 0x0129
+-#define MTXORB_FTDI_RANGE_012A_PID 0x012A
+-#define MTXORB_FTDI_RANGE_012B_PID 0x012B
+-#define MTXORB_FTDI_RANGE_012C_PID 0x012C
+-#define MTXORB_FTDI_RANGE_012D_PID 0x012D
+-#define MTXORB_FTDI_RANGE_012E_PID 0x012E
+-#define MTXORB_FTDI_RANGE_012F_PID 0x012F
+-#define MTXORB_FTDI_RANGE_0130_PID 0x0130
+-#define MTXORB_FTDI_RANGE_0131_PID 0x0131
+-#define MTXORB_FTDI_RANGE_0132_PID 0x0132
+-#define MTXORB_FTDI_RANGE_0133_PID 0x0133
+-#define MTXORB_FTDI_RANGE_0134_PID 0x0134
+-#define MTXORB_FTDI_RANGE_0135_PID 0x0135
+-#define MTXORB_FTDI_RANGE_0136_PID 0x0136
+-#define MTXORB_FTDI_RANGE_0137_PID 0x0137
+-#define MTXORB_FTDI_RANGE_0138_PID 0x0138
+-#define MTXORB_FTDI_RANGE_0139_PID 0x0139
+-#define MTXORB_FTDI_RANGE_013A_PID 0x013A
+-#define MTXORB_FTDI_RANGE_013B_PID 0x013B
+-#define MTXORB_FTDI_RANGE_013C_PID 0x013C
+-#define MTXORB_FTDI_RANGE_013D_PID 0x013D
+-#define MTXORB_FTDI_RANGE_013E_PID 0x013E
+-#define MTXORB_FTDI_RANGE_013F_PID 0x013F
+-#define MTXORB_FTDI_RANGE_0140_PID 0x0140
+-#define MTXORB_FTDI_RANGE_0141_PID 0x0141
+-#define MTXORB_FTDI_RANGE_0142_PID 0x0142
+-#define MTXORB_FTDI_RANGE_0143_PID 0x0143
+-#define MTXORB_FTDI_RANGE_0144_PID 0x0144
+-#define MTXORB_FTDI_RANGE_0145_PID 0x0145
+-#define MTXORB_FTDI_RANGE_0146_PID 0x0146
+-#define MTXORB_FTDI_RANGE_0147_PID 0x0147
+-#define MTXORB_FTDI_RANGE_0148_PID 0x0148
+-#define MTXORB_FTDI_RANGE_0149_PID 0x0149
+-#define MTXORB_FTDI_RANGE_014A_PID 0x014A
+-#define MTXORB_FTDI_RANGE_014B_PID 0x014B
+-#define MTXORB_FTDI_RANGE_014C_PID 0x014C
+-#define MTXORB_FTDI_RANGE_014D_PID 0x014D
+-#define MTXORB_FTDI_RANGE_014E_PID 0x014E
+-#define MTXORB_FTDI_RANGE_014F_PID 0x014F
+-#define MTXORB_FTDI_RANGE_0150_PID 0x0150
+-#define MTXORB_FTDI_RANGE_0151_PID 0x0151
+-#define MTXORB_FTDI_RANGE_0152_PID 0x0152
+-#define MTXORB_FTDI_RANGE_0153_PID 0x0153
+-#define MTXORB_FTDI_RANGE_0154_PID 0x0154
+-#define MTXORB_FTDI_RANGE_0155_PID 0x0155
+-#define MTXORB_FTDI_RANGE_0156_PID 0x0156
+-#define MTXORB_FTDI_RANGE_0157_PID 0x0157
+-#define MTXORB_FTDI_RANGE_0158_PID 0x0158
+-#define MTXORB_FTDI_RANGE_0159_PID 0x0159
+-#define MTXORB_FTDI_RANGE_015A_PID 0x015A
+-#define MTXORB_FTDI_RANGE_015B_PID 0x015B
+-#define MTXORB_FTDI_RANGE_015C_PID 0x015C
+-#define MTXORB_FTDI_RANGE_015D_PID 0x015D
+-#define MTXORB_FTDI_RANGE_015E_PID 0x015E
+-#define MTXORB_FTDI_RANGE_015F_PID 0x015F
+-#define MTXORB_FTDI_RANGE_0160_PID 0x0160
+-#define MTXORB_FTDI_RANGE_0161_PID 0x0161
+-#define MTXORB_FTDI_RANGE_0162_PID 0x0162
+-#define MTXORB_FTDI_RANGE_0163_PID 0x0163
+-#define MTXORB_FTDI_RANGE_0164_PID 0x0164
+-#define MTXORB_FTDI_RANGE_0165_PID 0x0165
+-#define MTXORB_FTDI_RANGE_0166_PID 0x0166
+-#define MTXORB_FTDI_RANGE_0167_PID 0x0167
+-#define MTXORB_FTDI_RANGE_0168_PID 0x0168
+-#define MTXORB_FTDI_RANGE_0169_PID 0x0169
+-#define MTXORB_FTDI_RANGE_016A_PID 0x016A
+-#define MTXORB_FTDI_RANGE_016B_PID 0x016B
+-#define MTXORB_FTDI_RANGE_016C_PID 0x016C
+-#define MTXORB_FTDI_RANGE_016D_PID 0x016D
+-#define MTXORB_FTDI_RANGE_016E_PID 0x016E
+-#define MTXORB_FTDI_RANGE_016F_PID 0x016F
+-#define MTXORB_FTDI_RANGE_0170_PID 0x0170
+-#define MTXORB_FTDI_RANGE_0171_PID 0x0171
+-#define MTXORB_FTDI_RANGE_0172_PID 0x0172
+-#define MTXORB_FTDI_RANGE_0173_PID 0x0173
+-#define MTXORB_FTDI_RANGE_0174_PID 0x0174
+-#define MTXORB_FTDI_RANGE_0175_PID 0x0175
+-#define MTXORB_FTDI_RANGE_0176_PID 0x0176
+-#define MTXORB_FTDI_RANGE_0177_PID 0x0177
+-#define MTXORB_FTDI_RANGE_0178_PID 0x0178
+-#define MTXORB_FTDI_RANGE_0179_PID 0x0179
+-#define MTXORB_FTDI_RANGE_017A_PID 0x017A
+-#define MTXORB_FTDI_RANGE_017B_PID 0x017B
+-#define MTXORB_FTDI_RANGE_017C_PID 0x017C
+-#define MTXORB_FTDI_RANGE_017D_PID 0x017D
+-#define MTXORB_FTDI_RANGE_017E_PID 0x017E
+-#define MTXORB_FTDI_RANGE_017F_PID 0x017F
+-#define MTXORB_FTDI_RANGE_0180_PID 0x0180
+-#define MTXORB_FTDI_RANGE_0181_PID 0x0181
+-#define MTXORB_FTDI_RANGE_0182_PID 0x0182
+-#define MTXORB_FTDI_RANGE_0183_PID 0x0183
+-#define MTXORB_FTDI_RANGE_0184_PID 0x0184
+-#define MTXORB_FTDI_RANGE_0185_PID 0x0185
+-#define MTXORB_FTDI_RANGE_0186_PID 0x0186
+-#define MTXORB_FTDI_RANGE_0187_PID 0x0187
+-#define MTXORB_FTDI_RANGE_0188_PID 0x0188
+-#define MTXORB_FTDI_RANGE_0189_PID 0x0189
+-#define MTXORB_FTDI_RANGE_018A_PID 0x018A
+-#define MTXORB_FTDI_RANGE_018B_PID 0x018B
+-#define MTXORB_FTDI_RANGE_018C_PID 0x018C
+-#define MTXORB_FTDI_RANGE_018D_PID 0x018D
+-#define MTXORB_FTDI_RANGE_018E_PID 0x018E
+-#define MTXORB_FTDI_RANGE_018F_PID 0x018F
+-#define MTXORB_FTDI_RANGE_0190_PID 0x0190
+-#define MTXORB_FTDI_RANGE_0191_PID 0x0191
+-#define MTXORB_FTDI_RANGE_0192_PID 0x0192
+-#define MTXORB_FTDI_RANGE_0193_PID 0x0193
+-#define MTXORB_FTDI_RANGE_0194_PID 0x0194
+-#define MTXORB_FTDI_RANGE_0195_PID 0x0195
+-#define MTXORB_FTDI_RANGE_0196_PID 0x0196
+-#define MTXORB_FTDI_RANGE_0197_PID 0x0197
+-#define MTXORB_FTDI_RANGE_0198_PID 0x0198
+-#define MTXORB_FTDI_RANGE_0199_PID 0x0199
+-#define MTXORB_FTDI_RANGE_019A_PID 0x019A
+-#define MTXORB_FTDI_RANGE_019B_PID 0x019B
+-#define MTXORB_FTDI_RANGE_019C_PID 0x019C
+-#define MTXORB_FTDI_RANGE_019D_PID 0x019D
+-#define MTXORB_FTDI_RANGE_019E_PID 0x019E
+-#define MTXORB_FTDI_RANGE_019F_PID 0x019F
+-#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0
+-#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1
+-#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2
+-#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3
+-#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4
+-#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5
+-#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6
+-#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7
+-#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8
+-#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9
+-#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA
+-#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB
+-#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC
+-#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD
+-#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE
+-#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF
+-#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0
+-#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1
+-#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2
+-#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3
+-#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4
+-#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5
+-#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6
+-#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7
+-#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8
+-#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9
+-#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA
+-#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB
+-#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC
+-#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD
+-#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE
+-#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF
+-#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0
+-#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1
+-#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2
+-#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3
+-#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4
+-#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5
+-#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6
+-#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7
+-#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8
+-#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9
+-#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA
+-#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB
+-#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC
+-#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD
+-#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE
+-#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF
+-#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0
+-#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1
+-#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2
+-#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3
+-#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4
+-#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5
+-#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6
+-#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7
+-#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8
+-#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9
+-#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA
+-#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB
+-#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC
+-#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD
+-#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE
+-#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF
+-#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0
+-#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1
+-#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2
+-#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3
+-#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4
+-#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5
+-#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6
+-#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7
+-#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8
+-#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9
+-#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA
+-#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB
+-#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC
+-#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED
+-#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE
+-#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF
+-#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0
+-#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1
+-#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2
+-#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3
+-#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4
+-#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5
+-#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6
+-#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7
+-#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8
+-#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9
+-#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA
+-#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB
+-#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC
+-#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD
+-#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE
+-#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF
+-
+-
+-
+-/* Interbiometrics USB I/O Board */
+-/* Developed for Interbiometrics by Rudolf Gugler */
+-#define INTERBIOMETRICS_VID 0x1209
+-#define INTERBIOMETRICS_IOBOARD_PID 0x1002
+-#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006
+-
+-/*
+- * The following are the values for the Perle Systems
+- * UltraPort USB serial converters
+- */
+-#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */
+-
+-/*
+- * The following are the values for the Sealevel SeaLINK+ adapters.
+- * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and
+- * removed some PIDs that don't seem to match any existing products.)
+- */
+-#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */
+-#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */
+-#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */
+-#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */
+-#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */
+-#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */
+-#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */
+-#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */
+-#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */
+-#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */
+-#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */
+-#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */
+-#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */
+-#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */
+-#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */
+-#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */
+-#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */
+-#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */
+-#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */
+-#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */
+-#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */
+-#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */
+-#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */
+-#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */
+-#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */
+-#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */
+-#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */
+-#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */
+-#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */
+-#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */
+-#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */
+-#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */
+-#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */
+-#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */
+-#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */
+-#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */
+-#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */
+-#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */
+-#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */
+-#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */
+-#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */
+-#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */
+-#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */
+-#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */
+-#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */
+-#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */
+-#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */
+-#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */
++#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */
++#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */
+
+-/*
+- * The following are the values for two KOBIL chipcard terminals.
+- */
+-#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */
+-#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */
+-#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */
++/* Rig Expert Ukraine devices */
++#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */
+
+ /*
+- * Icom ID-1 digital transceiver
++ * Hameg HO820 and HO870 interface (using VID 0x0403)
+ */
+-
+-#define ICOM_ID1_VID 0x0C26
+-#define ICOM_ID1_PID 0x0004
++#define HAMEG_HO820_PID 0xed74
++#define HAMEG_HO870_PID 0xed71
+
+ /*
+- * ASK.fr devices
++ * MaxStream devices www.maxstream.net
+ */
+-#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */
++#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */
+
+ /*
+- * FTDI USB UART chips used in construction projects from the
+- * Elektor Electronics magazine (http://elektor-electronics.co.uk)
++ * microHAM product IDs (http://www.microham.com).
++ * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>
++ * and Mike Studer (K6EEP) <k6eep@hamsoftware.org>.
++ * Ian Abbott <abbotti@mev.co.uk> added a few more from the driver INF file.
+ */
+-#define ELEKTOR_VID 0x0C7D
+-#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */
++#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */
++#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */
++#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */
++#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */
++#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */
++#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */
++#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */
++#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */
+
+-/*
+- * DSS-20 Sync Station for Sony Ericsson P800
+- */
+-#define FTDI_DSS20_PID 0xFC82
++/* Domintell products http://www.domintell.com */
++#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */
++#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */
+
+ /*
+- * Home Electronics (www.home-electro.com) USB gadgets
++ * The following are the values for the Perle Systems
++ * UltraPort USB serial converters
+ */
+-#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */
++#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */
+
+-/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
+-/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
+-#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */
++/* Sprog II (Andrew Crosland's SprogII DCC interface) */
++#define FTDI_SPROG_II 0xF0C8
+
+-/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */
++/* an infrared receiver for user access control with IR tags */
++#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */
+
+-#define FTDI_TNC_X_PID 0xEBE0
++/* ACT Solutions HomePro ZWave interface
++ (http://www.act-solutions.com/HomePro.htm) */
++#define FTDI_ACTZWAVE_PID 0xF2D0
+
+-/*
+- * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).
+- * All of these devices use FTDI's vendor ID (0x0403).
+- *
+- * The previously included PID for the UO 100 module was incorrect.
+- * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58).
+- *
+- * Armin Laeuger originally sent the PID for the UM 100 module.
+- */
+-#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG */
+-#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */
+-#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */
+-#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */
+-#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */
+-/* Additional ELV PIDs that default to using the FTDI D2XX drivers on
+- * MS Windows, rather than the FTDI Virtual Com Port drivers.
+- * Maybe these will be easier to use with the libftdi/libusb user-space
+- * drivers, or possibly the Comedi drivers in some cases. */
+-#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */
+-#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */
+-#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */
+-#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */
+-#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */
+-#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */
+-#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */
+-#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */
+-#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */
+-#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */
+-#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */
+-#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */
+-#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */
+-#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */
+-#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */
+-#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */
+-#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */
+-#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */
+-#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */
+-#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
+-#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */
+-#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */
+-#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */
++/*
++ * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
++ * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices
++ * and I'm not entirely sure which are used by which.
++ */
++#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0
++#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1
+
+ /*
+- * Definitions for ID TECH (www.idt-net.com) devices
++ * Linx Technologies product ids
+ */
+-#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */
+-#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */
++#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */
++#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */
++#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */
++#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */
++#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */
+
+ /*
+- * Definitions for Omnidirectional Control Technology, Inc. devices
++ * Oceanic product ids
+ */
+-#define OCT_VID 0x0B39 /* OCT vendor ID */
+-/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
+-/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
+-/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
+-#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
++#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */
+
+-/* an infrared receiver for user access control with IR tags */
+-#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */
++/*
++ * SUUNTO product ids
++ */
++#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */
++
++/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
++/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
++#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */
++
++/* CCS Inc. ICDU/ICDU40 product ID -
++ * the FT232BM is used in an in-circuit-debugger unit for PIC16's/PIC18's */
++#define FTDI_CCSICDU20_0_PID 0xF9D0
++#define FTDI_CCSICDU40_1_PID 0xF9D1
++#define FTDI_CCSMACHX_2_PID 0xF9D2
++#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3
++#define FTDI_CCSICDU64_4_PID 0xF9D4
++#define FTDI_CCSPRIME8_5_PID 0xF9D5
+
+ /*
+- * Definitions for Artemis astronomical USB based cameras
+- * Check it at http://www.artemisccd.co.uk/
++ * The following are the values for the Matrix Orbital LCD displays,
++ * which are the FT232BM ( similar to the 8U232AM )
+ */
+-#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */
++#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */
++#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */
+
+ /*
+- * Definitions for ATIK Instruments astronomical USB based cameras
+- * Check it at http://www.atik-instruments.com/
++ * Home Electronics (www.home-electro.com) USB gadgets
+ */
+-#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */
+-#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */
+-#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */
+-#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */
+-#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */
++#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */
++
++/* Inside Accesso contactless reader (http://www.insidefr.com) */
++#define INSIDE_ACCESSO 0xFAD0
++
++/*
++ * ThorLabs USB motor drivers
++ */
++#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */
+
+ /*
+ * Protego product ids
+@@ -569,75 +375,106 @@
+ #define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */
+
+ /*
+- * Gude Analog- und Digitalsysteme GmbH
++ * DSS-20 Sync Station for Sony Ericsson P800
+ */
+-#define FTDI_GUDEADS_E808_PID 0xE808
+-#define FTDI_GUDEADS_E809_PID 0xE809
+-#define FTDI_GUDEADS_E80A_PID 0xE80A
+-#define FTDI_GUDEADS_E80B_PID 0xE80B
+-#define FTDI_GUDEADS_E80C_PID 0xE80C
+-#define FTDI_GUDEADS_E80D_PID 0xE80D
+-#define FTDI_GUDEADS_E80E_PID 0xE80E
+-#define FTDI_GUDEADS_E80F_PID 0xE80F
+-#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */
+-#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */
+-#define FTDI_GUDEADS_E88A_PID 0xE88A
+-#define FTDI_GUDEADS_E88B_PID 0xE88B
+-#define FTDI_GUDEADS_E88C_PID 0xE88C
+-#define FTDI_GUDEADS_E88D_PID 0xE88D
+-#define FTDI_GUDEADS_E88E_PID 0xE88E
+-#define FTDI_GUDEADS_E88F_PID 0xE88F
++#define FTDI_DSS20_PID 0xFC82
++
++/* www.irtrans.de device */
++#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */
+
+ /*
+- * Linx Technologies product ids
++ * RM Michaelides CANview USB (http://www.rmcan.com) (FTDI_VID)
++ * CAN fieldbus interface adapter, added by port GmbH www.port.de)
++ * Ian Abbott changed the macro names for consistency.
+ */
+-#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */
+-#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */
+-#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */
+-#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */
+-#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */
++#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */
++/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */
++#define FTDI_TTUSB_PID 0xFF20 /* Product Id */
+
+-/* CCS Inc. ICDU/ICDU40 product ID - the FT232BM is used in an in-circuit-debugger */
+-/* unit for PIC16's/PIC18's */
+-#define FTDI_CCSICDU20_0_PID 0xF9D0
+-#define FTDI_CCSICDU40_1_PID 0xF9D1
+-#define FTDI_CCSMACHX_2_PID 0xF9D2
+-#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3
+-#define FTDI_CCSICDU64_4_PID 0xF9D4
+-#define FTDI_CCSPRIME8_5_PID 0xF9D5
++#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 (FTDI_VID) */
+
+-/* Inside Accesso contactless reader (http://www.insidefr.com) */
+-#define INSIDE_ACCESSO 0xFAD0
++#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */
+
+ /*
+- * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI
++ * PCDJ use ftdi based dj-controllers. The following PID is
++ * for their DAC-2 device http://www.pcdjhardware.com/DAC2.asp
++ * (the VID is the standard ftdi vid (FTDI_VID), PID sent by Wouter Paesen)
+ */
+-#define INTREPID_VID 0x093C
+-#define INTREPID_VALUECAN_PID 0x0601
+-#define INTREPID_NEOVI_PID 0x0701
++#define FTDI_PCDJ_DAC2_PID 0xFA88
++
++#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG (FTDI_VID) */
+
+ /*
+- * Falcom Wireless Communications GmbH
++ * DIEBOLD BCS SE923 (FTDI_VID)
+ */
+-#define FALCOM_VID 0x0F94 /* Vendor Id */
+-#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */
+-#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */
++#define DIEBOLD_BCS_SE923_PID 0xfb99
++
++/* www.crystalfontz.com devices
++ * - thanx for providing free devices for evaluation !
++ * they use the ftdi chipset for the USB interface
++ * and the vendor id is the same
++ */
++#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
++#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */
++#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */
++#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */
++#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */
++#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */
++#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */
++#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */
+
+ /*
+- * SUUNTO product ids
++ * Video Networks Limited / Homechoice in the UK use an ftdi-based device
++ * for their 1Mb broadband internet service. The following PID is exhibited
++ * by the usb device supplied (the VID is the standard ftdi vid (FTDI_VID)
+ */
+-#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */
++#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */
++
++/* AlphaMicro Components AMC-232USB01 device (FTDI_VID) */
++#define FTDI_AMC232_PID 0xFF00 /* Product Id */
+
+ /*
+- * Oceanic product ids
++ * IBS elektronik product ids (FTDI_VID)
++ * Submitted by Thomas Schleusener
+ */
+-#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */
++#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */
++#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */
++#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */
++#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */
++#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */
++#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */
++#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */
++#define FTDI_IBS_PROD_PID 0xff3f /* future device */
++/* www.canusb.com Lawicel CANUSB device (FTDI_VID) */
++#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */
++
++
++
++/********************************/
++/** third-party VID/PID combos **/
++/********************************/
++
++
+
+ /*
+- * TTi (Thurlby Thandar Instruments)
++ * Atmel STK541
+ */
+-#define TTI_VID 0x103E /* Vendor Id */
+-#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */
++#define ATMEL_VID 0x03eb /* Vendor ID */
++#define STK541_PID 0x2109 /* Zigbee Controller */
++
++/*
++ * Blackfin gnICE JTAG
++ * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
++ */
++#define ADI_VID 0x0456
++#define ADI_GNICE_PID 0xF000
++#define ADI_GNICEPLUS_PID 0xF001
++
++/*
++ * RATOC REX-USB60F
++ */
++#define RATOC_VENDOR_ID 0x0584
++#define RATOC_PRODUCT_ID_USB60F 0xb020
+
+ /*
+ * Definitions for B&B Electronics products.
+@@ -662,141 +499,147 @@
+ #define BANDB_ZZ_PROG1_USB_PID 0xBA02
+
+ /*
+- * RM Michaelides CANview USB (http://www.rmcan.com)
+- * CAN fieldbus interface adapter, added by port GmbH www.port.de)
+- * Ian Abbott changed the macro names for consistency.
+- */
+-#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */
+-
+-/*
+- * EVER Eco Pro UPS (http://www.ever.com.pl/)
+- */
+-
+-#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */
+-
+-/*
+- * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
+- * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices
+- * and I'm not entirely sure which are used by which.
+- */
+-#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0
+-#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1
+-
+-/*
+- * Mobility Electronics products.
+- */
+-#define MOBILITY_VID 0x1342
+-#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */
+-
+-/*
+- * microHAM product IDs (http://www.microham.com).
+- * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>
+- * and Mike Studer (K6EEP) <k6eep@hamsoftware.org>.
+- * Ian Abbott <abbotti@mev.co.uk> added a few more from the driver INF file.
+- */
+-#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */
+-#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */
+-#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */
+-#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */
+-#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */
+-#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */
+-#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */
+-#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */
+-
+-/*
+- * Active Robots product ids.
+- */
+-#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */
+-
+-/*
+- * Xsens Technologies BV products (http://www.xsens.com).
++ * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI
+ */
+-#define XSENS_CONVERTER_0_PID 0xD388
+-#define XSENS_CONVERTER_1_PID 0xD389
+-#define XSENS_CONVERTER_2_PID 0xD38A
+-#define XSENS_CONVERTER_3_PID 0xD38B
+-#define XSENS_CONVERTER_4_PID 0xD38C
+-#define XSENS_CONVERTER_5_PID 0xD38D
+-#define XSENS_CONVERTER_6_PID 0xD38E
+-#define XSENS_CONVERTER_7_PID 0xD38F
++#define INTREPID_VID 0x093C
++#define INTREPID_VALUECAN_PID 0x0601
++#define INTREPID_NEOVI_PID 0x0701
+
+ /*
+- * Teratronik product ids.
+- * Submitted by O. Wölfelschneider.
++ * Definitions for ID TECH (www.idt-net.com) devices
+ */
+-#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */
+-#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */
++#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */
++#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */
+
+ /*
+- * Evolution Robotics products (http://www.evolution.com/).
+- * Submitted by Shawn M. Lavelle.
++ * Definitions for Omnidirectional Control Technology, Inc. devices
+ */
+-#define EVOLUTION_VID 0xDEEE /* Vendor ID */
+-#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */
+-#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/
+-#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/
+-#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */
+-
+-/* Pyramid Computer GmbH */
+-#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */
++#define OCT_VID 0x0B39 /* OCT vendor ID */
++/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
++/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
++/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
++#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
+
+ /*
+- * NDI (www.ndigital.com) product ids
++ * Icom ID-1 digital transceiver
+ */
+-#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */
+-#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */
+-#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */
+-#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */
+-#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */
++
++#define ICOM_ID1_VID 0x0C26
++#define ICOM_ID1_PID 0x0004
+
+ /*
+- * Posiflex inc retail equipment (http://www.posiflex.com.tw)
++ * GN Otometrics (http://www.otometrics.com)
++ * Submitted by Ville Sundberg.
+ */
+-#define POSIFLEX_VID 0x0d3a /* Vendor ID */
+-#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */
++#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */
++#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */
+
+ /*
+- * Westrex International devices submitted by Cory Lee
++ * The following are the values for the Sealevel SeaLINK+ adapters.
++ * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and
++ * removed some PIDs that don't seem to match any existing products.)
+ */
+-#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */
+-#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */
++#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */
++#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */
++#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */
++#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */
++#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */
++#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */
++#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */
++#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */
++#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */
++#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */
++#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */
++#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */
++#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */
++#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */
++#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */
++#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */
++#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */
++#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */
++#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */
++#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */
++#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */
++#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */
++#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */
++#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */
++#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */
++#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */
++#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */
++#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */
++#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */
++#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */
++#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */
++#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */
++#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */
++#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */
++#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */
++#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */
++#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */
++#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */
++#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */
++#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */
++#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */
++#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */
++#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */
++#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */
++#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */
++#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */
++#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */
++#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */
+
+ /*
+- * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com)
++ * JETI SPECTROMETER SPECBOS 1201
++ * http://www.jeti.com/products/sys/scb/scb1201.php
+ */
+-#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */
++#define JETI_VID 0x0c6c
++#define JETI_SPC1201_PID 0x04b2
+
+ /*
+- * Eclo (http://www.eclo.pt/) product IDs.
+- * PID 0xEA90 submitted by Martin Grill.
++ * FTDI USB UART chips used in construction projects from the
++ * Elektor Electronics magazine (http://elektor-electronics.co.uk)
+ */
+-#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */
++#define ELEKTOR_VID 0x0C7D
++#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */
+
+ /*
+- * Papouch products (http://www.papouch.com/)
+- * Submitted by Folkert van Heusden
++ * Posiflex inc retail equipment (http://www.posiflex.com.tw)
+ */
+-
+-#define PAPOUCH_VID 0x5050 /* Vendor ID */
+-#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */
+-#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */
++#define POSIFLEX_VID 0x0d3a /* Vendor ID */
++#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */
+
+ /*
+- * ACG Identification Technologies GmbH products (http://www.acg.de/).
+- * Submitted by anton -at- goto10 -dot- org.
++ * The following are the values for two KOBIL chipcard terminals.
+ */
+-#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */
++#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */
++#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */
++#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */
++
++#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */
++#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
+
+ /*
+- * Yost Engineering, Inc. products (www.yostengineering.com).
+- * PID 0xE050 submitted by Aaron Prose.
++ * Falcom Wireless Communications GmbH
+ */
+-#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */
++#define FALCOM_VID 0x0F94 /* Vendor Id */
++#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */
++#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */
++
++/* Larsen and Brusgaard AltiTrack/USBtrack */
++#define LARSENBRUSGAARD_VID 0x0FD8
++#define LB_ALTITRACK_PID 0x0001
+
+ /*
+- * ThorLabs USB motor drivers
++ * TTi (Thurlby Thandar Instruments)
+ */
+-#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */
++#define TTI_VID 0x103E /* Vendor Id */
++#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */
++
++/* Interbiometrics USB I/O Board */
++/* Developed for Interbiometrics by Rudolf Gugler */
++#define INTERBIOMETRICS_VID 0x1209
++#define INTERBIOMETRICS_IOBOARD_PID 0x1002
++#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006
+
+ /*
+ * Testo products (http://www.testo.com/)
+@@ -806,18 +649,21 @@
+ #define TESTO_USB_INTERFACE_PID 0x0001
+
+ /*
+- * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com.
++ * Mobility Electronics products.
+ */
+-#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */
++#define MOBILITY_VID 0x1342
++#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */
+
+ /*
+- * Tactrix OpenPort (ECU) devices.
+- * OpenPort 1.3M submitted by Donour Sizemore.
+- * OpenPort 1.3S and 1.3U submitted by Ian Abbott.
++ * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3
++ * Submitted by Harald Welte <laforge@openmoko.org>
+ */
+-#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */
+-#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */
+-#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */
++#define FIC_VID 0x1457
++#define FIC_NEO1973_DEBUG_PID 0x5118
++
++/* Olimex */
++#define OLIMEX_VID 0x15BA
++#define OLIMEX_ARM_USB_OCD_PID 0x0003
+
+ /*
+ * Telldus Technologies
+@@ -826,34 +672,275 @@
+ #define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
+
+ /*
+- * IBS elektronik product ids
+- * Submitted by Thomas Schleusener
++ * Bayer Ascensia Contour blood glucose meter USB-converter cable.
++ * http://winglucofacts.com/cables/
+ */
+-#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */
+-#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */
+-#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */
+-#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */
+-#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */
+-#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */
+-#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */
+-#define FTDI_IBS_PROD_PID 0xff3f /* future device */
++#define BAYER_VID 0x1A79
++#define BAYER_CONTOUR_CABLE_PID 0x6001
+
+ /*
+- * MaxStream devices www.maxstream.net
++ * The following are the values for the Matrix Orbital FTDI Range
++ * Anything in this range will use an FT232RL.
+ */
+-#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */
+-
+-/* Olimex */
+-#define OLIMEX_VID 0x15BA
+-#define OLIMEX_ARM_USB_OCD_PID 0x0003
++#define MTXORB_VID 0x1B3D
++#define MTXORB_FTDI_RANGE_0100_PID 0x0100
++#define MTXORB_FTDI_RANGE_0101_PID 0x0101
++#define MTXORB_FTDI_RANGE_0102_PID 0x0102
++#define MTXORB_FTDI_RANGE_0103_PID 0x0103
++#define MTXORB_FTDI_RANGE_0104_PID 0x0104
++#define MTXORB_FTDI_RANGE_0105_PID 0x0105
++#define MTXORB_FTDI_RANGE_0106_PID 0x0106
++#define MTXORB_FTDI_RANGE_0107_PID 0x0107
++#define MTXORB_FTDI_RANGE_0108_PID 0x0108
++#define MTXORB_FTDI_RANGE_0109_PID 0x0109
++#define MTXORB_FTDI_RANGE_010A_PID 0x010A
++#define MTXORB_FTDI_RANGE_010B_PID 0x010B
++#define MTXORB_FTDI_RANGE_010C_PID 0x010C
++#define MTXORB_FTDI_RANGE_010D_PID 0x010D
++#define MTXORB_FTDI_RANGE_010E_PID 0x010E
++#define MTXORB_FTDI_RANGE_010F_PID 0x010F
++#define MTXORB_FTDI_RANGE_0110_PID 0x0110
++#define MTXORB_FTDI_RANGE_0111_PID 0x0111
++#define MTXORB_FTDI_RANGE_0112_PID 0x0112
++#define MTXORB_FTDI_RANGE_0113_PID 0x0113
++#define MTXORB_FTDI_RANGE_0114_PID 0x0114
++#define MTXORB_FTDI_RANGE_0115_PID 0x0115
++#define MTXORB_FTDI_RANGE_0116_PID 0x0116
++#define MTXORB_FTDI_RANGE_0117_PID 0x0117
++#define MTXORB_FTDI_RANGE_0118_PID 0x0118
++#define MTXORB_FTDI_RANGE_0119_PID 0x0119
++#define MTXORB_FTDI_RANGE_011A_PID 0x011A
++#define MTXORB_FTDI_RANGE_011B_PID 0x011B
++#define MTXORB_FTDI_RANGE_011C_PID 0x011C
++#define MTXORB_FTDI_RANGE_011D_PID 0x011D
++#define MTXORB_FTDI_RANGE_011E_PID 0x011E
++#define MTXORB_FTDI_RANGE_011F_PID 0x011F
++#define MTXORB_FTDI_RANGE_0120_PID 0x0120
++#define MTXORB_FTDI_RANGE_0121_PID 0x0121
++#define MTXORB_FTDI_RANGE_0122_PID 0x0122
++#define MTXORB_FTDI_RANGE_0123_PID 0x0123
++#define MTXORB_FTDI_RANGE_0124_PID 0x0124
++#define MTXORB_FTDI_RANGE_0125_PID 0x0125
++#define MTXORB_FTDI_RANGE_0126_PID 0x0126
++#define MTXORB_FTDI_RANGE_0127_PID 0x0127
++#define MTXORB_FTDI_RANGE_0128_PID 0x0128
++#define MTXORB_FTDI_RANGE_0129_PID 0x0129
++#define MTXORB_FTDI_RANGE_012A_PID 0x012A
++#define MTXORB_FTDI_RANGE_012B_PID 0x012B
++#define MTXORB_FTDI_RANGE_012C_PID 0x012C
++#define MTXORB_FTDI_RANGE_012D_PID 0x012D
++#define MTXORB_FTDI_RANGE_012E_PID 0x012E
++#define MTXORB_FTDI_RANGE_012F_PID 0x012F
++#define MTXORB_FTDI_RANGE_0130_PID 0x0130
++#define MTXORB_FTDI_RANGE_0131_PID 0x0131
++#define MTXORB_FTDI_RANGE_0132_PID 0x0132
++#define MTXORB_FTDI_RANGE_0133_PID 0x0133
++#define MTXORB_FTDI_RANGE_0134_PID 0x0134
++#define MTXORB_FTDI_RANGE_0135_PID 0x0135
++#define MTXORB_FTDI_RANGE_0136_PID 0x0136
++#define MTXORB_FTDI_RANGE_0137_PID 0x0137
++#define MTXORB_FTDI_RANGE_0138_PID 0x0138
++#define MTXORB_FTDI_RANGE_0139_PID 0x0139
++#define MTXORB_FTDI_RANGE_013A_PID 0x013A
++#define MTXORB_FTDI_RANGE_013B_PID 0x013B
++#define MTXORB_FTDI_RANGE_013C_PID 0x013C
++#define MTXORB_FTDI_RANGE_013D_PID 0x013D
++#define MTXORB_FTDI_RANGE_013E_PID 0x013E
++#define MTXORB_FTDI_RANGE_013F_PID 0x013F
++#define MTXORB_FTDI_RANGE_0140_PID 0x0140
++#define MTXORB_FTDI_RANGE_0141_PID 0x0141
++#define MTXORB_FTDI_RANGE_0142_PID 0x0142
++#define MTXORB_FTDI_RANGE_0143_PID 0x0143
++#define MTXORB_FTDI_RANGE_0144_PID 0x0144
++#define MTXORB_FTDI_RANGE_0145_PID 0x0145
++#define MTXORB_FTDI_RANGE_0146_PID 0x0146
++#define MTXORB_FTDI_RANGE_0147_PID 0x0147
++#define MTXORB_FTDI_RANGE_0148_PID 0x0148
++#define MTXORB_FTDI_RANGE_0149_PID 0x0149
++#define MTXORB_FTDI_RANGE_014A_PID 0x014A
++#define MTXORB_FTDI_RANGE_014B_PID 0x014B
++#define MTXORB_FTDI_RANGE_014C_PID 0x014C
++#define MTXORB_FTDI_RANGE_014D_PID 0x014D
++#define MTXORB_FTDI_RANGE_014E_PID 0x014E
++#define MTXORB_FTDI_RANGE_014F_PID 0x014F
++#define MTXORB_FTDI_RANGE_0150_PID 0x0150
++#define MTXORB_FTDI_RANGE_0151_PID 0x0151
++#define MTXORB_FTDI_RANGE_0152_PID 0x0152
++#define MTXORB_FTDI_RANGE_0153_PID 0x0153
++#define MTXORB_FTDI_RANGE_0154_PID 0x0154
++#define MTXORB_FTDI_RANGE_0155_PID 0x0155
++#define MTXORB_FTDI_RANGE_0156_PID 0x0156
++#define MTXORB_FTDI_RANGE_0157_PID 0x0157
++#define MTXORB_FTDI_RANGE_0158_PID 0x0158
++#define MTXORB_FTDI_RANGE_0159_PID 0x0159
++#define MTXORB_FTDI_RANGE_015A_PID 0x015A
++#define MTXORB_FTDI_RANGE_015B_PID 0x015B
++#define MTXORB_FTDI_RANGE_015C_PID 0x015C
++#define MTXORB_FTDI_RANGE_015D_PID 0x015D
++#define MTXORB_FTDI_RANGE_015E_PID 0x015E
++#define MTXORB_FTDI_RANGE_015F_PID 0x015F
++#define MTXORB_FTDI_RANGE_0160_PID 0x0160
++#define MTXORB_FTDI_RANGE_0161_PID 0x0161
++#define MTXORB_FTDI_RANGE_0162_PID 0x0162
++#define MTXORB_FTDI_RANGE_0163_PID 0x0163
++#define MTXORB_FTDI_RANGE_0164_PID 0x0164
++#define MTXORB_FTDI_RANGE_0165_PID 0x0165
++#define MTXORB_FTDI_RANGE_0166_PID 0x0166
++#define MTXORB_FTDI_RANGE_0167_PID 0x0167
++#define MTXORB_FTDI_RANGE_0168_PID 0x0168
++#define MTXORB_FTDI_RANGE_0169_PID 0x0169
++#define MTXORB_FTDI_RANGE_016A_PID 0x016A
++#define MTXORB_FTDI_RANGE_016B_PID 0x016B
++#define MTXORB_FTDI_RANGE_016C_PID 0x016C
++#define MTXORB_FTDI_RANGE_016D_PID 0x016D
++#define MTXORB_FTDI_RANGE_016E_PID 0x016E
++#define MTXORB_FTDI_RANGE_016F_PID 0x016F
++#define MTXORB_FTDI_RANGE_0170_PID 0x0170
++#define MTXORB_FTDI_RANGE_0171_PID 0x0171
++#define MTXORB_FTDI_RANGE_0172_PID 0x0172
++#define MTXORB_FTDI_RANGE_0173_PID 0x0173
++#define MTXORB_FTDI_RANGE_0174_PID 0x0174
++#define MTXORB_FTDI_RANGE_0175_PID 0x0175
++#define MTXORB_FTDI_RANGE_0176_PID 0x0176
++#define MTXORB_FTDI_RANGE_0177_PID 0x0177
++#define MTXORB_FTDI_RANGE_0178_PID 0x0178
++#define MTXORB_FTDI_RANGE_0179_PID 0x0179
++#define MTXORB_FTDI_RANGE_017A_PID 0x017A
++#define MTXORB_FTDI_RANGE_017B_PID 0x017B
++#define MTXORB_FTDI_RANGE_017C_PID 0x017C
++#define MTXORB_FTDI_RANGE_017D_PID 0x017D
++#define MTXORB_FTDI_RANGE_017E_PID 0x017E
++#define MTXORB_FTDI_RANGE_017F_PID 0x017F
++#define MTXORB_FTDI_RANGE_0180_PID 0x0180
++#define MTXORB_FTDI_RANGE_0181_PID 0x0181
++#define MTXORB_FTDI_RANGE_0182_PID 0x0182
++#define MTXORB_FTDI_RANGE_0183_PID 0x0183
++#define MTXORB_FTDI_RANGE_0184_PID 0x0184
++#define MTXORB_FTDI_RANGE_0185_PID 0x0185
++#define MTXORB_FTDI_RANGE_0186_PID 0x0186
++#define MTXORB_FTDI_RANGE_0187_PID 0x0187
++#define MTXORB_FTDI_RANGE_0188_PID 0x0188
++#define MTXORB_FTDI_RANGE_0189_PID 0x0189
++#define MTXORB_FTDI_RANGE_018A_PID 0x018A
++#define MTXORB_FTDI_RANGE_018B_PID 0x018B
++#define MTXORB_FTDI_RANGE_018C_PID 0x018C
++#define MTXORB_FTDI_RANGE_018D_PID 0x018D
++#define MTXORB_FTDI_RANGE_018E_PID 0x018E
++#define MTXORB_FTDI_RANGE_018F_PID 0x018F
++#define MTXORB_FTDI_RANGE_0190_PID 0x0190
++#define MTXORB_FTDI_RANGE_0191_PID 0x0191
++#define MTXORB_FTDI_RANGE_0192_PID 0x0192
++#define MTXORB_FTDI_RANGE_0193_PID 0x0193
++#define MTXORB_FTDI_RANGE_0194_PID 0x0194
++#define MTXORB_FTDI_RANGE_0195_PID 0x0195
++#define MTXORB_FTDI_RANGE_0196_PID 0x0196
++#define MTXORB_FTDI_RANGE_0197_PID 0x0197
++#define MTXORB_FTDI_RANGE_0198_PID 0x0198
++#define MTXORB_FTDI_RANGE_0199_PID 0x0199
++#define MTXORB_FTDI_RANGE_019A_PID 0x019A
++#define MTXORB_FTDI_RANGE_019B_PID 0x019B
++#define MTXORB_FTDI_RANGE_019C_PID 0x019C
++#define MTXORB_FTDI_RANGE_019D_PID 0x019D
++#define MTXORB_FTDI_RANGE_019E_PID 0x019E
++#define MTXORB_FTDI_RANGE_019F_PID 0x019F
++#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0
++#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1
++#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2
++#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3
++#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4
++#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5
++#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6
++#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7
++#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8
++#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9
++#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA
++#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB
++#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC
++#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD
++#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE
++#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF
++#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0
++#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1
++#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2
++#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3
++#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4
++#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5
++#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6
++#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7
++#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8
++#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9
++#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA
++#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB
++#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC
++#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD
++#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE
++#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF
++#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0
++#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1
++#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2
++#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3
++#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4
++#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5
++#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6
++#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7
++#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8
++#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9
++#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA
++#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB
++#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC
++#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD
++#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE
++#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF
++#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0
++#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1
++#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2
++#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3
++#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4
++#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5
++#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6
++#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7
++#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8
++#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9
++#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA
++#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB
++#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC
++#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD
++#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE
++#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF
++#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0
++#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1
++#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2
++#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3
++#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4
++#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5
++#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6
++#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7
++#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8
++#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9
++#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA
++#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB
++#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC
++#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED
++#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE
++#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF
++#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0
++#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1
++#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2
++#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3
++#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4
++#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5
++#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6
++#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7
++#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8
++#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9
++#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA
++#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB
++#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC
++#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD
++#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE
++#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF
+
+-/* Luminary Micro Stellaris Boards, VID = FTDI_VID */
+-/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */
+-#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8
+-#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9
+
+-/* www.elsterelectricity.com Elster Unicom III Optical Probe */
+-#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */
+
+ /*
+ * The Mobility Lab (TML)
+@@ -862,45 +949,11 @@
+ #define TML_VID 0x1B91 /* Vendor ID */
+ #define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */
+
+-/* Propox devices */
+-#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738
+-
+-/* Rig Expert Ukraine devices */
+-#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */
+-
+-/* Domintell products http://www.domintell.com */
+-#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */
+-#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */
+-
+ /* Alti-2 products http://www.alti-2.com */
+ #define ALTI2_VID 0x1BC9
+ #define ALTI2_N3_PID 0x6001 /* Neptune 3 */
+
+ /*
+- * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3
+- * Submitted by Harald Welte <laforge@openmoko.org>
+- */
+-#define FIC_VID 0x1457
+-#define FIC_NEO1973_DEBUG_PID 0x5118
+-
+-/*
+- * RATOC REX-USB60F
+- */
+-#define RATOC_VENDOR_ID 0x0584
+-#define RATOC_PRODUCT_ID_USB60F 0xb020
+-
+-/*
+- * DIEBOLD BCS SE923
+- */
+-#define DIEBOLD_BCS_SE923_PID 0xfb99
+-
+-/*
+- * Atmel STK541
+- */
+-#define ATMEL_VID 0x03eb /* Vendor ID */
+-#define STK541_PID 0x2109 /* Zigbee Controller */
+-
+-/*
+ * Dresden Elektronic Sensor Terminal Board
+ */
+ #define DE_VID 0x1cf1 /* Vendor ID */
+@@ -908,19 +961,13 @@
+ #define WHT_PID 0x0004 /* Wireless Handheld Terminal */
+
+ /*
+- * Blackfin gnICE JTAG
+- * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
++ * Papouch products (http://www.papouch.com/)
++ * Submitted by Folkert van Heusden
+ */
+-#define ADI_VID 0x0456
+-#define ADI_GNICE_PID 0xF000
+-#define ADI_GNICEPLUS_PID 0xF001
+
+-/*
+- * JETI SPECTROMETER SPECBOS 1201
+- * http://www.jeti.com/products/sys/scb/scb1201.php
+- */
+-#define JETI_VID 0x0c6c
+-#define JETI_SPC1201_PID 0x04b2
++#define PAPOUCH_VID 0x5050 /* Vendor ID */
++#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */
++#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */
+
+ /*
+ * Marvell SheevaPlug
+@@ -928,32 +975,12 @@
+ #define MARVELL_VID 0x9e88
+ #define MARVELL_SHEEVAPLUG_PID 0x9e8f
+
+-#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */
+-
+ /*
+- * GN Otometrics (http://www.otometrics.com)
+- * Submitted by Ville Sundberg.
+- */
+-#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */
+-#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */
+-
+-/*
+- * Bayer Ascensia Contour blood glucose meter USB-converter cable.
+- * http://winglucofacts.com/cables/
+- */
+-#define BAYER_VID 0x1A79
+-#define BAYER_CONTOUR_CABLE_PID 0x6001
+-
+-/*
+- * Marvell OpenRD Base, Client
+- * http://www.open-rd.org
+- * OpenRD Base, Client use VID 0x0403
+- */
+-#define MARVELL_OPENRD_PID 0x9e90
+-
+-/*
+- * Hameg HO820 and HO870 interface (using VID 0x0403)
++ * Evolution Robotics products (http://www.evolution.com/).
++ * Submitted by Shawn M. Lavelle.
+ */
+-#define HAMEG_HO820_PID 0xed74
+-#define HAMEG_HO870_PID 0xed71
+-
++#define EVOLUTION_VID 0xDEEE /* Vendor ID */
++#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */
++#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/
++#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/
++#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */
--- /dev/null
+From f7410ced7f931bb1ad79d1336412cf7b7a33cb14 Mon Sep 17 00:00:00 2001
+From: Herbert Xu <herbert@gondor.apana.org.au>
+Date: Sun, 10 Jan 2010 20:15:03 +1100
+Subject: USB: Move hcd free_dev call into usb_disconnect to fix oops
+
+From: Herbert Xu <herbert@gondor.apana.org.au>
+
+commit f7410ced7f931bb1ad79d1336412cf7b7a33cb14 upstream.
+
+USB: Move hcd free_dev call into usb_disconnect
+
+I found a way to oops the kernel:
+
+1. Open a USB device through devio.
+2. Remove the hcd module in the host kernel.
+3. Close the devio file descriptor.
+
+The problem is that closing the file descriptor does usb_release_dev
+as it is the last reference. usb_release_dev then tries to invoke
+the hcd free_dev function (or rather dereferencing the hcd driver
+struct). This causes an oops as the hcd driver has already been
+unloaded so the struct is gone.
+
+This patch tries to fix this by bringing the free_dev call earlier
+and into usb_disconnect. I have verified that repeating the
+above steps no longer crashes with this patch applied.
+
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hcd.h | 2 +-
+ drivers/usb/core/hub.c | 12 ++++++++++++
+ drivers/usb/core/usb.c | 3 ---
+ 3 files changed, 13 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/core/hcd.h
++++ b/drivers/usb/core/hcd.h
+@@ -234,7 +234,7 @@ struct hc_driver {
+ /* xHCI specific functions */
+ /* Called by usb_alloc_dev to alloc HC device structures */
+ int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+- /* Called by usb_release_dev to free HC device structures */
++ /* Called by usb_disconnect to free HC device structures */
+ void (*free_dev)(struct usb_hcd *, struct usb_device *);
+
+ /* Bandwidth computation functions */
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -1508,6 +1508,15 @@ static inline void usb_stop_pm(struct us
+
+ #endif
+
++static void hub_free_dev(struct usb_device *udev)
++{
++ struct usb_hcd *hcd = bus_to_hcd(udev->bus);
++
++ /* Root hubs aren't real devices, so don't free HCD resources */
++ if (hcd->driver->free_dev && udev->parent)
++ hcd->driver->free_dev(hcd, udev);
++}
++
+ /**
+ * usb_disconnect - disconnect a device (usbcore-internal)
+ * @pdev: pointer to device being disconnected
+@@ -1578,6 +1587,8 @@ void usb_disconnect(struct usb_device **
+
+ usb_stop_pm(udev);
+
++ hub_free_dev(udev);
++
+ put_device(&udev->dev);
+ }
+
+@@ -3130,6 +3141,7 @@ loop_disable:
+ loop:
+ usb_ep0_reinit(udev);
+ release_address(udev);
++ hub_free_dev(udev);
+ usb_put_dev(udev);
+ if ((status == -ENOTCONN) || (status == -ENOTSUPP))
+ break;
+--- a/drivers/usb/core/usb.c
++++ b/drivers/usb/core/usb.c
+@@ -191,9 +191,6 @@ static void usb_release_dev(struct devic
+ hcd = bus_to_hcd(udev->bus);
+
+ usb_destroy_configuration(udev);
+- /* Root hubs aren't real devices, so don't free HCD resources */
+- if (hcd->driver->free_dev && udev->parent)
+- hcd->driver->free_dev(hcd, udev);
+ usb_put_hcd(hcd);
+ kfree(udev->product);
+ kfree(udev->manufacturer);
--- /dev/null
+From cceffe9348f93188d7811bda95924d4bd3040d0f Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 8 Feb 2010 09:45:12 -0500
+Subject: USB: remove debugging message for uevent constructions
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit cceffe9348f93188d7811bda95924d4bd3040d0f upstream.
+
+This patch (as1332) removes an unneeded and annoying debugging message
+announcing all USB uevent constructions.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/driver.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/drivers/usb/core/driver.c
++++ b/drivers/usb/core/driver.c
+@@ -625,9 +625,6 @@ static int usb_uevent(struct device *dev
+ {
+ struct usb_device *usb_dev;
+
+- /* driver is often null here; dev_dbg() would oops */
+- pr_debug("usb %s: uevent\n", dev_name(dev));
+-
+ if (is_usb_device(dev)) {
+ usb_dev = to_usb_device(dev);
+ } else if (is_usb_interface(dev)) {
+@@ -639,6 +636,7 @@ static int usb_uevent(struct device *dev
+ }
+
+ if (usb_dev->devnum < 0) {
++ /* driver is often null here; dev_dbg() would oops */
+ pr_debug("usb %s: already deleted?\n", dev_name(dev));
+ return -ENODEV;
+ }
--- /dev/null
+From 05197921ff3dad52d99fd1647974c57d9c28d40e Mon Sep 17 00:00:00 2001
+From: Edward Shao <laface.tw@gmail.com>
+Date: Thu, 11 Feb 2010 03:37:30 +0800
+Subject: USB: xhci: Fix finding extended capabilities registers
+
+From: Edward Shao <laface.tw@gmail.com>
+
+commit 05197921ff3dad52d99fd1647974c57d9c28d40e upstream.
+
+According "5.3.6 Capability Parameters (HCCPARAMS)" of xHCI rev0.96 spec,
+value of xECP register indicates a relative offset, in 32-bit words,
+from Base to the beginning of the first extended capability.
+The wrong calculation will cause BIOS handoff fail (not handoff from BIOS)
+in some platform with BIOS USB legacy sup support.
+
+Signed-off-by: Edward Shao <laface.tw@gmail.com>
+Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/xhci-ext-caps.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/host/xhci-ext-caps.h
++++ b/drivers/usb/host/xhci-ext-caps.h
+@@ -101,12 +101,15 @@ static inline int xhci_find_next_cap_off
+
+ next = readl(base + ext_offset);
+
+- if (ext_offset == XHCI_HCC_PARAMS_OFFSET)
++ if (ext_offset == XHCI_HCC_PARAMS_OFFSET) {
+ /* Find the first extended capability */
+ next = XHCI_HCC_EXT_CAPS(next);
+- else
++ ext_offset = 0;
++ } else {
+ /* Find the next extended capability */
+ next = XHCI_EXT_CAPS_NEXT(next);
++ }
++
+ if (!next)
+ return 0;
+ /*
--- /dev/null
+From 0a832320f1bae6a4169bf683e201378f2437cfc1 Mon Sep 17 00:00:00 2001
+From: Justin P. Mattock <justinmattock@gmail.com>
+Date: Tue, 16 Feb 2010 15:17:29 -0800
+Subject: x86: Add iMac9,1 to pci_reboot_dmi_table
+
+From: Justin P. Mattock <justinmattock@gmail.com>
+
+commit 0a832320f1bae6a4169bf683e201378f2437cfc1 upstream.
+
+On the iMac9,1 /sbin/reboot results in a black mangled screen. Adding
+this DMI entry gets the machine to reboot cleanly as it should.
+
+Signed-off-by: Justin P. Mattock <justinmattock@gmail.com>
+LKML-Reference: <1266362249-3337-1-git-send-email-justinmattock@gmail.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/reboot.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -461,6 +461,14 @@ static struct dmi_system_id __initdata p
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"),
+ },
+ },
++ { /* Handle problems with rebooting on the iMac9,1. */
++ .callback = set_pci_reboot,
++ .ident = "Apple iMac9,1",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"),
++ },
++ },
+ { }
+ };
+
--- /dev/null
+From ced5b697a76d325e7a7ac7d382dbbb632c765093 Mon Sep 17 00:00:00 2001
+From: Brandon Phiilps <bphilips@suse.de>
+Date: Wed, 10 Feb 2010 01:20:06 -0800
+Subject: x86: Avoid race condition in pci_enable_msix()
+
+From: Brandon Phiilps <bphilips@suse.de>
+
+commit ced5b697a76d325e7a7ac7d382dbbb632c765093 upstream.
+
+Keep chip_data in create_irq_nr and destroy_irq.
+
+When two drivers are setting up MSI-X at the same time via
+pci_enable_msix() there is a race. See this dmesg excerpt:
+
+[ 85.170610] ixgbe 0000:02:00.1: irq 97 for MSI/MSI-X
+[ 85.170611] alloc irq_desc for 99 on node -1
+[ 85.170613] igb 0000:08:00.1: irq 98 for MSI/MSI-X
+[ 85.170614] alloc kstat_irqs on node -1
+[ 85.170616] alloc irq_2_iommu on node -1
+[ 85.170617] alloc irq_desc for 100 on node -1
+[ 85.170619] alloc kstat_irqs on node -1
+[ 85.170621] alloc irq_2_iommu on node -1
+[ 85.170625] ixgbe 0000:02:00.1: irq 99 for MSI/MSI-X
+[ 85.170626] alloc irq_desc for 101 on node -1
+[ 85.170628] igb 0000:08:00.1: irq 100 for MSI/MSI-X
+[ 85.170630] alloc kstat_irqs on node -1
+[ 85.170631] alloc irq_2_iommu on node -1
+[ 85.170635] alloc irq_desc for 102 on node -1
+[ 85.170636] alloc kstat_irqs on node -1
+[ 85.170639] alloc irq_2_iommu on node -1
+[ 85.170646] BUG: unable to handle kernel NULL pointer dereference
+at 0000000000000088
+
+As you can see igb and ixgbe are both alternating on create_irq_nr()
+via pci_enable_msix() in their probe function.
+
+ixgbe: While looping through irq_desc_ptrs[] via create_irq_nr() ixgbe
+choses irq_desc_ptrs[102] and exits the loop, drops vector_lock and
+calls dynamic_irq_init. Then it sets irq_desc_ptrs[102]->chip_data =
+NULL via dynamic_irq_init().
+
+igb: Grabs the vector_lock now and starts looping over irq_desc_ptrs[]
+via create_irq_nr(). It gets to irq_desc_ptrs[102] and does this:
+
+ cfg_new = irq_desc_ptrs[102]->chip_data;
+ if (cfg_new->vector != 0)
+ continue;
+
+This hits the NULL deref.
+
+Another possible race exists via pci_disable_msix() in a driver or in
+the number of error paths that call free_msi_irqs():
+
+destroy_irq()
+dynamic_irq_cleanup() which sets desc->chip_data = NULL
+...race window...
+desc->chip_data = cfg;
+
+Remove the save and restore code for cfg in create_irq_nr() and
+destroy_irq() and take the desc->lock when checking the irq_cfg.
+
+Reported-and-analyzed-by: Brandon Philips <bphilips@suse.de>
+Signed-off-by: Yinghai Lu <yinghai@kernel.org>
+LKML-Reference: <1265793639-15071-3-git-send-email-yinghai@kernel.org>
+Signed-off-by: Brandon Phililps <bphilips@suse.de>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/apic/io_apic.c | 18 +++-----------
+ include/linux/irq.h | 2 +
+ kernel/irq/chip.c | 52 +++++++++++++++++++++++++++++++++--------
+ 3 files changed, 50 insertions(+), 22 deletions(-)
+
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -3165,12 +3165,9 @@ unsigned int create_irq_nr(unsigned int
+ }
+ spin_unlock_irqrestore(&vector_lock, flags);
+
+- if (irq > 0) {
+- dynamic_irq_init(irq);
+- /* restore it, in case dynamic_irq_init clear it */
+- if (desc_new)
+- desc_new->chip_data = cfg_new;
+- }
++ if (irq > 0)
++ dynamic_irq_init_keep_chip_data(irq);
++
+ return irq;
+ }
+
+@@ -3193,17 +3190,12 @@ void destroy_irq(unsigned int irq)
+ {
+ unsigned long flags;
+ struct irq_cfg *cfg;
+- struct irq_desc *desc;
+
+- /* store it, in case dynamic_irq_cleanup clear it */
+- desc = irq_to_desc(irq);
+- cfg = desc->chip_data;
+- dynamic_irq_cleanup(irq);
+- /* connect back irq_cfg */
+- desc->chip_data = cfg;
++ dynamic_irq_cleanup_keep_chip_data(irq);
+
+ free_irte(irq);
+ spin_lock_irqsave(&vector_lock, flags);
++ cfg = irq_to_desc(irq)->chip_data;
+ __clear_irq_vector(irq, cfg);
+ spin_unlock_irqrestore(&vector_lock, flags);
+ }
+--- a/include/linux/irq.h
++++ b/include/linux/irq.h
+@@ -400,7 +400,9 @@ static inline int irq_has_action(unsigne
+
+ /* Dynamic irq helper functions */
+ extern void dynamic_irq_init(unsigned int irq);
++void dynamic_irq_init_keep_chip_data(unsigned int irq);
+ extern void dynamic_irq_cleanup(unsigned int irq);
++void dynamic_irq_cleanup_keep_chip_data(unsigned int irq);
+
+ /* Set/get chip/data for an IRQ: */
+ extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
+--- a/kernel/irq/chip.c
++++ b/kernel/irq/chip.c
+@@ -18,11 +18,7 @@
+
+ #include "internals.h"
+
+-/**
+- * dynamic_irq_init - initialize a dynamically allocated irq
+- * @irq: irq number to initialize
+- */
+-void dynamic_irq_init(unsigned int irq)
++static void dynamic_irq_init_x(unsigned int irq, bool keep_chip_data)
+ {
+ struct irq_desc *desc;
+ unsigned long flags;
+@@ -41,7 +37,8 @@ void dynamic_irq_init(unsigned int irq)
+ desc->depth = 1;
+ desc->msi_desc = NULL;
+ desc->handler_data = NULL;
+- desc->chip_data = NULL;
++ if (!keep_chip_data)
++ desc->chip_data = NULL;
+ desc->action = NULL;
+ desc->irq_count = 0;
+ desc->irqs_unhandled = 0;
+@@ -55,10 +52,26 @@ void dynamic_irq_init(unsigned int irq)
+ }
+
+ /**
+- * dynamic_irq_cleanup - cleanup a dynamically allocated irq
++ * dynamic_irq_init - initialize a dynamically allocated irq
+ * @irq: irq number to initialize
+ */
+-void dynamic_irq_cleanup(unsigned int irq)
++void dynamic_irq_init(unsigned int irq)
++{
++ dynamic_irq_init_x(irq, false);
++}
++
++/**
++ * dynamic_irq_init_keep_chip_data - initialize a dynamically allocated irq
++ * @irq: irq number to initialize
++ *
++ * does not set irq_to_desc(irq)->chip_data to NULL
++ */
++void dynamic_irq_init_keep_chip_data(unsigned int irq)
++{
++ dynamic_irq_init_x(irq, true);
++}
++
++static void dynamic_irq_cleanup_x(unsigned int irq, bool keep_chip_data)
+ {
+ struct irq_desc *desc = irq_to_desc(irq);
+ unsigned long flags;
+@@ -77,7 +90,8 @@ void dynamic_irq_cleanup(unsigned int ir
+ }
+ desc->msi_desc = NULL;
+ desc->handler_data = NULL;
+- desc->chip_data = NULL;
++ if (!keep_chip_data)
++ desc->chip_data = NULL;
+ desc->handle_irq = handle_bad_irq;
+ desc->chip = &no_irq_chip;
+ desc->name = NULL;
+@@ -85,6 +99,26 @@ void dynamic_irq_cleanup(unsigned int ir
+ spin_unlock_irqrestore(&desc->lock, flags);
+ }
+
++/**
++ * dynamic_irq_cleanup - cleanup a dynamically allocated irq
++ * @irq: irq number to initialize
++ */
++void dynamic_irq_cleanup(unsigned int irq)
++{
++ dynamic_irq_cleanup_x(irq, false);
++}
++
++/**
++ * dynamic_irq_cleanup_keep_chip_data - cleanup a dynamically allocated irq
++ * @irq: irq number to initialize
++ *
++ * does not set irq_to_desc(irq)->chip_data to NULL
++ */
++void dynamic_irq_cleanup_keep_chip_data(unsigned int irq)
++{
++ dynamic_irq_cleanup_x(irq, true);
++}
++
+
+ /**
+ * set_irq_chip - set the irq chip for an irq
--- /dev/null
+From 18dce6ba5c8c6bd0f3ab4efa4cbdd698dab5c40a Mon Sep 17 00:00:00 2001
+From: Yinghai Lu <yinghai@kernel.org>
+Date: Wed, 10 Feb 2010 01:20:05 -0800
+Subject: x86: Fix SCI on IOAPIC != 0
+
+From: Yinghai Lu <yinghai@kernel.org>
+
+commit 18dce6ba5c8c6bd0f3ab4efa4cbdd698dab5c40a upstream.
+
+Thomas Renninger <trenn@suse.de> reported on IBM x3330
+
+booting a latest kernel on this machine results in:
+
+PCI: PCI BIOS revision 2.10 entry at 0xfd61c, last bus=1
+PCI: Using configuration type 1 for base access bio: create slab <bio-0> at 0
+ACPI: SCI (IRQ30) allocation failed
+ACPI Exception: AE_NOT_ACQUIRED, Unable to install System Control Interrupt handler (20090903/evevent-161)
+ACPI: Unable to start the ACPI Interpreter
+
+Later all kind of devices fail...
+
+and bisect it down to this commit:
+commit b9c61b70075c87a8612624736faf4a2de5b1ed30
+
+ x86/pci: update pirq_enable_irq() to setup io apic routing
+
+it turns out we need to set irq routing for the sci on ioapic1 early.
+
+-v2: make it work without sparseirq too.
+-v3: fix checkpatch.pl warning, and cc to stable
+
+Reported-by: Thomas Renninger <trenn@suse.de>
+Bisected-by: Thomas Renninger <trenn@suse.de>
+Tested-by: Thomas Renninger <trenn@suse.de>
+Signed-off-by: Yinghai Lu <yinghai@kernel.org>
+LKML-Reference: <1265793639-15071-2-git-send-email-yinghai@kernel.org>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/include/asm/io_apic.h | 1
+ arch/x86/kernel/acpi/boot.c | 9 ++++++-
+ arch/x86/kernel/apic/io_apic.c | 50 +++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 59 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/io_apic.h
++++ b/arch/x86/include/asm/io_apic.h
+@@ -160,6 +160,7 @@ extern int io_apic_get_redir_entries(int
+ struct io_apic_irq_attr;
+ extern int io_apic_set_pci_routing(struct device *dev, int irq,
+ struct io_apic_irq_attr *irq_attr);
++void setup_IO_APIC_irq_extra(u32 gsi);
+ extern int (*ioapic_renumber_irq)(int ioapic, int irq);
+ extern void ioapic_init_mappings(void);
+ extern void ioapic_insert_resources(void);
+--- a/arch/x86/kernel/acpi/boot.c
++++ b/arch/x86/kernel/acpi/boot.c
+@@ -446,6 +446,12 @@ void __init acpi_pic_sci_set_trigger(uns
+ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
+ {
+ *irq = gsi;
++
++#ifdef CONFIG_X86_IO_APIC
++ if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC)
++ setup_IO_APIC_irq_extra(gsi);
++#endif
++
+ return 0;
+ }
+
+@@ -473,7 +479,8 @@ int acpi_register_gsi(struct device *dev
+ plat_gsi = mp_register_gsi(dev, gsi, trigger, polarity);
+ }
+ #endif
+- acpi_gsi_to_irq(plat_gsi, &irq);
++ irq = plat_gsi;
++
+ return irq;
+ }
+
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -1550,6 +1550,56 @@ static void __init setup_IO_APIC_irqs(vo
+ }
+
+ /*
++ * for the gsit that is not in first ioapic
++ * but could not use acpi_register_gsi()
++ * like some special sci in IBM x3330
++ */
++void setup_IO_APIC_irq_extra(u32 gsi)
++{
++ int apic_id = 0, pin, idx, irq;
++ int node = cpu_to_node(boot_cpu_id);
++ struct irq_desc *desc;
++ struct irq_cfg *cfg;
++
++ /*
++ * Convert 'gsi' to 'ioapic.pin'.
++ */
++ apic_id = mp_find_ioapic(gsi);
++ if (apic_id < 0)
++ return;
++
++ pin = mp_find_ioapic_pin(apic_id, gsi);
++ idx = find_irq_entry(apic_id, pin, mp_INT);
++ if (idx == -1)
++ return;
++
++ irq = pin_2_irq(idx, apic_id, pin);
++#ifdef CONFIG_SPARSE_IRQ
++ desc = irq_to_desc(irq);
++ if (desc)
++ return;
++#endif
++ desc = irq_to_desc_alloc_node(irq, node);
++ if (!desc) {
++ printk(KERN_INFO "can not get irq_desc for %d\n", irq);
++ return;
++ }
++
++ cfg = desc->chip_data;
++ add_pin_to_irq_node(cfg, node, apic_id, pin);
++
++ if (test_bit(pin, mp_ioapic_routing[apic_id].pin_programmed)) {
++ pr_debug("Pin %d-%d already programmed\n",
++ mp_ioapics[apic_id].apicid, pin);
++ return;
++ }
++ set_bit(pin, mp_ioapic_routing[apic_id].pin_programmed);
++
++ setup_IO_APIC_irq(apic_id, pin, irq, desc,
++ irq_trigger(idx), irq_polarity(idx));
++}
++
++/*
+ * Set up the timer pin, possibly with the 8259A-master behind.
+ */
+ static void __init setup_timer_IRQ0_pin(unsigned int apic_id, unsigned int pin,
--- /dev/null
+From 318f6b228ba88a394ef560efc1bfe028ad5ae6b6 Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jslaby@suse.cz>
+Date: Wed, 10 Feb 2010 20:55:16 +0100
+Subject: x86, ia32_aout: do not kill argument mapping
+
+From: Jiri Slaby <jslaby@suse.cz>
+
+commit 318f6b228ba88a394ef560efc1bfe028ad5ae6b6 upstream.
+
+Do not set current->mm->mmap to NULL in 32-bit emulation on 64-bit
+load_aout_binary after flush_old_exec as it would destroy already
+set brpm mapping with arguments.
+
+Introduced by b6a2fea39318e43fee84fa7b0b90d68bed92d2ba
+mm: variable length argument support
+where the argument mapping in bprm was added.
+
+[ hpa: this is a regression from 2.6.22... time to kill a.out? ]
+
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+LKML-Reference: <1265831716-7668-1-git-send-email-jslaby@suse.cz>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Ollie Wild <aaw@google.com>
+Cc: x86@kernel.org
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/ia32/ia32_aout.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/arch/x86/ia32/ia32_aout.c
++++ b/arch/x86/ia32/ia32_aout.c
+@@ -327,7 +327,6 @@ static int load_aout_binary(struct linux
+ current->mm->free_area_cache = TASK_UNMAPPED_BASE;
+ current->mm->cached_hole_size = 0;
+
+- current->mm->mmap = NULL;
+ install_exec_creds(bprm);
+ current->flags &= ~PF_FORKNOEXEC;
+
--- /dev/null
+From 817a824b75b1475f1b067c8cee318c7b4d66fcde Mon Sep 17 00:00:00 2001
+From: Ian Campbell <ian.campbell@citrix.com>
+Date: Fri, 26 Feb 2010 17:16:00 +0000
+Subject: x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ian Campbell <ian.campbell@citrix.com>
+
+commit 817a824b75b1475f1b067c8cee318c7b4d66fcde upstream.
+
+There's a path in the pagefault code where the kernel deliberately
+breaks its own locking rules by kmapping a high pte page without
+holding the pagetable lock (in at least page_check_address). This
+breaks Xen's ability to track the pinned/unpinned state of the
+page. There does not appear to be a viable workaround for this
+behaviour so simply disable HIGHPTE for all Xen guests.
+
+Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
+LKML-Reference: <1267204562-11844-1-git-send-email-ian.campbell@citrix.com>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Pasi Kärkkäinen <pasik@iki.fi>
+Cc: <xen-devel@lists.xensource.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/xen/enlighten.c | 7 +++++++
+ arch/x86/xen/mmu.c | 11 ++++++-----
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -48,6 +48,7 @@
+ #include <asm/traps.h>
+ #include <asm/setup.h>
+ #include <asm/desc.h>
++#include <asm/pgalloc.h>
+ #include <asm/pgtable.h>
+ #include <asm/tlbflush.h>
+ #include <asm/reboot.h>
+@@ -1092,6 +1093,12 @@ asmlinkage void __init xen_start_kernel(
+
+ __supported_pte_mask |= _PAGE_IOMAP;
+
++ /*
++ * Prevent page tables from being allocated in highmem, even
++ * if CONFIG_HIGHPTE is enabled.
++ */
++ __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
++
+ #ifdef CONFIG_X86_64
+ /* Work out if we support NX */
+ check_efer();
+--- a/arch/x86/xen/mmu.c
++++ b/arch/x86/xen/mmu.c
+@@ -1432,14 +1432,15 @@ static void *xen_kmap_atomic_pte(struct
+ {
+ pgprot_t prot = PAGE_KERNEL;
+
++ /*
++ * We disable highmem allocations for page tables so we should never
++ * see any calls to kmap_atomic_pte on a highmem page.
++ */
++ BUG_ON(PageHighMem(page));
++
+ if (PagePinned(page))
+ prot = PAGE_KERNEL_RO;
+
+- if (0 && PageHighMem(page))
+- printk("mapping highpte %lx type %d prot %s\n",
+- page_to_pfn(page), type,
+- (unsigned long)pgprot_val(prot) & _PAGE_RW ? "WRITE" : "READ");
+-
+ return kmap_atomic_prot(page, type, prot);
+ }
+ #endif