1 /** @file
2 Platform helper LED routines.
3 
4 Copyright (c) 2013-2015 Intel Corporation.
5 
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution.  The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10 
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #include <PiDxe.h>
17 
18 #include "CommonHeader.h"
19 
20 //
21 // Routines defined in other source modules of this component.
22 //
23 
24 //
25 // Routines local to this source module.
26 //
27 
28 VOID
GalileoGen2RouteOutFlashUpdateLed(VOID)29 GalileoGen2RouteOutFlashUpdateLed (
30   VOID
31   )
32 {
33   //
34   // For GpioNums below values 0 to 7 are for Port0 ie P0-0 - P0-7 and
35   // values 8 to 15 are for Port1 ie P1-0 - P1-7.
36   //
37 
38   //
39   // Disable Pull-ups / pull downs on EXP0 pin for LVL_B_PU7 signal.
40   //
41   PlatformPcal9555GpioDisablePull (
42     GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR,  // IO Expander 0.
43     15                                   // P1-7.
44     );
45 
46   //
47   // Make LVL_B_OE7_N an output pin.
48   //
49   PlatformPcal9555GpioSetDir (
50     GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR,  // IO Expander 0.
51     14,                                   // P1-6.
52     FALSE
53     );
54 
55   //
56   // Set level of LVL_B_OE7_N to low.
57   //
58   PlatformPcal9555GpioSetLevel (
59     GALILEO_GEN2_IOEXP0_7BIT_SLAVE_ADDR,
60     14,
61     FALSE
62     );
63 
64   //
65   // Make MUX8_SEL an output pin.
66   //
67   PlatformPcal9555GpioSetDir (
68     GALILEO_GEN2_IOEXP1_7BIT_SLAVE_ADDR,  // IO Expander 1.
69     14,                                   // P1-6.
70     FALSE
71     );
72 
73   //
74   // Set level of MUX8_SEL to low to route GPIO_SUS<5> to LED.
75   //
76   PlatformPcal9555GpioSetLevel (
77     GALILEO_GEN2_IOEXP1_7BIT_SLAVE_ADDR,  // IO Expander 1.
78     14,                                   // P1-6.
79     FALSE
80     );
81 }
82 
83 //
84 // Routines exported by this source module.
85 //
86 
87 /**
88   Init platform LEDs into known state.
89 
90   @param   PlatformType     Executing platform type.
91   @param   I2cBus           Pointer to I2c Host controller protocol.
92 
93   @retval  EFI_SUCCESS      Operation success.
94 
95 **/
96 EFI_STATUS
97 EFIAPI
PlatformLedInit(IN CONST EFI_PLATFORM_TYPE Type)98 PlatformLedInit (
99   IN CONST EFI_PLATFORM_TYPE              Type
100   )
101 {
102   EFI_BOOT_MODE             BootMode;
103 
104   BootMode = GetBootModeHob ();
105 
106   //
107   // Init Flash update / recovery LED in OFF state.
108   //
109   if (BootMode == BOOT_ON_FLASH_UPDATE || BootMode == BOOT_IN_RECOVERY_MODE) {
110     if (Type == GalileoGen2) {
111       PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_FLASH_UPDATE_LED_RESUMEWELL_GPIO, FALSE);
112       GalileoGen2RouteOutFlashUpdateLed ();
113     } else if (Type == Galileo) {
114       PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_FLASH_UPDATE_LED_RESUMEWELL_GPIO, FALSE);
115     } else {
116       //
117       // These platforms have no flash update LED.
118       //
119     }
120   }
121 
122   return EFI_SUCCESS;
123 }
124 
125 /**
126   Turn on or off platform flash update LED.
127 
128   @param   PlatformType     Executing platform type.
129   @param   TurnOn           If TRUE turn on else turn off.
130 
131   @retval  EFI_SUCCESS      Operation success.
132 
133 **/
134 EFI_STATUS
135 EFIAPI
PlatformFlashUpdateLed(IN CONST EFI_PLATFORM_TYPE Type,IN CONST BOOLEAN TurnOn)136 PlatformFlashUpdateLed (
137   IN CONST EFI_PLATFORM_TYPE              Type,
138   IN CONST BOOLEAN                        TurnOn
139   )
140 {
141   if (Type == GalileoGen2) {
142     PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_FLASH_UPDATE_LED_RESUMEWELL_GPIO, TurnOn);
143   } else if (Type == Galileo) {
144     PlatformLegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_FLASH_UPDATE_LED_RESUMEWELL_GPIO, TurnOn);
145   } else {
146     //
147     // These platforms have no flash update LED.
148     //
149   }
150 
151   return EFI_SUCCESS;
152 }
153