]> git.proxmox.com Git - mirror_edk2.git/blob - Omap35xxPkg/Gpio/Gpio.c
Omap35xxPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Omap35xxPkg / Gpio / Gpio.c
1 /** @file
2
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #include <Uefi.h>
10
11 #include <Library/IoLib.h>
12 #include <Library/OmapLib.h>
13 #include <Library/UefiBootServicesTableLib.h>
14
15 #include <Protocol/EmbeddedGpio.h>
16
17 #include <Omap3530/Omap3530.h>
18
19 EFI_STATUS
20 Get (
21 IN EMBEDDED_GPIO *This,
22 IN EMBEDDED_GPIO_PIN Gpio,
23 OUT UINTN *Value
24 )
25 {
26 UINTN Port;
27 UINTN Pin;
28 UINT32 DataInRegister;
29
30 if (Value == NULL)
31 {
32 return EFI_UNSUPPORTED;
33 }
34
35 Port = GPIO_PORT(Gpio);
36 Pin = GPIO_PIN(Gpio);
37
38 DataInRegister = GpioBase(Port) + GPIO_DATAIN;
39
40 if (MmioRead32 (DataInRegister) & GPIO_DATAIN_MASK(Pin)) {
41 *Value = 1;
42 } else {
43 *Value = 0;
44 }
45
46 return EFI_SUCCESS;
47 }
48
49 EFI_STATUS
50 Set (
51 IN EMBEDDED_GPIO *This,
52 IN EMBEDDED_GPIO_PIN Gpio,
53 IN EMBEDDED_GPIO_MODE Mode
54 )
55 {
56 UINTN Port;
57 UINTN Pin;
58 UINT32 OutputEnableRegister;
59 UINT32 SetDataOutRegister;
60 UINT32 ClearDataOutRegister;
61
62 Port = GPIO_PORT(Gpio);
63 Pin = GPIO_PIN(Gpio);
64
65 OutputEnableRegister = GpioBase(Port) + GPIO_OE;
66 SetDataOutRegister = GpioBase(Port) + GPIO_SETDATAOUT;
67 ClearDataOutRegister = GpioBase(Port) + GPIO_CLEARDATAOUT;
68
69 switch (Mode)
70 {
71 case GPIO_MODE_INPUT:
72 MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_INPUT(Pin));
73 break;
74
75 case GPIO_MODE_OUTPUT_0:
76 MmioWrite32 (ClearDataOutRegister, GPIO_CLEARDATAOUT_BIT(Pin));
77 MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_OUTPUT(Pin));
78 break;
79
80 case GPIO_MODE_OUTPUT_1:
81 MmioWrite32 (SetDataOutRegister, GPIO_SETDATAOUT_BIT(Pin));
82 MmioAndThenOr32(OutputEnableRegister, ~GPIO_OE_MASK(Pin), GPIO_OE_OUTPUT(Pin));
83 break;
84
85 default:
86 return EFI_UNSUPPORTED;
87 }
88
89 return EFI_SUCCESS;
90 }
91
92 EFI_STATUS
93 GetMode (
94 IN EMBEDDED_GPIO *This,
95 IN EMBEDDED_GPIO_PIN Gpio,
96 OUT EMBEDDED_GPIO_MODE *Mode
97 )
98 {
99 return EFI_UNSUPPORTED;
100 }
101
102 EFI_STATUS
103 SetPull (
104 IN EMBEDDED_GPIO *This,
105 IN EMBEDDED_GPIO_PIN Gpio,
106 IN EMBEDDED_GPIO_PULL Direction
107 )
108 {
109 return EFI_UNSUPPORTED;
110 }
111
112 EMBEDDED_GPIO Gpio = {
113 Get,
114 Set,
115 GetMode,
116 SetPull
117 };
118
119 EFI_STATUS
120 GpioInitialize (
121 IN EFI_HANDLE ImageHandle,
122 IN EFI_SYSTEM_TABLE *SystemTable
123 )
124 {
125 EFI_STATUS Status;
126
127 Status = gBS->InstallMultipleProtocolInterfaces(&ImageHandle, &gEmbeddedGpioProtocolGuid, &Gpio, NULL);
128 return Status;
129 }