#include <linux/list.h>
#include <linux/module.h>
#include <linux/io.h>
+#include <linux/sysdev.h>
#include <mach/hardware.h>
#include <mach/gpio.h>
return 0;
}
-void rk2818_gpio_resume(void)
+
+static int rk2818_gpio_resume(struct sys_device *dev)
{
int i;
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;
else if(wakeups[i])
rk2818_gpio_write(rk2818gpio_chip[i].regbase,GPIO_INTEN,wakeups[i]);
}
- return;
+
+ return 0;
}
#if 0
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.
#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
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
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));
static int rk2818_pm_enter(suspend_state_t state)
{
- rk2818_gpio_suspend();
-
rk2818_idle();
__udelay(40);
- rk2818_gpio_resume();
-
return 0;
}