Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 191933
b: refs/heads/master
c: 31da46d
h: refs/heads/master
i:
  191931: cc93f23
v: v3
  • Loading branch information
Ben Dooks committed May 6, 2010
1 parent 42ecc42 commit 06a0eb3
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fb3787470ee6fee5900026170c05261c8c090a06
refs/heads/master: 31da46d9f11ccdb11d7f2f07421f5cccb64fbbd6
47 changes: 19 additions & 28 deletions trunk/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 06a0eb3

Please sign in to comment.