Beispiel #1
0
/* ------------------------------------------------------------------------*//**
 * @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);
}
Beispiel #2
0
/* ------------------------------------------------------------------------*//**
 * @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;
}