xref: /openbmc/phosphor-buttons/inc/gpio.hpp (revision a1af329f5746d754f5f3b13f70078f19e773726f)
1 /*
2 // Copyright (c) 2018 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 #pragma once
17 
18 #include <sdbusplus/bus.hpp>
19 #include <string>
20 #include <vector>
21 
22 // this struct has the gpio config for single gpio
23 struct gpioInfo
24 {
25     int fd; // io fd mapped with the gpio
26     uint32_t number;
27     std::string direction;
28 };
29 
30 // this struct represents button interface
31 struct buttonConfig
32 {
33     std::string formFactorName;  // name of the button interface
34     std::vector<gpioInfo> gpios; // holds single or group gpio config
35                                  // corresponding to button interface
36 };
37 
38 /**
39  * @brief iterates over the list of gpios and configures gpios them
40  * config which is set from gpio defs json file.
41  * The fd of the configured gpio is stored in buttonConfig.gpios container
42  * @return int returns 0 on successful config of all gpios
43  */
44 
45 int configGroupGpio(buttonConfig& buttonCfg);
46 
47 /**
48  * @brief  configures and initializes the single gpio
49  * @return int returns 0 on successful config of all gpios
50  */
51 
52 int configGpio(gpioInfo& gpioConfig);
53 
54 uint32_t getGpioNum(const std::string& gpioPin);
55 void closeGpio(int fd);
56