diff options
author | Hector Palacios <hector.palacios@digi.com> | 2009-07-23 10:50:00 +0200 |
---|---|---|
committer | Hector Palacios <hector.palacios@digi.com> | 2009-07-27 09:44:14 +0200 |
commit | 1d70fd89675f41bb1ae3e8531156ea6a2a7fe08a (patch) | |
tree | 01c534d8a41b5e4aac9002770ab753f2c943a437 | |
parent | 27ddbabc5a9c2831d608fdeae79a757ab8af5c87 (diff) |
gpiolib: Added support for pull up/down resistor
Added support for pull up/down resistor in gpiolib
and in s3c2443 gpio driver. A new function entry is
now available in gpiolib to manage the pull up/down
resistors from user space.
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
-rw-r--r-- | arch/arm/mach-s3c2410/include/mach/gpio.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-s3c2443/gpio.c | 6 | ||||
-rw-r--r-- | drivers/gpio/gpiolib.c | 17 | ||||
-rw-r--r-- | include/asm-generic/gpio.h | 4 |
4 files changed, 26 insertions, 2 deletions
diff --git a/arch/arm/mach-s3c2410/include/mach/gpio.h b/arch/arm/mach-s3c2410/include/mach/gpio.h index f5886dc3fd00..77d345e1ff2b 100644 --- a/arch/arm/mach-s3c2410/include/mach/gpio.h +++ b/arch/arm/mach-s3c2410/include/mach/gpio.h @@ -15,6 +15,7 @@ #define gpio_set_value __gpio_set_value #define gpio_cansleep __gpio_cansleep #define gpio_to_irq __gpio_to_irq +#define gpio_set_pullupdown __gpio_set_pullupdown #include <asm-generic/gpio.h> #include <mach/regs-gpio.h> diff --git a/arch/arm/mach-s3c2443/gpio.c b/arch/arm/mach-s3c2443/gpio.c index bf19b1d9e333..3dd170b28716 100644 --- a/arch/arm/mach-s3c2443/gpio.c +++ b/arch/arm/mach-s3c2443/gpio.c @@ -282,6 +282,11 @@ static int s3c2443_gpio_wakeup_conf(struct gpio_chip *chip, unsigned gpio, int e return ret; } +static void s3c2443_set_pullupdown(struct gpio_chip *chip, unsigned gpio, int value) +{ + s3c2443_gpio_set_udp( s3c2410_gpio_num(chip, gpio), value); +} + #define S3C2443_GPIO_PORT(name,num,start,obase, \ inmsk,outmsk,wakemsk) \ { \ @@ -293,6 +298,7 @@ static int s3c2443_gpio_wakeup_conf(struct gpio_chip *chip, unsigned gpio, int e .set = s3c2443_gpio_set, \ .to_irq = s3c2443_gpio_to_irq, \ .wakeup_configure = s3c2443_gpio_wakeup_conf, \ + .pullupdown = s3c2443_set_pullupdown, \ .base = start, \ .ngpio = num, \ }, \ diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 4e1b55ca3483..4ec50128aa50 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -50,7 +50,7 @@ struct gpio_desc { #define FLAG_EXPORT 3 /* protected by sysfs_lock */ #define FLAG_SYSFS 4 /* exported via /sys/class/gpio/control */ #define FLAG_IS_WAKEUP 5 - + #ifdef CONFIG_DEBUG_FS const char *label; #endif @@ -1153,7 +1153,6 @@ EXPORT_SYMBOL_GPL(__gpio_get_value); void __gpio_set_value(unsigned gpio, int value) { struct gpio_chip *chip; - chip = gpio_to_chip(gpio); WARN_ON(extra_checks && chip->can_sleep); chip->set(chip, gpio - chip->base, value); @@ -1197,7 +1196,21 @@ int __gpio_to_irq(unsigned gpio) } EXPORT_SYMBOL_GPL(__gpio_to_irq); +/** + * __gpio_set_pullupdown() - set pull up/down resistor + * Context: any + * + * This is used, where available, to set the internal + * GPIO pull up/down resistor. + */ +void __gpio_set_pullupdown(unsigned gpio, int value) +{ + struct gpio_chip *chip; + chip = gpio_to_chip(gpio); + chip->pullupdown(chip, gpio - chip->base, value); +} +EXPORT_SYMBOL_GPL(__gpio_set_pullupdown); /* There's no value in making it easy to inline GPIO calls that may sleep. * Common examples include ones connected to I2C or SPI chips. diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index ce95b44a93ca..ec42422c6036 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -88,6 +88,9 @@ struct gpio_chip { int (*to_irq)(struct gpio_chip *chip, unsigned offset); + void (*pullupdown)(struct gpio_chip *chip, + unsigned offset, int value); + int (*wakeup_configure)(struct gpio_chip *chip, unsigned offset, int value); @@ -132,6 +135,7 @@ extern void __gpio_set_value(unsigned gpio, int value); extern int __gpio_cansleep(unsigned gpio); extern int __gpio_to_irq(unsigned gpio); +extern void __gpio_set_pullupdown(unsigned gpio, int value); #ifdef CONFIG_GPIO_SYSFS |