diff options
-rw-r--r-- | arch/arm/mach-omap2/powerdomain.c | 73 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/powerdomain.h | 2 |
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 | */ | ||
689 | int 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 | */ | ||
820 | int 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 | ||
138 | int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm); | 138 | int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm); |
139 | int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm); | 139 | int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm); |
140 | int pwrdm_read_logic_retst(struct powerdomain *pwrdm); | ||
140 | int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank); | 141 | int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank); |
141 | int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank); | 142 | int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank); |
143 | int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank); | ||
142 | 144 | ||
143 | int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm); | 145 | int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm); |
144 | int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm); | 146 | int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm); |