ath9k: Store subsystem id in struct hw_version
authorVasanthakumar Thiagarajan <vasanth@atheros.com>
Wed, 9 Sep 2009 09:55:49 +0000 (15:25 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 9 Sep 2009 15:25:25 +0000 (11:25 -0400)
This subsystem id will be used later to turn on the btcoex
support.

Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ahb.c
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/hw.h
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/pci.c

index 7dc6301ae2013a159542693c695cdbd774176ec8..2ad7d0280f7abf14f5dab2b64d17082ba68da4a0 100644 (file)
@@ -119,7 +119,7 @@ static int ath_ahb_probe(struct platform_device *pdev)
        sc->bus_ops = &ath_ahb_bus_ops;
        sc->irq = irq;
 
-       ret = ath_init_device(AR5416_AR9100_DEVID, sc);
+       ret = ath_init_device(AR5416_AR9100_DEVID, sc, 0x0);
        if (ret) {
                dev_err(&pdev->dev, "failed to initialize device\n");
                goto err_free_hw;
index 1c68a9da22d461b0db424df392068cabc788f092..1d59f10f68da77fd8066028fb9998a93106c5aa2 100644 (file)
@@ -658,7 +658,7 @@ extern struct ieee80211_ops ath9k_ops;
 
 irqreturn_t ath_isr(int irq, void *dev);
 void ath_cleanup(struct ath_softc *sc);
-int ath_init_device(u16 devid, struct ath_softc *sc);
+int ath_init_device(u16 devid, struct ath_softc *sc, u16 subsysid);
 void ath_detach(struct ath_softc *sc);
 const char *ath_mac_bb_name(u32 mac_bb_version);
 const char *ath_rf_name(u16 rf_version);
index a592f1a46ecd8cca6b03146b76eb4083dde31799..64ea547adef027b5784245254e3145e666f012aa 100644 (file)
@@ -390,6 +390,7 @@ struct ath9k_hw_version {
        u16 phyRev;
        u16 analog5GhzRev;
        u16 analog2GhzRev;
+       u16 subsysid;
 };
 
 /* Generic TSF timer definitions */
index ce011ab5e89dbbd0af6d5a844e3314e8a7b37ff1..3dc7b5a13e64d49bc245d38a82765a2ed56f647b 100644 (file)
@@ -1310,7 +1310,7 @@ static int ath9k_reg_notifier(struct wiphy *wiphy,
  * to allow the separation between hardware specific
  * variables (now in ath_hw) and driver specific variables.
  */
-static int ath_init_softc(u16 devid, struct ath_softc *sc)
+static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid)
 {
        struct ath_hw *ah = NULL;
        int r = 0, i;
@@ -1348,6 +1348,7 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc)
 
        ah->ah_sc = sc;
        ah->hw_version.devid = devid;
+       ah->hw_version.subsysid = subsysid;
        sc->sc_ah = ah;
 
        r = ath9k_hw_init(ah);
@@ -1577,7 +1578,7 @@ void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
 }
 
 /* Device driver core initialization */
-int ath_init_device(u16 devid, struct ath_softc *sc)
+int ath_init_device(u16 devid, struct ath_softc *sc, u16 subsysid)
 {
        struct ieee80211_hw *hw = sc->hw;
        int error = 0, i;
@@ -1585,7 +1586,7 @@ int ath_init_device(u16 devid, struct ath_softc *sc)
 
        DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n");
 
-       error = ath_init_softc(devid, sc);
+       error = ath_init_softc(devid, sc, subsysid);
        if (error != 0)
                return error;
 
index 8b288141d4c145c836b35dbd893f5c42a6a9e16a..903dd8ad9d430820a67668754d20c4abd48bbf41 100644 (file)
@@ -88,6 +88,7 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct ath_softc *sc;
        struct ieee80211_hw *hw;
        u8 csz;
+       u16 subsysid;
        u32 val;
        int ret = 0;
        struct ath_hw *ah;
@@ -178,7 +179,8 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        sc->mem = mem;
        sc->bus_ops = &ath_pci_bus_ops;
 
-       ret = ath_init_device(id->device, sc);
+       pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &subsysid);
+       ret = ath_init_device(id->device, sc, subsysid);
        if (ret) {
                dev_err(&pdev->dev, "failed to initialize device\n");
                goto bad3;