]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/I2c/I2cDxe/I2cBus.c
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Bus / I2c / I2cDxe / I2cBus.c
index 3da1474edc009c8957d65a96ba708ee4c4d7369e..eafd3bc85171dc7022c12ad95e6c9168f74ecfe2 100644 (file)
@@ -1,15 +1,9 @@
 /** @file\r
-  This file implements I2C IO Protocol which enables the user to manipulate a single \r
+  This file implements I2C IO Protocol which enables the user to manipulate a single\r
   I2C device independent of the host controller and I2C design.\r
 \r
-  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -18,7 +12,7 @@
 //\r
 //  EFI_DRIVER_BINDING_PROTOCOL instance\r
 //\r
-EFI_DRIVER_BINDING_PROTOCOL gI2cBusDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL  gI2cBusDriverBinding = {\r
   I2cBusDriverSupported,\r
   I2cBusDriverStart,\r
   I2cBusDriverStop,\r
@@ -30,7 +24,7 @@ EFI_DRIVER_BINDING_PROTOCOL gI2cBusDriverBinding = {
 //\r
 // Template for I2C Bus Child Device.\r
 //\r
-I2C_DEVICE_CONTEXT gI2cDeviceContextTemplate = {\r
+I2C_DEVICE_CONTEXT  gI2cDeviceContextTemplate = {\r
   I2C_DEVICE_SIGNATURE,\r
   NULL,\r
   {                     // I2cIo Protocol\r
@@ -48,13 +42,13 @@ I2C_DEVICE_CONTEXT gI2cDeviceContextTemplate = {
 //\r
 // Template for controller device path node.\r
 //\r
-CONTROLLER_DEVICE_PATH gControllerDevicePathTemplate = {\r
+CONTROLLER_DEVICE_PATH  gControllerDevicePathTemplate = {\r
   {\r
     HARDWARE_DEVICE_PATH,\r
     HW_CONTROLLER_DP,\r
     {\r
-      (UINT8) (sizeof (CONTROLLER_DEVICE_PATH)),\r
-      (UINT8) ((sizeof (CONTROLLER_DEVICE_PATH)) >> 8)\r
+      (UINT8)(sizeof (CONTROLLER_DEVICE_PATH)),\r
+      (UINT8)((sizeof (CONTROLLER_DEVICE_PATH)) >> 8)\r
     }\r
   },\r
   0\r
@@ -63,39 +57,40 @@ CONTROLLER_DEVICE_PATH gControllerDevicePathTemplate = {
 //\r
 // Template for vendor device path node.\r
 //\r
-VENDOR_DEVICE_PATH gVendorDevicePathTemplate = {\r
+VENDOR_DEVICE_PATH  gVendorDevicePathTemplate = {\r
   {\r
     HARDWARE_DEVICE_PATH,\r
     HW_VENDOR_DP,\r
     {\r
-      (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
-      (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+      (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+      (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
     }\r
   },\r
-  { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }}\r
+  { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }\r
+  }\r
 };\r
 \r
 //\r
-// Driver name table \r
+// Driver name table\r
 //\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mI2cBusDriverNameTable[] = {\r
-  { "eng;en", (CHAR16 *) L"I2C Bus Driver" },\r
-  { NULL , NULL }\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE  mI2cBusDriverNameTable[] = {\r
+  { "eng;en", (CHAR16 *)L"I2C Bus Driver" },\r
+  { NULL,     NULL                        }\r
 };\r
 \r
 //\r
 // EFI Component Name Protocol\r
 //\r
 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gI2cBusComponentName = {\r
-  (EFI_COMPONENT_NAME_GET_DRIVER_NAME) I2cBusComponentNameGetDriverName,\r
-  (EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) I2cBusComponentNameGetControllerName,\r
+  (EFI_COMPONENT_NAME_GET_DRIVER_NAME)I2cBusComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME_GET_CONTROLLER_NAME)I2cBusComponentNameGetControllerName,\r
   "eng"\r
 };\r
 \r
 //\r
 // EFI Component Name 2 Protocol\r
 //\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gI2cBusComponentName2 = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL  gI2cBusComponentName2 = {\r
   I2cBusComponentNameGetDriverName,\r
   I2cBusComponentNameGetControllerName,\r
   "en"\r
@@ -144,8 +139,8 @@ EFI_STATUS
 EFIAPI\r
 I2cBusComponentNameGetDriverName (\r
   IN  EFI_COMPONENT_NAME2_PROTOCOL  *This,\r
-  IN  CHAR8                        *Language,\r
-  OUT CHAR16                       **DriverName\r
+  IN  CHAR8                         *Language,\r
+  OUT CHAR16                        **DriverName\r
   )\r
 {\r
   return LookupUnicodeString2 (\r
@@ -228,11 +223,11 @@ I2cBusComponentNameGetDriverName (
 EFI_STATUS\r
 EFIAPI\r
 I2cBusComponentNameGetControllerName (\r
-  IN  EFI_COMPONENT_NAME2_PROTOCOL                     *This,\r
-  IN  EFI_HANDLE                                      ControllerHandle,\r
-  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
-  IN  CHAR8                                           *Language,\r
-  OUT CHAR16                                          **ControllerName\r
+  IN  EFI_COMPONENT_NAME2_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                    ControllerHandle,\r
+  IN  EFI_HANDLE                    ChildHandle        OPTIONAL,\r
+  IN  CHAR8                         *Language,\r
+  OUT CHAR16                        **ControllerName\r
   )\r
 {\r
   return EFI_UNSUPPORTED;\r
@@ -241,12 +236,12 @@ I2cBusComponentNameGetControllerName (
 /**\r
   Check if the child of I2C controller has been created.\r
 \r
-  @param[in] This                         A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.   \r
+  @param[in] This                         A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
   @param[in] Controller                   I2C controller handle.\r
   @param[in] RemainingDevicePath          A pointer to the remaining portion of a device path.\r
   @param[in] RemainingHasControllerNode   Indicate if RemainingDevicePath contains CONTROLLER_DEVICE_PATH.\r
   @param[in] RemainingControllerNumber    Controller number in CONTROLLER_DEVICE_PATH.\r
-  \r
+\r
   @retval EFI_SUCCESS                     The child of I2C controller is not created.\r
   @retval Others                          The child of I2C controller has been created or other errors happen.\r
 \r
@@ -260,17 +255,17 @@ CheckRemainingDevicePath (
   IN UINT32                       RemainingControllerNumber\r
   )\r
 {\r
-  EFI_STATUS                              Status;\r
-  EFI_DEVICE_PATH_PROTOCOL                *SystemDevicePath;\r
-  EFI_OPEN_PROTOCOL_INFORMATION_ENTRY     *OpenInfoBuffer;\r
-  UINTN                                   EntryCount;\r
-  UINTN                                   Index;\r
-  BOOLEAN                                 SystemHasControllerNode;\r
-  UINT32                                  SystemControllerNumber;  \r
+  EFI_STATUS                           Status;\r
+  EFI_DEVICE_PATH_PROTOCOL             *SystemDevicePath;\r
+  EFI_OPEN_PROTOCOL_INFORMATION_ENTRY  *OpenInfoBuffer;\r
+  UINTN                                EntryCount;\r
+  UINTN                                Index;\r
+  BOOLEAN                              SystemHasControllerNode;\r
+  UINT32                               SystemControllerNumber;\r
 \r
   SystemHasControllerNode = FALSE;\r
-  SystemControllerNumber    = 0;\r
-  \r
+  SystemControllerNumber  = 0;\r
+\r
   Status = gBS->OpenProtocolInformation (\r
                   Controller,\r
                   &gEfiI2cHostProtocolGuid,\r
@@ -280,13 +275,13 @@ CheckRemainingDevicePath (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  \r
+\r
   for (Index = 0; Index < EntryCount; Index++) {\r
     if ((OpenInfoBuffer[Index].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
       Status = gBS->OpenProtocol (\r
                       OpenInfoBuffer[Index].ControllerHandle,\r
                       &gEfiDevicePathProtocolGuid,\r
-                      (VOID **) &SystemDevicePath,\r
+                      (VOID **)&SystemDevicePath,\r
                       This->DriverBindingHandle,\r
                       Controller,\r
                       EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -294,10 +289,11 @@ CheckRemainingDevicePath (
       if (!EFI_ERROR (Status)) {\r
         //\r
         // Find vendor device path node and compare\r
-        //    \r
+        //\r
         while (!IsDevicePathEnd (SystemDevicePath)) {\r
           if ((DevicePathType (SystemDevicePath) == HARDWARE_DEVICE_PATH) &&\r
-              (DevicePathSubType (SystemDevicePath) == HW_VENDOR_DP)) {\r
+              (DevicePathSubType (SystemDevicePath) == HW_VENDOR_DP))\r
+          {\r
             //\r
             // Check if vendor device path is same between system device path and remaining device path\r
             //\r
@@ -307,31 +303,37 @@ CheckRemainingDevicePath (
               //\r
               SystemDevicePath = NextDevicePathNode (SystemDevicePath);\r
               if ((DevicePathType (SystemDevicePath) == HARDWARE_DEVICE_PATH) &&\r
-                  (DevicePathSubType (SystemDevicePath) == HW_CONTROLLER_DP)) {\r
+                  (DevicePathSubType (SystemDevicePath) == HW_CONTROLLER_DP))\r
+              {\r
                 SystemHasControllerNode = TRUE;\r
-                SystemControllerNumber    = ((CONTROLLER_DEVICE_PATH *) SystemDevicePath)->ControllerNumber;\r
+                SystemControllerNumber  = ((CONTROLLER_DEVICE_PATH *)SystemDevicePath)->ControllerNumber;\r
               } else {\r
                 SystemHasControllerNode = FALSE;\r
-                SystemControllerNumber    = 0;\r
+                SystemControllerNumber  = 0;\r
               }\r
+\r
               if (((SystemHasControllerNode)  && (!RemainingHasControllerNode) && (SystemControllerNumber == 0)) ||\r
                   ((!SystemHasControllerNode) && (RemainingHasControllerNode)  && (RemainingControllerNumber == 0)) ||\r
                   ((SystemHasControllerNode)  && (RemainingHasControllerNode)  && (SystemControllerNumber == RemainingControllerNumber)) ||\r
-                  ((!SystemHasControllerNode) && (!RemainingHasControllerNode))) {\r
-                  DEBUG ((EFI_D_ERROR, "This I2C device has been already started.\n"));\r
-                  Status = EFI_UNSUPPORTED;\r
-                  break;\r
+                  ((!SystemHasControllerNode) && (!RemainingHasControllerNode)))\r
+              {\r
+                DEBUG ((DEBUG_ERROR, "This I2C device has been already started.\n"));\r
+                Status = EFI_UNSUPPORTED;\r
+                break;\r
               }\r
             }\r
           }\r
+\r
           SystemDevicePath = NextDevicePathNode (SystemDevicePath);\r
         }\r
+\r
         if (EFI_ERROR (Status)) {\r
           break;\r
         }\r
       }\r
     }\r
   }\r
+\r
   FreePool (OpenInfoBuffer);\r
   return Status;\r
 }\r
@@ -386,16 +388,16 @@ I2cBusDriverSupported (
   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                          Status;\r
-  EFI_I2C_ENUMERATE_PROTOCOL          *I2cEnumerate;\r
-  EFI_I2C_HOST_PROTOCOL               *I2cHost;\r
-  EFI_DEVICE_PATH_PROTOCOL            *ParentDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL            *DevPathNode;\r
-  BOOLEAN                             RemainingHasControllerNode;\r
-  UINT32                              RemainingControllerNumber;\r
+  EFI_STATUS                  Status;\r
+  EFI_I2C_ENUMERATE_PROTOCOL  *I2cEnumerate;\r
+  EFI_I2C_HOST_PROTOCOL       *I2cHost;\r
+  EFI_DEVICE_PATH_PROTOCOL    *ParentDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL    *DevPathNode;\r
+  BOOLEAN                     RemainingHasControllerNode;\r
+  UINT32                      RemainingControllerNumber;\r
 \r
   RemainingHasControllerNode = FALSE;\r
-  RemainingControllerNumber    = 0;\r
+  RemainingControllerNumber  = 0;\r
 \r
   //\r
   //  Determine if the I2c Enumerate Protocol is available\r
@@ -403,7 +405,7 @@ I2cBusDriverSupported (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiI2cEnumerateProtocolGuid,\r
-                  (VOID **) &I2cEnumerate,\r
+                  (VOID **)&I2cEnumerate,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -414,17 +416,17 @@ I2cBusDriverSupported (
 \r
   if (!EFI_ERROR (Status)) {\r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiI2cEnumerateProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiI2cEnumerateProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
   }\r
 \r
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &ParentDevicePath,\r
+                  (VOID **)&ParentDevicePath,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -436,11 +438,11 @@ I2cBusDriverSupported (
 \r
   if (!EFI_ERROR (Status)) {\r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiDevicePathProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiDevicePathProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
   }\r
 \r
   if ((RemainingDevicePath != NULL) && !IsDevicePathEnd (RemainingDevicePath)) {\r
@@ -448,20 +450,23 @@ I2cBusDriverSupported (
     // Check if the first node of RemainingDevicePath is a hardware vendor device path\r
     //\r
     if ((DevicePathType (RemainingDevicePath) != HARDWARE_DEVICE_PATH) ||\r
-        (DevicePathSubType (RemainingDevicePath) != HW_VENDOR_DP)) {\r
+        (DevicePathSubType (RemainingDevicePath) != HW_VENDOR_DP))\r
+    {\r
       return EFI_UNSUPPORTED;\r
     }\r
+\r
     //\r
     // Check if the second node of RemainingDevicePath is a controller node\r
     //\r
     DevPathNode = NextDevicePathNode (RemainingDevicePath);\r
     if (!IsDevicePathEnd (DevPathNode)) {\r
       if ((DevicePathType (DevPathNode) != HARDWARE_DEVICE_PATH) ||\r
-          (DevicePathSubType (DevPathNode) != HW_CONTROLLER_DP)) {\r
+          (DevicePathSubType (DevPathNode) != HW_CONTROLLER_DP))\r
+      {\r
         return EFI_UNSUPPORTED;\r
       } else {\r
         RemainingHasControllerNode = TRUE;\r
-        RemainingControllerNumber    = ((CONTROLLER_DEVICE_PATH *) DevPathNode)->ControllerNumber;\r
+        RemainingControllerNumber  = ((CONTROLLER_DEVICE_PATH *)DevPathNode)->ControllerNumber;\r
       }\r
     }\r
   }\r
@@ -469,10 +474,10 @@ I2cBusDriverSupported (
   //\r
   // Determine if the I2C Host Protocol is available\r
   //\r
-  Status = gBS->OpenProtocol ( \r
+  Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiI2cHostProtocolGuid,\r
-                  (VOID **) &I2cHost,\r
+                  (VOID **)&I2cHost,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -480,17 +485,17 @@ I2cBusDriverSupported (
 \r
   if (!EFI_ERROR (Status)) {\r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiI2cHostProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiI2cHostProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
   }\r
 \r
-\r
   if (Status == EFI_ALREADY_STARTED) {\r
-    if ((RemainingDevicePath == NULL) || \r
-        ((RemainingDevicePath != NULL) && IsDevicePathEnd (RemainingDevicePath))) {\r
+    if ((RemainingDevicePath == NULL) ||\r
+        ((RemainingDevicePath != NULL) && IsDevicePathEnd (RemainingDevicePath)))\r
+    {\r
       //\r
       // If RemainingDevicePath is NULL or is the End of Device Path Node, return EFI_SUCCESS.\r
       //\r
@@ -498,7 +503,7 @@ I2cBusDriverSupported (
     } else {\r
       //\r
       // Test if the child with the RemainingDevicePath has already been created.\r
-      //    \r
+      //\r
       Status = CheckRemainingDevicePath (\r
                  This,\r
                  Controller,\r
@@ -544,7 +549,7 @@ I2cBusDriverSupported (
   @retval EFI_SUCCESS              The device was started.\r
   @retval EFI_DEVICE_ERROR         The device could not be started due to a device error.Currently not implemented.\r
   @retval EFI_OUT_OF_RESOURCES     The request could not be completed due to a lack of resources.\r
-  @retval Others                   The driver failded to start the device.\r
+  @retval Others                   The driver failed to start the device.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -555,16 +560,16 @@ I2cBusDriverStart (
   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_I2C_ENUMERATE_PROTOCOL *I2cEnumerate;\r
-  EFI_I2C_HOST_PROTOCOL      *I2cHost;\r
-  I2C_BUS_CONTEXT            *I2cBusContext;\r
-  EFI_STATUS                 Status;\r
-  EFI_DEVICE_PATH_PROTOCOL   *ParentDevicePath;\r
+  EFI_I2C_ENUMERATE_PROTOCOL  *I2cEnumerate;\r
+  EFI_I2C_HOST_PROTOCOL       *I2cHost;\r
+  I2C_BUS_CONTEXT             *I2cBusContext;\r
+  EFI_STATUS                  Status;\r
+  EFI_DEVICE_PATH_PROTOCOL    *ParentDevicePath;\r
 \r
-  I2cBusContext     = NULL;\r
-  ParentDevicePath  = NULL;\r
-  I2cEnumerate      = NULL;\r
-  I2cHost           = NULL;\r
+  I2cBusContext    = NULL;\r
+  ParentDevicePath = NULL;\r
+  I2cEnumerate     = NULL;\r
+  I2cHost          = NULL;\r
 \r
   //\r
   //  Determine if the I2C controller is available\r
@@ -572,13 +577,13 @@ I2cBusDriverStart (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiI2cHostProtocolGuid,\r
-                  (VOID**)&I2cHost,\r
+                  (VOID **)&I2cHost,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
   if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {\r
-    DEBUG ((EFI_D_ERROR, "I2cBus: open I2C host error, Status = %r\n", Status));\r
+    DEBUG ((DEBUG_ERROR, "I2cBus: open I2C host error, Status = %r\n", Status));\r
     return Status;\r
   }\r
 \r
@@ -586,13 +591,13 @@ I2cBusDriverStart (
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiCallerIdGuid,\r
-                    (VOID **) &I2cBusContext,\r
+                    (VOID **)&I2cBusContext,\r
                     This->DriverBindingHandle,\r
                     Controller,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                     );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_ERROR, "I2cBus: open private protocol error, Status = %r.\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "I2cBus: open private protocol error, Status = %r.\n", Status));\r
       return Status;\r
     }\r
   }\r
@@ -603,33 +608,33 @@ I2cBusDriverStart (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiI2cEnumerateProtocolGuid,\r
-                  (VOID**)&I2cEnumerate,\r
+                  (VOID **)&I2cEnumerate,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
   if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {\r
-    DEBUG ((EFI_D_ERROR, "I2cBus: open I2C enumerate error, Status = %r\n", Status));\r
+    DEBUG ((DEBUG_ERROR, "I2cBus: open I2C enumerate error, Status = %r\n", Status));\r
     goto Error;\r
   }\r
 \r
   Status = gBS->OpenProtocol (\r
-                   Controller,\r
-                   &gEfiDevicePathProtocolGuid,\r
-                   (VOID **) &ParentDevicePath,\r
-                   This->DriverBindingHandle,\r
-                   Controller,\r
-                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                   );\r
+                  Controller,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  (VOID **)&ParentDevicePath,\r
+                  This->DriverBindingHandle,\r
+                  Controller,\r
+                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
+                  );\r
   if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {\r
-    DEBUG ((EFI_D_ERROR, "I2cBus: open device path error, Status = %r\n", Status));\r
+    DEBUG ((DEBUG_ERROR, "I2cBus: open device path error, Status = %r\n", Status));\r
     goto Error;\r
   }\r
 \r
   if ((RemainingDevicePath != NULL) && IsDevicePathEnd (RemainingDevicePath)) {\r
     //\r
     // If RemainingDevicePath is the End of Device Path Node,\r
-    // don't create any child device and return EFI_SUCESS\r
+    // don't create any child device and return EFI_SUCCESS\r
     //\r
     return EFI_SUCCESS;\r
   }\r
@@ -643,11 +648,11 @@ I2cBusDriverStart (
     //\r
     I2cBusContext = AllocateZeroPool (sizeof (I2C_BUS_CONTEXT));\r
     if (I2cBusContext == NULL) {\r
-      DEBUG ((EFI_D_ERROR, "I2cBus: there is no enough memory to allocate.\n"));\r
+      DEBUG ((DEBUG_ERROR, "I2cBus: there is no enough memory to allocate.\n"));\r
       Status = EFI_OUT_OF_RESOURCES;\r
       goto Error;\r
     }\r
-    \r
+\r
     /*\r
        +----------------+\r
     .->| I2C_BUS_CONTEXT|<----- This file Protocol (gEfiCallerIdGuid) installed on I2C Controller handle\r
@@ -660,21 +665,21 @@ I2cBusDriverStart (
        | I2C IO Protocol Structure  | <----- I2C IO Protocol\r
        |                            |\r
        +----------------------------+\r
-    \r
+\r
     */\r
     I2cBusContext->I2cHost      = I2cHost;\r
     I2cBusContext->I2cEnumerate = I2cEnumerate;\r
     //\r
     // Parent controller used to create children\r
     //\r
