diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-04-21 16:24:21 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-04-21 16:24:21 -0700 |
| commit | 13c1436beea0651bbfe5e5ba2557a9375a6da746 (patch) | |
| tree | 8311a110934314bf9609615e98f9241dfff2f6a8 /usb | |
| parent | 2fe52c5cf2dc0865e1c9e9d832c10ccd3aa44538 (diff) | |
| download | patches-13c1436beea0651bbfe5e5ba2557a9375a6da746.tar.gz | |
put patches in proper place
Diffstat (limited to 'usb')
7 files changed, 29 insertions, 465 deletions
diff --git a/usb/musb-otg-timer-cleanup.patch b/usb/musb-otg-timer-cleanup.patch index 8bb4f3594e3a80..f42f94ae5c75b8 100644 --- a/usb/musb-otg-timer-cleanup.patch +++ b/usb/musb-otg-timer-cleanup.patch @@ -179,7 +179,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> /* called with IRQs blocked; ON/nonzero implies starting a session, --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c -@@ -45,7 +45,6 @@ +@@ -44,7 +44,6 @@ #define get_cpu_rev() 2 #endif @@ -187,7 +187,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> static struct timer_list musb_idle_timer; -@@ -246,7 +245,6 @@ int __init musb_platform_init(struct mus +@@ -245,7 +244,6 @@ int __init musb_platform_init(struct mus if (is_host_enabled(musb)) musb->board_set_vbus = omap_set_vbus; diff --git a/usb/musb-proper-hookup-to-transceiver-drivers.patch b/usb/musb-proper-hookup-to-transceiver-drivers.patch index f4b58c2156d609..935aa182408fcd 100644 --- a/usb/musb-proper-hookup-to-transceiver-drivers.patch +++ b/usb/musb-proper-hookup-to-transceiver-drivers.patch @@ -721,7 +721,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> put_unaligned(cpu_to_le32(musb->port1_status --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c -@@ -62,17 +62,17 @@ static void musb_do_idle(unsigned long _ +@@ -61,17 +61,17 @@ static void musb_do_idle(unsigned long _ devctl = musb_readb(musb->mregs, MUSB_DEVCTL); @@ -742,7 +742,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> MUSB_HST_MODE(musb); } break; -@@ -90,7 +90,7 @@ static void musb_do_idle(unsigned long _ +@@ -89,7 +89,7 @@ static void musb_do_idle(unsigned long _ musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; usb_hcd_poll_rh_status(musb_to_hcd(musb)); /* NOTE: it might really be A_WAIT_BCON ... */ @@ -751,7 +751,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } break; #endif -@@ -98,9 +98,9 @@ static void musb_do_idle(unsigned long _ +@@ -97,9 +97,9 @@ static void musb_do_idle(unsigned long _ case OTG_STATE_A_HOST: devctl = musb_readb(musb->mregs, MUSB_DEVCTL); if (devctl & MUSB_DEVCTL_BDEVICE) @@ -763,7 +763,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> #endif default: break; -@@ -119,7 +119,7 @@ void musb_platform_try_idle(struct musb +@@ -118,7 +118,7 @@ void musb_platform_try_idle(struct musb /* Never idle if active, or when VBUS timeout is not set as host */ if (musb->is_active || ((musb->a_wait_bcon == 0) @@ -772,7 +772,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> DBG(4, "%s active, deleting timer\n", otg_state_string(musb)); del_timer(&musb_idle_timer); last_timer = jiffies; -@@ -164,8 +164,8 @@ static void omap_set_vbus(struct musb *m +@@ -163,8 +163,8 @@ static void omap_set_vbus(struct musb *m if (is_on) { musb->is_active = 1; @@ -783,7 +783,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> devctl |= MUSB_DEVCTL_SESSION; MUSB_HST_MODE(musb); -@@ -176,8 +176,8 @@ static void omap_set_vbus(struct musb *m +@@ -175,8 +175,8 @@ static void omap_set_vbus(struct musb *m * jumping right to B_IDLE... */ @@ -794,7 +794,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> devctl &= ~MUSB_DEVCTL_SESSION; MUSB_DEV_MODE(musb); -@@ -189,10 +189,6 @@ static void omap_set_vbus(struct musb *m +@@ -188,10 +188,6 @@ static void omap_set_vbus(struct musb *m otg_state_string(musb), musb_readb(musb->mregs, MUSB_DEVCTL)); } @@ -805,7 +805,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> static int musb_platform_resume(struct musb *musb); -@@ -203,24 +199,6 @@ int musb_platform_set_mode(struct musb * +@@ -202,24 +198,6 @@ int musb_platform_set_mode(struct musb * devctl |= MUSB_DEVCTL_SESSION; musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); @@ -830,7 +830,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> return 0; } -@@ -232,6 +210,16 @@ int __init musb_platform_init(struct mus +@@ -231,6 +209,16 @@ int __init musb_platform_init(struct mus omap_cfg_reg(AE5_2430_USB0HS_STP); #endif @@ -847,7 +847,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> musb_platform_resume(musb); l = omap_readl(OTG_SYSCONFIG); -@@ -258,8 +246,6 @@ int __init musb_platform_init(struct mus +@@ -257,8 +245,6 @@ int __init musb_platform_init(struct mus if (is_host_enabled(musb)) musb->board_set_vbus = omap_set_vbus; @@ -856,7 +856,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> musb->a_wait_bcon = MUSB_TIMEOUT_A_WAIT_BCON; setup_timer(&musb_idle_timer, musb_do_idle, (unsigned long) musb); -@@ -283,8 +269,7 @@ int musb_platform_suspend(struct musb *m +@@ -282,8 +268,7 @@ int musb_platform_suspend(struct musb *m l |= ENABLEWAKEUP; /* enable wakeup */ omap_writel(l, OTG_SYSCONFIG); @@ -866,7 +866,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> if (musb->set_clock) musb->set_clock(musb->clock, 0); -@@ -301,8 +286,7 @@ static int musb_platform_resume(struct m +@@ -300,8 +285,7 @@ static int musb_platform_resume(struct m if (!musb->clock) return 0; @@ -878,7 +878,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> musb->set_clock(musb->clock, 1); --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c -@@ -260,6 +260,8 @@ void musb_read_fifo(struct musb_hw_ep *h +@@ -259,6 +259,8 @@ void musb_read_fifo(struct musb_hw_ep *h tusb_fifo_read_unaligned(fifo, buf, len); } @@ -887,7 +887,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> #ifdef CONFIG_USB_GADGET_MUSB_HDRC /* This is used by gadget drivers, and OTG transceiver logic, allowing -@@ -270,7 +272,7 @@ void musb_read_fifo(struct musb_hw_ep *h +@@ -269,7 +271,7 @@ void musb_read_fifo(struct musb_hw_ep *h */ static int tusb_draw_power(struct otg_transceiver *x, unsigned mA) { @@ -896,7 +896,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> void __iomem *tbase = musb->ctrl_base; u32 reg; -@@ -420,7 +422,7 @@ static void musb_do_idle(unsigned long _ +@@ -419,7 +421,7 @@ static void musb_do_idle(unsigned long _ spin_lock_irqsave(&musb->lock, flags); @@ -905,7 +905,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> case OTG_STATE_A_WAIT_BCON: if ((musb->a_wait_bcon != 0) && (musb->idle_timeout == 0 -@@ -484,7 +486,7 @@ void musb_platform_try_idle(struct musb +@@ -483,7 +485,7 @@ void musb_platform_try_idle(struct musb /* Never idle if active, or when VBUS timeout is not set as host */ if (musb->is_active || ((musb->a_wait_bcon == 0) @@ -914,7 +914,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> DBG(4, "%s active, deleting timer\n", otg_state_string(musb)); del_timer(&musb_idle_timer); last_timer = jiffies; -@@ -533,8 +535,8 @@ static void tusb_source_power(struct mus +@@ -532,8 +534,8 @@ static void tusb_source_power(struct mus if (musb->set_clock) musb->set_clock(musb->clock, 1); timer = OTG_TIMER_MS(OTG_TIME_A_WAIT_VRISE); @@ -925,7 +925,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> devctl |= MUSB_DEVCTL_SESSION; conf |= TUSB_DEV_CONF_USB_HOST_MODE; -@@ -547,24 +549,24 @@ static void tusb_source_power(struct mus +@@ -546,24 +548,24 @@ static void tusb_source_power(struct mus /* If ID pin is grounded, we want to be a_idle */ otg_stat = musb_readl(tbase, TUSB_DEV_OTG_STAT); if (!(otg_stat & TUSB_DEV_OTG_STAT_ID_STATUS)) { @@ -957,7 +957,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> MUSB_DEV_MODE(musb); } -@@ -675,7 +677,7 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -674,7 +676,7 @@ tusb_otg_ints(struct musb *musb, u32 int else default_a = is_host_enabled(musb); DBG(2, "Default-%c\n", default_a ? 'A' : 'B'); @@ -966,7 +966,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> tusb_source_power(musb, default_a); /* Don't allow idling immediately */ -@@ -687,7 +689,7 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -686,7 +688,7 @@ tusb_otg_ints(struct musb *musb, u32 int if (int_src & TUSB_INT_SRC_VBUS_SENSE_CHNG) { /* B-dev state machine: no vbus ~= disconnect */ @@ -975,7 +975,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> || !is_host_enabled(musb)) { #ifdef CONFIG_USB_MUSB_HDRC_HCD /* ? musb_root_disconnect(musb); */ -@@ -702,9 +704,9 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -701,9 +703,9 @@ tusb_otg_ints(struct musb *musb, u32 int if (otg_stat & TUSB_DEV_OTG_STAT_SESS_END) { DBG(1, "Forcing disconnect (no interrupt)\n"); @@ -987,7 +987,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> musb->int_usb |= MUSB_INTR_DISCONNECT; } musb->is_active = 0; -@@ -718,7 +720,7 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -717,7 +719,7 @@ tusb_otg_ints(struct musb *musb, u32 int DBG(2, "vbus change, %s, otg %03x\n", otg_state_string(musb), otg_stat); @@ -996,7 +996,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> case OTG_STATE_A_IDLE: DBG(2, "Got SRP, turning on VBUS\n"); musb_set_vbus(musb, 1); -@@ -766,7 +768,7 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -765,7 +767,7 @@ tusb_otg_ints(struct musb *musb, u32 int DBG(4, "%s timer, %03x\n", otg_state_string(musb), otg_stat); @@ -1005,7 +1005,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> case OTG_STATE_A_WAIT_VRISE: /* VBUS has probably been valid for a while now, * but may well have bounced out of range a bit -@@ -778,7 +780,7 @@ tusb_otg_ints(struct musb *musb, u32 int +@@ -777,7 +779,7 @@ tusb_otg_ints(struct musb *musb, u32 int DBG(2, "devctl %02x\n", devctl); break; } @@ -1014,7 +1014,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> musb->is_active = 0; idle_timeout = jiffies + msecs_to_jiffies(musb->a_wait_bcon); -@@ -1094,9 +1096,14 @@ int __init musb_platform_init(struct mus +@@ -1093,9 +1095,14 @@ int __init musb_platform_init(struct mus { struct platform_device *pdev; struct resource *mem; @@ -1030,7 +1030,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> pdev = to_platform_device(musb->controller); /* dma address for async dma */ -@@ -1107,14 +1114,16 @@ int __init musb_platform_init(struct mus +@@ -1106,14 +1113,16 @@ int __init musb_platform_init(struct mus mem = platform_get_resource(pdev, IORESOURCE_MEM, 1); if (!mem) { pr_debug("no sync dma resource?\n"); @@ -1049,7 +1049,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> } musb->sync_va = sync; -@@ -1127,28 +1136,37 @@ int __init musb_platform_init(struct mus +@@ -1126,28 +1135,37 @@ int __init musb_platform_init(struct mus if (ret) { printk(KERN_ERR "Could not start tusb6010 (%d)\n", ret); diff --git a/usb/usb-gadget-mips-ci13xxx-udc-bugfixes.patch b/usb/usb-gadget-mips-ci13xxx-udc-bugfixes.patch deleted file mode 100644 index 9735e1c2fc60a7..00000000000000 --- a/usb/usb-gadget-mips-ci13xxx-udc-bugfixes.patch +++ /dev/null @@ -1,43 +0,0 @@ -From david-b@pacbell.net Tue Apr 21 16:12:32 2009 -From: David Lopo <dlopo@chipidea.mips.com> -Date: Thu, 16 Apr 2009 14:35:24 -0700 -Subject: USB: Gadget: MIPS CI13xxx UDC bugfixes -To: dlopo@chipidea.mips.com -Cc: linux-usb@vger.kernel.org -Message-ID: <200904161435.24617.david-b@pacbell.net> -Content-Disposition: inline - - -From: David Lopo <dlopo@chipidea.mips.com> - -Bug Fix: high speed detection in LPM mode -Bug Fix: max packet size configuration when switching between HS and FS - -Signed-off-by: David Lopo <dlopo@chipidea.mips.com> -Acked-by: David Brownell <dbrownell@users.sourceforge.net> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/gadget/ci13xxx_udc.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - ---- a/drivers/usb/gadget/ci13xxx_udc.c -+++ b/drivers/usb/gadget/ci13xxx_udc.c -@@ -142,7 +142,7 @@ static struct { - #define CAP_DEVICEADDR (0x014UL) - #define CAP_ENDPTLISTADDR (0x018UL) - #define CAP_PORTSC (0x044UL) --#define CAP_DEVLC (0x0B4UL) -+#define CAP_DEVLC (0x084UL) - #define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL) - #define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL) - #define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL) -@@ -1986,6 +1986,8 @@ static int ep_enable(struct usb_ep *ep, - do { - dbg_event(_usb_addr(mEp), "ENABLE", 0); - -+ mEp->qh[mEp->dir].ptr->cap = 0; -+ - if (mEp->type == USB_ENDPOINT_XFER_CONTROL) - mEp->qh[mEp->dir].ptr->cap |= QH_IOS; - else if (mEp->type == USB_ENDPOINT_XFER_ISOC) diff --git a/usb/usb-musb-fix-build-when-config_pm.patch b/usb/usb-musb-fix-build-when-config_pm.patch deleted file mode 100644 index d3814c206426a7..00000000000000 --- a/usb/usb-musb-fix-build-when-config_pm.patch +++ /dev/null @@ -1,30 +0,0 @@ -From a.beregalov@gmail.com Tue Apr 21 16:13:43 2009 -From: Alexander Beregalov <a.beregalov@gmail.com> -Date: Fri, 17 Apr 2009 15:19:14 +0400 -Subject: USB: musb: fix build when !CONFIG_PM -To: gregkh@suse.de -Message-ID: <20090417111914.GA31310@orion> -Content-Disposition: inline - - -Fix this build error when CONFIG_PM is not set: -drivers/usb/musb/musb_core.c:2232: error: 'musb_resume_early' undeclared here - -Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/musb/musb_core.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/usb/musb/musb_core.c -+++ b/drivers/usb/musb/musb_core.c -@@ -2217,7 +2217,7 @@ static int musb_resume_early(struct plat - - #else - #define musb_suspend NULL --#define musb_resume NULL -+#define musb_resume_early NULL - #endif - - static struct platform_driver musb_driver = { diff --git a/usb/usb-musb-remove-my-email-address-from-few-musb-related-drivers.patch b/usb/usb-musb-remove-my-email-address-from-few-musb-related-drivers.patch deleted file mode 100644 index f5cf67e4acd78d..00000000000000 --- a/usb/usb-musb-remove-my-email-address-from-few-musb-related-drivers.patch +++ /dev/null @@ -1,51 +0,0 @@ -From jarkko.nikula@nokia.com Tue Apr 21 16:13:19 2009 -From: Jarkko Nikula <jarkko.nikula@nokia.com> -Date: Fri, 17 Apr 2009 13:52:00 +0300 -Subject: USB: musb: Remove my email address from few musb related drivers -Cc: Jarkko Nikula <jarkko.nikula@nokia.com>, Felipe Balbi <felipe.balbi@nokia.com> -Message-ID: <1239965520-23749-1-git-send-email-jarkko.nikula@nokia.com> - - -This email address is going to expire soon and my contribution to musb -is next to zero so remove it. - -Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com> -Cc: Felipe Balbi <felipe.balbi@nokia.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/musb/omap2430.c | 1 - - drivers/usb/musb/tusb6010.c | 1 - - drivers/usb/musb/tusb6010.h | 1 - - 3 files changed, 3 deletions(-) - ---- a/drivers/usb/musb/omap2430.c -+++ b/drivers/usb/musb/omap2430.c -@@ -3,7 +3,6 @@ - * Some code has been taken from tusb6010.c - * Copyrights for that are attributable to: - * Copyright (C) 2006 Nokia Corporation -- * Jarkko Nikula <jarkko.nikula@nokia.com> - * Tony Lindgren <tony@atomide.com> - * - * This file is part of the Inventra Controller Driver for Linux. ---- a/drivers/usb/musb/tusb6010.c -+++ b/drivers/usb/musb/tusb6010.c -@@ -2,7 +2,6 @@ - * TUSB6010 USB 2.0 OTG Dual Role controller - * - * Copyright (C) 2006 Nokia Corporation -- * Jarkko Nikula <jarkko.nikula@nokia.com> - * Tony Lindgren <tony@atomide.com> - * - * This program is free software; you can redistribute it and/or modify ---- a/drivers/usb/musb/tusb6010.h -+++ b/drivers/usb/musb/tusb6010.h -@@ -2,7 +2,6 @@ - * Definitions for TUSB6010 USB 2.0 OTG Dual Role controller - * - * Copyright (C) 2006 Nokia Corporation -- * Jarkko Nikula <jarkko.nikula@nokia.com> - * Tony Lindgren <tony@atomide.com> - * - * This program is free software; you can redistribute it and/or modify diff --git a/usb/usb-serial-fix-lifetime-and-locking-problems.patch b/usb/usb-serial-fix-lifetime-and-locking-problems.patch deleted file mode 100644 index a29dfeac0d82eb..00000000000000 --- a/usb/usb-serial-fix-lifetime-and-locking-problems.patch +++ /dev/null @@ -1,263 +0,0 @@ -From stern@rowland.harvard.edu Tue Apr 21 15:50:59 2009 -From: Alan Stern <stern@rowland.harvard.edu> -Date: Tue, 14 Apr 2009 11:31:02 -0400 (EDT) -Subject: USB: serial: fix lifetime and locking problems -To: Greg KH <greg@kroah.com> -Cc: Dan Williams <dcbw@redhat.com> -Message-ID: <Pine.LNX.4.44L0.0904141125470.3576-100000@iolanthe.rowland.org> - - -This patch (as1229) fixes a few lifetime and locking problems in the -usb-serial driver. The main symptom is that an invalid kevent is -created when the serial device is unplugged while a connection is -active. - - Ports should be unregistered when device is disconnected, - not when the parent usb_serial structure is deallocated. - - Each open file should hold a reference to the corresponding - port structure, and the reference should be released when - the file is closed. - - serial->disc_mutex should be acquired in serial_open(), to - resolve the classic race between open and disconnect. - - serial_close() doesn't need to hold both serial->disc_mutex - and port->mutex at the same time. - - Release the subdriver's module reference only after releasing - all the other references, in case one of the release routines - needs to invoke some code in the subdriver module. - - Replace a call to flush_scheduled_work() (which is prone to - deadlocks) with cancel_work_sync(). Also, add a call to - cancel_work_sync() in the disconnect routine. - - Reduce the scope of serial->disc_mutex in serial_disconnect(). - The only place it really needs to protect is where the - "disconnected" flag is set. - -This fixes the bug reported in - - http://bugs.freedesktop.org/show_bug.cgi?id=20703 - -Signed-off-by: Alan Stern <stern@rowland.harvard.edu> -Tested-by: Dan Williams <dcbw@redhat.com> -Reviewed-by: Oliver Neukum <oliver@neukum.org> -Acked-by: Alan Cox <alan@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/usb/serial/usb-serial.c | 90 ++++++++++++++++++++++++---------------- - 1 file changed, 56 insertions(+), 34 deletions(-) - ---- a/drivers/usb/serial/usb-serial.c -+++ b/drivers/usb/serial/usb-serial.c -@@ -143,16 +143,6 @@ static void destroy_serial(struct kref * - if (serial->minor != SERIAL_TTY_NO_MINOR) - return_serial(serial); - -- for (i = 0; i < serial->num_ports; ++i) -- serial->port[i]->port.count = 0; -- -- /* the ports are cleaned up and released in port_release() */ -- for (i = 0; i < serial->num_ports; ++i) -- if (serial->port[i]->dev.parent != NULL) { -- device_unregister(&serial->port[i]->dev); -- serial->port[i] = NULL; -- } -- - /* If this is a "fake" port, we have to clean it up here, as it will - * not get cleaned up in port_release() as it was never registered with - * the driver core */ -@@ -187,7 +177,7 @@ static int serial_open (struct tty_struc - struct usb_serial *serial; - struct usb_serial_port *port; - unsigned int portNumber; -- int retval; -+ int retval = 0; - - dbg("%s", __func__); - -@@ -198,21 +188,24 @@ static int serial_open (struct tty_struc - return -ENODEV; - } - -+ mutex_lock(&serial->disc_mutex); - portNumber = tty->index - serial->minor; - port = serial->port[portNumber]; -- if (!port) { -- retval = -ENODEV; -- goto bailout_kref_put; -- } -- -- if (port->serial->disconnected) { -+ if (!port || serial->disconnected) - retval = -ENODEV; -- goto bailout_kref_put; -- } -+ else -+ get_device(&port->dev); -+ /* -+ * Note: Our locking order requirement does not allow port->mutex -+ * to be acquired while serial->disc_mutex is held. -+ */ -+ mutex_unlock(&serial->disc_mutex); -+ if (retval) -+ goto bailout_serial_put; - - if (mutex_lock_interruptible(&port->mutex)) { - retval = -ERESTARTSYS; -- goto bailout_kref_put; -+ goto bailout_port_put; - } - - ++port->port.count; -@@ -232,14 +225,20 @@ static int serial_open (struct tty_struc - goto bailout_mutex_unlock; - } - -- retval = usb_autopm_get_interface(serial->interface); -+ mutex_lock(&serial->disc_mutex); -+ if (serial->disconnected) -+ retval = -ENODEV; -+ else -+ 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(tty, port, filp); - if (retval) - goto bailout_interface_put; -+ mutex_unlock(&serial->disc_mutex); - } - - mutex_unlock(&port->mutex); -@@ -248,13 +247,16 @@ static int serial_open (struct tty_struc - bailout_interface_put: - usb_autopm_put_interface(serial->interface); - bailout_module_put: -+ mutex_unlock(&serial->disc_mutex); - module_put(serial->type->driver.owner); - bailout_mutex_unlock: - port->port.count = 0; - tty->driver_data = NULL; - tty_port_tty_set(&port->port, NULL); - mutex_unlock(&port->mutex); --bailout_kref_put: -+bailout_port_put: -+ put_device(&port->dev); -+bailout_serial_put: - usb_serial_put(serial); - return retval; - } -@@ -262,6 +264,9 @@ bailout_kref_put: - static void serial_close(struct tty_struct *tty, struct file *filp) - { - struct usb_serial_port *port = tty->driver_data; -+ struct usb_serial *serial; -+ struct module *owner; -+ int count; - - if (!port) - return; -@@ -269,6 +274,8 @@ static void serial_close(struct tty_stru - dbg("%s - port %d", __func__, port->number); - - mutex_lock(&port->mutex); -+ serial = port->serial; -+ owner = serial->type->driver.owner; - - if (port->port.count == 0) { - mutex_unlock(&port->mutex); -@@ -281,7 +288,7 @@ static void serial_close(struct tty_stru - * this before we drop the port count. The call is protected - * by the port mutex - */ -- port->serial->type->close(tty, port, filp); -+ serial->type->close(tty, port, filp); - - if (port->port.count == (port->console ? 2 : 1)) { - struct tty_struct *tty = tty_port_tty_get(&port->port); -@@ -295,17 +302,23 @@ static void serial_close(struct tty_stru - } - } - -- if (port->port.count == 1) { -- mutex_lock(&port->serial->disc_mutex); -- if (!port->serial->disconnected) -- usb_autopm_put_interface(port->serial->interface); -- mutex_unlock(&port->serial->disc_mutex); -- module_put(port->serial->type->driver.owner); -- } - --port->port.count; -- -+ count = port->port.count; - mutex_unlock(&port->mutex); -- usb_serial_put(port->serial); -+ put_device(&port->dev); -+ -+ /* Mustn't dereference port any more */ -+ if (count == 0) { -+ mutex_lock(&serial->disc_mutex); -+ if (!serial->disconnected) -+ usb_autopm_put_interface(serial->interface); -+ mutex_unlock(&serial->disc_mutex); -+ } -+ usb_serial_put(serial); -+ -+ /* Mustn't dereference serial any more */ -+ if (count == 0) -+ module_put(owner); - } - - static int serial_write(struct tty_struct *tty, const unsigned char *buf, -@@ -549,7 +562,13 @@ static void kill_traffic(struct usb_seri - - static void port_free(struct usb_serial_port *port) - { -+ /* -+ * Stop all the traffic before cancelling the work, so that -+ * nobody will restart it by calling usb_serial_port_softint. -+ */ - kill_traffic(port); -+ cancel_work_sync(&port->work); -+ - usb_free_urb(port->read_urb); - usb_free_urb(port->write_urb); - usb_free_urb(port->interrupt_in_urb); -@@ -558,7 +577,6 @@ static void port_free(struct usb_serial_ - kfree(port->bulk_out_buffer); - kfree(port->interrupt_in_buffer); - kfree(port->interrupt_out_buffer); -- flush_scheduled_work(); /* port->work */ - kfree(port); - } - -@@ -1043,6 +1061,8 @@ void usb_serial_disconnect(struct usb_in - usb_set_intfdata(interface, NULL); - /* must set a flag, to signal subdrivers */ - serial->disconnected = 1; -+ mutex_unlock(&serial->disc_mutex); -+ - for (i = 0; i < serial->num_ports; ++i) { - port = serial->port[i]; - if (port) { -@@ -1052,11 +1072,13 @@ void usb_serial_disconnect(struct usb_in - tty_kref_put(tty); - } - kill_traffic(port); -+ cancel_work_sync(&port->work); -+ device_unregister(&port->dev); -+ serial->port[i] = NULL; - } - } - /* let the last holder of this object - * cause it to be cleaned up */ -- mutex_unlock(&serial->disc_mutex); - usb_serial_put(serial); - dev_info(dev, "device disconnected\n"); - } diff --git a/usb/usb-unusual-device-support-for-gold-mp3-player-energy.patch b/usb/usb-unusual-device-support-for-gold-mp3-player-energy.patch deleted file mode 100644 index 4a058d1470fe07..00000000000000 --- a/usb/usb-unusual-device-support-for-gold-mp3-player-energy.patch +++ /dev/null @@ -1,49 +0,0 @@ -From stefan.bader@canonical.com Tue Apr 21 15:52:31 2009 -From: Chuck Short <zulcss@ubuntu.com> -Date: Tue, 14 Apr 2009 20:50:31 +0200 -Subject: USB: Unusual Device support for Gold MP3 Player Energy -To: USB Storage List <usb-storage@lists.one-eyed-alien.net> -Cc: gregkh@novell.com -Message-ID: <49E4DAF7.6070007@canonical.com> - - -From: Chuck Short <zulcss@ubuntu.com> - -Reported by Alessio Treglia on -https://bugs.launchpad.net/ubuntu/+source/linux/+bug/125250 - -User was getting the following errors in dmesg: - -[ 2158.139386] sd 5:0:0:1: ioctl_internal_command return code = 8000002 -[ 2158.139390] : Current: sense key: No Sense -[ 2158.139393] Additional sense: No additional sense information - -Adds unusual device support. - -modified: drivers/usb/storage/unusual_devs.h - -Signed-off-by: Chuck Short <zulcss@ubuntu.com> -Signed-off-by: Tim Gardner <tim.gardner@canonical.com> -Signed-off-by: Stefan Bader <stefan.bader@canonical.com> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/storage/unusual_devs.h | 6 ++++++ - 1 file changed, 6 insertions(+) - ---- a/drivers/usb/storage/unusual_devs.h -+++ b/drivers/usb/storage/unusual_devs.h -@@ -1851,6 +1851,12 @@ UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x - US_SC_DEVICE, US_PR_DEVICE, NULL, - US_FL_CAPACITY_HEURISTICS), - -+/* Reported by Alessio Treglia <quadrispro@ubuntu.com> */ -+UNUSUAL_DEV( 0xed10, 0x7636, 0x0001, 0x0001, -+ "TGE", -+ "Digital MP3 Audio Player", -+ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), -+ - /* Control/Bulk transport for all SubClass values */ - USUAL_DEV(US_SC_RBC, US_PR_CB, USB_US_TYPE_STOR), - USUAL_DEV(US_SC_8020, US_PR_CB, USB_US_TYPE_STOR), |
