diff options
author | Lorenzo Bianconi <lorenzo.bianconi@redhat.com> | 2018-10-01 04:55:54 -0400 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2018-10-05 14:05:43 -0400 |
commit | d00efcf123871337c30b71d0cd2aaea6fa065cb8 (patch) | |
tree | f945de5eb4e8c2001b9cbc5e18bd626eb8f27fb5 /drivers/net/wireless | |
parent | e1c02eb16a9c742178874a7d1a08d300981715fb (diff) |
mt76x0: pci: add mt76x0e_cleanup routine
Add mt76x0e_cleanup routine to tidy up the device
during device removal
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x0/pci.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c b/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c index 876291dd3c1e..97bf8634b06d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c | |||
@@ -41,13 +41,8 @@ static int mt76x0e_start(struct ieee80211_hw *hw) | |||
41 | return 0; | 41 | return 0; |
42 | } | 42 | } |
43 | 43 | ||
44 | static void mt76x0e_stop(struct ieee80211_hw *hw) | 44 | static void mt76x0e_stop_hw(struct mt76x0_dev *dev) |
45 | { | 45 | { |
46 | struct mt76x0_dev *dev = hw->priv; | ||
47 | |||
48 | mutex_lock(&dev->mt76.mutex); | ||
49 | |||
50 | clear_bit(MT76_STATE_RUNNING, &dev->mt76.state); | ||
51 | cancel_delayed_work_sync(&dev->cal_work); | 46 | cancel_delayed_work_sync(&dev->cal_work); |
52 | cancel_delayed_work_sync(&dev->mac_work); | 47 | cancel_delayed_work_sync(&dev->mac_work); |
53 | 48 | ||
@@ -62,7 +57,15 @@ static void mt76x0e_stop(struct ieee80211_hw *hw) | |||
62 | 0, 1000)) | 57 | 0, 1000)) |
63 | dev_warn(dev->mt76.dev, "TX DMA did not stop\n"); | 58 | dev_warn(dev->mt76.dev, "TX DMA did not stop\n"); |
64 | mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_RX_DMA_EN); | 59 | mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_RX_DMA_EN); |
60 | } | ||
61 | |||
62 | static void mt76x0e_stop(struct ieee80211_hw *hw) | ||
63 | { | ||
64 | struct mt76x0_dev *dev = hw->priv; | ||
65 | 65 | ||
66 | mutex_lock(&dev->mt76.mutex); | ||
67 | clear_bit(MT76_STATE_RUNNING, &dev->mt76.state); | ||
68 | mt76x0e_stop_hw(dev); | ||
66 | mutex_unlock(&dev->mt76.mutex); | 69 | mutex_unlock(&dev->mt76.mutex); |
67 | } | 70 | } |
68 | 71 | ||
@@ -160,12 +163,23 @@ error: | |||
160 | return ret; | 163 | return ret; |
161 | } | 164 | } |
162 | 165 | ||
166 | static void mt76x0e_cleanup(struct mt76x0_dev *dev) | ||
167 | { | ||
168 | clear_bit(MT76_STATE_INITIALIZED, &dev->mt76.state); | ||
169 | mt76x0_chip_onoff(dev, false, false); | ||
170 | mt76x0e_stop_hw(dev); | ||
171 | mt76_dma_cleanup(&dev->mt76); | ||
172 | mt76x02_mcu_cleanup(&dev->mt76); | ||
173 | } | ||
174 | |||
163 | static void | 175 | static void |
164 | mt76x0e_remove(struct pci_dev *pdev) | 176 | mt76x0e_remove(struct pci_dev *pdev) |
165 | { | 177 | { |
166 | struct mt76_dev *mdev = pci_get_drvdata(pdev); | 178 | struct mt76_dev *mdev = pci_get_drvdata(pdev); |
179 | struct mt76x0_dev *dev = container_of(mdev, struct mt76x0_dev, mt76); | ||
167 | 180 | ||
168 | mt76_unregister_device(mdev); | 181 | mt76_unregister_device(mdev); |
182 | mt76x0e_cleanup(dev); | ||
169 | ieee80211_free_hw(mdev->hw); | 183 | ieee80211_free_hw(mdev->hw); |
170 | } | 184 | } |
171 | 185 | ||