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:
Родитель
e3bb249be8
Коммит
f769c36bd7
|
@ -1,6 +1,7 @@
|
||||||
config ATH5K
|
config ATH5K
|
||||||
tristate "Atheros 5xxx wireless cards support"
|
tristate "Atheros 5xxx wireless cards support"
|
||||||
depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
|
depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
|
||||||
|
select ATH_COMMON
|
||||||
select MAC80211_LEDS
|
select MAC80211_LEDS
|
||||||
select LEDS_CLASS
|
select LEDS_CLASS
|
||||||
select NEW_LEDS
|
select NEW_LEDS
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <net/mac80211.h>
|
#include <net/mac80211.h>
|
||||||
|
|
||||||
|
#include "../ath/regd.h"
|
||||||
|
|
||||||
/* RX/TX descriptor hw structs
|
/* RX/TX descriptor hw structs
|
||||||
* TODO: Driver part should only see sw structs */
|
* TODO: Driver part should only see sw structs */
|
||||||
#include "desc.h"
|
#include "desc.h"
|
||||||
|
@ -1039,8 +1041,6 @@ struct ath5k_hw {
|
||||||
bool ah_5ghz;
|
bool ah_5ghz;
|
||||||
bool ah_2ghz;
|
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_modes ah_capabilities.cap_mode
|
||||||
#define ah_ee_version ah_capabilities.cap_eeprom.ee_version
|
#define ah_ee_version ah_capabilities.cap_eeprom.ee_version
|
||||||
|
|
||||||
|
@ -1065,6 +1065,7 @@ struct ath5k_hw {
|
||||||
u32 ah_gpio[AR5K_MAX_GPIO];
|
u32 ah_gpio[AR5K_MAX_GPIO];
|
||||||
int ah_gpio_npins;
|
int ah_gpio_npins;
|
||||||
|
|
||||||
|
struct ath_regulatory ah_regulatory;
|
||||||
struct ath5k_capabilities ah_capabilities;
|
struct ath5k_capabilities ah_capabilities;
|
||||||
|
|
||||||
struct ath5k_txq_info ah_txq[AR5K_NUM_TX_QUEUES];
|
struct ath5k_txq_info ah_txq[AR5K_NUM_TX_QUEUES];
|
||||||
|
|
|
@ -709,6 +709,15 @@ err_no_irq:
|
||||||
* Driver Initialization *
|
* 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
|
static int
|
||||||
ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
|
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);
|
memset(sc->bssidmask, 0xff, ETH_ALEN);
|
||||||
ath5k_hw_set_bssid_mask(sc->ah, sc->bssidmask);
|
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);
|
ret = ieee80211_register_hw(hw);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ATH5K_ERR(sc, "can't register ieee80211 hw\n");
|
ATH5K_ERR(sc, "can't register ieee80211 hw\n");
|
||||||
goto err_queues;
|
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);
|
ath5k_init_leds(sc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче