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