diff options
| author | Ben Dooks <ben-linux@fluff.org> | 2010-05-05 22:21:05 -0400 |
|---|---|---|
| committer | Ben Dooks <ben-linux@fluff.org> | 2010-05-05 22:21:05 -0400 |
| commit | 31da46d9f11ccdb11d7f2f07421f5cccb64fbbd6 (patch) | |
| tree | df0c64b072f21376ccf6c0102fc8d0078f19e993 | |
| parent | fb3787470ee6fee5900026170c05261c8c090a06 (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>
| -rw-r--r-- | arch/arm/plat-s3c24xx/gpio.c | 47 |
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 | |||
| 36 | void s3c2410_gpio_pullup(unsigned int pin, unsigned int to) | 39 | void 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 | |||
| 56 | EXPORT_SYMBOL(s3c2410_gpio_pullup); | 56 | EXPORT_SYMBOL(s3c2410_gpio_pullup); |
| 57 | 57 | ||
| 58 | |||
| 59 | void s3c2410_gpio_setpin(unsigned int pin, unsigned int to) | 58 | void 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 | ||
| 76 | EXPORT_SYMBOL(s3c2410_gpio_setpin); | 67 | EXPORT_SYMBOL(s3c2410_gpio_setpin); |
