1 /*
2  * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef GPIO_H
8 #define GPIO_H
9 
10 #include <export/drivers/gpio_exp.h>
11 
12 #define GPIO_DIR_OUT		ARM_TF_GPIO_DIR_OUT
13 #define GPIO_DIR_IN		ARM_TF_GPIO_DIR_IN
14 
15 #define GPIO_LEVEL_LOW		ARM_TF_GPIO_LEVEL_LOW
16 #define GPIO_LEVEL_HIGH		ARM_TF_GPIO_LEVEL_HIGH
17 
18 #define GPIO_PULL_NONE		ARM_TF_GPIO_PULL_NONE
19 #define GPIO_PULL_UP		ARM_TF_GPIO_PULL_UP
20 #define GPIO_PULL_DOWN		ARM_TF_GPIO_PULL_DOWN
21 
22 typedef struct gpio_ops {
23 	int (*get_direction)(int gpio);
24 	void (*set_direction)(int gpio, int direction);
25 	int (*get_value)(int gpio);
26 	void (*set_value)(int gpio, int value);
27 	void (*set_pull)(int gpio, int pull);
28 	int (*get_pull)(int gpio);
29 } gpio_ops_t;
30 
31 int gpio_get_direction(int gpio);
32 void gpio_set_direction(int gpio, int direction);
33 int gpio_get_value(int gpio);
34 void gpio_set_value(int gpio, int value);
35 void gpio_set_pull(int gpio, int pull);
36 int gpio_get_pull(int gpio);
37 void gpio_init(const gpio_ops_t *ops);
38 
39 #endif /* GPIO_H */
40