diff options
| author | Jim Lin <jilin@nvidia.com> | 2013-03-27 00:52:32 +0000 | 
|---|---|---|
| committer | Marek Vasut <marex@denx.de> | 2013-05-05 23:46:41 +0200 | 
| commit | b068deb363e34a72754877d3d8c7a71a5bc834db (patch) | |
| tree | a715cd076fb6422d9d8922ba42cf9c2847e75c68 /drivers/usb/host/ehci-hcd.c | |
| parent | 5ed6f447af60aabd2669d913f673793c1ce48f47 (diff) | |
| download | olio-uboot-2014.01-b068deb363e34a72754877d3d8c7a71a5bc834db.tar.xz olio-uboot-2014.01-b068deb363e34a72754877d3d8c7a71a5bc834db.zip | |
USB: EHCI: Add weak functions to support new chip
Add ehci_get_port_speed() and ehci_set_usbmode() weak functions
for platform driver to support new chip.
Signed-off-by: Jim Lin <jilin@nvidia.com>
Diffstat (limited to 'drivers/usb/host/ehci-hcd.c')
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 40 | 
1 files changed, 28 insertions, 12 deletions
| diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index c81687820..6a55cd244 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -122,6 +122,31 @@ static struct descriptor {  #define ehci_is_TDI()	(0)  #endif +int __ehci_get_port_speed(struct ehci_hcor *hcor, uint32_t reg) +{ +	return PORTSC_PSPD(reg); +} + +int ehci_get_port_speed(struct ehci_hcor *hcor, uint32_t reg) +	__attribute__((weak, alias("__ehci_get_port_speed"))); + +void __ehci_set_usbmode(int index) +{ +	uint32_t tmp; +	uint32_t *reg_ptr; + +	reg_ptr = (uint32_t *)((u8 *)&ehcic[index].hcor->or_usbcmd + USBMODE); +	tmp = ehci_readl(reg_ptr); +	tmp |= USBMODE_CM_HC; +#if defined(CONFIG_EHCI_MMIO_BIG_ENDIAN) +	tmp |= USBMODE_BE; +#endif +	ehci_writel(reg_ptr, tmp); +} + +void ehci_set_usbmode(int index) +	__attribute__((weak, alias("__ehci_set_usbmode"))); +  void __ehci_powerup_fixup(uint32_t *status_reg, uint32_t *reg)  {  	mdelay(50); @@ -149,8 +174,6 @@ static int handshake(uint32_t *ptr, uint32_t mask, uint32_t done, int usec)  static int ehci_reset(int index)  {  	uint32_t cmd; -	uint32_t tmp; -	uint32_t *reg_ptr;  	int ret = 0;  	cmd = ehci_readl(&ehcic[index].hcor->or_usbcmd); @@ -163,15 +186,8 @@ static int ehci_reset(int index)  		goto out;  	} -	if (ehci_is_TDI()) { -		reg_ptr = (uint32_t *)((u8 *)ehcic[index].hcor + USBMODE); -		tmp = ehci_readl(reg_ptr); -		tmp |= USBMODE_CM_HC; -#if defined(CONFIG_EHCI_MMIO_BIG_ENDIAN) -		tmp |= USBMODE_BE; -#endif -		ehci_writel(reg_ptr, tmp); -	} +	if (ehci_is_TDI()) +		ehci_set_usbmode(index);  #ifdef CONFIG_USB_EHCI_TXFIFO_THRESH  	cmd = ehci_readl(&ehcic[index].hcor->or_txfilltuning); @@ -711,7 +727,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,  			tmpbuf[1] |= USB_PORT_STAT_POWER >> 8;  		if (ehci_is_TDI()) { -			switch (PORTSC_PSPD(reg)) { +			switch (ehci_get_port_speed(ctrl->hcor, reg)) {  			case PORTSC_PSPD_FS:  				break;  			case PORTSC_PSPD_LS: |