Merge git://git.infradead.org/~dwmw2/mtd-2.6.35
[pandora-kernel.git] / arch / arm / mach-omap2 / powerdomain.c
index 637fdfe..a2904aa 100644 (file)
@@ -5,8 +5,8 @@
  * Copyright (C) 2007-2009 Nokia Corporation
  *
  * Written by Paul Walmsley
- *
  * Added OMAP4 specific support by Abhijit Pagare <abhijitpagare@ti.com>
+ * State counting code by Tero Kristo <tero.kristo@nokia.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -979,6 +979,34 @@ bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm)
        return (pwrdm && pwrdm->flags & PWRDM_HAS_HDWR_SAR) ? 1 : 0;
 }
 
+/**
+ * pwrdm_set_lowpwrstchange - Request a low power state change
+ * @pwrdm: struct powerdomain *
+ *
+ * Allows a powerdomain to transtion to a lower power sleep state
+ * from an existing sleep state without waking up the powerdomain.
+ * Returns -EINVAL if the powerdomain pointer is null or if the
+ * powerdomain does not support LOWPOWERSTATECHANGE, or returns 0
+ * upon success.
+ */
+int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
+{
+       if (!pwrdm)
+               return -EINVAL;
+
+       if (!(pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE))
+               return -EINVAL;
+
+       pr_debug("powerdomain: %s: setting LOWPOWERSTATECHANGE bit\n",
+                pwrdm->name);
+
+       prm_rmw_mod_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK,
+                            (1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT),
+                            pwrdm->prcm_offs, pwrstctrl_reg_offs);
+
+       return 0;
+}
+
 /**
  * pwrdm_wait_transition - wait for powerdomain power transition to finish
  * @pwrdm: struct powerdomain * to wait for
@@ -1004,7 +1032,7 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm)
 
        /* XXX Is this udelay() value meaningful? */
        while ((prm_read_mod_reg(pwrdm->prcm_offs, pwrstst_reg_offs) &
-               OMAP_INTRANSITION) &&
+               OMAP_INTRANSITION_MASK) &&
               (c++ < PWRDM_TRANSITION_BAILOUT))
                        udelay(1);