Commit 6ab079e2 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau

mt76: connac: add mt76_connac_power_save_sched in mt76_connac_pm_unref

Schedule power_save work running mt76_connac_pm_unref in order to reduce
power consumption
Tested-by: default avatarSean Wang <sean.wang@mediatek.com>
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 82453b1c
...@@ -81,7 +81,7 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget) ...@@ -81,7 +81,7 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget)
if (napi_complete(napi)) if (napi_complete(napi))
mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev)); mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev));
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
return 0; return 0;
} }
...@@ -99,7 +99,7 @@ static int mt7615_poll_rx(struct napi_struct *napi, int budget) ...@@ -99,7 +99,7 @@ static int mt7615_poll_rx(struct napi_struct *napi, int budget)
return 0; return 0;
} }
done = mt76_dma_rx_poll(napi, budget); done = mt76_dma_rx_poll(napi, budget);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
return done; return done;
} }
......
...@@ -693,7 +693,7 @@ static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw, ...@@ -693,7 +693,7 @@ static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
msta->n_rates = i; msta->n_rates = i;
if (mt76_connac_pm_ref(phy->mt76, &dev->pm)) { if (mt76_connac_pm_ref(phy->mt76, &dev->pm)) {
mt7615_mac_set_rates(phy, msta, NULL, msta->rates); mt7615_mac_set_rates(phy, msta, NULL, msta->rates);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(phy->mt76, &dev->pm);
} }
spin_unlock_bh(&dev->mt76.lock); spin_unlock_bh(&dev->mt76.lock);
} }
...@@ -709,7 +709,7 @@ void mt7615_tx_worker(struct mt76_worker *w) ...@@ -709,7 +709,7 @@ void mt7615_tx_worker(struct mt76_worker *w)
} }
mt76_tx_worker_run(&dev->mt76); mt76_tx_worker_run(&dev->mt76);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
} }
static void mt7615_tx(struct ieee80211_hw *hw, static void mt7615_tx(struct ieee80211_hw *hw,
...@@ -739,7 +739,7 @@ static void mt7615_tx(struct ieee80211_hw *hw, ...@@ -739,7 +739,7 @@ static void mt7615_tx(struct ieee80211_hw *hw,
if (mt76_connac_pm_ref(mphy, &dev->pm)) { if (mt76_connac_pm_ref(mphy, &dev->pm)) {
mt76_tx(mphy, control->sta, wcid, skb); mt76_tx(mphy, control->sta, wcid, skb);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(mphy, &dev->pm);
return; return;
} }
......
...@@ -98,7 +98,7 @@ mt7615_led_set_config(struct led_classdev *led_cdev, ...@@ -98,7 +98,7 @@ mt7615_led_set_config(struct led_classdev *led_cdev,
addr = mt7615_reg_map(dev, MT_LED_CTRL); addr = mt7615_reg_map(dev, MT_LED_CTRL);
mt76_wr(dev, addr, val); mt76_wr(dev, addr, val);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
} }
static int static int
......
...@@ -117,11 +117,15 @@ mt76_connac_pm_ref(struct mt76_phy *phy, struct mt76_connac_pm *pm) ...@@ -117,11 +117,15 @@ mt76_connac_pm_ref(struct mt76_phy *phy, struct mt76_connac_pm *pm)
} }
static inline void static inline void
mt76_connac_pm_unref(struct mt76_connac_pm *pm) mt76_connac_pm_unref(struct mt76_phy *phy, struct mt76_connac_pm *pm)
{ {
spin_lock_bh(&pm->wake.lock); spin_lock_bh(&pm->wake.lock);
pm->wake.count--;
pm->last_activity = jiffies; pm->last_activity = jiffies;
if (--pm->wake.count == 0 &&
test_bit(MT76_STATE_MCU_RUNNING, &phy->state))
mt76_connac_power_save_sched(phy, pm);
spin_unlock_bh(&pm->wake.lock); spin_unlock_bh(&pm->wake.lock);
} }
......
...@@ -74,7 +74,7 @@ static int mt7921_poll_tx(struct napi_struct *napi, int budget) ...@@ -74,7 +74,7 @@ static int mt7921_poll_tx(struct napi_struct *napi, int budget)
mt7921_tx_cleanup(dev); mt7921_tx_cleanup(dev);
if (napi_complete(napi)) if (napi_complete(napi))
mt7921_irq_enable(dev, MT_INT_TX_DONE_ALL); mt7921_irq_enable(dev, MT_INT_TX_DONE_ALL);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
return 0; return 0;
} }
...@@ -92,7 +92,7 @@ static int mt7921_poll_rx(struct napi_struct *napi, int budget) ...@@ -92,7 +92,7 @@ static int mt7921_poll_rx(struct napi_struct *napi, int budget)
return 0; return 0;
} }
done = mt76_dma_rx_poll(napi, budget); done = mt76_dma_rx_poll(napi, budget);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
return done; return done;
} }
......
...@@ -679,7 +679,7 @@ void mt7921_tx_worker(struct mt76_worker *w) ...@@ -679,7 +679,7 @@ void mt7921_tx_worker(struct mt76_worker *w)
} }
mt76_txq_schedule_all(&dev->mphy); mt76_txq_schedule_all(&dev->mphy);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(&dev->mphy, &dev->pm);
} }
static void mt7921_tx(struct ieee80211_hw *hw, static void mt7921_tx(struct ieee80211_hw *hw,
...@@ -709,7 +709,7 @@ static void mt7921_tx(struct ieee80211_hw *hw, ...@@ -709,7 +709,7 @@ static void mt7921_tx(struct ieee80211_hw *hw,
if (mt76_connac_pm_ref(mphy, &dev->pm)) { if (mt76_connac_pm_ref(mphy, &dev->pm)) {
mt76_tx(mphy, control->sta, wcid, skb); mt76_tx(mphy, control->sta, wcid, skb);
mt76_connac_pm_unref(&dev->pm); mt76_connac_pm_unref(mphy, &dev->pm);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment