Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f769c36b authored by Bob Copeland's avatar Bob Copeland Committed by John W. Linville
Browse files

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: default avatarBob Copeland <me@bobcopeland.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e3bb249b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
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
+3 −2
Original line number Diff line number Diff line
@@ -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];
+20 −0
Original line number Diff line number Diff line
@@ -709,6 +709,15 @@ ath5k_pci_resume(struct pci_dev *pdev)
* 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;