staticint lantiq_rcu_reset_status(struct reset_controller_dev *rcdev, unsignedlong id)
{ struct lantiq_rcu_reset_priv *priv = to_lantiq_rcu_reset_priv(rcdev); unsignedint status = (id >> 8) & 0x1f;
u32 val; int ret;
ret = regmap_read(priv->regmap, priv->status_offset, &val); if (ret) return ret;
return !!(val & BIT(status));
}
staticint lantiq_rcu_reset_status_timeout(struct reset_controller_dev *rcdev, unsignedlong id, bool assert)
{ int ret; int retry = LANTIQ_RCU_RESET_TIMEOUT;
do {
ret = lantiq_rcu_reset_status(rcdev, id); if (ret < 0) return ret; if (ret == assert) return 0;
usleep_range(20, 40);
} while (--retry);
return -ETIMEDOUT;
}
staticint lantiq_rcu_reset_update(struct reset_controller_dev *rcdev, unsignedlong id, bool assert)
{ struct lantiq_rcu_reset_priv *priv = to_lantiq_rcu_reset_priv(rcdev); unsignedint set = id & 0x1f;
u32 val = assert ? BIT(set) : 0; int ret;
ret = regmap_update_bits(priv->regmap, priv->reset_offset, BIT(set),
val); if (ret) {
dev_err(priv->dev, "Failed to set reset bit %u\n", set); return ret;
}
ret = lantiq_rcu_reset_status_timeout(rcdev, id, assert); if (ret)
dev_err(priv->dev, "Failed to %s bit %u\n",
assert ? "assert" : "deassert", set);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.