Lines Matching +full:gpio +full:- +full:latch
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Coldfire generic GPIO support.
11 int __mcfgpio_get_value(unsigned gpio);
12 void __mcfgpio_set_value(unsigned gpio, int value);
13 int __mcfgpio_direction_input(unsigned gpio);
14 int __mcfgpio_direction_output(unsigned gpio, int value);
15 int __mcfgpio_request(unsigned gpio);
16 void __mcfgpio_free(unsigned gpio);
19 #include <linux/gpio.h>
23 static inline int __gpio_get_value(unsigned gpio) in __gpio_get_value() argument
25 if (gpio < MCFGPIO_PIN_MAX) in __gpio_get_value()
26 return __mcfgpio_get_value(gpio); in __gpio_get_value()
28 return -EINVAL; in __gpio_get_value()
31 static inline void __gpio_set_value(unsigned gpio, int value) in __gpio_set_value() argument
33 if (gpio < MCFGPIO_PIN_MAX) in __gpio_set_value()
34 __mcfgpio_set_value(gpio, value); in __gpio_set_value()
37 static inline int __gpio_to_irq(unsigned gpio) in __gpio_to_irq() argument
39 return -EINVAL; in __gpio_to_irq()
42 static inline int gpio_direction_input(unsigned gpio) in gpio_direction_input() argument
44 if (gpio < MCFGPIO_PIN_MAX) in gpio_direction_input()
45 return __mcfgpio_direction_input(gpio); in gpio_direction_input()
47 return -EINVAL; in gpio_direction_input()
50 static inline int gpio_direction_output(unsigned gpio, int value) in gpio_direction_output() argument
52 if (gpio < MCFGPIO_PIN_MAX) in gpio_direction_output()
53 return __mcfgpio_direction_output(gpio, value); in gpio_direction_output()
55 return -EINVAL; in gpio_direction_output()
58 static inline int gpio_request(unsigned gpio, const char *label) in gpio_request() argument
60 if (gpio < MCFGPIO_PIN_MAX) in gpio_request()
61 return __mcfgpio_request(gpio); in gpio_request()
63 return -EINVAL; in gpio_request()
66 static inline void gpio_free(unsigned gpio) in gpio_free() argument
68 if (gpio < MCFGPIO_PIN_MAX) in gpio_free()
69 __mcfgpio_free(gpio); in gpio_free()
76 * The Freescale Coldfire family is quite varied in how they implement GPIO.
78 * only one port, others have multiple ports; some have a single data latch
80 * input; some require a read-modify-write access to change an output, others
94 /* These parts have GPIO organized by 8 bit ports */
103 /* These parts have GPIO organized by 16 bit ports */
112 /* These parts have GPIO organized by 32 bit ports */
121 #define mcfgpio_bit(gpio) (1 << ((gpio) % MCFGPIO_PORTSIZE)) argument
122 #define mcfgpio_port(gpio) ((gpio) / MCFGPIO_PORTSIZE) argument
129 * These parts have an 'Edge' Port module (external interrupt/GPIO) which uses
130 * read-modify-write to change an output and a GPIO module which has separate
136 * read-modify-write as well as those controlled by the EPORT and GPIO modules.
140 /* The m5441x EPORT doesn't have its own GPIO port, uses PORT C */
146 #define MCFGPIO_SETR_PORT(gpio) (MCFGPIO_SETR + \ argument
147 mcfgpio_port(gpio - MCFGPIO_SCR_START))
149 #define MCFGPIO_CLRR_PORT(gpio) (MCFGPIO_CLRR + \ argument
150 mcfgpio_port(gpio - MCFGPIO_SCR_START))
155 #define MCFGPIO_SETR_PORT(gpio) 0 argument
156 #define MCFGPIO_CLRR_PORT(gpio) 0 argument
163 /* return the port pin data register for a gpio */
164 static inline u32 __mcfgpio_ppdr(unsigned gpio) in __mcfgpio_ppdr() argument
170 if (gpio < 16) in __mcfgpio_ppdr()
172 else if (gpio < 32) in __mcfgpio_ppdr()
177 if (gpio < 32) in __mcfgpio_ppdr()
186 if (gpio < 8) in __mcfgpio_ppdr()
189 else if (gpio < 16) in __mcfgpio_ppdr()
191 else if (gpio < 24) in __mcfgpio_ppdr()
193 else if (gpio < 32) in __mcfgpio_ppdr()
195 else if (gpio < 40) in __mcfgpio_ppdr()
200 return MCFGPIO_PPDR + mcfgpio_port(gpio - MCFGPIO_SCR_START); in __mcfgpio_ppdr()
206 /* return the port output data register for a gpio */
207 static inline u32 __mcfgpio_podr(unsigned gpio) in __mcfgpio_podr() argument
213 if (gpio < 16) in __mcfgpio_podr()
215 else if (gpio < 32) in __mcfgpio_podr()
220 if (gpio < 32) in __mcfgpio_podr()
229 if (gpio < 8) in __mcfgpio_podr()
232 else if (gpio < 16) in __mcfgpio_podr()
234 else if (gpio < 24) in __mcfgpio_podr()
236 else if (gpio < 32) in __mcfgpio_podr()
238 else if (gpio < 40) in __mcfgpio_podr()
243 return MCFGPIO_PODR + mcfgpio_port(gpio - MCFGPIO_SCR_START); in __mcfgpio_podr()
249 /* return the port direction data register for a gpio */
250 static inline u32 __mcfgpio_pddr(unsigned gpio) in __mcfgpio_pddr() argument
256 if (gpio < 16) in __mcfgpio_pddr()
258 else if (gpio < 32) in __mcfgpio_pddr()
263 if (gpio < 32) in __mcfgpio_pddr()
272 if (gpio < 8) in __mcfgpio_pddr()
275 else if (gpio < 16) in __mcfgpio_pddr()
277 else if (gpio < 24) in __mcfgpio_pddr()
279 else if (gpio < 32) in __mcfgpio_pddr()
281 else if (gpio < 40) in __mcfgpio_pddr()
286 return MCFGPIO_PDDR + mcfgpio_port(gpio - MCFGPIO_SCR_START); in __mcfgpio_pddr()