diff options
Diffstat (limited to 'drivers/usb/usbdcore_omap1510.c')
| -rw-r--r-- | drivers/usb/usbdcore_omap1510.c | 28 | 
1 files changed, 25 insertions, 3 deletions
| diff --git a/drivers/usb/usbdcore_omap1510.c b/drivers/usb/usbdcore_omap1510.c index 84bb936d8..4e3239f58 100644 --- a/drivers/usb/usbdcore_omap1510.c +++ b/drivers/usb/usbdcore_omap1510.c @@ -28,7 +28,7 @@  #include <common.h> -#if defined(CONFIG_OMAP1510) && defined(CONFIG_USB_DEVICE) +#if ((defined(CONFIG_OMAP1510) || defined(CONFIG_OMAP1610)) && defined(CONFIG_USB_DEVICE))  #include <asm/io.h>  #ifdef CONFIG_OMAP_SX1 @@ -1109,21 +1109,43 @@ int udc_init (void)  	 */  	outw ((1 << 4) | (1 << 5), CLOCK_CTRL);  	UDCREG (CLOCK_CTRL); + +#ifdef CONFIG_OMAP1510 +	/* This code was originally implemented for OMAP1510 and +	 * therefore is only applicable for OMAP1510 boards. For +	 * OMAP5912 or OMAP16xx the register APLL_CTRL does not +	 * exist and DPLL_CTRL is already configured. +	 */ +  	/* Set and check APLL */  	outw (0x0008, APLL_CTRL);  	UDCREG (APLL_CTRL);  	/* Set and check DPLL */  	outw (0x2210, DPLL_CTRL);  	UDCREG (DPLL_CTRL); -	/* Set and check SOFT */ -	outw ((1 << 4) | (1 << 3) | 1, SOFT_REQ); +#endif +	/* Set and check SOFT +	 * The below line of code has been changed to perform a +	 * read-modify-write instead of a simple write for +	 * configuring the SOFT_REQ register. This allows the code +	 * to be compatible with OMAP5912 and OMAP16xx devices +	 */ +	outw ((1 << 4) | (1 << 3) | 1 | (inw(SOFT_REQ)), SOFT_REQ); +  	/* Short delay to wait for DPLL */  	udelay (1000);  	/* Print banner with device revision */  	udc_rev = inw (UDC_REV) & 0xff; +#ifdef CONFIG_OMAP1510  	printf ("USB:   TI OMAP1510 USB function module rev %d.%d\n",  		udc_rev >> 4, udc_rev & 0xf); +#endif + +#ifdef CONFIG_OMAP1610 +	printf ("USB:   TI OMAP5912 USB function module rev %d.%d\n", +		udc_rev >> 4, udc_rev & 0xf); +#endif  #ifdef CONFIG_OMAP_SX1  	i2c_read (0x32, 0x04, 1, &value, 1); |