diff options
Diffstat (limited to 'arch/arm/mach-imx/ehci-imx5.c')
| -rw-r--r-- | arch/arm/mach-imx/ehci-imx5.c | 31 | 
1 files changed, 23 insertions, 8 deletions
diff --git a/arch/arm/mach-imx/ehci-imx5.c b/arch/arm/mach-imx/ehci-imx5.c index c17fa131728..a6a4afb0ad6 100644 --- a/arch/arm/mach-imx/ehci-imx5.c +++ b/arch/arm/mach-imx/ehci-imx5.c @@ -28,11 +28,14 @@  #define MXC_OTG_UCTRL_OPM_BIT		(1 << 24)	/* OTG power mask */  #define MXC_H1_UCTRL_H1UIE_BIT		(1 << 12)	/* Host1 ULPI interrupt enable */  #define MXC_H1_UCTRL_H1WIE_BIT		(1 << 11)	/* HOST1 wakeup intr enable */ -#define MXC_H1_UCTRL_H1PM_BIT		(1 <<  8)		/* HOST1 power mask */ +#define MXC_H1_UCTRL_H1PM_BIT		(1 <<  8)	/* HOST1 power mask */  /* USB_PHY_CTRL_FUNC */ +#define MXC_OTG_PHYCTRL_OC_POL_BIT	(1 << 9)	/* OTG Polarity of Overcurrent */  #define MXC_OTG_PHYCTRL_OC_DIS_BIT	(1 << 8)	/* OTG Disable Overcurrent Event */ +#define MXC_H1_OC_POL_BIT		(1 << 6)	/* UH1 Polarity of Overcurrent */  #define MXC_H1_OC_DIS_BIT		(1 << 5)	/* UH1 Disable Overcurrent Event */ +#define MXC_OTG_PHYCTRL_PWR_POL_BIT	(1 << 3)	/* OTG Power Pin Polarity */  /* USBH2CTRL */  #define MXC_H2_UCTRL_H2UIE_BIT		(1 << 8) @@ -80,13 +83,21 @@ int mx51_initialize_usb_hw(int port, unsigned int flags)  		if (flags & MXC_EHCI_INTERNAL_PHY) {  			v = __raw_readl(usbother_base + MXC_USB_PHY_CTR_FUNC_OFFSET); +			if (flags & MXC_EHCI_OC_PIN_ACTIVE_LOW) +				v |= MXC_OTG_PHYCTRL_OC_POL_BIT; +			else +				v &= ~MXC_OTG_PHYCTRL_OC_POL_BIT;  			if (flags & MXC_EHCI_POWER_PINS_ENABLED) { -				/* OC/USBPWR is not used */ -				v |= MXC_OTG_PHYCTRL_OC_DIS_BIT; -			} else {  				/* OC/USBPWR is used */  				v &= ~MXC_OTG_PHYCTRL_OC_DIS_BIT; +			} else { +				/* OC/USBPWR is not used */ +				v |= MXC_OTG_PHYCTRL_OC_DIS_BIT;  			} +			if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH) +				v |= MXC_OTG_PHYCTRL_PWR_POL_BIT; +			else +				v &= ~MXC_OTG_PHYCTRL_PWR_POL_BIT;  			__raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC_OFFSET);  			v = __raw_readl(usbother_base + MXC_USBCTRL_OFFSET); @@ -95,9 +106,9 @@ int mx51_initialize_usb_hw(int port, unsigned int flags)  			else  				v &= ~MXC_OTG_UCTRL_OWIE_BIT;/* OTG wakeup disable */  			if (flags & MXC_EHCI_POWER_PINS_ENABLED) -				v |= MXC_OTG_UCTRL_OPM_BIT; -			else  				v &= ~MXC_OTG_UCTRL_OPM_BIT; +			else +				v |= MXC_OTG_UCTRL_OPM_BIT;  			__raw_writel(v, usbother_base + MXC_USBCTRL_OFFSET);  		}  		break; @@ -113,12 +124,16 @@ int mx51_initialize_usb_hw(int port, unsigned int flags)  		}  		if (flags & MXC_EHCI_POWER_PINS_ENABLED) -			v &= ~MXC_H1_UCTRL_H1PM_BIT; /* HOST1 power mask used*/ +			v &= ~MXC_H1_UCTRL_H1PM_BIT; /* HOST1 power mask unused*/  		else  			v |= MXC_H1_UCTRL_H1PM_BIT; /* HOST1 power mask used*/  		__raw_writel(v, usbother_base + MXC_USBCTRL_OFFSET);  		v = __raw_readl(usbother_base + MXC_USB_PHY_CTR_FUNC_OFFSET); +		if (flags & MXC_EHCI_OC_PIN_ACTIVE_LOW) +			v |= MXC_H1_OC_POL_BIT; +		else +			v &= ~MXC_H1_OC_POL_BIT;  		if (flags & MXC_EHCI_POWER_PINS_ENABLED)  			v &= ~MXC_H1_OC_DIS_BIT; /* OC is used */  		else @@ -142,7 +157,7 @@ int mx51_initialize_usb_hw(int port, unsigned int flags)  		}  		if (flags & MXC_EHCI_POWER_PINS_ENABLED) -			v &= ~MXC_H2_UCTRL_H2PM_BIT; /* HOST2 power mask used*/ +			v &= ~MXC_H2_UCTRL_H2PM_BIT; /* HOST2 power mask unused*/  		else  			v |= MXC_H2_UCTRL_H2PM_BIT; /* HOST2 power mask used*/  		__raw_writel(v, usbother_base + MXC_USBH2CTRL_OFFSET);  |