diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/f_audio.c | 4 | ||||
-rw-r--r-- | drivers/usb/host/ehci-arc.c | 10 | ||||
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 12 |
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 */ |