diff mbox series

[v2,5/5] wcn36xx: Set PHY into correct mode for 80MHz channel width

Message ID 20200829033947.2167817-6-bryan.odonoghue@linaro.org (mailing list archive)
State Superseded
Delegated to: Kalle Valo
Headers show
Series wcn36xx: PHY modifications to support 80MHz operation | expand

Commit Message

Bryan O'Donoghue Aug. 29, 2020, 3:39 a.m. UTC
For the 80MHz channel we need to set the PHY mode to one of four PHY modes
that span the 80MHz range.

This patch latches the hw_value PHY field previously defined for 5GHz
channels directly to the parameter passed to the firmware.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 drivers/net/wireless/ath/wcn36xx/smd.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Loic Poulain Aug. 31, 2020, 10:08 a.m. UTC | #1
Hi Bryan,

On Sat, 29 Aug 2020 at 05:39, Bryan O'Donoghue
<bryan.odonoghue@linaro.org> wrote:
>
> For the 80MHz channel we need to set the PHY mode to one of four PHY modes
> that span the 80MHz range.

What about 40Mhz bonding?


>
> This patch latches the hw_value PHY field previously defined for 5GHz
> channels directly to the parameter passed to the firmware.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>  drivers/net/wireless/ath/wcn36xx/smd.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
> index 729708d96586..4b967f8ba949 100644
> --- a/drivers/net/wireless/ath/wcn36xx/smd.c
> +++ b/drivers/net/wireless/ath/wcn36xx/smd.c
> @@ -1493,6 +1493,7 @@ int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, struct ieee80211_vif *vif,
>         struct wcn36xx_hal_config_bss_params_v1 *bss;
>         struct wcn36xx_hal_config_bss_params bss_v0;
>         struct wcn36xx_hal_config_sta_params_v1 *sta;
> +       struct cfg80211_chan_def *chandef;
>         int ret;
>
>         msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
> @@ -1536,7 +1537,13 @@ int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, struct ieee80211_vif *vif,
>         bss->dtim_period = bss_v0.dtim_period;
>         bss->tx_channel_width_set = bss_v0.tx_channel_width_set;
>         bss->oper_channel = bss_v0.oper_channel;
> -       bss->ext_channel = bss_v0.ext_channel;
> +
> +       if (wcn->hw->conf.chandef.width == NL80211_CHAN_WIDTH_80) {
> +               chandef = &wcn->hw->conf.chandef;
> +               bss->ext_channel = HW_VALUE_PHY(chandef->chan->hw_value);
> +       } else {
> +               bss->ext_channel = bss_v0.ext_channel;
> +       }
>
>         bss->reserved = bss_v0.reserved;
>
> --
> 2.27.0
>
Bryan O'Donoghue Aug. 31, 2020, 11:30 a.m. UTC | #2
On 31/08/2020 11:08, Loic Poulain wrote:
> Hi Bryan,
> 
> On Sat, 29 Aug 2020 at 05:39, Bryan O'Donoghue
> <bryan.odonoghue@linaro.org> wrote:
>>
>> For the 80MHz channel we need to set the PHY mode to one of four PHY modes
>> that span the 80MHz range.
> 
> What about 40Mhz bonding?

The existing code handles 40MHz HT in wcn36xx_smd_join()
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index 729708d96586..4b967f8ba949 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -1493,6 +1493,7 @@  int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 	struct wcn36xx_hal_config_bss_params_v1 *bss;
 	struct wcn36xx_hal_config_bss_params bss_v0;
 	struct wcn36xx_hal_config_sta_params_v1 *sta;
+	struct cfg80211_chan_def *chandef;
 	int ret;
 
 	msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
@@ -1536,7 +1537,13 @@  int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 	bss->dtim_period = bss_v0.dtim_period;
 	bss->tx_channel_width_set = bss_v0.tx_channel_width_set;
 	bss->oper_channel = bss_v0.oper_channel;
-	bss->ext_channel = bss_v0.ext_channel;
+
+	if (wcn->hw->conf.chandef.width == NL80211_CHAN_WIDTH_80) {
+		chandef = &wcn->hw->conf.chandef;
+		bss->ext_channel = HW_VALUE_PHY(chandef->chan->hw_value);
+	} else {
+		bss->ext_channel = bss_v0.ext_channel;
+	}
 
 	bss->reserved = bss_v0.reserved;