ath9k: use the devres API for allocations/mappings
[deliverable/linux.git] / drivers / net / wireless / ath / ath9k / pci.c
index 7ae73fbd91361092f1a0590be0cbc2e2b0ecc9a4..0e0d39583837219a60a374d69494933b0ffc4e43 100644 (file)
@@ -147,7 +147,6 @@ static const struct ath_bus_ops ath_pci_bus_ops = {
 
 static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
-       void __iomem *mem;
        struct ath_softc *sc;
        struct ieee80211_hw *hw;
        u8 csz;
@@ -155,19 +154,19 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        int ret = 0;
        char hw_name[64];
 
-       if (pci_enable_device(pdev))
+       if (pcim_enable_device(pdev))
                return -EIO;
 
        ret =  pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
        if (ret) {
                pr_err("32-bit DMA not available\n");
-               goto err_dma;
+               return ret;
        }
 
        ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
        if (ret) {
                pr_err("32-bit DMA consistent DMA enable failed\n");
-               goto err_dma;
+               return ret;
        }
 
        /*
@@ -203,25 +202,16 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        if ((val & 0x0000ff00) != 0)
                pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
 
-       ret = pci_request_region(pdev, 0, "ath9k");
+       ret = pcim_iomap_regions(pdev, BIT(0), "ath9k");
        if (ret) {
                dev_err(&pdev->dev, "PCI memory region reserve error\n");
-               ret = -ENODEV;
-               goto err_region;
-       }
-
-       mem = pci_iomap(pdev, 0, 0);
-       if (!mem) {
-               pr_err("PCI memory map error\n") ;
-               ret = -EIO;
-               goto err_iomap;
+               return -ENODEV;
        }
 
        hw = ieee80211_alloc_hw(sizeof(struct ath_softc), &ath9k_ops);
        if (!hw) {
                dev_err(&pdev->dev, "No memory for ieee80211_hw\n");
-               ret = -ENOMEM;
-               goto err_alloc_hw;
+               return -ENOMEM;
        }
 
        SET_IEEE80211_DEV(hw, &pdev->dev);
@@ -230,7 +220,7 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        sc = hw->priv;
        sc->hw = hw;
        sc->dev = &pdev->dev;
-       sc->mem = mem;
+       sc->mem = pcim_iomap_table(pdev)[0];
 
        /* Will be cleared in ath9k_start() */
        set_bit(SC_OP_INVALID, &sc->sc_flags);
@@ -251,7 +241,7 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        ath9k_hw_name(sc->sc_ah, hw_name, sizeof(hw_name));
        wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
-                  hw_name, (unsigned long)mem, pdev->irq);
+                  hw_name, (unsigned long)sc->mem, pdev->irq);
 
        return 0;
 
@@ -259,14 +249,6 @@ err_init:
        free_irq(sc->irq, sc);
 err_irq:
        ieee80211_free_hw(hw);
-err_alloc_hw:
-       pci_iounmap(pdev, mem);
-err_iomap:
-       pci_release_region(pdev, 0);
-err_region:
-       /* Nothing */
-err_dma:
-       pci_disable_device(pdev);
        return ret;
 }
 
@@ -274,17 +256,12 @@ static void ath_pci_remove(struct pci_dev *pdev)
 {
        struct ieee80211_hw *hw = pci_get_drvdata(pdev);
        struct ath_softc *sc = hw->priv;
-       void __iomem *mem = sc->mem;
 
        if (!is_ath9k_unloaded)
                sc->sc_ah->ah_flags |= AH_UNPLUGGED;
        ath9k_deinit_device(sc);
        free_irq(sc->irq, sc);
        ieee80211_free_hw(sc->hw);
-
-       pci_iounmap(pdev, mem);
-       pci_disable_device(pdev);
-       pci_release_region(pdev, 0);
 }
 
 #ifdef CONFIG_PM_SLEEP
This page took 0.032816 seconds and 5 git commands to generate.