From: Tero Kristo <[EMAIL PROTECTED]>

Signed-off-by: Tero Kristo <[EMAIL PROTECTED]>
---
 arch/arm/mach-omap2/cpuidle34xx.c     |    3 +++
 arch/arm/plat-omap/dma.c              |   26 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/mach/dma.h |    3 +++
 3 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/cpuidle34xx.c 
b/arch/arm/mach-omap2/cpuidle34xx.c
index 11ff573..c970a06 100644
--- a/arch/arm/mach-omap2/cpuidle34xx.c
+++ b/arch/arm/mach-omap2/cpuidle34xx.c
@@ -30,6 +30,7 @@
 #include <mach/gpio.h>
 #include <mach/gpmc.h>
 #include <mach/control.h>
+#include <mach/dma.h>
 #include <linux/sched.h>
 #include "cpuidle34xx.h"
 #include "cm.h"
@@ -392,6 +393,7 @@ void omap3_save_core_ctx(void)
        omap_save_gpmc_ctx();
        /* Save the system control module context, padconf already save above*/
        omap_save_control_ctx();
+       omap_dma_global_context_save();
 }
 
 void omap3_restore_core_ctx(void)
@@ -402,6 +404,7 @@ void omap3_restore_core_ctx(void)
        omap_restore_gpmc_ctx();
        /* Restore the interrupt controller context */
        omap_restore_intc_ctx();
+       omap_dma_global_context_restore();
        padconf_saved = 0;
 }
 
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
index eaea12a..38c57ce 100644
--- a/arch/arm/plat-omap/dma.c
+++ b/arch/arm/plat-omap/dma.c
@@ -51,6 +51,12 @@ enum { DMA_CHAIN_STARTED, DMA_CHAIN_NOTSTARTED };
 
 static int enable_1510_mode;
 
+static struct omap_dma_global_context_registers {
+       u32 dma_irqenable_l0;
+       u32 dma_ocp_sysconfig;
+       u32 dma_gcr;
+} omap_dma_global_context;
+
 struct omap_dma_lch {
        int next_lch;
        int dev_id;
@@ -2291,6 +2297,26 @@ void omap_stop_lcd_dma(void)
 }
 EXPORT_SYMBOL(omap_stop_lcd_dma);
 
+void omap_dma_global_context_save(void)
+{
+       omap_dma_global_context.dma_irqenable_l0 =
+               dma_read(IRQENABLE_L0);
+       omap_dma_global_context.dma_ocp_sysconfig =
+               dma_read(OCP_SYSCONFIG);
+       omap_dma_global_context.dma_gcr = dma_read(GCR);
+}
+EXPORT_SYMBOL(omap_dma_global_context_save);
+
+void omap_dma_global_context_restore(void)
+{
+       dma_write(omap_dma_global_context.dma_gcr, GCR);
+       dma_write(omap_dma_global_context.dma_ocp_sysconfig,
+               OCP_SYSCONFIG);
+       dma_write(omap_dma_global_context.dma_irqenable_l0,
+               IRQENABLE_L0);
+}
+EXPORT_SYMBOL(omap_dma_global_context_restore);
+
 
/*----------------------------------------------------------------------------*/
 
 static int __init omap_init_dma(void)
diff --git a/arch/arm/plat-omap/include/mach/dma.h 
b/arch/arm/plat-omap/include/mach/dma.h
index 54fe966..f1f588a 100644
--- a/arch/arm/plat-omap/include/mach/dma.h
+++ b/arch/arm/plat-omap/include/mach/dma.h
@@ -528,6 +528,9 @@ extern void omap_set_dma_dst_endian_type(int lch, enum 
end_type etype);
 extern void omap_set_dma_src_endian_type(int lch, enum end_type etype);
 extern int omap_get_dma_index(int lch, int *ei, int *fi);
 
+void omap_dma_global_context_save(void);
+void omap_dma_global_context_restore(void);
+
 /* Chaining APIs */
 #ifndef CONFIG_ARCH_OMAP1
 extern int omap_request_dma_chain(int dev_id, const char *dev_name,
-- 
1.6.0

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to