summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/f_audio.c4
-rw-r--r--drivers/usb/host/ehci-arc.c10
-rw-r--r--drivers/usb/host/ehci-hub.c12
3 files changed, 26 insertions, 0 deletions
diff --git a/drivers/usb/gadget/f_audio.c b/drivers/usb/gadget/f_audio.c
index 2d285ec6e8bc..3bc1fe2758e3 100644
--- a/drivers/usb/gadget/f_audio.c
+++ b/drivers/usb/gadget/f_audio.c
@@ -644,6 +644,10 @@ static int f_audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
static void f_audio_disable(struct usb_function *f)
{
+ struct f_audio *audio = func_to_audio(f);
+
+ usb_ep_disable(audio->out_ep);
+
return;
}
diff --git a/drivers/usb/host/ehci-arc.c b/drivers/usb/host/ehci-arc.c
index 4e6674a684df..1d015c92fc9c 100644
--- a/drivers/usb/host/ehci-arc.c
+++ b/drivers/usb/host/ehci-arc.c
@@ -155,6 +155,16 @@ static irqreturn_t ehci_fsl_pre_irq(int irq, void *dev)
pdata->wakeup_event = 0;
fsl_usb_recover_hcd(pdev);
return IRQ_HANDLED;
+ } else {
+ u32 portsc = 0;
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+ portsc = ehci_readl(ehci, &ehci->regs->port_status[0]);
+ /* PORT_USB11 macro is used to judge line state K*/
+ if ((PORT_USB11(portsc)) && (portsc & PORT_SUSPEND)) {
+ pdata = hcd->self.controller->platform_data;
+ if (pdata->platform_resume)
+ pdata->platform_resume(pdata);
+ }
}
return IRQ_NONE;
}
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 8a515f0d5988..69b7a31612aa 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -28,6 +28,10 @@
/*-------------------------------------------------------------------------*/
+#ifdef CONFIG_ARCH_MX6
+#define MX6_USB_HOST_HACK
+#include <linux/fsl_devices.h>
+#endif
#define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
#ifdef CONFIG_PM
@@ -1032,6 +1036,14 @@ static int ehci_hub_control (
temp &= ~PORT_WKCONN_E;
temp |= PORT_WKDISC_E | PORT_WKOC_E;
ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);
+#ifdef MX6_USB_HOST_HACK
+ {
+ struct fsl_usb2_platform_data *pdata;
+ pdata = hcd->self.controller->platform_data;
+ if (pdata->platform_suspend)
+ pdata->platform_suspend(pdata);
+ }
+#endif
if (hostpc_reg) {
spin_unlock_irqrestore(&ehci->lock, flags);
msleep(5);/* 5ms for HCD enter low pwr mode */