diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-26 23:13:49 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-26 23:13:49 -0800 |
| commit | 00615526fb5b3fc1b75c7a276410a05ba13f048e (patch) | |
| tree | c3cd760903a58e4e979045894827e1b27babc714 /usb | |
| parent | 001c0bce4c78159d85263c3189cea1331d1a58a7 (diff) | |
| download | patches-00615526fb5b3fc1b75c7a276410a05ba13f048e.tar.gz | |
2 driver core and a bunch more usb patches added
Diffstat (limited to 'usb')
13 files changed, 2007 insertions, 0 deletions
diff --git a/usb/usb-cyberjack-remove-a-unnecessary-variable.patch b/usb/usb-cyberjack-remove-a-unnecessary-variable.patch new file mode 100644 index 00000000000000..cac06d7b8e0c28 --- /dev/null +++ b/usb/usb-cyberjack-remove-a-unnecessary-variable.patch @@ -0,0 +1,29 @@ +From andre@bitwigglers.org Mon Nov 26 22:59:56 2007 +From: Andre Haupt <andre@bitwigglers.org> +Date: Tue, 20 Nov 2007 11:41:37 +0100 +Subject: USB: cyberjack: remove a unnecessary variable. +To: linux-usb-devel@lists.sourceforge.net +Cc: greg@kroah.com, support@reiner-sct.com, Andre Haupt <andre@bitwigglers.org> +Message-ID: <11955552973227-git-send-email-andre@bitwigglers.org> + +From: Andre Haupt <andre@bitwigglers.org> + +This also fixes a sparse warning that symbol 'result' shadows an earlier one. + +Signed-off-by: Andre Haupt <andre@bitwigglers.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/cyberjack.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/usb/serial/cyberjack.c ++++ b/drivers/usb/serial/cyberjack.c +@@ -319,7 +319,6 @@ static void cyberjack_read_int_callback( + /* React only to interrupts signaling a bulk_in transfer */ + if( (urb->actual_length==4) && (data[0]==0x01) ) { + short old_rdtodo; +- int result; + + /* This is a announcement of coming bulk_ins. */ + unsigned short size = ((unsigned short)data[3]<<8)+data[2]+3; diff --git a/usb/usb-don-t-change-hc-power-state-for-a-freeze.patch b/usb/usb-don-t-change-hc-power-state-for-a-freeze.patch new file mode 100644 index 00000000000000..f6d41aa87162c5 --- /dev/null +++ b/usb/usb-don-t-change-hc-power-state-for-a-freeze.patch @@ -0,0 +1,36 @@ +From stern@rowland.harvard.edu Mon Nov 26 22:51:16 2007 +From: Alan Stern <stern@rowland.harvard.edu> +Date: Mon, 19 Nov 2007 15:57:45 -0500 (EST) +Subject: USB: don't change HC power state for a FREEZE +To: Greg KH <greg@kroah.com> +Cc: David Brownell <david-b@pacbell.net>, USB development list <linux-usb-devel@lists.sourceforge.net> +Message-ID: <Pine.LNX.4.44L0.0711191556110.3443-100000@iolanthe.rowland.org> + + +This patch (as1016) prevents PCI-based host controllers from +undergoing a power-state change during a FREEZE or a PRETHAW. Such +changes are needed only during a SUSPEND. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +CC: David Brownell <david-b@pacbell.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/hcd-pci.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/usb/core/hcd-pci.c ++++ b/drivers/usb/core/hcd-pci.c +@@ -250,6 +250,12 @@ int usb_hcd_pci_suspend (struct pci_dev + pci_disable_device (dev); + } + ++ if (message.event == PM_EVENT_FREEZE || ++ message.event == PM_EVENT_PRETHAW) { ++ dev_dbg(hcd->self.controller, "--> no state change\n"); ++ goto done; ++ } ++ + if (!has_pci_pm) { + dev_dbg (hcd->self.controller, "--> PCI D0/legacy\n"); + goto done; diff --git a/usb/usb-drop-unnecessary-continue-in-a-few-drivers.patch b/usb/usb-drop-unnecessary-continue-in-a-few-drivers.patch new file mode 100644 index 00000000000000..0d0f6999cac00a --- /dev/null +++ b/usb/usb-drop-unnecessary-continue-in-a-few-drivers.patch @@ -0,0 +1,53 @@ +From julia@diku.dk Mon Nov 26 22:46:51 2007 +From: Julia Lawall <julia@diku.dk> +Date: Wed, 14 Nov 2007 09:15:16 +0100 (CET) +Subject: USB: Drop unnecessary continue in a few drivers +To: gregkh@suse.de, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org +Message-ID: <Pine.LNX.4.64.0711140914360.26019@ask.diku.dk> + +From: Julia Lawall <julia@diku.dk> + +Continue is not needed at the bottom of a loop. + +The semantic patch implementing this change is as follows: + +@@ +@@ + +for (...;...;...) { + ... + if (...) { + ... +- continue; + } +} + +Signed-off-by: Julia Lawall <julia@diku.dk> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/isp116x-hcd.c | 1 - + drivers/usb/image/mdc800.c | 2 -- + 2 files changed, 3 deletions(-) + +--- a/drivers/usb/host/isp116x-hcd.c ++++ b/drivers/usb/host/isp116x-hcd.c +@@ -918,7 +918,6 @@ static int isp116x_hub_status_data(struc + | RH_PS_OCIC | RH_PS_PRSC)) { + changed = 1; + buf[0] |= 1 << (i + 1); +- continue; + } + } + spin_unlock_irqrestore(&isp116x->lock, flags); +--- a/drivers/usb/image/mdc800.c ++++ b/drivers/usb/image/mdc800.c +@@ -478,8 +478,6 @@ static int mdc800_usb_probe (struct usb_ + { + irq_interval=intf_desc->endpoint [j].desc.bInterval; + } +- +- continue; + } + } + if (mdc800->endpoint[i] == -1) diff --git a/usb/usb-dummy_hcd-don-t-register-drivers-on-the-platform-bus.patch b/usb/usb-dummy_hcd-don-t-register-drivers-on-the-platform-bus.patch new file mode 100644 index 00000000000000..59fd025963046d --- /dev/null +++ b/usb/usb-dummy_hcd-don-t-register-drivers-on-the-platform-bus.patch @@ -0,0 +1,85 @@ +From stern@rowland.harvard.edu Mon Nov 26 23:03:12 2007 +From: Alan Stern <stern@rowland.harvard.edu> +Date: Tue, 20 Nov 2007 16:28:55 -0500 (EST) +Subject: USB: dummy_hcd: don't register drivers on the platform bus +To: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net> +Cc: USB development list <linux-usb-devel@lists.sourceforge.net> +Message-ID: <Pine.LNX.4.44L0.0711201627080.2789-100000@iolanthe.rowland.org> + + +This patch (as1017) makes dummy_hcd behave more like the other USB +peripheral controller drivers by no longer registering its +gadget driver on the platform bus. Doing that has always been a +mistake, since a usb_gadget_driver isn't a platform_driver. Instead +the gadget driver is left unregistered in sysfs. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +CC: David Brownell <david-b@pacbell.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/dummy_hcd.c | 33 ++++++++------------------------- + 1 file changed, 8 insertions(+), 25 deletions(-) + +--- a/drivers/usb/gadget/dummy_hcd.c ++++ b/drivers/usb/gadget/dummy_hcd.c +@@ -772,18 +772,17 @@ usb_gadget_register_driver (struct usb_g + list_del_init (&dum->ep [0].ep.ep_list); + INIT_LIST_HEAD(&dum->fifo_req.queue); + ++ driver->driver.bus = NULL; + dum->driver = driver; + dum->gadget.dev.driver = &driver->driver; + dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n", + driver->driver.name); +- if ((retval = driver->bind (&dum->gadget)) != 0) +- goto err_bind_gadget; +- +- driver->driver.bus = dum->gadget.dev.parent->bus; +- if ((retval = driver_register (&driver->driver)) != 0) +- goto err_register; +- if ((retval = device_bind_driver (&dum->gadget.dev)) != 0) +- goto err_bind_driver; ++ retval = driver->bind(&dum->gadget); ++ if (retval) { ++ dum->driver = NULL; ++ dum->gadget.dev.driver = NULL; ++ return retval; ++ } + + /* khubd will enumerate this in a while */ + spin_lock_irq (&dum->lock); +@@ -793,20 +792,6 @@ usb_gadget_register_driver (struct usb_g + + usb_hcd_poll_rh_status (dummy_to_hcd (dum)); + return 0; +- +-err_bind_driver: +- driver_unregister (&driver->driver); +-err_register: +- if (driver->unbind) +- driver->unbind (&dum->gadget); +- spin_lock_irq (&dum->lock); +- dum->pullup = 0; +- set_link_state (dum); +- spin_unlock_irq (&dum->lock); +-err_bind_gadget: +- dum->driver = NULL; +- dum->gadget.dev.driver = NULL; +- return retval; + } + EXPORT_SYMBOL (usb_gadget_register_driver); + +@@ -830,11 +815,9 @@ usb_gadget_unregister_driver (struct usb + spin_unlock_irqrestore (&dum->lock, flags); + + driver->unbind (&dum->gadget); ++ dum->gadget.dev.driver = NULL; + dum->driver = NULL; + +- device_release_driver (&dum->gadget.dev); +- driver_unregister (&driver->driver); +- + spin_lock_irqsave (&dum->lock, flags); + dum->pullup = 0; + set_link_state (dum); diff --git a/usb/usb-force-handover-port-to-companion-when-hub_port_connect_change-fails.patch b/usb/usb-force-handover-port-to-companion-when-hub_port_connect_change-fails.patch new file mode 100644 index 00000000000000..329dba6a9aa175 --- /dev/null +++ b/usb/usb-force-handover-port-to-companion-when-hub_port_connect_change-fails.patch @@ -0,0 +1,210 @@ +From balajirrao@gmail.com Mon Nov 26 23:02:14 2007 +From: Balaji Rao <balajirrao@gmail.com> +From: balajirrao <balajirrao@gmail.com> +Date: Thu, 22 Nov 2007 01:58:14 +0530 +Subject: USB: force handover port to companion when hub_port_connect_change fails +To: Linux USB <linux-usb@vger.kernel.org> +Cc: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net>, Alan Stern <stern@rowland.harvard.edu> +Message-ID: <20071121202814.GA4413@yogi> +Content-Disposition: inline + +From: Balaji Rao <balajirrao@gmail.com> + +This patch hands over the port to the companion when the +hub_port_connect_change fails. + +Signed-off-by: Balaji Rao <balajirrao@gmail.com> +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/hcd.h | 3 + + drivers/usb/core/hub.c | 3 + + drivers/usb/host/ehci-au1xxx.c | 1 + drivers/usb/host/ehci-fsl.c | 1 + drivers/usb/host/ehci-hub.c | 68 +++++++++++++++++++++++++--------------- + drivers/usb/host/ehci-pci.c | 1 + drivers/usb/host/ehci-ppc-soc.c | 1 + drivers/usb/host/ehci-ps3.c | 1 + 8 files changed, 55 insertions(+), 24 deletions(-) + +--- a/drivers/usb/core/hcd.h ++++ b/drivers/usb/core/hcd.h +@@ -210,6 +210,9 @@ struct hc_driver { + int (*start_port_reset)(struct usb_hcd *, unsigned port_num); + void (*hub_irq_enable)(struct usb_hcd *); + /* Needed only if port-change IRQs are level-triggered */ ++ ++ /* force handover of high-speed port to full-speed companion */ ++ void (*relinquish_port)(struct usb_hcd *, int); + }; + + extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -2482,6 +2482,7 @@ static void hub_port_connect_change(stru + { + struct usb_device *hdev = hub->hdev; + struct device *hub_dev = hub->intfdev; ++ struct usb_hcd *hcd = bus_to_hcd(hdev->bus); + u16 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); + int status, i; + +@@ -2645,6 +2646,8 @@ loop: + + done: + hub_port_disable(hub, port1, 1); ++ if (hcd->driver->relinquish_port && !hub->hdev->parent) ++ hcd->driver->relinquish_port(hcd, port1); + } + + static void hub_events(void) +--- a/drivers/usb/host/ehci-au1xxx.c ++++ b/drivers/usb/host/ehci-au1xxx.c +@@ -222,6 +222,7 @@ static const struct hc_driver ehci_au1xx + .hub_control = ehci_hub_control, + .bus_suspend = ehci_bus_suspend, + .bus_resume = ehci_bus_resume, ++ .relinquish_port = ehci_relinquish_port, + }; + + /*-------------------------------------------------------------------------*/ +--- a/drivers/usb/host/ehci-fsl.c ++++ b/drivers/usb/host/ehci-fsl.c +@@ -323,6 +323,7 @@ static const struct hc_driver ehci_fsl_h + .hub_control = ehci_hub_control, + .bus_suspend = ehci_bus_suspend, + .bus_resume = ehci_bus_resume, ++ .relinquish_port = ehci_relinquish_port, + }; + + static int ehci_fsl_drv_probe(struct platform_device *pdev) +--- a/drivers/usb/host/ehci-hub.c ++++ b/drivers/usb/host/ehci-hub.c +@@ -314,41 +314,21 @@ static ssize_t show_companion(struct dev + } + + /* +- * Dedicate or undedicate a port to the companion controller. +- * Syntax is "[-]portnum", where a leading '-' sign means +- * return control of the port to the EHCI controller. ++ * Sets the owner of a port + */ +-static ssize_t store_companion(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) ++static void set_owner(struct ehci_hcd *ehci, int portnum, int new_owner) + { +- struct ehci_hcd *ehci; +- int portnum, new_owner, try; + u32 __iomem *status_reg; + u32 port_status; ++ int try; + +- ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); +- new_owner = PORT_OWNER; /* Owned by companion */ +- if (sscanf(buf, "%d", &portnum) != 1) +- return -EINVAL; +- if (portnum < 0) { +- portnum = - portnum; +- new_owner = 0; /* Owned by EHCI */ +- } +- if (portnum <= 0 || portnum > HCS_N_PORTS(ehci->hcs_params)) +- return -ENOENT; +- status_reg = &ehci->regs->port_status[--portnum]; +- if (new_owner) +- set_bit(portnum, &ehci->companion_ports); +- else +- clear_bit(portnum, &ehci->companion_ports); ++ status_reg = &ehci->regs->port_status[portnum]; + + /* + * The controller won't set the OWNER bit if the port is + * enabled, so this loop will sometimes require at least two + * iterations: one to disable the port and one to set OWNER. + */ +- + for (try = 4; try > 0; --try) { + spin_lock_irq(&ehci->lock); + port_status = ehci_readl(ehci, status_reg); +@@ -365,6 +345,36 @@ static ssize_t store_companion(struct de + if (try > 1) + msleep(5); + } ++} ++ ++/* ++ * Dedicate or undedicate a port to the companion controller. ++ * Syntax is "[-]portnum", where a leading '-' sign means ++ * return control of the port to the EHCI controller. ++ */ ++static ssize_t store_companion(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct ehci_hcd *ehci; ++ int portnum, new_owner; ++ ++ ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); ++ new_owner = PORT_OWNER; /* Owned by companion */ ++ if (sscanf(buf, "%d", &portnum) != 1) ++ return -EINVAL; ++ if (portnum < 0) { ++ portnum = - portnum; ++ new_owner = 0; /* Owned by EHCI */ ++ } ++ if (portnum <= 0 || portnum > HCS_N_PORTS(ehci->hcs_params)) ++ return -ENOENT; ++ portnum--; ++ if (new_owner) ++ set_bit(portnum, &ehci->companion_ports); ++ else ++ clear_bit(portnum, &ehci->companion_ports); ++ set_owner(ehci, portnum, new_owner); + return count; + } + static DEVICE_ATTR(companion, 0644, show_companion, store_companion); +@@ -867,3 +877,13 @@ error: + spin_unlock_irqrestore (&ehci->lock, flags); + return retval; + } ++ ++static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) ++{ ++ struct ehci_hcd *ehci = hcd_to_ehci(hcd); ++ ++ if (ehci_is_TDI(ehci)) ++ return; ++ set_owner(ehci, --portnum, PORT_OWNER); ++} ++ +--- a/drivers/usb/host/ehci-pci.c ++++ b/drivers/usb/host/ehci-pci.c +@@ -364,6 +364,7 @@ static const struct hc_driver ehci_pci_h + .hub_control = ehci_hub_control, + .bus_suspend = ehci_bus_suspend, + .bus_resume = ehci_bus_resume, ++ .relinquish_port = ehci_relinquish_port, + }; + + /*-------------------------------------------------------------------------*/ +--- a/drivers/usb/host/ehci-ppc-soc.c ++++ b/drivers/usb/host/ehci-ppc-soc.c +@@ -162,6 +162,7 @@ static const struct hc_driver ehci_ppc_s + .hub_control = ehci_hub_control, + .bus_suspend = ehci_bus_suspend, + .bus_resume = ehci_bus_resume, ++ .relinquish_port = ehci_relinquish_port, + }; + + static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) +--- a/drivers/usb/host/ehci-ps3.c ++++ b/drivers/usb/host/ehci-ps3.c +@@ -72,6 +72,7 @@ static const struct hc_driver ps3_ehci_h + .bus_suspend = ehci_bus_suspend, + .bus_resume = ehci_bus_resume, + #endif ++ .relinquish_port = ehci_relinquish_port, + }; + + static int ps3_ehci_probe(struct ps3_system_bus_device *dev) diff --git a/usb/usb-gadget-code-switches-to-pr_err-and-friends.patch b/usb/usb-gadget-code-switches-to-pr_err-and-friends.patch new file mode 100644 index 00000000000000..d2330266918988 --- /dev/null +++ b/usb/usb-gadget-code-switches-to-pr_err-and-friends.patch @@ -0,0 +1,1222 @@ +From david-b@pacbell.net Mon Nov 26 22:51:44 2007 +From: David Brownell <david-b@pacbell.net> +Date: Mon, 19 Nov 2007 12:58:36 -0800 +Subject: USB: gadget code switches to pr_err() and friends +To: Greg KH <greg@kroah.com> +Cc: linux-usb-devel@lists.sourceforge.net +Message-ID: <200711191258.37237.david-b@pacbell.net> +Content-Disposition: inline + + +We now have pr_err(), pr_warning(), and friends ... start using +them in the gadget stack instead of printk(KERN_ERR) and friends. +This gives us shorter lines and somewhat increased readability. + +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/at91_udc.h | 13 --- + drivers/usb/gadget/atmel_usba_udc.c | 11 -- + drivers/usb/gadget/atmel_usba_udc.h | 7 - + drivers/usb/gadget/file_storage.c | 14 +-- + drivers/usb/gadget/fsl_usb2_udc.h | 6 - + drivers/usb/gadget/gmidi.c | 6 - + drivers/usb/gadget/inode.c | 2 + drivers/usb/gadget/m66592-udc.c | 48 +++++------ + drivers/usb/gadget/omap_udc.h | 13 --- + drivers/usb/gadget/pxa2xx_udc.c | 14 +-- + drivers/usb/gadget/pxa2xx_udc.h | 11 +- + drivers/usb/gadget/rndis.c | 20 +--- + drivers/usb/gadget/serial.c | 153 ++++++++++++++++++------------------ + drivers/usb/gadget/zero.c | 4 + 14 files changed, 151 insertions(+), 171 deletions(-) + +--- a/drivers/usb/gadget/at91_udc.h ++++ b/drivers/usb/gadget/at91_udc.h +@@ -158,12 +158,6 @@ struct at91_request { + + /*-------------------------------------------------------------------------*/ + +-#ifdef DEBUG +-#define DBG(stuff...) printk(KERN_DEBUG "udc: " stuff) +-#else +-#define DBG(stuff...) do{}while(0) +-#endif +- + #ifdef VERBOSE + # define VDBG DBG + #else +@@ -176,9 +170,10 @@ struct at91_request { + # define PACKET(stuff...) do{}while(0) + #endif + +-#define ERR(stuff...) printk(KERN_ERR "udc: " stuff) +-#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) +-#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++#define ERR(stuff...) pr_err("udc: " stuff) ++#define WARN(stuff...) pr_warning("udc: " stuff) ++#define INFO(stuff...) pr_info("udc: " stuff) ++#define DBG(stuff...) pr_debug("udc: " stuff) + + #endif + +--- a/drivers/usb/gadget/atmel_usba_udc.c ++++ b/drivers/usb/gadget/atmel_usba_udc.c +@@ -1384,8 +1384,7 @@ delegate: + return retval; + + stall: +- printk(KERN_ERR +- "udc: %s: Invalid setup request: %02x.%02x v%04x i%04x l%d, " ++ pr_err("udc: %s: Invalid setup request: %02x.%02x v%04x i%04x l%d, " + "halting endpoint...\n", + ep->ep.name, crq->bRequestType, crq->bRequest, + le16_to_cpu(crq->wValue), le16_to_cpu(crq->wIndex), +@@ -1456,8 +1455,7 @@ restart: + set_protocol_stall(udc, ep); + break; + default: +- printk(KERN_ERR +- "udc: %s: TXCOMP: Invalid endpoint state %d, " ++ pr_err("udc: %s: TXCOMP: Invalid endpoint state %d, " + "halting endpoint...\n", + ep->ep.name, ep->state); + set_protocol_stall(udc, ep); +@@ -1486,8 +1484,7 @@ restart: + default: + usba_ep_writel(ep, CLR_STA, USBA_RX_BK_RDY); + usba_ep_writel(ep, CTL_DIS, USBA_RX_BK_RDY); +- printk(KERN_ERR +- "udc: %s: RXRDY: Invalid endpoint state %d, " ++ pr_err("udc: %s: RXRDY: Invalid endpoint state %d, " + "halting endpoint...\n", + ep->ep.name, ep->state); + set_protocol_stall(udc, ep); +@@ -1532,7 +1529,7 @@ restart: + pkt_len = USBA_BFEXT(BYTE_COUNT, usba_ep_readl(ep, STA)); + DBG(DBG_HW, "Packet length: %u\n", pkt_len); + if (pkt_len != sizeof(crq)) { +- printk(KERN_WARNING "udc: Invalid packet length %u " ++ pr_warning("udc: Invalid packet length %u " + "(expected %lu)\n", pkt_len, sizeof(crq)); + set_protocol_stall(udc, ep); + return; +--- a/drivers/usb/gadget/atmel_usba_udc.h ++++ b/drivers/usb/gadget/atmel_usba_udc.h +@@ -216,7 +216,6 @@ + #define FIFO_IOMEM_ID 0 + #define CTRL_IOMEM_ID 1 + +-#ifdef DEBUG + #define DBG_ERR 0x0001 /* report all error returns */ + #define DBG_HW 0x0002 /* debug hardware initialization */ + #define DBG_GADGET 0x0004 /* calls to/from gadget driver */ +@@ -230,14 +229,12 @@ + #define DBG_NONE 0x0000 + + #define DEBUG_LEVEL (DBG_ERR) ++ + #define DBG(level, fmt, ...) \ + do { \ + if ((level) & DEBUG_LEVEL) \ +- printk(KERN_DEBUG "udc: " fmt, ## __VA_ARGS__); \ ++ pr_debug("udc: " fmt, ## __VA_ARGS__); \ + } while (0) +-#else +-#define DBG(level, fmt...) +-#endif + + enum usba_ctrl_state { + WAIT_FOR_SETUP, +--- a/drivers/usb/gadget/file_storage.c ++++ b/drivers/usb/gadget/file_storage.c +@@ -275,19 +275,15 @@ MODULE_LICENSE("Dual BSD/GPL"); + + /*-------------------------------------------------------------------------*/ + +-#ifdef DEBUG + #define LDBG(lun,fmt,args...) \ + dev_dbg(&(lun)->dev , fmt , ## args) + #define MDBG(fmt,args...) \ +- printk(KERN_DEBUG DRIVER_NAME ": " fmt , ## args) +-#else +-#define LDBG(lun,fmt,args...) \ +- do { } while (0) +-#define MDBG(fmt,args...) \ +- do { } while (0) ++ pr_debug(DRIVER_NAME ": " fmt , ## args) ++ ++#ifndef DEBUG + #undef VERBOSE_DEBUG + #undef DUMP_MSGS +-#endif /* DEBUG */ ++#endif /* !DEBUG */ + + #ifdef VERBOSE_DEBUG + #define VLDBG LDBG +@@ -304,7 +300,7 @@ MODULE_LICENSE("Dual BSD/GPL"); + dev_info(&(lun)->dev , fmt , ## args) + + #define MINFO(fmt,args...) \ +- printk(KERN_INFO DRIVER_NAME ": " fmt , ## args) ++ pr_info(DRIVER_NAME ": " fmt , ## args) + + #define DBG(d, fmt, args...) \ + dev_dbg(&(d)->gadget->dev , fmt , ## args) +--- a/drivers/usb/gadget/fsl_usb2_udc.h ++++ b/drivers/usb/gadget/fsl_usb2_udc.h +@@ -551,9 +551,9 @@ static void dump_msg(const char *label, + #define VDBG(stuff...) do{}while(0) + #endif + +-#define ERR(stuff...) printk(KERN_ERR "udc: " stuff) +-#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) +-#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++#define ERR(stuff...) pr_err("udc: " stuff) ++#define WARN(stuff...) pr_warning("udc: " stuff) ++#define INFO(stuff...) pr_info("udc: " stuff) + + /*-------------------------------------------------------------------------*/ + +--- a/drivers/usb/gadget/gmidi.c ++++ b/drivers/usb/gadget/gmidi.c +@@ -1159,7 +1159,7 @@ static int __devinit gmidi_bind(struct u + /* support optional vendor/distro customization */ + if (idVendor) { + if (!idProduct) { +- printk(KERN_ERR "idVendor needs idProduct!\n"); ++ pr_err("idVendor needs idProduct!\n"); + return -ENODEV; + } + device_desc.idVendor = cpu_to_le16(idVendor); +@@ -1191,7 +1191,7 @@ static int __devinit gmidi_bind(struct u + in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc); + if (!in_ep) { + autoconf_fail: +- printk(KERN_ERR "%s: can't autoconfigure on %s\n", ++ pr_err("%s: can't autoconfigure on %s\n", + shortname, gadget->name); + return -ENODEV; + } +@@ -1213,7 +1213,7 @@ autoconf_fail: + * it SHOULD NOT have problems with bulk-capable hardware. + * so warn about unrecognized controllers, don't panic. + */ +- printk(KERN_WARNING "%s: controller '%s' not recognized\n", ++ pr_warning("%s: controller '%s' not recognized\n", + shortname, gadget->name); + device_desc.bcdDevice = __constant_cpu_to_le16(0x9999); + } +--- a/drivers/usb/gadget/inode.c ++++ b/drivers/usb/gadget/inode.c +@@ -1699,7 +1699,7 @@ gadgetfs_bind (struct usb_gadget *gadget + if (!dev) + return -ESRCH; + if (0 != strcmp (CHIP, gadget->name)) { +- printk (KERN_ERR "%s expected %s controller not %s\n", ++ pr_err("%s expected %s controller not %s\n", + shortname, CHIP, gadget->name); + return -ENODEV; + } +--- a/drivers/usb/gadget/m66592-udc.c ++++ b/drivers/usb/gadget/m66592-udc.c +@@ -147,7 +147,7 @@ static inline u16 control_reg_get_pid(st + offset = get_pipectr_addr(pipenum); + pid = m66592_read(m66592, offset) & M66592_PID; + } else +- printk(KERN_ERR "unexpect pipe num (%d)\n", pipenum); ++ pr_err("unexpect pipe num (%d)\n", pipenum); + + return pid; + } +@@ -163,7 +163,7 @@ static inline void control_reg_set_pid(s + offset = get_pipectr_addr(pipenum); + m66592_mdfy(m66592, pid, M66592_PID, offset); + } else +- printk(KERN_ERR "unexpect pipe num (%d)\n", pipenum); ++ pr_err("unexpect pipe num (%d)\n", pipenum); + } + + static inline void pipe_start(struct m66592 *m66592, u16 pipenum) +@@ -192,7 +192,7 @@ static inline u16 control_reg_get(struct + offset = get_pipectr_addr(pipenum); + ret = m66592_read(m66592, offset); + } else +- printk(KERN_ERR "unexpect pipe num (%d)\n", pipenum); ++ pr_err("unexpect pipe num (%d)\n", pipenum); + + return ret; + } +@@ -209,7 +209,7 @@ static inline void control_reg_sqclr(str + offset = get_pipectr_addr(pipenum); + m66592_bset(m66592, M66592_SQCLR, offset); + } else +- printk(KERN_ERR "unexpect pipe num(%d)\n", pipenum); ++ pr_err("unexpect pipe num(%d)\n", pipenum); + } + + static inline int get_buffer_size(struct m66592 *m66592, u16 pipenum) +@@ -291,7 +291,7 @@ static int pipe_buffer_setting(struct m6 + break; + } + if (m66592->bi_bufnum > M66592_MAX_BUFNUM) { +- printk(KERN_ERR "m66592 pipe memory is insufficient(%d)\n", ++ pr_err("m66592 pipe memory is insufficient(%d)\n", + m66592->bi_bufnum); + return -ENOMEM; + } +@@ -332,7 +332,7 @@ static void pipe_buffer_release(struct m + if (info->type == M66592_BULK) + m66592->bulk--; + } else +- printk(KERN_ERR "ep_release: unexpect pipenum (%d)\n", ++ pr_err("ep_release: unexpect pipenum (%d)\n", + info->pipe); + } + +@@ -430,7 +430,7 @@ static int alloc_pipe_config(struct m665 + case USB_ENDPOINT_XFER_BULK: + if (m66592->bulk >= M66592_MAX_NUM_BULK) { + if (m66592->isochronous >= M66592_MAX_NUM_ISOC) { +- printk(KERN_ERR "bulk pipe is insufficient\n"); ++ pr_err("bulk pipe is insufficient\n"); + return -ENODEV; + } else { + info.pipe = M66592_BASE_PIPENUM_ISOC +@@ -446,7 +446,7 @@ static int alloc_pipe_config(struct m665 + break; + case USB_ENDPOINT_XFER_INT: + if (m66592->interrupt >= M66592_MAX_NUM_INT) { +- printk(KERN_ERR "interrupt pipe is insufficient\n"); ++ pr_err("interrupt pipe is insufficient\n"); + return -ENODEV; + } + info.pipe = M66592_BASE_PIPENUM_INT + m66592->interrupt; +@@ -455,7 +455,7 @@ static int alloc_pipe_config(struct m665 + break; + case USB_ENDPOINT_XFER_ISOC: + if (m66592->isochronous >= M66592_MAX_NUM_ISOC) { +- printk(KERN_ERR "isochronous pipe is insufficient\n"); ++ pr_err("isochronous pipe is insufficient\n"); + return -ENODEV; + } + info.pipe = M66592_BASE_PIPENUM_ISOC + m66592->isochronous; +@@ -463,7 +463,7 @@ static int alloc_pipe_config(struct m665 + counter = &m66592->isochronous; + break; + default: +- printk(KERN_ERR "unexpect xfer type\n"); ++ pr_err("unexpect xfer type\n"); + return -EINVAL; + } + ep->type = info.type; +@@ -478,7 +478,7 @@ static int alloc_pipe_config(struct m665 + + ret = pipe_buffer_setting(m66592, &info); + if (ret < 0) { +- printk(KERN_ERR "pipe_buffer_setting fail\n"); ++ pr_err("pipe_buffer_setting fail\n"); + return ret; + } + +@@ -614,7 +614,7 @@ static void start_ep0(struct m66592_ep * + control_end(ep->m66592, 0); + break; + default: +- printk(KERN_ERR "start_ep0: unexpect ctsq(%x)\n", ctsq); ++ pr_err("start_ep0: unexpect ctsq(%x)\n", ctsq); + break; + } + } +@@ -748,7 +748,7 @@ static void irq_ep0_write(struct m66592_ + do { + tmp = m66592_read(m66592, ep->fifoctr); + if (i++ > 100000) { +- printk(KERN_ERR "pipe0 is busy. maybe cpu i/o bus " ++ pr_err("pipe0 is busy. maybe cpu i/o bus " + "conflict. please power off this controller."); + return; + } +@@ -798,7 +798,7 @@ static void irq_packet_write(struct m665 + if (unlikely((tmp & M66592_FRDY) == 0)) { + pipe_stop(m66592, pipenum); + pipe_irq_disable(m66592, pipenum); +- printk(KERN_ERR "write fifo not ready. pipnum=%d\n", pipenum); ++ pr_err("write fifo not ready. pipnum=%d\n", pipenum); + return; + } + +@@ -847,7 +847,7 @@ static void irq_packet_read(struct m6659 + req->req.status = -EPIPE; + pipe_stop(m66592, pipenum); + pipe_irq_disable(m66592, pipenum); +- printk(KERN_ERR "read fifo not ready"); ++ pr_err("read fifo not ready"); + return; + } + +@@ -1102,7 +1102,7 @@ static void m66592_update_usb_speed(stru + break; + default: + m66592->gadget.speed = USB_SPEED_UNKNOWN; +- printk(KERN_ERR "USB speed unknown\n"); ++ pr_err("USB speed unknown\n"); + } + } + +@@ -1161,7 +1161,7 @@ __acquires(m66592->lock) + control_end(m66592, 0); + break; + default: +- printk(KERN_ERR "ctrl_stage: unexpect ctsq(%x)\n", ctsq); ++ pr_err("ctrl_stage: unexpect ctsq(%x)\n", ctsq); + break; + } + } +@@ -1461,13 +1461,13 @@ int usb_gadget_register_driver(struct us + + retval = device_add(&m66592->gadget.dev); + if (retval) { +- printk(KERN_ERR "device_add error (%d)\n", retval); ++ pr_err("device_add error (%d)\n", retval); + goto error; + } + + retval = driver->bind (&m66592->gadget); + if (retval) { +- printk(KERN_ERR "bind to driver error (%d)\n", retval); ++ pr_err("bind to driver error (%d)\n", retval); + device_del(&m66592->gadget.dev); + goto error; + } +@@ -1561,28 +1561,28 @@ static int __init m66592_probe(struct pl + (char *)udc_name); + if (!res) { + ret = -ENODEV; +- printk(KERN_ERR "platform_get_resource_byname error.\n"); ++ pr_err("platform_get_resource_byname error.\n"); + goto clean_up; + } + + irq = platform_get_irq(pdev, 0); + if (irq < 0) { + ret = -ENODEV; +- printk(KERN_ERR "platform_get_irq error.\n"); ++ pr_err("platform_get_irq error.\n"); + goto clean_up; + } + + reg = ioremap(res->start, resource_len(res)); + if (reg == NULL) { + ret = -ENOMEM; +- printk(KERN_ERR "ioremap error.\n"); ++ pr_err("ioremap error.\n"); + goto clean_up; + } + + /* initialize ucd */ + m66592 = kzalloc(sizeof(struct m66592), GFP_KERNEL); + if (m66592 == NULL) { +- printk(KERN_ERR "kzalloc error\n"); ++ pr_err("kzalloc error\n"); + goto clean_up; + } + +@@ -1608,7 +1608,7 @@ static int __init m66592_probe(struct pl + ret = request_irq(irq, m66592_irq, IRQF_DISABLED | IRQF_SHARED, + udc_name, m66592); + if (ret < 0) { +- printk(KERN_ERR "request_irq error (%d)\n", ret); ++ pr_err("request_irq error (%d)\n", ret); + goto clean_up; + } + +--- a/drivers/usb/gadget/omap_udc.h ++++ b/drivers/usb/gadget/omap_udc.h +@@ -182,21 +182,16 @@ struct omap_udc { + + /*-------------------------------------------------------------------------*/ + +-#ifdef DEBUG +-#define DBG(stuff...) printk(KERN_DEBUG "udc: " stuff) +-#else +-#define DBG(stuff...) do{}while(0) +-#endif +- + #ifdef VERBOSE + # define VDBG DBG + #else + # define VDBG(stuff...) do{}while(0) + #endif + +-#define ERR(stuff...) printk(KERN_ERR "udc: " stuff) +-#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) +-#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++#define ERR(stuff...) pr_err("udc: " stuff) ++#define WARN(stuff...) pr_warning("udc: " stuff) ++#define INFO(stuff...) pr_info("udc: " stuff) ++#define DBG(stuff...) pr_debug("udc: " stuff) + + /*-------------------------------------------------------------------------*/ + +--- a/drivers/usb/gadget/pxa2xx_udc.c ++++ b/drivers/usb/gadget/pxa2xx_udc.c +@@ -2099,7 +2099,7 @@ static int __init pxa2xx_udc_probe(struc + /* insist on Intel/ARM/XScale */ + asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev)); + if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) { +- printk(KERN_ERR "%s: not XScale!\n", driver_name); ++ pr_err("%s: not XScale!\n", driver_name); + return -ENODEV; + } + +@@ -2128,7 +2128,7 @@ static int __init pxa2xx_udc_probe(struc + break; + #endif + default: +- printk(KERN_ERR "%s: unrecognized processor: %08x\n", ++ pr_err("%s: unrecognized processor: %08x\n", + driver_name, chiprev); + /* iop3xx, ixp4xx, ... */ + return -ENODEV; +@@ -2199,7 +2199,7 @@ static int __init pxa2xx_udc_probe(struc + retval = request_irq(irq, pxa2xx_udc_irq, + IRQF_DISABLED, driver_name, dev); + if (retval != 0) { +- printk(KERN_ERR "%s: can't get irq %d, err %d\n", ++ pr_err("%s: can't get irq %d, err %d\n", + driver_name, irq, retval); + goto err_irq1; + } +@@ -2212,7 +2212,7 @@ static int __init pxa2xx_udc_probe(struc + IRQF_DISABLED | IRQF_SAMPLE_RANDOM, + driver_name, dev); + if (retval != 0) { +- printk(KERN_ERR "%s: can't get irq %i, err %d\n", ++ pr_err("%s: can't get irq %i, err %d\n", + driver_name, LUBBOCK_USB_DISC_IRQ, retval); + lubbock_fail0: + goto err_irq_lub; +@@ -2222,7 +2222,7 @@ lubbock_fail0: + IRQF_DISABLED | IRQF_SAMPLE_RANDOM, + driver_name, dev); + if (retval != 0) { +- printk(KERN_ERR "%s: can't get irq %i, err %d\n", ++ pr_err("%s: can't get irq %i, err %d\n", + driver_name, LUBBOCK_USB_IRQ, retval); + free_irq(LUBBOCK_USB_DISC_IRQ, dev); + goto lubbock_fail0; +@@ -2235,7 +2235,7 @@ lubbock_fail0: + IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, + driver_name, dev); + if (retval != 0) { +- printk(KERN_ERR "%s: can't get irq %i, err %d\n", ++ pr_err("%s: can't get irq %i, err %d\n", + driver_name, vbus_irq, retval); + goto err_vbus_irq; + } +@@ -2361,7 +2361,7 @@ static struct platform_driver udc_driver + + static int __init udc_init(void) + { +- printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); ++ pr_info("%s: version %s\n", driver_name, DRIVER_VERSION); + return platform_driver_probe(&udc_driver, pxa2xx_udc_probe); + } + module_init(udc_init); +--- a/drivers/usb/gadget/pxa2xx_udc.h ++++ b/drivers/usb/gadget/pxa2xx_udc.h +@@ -151,6 +151,8 @@ static struct pxa2xx_udc *the_controller + #define DBG_NOISY 3 /* ... even more: request level */ + #define DBG_VERY_NOISY 4 /* ... even more: packet level */ + ++#define DMSG(stuff...) pr_debug("udc: " stuff) ++ + #ifdef DEBUG + + static const char *state_name[] = { +@@ -159,8 +161,6 @@ static const char *state_name[] = { + "EP0_END_XFER", "EP0_STALL" + }; + +-#define DMSG(stuff...) printk(KERN_DEBUG "udc: " stuff) +- + #ifdef VERBOSE + # define UDC_DEBUG DBG_VERBOSE + #else +@@ -241,8 +241,6 @@ dump_state(struct pxa2xx_udc *dev) + + #else + +-#define DMSG(stuff...) do{}while(0) +- + #define dump_udccr(x) do{}while(0) + #define dump_udccs0(x) do{}while(0) + #define dump_state(x) do{}while(0) +@@ -253,8 +251,9 @@ dump_state(struct pxa2xx_udc *dev) + + #define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0) + +-#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) +-#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++#define ERR(stuff...) pr_err("udc: " stuff) ++#define WARN(stuff...) pr_warning("udc: " stuff) ++#define INFO(stuff...) pr_info("udc: " stuff) + + + #endif /* __LINUX_USB_GADGET_PXA2XX_H */ +--- a/drivers/usb/gadget/rndis.c ++++ b/drivers/usb/gadget/rndis.c +@@ -53,21 +53,18 @@ + */ + + #if 0 +-#define DBG(str,args...) do { \ +- if (rndis_debug) \ +- printk(KERN_DEBUG str , ## args ); \ +- } while (0) + static int rndis_debug = 0; +- + module_param (rndis_debug, int, 0); + MODULE_PARM_DESC (rndis_debug, "enable debugging"); +- + #else +- + #define rndis_debug 0 +-#define DBG(str,args...) do{}while(0) + #endif + ++#define DBG(str,args...) do { \ ++ if (rndis_debug) \ ++ pr_debug(str , ## args); \ ++ } while (0) ++ + #define RNDIS_MAX_CONFIGS 1 + + +@@ -679,7 +676,7 @@ gen_ndis_query_resp (int configNr, u32 O + #endif + + default: +- printk (KERN_WARNING "%s: query unknown OID 0x%08X\n", ++ pr_warning("%s: query unknown OID 0x%08X\n", + __FUNCTION__, OID); + } + if (retval < 0) +@@ -804,7 +801,7 @@ update_linkstate: + #endif /* RNDIS_PM */ + + default: +- printk (KERN_WARNING "%s: set unknown OID 0x%08X, size %d\n", ++ pr_warning("%s: set unknown OID 0x%08X, size %d\n", + __FUNCTION__, OID, buf_len); + } + +@@ -1126,8 +1123,7 @@ int rndis_msg_parser (u8 configNr, u8 *b + * In one case those messages seemed to relate to the host + * suspending itself. + */ +- printk (KERN_WARNING +- "%s: unknown RNDIS message 0x%08X len %d\n", ++ pr_warning("%s: unknown RNDIS message 0x%08X len %d\n", + __FUNCTION__ , MsgType, MsgLength); + { + unsigned i; +--- a/drivers/usb/gadget/serial.c ++++ b/drivers/usb/gadget/serial.c +@@ -89,9 +89,9 @@ static int debug = 1; + #endif + + #define gs_debug(format, arg...) \ +- do { if (debug) printk(KERN_DEBUG format, ## arg); } while(0) ++ do { if (debug) pr_debug(format, ## arg); } while (0) + #define gs_debug_level(level, format, arg...) \ +- do { if (debug>=level) printk(KERN_DEBUG format, ## arg); } while(0) ++ do { if (debug >= level) pr_debug(format, ## arg); } while (0) + + + /* Thanks to NetChip Technologies for donating this product ID. +@@ -553,7 +553,8 @@ static int __init gs_module_init(void) + + retval = usb_gadget_register_driver(&gs_gadget_driver); + if (retval) { +- printk(KERN_ERR "gs_module_init: cannot register gadget driver, ret=%d\n", retval); ++ pr_err("gs_module_init: cannot register gadget driver, " ++ "ret=%d\n", retval); + return retval; + } + +@@ -579,11 +580,13 @@ static int __init gs_module_init(void) + if (retval) { + usb_gadget_unregister_driver(&gs_gadget_driver); + put_tty_driver(gs_tty_driver); +- printk(KERN_ERR "gs_module_init: cannot register tty driver, ret=%d\n", retval); ++ pr_err("gs_module_init: cannot register tty driver, " ++ "ret=%d\n", retval); + return retval; + } + +- printk(KERN_INFO "gs_module_init: %s %s loaded\n", GS_LONG_NAME, GS_VERSION_STR); ++ pr_info("gs_module_init: %s %s loaded\n", ++ GS_LONG_NAME, GS_VERSION_STR); + return 0; + } + +@@ -598,7 +601,8 @@ static void __exit gs_module_exit(void) + put_tty_driver(gs_tty_driver); + usb_gadget_unregister_driver(&gs_gadget_driver); + +- printk(KERN_INFO "gs_module_exit: %s %s unloaded\n", GS_LONG_NAME, GS_VERSION_STR); ++ pr_info("gs_module_exit: %s %s unloaded\n", ++ GS_LONG_NAME, GS_VERSION_STR); + } + + /* TTY Driver */ +@@ -621,7 +625,7 @@ static int gs_open(struct tty_struct *tt + gs_debug("gs_open: (%d,%p,%p)\n", port_num, tty, file); + + if (port_num < 0 || port_num >= GS_NUM_PORTS) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) invalid port number\n", ++ pr_err("gs_open: (%d,%p,%p) invalid port number\n", + port_num, tty, file); + return -ENODEV; + } +@@ -629,15 +633,14 @@ static int gs_open(struct tty_struct *tt + dev = gs_device; + + if (dev == NULL) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) NULL device pointer\n", ++ pr_err("gs_open: (%d,%p,%p) NULL device pointer\n", + port_num, tty, file); + return -ENODEV; + } + + mtx = &gs_open_close_lock[port_num]; + if (mutex_lock_interruptible(mtx)) { +- printk(KERN_ERR +- "gs_open: (%d,%p,%p) interrupted waiting for mutex\n", ++ pr_err("gs_open: (%d,%p,%p) interrupted waiting for mutex\n", + port_num, tty, file); + return -ERESTARTSYS; + } +@@ -645,8 +648,7 @@ static int gs_open(struct tty_struct *tt + spin_lock_irqsave(&dev->dev_lock, flags); + + if (dev->dev_config == GS_NO_CONFIG_ID) { +- printk(KERN_ERR +- "gs_open: (%d,%p,%p) device is not connected\n", ++ pr_err("gs_open: (%d,%p,%p) device is not connected\n", + port_num, tty, file); + ret = -ENODEV; + goto exit_unlock_dev; +@@ -655,7 +657,7 @@ static int gs_open(struct tty_struct *tt + port = dev->dev_port[port_num]; + + if (port == NULL) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) NULL port pointer\n", ++ pr_err("gs_open: (%d,%p,%p) NULL port pointer\n", + port_num, tty, file); + ret = -ENODEV; + goto exit_unlock_dev; +@@ -665,7 +667,7 @@ static int gs_open(struct tty_struct *tt + spin_unlock(&dev->dev_lock); + + if (port->port_dev == NULL) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) port disconnected (1)\n", ++ pr_err("gs_open: (%d,%p,%p) port disconnected (1)\n", + port_num, tty, file); + ret = -EIO; + goto exit_unlock_port; +@@ -692,8 +694,7 @@ static int gs_open(struct tty_struct *tt + + /* might have been disconnected while asleep, check */ + if (port->port_dev == NULL) { +- printk(KERN_ERR +- "gs_open: (%d,%p,%p) port disconnected (2)\n", ++ pr_err("gs_open: (%d,%p,%p) port disconnected (2)\n", + port_num, tty, file); + port->port_in_use = 0; + ret = -EIO; +@@ -701,7 +702,8 @@ static int gs_open(struct tty_struct *tt + } + + if ((port->port_write_buf=buf) == NULL) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) cannot allocate port write buffer\n", ++ pr_err("gs_open: (%d,%p,%p) cannot allocate " ++ "port write buffer\n", + port_num, tty, file); + port->port_in_use = 0; + ret = -ENOMEM; +@@ -714,7 +716,7 @@ static int gs_open(struct tty_struct *tt + + /* might have been disconnected while asleep, check */ + if (port->port_dev == NULL) { +- printk(KERN_ERR "gs_open: (%d,%p,%p) port disconnected (3)\n", ++ pr_err("gs_open: (%d,%p,%p) port disconnected (3)\n", + port_num, tty, file); + port->port_in_use = 0; + ret = -EIO; +@@ -762,7 +764,7 @@ static void gs_close(struct tty_struct * + struct mutex *mtx; + + if (port == NULL) { +- printk(KERN_ERR "gs_close: NULL port pointer\n"); ++ pr_err("gs_close: NULL port pointer\n"); + return; + } + +@@ -774,8 +776,7 @@ static void gs_close(struct tty_struct * + spin_lock_irq(&port->port_lock); + + if (port->port_open_count == 0) { +- printk(KERN_ERR +- "gs_close: (%d,%p,%p) port is already closed\n", ++ pr_err("gs_close: (%d,%p,%p) port is already closed\n", + port->port_num, tty, file); + goto exit; + } +@@ -837,7 +838,7 @@ static int gs_write(struct tty_struct *t + int ret; + + if (port == NULL) { +- printk(KERN_ERR "gs_write: NULL port pointer\n"); ++ pr_err("gs_write: NULL port pointer\n"); + return -EIO; + } + +@@ -850,14 +851,14 @@ static int gs_write(struct tty_struct *t + spin_lock_irqsave(&port->port_lock, flags); + + if (port->port_dev == NULL) { +- printk(KERN_ERR "gs_write: (%d,%p) port is not connected\n", ++ pr_err("gs_write: (%d,%p) port is not connected\n", + port->port_num, tty); + ret = -EIO; + goto exit; + } + + if (port->port_open_count == 0) { +- printk(KERN_ERR "gs_write: (%d,%p) port is closed\n", ++ pr_err("gs_write: (%d,%p) port is closed\n", + port->port_num, tty); + ret = -EBADF; + goto exit; +@@ -888,7 +889,7 @@ static void gs_put_char(struct tty_struc + struct gs_port *port = tty->driver_data; + + if (port == NULL) { +- printk(KERN_ERR "gs_put_char: NULL port pointer\n"); ++ pr_err("gs_put_char: NULL port pointer\n"); + return; + } + +@@ -898,13 +899,13 @@ static void gs_put_char(struct tty_struc + spin_lock_irqsave(&port->port_lock, flags); + + if (port->port_dev == NULL) { +- printk(KERN_ERR "gs_put_char: (%d,%p) port is not connected\n", ++ pr_err("gs_put_char: (%d,%p) port is not connected\n", + port->port_num, tty); + goto exit; + } + + if (port->port_open_count == 0) { +- printk(KERN_ERR "gs_put_char: (%d,%p) port is closed\n", ++ pr_err("gs_put_char: (%d,%p) port is closed\n", + port->port_num, tty); + goto exit; + } +@@ -924,7 +925,7 @@ static void gs_flush_chars(struct tty_st + struct gs_port *port = tty->driver_data; + + if (port == NULL) { +- printk(KERN_ERR "gs_flush_chars: NULL port pointer\n"); ++ pr_err("gs_flush_chars: NULL port pointer\n"); + return; + } + +@@ -933,14 +934,13 @@ static void gs_flush_chars(struct tty_st + spin_lock_irqsave(&port->port_lock, flags); + + if (port->port_dev == NULL) { +- printk(KERN_ERR +- "gs_flush_chars: (%d,%p) port is not connected\n", ++ pr_err("gs_flush_chars: (%d,%p) port is not connected\n", + port->port_num, tty); + goto exit; + } + + if (port->port_open_count == 0) { +- printk(KERN_ERR "gs_flush_chars: (%d,%p) port is closed\n", ++ pr_err("gs_flush_chars: (%d,%p) port is closed\n", + port->port_num, tty); + goto exit; + } +@@ -1038,7 +1038,7 @@ static int gs_ioctl(struct tty_struct *t + struct gs_port *port = tty->driver_data; + + if (port == NULL) { +- printk(KERN_ERR "gs_ioctl: NULL port pointer\n"); ++ pr_err("gs_ioctl: NULL port pointer\n"); + return -EIO; + } + +@@ -1076,7 +1076,7 @@ static int gs_send(struct gs_dev *dev) + struct gs_req_entry *req_entry; + + if (dev == NULL) { +- printk(KERN_ERR "gs_send: NULL device pointer\n"); ++ pr_err("gs_send: NULL device pointer\n"); + return -ENODEV; + } + +@@ -1103,7 +1103,7 @@ static int gs_send(struct gs_dev *dev) + req->length = len; + spin_unlock_irqrestore(&dev->dev_lock, flags); + if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) { +- printk(KERN_ERR ++ pr_err( + "gs_send: cannot queue read request, ret=%d\n", + ret); + spin_lock_irqsave(&dev->dev_lock, flags); +@@ -1144,9 +1144,7 @@ static int gs_send_packet(struct gs_dev + port = dev->dev_port[0]; + + if (port == NULL) { +- printk(KERN_ERR +- "gs_send_packet: port=%d, NULL port pointer\n", +- 0); ++ pr_err("gs_send_packet: port=%d, NULL port pointer\n", 0); + return -EIO; + } + +@@ -1193,7 +1191,7 @@ static int gs_recv_packet(struct gs_dev + port = dev->dev_port[0]; + + if (port == NULL) { +- printk(KERN_ERR "gs_recv_packet: port=%d, NULL port pointer\n", ++ pr_err("gs_recv_packet: port=%d, NULL port pointer\n", + port->port_num); + return -EIO; + } +@@ -1201,7 +1199,7 @@ static int gs_recv_packet(struct gs_dev + spin_lock(&port->port_lock); + + if (port->port_open_count == 0) { +- printk(KERN_ERR "gs_recv_packet: port=%d, port is closed\n", ++ pr_err("gs_recv_packet: port=%d, port is closed\n", + port->port_num); + ret = -EIO; + goto exit; +@@ -1211,14 +1209,14 @@ static int gs_recv_packet(struct gs_dev + tty = port->port_tty; + + if (tty == NULL) { +- printk(KERN_ERR "gs_recv_packet: port=%d, NULL tty pointer\n", ++ pr_err("gs_recv_packet: port=%d, NULL tty pointer\n", + port->port_num); + ret = -EIO; + goto exit; + } + + if (port->port_tty->magic != TTY_MAGIC) { +- printk(KERN_ERR "gs_recv_packet: port=%d, bad tty magic\n", ++ pr_err("gs_recv_packet: port=%d, bad tty magic\n", + port->port_num); + ret = -EIO; + goto exit; +@@ -1245,7 +1243,7 @@ static void gs_read_complete(struct usb_ + struct gs_dev *dev = ep->driver_data; + + if (dev == NULL) { +- printk(KERN_ERR "gs_read_complete: NULL device pointer\n"); ++ pr_err("gs_read_complete: NULL device pointer\n"); + return; + } + +@@ -1256,7 +1254,7 @@ static void gs_read_complete(struct usb_ + requeue: + req->length = ep->maxpacket; + if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) { +- printk(KERN_ERR ++ pr_err( + "gs_read_complete: cannot queue read request, ret=%d\n", + ret); + } +@@ -1270,7 +1268,7 @@ requeue: + + default: + /* unexpected */ +- printk(KERN_ERR ++ pr_err( + "gs_read_complete: unexpected status error, status=%d\n", + req->status); + goto requeue; +@@ -1287,7 +1285,7 @@ static void gs_write_complete(struct usb + struct gs_req_entry *gs_req = req->context; + + if (dev == NULL) { +- printk(KERN_ERR "gs_write_complete: NULL device pointer\n"); ++ pr_err("gs_write_complete: NULL device pointer\n"); + return; + } + +@@ -1296,8 +1294,7 @@ static void gs_write_complete(struct usb + /* normal completion */ + requeue: + if (gs_req == NULL) { +- printk(KERN_ERR +- "gs_write_complete: NULL request pointer\n"); ++ pr_err("gs_write_complete: NULL request pointer\n"); + return; + } + +@@ -1316,7 +1313,7 @@ requeue: + break; + + default: +- printk(KERN_ERR ++ pr_err( + "gs_write_complete: unexpected status error, status=%d\n", + req->status); + goto requeue; +@@ -1351,7 +1348,7 @@ static int __init gs_bind(struct usb_gad + gs_device_desc.bcdDevice = + cpu_to_le16(GS_VERSION_NUM | gcnum); + else { +- printk(KERN_WARNING "gs_bind: controller '%s' not recognized\n", ++ pr_warning("gs_bind: controller '%s' not recognized\n", + gadget->name); + /* unrecognized, but safe unless bulk is REALLY quirky */ + gs_device_desc.bcdDevice = +@@ -1375,7 +1372,7 @@ static int __init gs_bind(struct usb_gad + if (use_acm) { + ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc); + if (!ep) { +- printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name); ++ pr_err("gs_bind: cannot run ACM on %s\n", gadget->name); + goto autoconf_fail; + } + gs_device_desc.idProduct = __constant_cpu_to_le16( +@@ -1425,7 +1422,7 @@ static int __init gs_bind(struct usb_gad + set_gadget_data(gadget, dev); + + if ((ret=gs_alloc_ports(dev, GFP_KERNEL)) != 0) { +- printk(KERN_ERR "gs_bind: cannot allocate ports\n"); ++ pr_err("gs_bind: cannot allocate ports\n"); + gs_unbind(gadget); + return ret; + } +@@ -1441,13 +1438,13 @@ static int __init gs_bind(struct usb_gad + + gadget->ep0->driver_data = dev; + +- printk(KERN_INFO "gs_bind: %s %s bound\n", ++ pr_info("gs_bind: %s %s bound\n", + GS_LONG_NAME, GS_VERSION_STR); + + return 0; + + autoconf_fail: +- printk(KERN_ERR "gs_bind: cannot autoconfigure on %s\n", gadget->name); ++ pr_err("gs_bind: cannot autoconfigure on %s\n", gadget->name); + return -ENODEV; + } + +@@ -1480,7 +1477,7 @@ static void /* __init_or_exit */ gs_unbi + set_gadget_data(gadget, NULL); + } + +- printk(KERN_INFO "gs_unbind: %s %s unbound\n", GS_LONG_NAME, ++ pr_info("gs_unbind: %s %s unbound\n", GS_LONG_NAME, + GS_VERSION_STR); + } + +@@ -1513,7 +1510,8 @@ static int gs_setup(struct usb_gadget *g + break; + + default: +- printk(KERN_ERR "gs_setup: unknown request, type=%02x, request=%02x, value=%04x, index=%04x, length=%d\n", ++ pr_err("gs_setup: unknown request, type=%02x, request=%02x, " ++ "value=%04x, index=%04x, length=%d\n", + ctrl->bRequestType, ctrl->bRequest, + wValue, wIndex, wLength); + break; +@@ -1526,7 +1524,7 @@ static int gs_setup(struct usb_gadget *g + && (ret % gadget->ep0->maxpacket) == 0; + ret = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); + if (ret < 0) { +- printk(KERN_ERR "gs_setup: cannot queue response, ret=%d\n", ++ pr_err("gs_setup: cannot queue response, ret=%d\n", + ret); + req->status = 0; + gs_setup_complete(gadget->ep0, req); +@@ -1656,7 +1654,8 @@ set_interface_done: + break; + + default: +- printk(KERN_ERR "gs_setup: unknown standard request, type=%02x, request=%02x, value=%04x, index=%04x, length=%d\n", ++ pr_err("gs_setup: unknown standard request, type=%02x, " ++ "request=%02x, value=%04x, index=%04x, length=%d\n", + ctrl->bRequestType, ctrl->bRequest, + wValue, wIndex, wLength); + break; +@@ -1682,7 +1681,7 @@ static int gs_setup_class(struct usb_gad + * handler copy that data to port->port_line_coding (iff + * it's valid) and maybe pass it on. Until then, fail. + */ +- printk(KERN_WARNING "gs_setup: set_line_coding " ++ pr_warning("gs_setup: set_line_coding " + "unuspported\n"); + break; + +@@ -1702,12 +1701,12 @@ static int gs_setup_class(struct usb_gad + * handler use that to set the state (iff it's valid) and + * maybe pass it on. Until then, fail. + */ +- printk(KERN_WARNING "gs_setup: set_control_line_state " ++ pr_warning("gs_setup: set_control_line_state " + "unuspported\n"); + break; + + default: +- printk(KERN_ERR "gs_setup: unknown class request, " ++ pr_err("gs_setup: unknown class request, " + "type=%02x, request=%02x, value=%04x, " + "index=%04x, length=%d\n", + ctrl->bRequestType, ctrl->bRequest, +@@ -1724,7 +1723,8 @@ static int gs_setup_class(struct usb_gad + static void gs_setup_complete(struct usb_ep *ep, struct usb_request *req) + { + if (req->status || req->actual != req->length) { +- printk(KERN_ERR "gs_setup_complete: status error, status=%d, actual=%d, length=%d\n", ++ pr_err("gs_setup_complete: status error, status=%d, " ++ "actual=%d, length=%d\n", + req->status, req->actual, req->length); + } + } +@@ -1751,11 +1751,11 @@ static void gs_disconnect(struct usb_gad + + /* re-allocate ports for the next connection */ + if (gs_alloc_ports(dev, GFP_ATOMIC) != 0) +- printk(KERN_ERR "gs_disconnect: cannot re-allocate ports\n"); ++ pr_err("gs_disconnect: cannot re-allocate ports\n"); + + spin_unlock_irqrestore(&dev->dev_lock, flags); + +- printk(KERN_INFO "gs_disconnect: %s disconnected\n", GS_LONG_NAME); ++ pr_info("gs_disconnect: %s disconnected\n", GS_LONG_NAME); + } + + /* +@@ -1778,7 +1778,7 @@ static int gs_set_config(struct gs_dev * + struct gs_req_entry *req_entry; + + if (dev == NULL) { +- printk(KERN_ERR "gs_set_config: NULL device pointer\n"); ++ pr_err("gs_set_config: NULL device pointer\n"); + return 0; + } + +@@ -1823,7 +1823,8 @@ static int gs_set_config(struct gs_dev * + dev->dev_notify_ep = ep; + dev->dev_notify_ep_desc = ep_desc; + } else { +- printk(KERN_ERR "gs_set_config: cannot enable notify endpoint %s, ret=%d\n", ++ pr_err("gs_set_config: cannot enable NOTIFY " ++ "endpoint %s, ret=%d\n", + ep->name, ret); + goto exit_reset_config; + } +@@ -1839,7 +1840,8 @@ static int gs_set_config(struct gs_dev * + dev->dev_in_ep = ep; + dev->dev_in_ep_desc = ep_desc; + } else { +- printk(KERN_ERR "gs_set_config: cannot enable in endpoint %s, ret=%d\n", ++ pr_err("gs_set_config: cannot enable IN " ++ "endpoint %s, ret=%d\n", + ep->name, ret); + goto exit_reset_config; + } +@@ -1855,7 +1857,8 @@ static int gs_set_config(struct gs_dev * + dev->dev_out_ep = ep; + dev->dev_out_ep_desc = ep_desc; + } else { +- printk(KERN_ERR "gs_set_config: cannot enable out endpoint %s, ret=%d\n", ++ pr_err("gs_set_config: cannot enable OUT " ++ "endpoint %s, ret=%d\n", + ep->name, ret); + goto exit_reset_config; + } +@@ -1865,7 +1868,7 @@ static int gs_set_config(struct gs_dev * + + if (dev->dev_in_ep == NULL || dev->dev_out_ep == NULL + || (config != GS_BULK_CONFIG_ID && dev->dev_notify_ep == NULL)) { +- printk(KERN_ERR "gs_set_config: cannot find endpoints\n"); ++ pr_err("gs_set_config: cannot find endpoints\n"); + ret = -ENODEV; + goto exit_reset_config; + } +@@ -1876,11 +1879,12 @@ static int gs_set_config(struct gs_dev * + if ((req=gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC))) { + req->complete = gs_read_complete; + if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) { +- printk(KERN_ERR "gs_set_config: cannot queue read request, ret=%d\n", +- ret); ++ pr_err("gs_set_config: cannot queue read " ++ "request, ret=%d\n", ret); + } + } else { +- printk(KERN_ERR "gs_set_config: cannot allocate read requests\n"); ++ pr_err("gs_set_config: cannot allocate " ++ "read requests\n"); + ret = -ENOMEM; + goto exit_reset_config; + } +@@ -1893,13 +1897,14 @@ static int gs_set_config(struct gs_dev * + req_entry->re_req->complete = gs_write_complete; + list_add(&req_entry->re_entry, &dev->dev_req_list); + } else { +- printk(KERN_ERR "gs_set_config: cannot allocate write requests\n"); ++ pr_err("gs_set_config: cannot allocate " ++ "write requests\n"); + ret = -ENOMEM; + goto exit_reset_config; + } + } + +- printk(KERN_INFO "gs_set_config: %s configured, %s speed %s config\n", ++ pr_info("gs_set_config: %s configured, %s speed %s config\n", + GS_LONG_NAME, + gadget->speed == USB_SPEED_HIGH ? "high" : "full", + config == GS_BULK_CONFIG_ID ? "BULK" : "CDC-ACM"); +@@ -1926,7 +1931,7 @@ static void gs_reset_config(struct gs_de + struct gs_req_entry *req_entry; + + if (dev == NULL) { +- printk(KERN_ERR "gs_reset_config: NULL device pointer\n"); ++ pr_err("gs_reset_config: NULL device pointer\n"); + return; + } + +--- a/drivers/usb/gadget/zero.c ++++ b/drivers/usb/gadget/zero.c +@@ -1115,7 +1115,7 @@ zero_bind (struct usb_gadget *gadget) + ep = usb_ep_autoconfig (gadget, &fs_source_desc); + if (!ep) { + autoconf_fail: +- printk (KERN_ERR "%s: can't autoconfigure on %s\n", ++ pr_err("%s: can't autoconfigure on %s\n", + shortname, gadget->name); + return -ENODEV; + } +@@ -1139,7 +1139,7 @@ autoconf_fail: + * things like configuration and altsetting numbering + * can need hardware-specific attention though. + */ +- printk (KERN_WARNING "%s: controller '%s' not recognized\n", ++ pr_warning("%s: controller '%s' not recognized\n", + shortname, gadget->name); + device_desc.bcdDevice = __constant_cpu_to_le16 (0x9999); + } diff --git a/usb/usb-make-ksuspend_usbd-thread-non-freezable.patch b/usb/usb-make-ksuspend_usbd-thread-non-freezable.patch new file mode 100644 index 00000000000000..2731b7493a3077 --- /dev/null +++ b/usb/usb-make-ksuspend_usbd-thread-non-freezable.patch @@ -0,0 +1,33 @@ +From stern@rowland.harvard.edu Mon Nov 26 22:50:47 2007 +From: Alan Stern <stern@rowland.harvard.edu> +Date: Mon, 19 Nov 2007 10:15:02 -0500 (EST) +Subject: USB: make ksuspend_usbd thread non-freezable +To: Greg KH <greg@kroah.com> +Cc: USB development list <linux-usb-devel@lists.sourceforge.net> +Message-ID: <Pine.LNX.4.44L0.0711191010050.4806-100000@iolanthe.rowland.org> + + +This patch (as1012b) makes the ksuspend_usbd kernel thread +non-freezable. Since the PM core has been changed to lock all devices +during a system sleep, the thread no longer needs to be frozen. It +won't interfere with a system sleep because before trying to resume a +root hub device, it acquires the device's lock. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/core/usb.c ++++ b/drivers/usb/core/usb.c +@@ -230,7 +230,7 @@ static int ksuspend_usb_init(void) + * singlethreaded. Its job doesn't justify running on more + * than one CPU. + */ +- ksuspend_usb_wq = create_freezeable_workqueue("ksuspend_usbd"); ++ ksuspend_usb_wq = create_singlethread_workqueue("ksuspend_usbd"); + if (!ksuspend_usb_wq) + return -ENOMEM; + return 0; diff --git a/usb/usb-prepare-serial-core-for-autosuspend.patch b/usb/usb-prepare-serial-core-for-autosuspend.patch new file mode 100644 index 00000000000000..e58721af73af08 --- /dev/null +++ b/usb/usb-prepare-serial-core-for-autosuspend.patch @@ -0,0 +1,100 @@ +From sarah.a.sharp@intel.com Mon Nov 26 22:53:36 2007 +From: Sarah Sharp <sarah.a.sharp@intel.com> +Date: Tue, 13 Nov 2007 17:10:09 -0800 +Subject: USB: Prepare serial core for autosuspend. +To: Greg KH <greg@kroah.com> +Cc: linux-usb-devel@lists.sourceforge.net +Message-ID: <20071114011009.GA30481@localdomain> +Content-Disposition: inline + + +Claim the interface for a USB to serial converter when the tty is open, +and release the interface when the tty is closed. + +If a driver doesn't provide a resume function, use the generic resume +instead. + +Make sure the generic resume function does not submit the URBs if we're +coming back from autosuspend. On autoresume, we know that the open +function will be called next, which will attempt to submit the URBs. If +we submit them in the resume function, the open will fail. + +This works for: + - autosuspend + - suspending with the tty open or closed + - hibernate with the tty closed + +A hibernate (or a suspend that causes the USB subsystem to lose power) +has issues. If you have the tty open when you hibernate, a new tty will +be created when the device re-enumerates during resume. + +Signed-off-by: Sarah Sharp <sarah.a.sharp@intel.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/generic.c | 8 ++++++++ + drivers/usb/serial/usb-serial.c | 12 ++++++++++-- + 2 files changed, 18 insertions(+), 2 deletions(-) + +--- a/drivers/usb/serial/generic.c ++++ b/drivers/usb/serial/generic.c +@@ -175,6 +175,14 @@ int usb_serial_generic_resume(struct usb + struct usb_serial_port *port; + int i, c = 0, r; + ++#ifdef CONFIG_PM ++ /* ++ * If this is an autoresume, don't submit URBs. ++ * They will be submitted in the open function instead. ++ */ ++ if (serial->dev->auto_pm) ++ return 0; ++#endif + for (i = 0; i < serial->num_ports; i++) { + port = serial->port[i]; + if (port->open_count && port->read_urb) { +--- a/drivers/usb/serial/usb-serial.c ++++ b/drivers/usb/serial/usb-serial.c +@@ -225,16 +225,21 @@ static int serial_open (struct tty_struc + goto bailout_mutex_unlock; + } + ++ retval = usb_autopm_get_interface(serial->interface); ++ if (retval) ++ goto bailout_module_put; + /* only call the device specific open if this + * is the first time the port is opened */ + retval = serial->type->open(port, filp); + if (retval) +- goto bailout_module_put; ++ goto bailout_interface_put; + } + + mutex_unlock(&port->mutex); + return 0; + ++bailout_interface_put: ++ usb_autopm_put_interface(serial->interface); + bailout_module_put: + module_put(serial->type->driver.owner); + bailout_mutex_unlock: +@@ -277,8 +282,10 @@ static void serial_close(struct tty_stru + } + } + +- if (port->open_count == 0) ++ if (port->open_count == 0) { ++ usb_autopm_put_interface(port->serial->interface); + module_put(port->serial->type->driver.owner); ++ } + + mutex_unlock(&port->mutex); + usb_serial_put(port->serial); +@@ -1255,6 +1262,7 @@ static void fixup_generic(struct usb_ser + set_to_generic_if_null(device, read_bulk_callback); + set_to_generic_if_null(device, write_bulk_callback); + set_to_generic_if_null(device, shutdown); ++ set_to_generic_if_null(device, resume); + } + + int usb_serial_register(struct usb_serial_driver *driver) /* must be called with BKL held */ diff --git a/usb/usb-s3c2410-gadget-allow-sharing-of-vbus-irq.patch b/usb/usb-s3c2410-gadget-allow-sharing-of-vbus-irq.patch new file mode 100644 index 00000000000000..c0ec15f88829fe --- /dev/null +++ b/usb/usb-s3c2410-gadget-allow-sharing-of-vbus-irq.patch @@ -0,0 +1,37 @@ +From ben-linux@fluff.org Mon Nov 26 23:06:43 2007 +From: Ben Dooks <ben-linux@fluff.org> +Date: Mon, 19 Nov 2007 22:28:14 +0000 +Subject: USB: s3c2410 gadget: allow sharing of vbus irq +To: Linux USB Devel <linux-usb-devel@lists.sourceforge.net> +Cc: vince@simtec.co.uk, Greg KH <greg@kroah.com>, Ben Dooks <ben-linux@fluff.org> +Message-ID: <20071119222847.060352719@fluff.org> + + +If another driver wants to claim the vbus pin, say +to notify the user of an connect/disconnect then allow +the IRQ to be shared by specifiying IRQ_SHARED in the +flags. + +Signed-off-by: Ben Dooks <ben-linux@fluff.org> +Acked-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/s3c2410_udc.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/usb/gadget/s3c2410_udc.c ++++ b/drivers/usb/gadget/s3c2410_udc.c +@@ -1872,9 +1872,9 @@ static int s3c2410_udc_probe(struct plat + if (udc_info && udc_info->vbus_pin > 0) { + irq = s3c2410_gpio_getirq(udc_info->vbus_pin); + retval = request_irq(irq, s3c2410_udc_vbus_irq, +- IRQF_DISABLED | IRQF_TRIGGER_RISING +- | IRQF_TRIGGER_FALLING, +- gadget_name, udc); ++ IRQF_DISABLED | IRQF_TRIGGER_RISING ++ | IRQF_TRIGGER_FALLING | IRQF_SHARED, ++ gadget_name, udc); + + if (retval != 0) { + dev_err(dev, "can't get vbus irq %i, err %d\n", diff --git a/usb/usb-s3c2410-gadget-ensure-vbus-pin-in-input-mode-during-read.patch b/usb/usb-s3c2410-gadget-ensure-vbus-pin-in-input-mode-during-read.patch new file mode 100644 index 00000000000000..756d225ce36c1e --- /dev/null +++ b/usb/usb-s3c2410-gadget-ensure-vbus-pin-in-input-mode-during-read.patch @@ -0,0 +1,34 @@ +From ben-linux@fluff.org Mon Nov 26 23:07:05 2007 +From: Ben Dooks <ben-linux@fluff.org> +Date: Mon, 19 Nov 2007 22:28:15 +0000 +Subject: USB: s3c2410 gadget: ensure vbus pin in input mode during read +To: Linux USB Devel <linux-usb-devel@lists.sourceforge.net> +Cc: vince@simtec.co.uk, Greg KH <greg@kroah.com>, Ben Dooks <ben-linux@fluff.org> +Message-ID: <20071119222847.239944382@fluff.org> + + +Some CPUs in the S3C24XX series do not support readback of the +value of a pin when the pin has been configured to an IRQ. + +Signed-off-by: Ben Dooks <ben-linux@fluff.org> +Acked-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/s3c2410_udc.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/gadget/s3c2410_udc.c ++++ b/drivers/usb/gadget/s3c2410_udc.c +@@ -1511,7 +1511,11 @@ static irqreturn_t s3c2410_udc_vbus_irq( + unsigned int value; + + dprintk(DEBUG_NORMAL, "%s()\n", __func__); ++ ++ /* some cpus cannot read from an line configured to IRQ! */ ++ s3c2410_gpio_cfgpin(udc_info->vbus_pin, S3C2410_GPIO_INPUT); + value = s3c2410_gpio_getpin(udc_info->vbus_pin); ++ s3c2410_gpio_cfgpin(udc_info->vbus_pin, S3C2410_GPIO_SFN2); + + if (udc_info->vbus_pin_inverted) + value = !value; diff --git a/usb/usb-s3c2410-gadget-header-move-fixups.patch b/usb/usb-s3c2410-gadget-header-move-fixups.patch new file mode 100644 index 00000000000000..34730c3b25795c --- /dev/null +++ b/usb/usb-s3c2410-gadget-header-move-fixups.patch @@ -0,0 +1,35 @@ +From ben-linux@fluff.org Mon Nov 26 23:05:09 2007 +From: Ben Dooks <ben-linux@fluff.org> +Date: Mon, 19 Nov 2007 22:28:13 +0000 +Subject: USB: s3c2410 gadget: Header move fixups +To: Linux USB Devel <linux-usb-devel@lists.sourceforge.net> +Cc: vince@simtec.co.uk, Greg KH <greg@kroah.com>, Ben Dooks <ben-linux@fluff.org> +Message-ID: <20071119222846.887780944@fluff.org> + + +Fixup the fallout from the arch moves earlier in the kernel +series. + +Signed-off-by: Ben Dooks <ben-linux@fluff.org> +Acked-by: David Brownell <dbrownell@users.sourceforge.net> + +--- + drivers/usb/gadget/s3c2410_udc.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/usb/gadget/s3c2410_udc.c ++++ b/drivers/usb/gadget/s3c2410_udc.c +@@ -52,10 +52,10 @@ + #include <asm/arch/irqs.h> + + #include <asm/arch/hardware.h> +-#include <asm/arch/regs-clock.h> + #include <asm/arch/regs-gpio.h> +-#include <asm/arch/regs-udc.h> +-#include <asm/arch/udc.h> ++ ++#include <asm/plat-s3c24xx/regs-udc.h> ++#include <asm/plat-s3c24xx/udc.h> + + #include <asm/mach-types.h> + diff --git a/usb/usb-usb-peripheral-controller-driver-oops-avoidance.patch b/usb/usb-usb-peripheral-controller-driver-oops-avoidance.patch new file mode 100644 index 00000000000000..0e47741440db28 --- /dev/null +++ b/usb/usb-usb-peripheral-controller-driver-oops-avoidance.patch @@ -0,0 +1,92 @@ +From david-b@pacbell.net Mon Nov 26 23:00:35 2007 +From: Patrik Sevallius <patrik.sevallius@enea.com> +Date: Tue, 20 Nov 2007 09:32:00 -0800 +Subject: USB: usb peripheral controller driver oops avoidance +To: Greg KH <greg@kroah.com> +Cc: linux-usb-devel@lists.sourceforge.net, Patrik Sevallius <patrik.sevallius@enea.com> +Message-ID: <200711200932.01186.david-b@pacbell.net> +Content-Disposition: inline + + +From: Patrik Sevallius <patrik.sevallius@enea.com> + +I'm having problem with oopses when rebooting, if I modprobe g_serial +and rmmod g_serial and do a reboot I get an oops in device_shutdown(). +The reason seems to be that usb_gadget_unregister_driver() doesn't do +enough cleanup. With this at91_udc patch I don't get the oops. + +Signed-off-by: Patrik Sevallius <patrik.sevallius@enea.com> +[ Same bug was in other peripheral controller drivers; fixed ] +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/amd5536udc.c | 1 + + drivers/usb/gadget/at91_udc.c | 2 ++ + drivers/usb/gadget/goku_udc.c | 1 + + drivers/usb/gadget/lh7a40x_udc.c | 1 + + drivers/usb/gadget/m66592-udc.c | 1 + + drivers/usb/gadget/pxa2xx_udc.c | 1 + + 6 files changed, 7 insertions(+) + +--- a/drivers/usb/gadget/amd5536udc.c ++++ b/drivers/usb/gadget/amd5536udc.c +@@ -2038,6 +2038,7 @@ int usb_gadget_unregister_driver(struct + spin_unlock_irqrestore(&dev->lock, flags); + + driver->unbind(&dev->gadget); ++ dev->gadget.dev.driver = NULL; + dev->driver = NULL; + + /* set SD */ +--- a/drivers/usb/gadget/at91_udc.c ++++ b/drivers/usb/gadget/at91_udc.c +@@ -1614,6 +1614,8 @@ int usb_gadget_unregister_driver (struct + local_irq_enable(); + + driver->unbind(&udc->gadget); ++ udc->gadget.dev.driver = NULL; ++ udc->gadget.dev.driver_data = NULL; + udc->driver = NULL; + + DBG("unbound from %s\n", driver->driver.name); +--- a/drivers/usb/gadget/goku_udc.c ++++ b/drivers/usb/gadget/goku_udc.c +@@ -1422,6 +1422,7 @@ int usb_gadget_unregister_driver(struct + spin_unlock_irqrestore(&dev->lock, flags); + + driver->unbind(&dev->gadget); ++ dev->gadget.dev.driver = NULL; + + DBG(dev, "unregistered driver '%s'\n", driver->driver.name); + return 0; +--- a/drivers/usb/gadget/lh7a40x_udc.c ++++ b/drivers/usb/gadget/lh7a40x_udc.c +@@ -474,6 +474,7 @@ int usb_gadget_unregister_driver(struct + spin_unlock_irqrestore(&dev->lock, flags); + + driver->unbind(&dev->gadget); ++ dev->gadget.dev.driver = NULL; + device_del(&dev->gadget.dev); + + udc_disable(dev); +--- a/drivers/usb/gadget/m66592-udc.c ++++ b/drivers/usb/gadget/m66592-udc.c +@@ -1508,6 +1508,7 @@ int usb_gadget_unregister_driver(struct + m66592_bclr(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0); + + driver->unbind(&m66592->gadget); ++ m66592->gadget.dev.driver = NULL; + + init_controller(m66592); + disable_controller(m66592); +--- a/drivers/usb/gadget/pxa2xx_udc.c ++++ b/drivers/usb/gadget/pxa2xx_udc.c +@@ -1345,6 +1345,7 @@ int usb_gadget_unregister_driver(struct + local_irq_enable(); + + driver->unbind(&dev->gadget); ++ dev->gadget.dev.driver = NULL; + dev->driver = NULL; + + device_del (&dev->gadget.dev); diff --git a/usb/usb-usb-storage-unusual_devs-entry-for-jetflash-ts1gjf2a.patch b/usb/usb-usb-storage-unusual_devs-entry-for-jetflash-ts1gjf2a.patch new file mode 100644 index 00000000000000..2508f49bdba1ca --- /dev/null +++ b/usb/usb-usb-storage-unusual_devs-entry-for-jetflash-ts1gjf2a.patch @@ -0,0 +1,41 @@ +From stern@rowland.harvard.edu Mon Nov 26 23:04:01 2007 +From: Alan Stern <stern@rowland.harvard.edu> +Date: Mon, 26 Nov 2007 10:23:05 -0500 (EST) +Subject: USB: usb-storage: unusual_devs entry for JetFlash TS1GJF2A +To: Greg KH <greg@kroah.com>, Phil Dibowitz <phil@ipom.com> +Cc: RTE <raszilki@yandex.ru>, USB Storage list <usb-storage@lists.one-eyed-alien.net> +Message-ID: <Pine.LNX.4.44L0.0711261020570.4250-100000@iolanthe.rowland.org> + + +This patch (as1018) adds an unusual_devs entry for the JetFlash +TS1GJF2A. This device doesn't like read requests for more than 188 +sectors. Setting max_sectors down to 64 is overkill, but at least +it will work without errors. + +For the torturous debugging history, see this thread: + + http://marc.info/?t=118745764700005&r=1&w=2 + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/storage/unusual_devs.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/drivers/usb/storage/unusual_devs.h ++++ b/drivers/usb/storage/unusual_devs.h +@@ -731,6 +731,13 @@ UNUSUAL_DEV( 0x0584, 0x0008, 0x0102, 0x + US_SC_SCSI, US_PR_ALAUDA, init_alauda, 0 ), + #endif + ++/* Reported by RTE <raszilki@yandex.ru> */ ++UNUSUAL_DEV( 0x058f, 0x6387, 0x0141, 0x0141, ++ "JetFlash", ++ "TS1GJF2A/120", ++ US_SC_DEVICE, US_PR_DEVICE, NULL, ++ US_FL_MAX_SECTORS_64 ), ++ + /* Fabrizio Fellini <fello@libero.it> */ + UNUSUAL_DEV( 0x0595, 0x4343, 0x0000, 0x2210, + "Fujifilm", |
