aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-s3c24xx/gpio.c
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2010-05-05 22:21:05 -0400
committerBen Dooks <ben-linux@fluff.org>2010-05-05 22:21:05 -0400
commit31da46d9f11ccdb11d7f2f07421f5cccb64fbbd6 (patch)
treedf0c64b072f21376ccf6c0102fc8d0078f19e993 /arch/arm/plat-s3c24xx/gpio.c
parentfb3787470ee6fee5900026170c05261c8c090a06 (diff)
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>
Diffstat (limited to 'arch/arm/plat-s3c24xx/gpio.c')
-rw-r--r--arch/arm/plat-s3c24xx/gpio.c47
1 files changed, 19 insertions, 28 deletions
diff --git a/arch/arm/plat-s3c24xx/gpio.c b/arch/arm/plat-s3c24xx/gpio.c
index c7c0cd73b946..45126d3aafc6 100644
--- a/arch/arm/plat-s3c24xx/gpio.c
+++ b/arch/arm/plat-s3c24xx/gpio.c
@@ -1,6 +1,6 @@
1/* linux/arch/arm/plat-s3c24xx/gpio.c 1/* linux/arch/arm/plat-s3c24xx/gpio.c
2 * 2 *
3 * Copyright (c) 2004-2005 Simtec Electronics 3 * Copyright (c) 2004-2010 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk> 4 * Ben Dooks <ben@simtec.co.uk>
5 * 5 *
6 * S3C24XX GPIO support 6 * S3C24XX GPIO support
@@ -25,6 +25,7 @@
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/ioport.h> 27#include <linux/ioport.h>
28#include <linux/gpio.h>
28#include <linux/io.h> 29#include <linux/io.h>
29 30
30#include <mach/hardware.h> 31#include <mach/hardware.h>
@@ -33,44 +34,34 @@
33 34
34#include <mach/regs-gpio.h> 35#include <mach/regs-gpio.h>
35 36
37/* gpiolib wrappers until these are totally eliminated */
38
36void s3c2410_gpio_pullup(unsigned int pin, unsigned int to) 39void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
37{ 40{
38 void __iomem *base = S3C24XX_GPIO_BASE(pin); 41 int ret;
39 unsigned long offs = S3C2410_GPIO_OFFSET(pin);
40 unsigned long flags;
41 unsigned long up;
42 42
43 if (pin < S3C2410_GPIO_BANKB) 43 WARN_ON(to); /* should be none of these left */
44 return;
45 44
46 local_irq_save(flags); 45 if (!to) {
47 46 /* if pull is enabled, try first with up, and if that
48 up = __raw_readl(base + 0x08); 47 * fails, try using down */
49 up &= ~(1L << offs);
50 up |= to << offs;
51 __raw_writel(up, base + 0x08);
52 48
53 local_irq_restore(flags); 49 ret = s3c_gpio_setpull(pin, S3C_GPIO_PULL_UP);
50 if (ret)
51 s3c_gpio_setpull(pin, S3C_GPIO_PULL_DOWN);
52 } else {
53 s3c_gpio_setpull(pin, S3C_GPIO_PULL_NONE);
54 }
54} 55}
55
56EXPORT_SYMBOL(s3c2410_gpio_pullup); 56EXPORT_SYMBOL(s3c2410_gpio_pullup);
57 57
58
59void s3c2410_gpio_setpin(unsigned int pin, unsigned int to) 58void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
60{ 59{
61 void __iomem *base = S3C24XX_GPIO_BASE(pin); 60 /* do this via gpiolib until all users removed */
62 unsigned long offs = S3C2410_GPIO_OFFSET(pin);
63 unsigned long flags;
64 unsigned long dat;
65 61
66 local_irq_save(flags); 62 gpio_request(pin, "temporary");
67 63 gpio_set_value(pin, to);
68 dat = __raw_readl(base + 0x04); 64 gpio_free(pin);
69 dat &= ~(1 << offs);
70 dat |= to << offs;
71 __raw_writel(dat, base + 0x04);
72
73 local_irq_restore(flags);
74} 65}
75 66
76EXPORT_SYMBOL(s3c2410_gpio_setpin); 67EXPORT_SYMBOL(s3c2410_gpio_setpin);