EDK2 doxygen online documents - Firmware Encoding Index 1
EDK2 doxygen online documents - Firmware Encoding Index

Omap35xxPkg/Gpio/Gpio.c

Go to the documentation of this file.
00001 
00015 #include <Uefi.h>
00016 
00017 #include <Library/IoLib.h>
00018 #include <Library/OmapLib.h>
00019 #include <Library/UefiBootServicesTableLib.h>
00020 
00021 #include <Protocol/EmbeddedGpio.h>
00022 
00023 #include <Omap3530/Omap3530.h>
00024 
00025 EFI_STATUS
00026 Get (
00027   IN  EMBEDDED_GPIO     *This,
00028   IN  EMBEDDED_GPIO_PIN Gpio,
00029   OUT UINTN               *Value
00030   )
00031 {
00032   UINTN  Port;
00033   UINTN  Pin;
00034   UINT32 DataInRegister;
00035 
00036   if (Value == NULL)
00037   {
00038     return EFI_UNSUPPORTED;
00039   }
00040 
00041   Port    = GPIO_PORT(Gpio);
00042   Pin     = GPIO_PIN(Gpio);
00043 
00044   DataInRegister = GpioBase(Port) + GPIO_DATAIN;
00045 
00046   if (MmioRead32 (DataInRegister) & GPIO_DATAIN_MASK(Pin)) {
00047     *Value = 1;
00048   } else {
00049     *Value = 0;
00050   }
00051 
00052   return EFI_SUCCESS;
00053 }
00054 
00055 EFI_STATUS
00056 Set (
00057   IN  EMBEDDED_GPIO       *This,
00058   IN  EMBEDDED_GPIO_PIN   Gpio,
00059   IN  EMBEDDED_GPIO_MODE  Mode
00060   )
00061 {
00062   UINTN  Port;
00063   UINTN  Pin;
00064   UINT32 OutputEnableRegister;
00065   UINT32 SetDataOutRegister;
00066   UINT32 ClearDataOutRegister;
00067 
00068   Port    = GPIO_PORT(Gpio);
00069   Pin     = GPIO_PIN(Gpio);
00070 
00071   OutputEnableRegister = GpioBase(Port) + GPIO_OE;
00072   SetDataOutRegister   = GpioBase(Port) + GPIO_SETDATAOUT;
00073   ClearDataOutRegister = GpioBase(Port) + GPIO_CLEARDATAOUT;
00074 
00075   switch (Mode)
00076   {
00077     case GPIO_MODE_INPUT:
00078       MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_INPUT(Pin));
00079       break;
00080 
00081     case GPIO_MODE_OUTPUT_0:
00082       MmioWrite32 (ClearDataOutRegister, GPIO_CLEARDATAOUT_BIT(Pin));
00083       MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_OUTPUT(Pin));
00084       break;
00085 
00086     case GPIO_MODE_OUTPUT_1:
00087       MmioWrite32 (SetDataOutRegister, GPIO_SETDATAOUT_BIT(Pin));
00088       MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_OUTPUT(Pin));
00089       break;
00090 
00091     default:
00092       return EFI_UNSUPPORTED;
00093   }
00094 
00095   return EFI_SUCCESS;
00096 }
00097 
00098 EFI_STATUS
00099 GetMode (
00100   IN  EMBEDDED_GPIO       *This,
00101   IN  EMBEDDED_GPIO_PIN   Gpio,
00102   OUT EMBEDDED_GPIO_MODE  *Mode
00103   )
00104 {
00105   return EFI_UNSUPPORTED;
00106 }
00107 
00108 EFI_STATUS
00109 SetPull (
00110   IN  EMBEDDED_GPIO       *This,
00111   IN  EMBEDDED_GPIO_PIN   Gpio,
00112   IN  EMBEDDED_GPIO_PULL  Direction
00113   )
00114 {
00115   return EFI_UNSUPPORTED;
00116 }
00117 
00118 EMBEDDED_GPIO Gpio = {
00119   Get,
00120   Set,
00121   GetMode,
00122   SetPull
00123 };
00124 
00125 EFI_STATUS
00126 GpioInitialize (
00127   IN EFI_HANDLE         ImageHandle,
00128   IN EFI_SYSTEM_TABLE   *SystemTable
00129   )
00130 {
00131   EFI_STATUS  Status;
00132   
00133   Status = gBS->InstallMultipleProtocolInterfaces(&ImageHandle, &gEmbeddedGpioProtocolGuid, &Gpio, NULL);
00134   return Status;
00135 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Defines