]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/plat-omap/omap-pm-noop.c
OMAP: PM noop: implement context loss count for non-omap_devices
[karo-tx-linux.git] / arch / arm / plat-omap / omap-pm-noop.c
index af58daddcf500595857ca01f08e2b4ae3561655b..b0471bb2d47dda81c45447e381ada7ff294b502f 100644 (file)
@@ -26,6 +26,9 @@
 #include <plat/omap-pm.h>
 #include <plat/omap_device.h>
 
+static bool off_mode_enabled;
+static u32 dummy_context_loss_counter;
+
 /*
  * Device-driver-originated constraints (via board-*.c files)
  */
@@ -280,10 +283,34 @@ unsigned long omap_pm_cpu_get_freq(void)
        return 0;
 }
 
+/**
+ * omap_pm_enable_off_mode - notify OMAP PM that off-mode is enabled
+ *
+ * Intended for use only by OMAP PM core code to notify this layer
+ * that off mode has been enabled.
+ */
+void omap_pm_enable_off_mode(void)
+{
+       off_mode_enabled = true;
+}
+
+/**
+ * omap_pm_disable_off_mode - notify OMAP PM that off-mode is disabled
+ *
+ * Intended for use only by OMAP PM core code to notify this layer
+ * that off mode has been disabled.
+ */
+void omap_pm_disable_off_mode(void)
+{
+       off_mode_enabled = false;
+}
+
 /*
  * Device context loss tracking
  */
 
+#ifdef CONFIG_ARCH_OMAP2PLUS
+
 u32 omap_pm_get_dev_context_loss_count(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
@@ -292,13 +319,30 @@ u32 omap_pm_get_dev_context_loss_count(struct device *dev)
        if (WARN_ON(!dev))
                return 0;
 
-       count = omap_device_get_context_loss_count(pdev);
+       if (dev->parent == &omap_device_parent) {
+               count = omap_device_get_context_loss_count(pdev);
+       } else {
+               WARN_ONCE(off_mode_enabled, "omap_pm: using dummy context loss counter; device %s should be converted to omap_device",
+                         dev_name(dev));
+               if (off_mode_enabled)
+                       dummy_context_loss_counter++;
+               count = dummy_context_loss_counter;
+       }
+
        pr_debug("OMAP PM: context loss count for dev %s = %d\n",
                 dev_name(dev), count);
 
        return count;
 }
 
+#else
+
+u32 omap_pm_get_dev_context_loss_count(struct device *dev)
+{
+       return dummy_context_loss_counter;
+}
+
+#endif
 
 /* Should be called before clk framework init */
 int __init omap_pm_if_early_init(void)