-    I2cBusContext->Controller   = Controller;\r
+    I2cBusContext->Controller = Controller;\r
     //\r
     // Parent controller device path used to create children device path\r
     //\r
     I2cBusContext->ParentDevicePath = ParentDevicePath;\r
-    \r
+\r
     I2cBusContext->DriverBindingHandle = This->DriverBindingHandle;\r
-    \r
+\r
     Status = gBS->InstallMultipleProtocolInterfaces (\r
                     &Controller,\r
                     &gEfiCallerIdGuid,\r
@@ -682,7 +687,7 @@ I2cBusDriverStart (
                     NULL\r
                     );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_ERROR, "I2cBus: install private protocol error, Status = %r.\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "I2cBus: install private protocol error, Status = %r.\n", Status));\r
       goto Error;\r
     }\r
   }\r
@@ -696,37 +701,37 @@ I2cBusDriverStart (
 \r
 Error:\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "I2cBus: Start() function failed, Status = %r\n", Status));\r
+    DEBUG ((DEBUG_ERROR, "I2cBus: Start() function failed, Status = %r\n", Status));\r
     if (ParentDevicePath != NULL) {\r
-      gBS->CloseProtocol ( \r
-            Controller,\r
-            &gEfiDevicePathProtocolGuid,\r
-            This->DriverBindingHandle,\r
-            Controller\r
-            );\r
+      gBS->CloseProtocol (\r
+             Controller,\r
+             &gEfiDevicePathProtocolGuid,\r
+             This->DriverBindingHandle,\r
+             Controller\r
+             );\r
     }\r
 \r
     if (I2cHost != NULL) {\r
       gBS->CloseProtocol (\r
-            Controller,\r
-            &gEfiI2cHostProtocolGuid,\r
-            This->DriverBindingHandle,\r
-            Controller\r
-            );\r
+             Controller,\r
+             &gEfiI2cHostProtocolGuid,\r
+             This->DriverBindingHandle,\r
+             Controller\r
+             );\r
     }\r
 \r
     if (I2cEnumerate != NULL) {\r
-      gBS->CloseProtocol ( \r
-            Controller,\r
-            &gEfiI2cEnumerateProtocolGuid,\r
-            This->DriverBindingHandle,\r
-            Controller\r
-            );\r
+      gBS->CloseProtocol (\r
+             Controller,\r
+             &gEfiI2cEnumerateProtocolGuid,\r
+             This->DriverBindingHandle,\r
+             Controller\r
+             );\r
     }\r
