aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath9k/main.c24
-rw-r--r--drivers/net/wireless/orinoco/main.c19
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_dev.c12
3 files changed, 44 insertions, 11 deletions
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
index fc3460f8f7fc..7d7537e2738e 100644
--- a/drivers/net/wireless/ath9k/main.c
+++ b/drivers/net/wireless/ath9k/main.c
@@ -1558,6 +1558,7 @@ bad2:
1558bad: 1558bad:
1559 if (ah) 1559 if (ah)
1560 ath9k_hw_detach(ah); 1560 ath9k_hw_detach(ah);
1561 ath9k_exit_debug(sc);
1561 1562
1562 return error; 1563 return error;
1563} 1564}
@@ -1565,7 +1566,7 @@ bad:
1565int ath_attach(u16 devid, struct ath_softc *sc) 1566int ath_attach(u16 devid, struct ath_softc *sc)
1566{ 1567{
1567 struct ieee80211_hw *hw = sc->hw; 1568 struct ieee80211_hw *hw = sc->hw;
1568 int error = 0; 1569 int error = 0, i;
1569 1570
1570 DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n"); 1571 DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n");
1571 1572
@@ -1617,11 +1618,11 @@ int ath_attach(u16 devid, struct ath_softc *sc)
1617 /* initialize tx/rx engine */ 1618 /* initialize tx/rx engine */
1618 error = ath_tx_init(sc, ATH_TXBUF); 1619 error = ath_tx_init(sc, ATH_TXBUF);
1619 if (error != 0) 1620 if (error != 0)
1620 goto detach; 1621 goto error_attach;
1621 1622
1622 error = ath_rx_init(sc, ATH_RXBUF); 1623 error = ath_rx_init(sc, ATH_RXBUF);
1623 if (error != 0) 1624 if (error != 0)
1624 goto detach; 1625 goto error_attach;
1625 1626
1626#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) 1627#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
1627 /* Initialze h/w Rfkill */ 1628 /* Initialze h/w Rfkill */
@@ -1629,8 +1630,9 @@ int ath_attach(u16 devid, struct ath_softc *sc)
1629 INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll); 1630 INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll);
1630 1631
1631 /* Initialize s/w rfkill */ 1632 /* Initialize s/w rfkill */
1632 if (ath_init_sw_rfkill(sc)) 1633 error = ath_init_sw_rfkill(sc);
1633 goto detach; 1634 if (error)
1635 goto error_attach;
1634#endif 1636#endif
1635 1637
1636 if (ath9k_is_world_regd(sc->sc_ah)) { 1638 if (ath9k_is_world_regd(sc->sc_ah)) {
@@ -1664,8 +1666,16 @@ int ath_attach(u16 devid, struct ath_softc *sc)
1664 1666
1665 1667
1666 return 0; 1668 return 0;
1667detach: 1669
1668 ath_detach(sc); 1670error_attach:
1671 /* cleanup tx queues */
1672 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
1673 if (ATH_TXQ_SETUP(sc, i))
1674 ath_tx_cleanupq(sc, &sc->tx.txq[i]);
1675
1676 ath9k_hw_detach(sc->sc_ah);
1677 ath9k_exit_debug(sc);
1678
1669 return error; 1679 return error;
1670} 1680}
1671 1681
diff --git a/drivers/net/wireless/orinoco/main.c b/drivers/net/wireless/orinoco/main.c
index 54dfc4540b82..e9b1db77a735 100644
--- a/drivers/net/wireless/orinoco/main.c
+++ b/drivers/net/wireless/orinoco/main.c
@@ -2076,8 +2076,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
2076 2076
2077 return NOTIFY_DONE; 2077 return NOTIFY_DONE;
2078} 2078}
2079
2080static void orinoco_register_pm_notifier(struct orinoco_private *priv)
2081{
2082 priv->pm_notifier.notifier_call = orinoco_pm_notifier;
2083 register_pm_notifier(&priv->pm_notifier);
2084}
2085
2086static void orinoco_unregister_pm_notifier(struct orinoco_private *priv)
2087{
2088 unregister_pm_notifier(&priv->pm_notifier);
2089}
2079#else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */ 2090#else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */
2080#define orinoco_pm_notifier NULL 2091#define orinoco_register_pm_notifier(priv) do { } while(0)
2092#define orinoco_unregister_pm_notifier(priv) do { } while(0)
2081#endif 2093#endif
2082 2094
2083/********************************************************************/ 2095/********************************************************************/
@@ -2572,8 +2584,7 @@ struct net_device
2572 priv->cached_fw = NULL; 2584 priv->cached_fw = NULL;
2573 2585
2574 /* Register PM notifiers */ 2586 /* Register PM notifiers */
2575 priv->pm_notifier.notifier_call = orinoco_pm_notifier; 2587 orinoco_register_pm_notifier(priv);
2576 register_pm_notifier(&priv->pm_notifier);
2577 2588
2578 return dev; 2589 return dev;
2579} 2590}
@@ -2598,7 +2609,7 @@ void free_orinocodev(struct net_device *dev)
2598 kfree(rx_data); 2609 kfree(rx_data);
2599 } 2610 }
2600 2611
2601 unregister_pm_notifier(&priv->pm_notifier); 2612 orinoco_unregister_pm_notifier(priv);
2602 orinoco_uncache_fw(priv); 2613 orinoco_uncache_fw(priv);
2603 2614
2604 priv->wpa_ie_len = 0; 2615 priv->wpa_ie_len = 0;
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c
index 82bd47e7c617..fd81884b9c7d 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
48 {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, 48 {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B},
49 {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B}, 49 {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B},
50 {USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B}, 50 {USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B},
51 /* Surecom */
52 {USB_DEVICE(0x0769, 0x11F2), .driver_info = DEVICE_RTL8187},
53 /* Logitech */
54 {USB_DEVICE(0x0789, 0x010C), .driver_info = DEVICE_RTL8187},
51 /* Netgear */ 55 /* Netgear */
52 {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187}, 56 {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187},
53 {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187}, 57 {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187},
@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
57 /* Sitecom */ 61 /* Sitecom */
58 {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, 62 {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
59 {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B}, 63 {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
64 /* Sphairon Access Systems GmbH */
65 {USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187},
66 /* Dick Smith Electronics */
67 {USB_DEVICE(0x1371, 0x9401), .driver_info = DEVICE_RTL8187},
60 /* Abocom */ 68 /* Abocom */
61 {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187}, 69 {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187},
70 /* Qcom */
71 {USB_DEVICE(0x18E8, 0x6232), .driver_info = DEVICE_RTL8187},
72 /* AirLive */
73 {USB_DEVICE(0x1b75, 0x8187), .driver_info = DEVICE_RTL8187},
62 {} 74 {}
63}; 75};
64 76