mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg: Redefine LcdPlatformGetTimings function
The LcdPlatformGetTimings interface function takes similar sets of multiple parameters for horizontal and vertical timings which can be aggregated in a common data type. This change defines a structure SCAN_TIMINGS for this which can be used to describe both horizontal and vertical scan timings, and accordingly redefines the LcdPlatformGetTiming interface, greatly reducing the amount of data passed about. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Girish Pathak <girish.pathak@arm.com> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
c18ef81e79
commit
262c88461b
|
@ -153,6 +153,14 @@ typedef enum {
|
|||
LCD_BITS_PER_PIXEL_12_444
|
||||
} LCD_BPP;
|
||||
|
||||
// Display timing settings.
|
||||
typedef struct {
|
||||
UINT32 Resolution;
|
||||
UINT32 Sync;
|
||||
UINT32 BackPorch;
|
||||
UINT32 FrontPorch;
|
||||
} SCAN_TIMINGS;
|
||||
|
||||
/** Platform related initialization function.
|
||||
|
||||
@param[in] Handle Handle to the LCD device instance.
|
||||
|
@ -228,14 +236,11 @@ LcdPlatformQueryMode (
|
|||
|
||||
@param[in] ModeNumber Mode Number.
|
||||
|
||||
@param[out] HRes Pointer to horizontal resolution.
|
||||
@param[out] HSync Pointer to horizontal sync width.
|
||||
@param[out] HBackPorch Pointer to horizontal back porch.
|
||||
@param[out] HFrontPorch Pointer to horizontal front porch.
|
||||
@param[out] VRes Pointer to vertical resolution.
|
||||
@param[out] VSync Pointer to vertical sync width.
|
||||
@param[out] VBackPorch Pointer to vertical back porch.
|
||||
@param[out] VFrontPorch Pointer to vertical front porch.
|
||||
@param[out] Horizontal Pointer to horizontal timing parameters.
|
||||
(Resolution, Sync, Back porch, Front porch)
|
||||
@param[out] Vertical Pointer to vertical timing parameters.
|
||||
(Resolution, Sync, Back porch, Front porch)
|
||||
|
||||
|
||||
@retval EFI_SUCCESS Display timing information for the requested
|
||||
mode returned successfully.
|
||||
|
@ -244,14 +249,8 @@ LcdPlatformQueryMode (
|
|||
EFI_STATUS
|
||||
LcdPlatformGetTimings (
|
||||
IN UINT32 ModeNumber,
|
||||
OUT UINT32* HRes,
|
||||
OUT UINT32* HSync,
|
||||
OUT UINT32* HBackPorch,
|
||||
OUT UINT32* HFrontPorch,
|
||||
OUT UINT32* VRes,
|
||||
OUT UINT32* VSync,
|
||||
OUT UINT32* VBackPorch,
|
||||
OUT UINT32* VFrontPorch
|
||||
OUT SCAN_TIMINGS **Horizontal,
|
||||
OUT SCAN_TIMINGS **Vertical
|
||||
);
|
||||
|
||||
/** Return bits per pixel information for a mode number.
|
||||
|
|
|
@ -98,34 +98,25 @@ LcdSetMode (
|
|||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT32 HRes;
|
||||
UINT32 HSync;
|
||||
UINT32 HBackPorch;
|
||||
UINT32 HFrontPorch;
|
||||
UINT32 VRes;
|
||||
UINT32 VSync;
|
||||
UINT32 VBackPorch;
|
||||
UINT32 VFrontPorch;
|
||||
SCAN_TIMINGS *Horizontal;
|
||||
SCAN_TIMINGS *Vertical;
|
||||
UINT32 BytesPerPixel;
|
||||
LCD_BPP LcdBpp;
|
||||
|
||||
// Set the video mode timings and other relevant information
|
||||
Status = LcdPlatformGetTimings (
|
||||
ModeNumber,
|
||||
&HRes,
|
||||
&HSync,
|
||||
&HBackPorch,
|
||||
&HFrontPorch,
|
||||
&VRes,
|
||||
&VSync,
|
||||
&VBackPorch,
|
||||
&VFrontPorch
|
||||
&Horizontal,
|
||||
&Vertical
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
ASSERT (Horizontal != NULL);
|
||||
ASSERT (Vertical != NULL);
|
||||
|
||||
Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
@ -138,21 +129,26 @@ LcdSetMode (
|
|||
MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
|
||||
|
||||
// Update the frame buffer information with the new settings
|
||||
MmioWrite32 (HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
|
||||
MmioWrite32 (HDLCD_REG_FB_LINE_PITCH, HRes * BytesPerPixel);
|
||||
MmioWrite32 (HDLCD_REG_FB_LINE_COUNT, VRes - 1);
|
||||
MmioWrite32 (
|
||||
HDLCD_REG_FB_LINE_LENGTH,
|
||||
Horizontal->Resolution * BytesPerPixel
|
||||
);
|
||||
|
||||
MmioWrite32 (HDLCD_REG_FB_LINE_PITCH, Horizontal->Resolution * BytesPerPixel);
|
||||
|
||||
MmioWrite32 (HDLCD_REG_FB_LINE_COUNT, Vertical->Resolution - 1);
|
||||
|
||||
// Set the vertical timing information
|
||||
MmioWrite32 (HDLCD_REG_V_SYNC, VSync);
|
||||
MmioWrite32 (HDLCD_REG_V_BACK_PORCH, VBackPorch);
|
||||
MmioWrite32 (HDLCD_REG_V_DATA, VRes - 1);
|
||||
MmioWrite32 (HDLCD_REG_V_FRONT_PORCH, VFrontPorch);
|
||||
MmioWrite32 (HDLCD_REG_V_SYNC, Vertical->Sync);
|
||||
MmioWrite32 (HDLCD_REG_V_BACK_PORCH, Vertical->BackPorch);
|
||||
MmioWrite32 (HDLCD_REG_V_DATA, Vertical->Resolution - 1);
|
||||
MmioWrite32 (HDLCD_REG_V_FRONT_PORCH, Vertical->FrontPorch);
|
||||
|
||||
// Set the horizontal timing information
|
||||
MmioWrite32 (HDLCD_REG_H_SYNC, HSync);
|
||||
MmioWrite32 (HDLCD_REG_H_BACK_PORCH, HBackPorch);
|
||||
MmioWrite32 (HDLCD_REG_H_DATA, HRes - 1);
|
||||
MmioWrite32 (HDLCD_REG_H_FRONT_PORCH, HFrontPorch);
|
||||
MmioWrite32 (HDLCD_REG_H_SYNC, Horizontal->Sync);
|
||||
MmioWrite32 (HDLCD_REG_H_BACK_PORCH, Horizontal->BackPorch);
|
||||
MmioWrite32 (HDLCD_REG_H_DATA, Horizontal->Resolution - 1);
|
||||
MmioWrite32 (HDLCD_REG_H_FRONT_PORCH, Horizontal->FrontPorch);
|
||||
|
||||
// Enable the controller
|
||||
MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_ENABLE);
|
||||
|
|
|
@ -123,14 +123,8 @@ LcdPlatformQueryMode (
|
|||
EFI_STATUS
|
||||
LcdPlatformGetTimings (
|
||||
IN UINT32 ModeNumber,
|
||||
OUT UINT32* HRes,
|
||||
OUT UINT32* HSync,
|
||||
OUT UINT32* HBackPorch,
|
||||
OUT UINT32* HFrontPorch,
|
||||
OUT UINT32* VRes,
|
||||
OUT UINT32* VSync,
|
||||
OUT UINT32* VBackPorch,
|
||||
OUT UINT32* VFrontPorch
|
||||
OUT SCAN_TIMINGS **Horizontal,
|
||||
OUT SCAN_TIMINGS **Vertical
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
|
|
|
@ -84,34 +84,25 @@ LcdSetMode (
|
|||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT32 HRes;
|
||||
UINT32 HSync;
|
||||
UINT32 HBackPorch;
|
||||
UINT32 HFrontPorch;
|
||||
UINT32 VRes;
|
||||
UINT32 VSync;
|
||||
UINT32 VBackPorch;
|
||||
UINT32 VFrontPorch;
|
||||
SCAN_TIMINGS *Horizontal;
|
||||
SCAN_TIMINGS *Vertical;
|
||||
UINT32 LcdControl;
|
||||
LCD_BPP LcdBpp;
|
||||
|
||||
// Set the video mode timings and other relevant information
|
||||
Status = LcdPlatformGetTimings (
|
||||
ModeNumber,
|
||||
&HRes,
|
||||
&HSync,
|
||||
&HBackPorch,
|
||||
&HFrontPorch,
|
||||
&VRes,
|
||||
&VSync,
|
||||
&VBackPorch,
|
||||
&VFrontPorch
|
||||
&Horizontal,
|
||||
&Vertical
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
ASSERT (Horizontal != NULL);
|
||||
ASSERT (Vertical != NULL);
|
||||
|
||||
Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
@ -124,15 +115,29 @@ LcdSetMode (
|
|||
// Set Timings
|
||||
MmioWrite32 (
|
||||
PL111_REG_LCD_TIMING_0,
|
||||
HOR_AXIS_PANEL (HBackPorch, HFrontPorch, HSync, HRes)
|
||||
HOR_AXIS_PANEL (
|
||||
Horizontal->BackPorch,
|
||||
Horizontal->FrontPorch,
|
||||
Horizontal->Sync,
|
||||
Horizontal->Resolution
|
||||
)
|
||||
);
|
||||
|
||||
MmioWrite32 (
|
||||
PL111_REG_LCD_TIMING_1,
|
||||
VER_AXIS_PANEL (VBackPorch, VFrontPorch, VSync, VRes)
|
||||
VER_AXIS_PANEL (
|
||||
Vertical->BackPorch,
|
||||
Vertical->FrontPorch,
|
||||
Vertical->Sync,
|
||||
Vertical->Resolution
|
||||
)
|
||||
);
|
||||
|
||||
MmioWrite32 (
|
||||
PL111_REG_LCD_TIMING_2,
|
||||
CLK_SIG_POLARITY (Horizontal->Resolution)
|
||||
);
|
||||
|
||||
MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY (HRes));
|
||||
MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
|
||||
|
||||
// PL111_REG_LCD_CONTROL
|
||||
|
|
Loading…
Reference in New Issue