Files
system76-edk2/QuarkPlatformPkg/Library/PlatformHelperLib/PlatformLeds.c
2019-04-09 10:58:21 -07:00

147 lines
3.4 KiB
C

/** @file
Platform helper LED routines.
Copyright (c) 2013-2015 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <PiDxe.h>
#include "CommonHeader.h"
//
// Routines defined in other source modules of this component.
//
//
// Routines local to this source module.
//
VOID
GalileoGen2RouteOutFlashUpdateLed (
VOID
)
{
//
// For GpioNums below values 0 to 7 are for Port0 ie P0-0 - P0-7 and
// values 8 to 15 are for Port1 ie P1-0 - P1-7.
//
//
// Disable Pull-ups / pull downs on EXP0 pin for LVL_B_PU7 signal.
//
PlatformPcal9555GpioDisablePull (
GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR, // IO Expander 0.
15 // P1-7.
);
//
// Make LVL_B_OE7_N an output pin.
//
PlatformPcal9555GpioSetDir (
GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR, // IO Expander 0.
14, // P1-6.
FALSE
);
//
// Set level of LVL_B_OE7_N to low.
//
PlatformPcal9555GpioSetLevel (
GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR,
14,
FALSE
);
//
// Make MUX8_SEL an output pin.
//
PlatformPcal9555GpioSetDir (
GALILEO_GEN2_IOEXP1_7BIT_SLAVE_ADDR, // IO Expander 1.
14, // P1-6.
FALSE
);
//
// Set level of MUX8_SEL to low to route GPIO_SUS<5> to LED.
//
PlatformPcal9555GpioSetLevel (
GALILEO_GEN2_IOEXP1_7BIT_SLAVE_ADDR, // IO Expander 1.
14, // P1-6.
FALSE
);
}
//
// Routines exported by this source module.
//
/**
Init platform LEDs into known state.
@param PlatformType Executing platform type.
@param I2cBus Pointer to I2c Host controller protocol.
@retval EFI_SUCCESS Operation success.
**/
EFI_STATUS
EFIAPI
PlatformLedInit (
IN CONST EFI_PLATFORM_TYPE Type
)
{
EFI_BOOT_MODE BootMode;
BootMode = GetBootModeHob ();
//
// Init Flash update / recovery LED in OFF state.
//
if (BootMode == BOOT_ON_FLASH_UPDATE || BootMode == BOOT_IN_RECOVERY_MODE) {
if (Type == GalileoGen2) {
PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_FLASH_UPDATE_LED_RESUMEWELL_GPIO, FALSE);
GalileoGen2RouteOutFlashUpdateLed ();
} else if (Type == Galileo) {
PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_FLASH_UPDATE_LED_RESUMEWELL_GPIO, FALSE);
} else {
//
// These platforms have no flash update LED.
//
}
}
return EFI_SUCCESS;
}
/**
Turn on or off platform flash update LED.
@param PlatformType Executing platform type.
@param TurnOn If TRUE turn on else turn off.
@retval EFI_SUCCESS Operation success.
**/
EFI_STATUS
EFIAPI
PlatformFlashUpdateLed (
IN CONST EFI_PLATFORM_TYPE Type,
IN CONST BOOLEAN TurnOn
)
{
if (Type == GalileoGen2) {
PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_FLASH_UPDATE_LED_RESUMEWELL_GPIO, TurnOn);
} else if (Type == Galileo) {
PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_FLASH_UPDATE_LED_RESUMEWELL_GPIO, TurnOn);
} else {
//
// These platforms have no flash update LED.
//
}
return EFI_SUCCESS;
}