ath5k: use regulatory infrastructure
Make ath5k select the ath module and add in the hooks to make the eeprom regulatory hint and reg notifier take effect. Changes to attach.c Changes-licensed-under: ISC Changes to base.c Changes-licensed-under: 3-Clause-BSD Signed-off-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e3bb249be8
commit
f769c36bd7
|
@ -1,6 +1,7 @@
|
|||
config ATH5K
|
||||
tristate "Atheros 5xxx wireless cards support"
|
||||
depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
|
||||
select ATH_COMMON
|
||||
select MAC80211_LEDS
|
||||
select LEDS_CLASS
|
||||
select NEW_LEDS
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#include <linux/types.h>
|
||||
#include <net/mac80211.h>
|
||||
|
||||
#include "../ath/regd.h"
|
||||
|
||||
/* RX/TX descriptor hw structs
|
||||
* TODO: Driver part should only see sw structs */
|
||||
#include "desc.h"
|
||||
|
@ -1039,8 +1041,6 @@ struct ath5k_hw {
|
|||
bool ah_5ghz;
|
||||
bool ah_2ghz;
|
||||
|
||||
#define ah_regdomain ah_capabilities.cap_regdomain.reg_current
|
||||
#define ah_regdomain_hw ah_capabilities.cap_regdomain.reg_hw
|
||||
#define ah_modes ah_capabilities.cap_mode
|
||||
#define ah_ee_version ah_capabilities.cap_eeprom.ee_version
|
||||
|
||||
|
@ -1065,6 +1065,7 @@ struct ath5k_hw {
|
|||
u32 ah_gpio[AR5K_MAX_GPIO];
|
||||
int ah_gpio_npins;
|
||||
|
||||
struct ath_regulatory ah_regulatory;
|
||||
struct ath5k_capabilities ah_capabilities;
|
||||
|
||||
struct ath5k_txq_info ah_txq[AR5K_NUM_TX_QUEUES];
|
||||
|
|
|
@ -709,6 +709,15 @@ err_no_irq:
|
|||
* Driver Initialization *
|
||||
\***********************/
|
||||
|
||||
static int ath5k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
|
||||
{
|
||||
struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
|
||||
struct ath5k_softc *sc = hw->priv;
|
||||
struct ath_regulatory *reg = &sc->ah->ah_regulatory;
|
||||
|
||||
return ath_reg_notifier_apply(wiphy, request, reg);
|
||||
}
|
||||
|
||||
static int
|
||||
ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
|
||||
{
|
||||
|
@ -797,12 +806,23 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
|
|||
memset(sc->bssidmask, 0xff, ETH_ALEN);
|
||||
ath5k_hw_set_bssid_mask(sc->ah, sc->bssidmask);
|
||||
|
||||
ah->ah_regulatory.current_rd =
|
||||
ah->ah_capabilities.cap_eeprom.ee_regdomain;
|
||||
ret = ath_regd_init(&ah->ah_regulatory, hw->wiphy, ath5k_reg_notifier);
|
||||
if (ret) {
|
||||
ATH5K_ERR(sc, "can't initialize regulatory system\n");
|
||||
goto err_queues;
|
||||
}
|
||||
|
||||
ret = ieee80211_register_hw(hw);
|
||||
if (ret) {
|
||||
ATH5K_ERR(sc, "can't register ieee80211 hw\n");
|
||||
goto err_queues;
|
||||
}
|
||||
|
||||
if (!ath_is_world_regd(&sc->ah->ah_regulatory))
|
||||
regulatory_hint(hw->wiphy, sc->ah->ah_regulatory.alpha2);
|
||||
|
||||
ath5k_init_leds(sc);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue