2007-02-12 11:53:11 +03:00
# ifndef _ASM_GENERIC_GPIO_H
# define _ASM_GENERIC_GPIO_H
2009-10-02 02:43:56 +04:00
# include <linux/kernel.h>
2008-05-24 00:04:58 +04:00
# include <linux/types.h>
2008-07-29 02:46:38 +04:00
# include <linux/errno.h>
2008-05-24 00:04:58 +04:00
2008-07-25 12:46:11 +04:00
# ifdef CONFIG_GPIOLIB
2008-02-05 09:28:20 +03:00
2008-05-24 00:04:58 +04:00
# include <linux/compiler.h>
2008-02-05 09:28:20 +03:00
/* Platforms may implement their GPIO interface with library code,
* at a small performance cost for non - inlined operations and some
* extra memory ( for code and for per - GPIO table entries ) .
*
* While the GPIO programming interface defines valid GPIO numbers
* to be in the range 0. . MAX_INT , this library restricts them to the
2008-07-27 02:22:26 +04:00
* smaller range 0. . ARCH_NR_GPIOS - 1.
2010-09-10 03:38:03 +04:00
*
* ARCH_NR_GPIOS is somewhat arbitrary ; it usually reflects the sum of
* builtin / SoC GPIOs plus a number of GPIOs on expanders ; the latter is
* actually an estimate of a board - specific value .
2008-02-05 09:28:20 +03:00
*/
# ifndef ARCH_NR_GPIOS
# define ARCH_NR_GPIOS 256
# endif
2010-09-10 03:38:03 +04:00
/*
* " valid " GPIO numbers are nonnegative and may be passed to
* setup routines like gpio_request ( ) . only some valid numbers
* can successfully be requested and used .
*
* Invalid GPIO numbers are useful for indicating no - such - GPIO in
* platform data and other tables .
*/
2011-05-11 03:23:07 +04:00
static inline bool gpio_is_valid ( int number )
2008-04-28 13:14:46 +04:00
{
2011-05-11 03:23:07 +04:00
return number > = 0 & & number < ARCH_NR_GPIOS ;
2008-04-28 13:14:46 +04:00
}
2009-12-09 14:53:39 +03:00
struct device ;
2008-02-05 09:28:20 +03:00
struct seq_file ;
2008-04-28 13:14:44 +04:00
struct module ;
2010-06-08 17:48:16 +04:00
struct device_node ;
2008-02-05 09:28:20 +03:00
/**
* struct gpio_chip - abstract a GPIO controller
* @ label : for diagnostics
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
* @ dev : optional device providing the GPIOs
* @ owner : helps prevent removal of modules exporting active GPIOs
2008-10-16 09:03:16 +04:00
* @ request : optional hook for chip - specific activation , such as
* enabling module power and clock ; may sleep
* @ free : optional hook for chip - specific deactivation , such as
* disabling module power and clock ; may sleep
2008-02-05 09:28:20 +03:00
* @ direction_input : configures signal " offset " as input , or returns error
* @ get : returns value for signal " offset " ; for output signals this
* returns either the value actually sensed , or zero
* @ direction_output : configures signal " offset " as output , or returns error
* @ set : assigns output value for signal " offset "
2008-10-16 09:03:14 +04:00
* @ to_irq : optional hook supporting non - static gpio_to_irq ( ) mappings ;
* implementation may not sleep
2008-02-05 09:28:20 +03:00
* @ dbg_show : optional routine to show contents in debugfs ; default code
* will be used when this is omitted , but custom code can show extra
* state ( such as pullup / pulldown configuration ) .
* @ base : identifies the first GPIO number handled by this chip ; or , if
* negative during registration , requests dynamic ID allocation .
* @ ngpio : the number of GPIOs handled by this controller ; the last GPIO
* handled is ( base + ngpio - 1 ) .
* @ can_sleep : flag must be set iff get ( ) / set ( ) methods sleep , as they
* must while accessing GPIO expander chips over I2C or SPI
2009-04-03 03:57:05 +04:00
* @ names : if set , must be an array of strings to use as alternative
* names for the GPIOs in this chip . Any entry in the array
* may be NULL if there is no alias for the GPIO , however the
2010-05-27 01:42:18 +04:00
* array must be @ ngpio entries long . A name can include a single printk
* format specifier for an unsigned int . It is substituted by the actual
* number of the gpio .
2008-02-05 09:28:20 +03:00
*
* A gpio_chip can help platforms abstract various sources of GPIOs so
* they can all be accessed through a common programing interface .
* Example sources would be SOC controllers , FPGAs , multifunction
* chips , dedicated GPIO expanders , and so on .
*
* Each chip controls a number of signals , identified in method calls
* by " offset " values in the range 0. . ( @ ngpio - 1 ) . When those signals
* are referenced through calls like gpio_get_value ( gpio ) , the offset
* is calculated by subtracting @ base from the gpio number .
*/
struct gpio_chip {
2008-10-16 09:03:10 +04:00
const char * label ;
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
struct device * dev ;
2008-04-28 13:14:44 +04:00
struct module * owner ;
2008-02-05 09:28:20 +03:00
2008-10-16 09:03:16 +04:00
int ( * request ) ( struct gpio_chip * chip ,
unsigned offset ) ;
void ( * free ) ( struct gpio_chip * chip ,
unsigned offset ) ;
2008-02-05 09:28:20 +03:00
int ( * direction_input ) ( struct gpio_chip * chip ,
unsigned offset ) ;
int ( * get ) ( struct gpio_chip * chip ,
unsigned offset ) ;
int ( * direction_output ) ( struct gpio_chip * chip ,
unsigned offset , int value ) ;
2010-05-27 01:42:23 +04:00
int ( * set_debounce ) ( struct gpio_chip * chip ,
unsigned offset , unsigned debounce ) ;
2008-02-05 09:28:20 +03:00
void ( * set ) ( struct gpio_chip * chip ,
unsigned offset , int value ) ;
2008-10-16 09:03:14 +04:00
int ( * to_irq ) ( struct gpio_chip * chip ,
unsigned offset ) ;
2008-02-05 09:28:20 +03:00
void ( * dbg_show ) ( struct seq_file * s ,
struct gpio_chip * chip ) ;
int base ;
u16 ngpio ;
2010-05-27 01:42:17 +04:00
const char * const * names ;
2008-02-05 09:28:20 +03:00
unsigned can_sleep : 1 ;
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
unsigned exported : 1 ;
2010-06-08 17:48:16 +04:00
# if defined(CONFIG_OF_GPIO)
/*
* If CONFIG_OF is enabled , then all GPIO controllers described in the
* device tree automatically may have an OF translation
*/
struct device_node * of_node ;
int of_gpio_n_cells ;
int ( * of_xlate ) ( struct gpio_chip * gc , struct device_node * np ,
const void * gpio_spec , u32 * flags ) ;
# endif
2008-02-05 09:28:20 +03:00
} ;
extern const char * gpiochip_is_requested ( struct gpio_chip * chip ,
unsigned offset ) ;
2008-05-24 00:04:58 +04:00
extern int __must_check gpiochip_reserve ( int start , int ngpio ) ;
2008-02-05 09:28:20 +03:00
/* add/remove chips */
extern int gpiochip_add ( struct gpio_chip * chip ) ;
extern int __must_check gpiochip_remove ( struct gpio_chip * chip ) ;
2010-06-08 17:48:16 +04:00
extern struct gpio_chip * gpiochip_find ( void * data ,
int ( * match ) ( struct gpio_chip * chip ,
void * data ) ) ;
2008-02-05 09:28:20 +03:00
/* Always use the library code for GPIO management calls,
* or when sleeping may be involved .
*/
2011-01-14 04:26:46 +03:00
extern int gpio_request ( unsigned gpio , const char * label ) ;
2008-02-05 09:28:20 +03:00
extern void gpio_free ( unsigned gpio ) ;
2011-01-14 04:26:46 +03:00
extern int gpio_direction_input ( unsigned gpio ) ;
extern int gpio_direction_output ( unsigned gpio , int value ) ;
2008-02-05 09:28:20 +03:00
2010-05-27 01:42:23 +04:00
extern int gpio_set_debounce ( unsigned gpio , unsigned debounce ) ;
2008-02-05 09:28:20 +03:00
extern int gpio_get_value_cansleep ( unsigned gpio ) ;
extern void gpio_set_value_cansleep ( unsigned gpio , int value ) ;
/* A platform's <asm/gpio.h> code may want to inline the I/O calls when
* the GPIO is constant and refers to some always - present controller ,
* giving direct access to chip registers and tight bitbanging loops .
*/
extern int __gpio_get_value ( unsigned gpio ) ;
extern void __gpio_set_value ( unsigned gpio , int value ) ;
extern int __gpio_cansleep ( unsigned gpio ) ;
2008-10-16 09:03:14 +04:00
extern int __gpio_to_irq ( unsigned gpio ) ;
2008-02-05 09:28:20 +03:00
2010-03-06 00:44:35 +03:00
# define GPIOF_DIR_OUT (0 << 0)
# define GPIOF_DIR_IN (1 << 0)
# define GPIOF_INIT_LOW (0 << 1)
# define GPIOF_INIT_HIGH (1 << 1)
# define GPIOF_IN (GPIOF_DIR_IN)
# define GPIOF_OUT_INIT_LOW (GPIOF_DIR_OUT | GPIOF_INIT_LOW)
# define GPIOF_OUT_INIT_HIGH (GPIOF_DIR_OUT | GPIOF_INIT_HIGH)
/**
* struct gpio - a structure describing a GPIO with configuration
* @ gpio : the GPIO number
* @ flags : GPIO configuration as specified by GPIOF_ *
* @ label : a literal description string of this GPIO
*/
struct gpio {
unsigned gpio ;
unsigned long flags ;
const char * label ;
} ;
2011-01-14 04:26:46 +03:00
extern int gpio_request_one ( unsigned gpio , unsigned long flags , const char * label ) ;
extern int gpio_request_array ( struct gpio * array , size_t num ) ;
2010-03-06 00:44:35 +03:00
extern void gpio_free_array ( struct gpio * array , size_t num ) ;
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
# ifdef CONFIG_GPIO_SYSFS
/*
* A sysfs interface can be exported by individual drivers if they want ,
* but more typically is configured entirely from userspace .
*/
extern int gpio_export ( unsigned gpio , bool direction_may_change ) ;
2009-09-23 03:46:33 +04:00
extern int gpio_export_link ( struct device * dev , const char * name ,
unsigned gpio ) ;
2009-12-16 03:46:20 +03:00
extern int gpio_sysfs_set_active_low ( unsigned gpio , int value ) ;
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
extern void gpio_unexport ( unsigned gpio ) ;
# endif /* CONFIG_GPIO_SYSFS */
2010-10-28 02:33:16 +04:00
# else /* !CONFIG_GPIOLIB */
2008-02-05 09:28:20 +03:00
2011-05-11 03:23:07 +04:00
static inline bool gpio_is_valid ( int number )
2008-04-28 13:14:46 +04:00
{
/* only non-negative numbers are valid */
return number > = 0 ;
}
2007-02-12 11:53:11 +03:00
/* platforms that don't directly support access to GPIOs through I2C, SPI,
* or other blocking infrastructure can use these wrappers .
*/
static inline int gpio_cansleep ( unsigned gpio )
{
return 0 ;
}
static inline int gpio_get_value_cansleep ( unsigned gpio )
{
might_sleep ( ) ;
return gpio_get_value ( gpio ) ;
}
static inline void gpio_set_value_cansleep ( unsigned gpio , int value )
{
might_sleep ( ) ;
gpio_set_value ( gpio , value ) ;
}
2010-10-28 02:33:16 +04:00
# endif /* !CONFIG_GPIOLIB */
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
# ifndef CONFIG_GPIO_SYSFS
2009-12-09 14:53:39 +03:00
struct device ;
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
/* sysfs support is only available with gpiolib, where it's optional */
static inline int gpio_export ( unsigned gpio , bool direction_may_change )
{
return - ENOSYS ;
}
2009-09-23 03:46:33 +04:00
static inline int gpio_export_link ( struct device * dev , const char * name ,
unsigned gpio )
{
return - ENOSYS ;
}
2009-12-16 03:46:20 +03:00
static inline int gpio_sysfs_set_active_low ( unsigned gpio , int value )
{
return - ENOSYS ;
}
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs.
/sys/class/gpio
/export ... asks the kernel to export a GPIO to userspace
/unexport ... to return a GPIO to the kernel
/gpioN ... for each exported GPIO #N
/value ... always readable, writes fail for input GPIOs
/direction ... r/w as: in, out (default low); write high, low
/gpiochipN ... for each gpiochip; #N is its first GPIO
/base ... (r/o) same as N
/label ... (r/o) descriptive, not necessarily unique
/ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)
GPIOs claimed by kernel code may be exported by its owner using a new
gpio_export() call, which should be most useful for driver debugging.
Such exports may optionally be done without a "direction" attribute.
Userspace may ask to take over a GPIO by writing to a sysfs control file,
helping to cope with incomplete board support or other "one-off"
requirements that don't merit full kernel support:
echo 23 > /sys/class/gpio/export
... will gpio_request(23, "sysfs") and gpio_export(23);
use /sys/class/gpio/gpio-23/direction to (re)configure it,
when that GPIO can be used as both input and output.
echo 23 > /sys/class/gpio/unexport
... will gpio_free(23), when it was exported as above
The extra D-space footprint is a few hundred bytes, except for the sysfs
resources associated with each exported GPIO. The additional I-space
footprint is about two thirds of the current size of gpiolib (!). Since
no /dev node creation is involved, no "udev" support is needed.
Related changes:
* This adds a device pointer to "struct gpio_chip". When GPIO
providers initialize that, sysfs gpio class devices become children of
that device instead of being "virtual" devices.
* The (few) gpio_chip providers which have such a device node have
been updated.
* Some gpio_chip drivers also needed to update their module "owner"
field ... for which missing kerneldoc was added.
* Some gpio_chips don't support input GPIOs. Those GPIOs are now
flagged appropriately when the chip is registered.
Based on previous patches, and discussion both on and off LKML.
A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this
merges to mainline.
[akpm@linux-foundation.org: a few maintenance build fixes]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 12:46:07 +04:00
static inline void gpio_unexport ( unsigned gpio )
{
}
# endif /* CONFIG_GPIO_SYSFS */
2008-02-05 09:28:20 +03:00
2007-02-12 11:53:11 +03:00
# endif /* _ASM_GENERIC_GPIO_H */