at v5.1 3.7 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __LINUX_GPIO_MACHINE_H 3#define __LINUX_GPIO_MACHINE_H 4 5#include <linux/types.h> 6#include <linux/list.h> 7 8enum gpio_lookup_flags { 9 GPIO_ACTIVE_HIGH = (0 << 0), 10 GPIO_ACTIVE_LOW = (1 << 0), 11 GPIO_OPEN_DRAIN = (1 << 1), 12 GPIO_OPEN_SOURCE = (1 << 2), 13 GPIO_PERSISTENT = (0 << 3), 14 GPIO_TRANSITORY = (1 << 3), 15 GPIO_PULL_UP = (1 << 4), 16 GPIO_PULL_DOWN = (1 << 5), 17}; 18 19/** 20 * struct gpiod_lookup - lookup table 21 * @chip_label: name of the chip the GPIO belongs to 22 * @chip_hwnum: hardware number (i.e. relative to the chip) of the GPIO 23 * @con_id: name of the GPIO from the device's point of view 24 * @idx: index of the GPIO in case several GPIOs share the same name 25 * @flags: mask of GPIO_* values 26 * 27 * gpiod_lookup is a lookup table for associating GPIOs to specific devices and 28 * functions using platform data. 29 */ 30struct gpiod_lookup { 31 const char *chip_label; 32 u16 chip_hwnum; 33 const char *con_id; 34 unsigned int idx; 35 enum gpio_lookup_flags flags; 36}; 37 38struct gpiod_lookup_table { 39 struct list_head list; 40 const char *dev_id; 41 struct gpiod_lookup table[]; 42}; 43 44/** 45 * struct gpiod_hog - GPIO line hog table 46 * @chip_label: name of the chip the GPIO belongs to 47 * @chip_hwnum: hardware number (i.e. relative to the chip) of the GPIO 48 * @line_name: consumer name for the hogged line 49 * @lflags: mask of GPIO lookup flags 50 * @dflags: GPIO flags used to specify the direction and value 51 */ 52struct gpiod_hog { 53 struct list_head list; 54 const char *chip_label; 55 u16 chip_hwnum; 56 const char *line_name; 57 enum gpio_lookup_flags lflags; 58 int dflags; 59}; 60 61/* 62 * Simple definition of a single GPIO under a con_id 63 */ 64#define GPIO_LOOKUP(_chip_label, _chip_hwnum, _con_id, _flags) \ 65 GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _con_id, 0, _flags) 66 67/* 68 * Use this macro if you need to have several GPIOs under the same con_id. 69 * Each GPIO needs to use a different index and can be accessed using 70 * gpiod_get_index() 71 */ 72#define GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _con_id, _idx, _flags) \ 73{ \ 74 .chip_label = _chip_label, \ 75 .chip_hwnum = _chip_hwnum, \ 76 .con_id = _con_id, \ 77 .idx = _idx, \ 78 .flags = _flags, \ 79} 80 81/* 82 * Simple definition of a single GPIO hog in an array. 83 */ 84#define GPIO_HOG(_chip_label, _chip_hwnum, _line_name, _lflags, _dflags) \ 85{ \ 86 .chip_label = _chip_label, \ 87 .chip_hwnum = _chip_hwnum, \ 88 .line_name = _line_name, \ 89 .lflags = _lflags, \ 90 .dflags = _dflags, \ 91} 92 93#ifdef CONFIG_GPIOLIB 94void gpiod_add_lookup_table(struct gpiod_lookup_table *table); 95void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n); 96void gpiod_remove_lookup_table(struct gpiod_lookup_table *table); 97void gpiod_add_hogs(struct gpiod_hog *hogs); 98#else 99static inline 100void gpiod_add_lookup_table(struct gpiod_lookup_table *table) {} 101static inline 102void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n) {} 103static inline 104void gpiod_remove_lookup_table(struct gpiod_lookup_table *table) {} 105static inline void gpiod_add_hogs(struct gpiod_hog *hogs) {} 106#endif 107 108#endif /* __LINUX_GPIO_MACHINE_H */