Commit 0c9a3aaa authored by David S. Miller's avatar David S. Miller
parents fef7cc08 046ee5d2
...@@ -1538,6 +1538,7 @@ static int ath_init(u16 devid, struct ath_softc *sc) ...@@ -1538,6 +1538,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
bad: bad:
if (ah) if (ah)
ath9k_hw_detach(ah); ath9k_hw_detach(ah);
ath9k_exit_debug(sc);
return error; return error;
} }
...@@ -1545,7 +1546,7 @@ static int ath_init(u16 devid, struct ath_softc *sc) ...@@ -1545,7 +1546,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
static int ath_attach(u16 devid, struct ath_softc *sc) static int ath_attach(u16 devid, struct ath_softc *sc)
{ {
struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw;
int error = 0; int error = 0, i;
DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n"); DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n");
...@@ -1589,11 +1590,11 @@ static int ath_attach(u16 devid, struct ath_softc *sc) ...@@ -1589,11 +1590,11 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
/* initialize tx/rx engine */ /* initialize tx/rx engine */
error = ath_tx_init(sc, ATH_TXBUF); error = ath_tx_init(sc, ATH_TXBUF);
if (error != 0) if (error != 0)
goto detach; goto error_attach;
error = ath_rx_init(sc, ATH_RXBUF); error = ath_rx_init(sc, ATH_RXBUF);
if (error != 0) if (error != 0)
goto detach; goto error_attach;
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
/* Initialze h/w Rfkill */ /* Initialze h/w Rfkill */
...@@ -1601,8 +1602,9 @@ static int ath_attach(u16 devid, struct ath_softc *sc) ...@@ -1601,8 +1602,9 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll); INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll);
/* Initialize s/w rfkill */ /* Initialize s/w rfkill */
if (ath_init_sw_rfkill(sc)) error = ath_init_sw_rfkill(sc);
goto detach; if (error)
goto error_attach;
#endif #endif
error = ieee80211_register_hw(hw); error = ieee80211_register_hw(hw);
...@@ -1611,8 +1613,16 @@ static int ath_attach(u16 devid, struct ath_softc *sc) ...@@ -1611,8 +1613,16 @@ static int ath_attach(u16 devid, struct ath_softc *sc)
ath_init_leds(sc); ath_init_leds(sc);
return 0; return 0;
detach:
ath_detach(sc); error_attach:
/* cleanup tx queues */
for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
if (ATH_TXQ_SETUP(sc, i))
ath_tx_cleanupq(sc, &sc->tx.txq[i]);
ath9k_hw_detach(sc->sc_ah);
ath9k_exit_debug(sc);
return error; return error;
} }
......
...@@ -3157,8 +3157,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier, ...@@ -3157,8 +3157,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
return NOTIFY_DONE; return NOTIFY_DONE;
} }
static void orinoco_register_pm_notifier(struct orinoco_private *priv)
{
priv->pm_notifier.notifier_call = orinoco_pm_notifier;
register_pm_notifier(&priv->pm_notifier);
}
static void orinoco_unregister_pm_notifier(struct orinoco_private *priv)
{
unregister_pm_notifier(&priv->pm_notifier);
}
#else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */ #else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */
#define orinoco_pm_notifier NULL #define orinoco_register_pm_notifier(priv) do { } while(0)
#define orinoco_unregister_pm_notifier(priv) do { } while(0)
#endif #endif
/********************************************************************/ /********************************************************************/
...@@ -3648,8 +3660,7 @@ struct net_device ...@@ -3648,8 +3660,7 @@ struct net_device
priv->cached_fw = NULL; priv->cached_fw = NULL;
/* Register PM notifiers */ /* Register PM notifiers */
priv->pm_notifier.notifier_call = orinoco_pm_notifier; orinoco_register_pm_notifier(priv);
register_pm_notifier(&priv->pm_notifier);
return dev; return dev;
} }
...@@ -3673,7 +3684,7 @@ void free_orinocodev(struct net_device *dev) ...@@ -3673,7 +3684,7 @@ void free_orinocodev(struct net_device *dev)
kfree(rx_data); kfree(rx_data);
} }
unregister_pm_notifier(&priv->pm_notifier); orinoco_unregister_pm_notifier(priv);
orinoco_uncache_fw(priv); orinoco_uncache_fw(priv);
priv->wpa_ie_len = 0; priv->wpa_ie_len = 0;
......
...@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { ...@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
{USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B},
{USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B},
{USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B},
/* Surecom */
{USB_DEVICE(0x0769, 0x11F2), .driver_info = DEVICE_RTL8187},
/* Logitech */
{USB_DEVICE(0x0789, 0x010C), .driver_info = DEVICE_RTL8187},
/* Netgear */ /* Netgear */
{USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187},
{USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187},
...@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { ...@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
/* Sitecom */ /* Sitecom */
{USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
{USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
/* Sphairon Access Systems GmbH */
{USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187},
/* Dick Smith Electronics */
{USB_DEVICE(0x1371, 0x9401), .driver_info = DEVICE_RTL8187},
/* Abocom */ /* Abocom */
{USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187},
/* Qcom */
{USB_DEVICE(0x18E8, 0x6232), .driver_info = DEVICE_RTL8187},
/* AirLive */
{USB_DEVICE(0x1b75, 0x8187), .driver_info = DEVICE_RTL8187},
{} {}
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment