summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2012-02-29 15:15:45 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:51 +0200
commit5b83acdbc846ce58aca54ff4b490eb0be076c5df (patch)
treee6e831898fb986ec7ba8b69ec9e6dc1f269aec51
parentcef37561c3ff9419a4467e1f2b6f8580d0ce2808 (diff)
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 <dmitry.tarnyagin@stericsson.com>
-rw-r--r--drivers/staging/cw1200/main.c18
1 files 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);