int ar531x_enable_device(const struct ar531x_device *dev) { const struct ar531x_boarddata *info; info = ar531x_board_info(); if (dev->mask && ((dev->mask & info->config) == 0)) { return -1; } if (dev->reset) { /* put device into reset */ PUTSYSREG(AR5312_SYSREG_RESETCTL, GETSYSREG(AR5312_SYSREG_RESETCTL) | dev->reset); delay(15000); /* XXX: tsleep? */ /* take it out of reset */ PUTSYSREG(AR5312_SYSREG_RESETCTL, GETSYSREG(AR5312_SYSREG_RESETCTL) & ~dev->reset); delay(25); } if (dev->enable) { PUTSYSREG(AR5312_SYSREG_ENABLE, GETSYSREG(AR5312_SYSREG_ENABLE) | dev->enable); } return 0; }
static int ar5312_enable_device(const struct atheros_device *adv) { const struct ar531x_boarddata * const info = atheros_get_board_info(); if (info != NULL && adv->adv_mask && ((adv->adv_mask & info->config) == 0)) { return -1; } if (adv->adv_reset) { /* put device into reset */ PUTSYSREG(AR5312_SYSREG_RESETCTL, GETSYSREG(AR5312_SYSREG_RESETCTL) | adv->adv_reset); delay(15000); /* XXX: tsleep? */ /* take it out of reset */ PUTSYSREG(AR5312_SYSREG_RESETCTL, GETSYSREG(AR5312_SYSREG_RESETCTL) & ~adv->adv_reset); delay(25); } if (adv->adv_enable) { PUTSYSREG(AR5312_SYSREG_ENABLE, GETSYSREG(AR5312_SYSREG_ENABLE) | adv->adv_enable); } return 0; }
void ar531x_wdog(uint32_t period) { if (period == 0) { PUTSYSREG(AR5312_SYSREG_WDOG_CTL, AR5312_WDOG_CTL_IGNORE); PUTSYSREG(AR5312_SYSREG_WDOG_TIMER, 0); } else { PUTSYSREG(AR5312_SYSREG_WDOG_TIMER, period); PUTSYSREG(AR5312_SYSREG_WDOG_CTL, AR5312_WDOG_CTL_RESET); } }
static void ar5312_reset(void) { PUTSYSREG(AR5312_SYSREG_RESETCTL, AR5312_RESET_SYSTEM); }