mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
ath9k: call ath9k_hw_detach() once upon hw init failure
If hw initialization fails (ath9k_hw_init()) on ath_init_softc() we bail out and call ath9k_hw_detach(). The call ath9k_hw_detach() is conditional though as ath9k_hw_init() could itself have called ath9k_hw_detach(). Just describing this is itself a brain twister. Avoid this nonsense by removing ath9k_hw_detach() from ath9k_hw_init(). Upon hw initialization failure we expect the callers to take care of the cleanup. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
3ce1b1a949
commit
95fafca26d
@ -898,26 +898,22 @@ static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah)
|
||||
|
||||
int ath9k_hw_init(struct ath_hw *ah)
|
||||
{
|
||||
int r;
|
||||
int r = 0;
|
||||
|
||||
if (!ath9k_hw_devid_supported(ah->hw_version.devid)) {
|
||||
r = -EOPNOTSUPP;
|
||||
goto bad;
|
||||
}
|
||||
if (!ath9k_hw_devid_supported(ah->hw_version.devid))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ath9k_hw_init_defaults(ah);
|
||||
ath9k_hw_init_config(ah);
|
||||
|
||||
if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON)) {
|
||||
DPRINTF(ah->ah_sc, ATH_DBG_FATAL, "Couldn't reset chip\n");
|
||||
r = -EIO;
|
||||
goto bad;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) {
|
||||
DPRINTF(ah->ah_sc, ATH_DBG_FATAL, "Couldn't wakeup chip\n");
|
||||
r = -EIO;
|
||||
goto bad;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (ah->config.serialize_regmode == SER_REG_MODE_AUTO) {
|
||||
@ -939,8 +935,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||
"Mac Chip Rev 0x%02x.%x is not supported by "
|
||||
"this driver\n", ah->hw_version.macVersion,
|
||||
ah->hw_version.macRev);
|
||||
r = -EOPNOTSUPP;
|
||||
goto bad;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (AR_SREV_9100(ah)) {
|
||||
@ -965,7 +960,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||
|
||||
r = ath9k_hw_post_init(ah);
|
||||
if (r)
|
||||
goto bad;
|
||||
return r;
|
||||
|
||||
ath9k_hw_init_mode_gain_regs(ah);
|
||||
ath9k_hw_fill_cap_info(ah);
|
||||
@ -975,7 +970,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||
if (r) {
|
||||
DPRINTF(ah->ah_sc, ATH_DBG_FATAL,
|
||||
"Failed to initialize MAC address\n");
|
||||
goto bad;
|
||||
return r;
|
||||
}
|
||||
|
||||
if (AR_SREV_9285(ah))
|
||||
@ -986,9 +981,6 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||
ath9k_init_nfcal_hist_buffer(ah);
|
||||
|
||||
return 0;
|
||||
bad:
|
||||
ath9k_hw_detach(ah);
|
||||
return r;
|
||||
}
|
||||
|
||||
static void ath9k_hw_init_bb(struct ath_hw *ah,
|
||||
|
@ -1520,8 +1520,7 @@ bad2:
|
||||
if (ATH_TXQ_SETUP(sc, i))
|
||||
ath_tx_cleanupq(sc, &sc->tx.txq[i]);
|
||||
bad:
|
||||
if (ah)
|
||||
ath9k_hw_detach(ah);
|
||||
ath9k_hw_detach(ah);
|
||||
sc->sc_ah = NULL;
|
||||
bad_no_ah:
|
||||
ath9k_exit_debug(sc);
|
||||
|
Loading…
Reference in New Issue
Block a user