New revision of patch, with static functions and added some
whitespace:)
Signed-off-by: Milan Plzik <milan.plzik_at_gmail.com>
---
drivers/mfd/samcop_base.c | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/drivers/mfd/samcop_base.c b/drivers/mfd/samcop_base.c
index 97901f6..4a92176 100644
--- a/drivers/mfd/samcop_base.c
+++ b/drivers/mfd/samcop_base.c
@@ -64,6 +64,8 @@
#include <asm/arch/clock.h>
#include <asm/types.h>
+#define SAMCOP_GPIO_REGISTERS (_SAMCOP_GPIO_INTPND/sizeof(uint32_t))
+
struct samcop_data
{
struct device *dev;
@@ -73,6 +75,7 @@ struct samcop_data
unsigned long irqmask;
struct platform_device **devices;
int ndevices;
+ uint32_t gpio_suspend_data[SAMCOP_GPIO_REGISTERS];
} *samcop_device_data; /* XXX samcop_device_data is a hack */
static void samcop_set_gpio_bit(struct device *dev, unsigned gpio, int
val);
@@ -981,6 +984,32 @@ void samcop_set_gpio_int_enable(struct device *dev,
unsigned int idx, u32 mask,
spin_unlock_irqrestore(&samcop->gpio_lock, flags);
}
+static void samcop_gpio_suspend(struct platform_device *pdev)
+{
+ struct samcop_data *samcop;
+ int i;
+
+ samcop = platform_get_drvdata(pdev);
+
+ for (i=0; i < SAMCOP_GPIO_REGISTERS; i++) {
+ samcop->gpio_suspend_data[i] =
+ samcop_read_register(samcop, _SAMCOP_GPIO_Base + i * 4);
+ };
+}
+
+static void samcop_gpio_resume(struct platform_device *pdev)
+{
+ struct samcop_data *samcop;
+ int i;
+
+ samcop = platform_get_drvdata(pdev);
+
+ for (i = 0; i < SAMCOP_GPIO_REGISTERS; i++) {
+ samcop_write_register(samcop, _SAMCOP_GPIO_Base + i * 4,
+ samcop->gpio_suspend_data[i]);
+ };
+}
+
void samcop_reset_fcd(struct device *dev)
{
struct samcop_data *samcop = dev->driver_data;
@@ -1403,6 +1432,8 @@ static int samcop_suspend(struct platform_device
*pdev, pm_message_t state)
{
struct samcop_data *samcop;
+ samcop_gpio_suspend(pdev);
+
samcop = platform_get_drvdata(pdev);
samcop->irqmask = samcop_read_register(samcop, SAMCOP_IC_INTMSK);
@@ -1418,6 +1449,8 @@ static int samcop_resume(struct platform_device
*pdev)
{
struct samcop_data *samcop;
+ samcop_gpio_resume(pdev);
+
samcop = platform_get_drvdata(pdev);
if (samcop->irqmask != 0xffffffff)
--
1.5.3.2
Received on Wed Sep 26 2007 - 14:17:49 EDT
This archive was generated by hypermail 2.2.0 : Wed Sep 26 2007 - 14:18:33 EDT