|
@@ -678,6 +678,29 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
|
|
OMAP3430_LASTLOGICSTATEENTERED);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * pwrdm_read_logic_retst - get next powerdomain logic power state
|
|
|
+ * @pwrdm: struct powerdomain * to get next logic power state
|
|
|
+ *
|
|
|
+ * Return the powerdomain pwrdm's logic power state. Returns -EINVAL
|
|
|
+ * if the powerdomain pointer is null or returns the next logic
|
|
|
+ * power state upon success.
|
|
|
+ */
|
|
|
+int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
|
|
+{
|
|
|
+ if (!pwrdm)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The register bit names below may not correspond to the
|
|
|
+ * actual names of the bits in each powerdomain's register,
|
|
|
+ * but the type of value returned is the same for each
|
|
|
+ * powerdomain.
|
|
|
+ */
|
|
|
+ return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs,
|
|
|
+ OMAP3430_LOGICSTATEST);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* pwrdm_read_mem_pwrst - get current memory bank power state
|
|
|
* @pwrdm: struct powerdomain * to get current memory bank power state
|
|
@@ -784,6 +807,56 @@ int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
|
|
OMAP3430_PM_PREPWSTST, m);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * pwrdm_read_mem_retst - get next memory bank power state
|
|
|
+ * @pwrdm: struct powerdomain * to get mext memory bank power state
|
|
|
+ * @bank: memory bank number (0-3)
|
|
|
+ *
|
|
|
+ * Return the powerdomain pwrdm's next memory power state for bank
|
|
|
+ * x. Returns -EINVAL if the powerdomain pointer is null, -EEXIST if
|
|
|
+ * the target memory bank does not exist or is not controllable, or
|
|
|
+ * returns the next memory power state upon success.
|
|
|
+ */
|
|
|
+int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
|
|
|
+{
|
|
|
+ u32 m;
|
|
|
+
|
|
|
+ if (!pwrdm)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (pwrdm->banks < (bank + 1))
|
|
|
+ return -EEXIST;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The register bit names below may not correspond to the
|
|
|
+ * actual names of the bits in each powerdomain's register,
|
|
|
+ * but the type of value returned is the same for each
|
|
|
+ * powerdomain.
|
|
|
+ */
|
|
|
+ switch (bank) {
|
|
|
+ case 0:
|
|
|
+ m = OMAP_MEM0_RETSTATE_MASK;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ m = OMAP_MEM1_RETSTATE_MASK;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ m = OMAP_MEM2_RETSTATE_MASK;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ m = OMAP_MEM3_RETSTATE_MASK;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ m = OMAP_MEM4_RETSTATE_MASK;
|
|
|
+ default:
|
|
|
+ WARN_ON(1); /* should never happen */
|
|
|
+ return -EEXIST;
|
|
|
+ }
|
|
|
+
|
|
|
+ return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
|
|
+ pwrstctrl_reg_offs, m);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* pwrdm_clear_all_prev_pwrst - clear previous powerstate register for a pwrdm
|
|
|
* @pwrdm: struct powerdomain * to clear
|