diff options
author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2008-12-01 01:30:04 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-12-03 05:04:05 -0500 |
commit | b908b53d580c3e9aba81ebe3339c5b7b4fa8031d (patch) | |
tree | c2a07833cd919f185e750391d2a8c5bd3bec827a /include | |
parent | 2fd091f3eebc5accefa5f77ff04436982765d15c (diff) |
of/gpio: Implement of_get_gpio_flags()
This adds a new function, of_get_gpio_flags, which is like
of_get_gpio(), but accepts a new "flags" argument. This new function
will be used by the drivers that need to retrieve additional GPIO
information, such as active-low flag.
Also, this changes the default ("simple") .xlate routine to warn about
bogus (< 2) #gpio-cells usage: the second cell should always be present
for GPIO flags.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/of_gpio.h | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index 67db101d0eb8..e25abf610cb6 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
@@ -14,9 +14,22 @@ | |||
14 | #ifndef __LINUX_OF_GPIO_H | 14 | #ifndef __LINUX_OF_GPIO_H |
15 | #define __LINUX_OF_GPIO_H | 15 | #define __LINUX_OF_GPIO_H |
16 | 16 | ||
17 | #include <linux/compiler.h> | ||
18 | #include <linux/kernel.h> | ||
17 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
18 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
19 | 21 | ||
22 | struct device_node; | ||
23 | |||
24 | /* | ||
25 | * This is Linux-specific flags. By default controllers' and Linux' mapping | ||
26 | * match, but GPIO controllers are free to translate their own flags to | ||
27 | * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. | ||
28 | */ | ||
29 | enum of_gpio_flags { | ||
30 | OF_GPIO_ACTIVE_LOW = 0x1, | ||
31 | }; | ||
32 | |||
20 | #ifdef CONFIG_OF_GPIO | 33 | #ifdef CONFIG_OF_GPIO |
21 | 34 | ||
22 | /* | 35 | /* |
@@ -26,7 +39,7 @@ struct of_gpio_chip { | |||
26 | struct gpio_chip gc; | 39 | struct gpio_chip gc; |
27 | int gpio_cells; | 40 | int gpio_cells; |
28 | int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np, | 41 | int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np, |
29 | const void *gpio_spec); | 42 | const void *gpio_spec, enum of_gpio_flags *flags); |
30 | }; | 43 | }; |
31 | 44 | ||
32 | static inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc) | 45 | static inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc) |
@@ -50,20 +63,37 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) | |||
50 | return container_of(of_gc, struct of_mm_gpio_chip, of_gc); | 63 | return container_of(of_gc, struct of_mm_gpio_chip, of_gc); |
51 | } | 64 | } |
52 | 65 | ||
53 | extern int of_get_gpio(struct device_node *np, int index); | 66 | extern int of_get_gpio_flags(struct device_node *np, int index, |
67 | enum of_gpio_flags *flags); | ||
68 | |||
54 | extern int of_mm_gpiochip_add(struct device_node *np, | 69 | extern int of_mm_gpiochip_add(struct device_node *np, |
55 | struct of_mm_gpio_chip *mm_gc); | 70 | struct of_mm_gpio_chip *mm_gc); |
56 | extern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, | 71 | extern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, |
57 | struct device_node *np, | 72 | struct device_node *np, |
58 | const void *gpio_spec); | 73 | const void *gpio_spec, |
74 | enum of_gpio_flags *flags); | ||
59 | #else | 75 | #else |
60 | 76 | ||
61 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ | 77 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ |
62 | static inline int of_get_gpio(struct device_node *np, int index) | 78 | static inline int of_get_gpio_flags(struct device_node *np, int index, |
79 | enum of_gpio_flags *flags) | ||
63 | { | 80 | { |
64 | return -ENOSYS; | 81 | return -ENOSYS; |
65 | } | 82 | } |
66 | 83 | ||
67 | #endif /* CONFIG_OF_GPIO */ | 84 | #endif /* CONFIG_OF_GPIO */ |
68 | 85 | ||
86 | /** | ||
87 | * of_get_gpio - Get a GPIO number to use with GPIO API | ||
88 | * @np: device node to get GPIO from | ||
89 | * @index: index of the GPIO | ||
90 | * | ||
91 | * Returns GPIO number to use with Linux generic GPIO API, or one of the errno | ||
92 | * value on the error condition. | ||
93 | */ | ||
94 | static inline int of_get_gpio(struct device_node *np, int index) | ||
95 | { | ||
96 | return of_get_gpio_flags(np, index, NULL); | ||
97 | } | ||
98 | |||
69 | #endif /* __LINUX_OF_GPIO_H */ | 99 | #endif /* __LINUX_OF_GPIO_H */ |