ARM: tegra: gpio: Convert suspend/resume to syscore
Colin Cross [Tue, 29 Mar 2011 00:47:31 +0000 (17:47 -0700)]
Signed-off-by: Colin Cross <ccross@android.com>
Change-Id: I5cd5b83eb0a760826fc7443f06cd1e94bba359db

arch/arm/mach-tegra/common.c
arch/arm/mach-tegra/include/mach/gpio.h
drivers/gpio/gpio-tegra.c

index d5e3f89..7d44d1c 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <asm/hardware/cache-l2x0.h>
 
+#include <mach/gpio.h>
 #include <mach/iomap.h>
 #include <mach/system.h>
 
@@ -77,6 +78,7 @@ void __init tegra_init_cache(void)
 void __init tegra_init_early(void)
 {
        tegra_init_fuse();
+       tegra_gpio_resume_init();
        tegra_init_clock();
        tegra_clk_init_from_table(common_clk_init_table);
        tegra_init_cache();
index 196f114..ebd9410 100644 (file)
@@ -56,5 +56,6 @@ struct tegra_gpio_table {
 void tegra_gpio_config(struct tegra_gpio_table *table, int num);
 void tegra_gpio_enable(int gpio);
 void tegra_gpio_disable(int gpio);
+int tegra_gpio_resume_init(void);
 
 #endif
index abc0cee..f287f9c 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/io.h>
 #include <linux/gpio.h>
 #include <linux/of.h>
+#include <linux/syscore_ops.h>
 
 #include <asm/mach/irq.h>
 
@@ -261,7 +262,7 @@ static void tegra_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
 }
 
 #ifdef CONFIG_PM
-void tegra_gpio_resume(void)
+static void tegra_gpio_resume(void)
 {
        unsigned long flags;
        int b;
@@ -285,7 +286,7 @@ void tegra_gpio_resume(void)
        local_irq_restore(flags);
 }
 
-void tegra_gpio_suspend(void)
+static int tegra_gpio_suspend(void)
 {
        unsigned long flags;
        int b;
@@ -305,6 +306,8 @@ void tegra_gpio_suspend(void)
                }
        }
        local_irq_restore(flags);
+
+       return 0;
 }
 
 static int tegra_gpio_irq_set_wake(struct irq_data *d, unsigned int enable)
@@ -326,8 +329,22 @@ static int tegra_gpio_irq_set_wake(struct irq_data *d, unsigned int enable)
 }
 #else
 #define tegra_gpio_irq_set_wake NULL
+#define tegra_gpio_suspend NULL
+#define tegra_gpio_resume NULL
 #endif
 
+static struct syscore_ops tegra_gpio_syscore_ops = {
+       .suspend = tegra_gpio_suspend,
+       .resume = tegra_gpio_resume,
+};
+
+int tegra_gpio_resume_init(void)
+{
+       register_syscore_ops(&tegra_gpio_syscore_ops);
+
+       return 0;
+}
+
 static struct irq_chip tegra_gpio_irq_chip = {
        .name           = "GPIO",
        .irq_ack        = tegra_gpio_irq_ack,