-    \r
+\r
     if (I2cBusContext != NULL) {\r
       Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                      &Controller,\r
+                      Controller,\r
                       gEfiCallerIdGuid,\r
                       I2cBusContext,\r
                       NULL\r
@@ -741,7 +746,6 @@ Error:
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Stops a device controller or a bus controller.\r
 \r
@@ -777,60 +781,60 @@ I2cBusDriverStop (
   IN  EFI_HANDLE                   *ChildHandleBuffer\r
   )\r
 {\r
-  I2C_BUS_CONTEXT             *I2cBusContext;\r
-  EFI_STATUS                  Status;\r
-  BOOLEAN                     AllChildrenStopped;\r
-  UINTN                       Index;\r
+  I2C_BUS_CONTEXT  *I2cBusContext;\r
+  EFI_STATUS       Status;\r
+  BOOLEAN          AllChildrenStopped;\r
+  UINTN            Index;\r
 \r
   if (NumberOfChildren == 0) {\r
-    gBS->CloseProtocol ( \r
-          Controller,\r
-          &gEfiDevicePathProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+    gBS->CloseProtocol (\r
+           Controller,\r
+           &gEfiDevicePathProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
 \r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiI2cHostProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiI2cHostProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
 \r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiI2cEnumerateProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiI2cEnumerateProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
 \r
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiCallerIdGuid,\r
-                    (VOID **) &I2cBusContext,\r
+                    (VOID **)&I2cBusContext,\r
                     This->DriverBindingHandle,\r
                     Controller,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                     );\r
     if (!EFI_ERROR (Status)) {\r
       gBS->UninstallMultipleProtocolInterfaces (\r
-            Controller,\r
-            &gEfiCallerIdGuid,\r
-            I2cBusContext,\r
-            NULL\r
-            );\r
+             Controller,\r
+             &gEfiCallerIdGuid,\r
+             I2cBusContext,\r
+             NULL\r
+             );\r
       //\r
       // No more child now, free bus context data.\r
       //\r
       FreePool (I2cBusContext);\r
     }\r
+\r
     return Status;\r
   }\r
 \r
   AllChildrenStopped = TRUE;\r
 \r
   for (Index = 0; Index < NumberOfChildren; Index++) {\r
-\r
     Status = UnRegisterI2cDevice (This, Controller, ChildHandleBuffer[Index]);\r
     if (EFI_ERROR (Status)) {\r
       AllChildrenStopped = FALSE;\r
@@ -840,6 +844,7 @@ I2cBusDriverStop (
   if (!AllChildrenStopped) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -859,43 +864,44 @@ I2cBusDriverStop (
 **/\r
 EFI_STATUS\r
 RegisterI2cDevice (\r
-  IN I2C_BUS_CONTEXT            *I2cBusContext,\r
-  IN EFI_HANDLE                 Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL   *RemainingDevicePath\r
+  IN I2C_BUS_CONTEXT           *I2cBusContext,\r
+  IN EFI_HANDLE                Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath\r
   )\r
 {\r
-  I2C_DEVICE_CONTEXT                *I2cDeviceContext;\r
-  EFI_STATUS                        Status;\r
-  CONST EFI_I2C_DEVICE              *Device;\r
-  CONST EFI_I2C_DEVICE              *TempDevice;\r
-  UINT32                            RemainingPathDeviceIndex;\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;\r
-  BOOLEAN                           BuildControllerNode;\r
-  UINTN                             Count;\r
-\r
-  Status                   = EFI_SUCCESS;\r
-  BuildControllerNode      = TRUE;\r
+  I2C_DEVICE_CONTEXT        *I2cDeviceContext;\r
+  EFI_STATUS                Status;\r
+  CONST EFI_I2C_DEVICE      *Device;\r
+  CONST EFI_I2C_DEVICE      *TempDevice;\r
+  UINT32                    RemainingPathDeviceIndex;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevPathNode;\r
+  BOOLEAN                   BuildControllerNode;\r
+  UINTN                     Count;\r
+\r
+  Status              = EFI_SUCCESS;\r
+  BuildControllerNode = TRUE;\r
 \r
   //\r
   // Default DeviceIndex\r
   //\r
   RemainingPathDeviceIndex = 0;\r
-  \r
+\r
   //\r
   // Determine the controller number in Controller Node Device Path when RemainingDevicePath is not NULL.\r
   //\r
   if (RemainingDevicePath != NULL) {\r
     //\r
     // Check if there is a controller node appended after vendor node\r
-    //    \r
+    //\r
     DevPathNode = NextDevicePathNode (RemainingDevicePath);\r
     if ((DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH) &&\r
-        (DevicePathSubType(DevPathNode) == HW_CONTROLLER_DP)) {\r
+        (DevicePathSubType (DevPathNode) == HW_CONTROLLER_DP))\r
+    {\r
       //\r
       // RemainingDevicePath != NULL and RemainingDevicePath contains Controller Node,\r
       // add Controller Node to Device Path on child handle.\r
       //\r
-      RemainingPathDeviceIndex = ((CONTROLLER_DEVICE_PATH *) DevPathNode)->ControllerNumber;\r
+      RemainingPathDeviceIndex = ((CONTROLLER_DEVICE_PATH *)DevPathNode)->ControllerNumber;\r
     } else {\r
       //\r
       // RemainingDevicePath != NULL and RemainingDevicePath does not contain Controller Node,\r
@@ -914,12 +920,13 @@ RegisterI2cDevice (
     //  Get the next I2C device\r
     //\r
     Status = I2cBusContext->I2cEnumerate->Enumerate (I2cBusContext->I2cEnumerate, &Device);\r
-    if (EFI_ERROR (Status) || Device == NULL) {\r
+    if (EFI_ERROR (Status) || (Device == NULL)) {\r
       if (RemainingDevicePath != NULL) {\r
         Status = EFI_NOT_FOUND;\r
       } else {\r
         Status = EFI_SUCCESS;\r
       }\r
+\r
       break;\r
     }\r
 \r
@@ -927,7 +934,7 @@ RegisterI2cDevice (
     //  Determine if the device info is valid\r
     //\r
     if ((Device->DeviceGuid == NULL) || (Device->SlaveAddressCount == 0) || (Device->SlaveAddressArray == NULL)) {\r
-      DEBUG ((EFI_D_ERROR, "Invalid EFI_I2C_DEVICE reported by I2c Enumerate protocol.\n"));\r
+      DEBUG ((DEBUG_ERROR, "Invalid EFI_I2C_DEVICE reported by I2c Enumerate protocol.\n"));\r
       continue;\r
     }\r
 \r
@@ -943,14 +950,16 @@ RegisterI2cDevice (
           //  Get the next I2C device\r
           //\r
           Status = I2cBusContext->I2cEnumerate->Enumerate (I2cBusContext->I2cEnumerate, &TempDevice);\r
-          if (EFI_ERROR (Status) || TempDevice == NULL) {\r
+          if (EFI_ERROR (Status) || (TempDevice == NULL)) {\r
             Status = EFI_SUCCESS;\r
             break;\r
           }\r
+\r
           if (CompareGuid (Device->DeviceGuid, TempDevice->DeviceGuid)) {\r
             Count++;\r
           }\r
         }\r
+\r
         if (Count == 1) {\r
           //\r
           // RemainingDevicePath == NULL and only DeviceIndex 0 is present on the I2C bus,\r
@@ -964,8 +973,9 @@ RegisterI2cDevice (
       // Find I2C device reported in Remaining Device Path\r
       //\r
       if ((!CompareGuid (&((VENDOR_DEVICE_PATH *)RemainingDevicePath)->Guid, Device->DeviceGuid)) ||\r
-          (RemainingPathDeviceIndex != Device->DeviceIndex)) {\r
-        continue; \r
+          (RemainingPathDeviceIndex != Device->DeviceIndex))\r
+      {\r
+        continue;\r
       }\r
     }\r
 \r
@@ -982,11 +992,11 @@ RegisterI2cDevice (
     //\r
     //  Initialize the specific device context\r
     //\r
-    I2cDeviceContext->I2cBusContext          = I2cBusContext;\r
-    I2cDeviceContext->I2cDevice              = Device;\r
-    I2cDeviceContext->I2cIo.DeviceGuid       = Device->DeviceGuid;\r
-    I2cDeviceContext->I2cIo.DeviceIndex      = Device->DeviceIndex;\r
-    I2cDeviceContext->I2cIo.HardwareRevision = Device->HardwareRevision;\r
+    I2cDeviceContext->I2cBusContext                   = I2cBusContext;\r
+    I2cDeviceContext->I2cDevice                       = Device;\r
+    I2cDeviceContext->I2cIo.DeviceGuid                = Device->DeviceGuid;\r
+    I2cDeviceContext->I2cIo.DeviceIndex               = Device->DeviceIndex;\r
+    I2cDeviceContext->I2cIo.HardwareRevision          = Device->HardwareRevision;\r
     I2cDeviceContext->I2cIo.I2cControllerCapabilities = I2cBusContext->I2cHost->I2cControllerCapabilities;\r
 \r
     //\r
@@ -1002,12 +1012,13 @@ RegisterI2cDevice (
     //  Install the protocol\r
     //\r
     Status = gBS->InstallMultipleProtocolInterfaces (\r
-              &I2cDeviceContext->Handle,\r
-              &gEfiI2cIoProtocolGuid,\r
-              &I2cDeviceContext->I2cIo,\r
-              &gEfiDevicePathProtocolGuid,\r
-              I2cDeviceContext->DevicePath,\r
-              NULL );\r
+                    &I2cDeviceContext->Handle,\r
+                    &gEfiI2cIoProtocolGuid,\r
+                    &I2cDeviceContext->I2cIo,\r
+                    &gEfiDevicePathProtocolGuid,\r
+                    I2cDeviceContext->DevicePath,\r
+                    NULL\r
+                    );\r
     if (EFI_ERROR (Status)) {\r
       //\r
       // Free resources for this I2C device\r
@@ -1015,14 +1026,14 @@ RegisterI2cDevice (
       ReleaseI2cDeviceContext (I2cDeviceContext);\r
       continue;\r
     }\r
-    \r
+\r
     //\r
     // Create the child handle\r
     //\r
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiI2cHostProtocolGuid,\r
-                    (VOID **) &I2cBusContext->I2cHost,\r
+                    (VOID **)&I2cBusContext->I2cHost,\r
                     I2cBusContext->DriverBindingHandle,\r
                     I2cDeviceContext->Handle,\r
                     EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
@@ -1040,7 +1051,7 @@ RegisterI2cDevice (
       // Free resources for this I2C device\r
       //\r
       ReleaseI2cDeviceContext (I2cDeviceContext);\r
-      continue;      \r
+      continue;\r
     }\r
 \r
     if (RemainingDevicePath != NULL) {\r
@@ -1054,7 +1065,6 @@ RegisterI2cDevice (
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Queue an I2C transaction for execution on the I2C device.\r
 \r
@@ -1074,7 +1084,7 @@ RegisterI2cDevice (
 \r
   The upper layer driver writer provides the following to the platform\r
   vendor:\r
-  \r
+\r
   1.  Vendor specific GUID for the I2C part\r
   2.  Guidance on proper construction of the slave address array when the\r
       I2C device uses more than one slave address.  The I2C bus protocol\r
@@ -1108,14 +1118,11 @@ RegisterI2cDevice (
                                 queued when Event is not NULL.\r
   @retval EFI_SUCCESS           The transaction completed successfully when\r
                                 Event is NULL.\r
-  @retval EFI_ABORTED           The request did not complete because the driver\r
-                                binding Stop() routine was called.\r
   @retval EFI_BAD_BUFFER_SIZE   The RequestPacket->LengthInBytes value is too\r
                                 large.\r
   @retval EFI_DEVICE_ERROR      There was an I2C error (NACK) during the\r
                                 transaction.\r
   @retval EFI_INVALID_PARAMETER RequestPacket is NULL\r
-  @retval EFI_NOT_FOUND         Reserved bit set in the SlaveAddress parameter\r
   @retval EFI_NO_MAPPING        The EFI_I2C_HOST_PROTOCOL could not set the\r
                                 bus configuration required to access this I2C\r
                                 device.\r
@@ -1139,11 +1146,11 @@ I2cBusQueueRequest (
   OUT EFI_STATUS                *I2cStatus          OPTIONAL\r
   )\r
 {\r
-  CONST EFI_I2C_DEVICE        *I2cDevice;\r
-  I2C_BUS_CONTEXT             *I2cBusContext;\r
-  CONST EFI_I2C_HOST_PROTOCOL *I2cHost;\r
-  I2C_DEVICE_CONTEXT          *I2cDeviceContext;\r
-  EFI_STATUS                  Status;\r
+  CONST EFI_I2C_DEVICE         *I2cDevice;\r
+  I2C_BUS_CONTEXT              *I2cBusContext;\r
+  CONST EFI_I2C_HOST_PROTOCOL  *I2cHost;\r
+  I2C_DEVICE_CONTEXT           *I2cDeviceContext;\r
+  EFI_STATUS                   Status;\r
 \r
   if (RequestPacket == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -1170,7 +1177,7 @@ I2cBusQueueRequest (
   Status = I2cHost->QueueRequest (\r
                       I2cHost,\r
                       I2cDevice->I2cBusConfiguration,\r
-                      I2cDevice->SlaveAddressArray [SlaveAddressIndex],\r
+                      I2cDevice->SlaveAddressArray[SlaveAddressIndex],\r
                       Event,\r
                       RequestPacket,\r
                       I2cStatus\r
@@ -1189,13 +1196,13 @@ I2cBusQueueRequest (
 **/\r
 VOID\r
 ReleaseI2cDeviceContext (\r
-  IN I2C_DEVICE_CONTEXT          *I2cDeviceContext\r
+  IN I2C_DEVICE_CONTEXT  *I2cDeviceContext\r
   )\r
 {\r
   if (I2cDeviceContext == NULL) {\r
     return;\r
   }\r
-  \r
+\r
   if (I2cDeviceContext->DevicePath != NULL) {\r
     FreePool (I2cDeviceContext->DevicePath);\r
   }\r
@@ -1219,22 +1226,22 @@ ReleaseI2cDeviceContext (
 **/\r
 EFI_STATUS\r
 UnRegisterI2cDevice (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN  EFI_HANDLE                     Controller,\r
-  IN  EFI_HANDLE                     Handle\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   Controller,\r
+  IN  EFI_HANDLE                   Handle\r
   )\r
 {\r
-  EFI_STATUS                  Status;\r
-  I2C_DEVICE_CONTEXT          *I2cDeviceContext;\r
-  EFI_I2C_IO_PROTOCOL         *I2cIo;\r
-  EFI_I2C_HOST_PROTOCOL       *I2cHost;\r
+  EFI_STATUS             Status;\r
+  I2C_DEVICE_CONTEXT     *I2cDeviceContext;\r
+  EFI_I2C_IO_PROTOCOL    *I2cIo;\r
+  EFI_I2C_HOST_PROTOCOL  *I2cHost;\r
 \r
   I2cIo = NULL;\r
 \r
   Status = gBS->OpenProtocol (\r
                   Handle,\r
                   &gEfiI2cIoProtocolGuid,\r
-                  (VOID **) &I2cIo,\r
+                  (VOID **)&I2cIo,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -1276,21 +1283,21 @@ UnRegisterI2cDevice (
     // Keep parent and child relationship\r
     //\r
     gBS->OpenProtocol (\r
-          Controller,\r
-          &gEfiI2cHostProtocolGuid,\r
-          (VOID **) &I2cHost,\r
-          This->DriverBindingHandle,\r
-          Handle,\r
-          EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-          );\r
+           Controller,\r
+           &gEfiI2cHostProtocolGuid,\r
+           (VOID **)&I2cHost,\r
+           This->DriverBindingHandle,\r
+           Handle,\r
+           EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+           );\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Free resources for this I2C device\r
   //\r
   ReleaseI2cDeviceContext (I2cDeviceContext);\r
-  \r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1308,37 +1315,37 @@ UnRegisterI2cDevice (
 **/\r
 EFI_STATUS\r
 I2cBusDevicePathAppend (\r
-  IN I2C_DEVICE_CONTEXT     *I2cDeviceContext,\r
-  IN BOOLEAN                BuildControllerNode\r
+  IN I2C_DEVICE_CONTEXT  *I2cDeviceContext,\r
+  IN BOOLEAN             BuildControllerNode\r
   )\r
 {\r
   EFI_DEVICE_PATH_PROTOCOL  *PreviousDevicePath;\r
-  \r
+\r
   PreviousDevicePath = NULL;\r
 \r
   //\r
   // Build vendor device path\r
-  //  \r
+  //\r
   CopyMem (&gVendorDevicePathTemplate.Guid, I2cDeviceContext->I2cDevice->DeviceGuid, sizeof (EFI_GUID));\r
-  I2cDeviceContext->DevicePath                    = AppendDevicePathNode (\r
-                                                      I2cDeviceContext->I2cBusContext->ParentDevicePath,\r
-                                                      (EFI_DEVICE_PATH_PROTOCOL *) &gVendorDevicePathTemplate\r
-                                                      );\r
+  I2cDeviceContext->DevicePath = AppendDevicePathNode (\r
+                                   I2cDeviceContext->I2cBusContext->ParentDevicePath,\r
+                                   (EFI_DEVICE_PATH_PROTOCOL *)&gVendorDevicePathTemplate\r
+                                   );\r
   ASSERT (I2cDeviceContext->DevicePath != NULL);\r
   if (I2cDeviceContext->DevicePath == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
-  \r
+\r
   if ((BuildControllerNode) && (I2cDeviceContext->DevicePath != NULL)) {\r
     //\r
     // Build the final I2C device path with controller node\r
     //\r
-    PreviousDevicePath = I2cDeviceContext->DevicePath;\r
-    gControllerDevicePathTemplate.ControllerNumber = I2cDeviceContext->I2cDevice->DeviceIndex; \r
-    I2cDeviceContext->DevicePath          = AppendDevicePathNode (\r
-                                              I2cDeviceContext->DevicePath,\r
-                                              (EFI_DEVICE_PATH_PROTOCOL *) &gControllerDevicePathTemplate\r
-                                              );\r
+    PreviousDevicePath                             = I2cDeviceContext->DevicePath;\r
+    gControllerDevicePathTemplate.ControllerNumber = I2cDeviceContext->I2cDevice->DeviceIndex;\r
+    I2cDeviceContext->DevicePath                   = AppendDevicePathNode (\r
+                                                       I2cDeviceContext->DevicePath,\r
+                                                       (EFI_DEVICE_PATH_PROTOCOL *)&gControllerDevicePathTemplate\r
+                                                       );\r
     gBS->FreePool (PreviousDevicePath);\r
     ASSERT (I2cDeviceContext->DevicePath != NULL);\r
     if (I2cDeviceContext->DevicePath == NULL) {\r
@@ -1362,12 +1369,12 @@ I2cBusDevicePathAppend (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-InitializeI2cBus(\r
-  IN EFI_HANDLE           ImageHandle,\r
-  IN EFI_SYSTEM_TABLE     *SystemTable\r
+InitializeI2cBus (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS              Status;\r
+  EFI_STATUS  Status;\r
 \r
   //\r
   // Install driver model protocol(s).\r
@@ -1382,7 +1389,6 @@ InitializeI2cBus(
              );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  \r
   return Status;\r
 }\r
 \r
@@ -1401,13 +1407,15 @@ InitializeI2cBus(
 EFI_STATUS\r
 EFIAPI\r
 I2cBusUnload (\r
-  IN EFI_HANDLE             ImageHandle\r
+  IN EFI_HANDLE  ImageHandle\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  EFI_HANDLE                        *DeviceHandleBuffer;\r
-  UINTN                             DeviceHandleCount;\r
-  UINTN                             Index;\r
+  EFI_STATUS                    Status;\r
+  EFI_HANDLE                    *DeviceHandleBuffer;\r
+  UINTN                         DeviceHandleCount;\r
+  UINTN                         Index;\r
+  EFI_COMPONENT_NAME_PROTOCOL   *ComponentName;\r
+  EFI_COMPONENT_NAME2_PROTOCOL  *ComponentName2;\r
 \r
   //\r
   // Get the list of all I2C Controller handles in the handle database.\r
@@ -1422,22 +1430,20 @@ I2cBusUnload (
                   &DeviceHandleBuffer\r
                   );\r
 \r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Disconnect the driver specified by Driver BindingHandle from all\r
-  // the devices in the handle database.\r
-  //\r
-  for (Index = 0; Index < DeviceHandleCount; Index++) {\r
-    Status = gBS->DisconnectController (\r
-                    DeviceHandleBuffer[Index],\r
-                    gI2cBusDriverBinding.DriverBindingHandle,\r
-                    NULL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Done;\r
+  if (!EFI_ERROR (Status)) {\r
+    //\r
+    // Disconnect the driver specified by Driver BindingHandle from all\r
+    // the devices in the handle database.\r
+    //\r
+    for (Index = 0; Index < DeviceHandleCount; Index++) {\r
+      Status = gBS->DisconnectController (\r
+                      DeviceHandleBuffer[Index],\r
+                      gI2cBusDriverBinding.DriverBindingHandle,\r
+                      NULL\r
+                      );\r
+      if (EFI_ERROR (Status)) {\r
+        goto Done;\r
+      }\r
     }\r
   }\r
 \r
@@ -1448,14 +1454,47 @@ I2cBusUnload (
                   gI2cBusDriverBinding.DriverBindingHandle,\r
                   &gEfiDriverBindingProtocolGuid,\r
                   &gI2cBusDriverBinding,\r
-                  &gEfiComponentNameProtocolGuid,\r
-                  &gI2cBusComponentName,\r
-                  &gEfiComponentName2ProtocolGuid,\r
-                  &gI2cBusComponentName2,\r
                   NULL\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
+  //\r
+  // Note we have to one by one uninstall the following protocols.\r
+  // It's because some of them are optionally installed based on\r
+  // the following PCD settings.\r
+  //   gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable\r
+  //   gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable\r
+  //   gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable\r
+  //   gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable\r
+  //\r
+  Status = gBS->HandleProtocol (\r
+                  gI2cBusDriverBinding.DriverBindingHandle,\r
+                  &gEfiComponentNameProtocolGuid,\r
+                  (VOID **)&ComponentName\r
+                  );\r
+  if (!EFI_ERROR (Status)) {\r
+    gBS->UninstallProtocolInterface (\r
+           gI2cBusDriverBinding.DriverBindingHandle,\r
+           &gEfiComponentNameProtocolGuid,\r
+           ComponentName\r
+           );\r
+  }\r
+\r
+  Status = gBS->HandleProtocol (\r
+                  gI2cBusDriverBinding.DriverBindingHandle,\r
+                  &gEfiComponentName2ProtocolGuid,\r
+                  (VOID **)&ComponentName2\r
+                  );\r
+  if (!EFI_ERROR (Status)) {\r
+    gBS->UninstallProtocolInterface (\r
+           gI2cBusDriverBinding.DriverBindingHandle,\r
+           &gEfiComponentName2ProtocolGuid,\r
+           ComponentName2\r
+           );\r
+  }\r
+\r
+  Status = EFI_SUCCESS;\r
+\r
 Done:\r
   //\r
   // Free the buffer containing the list of handles from the handle database\r