summaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-s3c/gpio.c
diff options
context:
space:
mode:
authorBen Dooks2008-12-12 01:24:30 +0100
committerBen Dooks2009-05-07 12:04:56 +0200
commitd87964c46005ccb04754f6309df0fd8f67b08c6d (patch)
treed35fc1fb3660dca0cdb236ef14ba27dcd69618f2 /arch/arm/plat-s3c/gpio.c
parent[ARM] S3C64XX: Add IRQ PM code (diff)
downloadkernel-qcow2-linux-d87964c46005ccb04754f6309df0fd8f67b08c6d.tar.gz
kernel-qcow2-linux-d87964c46005ccb04754f6309df0fd8f67b08c6d.tar.xz
kernel-qcow2-linux-d87964c46005ccb04754f6309df0fd8f67b08c6d.zip
[ARM] S3C: GPIO PM core GPIOlib integration
Move the GPIO suspend/resume support inline with the gpiolib support so that it will work with both the S3C24XX and S3C64XX series. The s3c_gpio_chip is extended to have a pm callback and a save block to keep the state of the GPIO over suspend, and the code from the s3c24xx implementation is added to a new common file. The suspend process now uses the list of registered chips to go through saving and restoring each one as appropriate, using the pm callback to select the appropriate routine depending on the type of control register present. This change also means that any additional GPIO added should not require changes to the PM. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch/arm/plat-s3c/gpio.c')
-rw-r--r--arch/arm/plat-s3c/gpio.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm/plat-s3c/gpio.c b/arch/arm/plat-s3c/gpio.c
index d71dd6d9ce5c..260fdc6ad685 100644
--- a/arch/arm/plat-s3c/gpio.c
+++ b/arch/arm/plat-s3c/gpio.c
@@ -16,7 +16,7 @@
#include <linux/io.h>
#include <linux/gpio.h>
-#include <plat/gpio-core.h>
+#include <mach/gpio-core.h>
#ifdef CONFIG_S3C_GPIO_TRACK
struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END];
@@ -140,6 +140,15 @@ __init void s3c_gpiolib_add(struct s3c_gpio_chip *chip)
if (!gc->get)
gc->get = s3c_gpiolib_get;
+#ifdef CONFIG_PM
+ if (chip->pm != NULL) {
+ if (!chip->pm->save || !chip->pm->resume)
+ printk(KERN_ERR "gpio: %s has missing PM functions\n",
+ gc->label);
+ } else
+ printk(KERN_ERR "gpio: %s has no PM function\n", gc->label);
+#endif
+
/* gpiochip_add() prints own failure message on error. */
ret = gpiochip_add(gc);
if (ret >= 0)