diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usbdcore_omap1510.c | 24 | 
1 files changed, 24 insertions, 0 deletions
| diff --git a/drivers/usbdcore_omap1510.c b/drivers/usbdcore_omap1510.c index 7a908489f..1d54a6357 100644 --- a/drivers/usbdcore_omap1510.c +++ b/drivers/usbdcore_omap1510.c @@ -40,6 +40,7 @@  #include "usbdcore_ep0.h" +#define UDC_INIT_MDELAY		     80 /* Device settle delay */  #define UDC_MAX_ENDPOINTS	     31 /* Number of endpoints on this UDC */  /* Some kind of debugging output... */ @@ -1087,6 +1088,11 @@ int udc_init (void)  {  	u16 udc_rev;  	uchar value; +	ulong gpio; +	int i; + +	/* Let the device settle down before we start */ +	for (i = 0; i < UDC_INIT_MDELAY; i++) udelay(1000);  	udc_device = NULL; @@ -1127,6 +1133,24 @@ int udc_init (void)  	i2c_read (0x32, 0x03, 1, &value, 1);  	value |= 0x01;  	i2c_write (0x32, 0x03, 1, &value, 1); + +	gpio = inl(GPIO_PIN_CONTROL_REG); +	gpio |=  0x0002; /* A_IRDA_OFF */ +	gpio |=  0x0800; /* A_SWITCH   */ +	gpio |=  0x8000; /* A_USB_ON   */ +	outl (gpio, GPIO_PIN_CONTROL_REG); + +	gpio = inl(GPIO_DIR_CONTROL_REG); +	gpio &= ~0x0002; /* A_IRDA_OFF */ +	gpio &= ~0x0800; /* A_SWITCH   */ +	gpio &= ~0x8000; /* A_USB_ON   */ +	outl (gpio, GPIO_DIR_CONTROL_REG); + +	gpio = inl(GPIO_DATA_OUTPUT_REG); +	gpio |=  0x0002; /* A_IRDA_OFF */ +	gpio &= ~0x0800; /* A_SWITCH   */ +	gpio &= ~0x8000; /* A_USB_ON   */ +	outl (gpio, GPIO_DATA_OUTPUT_REG);  #endif  	/* The VBUS_MODE bit selects whether VBUS detection is done via |