aboutsummaryrefslogtreecommitdiffstats
path: root/usb.current
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2009-06-23 15:44:58 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-23 15:44:58 -0700
commit5d5d193f7d75d30ae848a96129cb521b41f62693 (patch)
tree1280928a5f26ab9714ba0271d00ec141a50ebce3 /usb.current
parent542fc82d283978333985aa403c4638e44698bacf (diff)
downloadpatches-5d5d193f7d75d30ae848a96129cb521b41f62693.tar.gz
start working on my to-apply queue
Diffstat (limited to 'usb.current')
-rw-r--r--usb.current/usb-ehci-update-toggle-state-for-linked-qhs.patch134
-rw-r--r--usb.current/usb-fhci-mutually-exclusive-port_status.patch46
-rw-r--r--usb.current/usb-ftdi_sio-product-id-s-for-ccs-pic-programmers.patch46
-rw-r--r--usb.current/usb-gadget-fix-imx_udc-entry-in-kconfig.patch76
-rw-r--r--usb.current/usb-isp1760-use-__devexit_p-for-remove-function.patch29
-rw-r--r--usb.current/usb-option.c-add-qualcomm-option-icon-210-modem.patch30
-rw-r--r--usb.current/usb-option.c-to-support-qisda-h21-h20-usb-modem.patch46
-rw-r--r--usb.current/usb-pl2303-new-vendor-and-product-id-for-the-prolific-driver.patch44
8 files changed, 451 insertions, 0 deletions
diff --git a/usb.current/usb-ehci-update-toggle-state-for-linked-qhs.patch b/usb.current/usb-ehci-update-toggle-state-for-linked-qhs.patch
new file mode 100644
index 00000000000000..635a14f9593494
--- /dev/null
+++ b/usb.current/usb-ehci-update-toggle-state-for-linked-qhs.patch
@@ -0,0 +1,134 @@
+From stern@rowland.harvard.edu Tue Jun 23 14:59:05 2009
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Thu, 11 Jun 2009 14:56:22 -0400 (EDT)
+Subject: USB: EHCI: update toggle state for linked QHs
+To: Greg KH <gregkh@suse.de>
+Cc: David Brownell <david-b@pacbell.net>, David <david@unsolicited.net>
+Message-ID: <Pine.LNX.4.44L0.0906111452080.4875-100000@iolanthe.rowland.org>
+
+
+This is an update to the "usb-ehci-update-toggle-state-for-linked-qhs"
+patch. Since an HCD's endpoint_reset method can be called in
+interrupt context, it mustn't assume that interrupts are enabled or
+that it can sleep.
+
+So we revert to the original way of refreshing QHs' toggle bits. Now
+the endpoint_reset method merely clears the toggle flag in the device
+structure (as was done before) and starts an async QH unlink. When the
+QH is linked again, after the unlink finishes and an URB is queued,
+the qh_refresh() routine will update the QH's toggle bit.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: David <david@unsolicited.net>
+CC: David Brownell <david-b@pacbell.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/usb/host/ehci-hcd.c | 35 ++++++++++++++++-------------------
+ drivers/usb/host/ehci-q.c | 19 ++++++++++++++++++-
+ 2 files changed, 34 insertions(+), 20 deletions(-)
+
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -1030,12 +1030,14 @@ ehci_endpoint_reset(struct usb_hcd *hcd,
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+ struct ehci_qh *qh;
+ int eptype = usb_endpoint_type(&ep->desc);
++ int epnum = usb_endpoint_num(&ep->desc);
++ int is_out = usb_endpoint_dir_out(&ep->desc);
++ unsigned long flags;
+
+ if (eptype != USB_ENDPOINT_XFER_BULK && eptype != USB_ENDPOINT_XFER_INT)
+ return;
+
+- rescan:
+- spin_lock_irq(&ehci->lock);
++ spin_lock_irqsave(&ehci->lock, flags);
+ qh = ep->hcpriv;
+
+ /* For Bulk and Interrupt endpoints we maintain the toggle state
+@@ -1044,29 +1046,24 @@ ehci_endpoint_reset(struct usb_hcd *hcd,
+ * the toggle bit in the QH.
+ */
+ if (qh) {
++ usb_settoggle(qh->dev, epnum, is_out, 0);
+ if (!list_empty(&qh->qtd_list)) {
+ WARN_ONCE(1, "clear_halt for a busy endpoint\n");
+- } else if (qh->qh_state == QH_STATE_IDLE) {
+- qh->hw_token &= ~cpu_to_hc32(ehci, QTD_TOGGLE);
+- } else {
+- /* It's not safe to write into the overlay area
+- * while the QH is active. Unlink it first and
+- * wait for the unlink to complete.
++ } else if (qh->qh_state == QH_STATE_LINKED) {
++
++ /* The toggle value in the QH can't be updated
++ * while the QH is active. Unlink it now;
++ * re-linking will call qh_refresh().
+ */
+- if (qh->qh_state == QH_STATE_LINKED) {
+- if (eptype == USB_ENDPOINT_XFER_BULK) {
+- unlink_async(ehci, qh);
+- } else {
+- intr_deschedule(ehci, qh);
+- (void) qh_schedule(ehci, qh);
+- }
++ if (eptype == USB_ENDPOINT_XFER_BULK) {
++ unlink_async(ehci, qh);
++ } else {
++ intr_deschedule(ehci, qh);
++ (void) qh_schedule(ehci, qh);
+ }
+- spin_unlock_irq(&ehci->lock);
+- schedule_timeout_uninterruptible(1);
+- goto rescan;
+ }
+ }
+- spin_unlock_irq(&ehci->lock);
++ spin_unlock_irqrestore(&ehci->lock, flags);
+ }
+
+ static int ehci_get_frame (struct usb_hcd *hcd)
+--- a/drivers/usb/host/ehci-q.c
++++ b/drivers/usb/host/ehci-q.c
+@@ -93,6 +93,22 @@ qh_update (struct ehci_hcd *ehci, struct
+ qh->hw_qtd_next = QTD_NEXT(ehci, qtd->qtd_dma);
+ qh->hw_alt_next = EHCI_LIST_END(ehci);
+
++ /* Except for control endpoints, we make hardware maintain data
++ * toggle (like OHCI) ... here (re)initialize the toggle in the QH,
++ * and set the pseudo-toggle in udev. Only usb_clear_halt() will
++ * ever clear it.
++ */
++ if (!(qh->hw_info1 & cpu_to_hc32(ehci, 1 << 14))) {
++ unsigned is_out, epnum;
++
++ is_out = !(qtd->hw_token & cpu_to_hc32(ehci, 1 << 8));
++ epnum = (hc32_to_cpup(ehci, &qh->hw_info1) >> 8) & 0x0f;
++ if (unlikely (!usb_gettoggle (qh->dev, epnum, is_out))) {
++ qh->hw_token &= ~cpu_to_hc32(ehci, QTD_TOGGLE);
++ usb_settoggle (qh->dev, epnum, is_out, 1);
++ }
++ }
++
+ /* HC must see latest qtd and qh data before we clear ACTIVE+HALT */
+ wmb ();
+ qh->hw_token &= cpu_to_hc32(ehci, QTD_TOGGLE | QTD_STS_PING);
+@@ -834,6 +850,7 @@ done:
+ qh->qh_state = QH_STATE_IDLE;
+ qh->hw_info1 = cpu_to_hc32(ehci, info1);
+ qh->hw_info2 = cpu_to_hc32(ehci, info2);
++ usb_settoggle (urb->dev, usb_pipeendpoint (urb->pipe), !is_input, 1);
+ qh_refresh (ehci, qh);
+ return qh;
+ }
+@@ -864,7 +881,7 @@ static void qh_link_async (struct ehci_h
+ }
+ }
+
+- /* clear halt and maybe recover from silicon quirk */
++ /* clear halt and/or toggle; and maybe recover from silicon quirk */
+ if (qh->qh_state == QH_STATE_IDLE)
+ qh_refresh (ehci, qh);
+
diff --git a/usb.current/usb-fhci-mutually-exclusive-port_status.patch b/usb.current/usb-fhci-mutually-exclusive-port_status.patch
new file mode 100644
index 00000000000000..d5ecec774c133f
--- /dev/null
+++ b/usb.current/usb-fhci-mutually-exclusive-port_status.patch
@@ -0,0 +1,46 @@
+From akpm@linux-foundation.org Tue Jun 23 14:50:48 2009
+From: Roel Kluin <roel.kluin@gmail.com>
+Date: Wed, 10 Jun 2009 12:57:35 -0700
+Subject: USB: fhci: mutually exclusive port_status
+To: greg@kroah.com
+Cc: linux-usb@vger.kernel.org, akpm@linux-foundation.org, roel.kluin@gmail.com, avorontsov@ru.mvista.com, gregkh@suse.de
+Message-ID: <200906101957.n5AJvZGX010533@imap1.linux-foundation.org>
+
+
+From: Roel Kluin <roel.kluin@gmail.com>
+
+FHCI_PORT_DISABLED, -LOW and -FULL are mutually exclusive as status.
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Cc: Anton Vorontsov <avorontsov@ru.mvista.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/fhci-sched.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/usb/host/fhci-sched.c
++++ b/drivers/usb/host/fhci-sched.c
+@@ -576,9 +576,7 @@ irqreturn_t fhci_irq(struct usb_hcd *hcd
+ out_be16(&usb->fhci->regs->usb_event,
+ usb->saved_msk);
+ } else if (usb->port_status == FHCI_PORT_DISABLED) {
+- if (fhci_ioports_check_bus_state(fhci) == 1 &&
+- usb->port_status != FHCI_PORT_LOW &&
+- usb->port_status != FHCI_PORT_FULL)
++ if (fhci_ioports_check_bus_state(fhci) == 1)
+ fhci_device_connected_interrupt(fhci);
+ }
+ usb_er &= ~USB_E_RESET_MASK;
+@@ -605,9 +603,7 @@ irqreturn_t fhci_irq(struct usb_hcd *hcd
+ }
+
+ if (usb_er & USB_E_IDLE_MASK) {
+- if (usb->port_status == FHCI_PORT_DISABLED &&
+- usb->port_status != FHCI_PORT_LOW &&
+- usb->port_status != FHCI_PORT_FULL) {
++ if (usb->port_status == FHCI_PORT_DISABLED) {
+ usb_er &= ~USB_E_RESET_MASK;
+ fhci_device_connected_interrupt(fhci);
+ } else if (usb->port_status ==
diff --git a/usb.current/usb-ftdi_sio-product-id-s-for-ccs-pic-programmers.patch b/usb.current/usb-ftdi_sio-product-id-s-for-ccs-pic-programmers.patch
new file mode 100644
index 00000000000000..28d263c5959d60
--- /dev/null
+++ b/usb.current/usb-ftdi_sio-product-id-s-for-ccs-pic-programmers.patch
@@ -0,0 +1,46 @@
+From jan@ccsinfo.com Tue Jun 23 14:49:44 2009
+From: Jan Capek <jan@ccsinfo.com>
+Date: Wed, 10 Jun 2009 18:58:52 +0200
+Subject: USB: ftdi_sio - product ID's for CCS PIC programmers
+To: linux-usb@vger.kernel.org
+Cc: steven@ccsinfo.com, Jan Capek <jan@ccsinfo.com>
+Message-ID: <1244653132-32254-2-git-send-email-jan@ccsinfo.com>
+
+
+The product ID's for the following devices have been added:
+- LOAD-n-GO
+- ICD-U64
+- PRIME-8
+
+Signed-off-by: Jan Capek <jan@ccsinfo.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 3 +++
+ drivers/usb/serial/ftdi_sio.h | 3 +++
+ 2 files changed, 6 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -579,6 +579,9 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(FTDI_VID, FTDI_CCSICDU20_0_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_CCSICDU40_1_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_CCSMACHX_2_PID) },
++ { USB_DEVICE(FTDI_VID, FTDI_CCSLOAD_N_GO_3_PID) },
++ { USB_DEVICE(FTDI_VID, FTDI_CCSICDU64_4_PID) },
++ { USB_DEVICE(FTDI_VID, FTDI_CCSPRIME8_5_PID) },
+ { USB_DEVICE(FTDI_VID, INSIDE_ACCESSO) },
+ { USB_DEVICE(INTREPID_VID, INTREPID_VALUECAN_PID) },
+ { USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
+--- a/drivers/usb/serial/ftdi_sio.h
++++ b/drivers/usb/serial/ftdi_sio.h
+@@ -614,6 +614,9 @@
+ #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
diff --git a/usb.current/usb-gadget-fix-imx_udc-entry-in-kconfig.patch b/usb.current/usb-gadget-fix-imx_udc-entry-in-kconfig.patch
new file mode 100644
index 00000000000000..ea4ea1847dd686
--- /dev/null
+++ b/usb.current/usb-gadget-fix-imx_udc-entry-in-kconfig.patch
@@ -0,0 +1,76 @@
+From paulius.zaleckas@teltonika.lt Tue Jun 23 14:46:30 2009
+From: Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
+Date: Tue, 09 Jun 2009 11:11:16 +0300
+Subject: USB: gadget: fix imx_udc entry in Kconfig
+To: linux-usb@vger.kernel.org
+Message-ID: <20090609081115.7553.89639.stgit@Programuotojas>
+
+
+Move USB_GADGET_IMX to the right section of Kconfig as this
+controller is available only as integrated on i.MX CPU.
+
+Signed-off-by: Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/Kconfig | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
+
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -286,6 +286,27 @@ config USB_S3C_HSOTG
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+
++config USB_GADGET_IMX
++ boolean "Freescale IMX USB Peripheral Controller"
++ depends on ARCH_MX1
++ help
++ Freescale's IMX series include an integrated full speed
++ USB 1.1 device controller. The controller in the IMX series
++ is register-compatible.
++
++ It has Six fixed-function endpoints, as well as endpoint
++ zero (for control transfers).
++
++ Say "y" to link the driver statically, or "m" to build a
++ dynamically linked module called "imx_udc" and force all
++ gadget drivers to also be dynamically linked.
++
++config USB_IMX
++ tristate
++ depends on USB_GADGET_IMX
++ default USB_GADGET
++ select USB_GADGET_SELECTED
++
+ config USB_GADGET_S3C2410
+ boolean "S3C2410 USB Device Controller"
+ depends on ARCH_S3C2410
+@@ -321,27 +342,6 @@ config USB_GADGET_MUSB_HDRC
+ This OTG-capable silicon IP is used in dual designs including
+ the TI DaVinci, OMAP 243x, OMAP 343x, TUSB 6010, and ADI Blackfin
+
+-config USB_GADGET_IMX
+- boolean "Freescale IMX USB Peripheral Controller"
+- depends on ARCH_MX1
+- help
+- Freescale's IMX series include an integrated full speed
+- USB 1.1 device controller. The controller in the IMX series
+- is register-compatible.
+-
+- It has Six fixed-function endpoints, as well as endpoint
+- zero (for control transfers).
+-
+- Say "y" to link the driver statically, or "m" to build a
+- dynamically linked module called "imx_udc" and force all
+- gadget drivers to also be dynamically linked.
+-
+-config USB_IMX
+- tristate
+- depends on USB_GADGET_IMX
+- default USB_GADGET
+- select USB_GADGET_SELECTED
+-
+ config USB_GADGET_M66592
+ boolean "Renesas M66592 USB Peripheral Controller"
+ select USB_GADGET_DUALSPEED
diff --git a/usb.current/usb-isp1760-use-__devexit_p-for-remove-function.patch b/usb.current/usb-isp1760-use-__devexit_p-for-remove-function.patch
new file mode 100644
index 00000000000000..4ce5f6678f2584
--- /dev/null
+++ b/usb.current/usb-isp1760-use-__devexit_p-for-remove-function.patch
@@ -0,0 +1,29 @@
+From vapier@gentoo.org Tue Jun 23 14:59:34 2009
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Thu, 11 Jun 2009 21:59:00 -0400
+Subject: USB: isp1760: use __devexit_p() for remove function
+To: linux-usb@vger.kernel.org
+Message-ID: <1244771940-15276-1-git-send-email-vapier@gentoo.org>
+
+
+The isp1760_plat_remove function is declared with __devexit, so the
+.remove assignment needs to be wrapped with __devexit_p().
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/isp1760-if.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/isp1760-if.c
++++ b/drivers/usb/host/isp1760-if.c
+@@ -361,7 +361,7 @@ static int __devexit isp1760_plat_remove
+
+ static struct platform_driver isp1760_plat_driver = {
+ .probe = isp1760_plat_probe,
+- .remove = isp1760_plat_remove,
++ .remove = __devexit_p(isp1760_plat_remove),
+ .driver = {
+ .name = "isp1760",
+ },
diff --git a/usb.current/usb-option.c-add-qualcomm-option-icon-210-modem.patch b/usb.current/usb-option.c-add-qualcomm-option-icon-210-modem.patch
new file mode 100644
index 00000000000000..7720a495b30dac
--- /dev/null
+++ b/usb.current/usb-option.c-add-qualcomm-option-icon-210-modem.patch
@@ -0,0 +1,30 @@
+From kaie@kuix.de Tue Jun 23 15:00:11 2009
+From: Kai Engert <kaie@kuix.de>
+Date: Fri, 12 Jun 2009 08:51:37 +0200
+Subject: USB: option.c: add Qualcomm/Option iCON 210 modem
+Message-ID: <4A31FAF9.7000500@kuix.de>
+
+
+Add modem portion of USB device labeled:
+Model iCON 210, Qualcomm 3G HSDPA, designed in EU by Option
+
+Device starts in usb-storage mode (1e0e:f000) and requires the use of a tool
+like usb_modeswitch to switch it to modem mode (1e0e:9000).
+
+Signed-off-by: Kai Engert <kaie@kuix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -531,6 +531,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
+ { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
+ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
++ { USB_DEVICE(0x1e0e, 0x9000) },
+ { } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, option_ids);
diff --git a/usb.current/usb-option.c-to-support-qisda-h21-h20-usb-modem.patch b/usb.current/usb-option.c-to-support-qisda-h21-h20-usb-modem.patch
new file mode 100644
index 00000000000000..e3a80b7e14116d
--- /dev/null
+++ b/usb.current/usb-option.c-to-support-qisda-h21-h20-usb-modem.patch
@@ -0,0 +1,46 @@
+From Brad.Lu@Qisda.com Tue Jun 23 15:03:06 2009
+From: "Brad Lu" <Brad.Lu@Qisda.com>
+Date: Tue, 16 Jun 2009 18:04:00 +0800
+Subject: USB: option.c to support Qisda H21/H20 usb modem
+Message-ID: <FC3A70CA9A615C47B4A175DB6C4B395FD26BA6@QTT-MSV10.Qisda.qcorp.com>
+
+From: Brad Lu <Brad.Lu@Qisda.com>
+
+
+This patch added Qisda(VID) & H21/H20(PID) into to supporting list.
+Please help to check this patch,
+
+From: Brad Lu <Brad.Lu@Qisda.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -307,6 +307,12 @@ static int option_resume(struct usb_ser
+ #define DLINK_VENDOR_ID 0x1186
+ #define DLINK_PRODUCT_DWM_652 0x3e04
+
++#define QISDA_VENDOR_ID 0x1da5
++#define QISDA_PRODUCT_H21_4512 0x4512
++#define QISDA_PRODUCT_H21_4523 0x4523
++#define QISDA_PRODUCT_H20_4515 0x4515
++#define QISDA_PRODUCT_H20_4519 0x4519
++
+
+ /* TOSHIBA PRODUCTS */
+ #define TOSHIBA_VENDOR_ID 0x0930
+@@ -529,7 +535,10 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
+ { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
+ { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
+- { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
++ { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
++ { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
++ { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
++ { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4519) },
+ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
+ { USB_DEVICE(0x1e0e, 0x9000) },
+ { } /* Terminating entry */
diff --git a/usb.current/usb-pl2303-new-vendor-and-product-id-for-the-prolific-driver.patch b/usb.current/usb-pl2303-new-vendor-and-product-id-for-the-prolific-driver.patch
new file mode 100644
index 00000000000000..7fe478443d215e
--- /dev/null
+++ b/usb.current/usb-pl2303-new-vendor-and-product-id-for-the-prolific-driver.patch
@@ -0,0 +1,44 @@
+From gianpaoloc@gmail.com Tue Jun 23 14:43:34 2009
+From: Gianpaolo Cugola <gianpaoloc@gmail.com>
+Date: Fri, 5 Jun 2009 22:57:52 +0200
+Subject: USB: pl2303: New vendor and product id for the prolific driver
+To: greg@kroah.com
+Message-ID: <9f576be20906051357h5e5098dcs62af11999cf5f13e@mail.gmail.com>
+
+
+I recently bought a PC interface for the Cressi Edy dive computer
+(www.cressi.it) and discovered that it uses the pl2303 chip, albeit
+with ad-hoc vendor and product ids (04b8, 0521 respectively). Being in
+the process of writing a linux software for such device (cressi only
+provides a windows software), I patched the pl2303 linux driver to
+have the interface recognized. I am submitting you the patch (very
+basic) for inclusion in next kernel version.
+
+From: Gianpaolo Cugola <gianpaoloc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/pl2303.c | 1 +
+ drivers/usb/serial/pl2303.h | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+--- a/drivers/usb/serial/pl2303.c
++++ b/drivers/usb/serial/pl2303.c
+@@ -94,6 +94,7 @@ static struct usb_device_id id_table []
+ { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
+ { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
+ { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
++ { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
+ { } /* Terminating entry */
+ };
+
+--- a/drivers/usb/serial/pl2303.h
++++ b/drivers/usb/serial/pl2303.h
+@@ -122,3 +122,7 @@
+ /* Hewlett-Packard LD220-HP POS Pole Display */
+ #define HP_VENDOR_ID 0x03f0
+ #define HP_LD220_PRODUCT_ID 0x3524
++
++/* Cressi Edy (diving computer) PC interface */
++#define CRESSI_VENDOR_ID 0x04b8
++#define CRESSI_EDY_PRODUCT_ID 0x0521