xref: /optee_os/core/include/drivers/gpio.h (revision 6dcd18c8f698ea84946f08d17db7ae19742c1e83)
1*6dcd18c8SClément Léger /* SPDX-License-Identifier: BSD-2-Clause */
2*6dcd18c8SClément Léger /*
3*6dcd18c8SClément Léger  * Copyright (c) 2016, Linaro Limited
4*6dcd18c8SClément Léger  */
5*6dcd18c8SClément Léger 
6*6dcd18c8SClément Léger #ifndef DRIVERS_GPIO_H
7*6dcd18c8SClément Léger #define DRIVERS_GPIO_H
8*6dcd18c8SClément Léger 
9*6dcd18c8SClément Léger enum gpio_dir {
10*6dcd18c8SClément Léger 	GPIO_DIR_OUT,
11*6dcd18c8SClément Léger 	GPIO_DIR_IN
12*6dcd18c8SClément Léger };
13*6dcd18c8SClément Léger 
14*6dcd18c8SClément Léger enum gpio_level {
15*6dcd18c8SClément Léger 	GPIO_LEVEL_LOW,
16*6dcd18c8SClément Léger 	GPIO_LEVEL_HIGH
17*6dcd18c8SClément Léger };
18*6dcd18c8SClément Léger 
19*6dcd18c8SClément Léger enum gpio_interrupt {
20*6dcd18c8SClément Léger 	GPIO_INTERRUPT_DISABLE,
21*6dcd18c8SClément Léger 	GPIO_INTERRUPT_ENABLE
22*6dcd18c8SClément Léger };
23*6dcd18c8SClément Léger 
24*6dcd18c8SClément Léger struct gpio_chip {
25*6dcd18c8SClément Léger 	const struct gpio_ops *ops;
26*6dcd18c8SClément Léger };
27*6dcd18c8SClément Léger 
28*6dcd18c8SClément Léger struct gpio_ops {
29*6dcd18c8SClément Léger 	enum gpio_dir (*get_direction)(struct gpio_chip *chip,
30*6dcd18c8SClément Léger 				       unsigned int gpio_pin);
31*6dcd18c8SClément Léger 	void (*set_direction)(struct gpio_chip *chip, unsigned int gpio_pin,
32*6dcd18c8SClément Léger 			      enum gpio_dir direction);
33*6dcd18c8SClément Léger 	enum gpio_level (*get_value)(struct gpio_chip *chip,
34*6dcd18c8SClément Léger 				     unsigned int gpio_pin);
35*6dcd18c8SClément Léger 	void (*set_value)(struct gpio_chip *chip, unsigned int gpio_pin,
36*6dcd18c8SClément Léger 			  enum gpio_level value);
37*6dcd18c8SClément Léger 	enum gpio_interrupt (*get_interrupt)(struct gpio_chip *chip,
38*6dcd18c8SClément Léger 					     unsigned int gpio_pin);
39*6dcd18c8SClément Léger 	void (*set_interrupt)(struct gpio_chip *chip, unsigned int gpio_pin,
40*6dcd18c8SClément Léger 			      enum gpio_interrupt enable_disable);
41*6dcd18c8SClément Léger };
42*6dcd18c8SClément Léger 
43*6dcd18c8SClément Léger #endif	/* DRIVERS_GPIO_H */
44