forked from Minki/linux
ath9k: Move rate control alg register/unregister to appropriate place
This patch makes sure the rate control alg is registered/unregistered only once for this module. Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9bf9fca8de
commit
ca8a856056
@ -1229,9 +1229,6 @@ static void ath_detach(struct ath_softc *sc)
|
|||||||
ath_deinit_leds(sc);
|
ath_deinit_leds(sc);
|
||||||
|
|
||||||
ieee80211_unregister_hw(hw);
|
ieee80211_unregister_hw(hw);
|
||||||
|
|
||||||
ath_rate_control_unregister();
|
|
||||||
|
|
||||||
ath_rx_cleanup(sc);
|
ath_rx_cleanup(sc);
|
||||||
ath_tx_cleanup(sc);
|
ath_tx_cleanup(sc);
|
||||||
|
|
||||||
@ -1512,15 +1509,7 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
|
|||||||
hw->sta_data_size = sizeof(struct ath_node);
|
hw->sta_data_size = sizeof(struct ath_node);
|
||||||
hw->vif_data_size = sizeof(struct ath_vap);
|
hw->vif_data_size = sizeof(struct ath_vap);
|
||||||
|
|
||||||
/* Register rate control */
|
|
||||||
hw->rate_control_algorithm = "ath9k_rate_control";
|
hw->rate_control_algorithm = "ath9k_rate_control";
|
||||||
error = ath_rate_control_register();
|
|
||||||
if (error != 0) {
|
|
||||||
DPRINTF(sc, ATH_DBG_FATAL,
|
|
||||||
"Unable to register rate control algorithm: %d\n", error);
|
|
||||||
ath_rate_control_unregister();
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) {
|
if (sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) {
|
||||||
setup_ht_cap(&sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
|
setup_ht_cap(&sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
|
||||||
@ -1553,10 +1542,6 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
error = ieee80211_register_hw(hw);
|
error = ieee80211_register_hw(hw);
|
||||||
if (error != 0) {
|
|
||||||
ath_rate_control_unregister();
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize LED control */
|
/* Initialize LED control */
|
||||||
ath_init_leds(sc);
|
ath_init_leds(sc);
|
||||||
@ -1564,7 +1549,6 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
|
|||||||
return 0;
|
return 0;
|
||||||
detach:
|
detach:
|
||||||
ath_detach(sc);
|
ath_detach(sc);
|
||||||
bad:
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2714,11 +2698,24 @@ static struct pci_driver ath_pci_driver = {
|
|||||||
|
|
||||||
static int __init init_ath_pci(void)
|
static int __init init_ath_pci(void)
|
||||||
{
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
printk(KERN_INFO "%s: %s\n", dev_info, ATH_PCI_VERSION);
|
printk(KERN_INFO "%s: %s\n", dev_info, ATH_PCI_VERSION);
|
||||||
|
|
||||||
|
/* Register rate control algorithm */
|
||||||
|
error = ath_rate_control_register();
|
||||||
|
if (error != 0) {
|
||||||
|
printk(KERN_ERR
|
||||||
|
"Unable to register rate control algorithm: %d\n",
|
||||||
|
error);
|
||||||
|
ath_rate_control_unregister();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
if (pci_register_driver(&ath_pci_driver) < 0) {
|
if (pci_register_driver(&ath_pci_driver) < 0) {
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"ath_pci: No devices found, driver not installed.\n");
|
"ath_pci: No devices found, driver not installed.\n");
|
||||||
|
ath_rate_control_unregister();
|
||||||
pci_unregister_driver(&ath_pci_driver);
|
pci_unregister_driver(&ath_pci_driver);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
@ -2729,6 +2726,7 @@ module_init(init_ath_pci);
|
|||||||
|
|
||||||
static void __exit exit_ath_pci(void)
|
static void __exit exit_ath_pci(void)
|
||||||
{
|
{
|
||||||
|
ath_rate_control_unregister();
|
||||||
pci_unregister_driver(&ath_pci_driver);
|
pci_unregister_driver(&ath_pci_driver);
|
||||||
printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
|
printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user