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

Commit 3a9dddea authored by Felix Fietkau's avatar Felix Fietkau Committed by John W. Linville
Browse files

ath5k: disable 5 GHz support for the dualband PHY chip on dual-radio AR5312



There are two variants of AR5312 dual-band devices, one single-radio
and the other one dual-radio. On the dual-radio board, the first MAC
only supports 5 GHz, even though it has a dual-band PHY. The 2.4 GHz
part of this phy is used in pass-through mode, connecting the second
MAC with the second PHY.
Disable 2.4 GHz for the first MAC on an AR5312, but only if the board
configuration indicates a dual-radio device.

Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 32377b6c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -160,6 +160,16 @@ static int ath_ahb_probe(struct platform_device *pdev)
		else
			reg |= AR5K_AR5312_ENABLE_WLAN1;
		__raw_writel(reg, (void __iomem *) AR5K_AR5312_ENABLE);

		/*
		 * On a dual-band AR5312, the multiband radio is only
		 * used as pass-through. Disable 2 GHz support in the
		 * driver for it
		 */
		if (to_platform_device(sc->dev)->id == 0 &&
		    (bcfg->config->flags & (BD_WLAN0|BD_WLAN1)) ==
		     (BD_WLAN1|BD_WLAN0))
			__set_bit(ATH_STAT_2G_DISABLED, sc->status);
	}

	ret = ath5k_init_softc(sc, &ath_ahb_bus_ops);
+5 −0
Original line number Diff line number Diff line
@@ -313,6 +313,11 @@ int ath5k_hw_init(struct ath5k_softc *sc)
		goto err;
	}

	if (test_bit(ATH_STAT_2G_DISABLED, sc->status)) {
		__clear_bit(AR5K_MODE_11B, ah->ah_capabilities.cap_mode);
		__clear_bit(AR5K_MODE_11G, ah->ah_capabilities.cap_mode);
	}

	/* Crypto settings */
	common->keymax = (sc->ah->ah_version == AR5K_AR5210 ?
			  AR5K_KEYTABLE_SIZE_5210 : AR5K_KEYTABLE_SIZE_5211);
+2 −1
Original line number Diff line number Diff line
@@ -193,12 +193,13 @@ struct ath5k_softc {
	dma_addr_t		desc_daddr;	/* DMA (physical) address */
	size_t			desc_len;	/* size of TX/RX descriptors */

	DECLARE_BITMAP(status, 5);
	DECLARE_BITMAP(status, 6);
#define ATH_STAT_INVALID	0		/* disable hardware accesses */
#define ATH_STAT_MRRETRY	1		/* multi-rate retry support */
#define ATH_STAT_PROMISC	2
#define ATH_STAT_LEDSOFT	3		/* enable LED gpio status */
#define ATH_STAT_STARTED	4		/* opened & irqs enabled */
#define ATH_STAT_2G_DISABLED	5		/* multiband radio without 2G */

	unsigned int		filter_flags;	/* HW flags, AR5K_RX_FILTER_* */
	struct ieee80211_channel *curchan;	/* current h/w channel */