xref: /openbmc/linux/include/linux/gpio.h (revision 4e4438b8)
17560fa60SDavid Brownell #ifndef __LINUX_GPIO_H
27560fa60SDavid Brownell #define __LINUX_GPIO_H
37560fa60SDavid Brownell 
47560fa60SDavid Brownell /* see Documentation/gpio.txt */
57560fa60SDavid Brownell 
67560fa60SDavid Brownell #ifdef CONFIG_GENERIC_GPIO
77560fa60SDavid Brownell #include <asm/gpio.h>
87560fa60SDavid Brownell 
97560fa60SDavid Brownell #else
107560fa60SDavid Brownell 
113d599d1cSUwe Kleine-König #include <linux/kernel.h>
126ea0205bSDavid Brownell #include <linux/types.h>
136ea0205bSDavid Brownell #include <linux/errno.h>
146ea0205bSDavid Brownell 
15a4177ee7SJani Nikula struct device;
164e4438b8SAnton Vorontsov struct gpio_chip;
17a4177ee7SJani Nikula 
187560fa60SDavid Brownell /*
197560fa60SDavid Brownell  * Some platforms don't support the GPIO programming interface.
207560fa60SDavid Brownell  *
217560fa60SDavid Brownell  * In case some driver uses it anyway (it should normally have
227560fa60SDavid Brownell  * depended on GENERIC_GPIO), these routines help the compiler
237560fa60SDavid Brownell  * optimize out much GPIO-related code ... or trigger a runtime
247560fa60SDavid Brownell  * warning when something is wrongly called.
257560fa60SDavid Brownell  */
267560fa60SDavid Brownell 
277560fa60SDavid Brownell static inline int gpio_is_valid(int number)
287560fa60SDavid Brownell {
297560fa60SDavid Brownell 	return 0;
307560fa60SDavid Brownell }
317560fa60SDavid Brownell 
327560fa60SDavid Brownell static inline int gpio_request(unsigned gpio, const char *label)
337560fa60SDavid Brownell {
347560fa60SDavid Brownell 	return -ENOSYS;
357560fa60SDavid Brownell }
367560fa60SDavid Brownell 
377560fa60SDavid Brownell static inline void gpio_free(unsigned gpio)
387560fa60SDavid Brownell {
393d599d1cSUwe Kleine-König 	might_sleep();
403d599d1cSUwe Kleine-König 
417560fa60SDavid Brownell 	/* GPIO can never have been requested */
427560fa60SDavid Brownell 	WARN_ON(1);
437560fa60SDavid Brownell }
447560fa60SDavid Brownell 
457560fa60SDavid Brownell static inline int gpio_direction_input(unsigned gpio)
467560fa60SDavid Brownell {
477560fa60SDavid Brownell 	return -ENOSYS;
487560fa60SDavid Brownell }
497560fa60SDavid Brownell 
507560fa60SDavid Brownell static inline int gpio_direction_output(unsigned gpio, int value)
517560fa60SDavid Brownell {
527560fa60SDavid Brownell 	return -ENOSYS;
537560fa60SDavid Brownell }
547560fa60SDavid Brownell 
55c4b5be98SFelipe Balbi static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
56c4b5be98SFelipe Balbi {
57c4b5be98SFelipe Balbi 	return -ENOSYS;
58c4b5be98SFelipe Balbi }
59c4b5be98SFelipe Balbi 
607560fa60SDavid Brownell static inline int gpio_get_value(unsigned gpio)
617560fa60SDavid Brownell {
627560fa60SDavid Brownell 	/* GPIO can never have been requested or set as {in,out}put */
637560fa60SDavid Brownell 	WARN_ON(1);
647560fa60SDavid Brownell 	return 0;
657560fa60SDavid Brownell }
667560fa60SDavid Brownell 
677560fa60SDavid Brownell static inline void gpio_set_value(unsigned gpio, int value)
687560fa60SDavid Brownell {
697560fa60SDavid Brownell 	/* GPIO can never have been requested or set as output */
707560fa60SDavid Brownell 	WARN_ON(1);
717560fa60SDavid Brownell }
727560fa60SDavid Brownell 
737560fa60SDavid Brownell static inline int gpio_cansleep(unsigned gpio)
747560fa60SDavid Brownell {
757560fa60SDavid Brownell 	/* GPIO can never have been requested or set as {in,out}put */
767560fa60SDavid Brownell 	WARN_ON(1);
777560fa60SDavid Brownell 	return 0;
787560fa60SDavid Brownell }
797560fa60SDavid Brownell 
807560fa60SDavid Brownell static inline int gpio_get_value_cansleep(unsigned gpio)
817560fa60SDavid Brownell {
827560fa60SDavid Brownell 	/* GPIO can never have been requested or set as {in,out}put */
837560fa60SDavid Brownell 	WARN_ON(1);
847560fa60SDavid Brownell 	return 0;
857560fa60SDavid Brownell }
867560fa60SDavid Brownell 
877560fa60SDavid Brownell static inline void gpio_set_value_cansleep(unsigned gpio, int value)
887560fa60SDavid Brownell {
897560fa60SDavid Brownell 	/* GPIO can never have been requested or set as output */
907560fa60SDavid Brownell 	WARN_ON(1);
917560fa60SDavid Brownell }
927560fa60SDavid Brownell 
93d8f388d8SDavid Brownell static inline int gpio_export(unsigned gpio, bool direction_may_change)
94d8f388d8SDavid Brownell {
95d8f388d8SDavid Brownell 	/* GPIO can never have been requested or set as {in,out}put */
96d8f388d8SDavid Brownell 	WARN_ON(1);
97d8f388d8SDavid Brownell 	return -EINVAL;
98d8f388d8SDavid Brownell }
99d8f388d8SDavid Brownell 
100a4177ee7SJani Nikula static inline int gpio_export_link(struct device *dev, const char *name,
101a4177ee7SJani Nikula 				unsigned gpio)
102a4177ee7SJani Nikula {
103a4177ee7SJani Nikula 	/* GPIO can never have been exported */
104a4177ee7SJani Nikula 	WARN_ON(1);
105a4177ee7SJani Nikula 	return -EINVAL;
106a4177ee7SJani Nikula }
107a4177ee7SJani Nikula 
10807697461SJani Nikula static inline int gpio_sysfs_set_active_low(unsigned gpio, int value)
10907697461SJani Nikula {
11007697461SJani Nikula 	/* GPIO can never have been requested */
11107697461SJani Nikula 	WARN_ON(1);
11207697461SJani Nikula 	return -EINVAL;
11307697461SJani Nikula }
114a4177ee7SJani Nikula 
115d8f388d8SDavid Brownell static inline void gpio_unexport(unsigned gpio)
116d8f388d8SDavid Brownell {
117d8f388d8SDavid Brownell 	/* GPIO can never have been exported */
118d8f388d8SDavid Brownell 	WARN_ON(1);
119d8f388d8SDavid Brownell }
120d8f388d8SDavid Brownell 
1217560fa60SDavid Brownell static inline int gpio_to_irq(unsigned gpio)
1227560fa60SDavid Brownell {
1237560fa60SDavid Brownell 	/* GPIO can never have been requested or set as input */
1247560fa60SDavid Brownell 	WARN_ON(1);
1257560fa60SDavid Brownell 	return -EINVAL;
1267560fa60SDavid Brownell }
1277560fa60SDavid Brownell 
1287560fa60SDavid Brownell static inline int irq_to_gpio(unsigned irq)
1297560fa60SDavid Brownell {
1307560fa60SDavid Brownell 	/* irq can never have been returned from gpio_to_irq() */
1317560fa60SDavid Brownell 	WARN_ON(1);
1327560fa60SDavid Brownell 	return -EINVAL;
1337560fa60SDavid Brownell }
1347560fa60SDavid Brownell 
1357560fa60SDavid Brownell #endif
1367560fa60SDavid Brownell 
1377560fa60SDavid Brownell #endif /* __LINUX_GPIO_H */
138