rtw88: 8723d: Add shutdown callback to disable BT USB suspend
Without this patch, wifi card can't initialize properly due to BT in USB suspend state. So, we disable BT USB suspend (wakeup) in shutdown callback that is the moment before rebooting. To save BT USB power, we can't do this in 'remove' callback. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200512102621.5148-5-yhchuang@realtek.com
This commit is contained in:
@@ -795,6 +795,7 @@ struct rtw_regulatory {
|
|||||||
|
|
||||||
struct rtw_chip_ops {
|
struct rtw_chip_ops {
|
||||||
int (*mac_init)(struct rtw_dev *rtwdev);
|
int (*mac_init)(struct rtw_dev *rtwdev);
|
||||||
|
void (*shutdown)(struct rtw_dev *rtwdev);
|
||||||
int (*read_efuse)(struct rtw_dev *rtwdev, u8 *map);
|
int (*read_efuse)(struct rtw_dev *rtwdev, u8 *map);
|
||||||
void (*phy_set_param)(struct rtw_dev *rtwdev);
|
void (*phy_set_param)(struct rtw_dev *rtwdev);
|
||||||
void (*set_channel)(struct rtw_dev *rtwdev, u8 channel,
|
void (*set_channel)(struct rtw_dev *rtwdev, u8 channel,
|
||||||
|
|||||||
@@ -1573,6 +1573,22 @@ static void rtw_pci_remove(struct pci_dev *pdev)
|
|||||||
ieee80211_free_hw(hw);
|
ieee80211_free_hw(hw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rtw_pci_shutdown(struct pci_dev *pdev)
|
||||||
|
{
|
||||||
|
struct ieee80211_hw *hw = pci_get_drvdata(pdev);
|
||||||
|
struct rtw_dev *rtwdev;
|
||||||
|
struct rtw_chip_info *chip;
|
||||||
|
|
||||||
|
if (!hw)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rtwdev = hw->priv;
|
||||||
|
chip = rtwdev->chip;
|
||||||
|
|
||||||
|
if (chip->ops->shutdown)
|
||||||
|
chip->ops->shutdown(rtwdev);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct pci_device_id rtw_pci_id_table[] = {
|
static const struct pci_device_id rtw_pci_id_table[] = {
|
||||||
#ifdef CONFIG_RTW88_8822BE
|
#ifdef CONFIG_RTW88_8822BE
|
||||||
{ RTK_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xB822, rtw8822b_hw_spec) },
|
{ RTK_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xB822, rtw8822b_hw_spec) },
|
||||||
@@ -1593,6 +1609,7 @@ static struct pci_driver rtw_pci_driver = {
|
|||||||
.probe = rtw_pci_probe,
|
.probe = rtw_pci_probe,
|
||||||
.remove = rtw_pci_remove,
|
.remove = rtw_pci_remove,
|
||||||
.driver.pm = &rtw_pm_ops,
|
.driver.pm = &rtw_pm_ops,
|
||||||
|
.shutdown = rtw_pci_shutdown,
|
||||||
};
|
};
|
||||||
module_pci_driver(rtw_pci_driver);
|
module_pci_driver(rtw_pci_driver);
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,7 @@
|
|||||||
#define BIT_DBG_GNT_WL_BT BIT(27)
|
#define BIT_DBG_GNT_WL_BT BIT(27)
|
||||||
#define BIT_LTE_MUX_CTRL_PATH BIT(26)
|
#define BIT_LTE_MUX_CTRL_PATH BIT(26)
|
||||||
#define REG_HCI_OPT_CTRL 0x0074
|
#define REG_HCI_OPT_CTRL 0x0074
|
||||||
|
#define BIT_USB_SUS_DIS BIT(8)
|
||||||
|
|
||||||
#define REG_AFE_CTRL_4 0x0078
|
#define REG_AFE_CTRL_4 0x0078
|
||||||
#define BIT_CK320M_AFE_EN BIT(4)
|
#define BIT_CK320M_AFE_EN BIT(4)
|
||||||
|
|||||||
@@ -549,6 +549,11 @@ static int rtw8723d_mac_init(struct rtw_dev *rtwdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rtw8723d_shutdown(struct rtw_dev *rtwdev)
|
||||||
|
{
|
||||||
|
rtw_write16_set(rtwdev, REG_HCI_OPT_CTRL, BIT_USB_SUS_DIS);
|
||||||
|
}
|
||||||
|
|
||||||
static void rtw8723d_cfg_ldo25(struct rtw_dev *rtwdev, bool enable)
|
static void rtw8723d_cfg_ldo25(struct rtw_dev *rtwdev, bool enable)
|
||||||
{
|
{
|
||||||
u8 ldo_pwr;
|
u8 ldo_pwr;
|
||||||
@@ -1790,6 +1795,7 @@ static struct rtw_chip_ops rtw8723d_ops = {
|
|||||||
.query_rx_desc = rtw8723d_query_rx_desc,
|
.query_rx_desc = rtw8723d_query_rx_desc,
|
||||||
.set_channel = rtw8723d_set_channel,
|
.set_channel = rtw8723d_set_channel,
|
||||||
.mac_init = rtw8723d_mac_init,
|
.mac_init = rtw8723d_mac_init,
|
||||||
|
.shutdown = rtw8723d_shutdown,
|
||||||
.read_rf = rtw_phy_read_rf_sipi,
|
.read_rf = rtw_phy_read_rf_sipi,
|
||||||
.write_rf = rtw_phy_write_rf_reg_sipi,
|
.write_rf = rtw_phy_write_rf_reg_sipi,
|
||||||
.set_tx_power_index = rtw8723d_set_tx_power_index,
|
.set_tx_power_index = rtw8723d_set_tx_power_index,
|
||||||
|
|||||||
Reference in New Issue
Block a user