From 5b83acdbc846ce58aca54ff4b490eb0be076c5df Mon Sep 17 00:00:00 2001 From: Dmitry Tarnyagin Date: Wed, 29 Feb 2012 15:15:45 +0100 Subject: cw1200: Balance calls to cw1200_pm_(de)init. In case of firmware downloading problem, a call to cw1200_pm_init was not followed by a call to cw1200_pm_deinit. CW1200 PM device was not removed properly due to that and consecutive attempt to initialize driver failed. The patch balances calls to cw1200_pm_(de)init. ST-Ericsson ID: 418642 Change-Id: I3d22372a89291f394655c6363b82d33c4f9b936f Signed-off-by: Dmitry Tarnyagin --- drivers/staging/cw1200/main.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c index 92f127e2f33..06434629dcd 100644 --- a/drivers/staging/cw1200/main.c +++ b/drivers/staging/cw1200/main.c @@ -358,11 +358,6 @@ struct ieee80211_hw *cw1200_init_common(size_t priv_data_len) priv->ba_timer.data = (unsigned long)priv; priv->ba_timer.function = cw1200_ba_timer; - if (unlikely(cw1200_pm_init(&priv->pm_state, priv))) { - ieee80211_free_hw(hw); - return NULL; - } - if (unlikely(cw1200_queue_stats_init(&priv->tx_queue_stats, CW1200_LINK_ID_MAX, cw1200_skb_dtor, @@ -402,17 +397,28 @@ int cw1200_register_common(struct ieee80211_hw *dev) struct cw1200_common *priv = dev->priv; int err; + err = cw1200_pm_init(&priv->pm_state, priv); + if (err) { + cw1200_dbg(CW1200_DBG_ERROR, "Cannot init PM. (%d).\n", + err); + return err; + } + err = ieee80211_register_hw(dev); if (err) { cw1200_dbg(CW1200_DBG_ERROR, "Cannot register device (%d).\n", err); + cw1200_pm_deinit(&priv->pm_state); return err; } #ifdef CONFIG_CW1200_LEDS err = cw1200_init_leds(priv); - if (err) + if (err) { + cw1200_pm_deinit(&priv->pm_state); + ieee80211_unregister_hw(dev); return err; + } #endif /* CONFIG_CW1200_LEDS */ cw1200_debug_init(priv); -- cgit v1.2.3