|
@@ -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;
|