]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 11 Mar 2010 19:29:41 +0000 (11:29 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 11 Mar 2010 19:29:41 +0000 (11:29 -0800)
19 files changed:
queue-2.6.32/ocfs2-only-bug-out-in-direct-io-write-for-reflinked-extent.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/thinkpad-acpi-document-hkey-event-3006.patch [new file with mode: 0644]
queue-2.6.32/thinkpad-acpi-fix-bluetooth-wwan-resume.patch [new file with mode: 0644]
queue-2.6.32/thinkpad-acpi-fix-poll-thread-auto-start.patch [new file with mode: 0644]
queue-2.6.32/thinkpad-acpi-make-driver-events-work-in-nvram-poll-mode.patch [new file with mode: 0644]
queue-2.6.32/thinkpad-acpi-r52-brightness_mode-has-been-confirmed.patch [new file with mode: 0644]
queue-2.6.32/usb-fix-crash-in-uhci_scan_schedule.patch [new file with mode: 0644]
queue-2.6.32/usb-fix-the-idproduct-value-for-usb-3.0-root-hubs.patch [new file with mode: 0644]
queue-2.6.32/usb-ftdi_sio-isolate-all-device-ids-to-new-ftdi_sio_ids.h-header.patch [new file with mode: 0644]
queue-2.6.32/usb-ftdi_sio-sort-pid-vid-entries-in-new-ftdi_sio_ids.h-header.patch [new file with mode: 0644]
queue-2.6.32/usb-move-hcd-free_dev-call-into-usb_disconnect-to-fix-oops.patch [new file with mode: 0644]
queue-2.6.32/usb-remove-debugging-message-for-uevent-constructions.patch [new file with mode: 0644]
queue-2.6.32/usb-xhci-fix-finding-extended-capabilities-registers.patch [new file with mode: 0644]
queue-2.6.32/x86-add-imac9-1-to-pci_reboot_dmi_table.patch [new file with mode: 0644]
queue-2.6.32/x86-avoid-race-condition-in-pci_enable_msix.patch [new file with mode: 0644]
queue-2.6.32/x86-fix-sci-on-ioapic-0.patch [new file with mode: 0644]
queue-2.6.32/x86-ia32_aout-do-not-kill-argument-mapping.patch [new file with mode: 0644]
queue-2.6.32/x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/ocfs2-only-bug-out-in-direct-io-write-for-reflinked-extent.patch b/queue-2.6.32/ocfs2-only-bug-out-in-direct-io-write-for-reflinked-extent.patch
new file mode 100644 (file)
index 0000000..4918e0b
--- /dev/null
@@ -0,0 +1,36 @@
+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().
index 051b536cf0c6ea78a974d90f2734951e9fb05ff8..ee302ef7b936098121144cf8a5012c488d2a0bb0 100644 (file)
@@ -103,6 +103,24 @@ b43-b43legacy-wake-queues-in-wireless_core_start.patch
 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
diff --git a/queue-2.6.32/thinkpad-acpi-document-hkey-event-3006.patch b/queue-2.6.32/thinkpad-acpi-document-hkey-event-3006.patch
new file mode 100644 (file)
index 0000000..35fcfac
--- /dev/null
@@ -0,0 +1,56 @@
+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;
diff --git a/queue-2.6.32/thinkpad-acpi-fix-bluetooth-wwan-resume.patch b/queue-2.6.32/thinkpad-acpi-fix-bluetooth-wwan-resume.patch
new file mode 100644 (file)
index 0000000..fb1caec
--- /dev/null
@@ -0,0 +1,83 @@
+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;
diff --git a/queue-2.6.32/thinkpad-acpi-fix-poll-thread-auto-start.patch b/queue-2.6.32/thinkpad-acpi-fix-poll-thread-auto-start.patch
new file mode 100644 (file)
index 0000000..e5244c0
--- /dev/null
@@ -0,0 +1,71 @@
+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;
+ }
diff --git a/queue-2.6.32/thinkpad-acpi-make-driver-events-work-in-nvram-poll-mode.patch b/queue-2.6.32/thinkpad-acpi-make-driver-events-work-in-nvram-poll-mode.patch
new file mode 100644 (file)
index 0000000..1bb6a4e
--- /dev/null
@@ -0,0 +1,81 @@
+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)
+ {
+ }
diff --git a/queue-2.6.32/thinkpad-acpi-r52-brightness_mode-has-been-confirmed.patch b/queue-2.6.32/thinkpad-acpi-r52-brightness_mode-has-been-confirmed.patch
new file mode 100644 (file)
index 0000000..baeb553
--- /dev/null
@@ -0,0 +1,41 @@
+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),
diff --git a/queue-2.6.32/usb-fix-crash-in-uhci_scan_schedule.patch b/queue-2.6.32/usb-fix-crash-in-uhci_scan_schedule.patch
new file mode 100644 (file)
index 0000000..d315543
--- /dev/null
@@ -0,0 +1,59 @@
+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);
diff --git a/queue-2.6.32/usb-fix-the-idproduct-value-for-usb-3.0-root-hubs.patch b/queue-2.6.32/usb-fix-the-idproduct-value-for-usb-3.0-root-hubs.patch
new file mode 100644 (file)
index 0000000..eda108c
--- /dev/null
@@ -0,0 +1,31 @@
+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; */
diff --git a/queue-2.6.32/usb-ftdi_sio-isolate-all-device-ids-to-new-ftdi_sio_ids.h-header.patch b/queue-2.6.32/usb-ftdi_sio-isolate-all-device-ids-to-new-ftdi_sio_ids.h-header.patch
new file mode 100644 (file)
index 0000000..3981541
--- /dev/null
@@ -0,0 +1,1986 @@
+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
++
diff --git a/queue-2.6.32/usb-ftdi_sio-sort-pid-vid-entries-in-new-ftdi_sio_ids.h-header.patch b/queue-2.6.32/usb-ftdi_sio-sort-pid-vid-entries-in-new-ftdi_sio_ids.h-header.patch
new file mode 100644 (file)
index 0000000..50dbe6b
--- /dev/null
@@ -0,0 +1,1718 @@
+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 */
diff --git a/queue-2.6.32/usb-move-hcd-free_dev-call-into-usb_disconnect-to-fix-oops.patch b/queue-2.6.32/usb-move-hcd-free_dev-call-into-usb_disconnect-to-fix-oops.patch
new file mode 100644 (file)
index 0000000..03176f5
--- /dev/null
@@ -0,0 +1,94 @@
+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);
diff --git a/queue-2.6.32/usb-remove-debugging-message-for-uevent-constructions.patch b/queue-2.6.32/usb-remove-debugging-message-for-uevent-constructions.patch
new file mode 100644 (file)
index 0000000..62fe39d
--- /dev/null
@@ -0,0 +1,39 @@
+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;
+       }
diff --git a/queue-2.6.32/usb-xhci-fix-finding-extended-capabilities-registers.patch b/queue-2.6.32/usb-xhci-fix-finding-extended-capabilities-registers.patch
new file mode 100644 (file)
index 0000000..eb6d351
--- /dev/null
@@ -0,0 +1,43 @@
+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;
+       /*
diff --git a/queue-2.6.32/x86-add-imac9-1-to-pci_reboot_dmi_table.patch b/queue-2.6.32/x86-add-imac9-1-to-pci_reboot_dmi_table.patch
new file mode 100644 (file)
index 0000000..5449caf
--- /dev/null
@@ -0,0 +1,39 @@
+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"),
++              },
++      },
+       { }
+ };
diff --git a/queue-2.6.32/x86-avoid-race-condition-in-pci_enable_msix.patch b/queue-2.6.32/x86-avoid-race-condition-in-pci_enable_msix.patch
new file mode 100644 (file)
index 0000000..b0f9109
--- /dev/null
@@ -0,0 +1,215 @@
+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
diff --git a/queue-2.6.32/x86-fix-sci-on-ioapic-0.patch b/queue-2.6.32/x86-fix-sci-on-ioapic-0.patch
new file mode 100644 (file)
index 0000000..5ff287c
--- /dev/null
@@ -0,0 +1,139 @@
+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,
diff --git a/queue-2.6.32/x86-ia32_aout-do-not-kill-argument-mapping.patch b/queue-2.6.32/x86-ia32_aout-do-not-kill-argument-mapping.patch
new file mode 100644 (file)
index 0000000..7c2ee1f
--- /dev/null
@@ -0,0 +1,42 @@
+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;
diff --git a/queue-2.6.32/x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch b/queue-2.6.32/x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch
new file mode 100644 (file)
index 0000000..c736c0a
--- /dev/null
@@ -0,0 +1,79 @@
+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