mirror of https://gitee.com/openkylin/linux.git
ARM: S3C24XX: Wrapper s3c2410_gpio_setpin and s3c2410_gpio_pullup()
Change s3c2410_gpio_setpin() and s3c2410_gpio_pullup() to use the new s3c_ gpio configuration calls until all their users are converted. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
parent
fb3787470e
commit
31da46d9f1
|
@ -1,6 +1,6 @@
|
|||
/* linux/arch/arm/plat-s3c24xx/gpio.c
|
||||
*
|
||||
* Copyright (c) 2004-2005 Simtec Electronics
|
||||
* Copyright (c) 2004-2010 Simtec Electronics
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
*
|
||||
* S3C24XX GPIO support
|
||||
|
@ -25,6 +25,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
@ -33,44 +34,34 @@
|
|||
|
||||
#include <mach/regs-gpio.h>
|
||||
|
||||
/* gpiolib wrappers until these are totally eliminated */
|
||||
|
||||
void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
|
||||
{
|
||||
void __iomem *base = S3C24XX_GPIO_BASE(pin);
|
||||
unsigned long offs = S3C2410_GPIO_OFFSET(pin);
|
||||
unsigned long flags;
|
||||
unsigned long up;
|
||||
int ret;
|
||||
|
||||
if (pin < S3C2410_GPIO_BANKB)
|
||||
return;
|
||||
WARN_ON(to); /* should be none of these left */
|
||||
|
||||
local_irq_save(flags);
|
||||
if (!to) {
|
||||
/* if pull is enabled, try first with up, and if that
|
||||
* fails, try using down */
|
||||
|
||||
up = __raw_readl(base + 0x08);
|
||||
up &= ~(1L << offs);
|
||||
up |= to << offs;
|
||||
__raw_writel(up, base + 0x08);
|
||||
|
||||
local_irq_restore(flags);
|
||||
ret = s3c_gpio_setpull(pin, S3C_GPIO_PULL_UP);
|
||||
if (ret)
|
||||
s3c_gpio_setpull(pin, S3C_GPIO_PULL_DOWN);
|
||||
} else {
|
||||
s3c_gpio_setpull(pin, S3C_GPIO_PULL_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(s3c2410_gpio_pullup);
|
||||
|
||||
|
||||
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
|
||||
{
|
||||
void __iomem *base = S3C24XX_GPIO_BASE(pin);
|
||||
unsigned long offs = S3C2410_GPIO_OFFSET(pin);
|
||||
unsigned long flags;
|
||||
unsigned long dat;
|
||||
/* do this via gpiolib until all users removed */
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
dat = __raw_readl(base + 0x04);
|
||||
dat &= ~(1 << offs);
|
||||
dat |= to << offs;
|
||||
__raw_writel(dat, base + 0x04);
|
||||
|
||||
local_irq_restore(flags);
|
||||
gpio_request(pin, "temporary");
|
||||
gpio_set_value(pin, to);
|
||||
gpio_free(pin);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(s3c2410_gpio_setpin);
|
||||
|
|
Loading…
Reference in New Issue