Skip to content

Commit

Permalink
rtw88: make rtw_chip_ops::set_antenna return int
Browse files Browse the repository at this point in the history
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 <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200410100950.3199-2-yhchuang@realtek.com
  • Loading branch information
Yan-Hsuan Chuang authored and Kalle Valo committed Apr 15, 2020
1 parent 2fd5fdc commit b9ed7e9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
9 changes: 5 additions & 4 deletions drivers/net/wireless/realtek/rtw88/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 */
Expand Down
18 changes: 12 additions & 6 deletions drivers/net/wireless/realtek/rtw88/rtw8822b.c
Original file line number Diff line number Diff line change
Expand Up @@ -998,25 +998,31 @@ 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;

rtw_dbg(rtwdev, RTW_DBG_PHY, "config RF path, tx=0x%x rx=0x%x\n",
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)
Expand Down

0 comments on commit b9ed7e9

Please sign in to comment.