aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-omap2/powerdomain.c73
-rw-r--r--arch/arm/plat-omap/include/plat/powerdomain.h2
2 files changed, 75 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index dc03289d5dea..e9eeaa4fbd47 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -679,6 +679,29 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
679} 679}
680 680
681/** 681/**
682 * pwrdm_read_logic_retst - get next powerdomain logic power state
683 * @pwrdm: struct powerdomain * to get next logic power state
684 *
685 * Return the powerdomain pwrdm's logic power state. Returns -EINVAL
686 * if the powerdomain pointer is null or returns the next logic
687 * power state upon success.
688 */
689int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
690{
691 if (!pwrdm)
692 return -EINVAL;
693
694 /*
695 * The register bit names below may not correspond to the
696 * actual names of the bits in each powerdomain's register,
697 * but the type of value returned is the same for each
698 * powerdomain.
699 */
700 return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs,
701 OMAP3430_LOGICSTATEST);
702}
703
704/**
682 * pwrdm_read_mem_pwrst - get current memory bank power state 705 * pwrdm_read_mem_pwrst - get current memory bank power state
683 * @pwrdm: struct powerdomain * to get current memory bank power state 706 * @pwrdm: struct powerdomain * to get current memory bank power state
684 * @bank: memory bank number (0-3) 707 * @bank: memory bank number (0-3)
@@ -785,6 +808,56 @@ int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
785} 808}
786 809
787/** 810/**
811 * pwrdm_read_mem_retst - get next memory bank power state
812 * @pwrdm: struct powerdomain * to get mext memory bank power state
813 * @bank: memory bank number (0-3)
814 *
815 * Return the powerdomain pwrdm's next memory power state for bank
816 * x. Returns -EINVAL if the powerdomain pointer is null, -EEXIST if
817 * the target memory bank does not exist or is not controllable, or
818 * returns the next memory power state upon success.
819 */
820int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
821{
822 u32 m;
823
824 if (!pwrdm)
825 return -EINVAL;
826
827 if (pwrdm->banks < (bank + 1))
828 return -EEXIST;
829
830 /*
831 * The register bit names below may not correspond to the
832 * actual names of the bits in each powerdomain's register,
833 * but the type of value returned is the same for each
834 * powerdomain.
835 */
836 switch (bank) {
837 case 0:
838 m = OMAP_MEM0_RETSTATE_MASK;
839 break;
840 case 1:
841 m = OMAP_MEM1_RETSTATE_MASK;
842 break;
843 case 2:
844 m = OMAP_MEM2_RETSTATE_MASK;
845 break;
846 case 3:
847 m = OMAP_MEM3_RETSTATE_MASK;
848 break;
849 case 4:
850 m = OMAP_MEM4_RETSTATE_MASK;
851 default:
852 WARN_ON(1); /* should never happen */
853 return -EEXIST;
854 }
855
856 return prm_read_mod_bits_shift(pwrdm->prcm_offs,
857 pwrstctrl_reg_offs, m);
858}
859
860/**
788 * pwrdm_clear_all_prev_pwrst - clear previous powerstate register for a pwrdm 861 * pwrdm_clear_all_prev_pwrst - clear previous powerstate register for a pwrdm
789 * @pwrdm: struct powerdomain * to clear 862 * @pwrdm: struct powerdomain * to clear
790 * 863 *
diff --git a/arch/arm/plat-omap/include/plat/powerdomain.h b/arch/arm/plat-omap/include/plat/powerdomain.h
index e15c7e9da975..6657ff2dfb6e 100644
--- a/arch/arm/plat-omap/include/plat/powerdomain.h
+++ b/arch/arm/plat-omap/include/plat/powerdomain.h
@@ -137,8 +137,10 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
137 137
138int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm); 138int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm);
139int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm); 139int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm);
140int pwrdm_read_logic_retst(struct powerdomain *pwrdm);
140int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank); 141int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
141int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank); 142int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
143int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank);
142 144
143int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm); 145int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm);
144int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm); 146int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm);