aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
diff options
context:
space:
mode:
authorSean Wang <sean.wang@mediatek.com>2021-01-28 03:33:53 +0800
committerFelix Fietkau <nbd@nbd.name>2021-01-29 18:10:00 +0100
commit1d8efc741df80be940e1584b5ac613dc03d58bd6 (patch)
tree1ef6623a46735eb7616c1a50f0b5e3b3c070e848 /drivers/net/wireless/mediatek/mt76/mt7921/pci.c
parentmt76: mt7921: rely on mt76_connac_mcu module for suspend and WoW support (diff)
downloadlinux-dev-1d8efc741df80be940e1584b5ac613dc03d58bd6.tar.xz
linux-dev-1d8efc741df80be940e1584b5ac613dc03d58bd6.zip
mt76: mt7921: introduce Runtime PM support
Introduce runtime PM to mt7921 driver Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/mt7921/pci.c')
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7921/pci.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index ff5fbc1e23aa..5f28e00bba45 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -176,6 +176,10 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)
bool hif_suspend;
int i, err;
+ err = mt76_connac_pm_wake(&dev->mphy, &dev->pm);
+ if (err < 0)
+ return err;
+
hif_suspend = !test_bit(MT76_STATE_SUSPEND, &dev->mphy.state);
if (hif_suspend) {
err = mt76_connac_mcu_set_hif_suspend(mdev, true);
@@ -210,6 +214,10 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)
if (err)
goto restore;
+ err = mt7921_mcu_drv_pmctrl(dev);
+ if (err)
+ goto restore;
+
return 0;
restore:
@@ -229,6 +237,10 @@ static int mt7921_pci_resume(struct pci_dev *pdev)
struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
int i, err;
+ err = mt7921_mcu_fw_pmctrl(dev);
+ if (err < 0)
+ return err;
+
err = pci_set_power_state(pdev, PCI_D0);
if (err)
return err;