/* ------------------------------------------------------------------------*//** * @FUNCTION pwrdm54xx_state_get * @BRIEF extract power domain state from register * @RETURNS power domain state on success * PWRDM_STATE_MAX in case of error * @param[in] id: valid power domain ID * @param[in] type: valid power domain state type * @DESCRIPTION extract power domain state from register *//*------------------------------------------------------------------------ */ pwrdm_state pwrdm54xx_state_get(pwrdm54xx_id id, pwrdm_state_type type) { reg *pm_pwrst; CHECK_CPU(54xx, PWRDM_STATE_MAX); CHECK_ARG_LESS_THAN(id, PWRDM54XX_ID_MAX, PWRDM_STATE_MAX); /* Retrieve registers address */ if (type == PWRDM_STATE_TARGET) pm_pwrst = pwrdm54xx_pwrstctrl_table[id]; else pm_pwrst = pwrdm54xx_pwrstst_table[id]; if (pm_pwrst == NULL) { /* Always ON domain */ dprintf("%s(%s): Always ON domain\n", __func__, pwrdm54xx_name_get(id)); return PWRDM_ON_STATE; } /* Retrieve power domain state */ return pwrdm_state_get(pm_pwrst, type); }
/* ------------------------------------------------------------------------*//** * @FUNCTION powerdm_state_get * @BRIEF return the previous/current/target state of * a given power domain * @RETURNS domain previous/current/target state on success * PWRDM_STATE_MAX in case of error * @param[in] powerdm: power domain name * @param[in] type: power domain state type * @DESCRIPTION return the previous/current/target state of * a given power domain *//*------------------------------------------------------------------------ */ pwrdm_state powerdm_state_get(const char *powerdm, pwrdm_state_type type) { reg *pm_reg; pwrdm_state state; CHECK_NULL_ARG(powerdm, PWRDM_STATE_MAX); CHECK_ARG_LESS_THAN(type, PWRDM_STATE_TYPE_MAX, PWRDM_STATE_MAX); /* Retrieve registers address */ switch (type) { case PWRDM_STATE_TARGET: pm_reg = powerdm_pwrstctrl_reg_get(powerdm); break; case PWRDM_STATE_CURRENT: case PWRDM_STATE_PREVIOUS: pm_reg = powerdm_pwrstst_reg_get(powerdm); break; default: fprintf(stderr, "omapconf: %s(%s): invalid type (%d)!\n", __func__, powerdm, type); return PWRDM_STATE_MAX; } if (pm_reg == NULL) { /* Always ON domain */ dprintf("%s(%s): Always ON domain\n", __func__, powerdm); return PWRDM_ON_STATE; } /* Retrieve power domain state */ state = pwrdm_state_get(pm_reg, type); dprintf("%s(%s, %s) = %s\n", __func__, powerdm, pwrdm_state_type_name_get(type), pwrdm_state_name_get(state)); return state; }