diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 24 | ||||
-rw-r--r-- | drivers/net/wireless/orinoco/main.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_dev.c | 12 |
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: | |||
1558 | bad: | 1558 | bad: |
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: | |||
1565 | int ath_attach(u16 devid, struct ath_softc *sc) | 1566 | int 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; |
1667 | detach: | 1669 | |
1668 | ath_detach(sc); | 1670 | error_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 | |||
2080 | static 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 | |||
2086 | static 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 | ||