]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
ArmPlatformPkg: Add PCD to select pixel format
[mirror_edk2.git] / ArmPlatformPkg / Library / PL111Lcd / PL111Lcd.c
index c9e2736911881fc36b51562b9259b7bccf30747d..0496376fffe514651a70f58a3316894a4b2b319c 100644 (file)
@@ -76,7 +76,6 @@ LcdInitialize (
 \r
   @retval EFI_SUCCESS            Display mode set successfuly.\r
   @retval !(EFI_SUCCESS)         Other errors.\r
-\r
 **/\r
 EFI_STATUS\r
 LcdSetMode (\r
@@ -89,6 +88,8 @@ LcdSetMode (
   UINT32            LcdControl;\r
   LCD_BPP           LcdBpp;\r
 \r
+  EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  ModeInfo;\r
+\r
   // Set the video mode timings and other relevant information\r
   Status = LcdPlatformGetTimings (\r
              ModeNumber,\r
@@ -109,6 +110,13 @@ LcdSetMode (
     return Status;\r
   }\r
 \r
+  // Get the pixel format information\r
+  Status = LcdPlatformQueryMode (ModeNumber, &ModeInfo);\r
+  if (EFI_ERROR (Status)) {\r
+    ASSERT_EFI_ERROR (Status);\r
+    return Status;\r
+  }\r
+\r
   // Disable the CLCD_LcdEn bit\r
   MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);\r
 \r
@@ -142,7 +150,10 @@ LcdSetMode (
 \r
   // PL111_REG_LCD_CONTROL\r
   LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP (LcdBpp) |\r
-               PL111_CTRL_LCD_TFT | PL111_CTRL_LCD_PWR | PL111_CTRL_BGR;\r
+               PL111_CTRL_LCD_TFT | PL111_CTRL_LCD_PWR;\r
+  if (ModeInfo.PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {\r
+    LcdControl |= PL111_CTRL_BGR;\r
+  }\r
   MmioWrite32 (PL111_REG_LCD_CONTROL, LcdControl);\r
 \r
   return EFI_SUCCESS;\r