Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0+ */ 2 : : /* 3 : : * OF helpers for the GPIO API 4 : : * 5 : : * Copyright (c) 2007-2008 MontaVista Software, Inc. 6 : : * 7 : : * Author: Anton Vorontsov <avorontsov@ru.mvista.com> 8 : : */ 9 : : 10 : : #ifndef __LINUX_OF_GPIO_H 11 : : #define __LINUX_OF_GPIO_H 12 : : 13 : : #include <linux/compiler.h> 14 : : #include <linux/kernel.h> 15 : : #include <linux/errno.h> 16 : : #include <linux/gpio.h> 17 : : #include <linux/of.h> 18 : : 19 : : struct device_node; 20 : : 21 : : /* 22 : : * This is Linux-specific flags. By default controllers' and Linux' mapping 23 : : * match, but GPIO controllers are free to translate their own flags to 24 : : * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. 25 : : */ 26 : : enum of_gpio_flags { 27 : : OF_GPIO_ACTIVE_LOW = 0x1, 28 : : OF_GPIO_SINGLE_ENDED = 0x2, 29 : : OF_GPIO_OPEN_DRAIN = 0x4, 30 : : OF_GPIO_TRANSITORY = 0x8, 31 : : OF_GPIO_PULL_UP = 0x10, 32 : : OF_GPIO_PULL_DOWN = 0x20, 33 : : }; 34 : : 35 : : #ifdef CONFIG_OF_GPIO 36 : : 37 : : /* 38 : : * OF GPIO chip for memory mapped banks 39 : : */ 40 : : struct of_mm_gpio_chip { 41 : : struct gpio_chip gc; 42 : : void (*save_regs)(struct of_mm_gpio_chip *mm_gc); 43 : : void __iomem *regs; 44 : : }; 45 : : 46 : : static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) 47 : : { 48 : : return container_of(gc, struct of_mm_gpio_chip, gc); 49 : : } 50 : : 51 : : extern int of_get_named_gpio_flags(struct device_node *np, 52 : : const char *list_name, int index, enum of_gpio_flags *flags); 53 : : 54 : : extern int of_mm_gpiochip_add_data(struct device_node *np, 55 : : struct of_mm_gpio_chip *mm_gc, 56 : : void *data); 57 : : static inline int of_mm_gpiochip_add(struct device_node *np, 58 : : struct of_mm_gpio_chip *mm_gc) 59 : : { 60 : : return of_mm_gpiochip_add_data(np, mm_gc, NULL); 61 : : } 62 : : extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc); 63 : : 64 : : #else /* CONFIG_OF_GPIO */ 65 : : 66 : : /* Drivers may not strictly depend on the GPIO support, so let them link. */ 67 : : static inline int of_get_named_gpio_flags(struct device_node *np, 68 : : const char *list_name, int index, enum of_gpio_flags *flags) 69 : : { 70 : : if (flags) 71 : : *flags = 0; 72 : : 73 : : return -ENOSYS; 74 : : } 75 : : 76 : : #endif /* CONFIG_OF_GPIO */ 77 : : 78 : : /** 79 : : * of_gpio_named_count() - Count GPIOs for a device 80 : : * @np: device node to count GPIOs for 81 : : * @propname: property name containing gpio specifier(s) 82 : : * 83 : : * The function returns the count of GPIOs specified for a node. 84 : : * Note that the empty GPIO specifiers count too. Returns either 85 : : * Number of gpios defined in property, 86 : : * -EINVAL for an incorrectly formed gpios property, or 87 : : * -ENOENT for a missing gpios property 88 : : * 89 : : * Example: 90 : : * gpios = <0 91 : : * &gpio1 1 2 92 : : * 0 93 : : * &gpio2 3 4>; 94 : : * 95 : : * The above example defines four GPIOs, two of which are not specified. 96 : : * This function will return '4' 97 : : */ 98 : : static inline int of_gpio_named_count(struct device_node *np, const char* propname) 99 : : { 100 : 0 : return of_count_phandle_with_args(np, propname, "#gpio-cells"); 101 : : } 102 : : 103 : : /** 104 : : * of_gpio_count() - Count GPIOs for a device 105 : : * @np: device node to count GPIOs for 106 : : * 107 : : * Same as of_gpio_named_count, but hard coded to use the 'gpios' property 108 : : */ 109 : : static inline int of_gpio_count(struct device_node *np) 110 : : { 111 : : return of_gpio_named_count(np, "gpios"); 112 : : } 113 : : 114 : : static inline int of_get_gpio_flags(struct device_node *np, int index, 115 : : enum of_gpio_flags *flags) 116 : : { 117 : : return of_get_named_gpio_flags(np, "gpios", index, flags); 118 : : } 119 : : 120 : : /** 121 : : * of_get_named_gpio() - Get a GPIO number to use with GPIO API 122 : : * @np: device node to get GPIO from 123 : : * @propname: Name of property containing gpio specifier(s) 124 : : * @index: index of the GPIO 125 : : * 126 : : * Returns GPIO number to use with Linux generic GPIO API, or one of the errno 127 : : * value on the error condition. 128 : : */ 129 : : static inline int of_get_named_gpio(struct device_node *np, 130 : : const char *propname, int index) 131 : : { 132 : 0 : return of_get_named_gpio_flags(np, propname, index, NULL); 133 : : } 134 : : 135 : : /** 136 : : * of_get_gpio() - Get a GPIO number to use with GPIO API 137 : : * @np: device node to get GPIO from 138 : : * @index: index of the GPIO 139 : : * 140 : : * Returns GPIO number to use with Linux generic GPIO API, or one of the errno 141 : : * value on the error condition. 142 : : */ 143 : : static inline int of_get_gpio(struct device_node *np, int index) 144 : : { 145 : : return of_get_gpio_flags(np, index, NULL); 146 : : } 147 : : 148 : : #endif /* __LINUX_OF_GPIO_H */