rm rk2818_gpio_suspend/rk2818_gpio_resume, use sysdev
author黄涛 <huangtao@rock-chips.com>
Wed, 9 Jun 2010 10:05:34 +0000 (10:05 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:35:25 +0000 (13:35 +0800)
arch/arm/mach-rk2818/gpio.c
arch/arm/mach-rk2818/include/mach/gpio.h
arch/arm/mach-rk2818/pm.c

index b39c19e5ab289d783d8bf64549370844fb5773a1..6ff84bd07906773152cb137346e33a98e3fe1fd7 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/io.h>
+#include <linux/sysdev.h>
 
 #include <mach/hardware.h>
 #include <mach/gpio.h>
@@ -631,7 +632,8 @@ static int gpio_irq_set_wake(unsigned irq, unsigned state)
        return 0;
 
 }
-void rk2818_gpio_resume(void)
+
+static int rk2818_gpio_resume(struct sys_device *dev)
 {
        int i;
        
@@ -644,10 +646,11 @@ void rk2818_gpio_resume(void)
                        clk_enable(rk2818gpio_chip[i].bank->clock);
                }
        }
-       return;
+
+       return 0;
 }
 
-void rk2818_gpio_suspend(void)
+static int rk2818_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
 {
        int i;
 
@@ -662,7 +665,8 @@ void rk2818_gpio_suspend(void)
                else if(wakeups[i])
                        rk2818_gpio_write(rk2818gpio_chip[i].regbase,GPIO_INTEN,wakeups[i]);
        }
-       return;
+
+       return 0;
 }
 
  #if 0
@@ -1201,6 +1205,26 @@ static void rk2818_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
        return;
 }
 
+static struct sysdev_class rk2818_gpio_sysclass = {
+       .name           = "gpio",
+       .suspend        = rk2818_gpio_suspend,
+       .resume         = rk2818_gpio_resume,
+};
+
+static struct sys_device rk2818_gpio_device = {
+       .cls            = &rk2818_gpio_sysclass,
+};
+
+static int __init rk2818_gpio_sysinit(void)
+{
+       int ret = sysdev_class_register(&rk2818_gpio_sysclass);
+       if (ret == 0)
+               ret = sysdev_register(&rk2818_gpio_device);
+       return ret;
+}
+
+arch_initcall(rk2818_gpio_sysinit);
+
  /*----------------------------------------------------------------------
 Name   : rk2818_gpio_init
 Desc           : enable GPIO pin support.
index d0cb33059949cefc21791c71251375ea8c7731da..fba5bf1165e5a05d978e3d8fc359b452c9c78fab 100755 (executable)
@@ -179,8 +179,6 @@ struct rk2818_gpio_bank {
 #ifndef __ASSEMBLY__
 extern void __init rk2818_gpio_init(struct rk2818_gpio_bank *data, int nr_banks);
 extern void __init rk2818_gpio_irq_setup(void);
-extern void rk2818_gpio_suspend(void);
-extern void rk2818_gpio_resume(void);
 /*-------------------------------------------------------------------------*/
 
 /* wrappers for "new style" GPIO calls. the old RK2818-specfic ones should
index b2c8bac6be4841bcb2629f01a4eae91c28490141..765fb8b746e7ac3b209e3dc2d71caad8aa8bb0e6 100644 (file)
@@ -175,9 +175,9 @@ static int __tcmfunc rk2818_tcm_idle(void)
                        break;
        }
 
-       __udelay(5 << 8);
+       tcm_udelay(5 << 8, 24);
        scu_writel(scu_clksel0, SCU_CLKSEL0_CON);
-       __udelay(5);
+       tcm_udelay(5, 24);
 
        scu_writel(scu_mode, SCU_MODE_CON); // normal
 
@@ -187,7 +187,7 @@ static int __tcmfunc rk2818_tcm_idle(void)
 static void rk2818_idle(void)
 {
        unsigned long old_sp;
-       unsigned long tcm_sp = ITCM_END + 1;
+       unsigned long tcm_sp = ITCM_END & ~7;
 
        asm volatile ("mov %0, sp" : "=r" (old_sp));
        asm volatile ("mov sp, %0" :: "r" (tcm_sp));
@@ -197,13 +197,9 @@ static void rk2818_idle(void)
 
 static int rk2818_pm_enter(suspend_state_t state)
 {
-       rk2818_gpio_suspend();
-
        rk2818_idle();
        __udelay(40);
 
-       rk2818_gpio_resume();
-
        return 0;
 }