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