2020-04-10 10:10:37

by Tony Chuang

[permalink] [raw]
Subject: [PATCH 1/2] rtw88: make rtw_chip_ops::set_antenna return int

From: Yan-Hsuan Chuang <[email protected]>

To support ieee80211_ops::set_antenna, the driver can decide if the
antenna mask is accepted, otherwise it can return an error code.
Because each chip could have different limitations, let the chip
check the mask and return.

Also the antenna mask for TRX from upper space is 32-bit long.
Change the antenna mask for rtw_chip_ops::set_antenna from u8 to u32.

Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
drivers/net/wireless/realtek/rtw88/main.h | 9 +++++----
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 18 ++++++++++++------
2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index c6b590fdb573..c9edcabd7c42 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -798,8 +798,9 @@ struct rtw_chip_ops {
void (*set_tx_power_index)(struct rtw_dev *rtwdev);
int (*rsvd_page_dump)(struct rtw_dev *rtwdev, u8 *buf, u32 offset,
u32 size);
- void (*set_antenna)(struct rtw_dev *rtwdev, u8 antenna_tx,
- u8 antenna_rx);
+ int (*set_antenna)(struct rtw_dev *rtwdev,
+ u32 antenna_tx,
+ u32 antenna_rx);
void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable);
void (*false_alarm_statistics)(struct rtw_dev *rtwdev);
void (*phy_calibration)(struct rtw_dev *rtwdev);
@@ -1567,8 +1568,8 @@ struct rtw_hal {
u8 sec_ch_offset;
u8 rf_type;
u8 rf_path_num;
- u8 antenna_tx;
- u8 antenna_rx;
+ u32 antenna_tx;
+ u32 antenna_rx;
u8 bfee_sts_cap;

/* protect tx power section */
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
index 4dd7d4143b04..c02f3a730369 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
@@ -998,8 +998,9 @@ static bool rtw8822b_check_rf_path(u8 antenna)
}
}

-static void rtw8822b_set_antenna(struct rtw_dev *rtwdev, u8 antenna_tx,
- u8 antenna_rx)
+static int rtw8822b_set_antenna(struct rtw_dev *rtwdev,
+ u32 antenna_tx,
+ u32 antenna_rx)
{
struct rtw_hal *hal = &rtwdev->hal;

@@ -1007,16 +1008,21 @@ static void rtw8822b_set_antenna(struct rtw_dev *rtwdev, u8 antenna_tx,
antenna_tx, antenna_rx);

if (!rtw8822b_check_rf_path(antenna_tx)) {
- rtw_info(rtwdev, "unsupport tx path, set to default path ab\n");
- antenna_tx = BB_PATH_AB;
+ rtw_info(rtwdev, "unsupport tx path 0x%x\n", antenna_tx);
+ return -EINVAL;
}
+
if (!rtw8822b_check_rf_path(antenna_rx)) {
- rtw_info(rtwdev, "unsupport rx path, set to default path ab\n");
- antenna_rx = BB_PATH_AB;
+ rtw_info(rtwdev, "unsupport rx path 0x%x\n", antenna_rx);
+ return -EINVAL;
}
+
hal->antenna_tx = antenna_tx;
hal->antenna_rx = antenna_rx;
+
rtw8822b_config_trx_mode(rtwdev, antenna_tx, antenna_rx, false);
+
+ return 0;
}

static void rtw8822b_cfg_ldo25(struct rtw_dev *rtwdev, bool enable)
--
2.17.1


2020-04-15 22:38:49

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 1/2] rtw88: make rtw_chip_ops::set_antenna return int

<[email protected]> wrote:

> From: Yan-Hsuan Chuang <[email protected]>
>
> To support ieee80211_ops::set_antenna, the driver can decide if the
> antenna mask is accepted, otherwise it can return an error code.
> Because each chip could have different limitations, let the chip
> check the mask and return.
>
> Also the antenna mask for TRX from upper space is 32-bit long.
> Change the antenna mask for rtw_chip_ops::set_antenna from u8 to u32.
>
> Signed-off-by: Yan-Hsuan Chuang <[email protected]>

2 patches applied to wireless-drivers-next.git, thanks.

b9ed7e9505ba rtw88: make rtw_chip_ops::set_antenna return int
297bcf8222f2 rtw88: add support for set/get antennas

--
https://patchwork.kernel.org/patch/11483097/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches