From: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
To: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Felix Fietkau <nbd@nbd.name>, linux-wireless@vger.kernel.org
Subject: Re: [PATCH] mt76x0: antenna select corrections
Date: Thu, 18 Oct 2018 11:13:36 +0200 [thread overview]
Message-ID: <20181018091335.GB4938@localhost.localdomain> (raw)
In-Reply-To: <1539850059-11886-1-git-send-email-sgruszka@redhat.com>
> Update mt76x0_phy_ant_select() to conform vendor driver, most notably
> add dual antenna mode support, read configuration from EEPROM and
> move ant select out of channel config to init phase. Plus small MT7630E
> quirk for MT_CMB_CTRL register which vendor driver dedicated to this
> chip do.
>
> This make MT7630E workable with mt76x0e driver and do not cause any
> problems on MT7610U for me.
>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 52 ++++++++++++++++------
> .../net/wireless/mediatek/mt76/mt76x02_eeprom.h | 10 ++---
> 2 files changed, 44 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> index 37e1ead1dc85..143cbe6d7899 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> @@ -431,21 +431,47 @@ int mt76x0_phy_wait_bbp_ready(struct mt76x02_dev *dev)
>
> static void mt76x0_phy_ant_select(struct mt76x02_dev *dev)
> {
> - struct ieee80211_channel *chan = dev->mt76.chandef.chan;
> -
> - /* single antenna mode */
> - if (chan->band == NL80211_BAND_2GHZ) {
> - mt76_rmw(dev, MT_COEXCFG3,
> - BIT(5) | BIT(4) | BIT(3) | BIT(2), BIT(1));
> - mt76_rmw(dev, MT_WLAN_FUN_CTRL, BIT(5), BIT(6));
> + u16 ee_ant = mt76x02_eeprom_get(dev, MT_EE_ANTENNA);
> + u16 nic_conf2 = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_2);
> + u32 wlan, coex3, cmb;
> + bool ant_div;
> +
> + wlan = mt76_rr(dev, MT_WLAN_FUN_CTRL);
> + cmb = mt76_rr(dev, MT_CMB_CTRL);
> + coex3 = mt76_rr(dev, MT_COEXCFG3);
> +
> + cmb &= ~(BIT(15) | BIT(12));
I guess should be BIT(14) here (at least for single antenna mode)
> + wlan &= ~(BIT(6) | BIT(5));
> + coex3 &= ~GENMASK(5, 1);
according to vendor sdk BIT(1) should not cleared if device supports 5GHz band
(signle antenna mode)
Regards,
Lorenzo
> +
> + if (ee_ant & MT_EE_ANTENNA_DUAL) {
> + /* dual antenna mode */
> + ant_div = !(nic_conf2 & MT_EE_NIC_CONF_2_ANT_OPT) &&
> + (nic_conf2 & MT_EE_NIC_CONF_2_ANT_DIV);
> + if (ant_div)
> + cmb |= BIT(12);
> + else
> + coex3 |= BIT(4);
> + coex3 |= BIT(3);
> + if (dev->mt76.cap.has_2ghz)
> + wlan |= BIT(6);
> } else {
> - mt76_rmw(dev, MT_COEXCFG3, BIT(5) | BIT(2),
> - BIT(4) | BIT(3));
> - mt76_clear(dev, MT_WLAN_FUN_CTRL,
> - BIT(6) | BIT(5));
> + /* sigle antenna mode */
> + if (dev->mt76.cap.has_5ghz) {
> + coex3 |= BIT(3) | BIT(4);
> + } else {
> + wlan |= BIT(6);
> + coex3 |= BIT(1);
> + }
> }
> - mt76_clear(dev, MT_CMB_CTRL, BIT(14) | BIT(12));
> +
> + if (is_mt7630(dev))
> + cmb |= BIT(14) | BIT(11);
> +
> + mt76_wr(dev, MT_WLAN_FUN_CTRL, wlan);
> + mt76_wr(dev, MT_CMB_CTRL, cmb);
> mt76_clear(dev, MT_COEXCFG0, BIT(2));
> + mt76_wr(dev, MT_COEXCFG3, coex3);
> }
>
> static void
> @@ -612,7 +638,6 @@ int mt76x0_phy_set_channel(struct mt76x02_dev *dev,
> mt76x02_phy_set_bw(dev, chandef->width, ch_group_index);
> mt76x02_phy_set_band(dev, chandef->chan->band,
> ch_group_index & 1);
> - mt76x0_phy_ant_select(dev);
>
> mt76_rmw(dev, MT_EXT_CCA_CFG,
> (MT_EXT_CCA_CFG_CCA0 |
> @@ -795,6 +820,7 @@ void mt76x0_phy_init(struct mt76x02_dev *dev)
> {
> INIT_DELAYED_WORK(&dev->cal_work, mt76x0_phy_calibration_work);
>
> + mt76x0_phy_ant_select(dev);
> mt76x0_phy_rf_init(dev);
> mt76x02_phy_set_rxpath(dev);
> mt76x02_phy_set_txdac(dev);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.h b/drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.h
> index b3ec74835d10..1de041590050 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.h
> @@ -25,6 +25,7 @@ enum mt76x02_eeprom_field {
> MT_EE_VERSION = 0x002,
> MT_EE_MAC_ADDR = 0x004,
> MT_EE_PCI_ID = 0x00A,
> + MT_EE_ANTENNA = 0x022,
> MT_EE_NIC_CONF_0 = 0x034,
> MT_EE_NIC_CONF_1 = 0x036,
> MT_EE_COUNTRY_REGION_5GHZ = 0x038,
> @@ -104,6 +105,8 @@ enum mt76x02_eeprom_field {
> __MT_EE_MAX
> };
>
> +#define MT_EE_ANTENNA_DUAL BIT(15)
> +
> #define MT_EE_NIC_CONF_0_RX_PATH GENMASK(3, 0)
> #define MT_EE_NIC_CONF_0_TX_PATH GENMASK(7, 4)
> #define MT_EE_NIC_CONF_0_PA_TYPE GENMASK(9, 8)
> @@ -118,12 +121,9 @@ enum mt76x02_eeprom_field {
> #define MT_EE_NIC_CONF_1_LNA_EXT_5G BIT(3)
> #define MT_EE_NIC_CONF_1_TX_ALC_EN BIT(13)
>
> -#define MT_EE_NIC_CONF_2_RX_STREAM GENMASK(3, 0)
> -#define MT_EE_NIC_CONF_2_TX_STREAM GENMASK(7, 4)
> -#define MT_EE_NIC_CONF_2_HW_ANTDIV BIT(8)
> +#define MT_EE_NIC_CONF_2_ANT_OPT BIT(3)
> +#define MT_EE_NIC_CONF_2_ANT_DIV BIT(4)
> #define MT_EE_NIC_CONF_2_XTAL_OPTION GENMASK(10, 9)
> -#define MT_EE_NIC_CONF_2_TEMP_DISABLE BIT(11)
> -#define MT_EE_NIC_CONF_2_COEX_METHOD GENMASK(15, 13)
>
> #define MT_EFUSE_USAGE_MAP_SIZE (MT_EE_USAGE_MAP_END - \
> MT_EE_USAGE_MAP_START + 1)
> --
> 1.9.3
>
next prev parent reply other threads:[~2018-10-18 9:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-18 8:07 [PATCH] mt76x0: antenna select corrections Stanislaw Gruszka
2018-10-18 9:13 ` Lorenzo Bianconi [this message]
2018-10-18 9:21 ` Stanislaw Gruszka
2018-10-18 9:28 ` Lorenzo Bianconi
2018-10-18 9:40 ` Stanislaw Gruszka
2018-10-18 9:45 ` Lorenzo Bianconi
2018-10-18 9:53 ` Stanislaw Gruszka
2018-10-18 9:54 ` Lorenzo Bianconi
2018-10-18 10:02 ` Lorenzo Bianconi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181018091335.GB4938@localhost.localdomain \
--to=lorenzo.bianconi@redhat.com \
--cc=linux-wireless@vger.kernel.org \
--cc=nbd@nbd.name \
--cc=sgruszka@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox