diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-05-13 15:10:07 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-05-13 15:10:07 -0700 |
| commit | 8378a096efed283bb1366b8b79647836cbc6ac06 (patch) | |
| tree | da34a74e92abeaeb5569bd35f69d8b27fc9c6992 /usb.current | |
| parent | 2054c606d8001c81c24cc0e73ad48755126a17a3 (diff) | |
| download | patches-8378a096efed283bb1366b8b79647836cbc6ac06.tar.gz | |
more patches
Diffstat (limited to 'usb.current')
5 files changed, 386 insertions, 0 deletions
diff --git a/usb.current/usb-atmel_usba_udc-fixes-mostly-disconnect.patch b/usb.current/usb-atmel_usba_udc-fixes-mostly-disconnect.patch new file mode 100644 index 00000000000000..96967426573093 --- /dev/null +++ b/usb.current/usb-atmel_usba_udc-fixes-mostly-disconnect.patch @@ -0,0 +1,151 @@ +From david-b@pacbell.net Tue May 13 14:59:15 2008 +From: David Brownell <david-b@pacbell.net> +Date: Sat, 10 May 2008 22:46:38 -0700 +Subject: USB: atmel_usba_udc fixes, mostly disconnect() +To: Haavard Skinnemoen <hskinnemoen@atmel.com>, Greg KH <greg@kroah.com> +Cc: linux-usb@vger.kernel.org +Message-ID: <200805102246.38950.david-b@pacbell.net> +Content-Disposition: inline + + +Various fixes to Atmel's high speed UDC driver. + + * Issue some missing disconnect() calls. Currently they are only made + when VBUS power goes away (on boards where the driver can sense such + changes), but that's not enough for gadget drivers to clean out all + the state that's needed. Missing calls were: + + - After USB reset, before starting enumeration. + - When unregistering a gadget driver, before unbind(). + + * Don't assume gadget drivers provide disconnect callbacks; make sure + to not call through a null pointer! + + * When the driver doesn't provide an unbind() callback, refuse to + unregister it. + +Also remove two bogus "error" messages: + + * Related to mis-handling of disconnect() ... don't emit error messages + for disconnect() handlers that disable endpoints. All of them should + be doing that; the problem is (unfixed) oddness in atmel_usba_udc. + + * Don't emit a diagnostic for a curious and transient nonfatal error + that shows up sometimes with EP0. + +Those messages spammed syslog, for no good reason. + +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/atmel_usba_udc.c | 48 ++++++++++++++++++++++++++++++------ + 1 file changed, 40 insertions(+), 8 deletions(-) + +--- a/drivers/usb/gadget/atmel_usba_udc.c ++++ b/drivers/usb/gadget/atmel_usba_udc.c +@@ -649,7 +649,13 @@ static int usba_ep_disable(struct usb_ep + + if (!ep->desc) { + spin_unlock_irqrestore(&udc->lock, flags); +- DBG(DBG_ERR, "ep_disable: %s not enabled\n", ep->ep.name); ++ /* REVISIT because this driver disables endpoints in ++ * reset_all_endpoints() before calling disconnect(), ++ * most gadget drivers would trigger this non-error ... ++ */ ++ if (udc->gadget.speed != USB_SPEED_UNKNOWN) ++ DBG(DBG_ERR, "ep_disable: %s not enabled\n", ++ ep->ep.name); + return -EINVAL; + } + ep->desc = NULL; +@@ -1052,6 +1058,12 @@ static void reset_all_endpoints(struct u + request_complete(ep, req, -ECONNRESET); + } + ++ /* NOTE: normally, the next call to the gadget driver is in ++ * charge of disabling endpoints... usually disconnect(). ++ * The exception would be entering a high speed test mode. ++ * ++ * FIXME remove this code ... and retest thoroughly. ++ */ + list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { + if (ep->desc) { + spin_unlock(&udc->lock); +@@ -1219,7 +1231,7 @@ static inline bool feature_is_ep_halt(st + static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep, + struct usb_ctrlrequest *crq) + { +- int retval = 0;; ++ int retval = 0; + + switch (crq->bRequest) { + case USB_REQ_GET_STATUS: { +@@ -1693,6 +1705,14 @@ static irqreturn_t usba_udc_irq(int irq, + usba_writel(udc, INT_CLR, USBA_END_OF_RESET); + reset_all_endpoints(udc); + ++ if (udc->gadget.speed != USB_SPEED_UNKNOWN ++ && udc->driver->disconnect) { ++ udc->gadget.speed = USB_SPEED_UNKNOWN; ++ spin_unlock(&udc->lock); ++ udc->driver->disconnect(&udc->gadget); ++ spin_lock(&udc->lock); ++ } ++ + if (status & USBA_HIGH_SPEED) { + DBG(DBG_BUS, "High-speed bus reset detected\n"); + udc->gadget.speed = USB_SPEED_HIGH; +@@ -1716,9 +1736,13 @@ static irqreturn_t usba_udc_irq(int irq, + | USBA_DET_SUSPEND + | USBA_END_OF_RESUME)); + ++ /* ++ * Unclear why we hit this irregularly, e.g. in usbtest, ++ * but it's clearly harmless... ++ */ + if (!(usba_ep_readl(ep0, CFG) & USBA_EPT_MAPPED)) +- dev_warn(&udc->pdev->dev, +- "WARNING: EP0 configuration is invalid!\n"); ++ dev_dbg(&udc->pdev->dev, ++ "ODD: EP0 configuration is invalid!\n"); + } + + spin_unlock(&udc->lock); +@@ -1751,9 +1775,11 @@ static irqreturn_t usba_vbus_irq(int irq + reset_all_endpoints(udc); + toggle_bias(0); + usba_writel(udc, CTRL, USBA_DISABLE_MASK); +- spin_unlock(&udc->lock); +- udc->driver->disconnect(&udc->gadget); +- spin_lock(&udc->lock); ++ if (udc->driver->disconnect) { ++ spin_unlock(&udc->lock); ++ udc->driver->disconnect(&udc->gadget); ++ spin_lock(&udc->lock); ++ } + } + udc->vbus_prev = vbus; + } +@@ -1825,7 +1851,7 @@ int usb_gadget_unregister_driver(struct + + if (!udc->pdev) + return -ENODEV; +- if (driver != udc->driver) ++ if (driver != udc->driver || !driver->unbind) + return -EINVAL; + + if (udc->vbus_pin != -1) +@@ -1840,6 +1866,12 @@ int usb_gadget_unregister_driver(struct + toggle_bias(0); + usba_writel(udc, CTRL, USBA_DISABLE_MASK); + ++ if (udc->driver->disconnect) { ++ spin_unlock(&udc->lock); ++ udc->driver->disconnect(&udc->gadget); ++ spin_lock(&udc->lock); ++ } ++ + driver->unbind(&udc->gadget); + udc->gadget.dev.driver = NULL; + udc->driver = NULL; diff --git a/usb.current/usb-option-add-new-dell-5520-hsdpa-variant.patch b/usb.current/usb-option-add-new-dell-5520-hsdpa-variant.patch new file mode 100644 index 00000000000000..95f39ce54503cd --- /dev/null +++ b/usb.current/usb-option-add-new-dell-5520-hsdpa-variant.patch @@ -0,0 +1,29 @@ +From dcbw@redhat.com Tue May 13 14:56:24 2008 +From: Dan Williams <dcbw@redhat.com> +Date: Tue, 13 May 2008 12:53:45 -0400 +Subject: USB: option: add new Dell 5520 HSDPA variant +To: gregkh@suse.de +Cc: linux-usb@vger.kernel.org, stable@kernel.org, Luke Sheldrick <luke@sheldrick.co.uk> +Message-ID: <1210697625.9976.19.camel@localhost.localdomain> + + +New variant of the 5520 found by Luke Sheldrick. + +Signed-off-by: Dan Williams <dcbw@redhat.com> +Cc: stable <stable@kernel.org> +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 +@@ -293,6 +293,7 @@ static struct usb_device_id option_ids[] + { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ + { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ + { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ ++ { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, + { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) }, diff --git a/usb.current/usb-pxa27x_udc-minor-fixes.patch b/usb.current/usb-pxa27x_udc-minor-fixes.patch new file mode 100644 index 00000000000000..fee895438230ff --- /dev/null +++ b/usb.current/usb-pxa27x_udc-minor-fixes.patch @@ -0,0 +1,100 @@ +From david-b@pacbell.net Tue May 13 14:58:41 2008 +From: Robert Jarzmik <rjarzmik@free.fr> +Date: Mon, 12 May 2008 10:47:56 -0700 +Subject: USB: pxa27x_udc: minor fixes +To: Greg KH <greg@kroah.com> +Cc: Robert Jarzmik <rjarzmik@free.fr> +Message-ID: <200805121047.57064.david-b@pacbell.net> +Content-Disposition: inline + + +From: Robert Jarzmik <rjarzmik@free.fr> + +Minor fixes to pxa27x udc driver : + - don't clobber driver model bus_id field + - wrong endianess fix (no functional change; cpu is little-endian) + - double udc disable fix + - resume/suspend fix (OTG hold bit) + - make driver pxa27x dependant (check cpu at runtime) + +Signed-off-by: Robert Jarzmik <rjarzmik@free.fr> +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/pxa27x_udc.c | 17 ++++++++--------- + drivers/usb/gadget/pxa27x_udc.h | 8 ++++++++ + 2 files changed, 16 insertions(+), 9 deletions(-) + +--- a/drivers/usb/gadget/pxa27x_udc.c ++++ b/drivers/usb/gadget/pxa27x_udc.c +@@ -1546,7 +1546,6 @@ static __init void udc_init_data(struct + INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); + dev->udc_usb_ep[0].pxa_ep = &dev->pxa_ep[0]; + ep0_idle(dev); +- strcpy(dev->dev->bus_id, ""); + + /* PXA endpoints init */ + for (i = 0; i < NR_PXA_ENDPOINTS; i++) { +@@ -1746,13 +1745,10 @@ static void handle_ep0_ctrl_req(struct p + ep_err(ep, "wrong to have extra bytes for setup : 0x%08x\n", i); + } + +- le16_to_cpus(&u.r.wValue); +- le16_to_cpus(&u.r.wIndex); +- le16_to_cpus(&u.r.wLength); +- + ep_dbg(ep, "SETUP %02x.%02x v%04x i%04x l%04x\n", + u.r.bRequestType, u.r.bRequest, +- u.r.wValue, u.r.wIndex, u.r.wLength); ++ le16_to_cpu(u.r.wValue), le16_to_cpu(u.r.wIndex), ++ le16_to_cpu(u.r.wLength)); + if (unlikely(have_extrabytes)) + goto stall; + +@@ -2296,7 +2292,8 @@ static void pxa_udc_shutdown(struct plat + { + struct pxa_udc *udc = platform_get_drvdata(_dev); + +- udc_disable(udc); ++ if (udc_readl(udc, UDCCR) & UDCCR_UDE) ++ udc_disable(udc); + } + + #ifdef CONFIG_PM +@@ -2361,9 +2358,8 @@ static int pxa_udc_resume(struct platfor + * Upon exit from sleep mode and before clearing OTGPH, + * Software must configure the USB OTG pad, UDC, and UHC + * to the state they were in before entering sleep mode. +- * +- * Should be : PSSR |= PSSR_OTGPH; + */ ++ PSSR |= PSSR_OTGPH; + + return 0; + } +@@ -2387,6 +2383,9 @@ static struct platform_driver udc_driver + + static int __init udc_init(void) + { ++ if (!cpu_is_pxa27x()) ++ return -ENODEV; ++ + printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); + return platform_driver_probe(&udc_driver, pxa_udc_probe); + } +--- a/drivers/usb/gadget/pxa27x_udc.h ++++ b/drivers/usb/gadget/pxa27x_udc.h +@@ -484,4 +484,12 @@ static inline struct pxa_udc *to_gadget_ + #define ep_warn(ep, fmt, arg...) \ + dev_warn(ep->dev->dev, "%s:%s:" fmt, EPNAME(ep), __func__, ## arg) + ++/* ++ * Cannot include pxa-regs.h, as register names are similar. ++ * So PSSR is redefined here. This should be removed once UDC registers will ++ * be gone from pxa-regs.h. ++ */ ++#define PSSR __REG(0x40F00004) /* Power Manager Sleep Status */ ++#define PSSR_OTGPH (1 << 6) /* OTG Peripheral Hold */ ++ + #endif /* __LINUX_USB_GADGET_PXA27X_H */ diff --git a/usb.current/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch b/usb.current/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch new file mode 100644 index 00000000000000..f2cc7bfc2c9006 --- /dev/null +++ b/usb.current/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch @@ -0,0 +1,48 @@ +From xiaofanc@gmail.com Tue May 13 14:56:50 2008 +From: "Xiaofan Chen" <xiaofanc@gmail.com> +Date: Tue, 13 May 2008 21:52:00 +0800 +Subject: USB: remove PICDEM FS USB demo (04d8:000c) device from ldusb +To: "Greg KH" <gregkh@suse.de> +Cc: "Joey Goncalves" <jgoncalves@peragrin.com>, "Hund, Michael" <MHund@ld-didactic.de>, "USB list" <linux-usb@vger.kernel.org> +Message-ID: <a276da400805130652y2d743856r33c91f707fb2892a@mail.gmail.com> +Content-Disposition: inline + + +Microchip has changed the PICDEM FS USB demo device (0x04d8:000c) +to use bulk transfer and not interrupt transfer. So I've updated the libusb +based program here (Post #31). + http://forum.microchip.com/tm.aspx?m=106426&mpage=2 + +So I believe that the in-kernel ldusb driver will no longer work with the +demo firmware. It should be removed. + + +Signed-off-by: Xiaofan Chen <xiaofanc@gmail.com> +Cc: Michael Hund <MHund@LD-Didactic.de> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/misc/ldusb.c | 4 ---- + 1 file changed, 4 deletions(-) + +--- a/drivers/usb/misc/ldusb.c ++++ b/drivers/usb/misc/ldusb.c +@@ -63,9 +63,6 @@ + #define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004 + #define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006 + +-#define USB_VENDOR_ID_MICROCHIP 0x04d8 +-#define USB_DEVICE_ID_PICDEM 0x000c +- + #ifdef CONFIG_USB_DYNAMIC_MINORS + #define USB_LD_MINOR_BASE 0 + #else +@@ -92,7 +89,6 @@ static struct usb_device_id ld_usb_table + { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) }, + { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, + { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) }, +- { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICDEM) }, + { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) }, + { } /* Terminating entry */ + }; diff --git a/usb.current/usbtest-comment-on-why-this-code-expects-negative-and-positive-errnos.patch b/usb.current/usbtest-comment-on-why-this-code-expects-negative-and-positive-errnos.patch new file mode 100644 index 00000000000000..358565c0b9a7cc --- /dev/null +++ b/usb.current/usbtest-comment-on-why-this-code-expects-negative-and-positive-errnos.patch @@ -0,0 +1,58 @@ +From marcin.slusarz@gmail.com Tue May 13 14:58:09 2008 +From: Marcin Slusarz <marcin.slusarz@gmail.com> +Date: Mon, 12 May 2008 20:17:25 +0200 +Subject: usbtest: comment on why this code "expects" negative and positive errnos +To: David Brownell <david-b@pacbell.net>, LKML <linux-kernel@vger.kernel.org> +Cc: Greg Kroah-Hartman <gregkh@suse.de>, linux-usb@vger.kernel.org +Message-ID: <20080512181721.GA6031@joi> +Content-Disposition: inline + + +On Mon, May 12, 2008 at 01:02:22AM -0700, David Brownell wrote: +> On Sunday 11 May 2008, Marcin Slusarz wrote: +> > +> > test_ctrl_queue expects (?) positive and negative errnos. +> > what is going on here? +> +> The sign is just a way to flag something: +> +> /* some faults are allowed, not required */ +> +> The negative ones are required. Positive codes are optional, +> in the sense that, depending on how the peripheral happens +> to be implemented, they won't necessarily be triggered. +> +> For example, the test to fetch a device qualifier desriptor +> must succeed if the device is running at high speed. So that +> test is marked as negative. But when it's full speed, it +> could legitimately fail; marked as positive. And so on for +> other tests. +> +> Look at how the codes are *interpreted* to see it work. + +Lets document it. + +Based on comment from David Brownell <david-b@pacbell.net>. + +Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> +Cc: David Brownell <david-b@pacbell.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/misc/usbtest.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/usb/misc/usbtest.c ++++ b/drivers/usb/misc/usbtest.c +@@ -856,6 +856,11 @@ test_ctrl_queue (struct usbtest_dev *dev + struct urb *u; + struct usb_ctrlrequest req; + struct subcase *reqp; ++ ++ /* sign of this variable means: ++ * -: tested code must return this (negative) error code ++ * +: tested code may return this (negative too) error code ++ */ + int expected = 0; + + /* requests here are mostly expected to succeed on any |
