diff options
author | Ben Dooks <ben-linux@fluff.org> | 2008-12-11 19:24:30 -0500 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-05-07 06:04:56 -0400 |
commit | d87964c46005ccb04754f6309df0fd8f67b08c6d (patch) | |
tree | d35fc1fb3660dca0cdb236ef14ba27dcd69618f2 /arch/arm/plat-s3c24xx/gpiolib.c | |
parent | 966bcc14386000e8b4dc7bbb426910bcb55a8588 (diff) |
[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-s3c24xx/gpiolib.c')
-rw-r--r-- | arch/arm/plat-s3c24xx/gpiolib.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/plat-s3c24xx/gpiolib.c b/arch/arm/plat-s3c24xx/gpiolib.c index 5c0491bf738b..4bac12dc0733 100644 --- a/arch/arm/plat-s3c24xx/gpiolib.c +++ b/arch/arm/plat-s3c24xx/gpiolib.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <mach/gpio-core.h> | 22 | #include <mach/gpio-core.h> |
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <asm/irq.h> | 24 | #include <asm/irq.h> |
25 | #include <plat/pm.h> | ||
25 | 26 | ||
26 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
27 | 28 | ||
@@ -78,6 +79,7 @@ static int s3c24xx_gpiolib_bankg_toirq(struct gpio_chip *chip, unsigned offset) | |||
78 | struct s3c_gpio_chip s3c24xx_gpios[] = { | 79 | struct s3c_gpio_chip s3c24xx_gpios[] = { |
79 | [0] = { | 80 | [0] = { |
80 | .base = S3C24XX_GPIO_BASE(S3C2410_GPA0), | 81 | .base = S3C24XX_GPIO_BASE(S3C2410_GPA0), |
82 | .pm = __gpio_pm(&s3c_gpio_pm_1bit), | ||
81 | .chip = { | 83 | .chip = { |
82 | .base = S3C2410_GPA0, | 84 | .base = S3C2410_GPA0, |
83 | .owner = THIS_MODULE, | 85 | .owner = THIS_MODULE, |
@@ -89,6 +91,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
89 | }, | 91 | }, |
90 | [1] = { | 92 | [1] = { |
91 | .base = S3C24XX_GPIO_BASE(S3C2410_GPB0), | 93 | .base = S3C24XX_GPIO_BASE(S3C2410_GPB0), |
94 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
92 | .chip = { | 95 | .chip = { |
93 | .base = S3C2410_GPB0, | 96 | .base = S3C2410_GPB0, |
94 | .owner = THIS_MODULE, | 97 | .owner = THIS_MODULE, |
@@ -98,6 +101,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
98 | }, | 101 | }, |
99 | [2] = { | 102 | [2] = { |
100 | .base = S3C24XX_GPIO_BASE(S3C2410_GPC0), | 103 | .base = S3C24XX_GPIO_BASE(S3C2410_GPC0), |
104 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
101 | .chip = { | 105 | .chip = { |
102 | .base = S3C2410_GPC0, | 106 | .base = S3C2410_GPC0, |
103 | .owner = THIS_MODULE, | 107 | .owner = THIS_MODULE, |
@@ -107,6 +111,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
107 | }, | 111 | }, |
108 | [3] = { | 112 | [3] = { |
109 | .base = S3C24XX_GPIO_BASE(S3C2410_GPD0), | 113 | .base = S3C24XX_GPIO_BASE(S3C2410_GPD0), |
114 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
110 | .chip = { | 115 | .chip = { |
111 | .base = S3C2410_GPD0, | 116 | .base = S3C2410_GPD0, |
112 | .owner = THIS_MODULE, | 117 | .owner = THIS_MODULE, |
@@ -116,6 +121,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
116 | }, | 121 | }, |
117 | [4] = { | 122 | [4] = { |
118 | .base = S3C24XX_GPIO_BASE(S3C2410_GPE0), | 123 | .base = S3C24XX_GPIO_BASE(S3C2410_GPE0), |
124 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
119 | .chip = { | 125 | .chip = { |
120 | .base = S3C2410_GPE0, | 126 | .base = S3C2410_GPE0, |
121 | .label = "GPIOE", | 127 | .label = "GPIOE", |
@@ -125,6 +131,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
125 | }, | 131 | }, |
126 | [5] = { | 132 | [5] = { |
127 | .base = S3C24XX_GPIO_BASE(S3C2410_GPF0), | 133 | .base = S3C24XX_GPIO_BASE(S3C2410_GPF0), |
134 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
128 | .chip = { | 135 | .chip = { |
129 | .base = S3C2410_GPF0, | 136 | .base = S3C2410_GPF0, |
130 | .owner = THIS_MODULE, | 137 | .owner = THIS_MODULE, |
@@ -135,6 +142,7 @@ struct s3c_gpio_chip s3c24xx_gpios[] = { | |||
135 | }, | 142 | }, |
136 | [6] = { | 143 | [6] = { |
137 | .base = S3C24XX_GPIO_BASE(S3C2410_GPG0), | 144 | .base = S3C24XX_GPIO_BASE(S3C2410_GPG0), |
145 | .pm = __gpio_pm(&s3c_gpio_pm_2bit), | ||
138 | .chip = { | 146 | .chip = { |
139 | .base = S3C2410_GPG0, | 147 | .base = S3C2410_GPG0, |
140 | .owner = THIS_MODULE, | 148 | .owner = THIS_MODULE, |