A22 and phonesdk: solve compile error
authorxsf@rock-chips.com <xsf@rock-chips.com>
Tue, 14 Jun 2011 08:15:24 +0000 (16:15 +0800)
committerxsf@rock-chips.com <root@xxx-desktop.(none)>
Tue, 14 Jun 2011 08:17:00 +0000 (16:17 +0800)
arch/arm/mach-rk29/pm-gpio.c [new file with mode: 0755]

diff --git a/arch/arm/mach-rk29/pm-gpio.c b/arch/arm/mach-rk29/pm-gpio.c
new file mode 100755 (executable)
index 0000000..82c2af1
--- /dev/null
@@ -0,0 +1,146 @@
+#include <mach/rk29_iomap.h>
+#include <mach/board.h>
+#include <mach/sram.h>
+#include <asm/io.h>\r
+#include <mach/iomux.h>\r
+\r
+#define GRF_GPIO0_DIR     0x000\r
+#define GRF_GPIO1_DIR     0x004\r
+#define GRF_GPIO2_DIR     0x008\r
+#define GRF_GPIO3_DIR     0x00c\r
+#define GRF_GPIO4_DIR     0x010\r
+#define GRF_GPIO5_DIR     0x014\r
+\r
+\r
+#define GRF_GPIO0_DO      0x018\r
+#define GRF_GPIO1_DO      0x01c\r
+#define GRF_GPIO2_DO      0x020\r
+#define GRF_GPIO3_DO      0x024\r
+#define GRF_GPIO4_DO      0x028\r
+#define GRF_GPIO5_DO      0x02c\r
+\r
+#define GRF_GPIO0_EN      0x030\r
+#define GRF_GPIO1_EN      0x034\r
+#define GRF_GPIO2_EN      0x038\r
+#define GRF_GPIO3_EN      0x03c\r
+#define GRF_GPIO4_EN      0x040\r
+#define GRF_GPIO5_EN      0x044\r
+\r
+\r
+#define GRF_GPIO0L_IOMUX  0x048\r
+#define GRF_GPIO0H_IOMUX  0x04c\r
+#define GRF_GPIO1L_IOMUX  0x050\r
+#define GRF_GPIO1H_IOMUX  0x054\r
+#define GRF_GPIO2L_IOMUX  0x058\r
+#define GRF_GPIO2H_IOMUX  0x05c\r
+#define GRF_GPIO3L_IOMUX  0x060\r
+#define GRF_GPIO3H_IOMUX  0x064\r
+#define GRF_GPIO4L_IOMUX  0x068\r
+#define GRF_GPIO4H_IOMUX  0x06c\r
+#define GRF_GPIO5L_IOMUX  0x070\r
+#define GRF_GPIO5H_IOMUX  0x074\r
+\r
+#define grf_readl(offset) readl(RK29_GRF_BASE + offset)
+#define grf_writel(v, offset) do { writel(v, RK29_GRF_BASE + offset); readl(RK29_GRF_BASE + offset); } while (0)
+\r
+#if CONFIG_MACH_RK29_A22\r
+\r
+typedef struct GPIO_IOMUX\r
+{
+    unsigned int GPIOL_IOMUX;\r
+    unsigned int GPIOH_IOMUX;\r
+}GPIO_IOMUX_PM;\r
+
+//GRF Registers
+typedef  struct REG_FILE_GRF\r
+{
+   unsigned int GRF_GPIO_DIR[6]; \r
+   unsigned int GRF_GPIO_DO[6];\r
+   unsigned int GRF_GPIO_EN[6];\r
+   GPIO_IOMUX_PM GRF_GPIO_IOMUX[6];\r
+   unsigned int GRF_GPIO_PULL[7];\r
+} GRF_REG_SAVE;\r
+\r
+GRF_REG_SAVE  __sramdata pm_grf;\r
+\r
+void __sramfunc pm_spi_gpio_prepare(void)\r
+{\r
+       \r
+       pm_grf.GRF_GPIO_IOMUX[1].GPIOL_IOMUX = grf_readl(GRF_GPIO1L_IOMUX);\r
+       pm_grf.GRF_GPIO_IOMUX[2].GPIOH_IOMUX = grf_readl(GRF_GPIO2H_IOMUX);\r
+\r
+\r
+       pm_grf.GRF_GPIO_PULL[1] = grf_readl(GRF_GPIO1_PULL);\r
+       pm_grf.GRF_GPIO_PULL[2] = grf_readl(GRF_GPIO2_PULL);\r
+\r
+       pm_grf.GRF_GPIO_EN[1] = grf_readl(GRF_GPIO1_EN);\r
+       pm_grf.GRF_GPIO_EN[2] = grf_readl(GRF_GPIO2_EN);\r
+\r
+}\r
+\r
+\r
+void __sramfunc pm_spi_gpio_suspend(void)\r
+{\r
+       int io1L_iomux;\r
+       int io2H_iomux;\r
+       int io1_pull,io2_pull;\r
+       int io1_en,io2_en;\r
+       pm_spi_gpio_prepare();\r
+\r
+       io1L_iomux = grf_readl(GRF_GPIO1L_IOMUX);\r
+       io2H_iomux = grf_readl(GRF_GPIO2H_IOMUX);\r
+\r
+       io1L_iomux &= (~((0x03<<6)|(0x03 <<8)));\r
+       io2H_iomux &=  0xffff0000;\r
+       grf_writel(io1L_iomux&(~((0x03<<6)|(0x03 <<8))), GRF_GPIO1L_IOMUX);\r
+       grf_writel(io2H_iomux&0xffff0000, GRF_GPIO2H_IOMUX);\r
+\r
+       io1_pull = grf_readl(GRF_GPIO1_PULL);\r
+       io2_pull = grf_readl(GRF_GPIO2_PULL);\r
+       \r
+       grf_writel(io1_pull|0x18,GRF_GPIO1_PULL);\r
+       grf_writel(io2_pull|0x00ff0000,GRF_GPIO2_PULL);\r
+\r
+       io1_en = grf_readl(GRF_GPIO1_EN);\r
+       io2_en = grf_readl(GRF_GPIO2_EN);\r
+       \r
+       grf_writel(io1_en|0x18,GRF_GPIO1_EN);\r
+       grf_writel(io2_en|0x00ff0000,GRF_GPIO2_EN);\r
+\r
+\r
+\r
+\r
+\r
+}\r
+\r
+void __sramfunc pm_spi_gpio_resume(void)\r
+{\r
+\r
+       grf_writel(pm_grf.GRF_GPIO_EN[1],GRF_GPIO1_EN);\r
+       grf_writel(pm_grf.GRF_GPIO_EN[2],GRF_GPIO2_EN);\r
+       grf_writel(pm_grf.GRF_GPIO_PULL[1],GRF_GPIO1_PULL);\r
+       grf_writel(pm_grf.GRF_GPIO_PULL[2],GRF_GPIO2_PULL);\r
+\r
+       grf_writel(pm_grf.GRF_GPIO_IOMUX[1].GPIOL_IOMUX, GRF_GPIO1L_IOMUX);\r
+       grf_writel(pm_grf.GRF_GPIO_IOMUX[2].GPIOH_IOMUX, GRF_GPIO2H_IOMUX);\r
+\r
+\r
+\r
+\r
+}\r
+\r
+#else\r
+void __sramfunc pm_spi_gpio_prepare(void)\r
+{\r
+\r
+}\r
+\r
+void __sramfunc pm_spi_gpio_suspend(void)\r
+{\r
+\r
+}\r
+void __sramfunc pm_spi_gpio_resume(void)\r
+{\r
+\r
+}\r
+#endif\r