]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Omap35xxPkg: Turn on the power for the USB Hub
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 15 Aug 2011 16:44:05 +0000 (16:44 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 15 Aug 2011 16:44:05 +0000 (16:44 +0000)
This fix should make the USB Hub power up correctly (tested on BeagleBoard-xM).

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12134 6f19259b-4bc3-4df7-8a09-765794883524

Omap35xxPkg/Include/TPS65950.h
Omap35xxPkg/PciEmulation/PciEmulation.c

index ee26a0368ae766531e4933ff814a8657cdede471..8ba9dbaf2f56aa250df28825ac9e15203b492efc 100644 (file)
 #define LEDAPWM               BIT4
 #define LEDBPWM               BIT5
 
+// USB PHY power
+#define VAUX2_DEDICATED       0x79
+#define VAUX2_DEV_GRP         0x76
+
+#define VAUX_DEV_GRP_P1       0x20
+#define VAUX_DEDICATED_18V    0x05
+
 #endif //__TPS65950_H__
index dd5e8f7b67dfbd2a17dbc1979d284fc641cc2d50..6b5528cea429e45dc713f1245a31966a4fe0f6d8 100644 (file)
@@ -60,7 +60,7 @@ ConfigureUSBHost (
   EFI_STATUS Status;
   UINT8      Data = 0;
 
-   // Take USB host out of force-standby mode
+  // Take USB host out of force-standby mode
   MmioWrite32 (UHH_SYSCONFIG, UHH_SYSCONFIG_MIDLEMODE_NO_STANDBY
                             | UHH_SYSCONFIG_CLOCKACTIVITY_ON
                             | UHH_SYSCONFIG_SIDLEMODE_NO_STANDBY
@@ -77,22 +77,32 @@ ConfigureUSBHost (
                              | UHH_HOSTCONFIG_P1_ULPI_BYPASS_ULPI_MODE);
 
   // USB reset (GPIO 147 - Port 5 pin 19) output high
-  MmioAnd32(GPIO5_BASE + GPIO_OE, ~BIT19);
+  MmioAnd32 (GPIO5_BASE + GPIO_OE, ~BIT19);
   MmioWrite32 (GPIO5_BASE + GPIO_SETDATAOUT, BIT19);
 
-  // Get the Power IC protocol.
-  Status = gBS->LocateProtocol(&gEmbeddedExternalDeviceProtocolGuid, NULL, (VOID **)&gTPS65950);
-  ASSERT_EFI_ERROR(Status);
+  // Get the Power IC protocol
+  Status = gBS->LocateProtocol (&gEmbeddedExternalDeviceProtocolGuid, NULL, (VOID **)&gTPS65950);
+  ASSERT_EFI_ERROR (Status);  
 
-  //Enable power to the USB host.
-  Status = gTPS65950->Read(gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);
+  // Power the USB PHY
+  Data = VAUX_DEV_GRP_P1;
+  Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4, VAUX2_DEV_GRP), 1, &Data);
   ASSERT_EFI_ERROR(Status);
 
-  //LEDAON & LEDAPWM control the power to the USB host so enable those bits.
-  Data |= (LEDAON | LEDAPWM);
+  Data = VAUX_DEDICATED_18V;
+  Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4, VAUX2_DEDICATED), 1, &Data);
+  ASSERT_EFI_ERROR (Status);  
 
-  Status = gTPS65950->Write(gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);
-  ASSERT_EFI_ERROR(Status);
+  // Enable power to the USB hub
+  Status = gTPS65950->Read (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);
+  ASSERT_EFI_ERROR (Status);
+
+  // LEDAON controls the power to the USB host, PWM is disabled
+  Data &= ~LEDAPWM;
+  Data |= LEDAON;
+
+  Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);
+  ASSERT_EFI_ERROR (Status);
 }