diff options
| author | Albert Chen <R65187@freescale.com> | 2010-01-28 09:58:40 +0800 |
|---|---|---|
| committer | Alejandro Gonzalez <alex.gonzalez@digi.com> | 2010-05-25 11:13:33 +0200 |
| commit | 6788f64c9521eecd48d6af298e828ff5cd660389 (patch) | |
| tree | 05a174de8d3b9b2b2a89426cbe6c3a86e3d771d5 /drivers/usb | |
| parent | 762f3cfa3716f18c54e83590588b3797df2f74ab (diff) | |
ENGR00117742-2 add usb support for mx28
kernel part
Signed-off-by: Albert Chen <r65187@freescale.com>
Signed-off-by: Alejandro Gonzalez <alex.gonzalez@digi.com>
Diffstat (limited to 'drivers/usb')
| -rw-r--r-- | drivers/usb/core/hub.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index b39a3941ce4d..6a84c8b31125 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -41,6 +41,14 @@ #define STMP3XXX_USB_HOST_HACK #endif +#ifdef CONFIG_ARCH_MXS +#define MXS_USB_HOST_HACK + +#include <linux/fsl_devices.h> +extern void fsl_platform_set_usb_phy_dis(struct fsl_usb2_platform_data *pdata, + bool enable); +#endif + #ifdef STMP3XXX_USB_HOST_HACK #include <linux/fsl_devices.h> #include <mach/regs-usbphy.h> @@ -2725,6 +2733,20 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1, } #endif +#ifdef MXS_USB_HOST_HACK + { /*Must enable HOSTDISCONDETECT after second reset*/ + if (port1 == 1) { + if (udev->speed == USB_SPEED_HIGH) { + struct device *dev = hcd->self.controller; + struct fsl_usb2_platform_data *pdata; + pdata = (struct fsl_usb2_platform_data *) + dev->platform_data; + fsl_platform_set_usb_phy_dis(pdata, 1); + } + } + } +#endif + if (retval) goto fail; @@ -2880,6 +2902,24 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, } #endif +#ifdef MXS_USB_HOST_HACK + { + struct device *dev = hcd->self.controller; + struct fsl_usb2_platform_data *pdata; + + pdata = (struct fsl_usb2_platform_data *)dev->platform_data; + if (dev->parent && dev->type) { + if (port1 == 1 && pdata->platform_init) + pdata->platform_init(NULL); + } + if (port1 == 1) { + if (!(portstatus&USB_PORT_STAT_CONNECTION)) { + /* Must clear HOSTDISCONDETECT when disconnect*/ + fsl_platform_set_usb_phy_dis(pdata, 0); + } + } + } +#endif if (hub->has_indicators) { set_port_led(hub, port1, HUB_LED_AUTO); |
