aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2009-04-21 16:24:21 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2009-04-21 16:24:21 -0700
commit13c1436beea0651bbfe5e5ba2557a9375a6da746 (patch)
tree8311a110934314bf9609615e98f9241dfff2f6a8 /usb
parent2fe52c5cf2dc0865e1c9e9d832c10ccd3aa44538 (diff)
downloadpatches-13c1436beea0651bbfe5e5ba2557a9375a6da746.tar.gz
put patches in proper place
Diffstat (limited to 'usb')
-rw-r--r--usb/musb-otg-timer-cleanup.patch4
-rw-r--r--usb/musb-proper-hookup-to-transceiver-drivers.patch54
-rw-r--r--usb/usb-gadget-mips-ci13xxx-udc-bugfixes.patch43
-rw-r--r--usb/usb-musb-fix-build-when-config_pm.patch30
-rw-r--r--usb/usb-musb-remove-my-email-address-from-few-musb-related-drivers.patch51
-rw-r--r--usb/usb-serial-fix-lifetime-and-locking-problems.patch263
-rw-r--r--usb/usb-unusual-device-support-for-gold-mp3-player-energy.patch49
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),