diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-09 14:39:40 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-09 14:39:40 -0700 |
| commit | 0b0d76808c93ad76a821911d6f61b78504c89daa (patch) | |
| tree | 2863a45e35806f553efc65d3d5d214538bb0f81c | |
| parent | fc6b0da4c92622de48899b7318a35a3be4cfe3f3 (diff) | |
| download | patches-0b0d76808c93ad76a821911d6f61b78504c89daa.tar.gz | |
usb patches
10 files changed, 290 insertions, 15 deletions
@@ -24,6 +24,11 @@ usb.current/usb-expose-vendor-specific-acm-channel-on-nokia-5230.patch usb.current/usb-s3c2410_udc-be-aware-of-connected-gadget-driver.patch usb.current/usb-ftdi_sio-support-for-signalyzer-tools-based-on-ftdi-chips.patch usb.current/usb-new-pids-for-qualcomm-gobi-2000-qcserial.patch +usb.current/usb-option-add-support-for-amoi-skypephone-s2.patch +usb.current/usb-xhci-fix-another-bug-in-link-trb-activation-change.patch +usb.current/usb-fix-usb3.0-port-speed-downgrade-after-port-reset.patch +usb.current/usb-xhci-set-ep0-dequeue-ptr-after-reset-of-configured-device.patch +usb.current/usb-adds-artisman-usb-dongle-to-list-of-quirky-devices.patch ################################# # Staging patches for 2.6.35 diff --git a/usb.current/usb-adds-artisman-usb-dongle-to-list-of-quirky-devices.patch b/usb.current/usb-adds-artisman-usb-dongle-to-list-of-quirky-devices.patch new file mode 100644 index 00000000000000..0144f0926c49d9 --- /dev/null +++ b/usb.current/usb-adds-artisman-usb-dongle-to-list-of-quirky-devices.patch @@ -0,0 +1,42 @@ +From mortier@btinternet.com Fri Jul 9 14:33:39 2010 +From: Paul Mortier <mortier@btinternet.com> +Date: Fri, 09 Jul 2010 13:18:50 +0100 +Subject: USB: adds Artisman USB dongle to list of quirky devices +To: linux-usb@vger.kernel.org +Cc: gregkh@suse.de +Message-ID: <4C3713AA.3010008@btinternet.com> + + +From: Paul Mortier <mortier@btinternet.com> + +When an attempt is made to read the interface strings of the Artisman +Watchdog USB dongle (idVendor:idProduct 04b4:0526) an error is written +to the dmesg log (uhci_result_common: failed with status 440000) and the +dongle resets itself, resulting in a disconnect/reconnect loop. + +Adding the dongle to the list of devices in quirks.c, with the same +quirk Alan Stern's previous patch for the Saitek Cyborg Gold 3D +joystick, stops the device from resetting and allows it to be used with +no problems. + +Signed-off-by: Paul Mortier <mortier@btinternet.com> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/quirks.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -41,6 +41,10 @@ static const struct usb_device_id usb_qu + /* Philips PSC805 audio device */ + { USB_DEVICE(0x0471, 0x0155), .driver_info = USB_QUIRK_RESET_RESUME }, + ++ /* Artisman Watchdog Dongle */ ++ { USB_DEVICE(0x04b4, 0x0526), .driver_info = ++ USB_QUIRK_CONFIG_INTF_STRINGS }, ++ + /* Roland SC-8820 */ + { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, + diff --git a/usb.current/usb-fix-usb3.0-port-speed-downgrade-after-port-reset.patch b/usb.current/usb-fix-usb3.0-port-speed-downgrade-after-port-reset.patch new file mode 100644 index 00000000000000..6909ae68410866 --- /dev/null +++ b/usb.current/usb-fix-usb3.0-port-speed-downgrade-after-port-reset.patch @@ -0,0 +1,44 @@ +From sarah.a.sharp@linux.intel.com Fri Jul 9 14:32:54 2010 +From: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Date: Fri, 9 Jul 2010 17:08:48 +0200 +Subject: USB: Fix USB3.0 Port Speed Downgrade after port reset +To: Greg KH <gregkh@suse.de> +Cc: linux-usb@vger.kernel.org, Fajun Chen <fajun.chen@seagate.com> +Message-ID: <20100709150846.GA3252@xanatos> +Content-Disposition: inline + + +Without this fix, a USB 3.0 port is downgraded to full speed after a port +reset of a configured device. The USB 3.0 terminations will be disabled +permanently, and USB 3.0 devices will always enumerate as full speed +devices, until the host controller is unplugged (if it is an ExpressCard) +or the computer is rebooted. + +Fajun Chen traced this traced the speed downgrade issue to the port reset +and the interpretation of port status in USB hub driver code. The hub +code was not testing for the port being a SuperSpeed port, and it fell +through to the else case of Full Speed. + +The following patch adds SuperSpeed mapping from the port status, and +fixes the speed downgrade issue. + +Reported-by: Fajun Chen <fajun.chen@seagate.com> +Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/hub.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -1982,6 +1982,8 @@ static int hub_port_wait_reset(struct us + (portstatus & USB_PORT_STAT_ENABLE)) { + if (hub_is_wusb(hub)) + udev->speed = USB_SPEED_WIRELESS; ++ else if (portstatus & USB_PORT_STAT_SUPER_SPEED) ++ udev->speed = USB_SPEED_SUPER; + else if (portstatus & USB_PORT_STAT_HIGH_SPEED) + udev->speed = USB_SPEED_HIGH; + else if (portstatus & USB_PORT_STAT_LOW_SPEED) diff --git a/usb.current/usb-option-add-support-for-amoi-skypephone-s2.patch b/usb.current/usb-option-add-support-for-amoi-skypephone-s2.patch new file mode 100644 index 00000000000000..b061d42071a7a1 --- /dev/null +++ b/usb.current/usb-option-add-support-for-amoi-skypephone-s2.patch @@ -0,0 +1,39 @@ +From d.g.jansen@googlemail.com Fri Jul 9 14:30:36 2010 +From: "Dennis Jansen" <d.g.jansen@googlemail.com> +Date: Fri, 09 Jul 2010 22:03:53 +0200 +Subject: USB: option: Add support for AMOI Skypephone S2 +To: greg@kroah.com +Message-ID: <op.vfld0rlf01mn9a@netbook> + + +usbserial: Add AMOI Skypephone S2 support. + +This patch adds support for the AMOI Skypephone S2 to the usbserial module. + +Tested-by: Dennis Jansen <Dennis.Jansen@web.de> +Signed-off-by: Dennis Jansen <Dennis.Jansen@web.de> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -206,6 +206,7 @@ static void option_instat_callback(struc + #define AMOI_PRODUCT_H01 0x0800 + #define AMOI_PRODUCT_H01A 0x7002 + #define AMOI_PRODUCT_H02 0x0802 ++#define AMOI_PRODUCT_SKYPEPHONE_S2 0x0407 + + #define DELL_VENDOR_ID 0x413C + +@@ -517,6 +518,7 @@ static const struct usb_device_id option + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, ++ { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_SKYPEPHONE_S2) }, + + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ diff --git a/usb.current/usb-xhci-fix-another-bug-in-link-trb-activation-change.patch b/usb.current/usb-xhci-fix-another-bug-in-link-trb-activation-change.patch new file mode 100644 index 00000000000000..b655843c2ff33d --- /dev/null +++ b/usb.current/usb-xhci-fix-another-bug-in-link-trb-activation-change.patch @@ -0,0 +1,57 @@ +From sarah.a.sharp@linux.intel.com Fri Jul 9 14:32:26 2010 +From: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Date: Fri, 9 Jul 2010 17:08:38 +0200 +Subject: USB: xHCI: Fix another bug in link TRB activation change. +To: Greg KH <gregkh@suse.de> +Cc: linux-usb@vger.kernel.org, Fajun Chen <fajun.chen@seagate.com> +Message-ID: <20100709150837.GA2987@xanatos> +Content-Disposition: inline + + +Commit 6c12db90f19727c76990e7f4801c67a148b30111 also seems to have +introduced a bug that is triggered when the command ring is about to wrap. +The inc_enq() function will not have moved the enqueue pointer past the +link TRB. It is supposed to be moved past the link TRB in prepare_ring(), +which should be called before a TD is enqueued. However, the +queue_command() function never calls the prepare_ring() function because +prepare_ring() is only supposed to be used for endpoint rings. That means +the enqueue pointer will not be moved past the link TRB, and will get +overwritten. + +The fix is to make queue_command() call prepare_ring() with a fake +endpoint status (set to running). Then the enqueue pointer will get moved +past the link TRB. + +Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/xhci-ring.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -2380,16 +2380,19 @@ static int queue_command(struct xhci_hcd + u32 field3, u32 field4, bool command_must_succeed) + { + int reserved_trbs = xhci->cmd_ring_reserved_trbs; ++ int ret; ++ + if (!command_must_succeed) + reserved_trbs++; + +- if (!room_on_ring(xhci, xhci->cmd_ring, reserved_trbs)) { +- if (!in_interrupt()) +- xhci_err(xhci, "ERR: No room for command on command ring\n"); ++ ret = prepare_ring(xhci, xhci->cmd_ring, EP_STATE_RUNNING, ++ reserved_trbs, GFP_ATOMIC); ++ if (ret < 0) { ++ xhci_err(xhci, "ERR: No room for command on command ring\n"); + if (command_must_succeed) + xhci_err(xhci, "ERR: Reserved TRB counting for " + "unfailable commands failed.\n"); +- return -ENOMEM; ++ return ret; + } + queue_trb(xhci, xhci->cmd_ring, false, false, field1, field2, field3, + field4 | xhci->cmd_ring->cycle_state); diff --git a/usb.current/usb-xhci-set-ep0-dequeue-ptr-after-reset-of-configured-device.patch b/usb.current/usb-xhci-set-ep0-dequeue-ptr-after-reset-of-configured-device.patch new file mode 100644 index 00000000000000..90217537686f4c --- /dev/null +++ b/usb.current/usb-xhci-set-ep0-dequeue-ptr-after-reset-of-configured-device.patch @@ -0,0 +1,88 @@ +From sarah.a.sharp@linux.intel.com Fri Jul 9 14:33:25 2010 +From: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Date: Fri, 9 Jul 2010 17:08:54 +0200 +Subject: USB: xhci: Set EP0 dequeue ptr after reset of configured device. +To: Greg KH <gregkh@suse.de> +Cc: linux-usb@vger.kernel.org, Fajun Chen <fajun.chen@seagate.com>, stable@vger.kernel.org +Message-ID: <20100709150854.GA3804@xanatos> +Content-Disposition: inline + + +When a configured device is reset, the control endpoint's ring is reused. +If control transfers to the device were issued before the device is reset, +the dequeue pointer will be somewhere in the middle of the ring. If the +device is then issued an address with the set address command, the xHCI +driver must provide a valid input context for control endpoint zero. + +The original code would give the hardware the original input context, +which had a dequeue pointer set to the top of the ring. This would cause +the host to re-execute any control transfers until it reached the ring's +enqueue pointer. When issuing a set address command for a device that has +just been configured and then reset, use the control endpoint's enqueue +pointer as the hardware's dequeue pointer. + +Assumption: All control transfers will be completed or cancelled before +the set address command is issued to the device. If there are any +outstanding control transfers, this code will not work. + +Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/xhci-mem.c | 21 +++++++++++++++++++++ + drivers/usb/host/xhci.c | 2 ++ + drivers/usb/host/xhci.h | 2 ++ + 3 files changed, 25 insertions(+) + +--- a/drivers/usb/host/xhci-mem.c ++++ b/drivers/usb/host/xhci-mem.c +@@ -835,6 +835,27 @@ fail: + return 0; + } + ++void xhci_copy_ep0_dequeue_into_input_ctx(struct xhci_hcd *xhci, ++ struct usb_device *udev) ++{ ++ struct xhci_virt_device *virt_dev; ++ struct xhci_ep_ctx *ep0_ctx; ++ struct xhci_ring *ep_ring; ++ ++ virt_dev = xhci->devs[udev->slot_id]; ++ ep0_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, 0); ++ ep_ring = virt_dev->eps[0].ring; ++ /* ++ * FIXME we don't keep track of the dequeue pointer very well after a ++ * Set TR dequeue pointer, so we're setting the dequeue pointer of the ++ * host to our enqueue pointer. This should only be called after a ++ * configured device has reset, so all control transfers should have ++ * been completed or cancelled before the reset. ++ */ ++ ep0_ctx->deq = xhci_trb_virt_to_dma(ep_ring->enq_seg, ep_ring->enqueue); ++ ep0_ctx->deq |= ep_ring->cycle_state; ++} ++ + /* Setup an xHCI virtual device for a Set Address command */ + int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *udev) + { +--- a/drivers/usb/host/xhci.c ++++ b/drivers/usb/host/xhci.c +@@ -2134,6 +2134,8 @@ int xhci_address_device(struct usb_hcd * + /* If this is a Set Address to an unconfigured device, setup ep 0 */ + if (!udev->config) + xhci_setup_addressable_virt_dev(xhci, udev); ++ else ++ xhci_copy_ep0_dequeue_into_input_ctx(xhci, udev); + /* Otherwise, assume the core has the device configured how it wants */ + xhci_dbg(xhci, "Slot ID %d Input Context:\n", udev->slot_id); + xhci_dbg_ctx(xhci, virt_dev->in_ctx, 2); +--- a/drivers/usb/host/xhci.h ++++ b/drivers/usb/host/xhci.h +@@ -1292,6 +1292,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, + void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id); + int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id, struct usb_device *udev, gfp_t flags); + int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *udev); ++void xhci_copy_ep0_dequeue_into_input_ctx(struct xhci_hcd *xhci, ++ struct usb_device *udev); + unsigned int xhci_get_endpoint_index(struct usb_endpoint_descriptor *desc); + unsigned int xhci_get_endpoint_flag(struct usb_endpoint_descriptor *desc); + unsigned int xhci_get_endpoint_flag_from_index(unsigned int ep_index); diff --git a/usb/usb-bkl-convert-usb_driver-ioctl-to-unlocked_ioctl.patch b/usb/usb-bkl-convert-usb_driver-ioctl-to-unlocked_ioctl.patch index 1ebadfd8a1c093..3e015a4dd9427f 100644 --- a/usb/usb-bkl-convert-usb_driver-ioctl-to-unlocked_ioctl.patch +++ b/usb/usb-bkl-convert-usb_driver-ioctl-to-unlocked_ioctl.patch @@ -53,7 +53,7 @@ From: Andi Kleen <ak@linux.intel.com> static int hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) { -@@ -3463,7 +3464,7 @@ static struct usb_driver hub_driver = { +@@ -3465,7 +3466,7 @@ static struct usb_driver hub_driver = { .reset_resume = hub_reset_resume, .pre_reset = hub_pre_reset, .post_reset = hub_post_reset, diff --git a/usb/usb-ehci-ehci-1.1-addendum-basic-lpm-feature-support.patch b/usb/usb-ehci-ehci-1.1-addendum-basic-lpm-feature-support.patch index d613de669d90d7..1d136f493bc69e 100644 --- a/usb/usb-ehci-ehci-1.1-addendum-basic-lpm-feature-support.patch +++ b/usb/usb-ehci-ehci-1.1-addendum-basic-lpm-feature-support.patch @@ -29,7 +29,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -2878,7 +2878,9 @@ hub_port_init (struct usb_hub *hub, stru +@@ -2880,7 +2880,9 @@ hub_port_init (struct usb_hub *hub, stru } retval = 0; diff --git a/usb/usb-option-remove-duplicate-amoi_vendor_id.patch b/usb/usb-option-remove-duplicate-amoi_vendor_id.patch index 2d86097f361c0a..8b296490714895 100644 --- a/usb/usb-option-remove-duplicate-amoi_vendor_id.patch +++ b/usb/usb-option-remove-duplicate-amoi_vendor_id.patch @@ -16,20 +16,12 @@ Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- - drivers/usb/serial/option.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) + drivers/usb/serial/option.c | 4 ---- + 1 file changed, 4 deletions(-) --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c -@@ -206,6 +206,7 @@ static void option_instat_callback(struc - #define AMOI_PRODUCT_H01 0x0800 - #define AMOI_PRODUCT_H01A 0x7002 - #define AMOI_PRODUCT_H02 0x0802 -+#define AMOI_PRODUCT_9508 0x0800 - - #define DELL_VENDOR_ID 0x413C - -@@ -263,9 +264,6 @@ static void option_instat_callback(struc +@@ -264,9 +264,6 @@ static void option_instat_callback(struc #define BANDRICH_PRODUCT_1011 0x1011 #define BANDRICH_PRODUCT_1012 0x1012 @@ -39,3 +31,11 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> #define QUALCOMM_VENDOR_ID 0x05C6 #define CMOTECH_VENDOR_ID 0x16d8 +@@ -483,7 +480,6 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, + { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) }, +- { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */ diff --git a/usb/usb-xhci-trivial-use-array_size.patch b/usb/usb-xhci-trivial-use-array_size.patch index 87df12dd957d90..f3596ad17442e7 100644 --- a/usb/usb-xhci-trivial-use-array_size.patch +++ b/usb/usb-xhci-trivial-use-array_size.patch @@ -19,7 +19,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c -@@ -1566,7 +1566,7 @@ static int xhci_check_trb_in_td_math(str +@@ -1587,7 +1587,7 @@ static int xhci_check_trb_in_td_math(str unsigned int num_tests; int i, ret; @@ -28,7 +28,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> for (i = 0; i < num_tests; i++) { ret = xhci_test_trb_in_td(xhci, xhci->event_ring->first_seg, -@@ -1579,7 +1579,7 @@ static int xhci_check_trb_in_td_math(str +@@ -1600,7 +1600,7 @@ static int xhci_check_trb_in_td_math(str return ret; } |
