Skip to content

Commit

Permalink
ARM: S3C24XX: Wrapper s3c2410_gpio_setpin and s3c2410_gpio_pullup()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ben Dooks committed May 6, 2010
1 parent fb37874 commit 31da46d
Showing 1 changed file with 19 additions and 28 deletions.
47 changes: 19 additions & 28 deletions arch/arm/plat-s3c24xx/gpio.c
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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>
Expand All @@ -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);

up = __raw_readl(base + 0x08);
up &= ~(1L << offs);
up |= to << offs;
__raw_writel(up, base + 0x08);
if (!to) {
/* if pull is enabled, try first with up, and if that
* fails, try using down */

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);
Expand Down

0 comments on commit 31da46d

Please sign in to comment.