wlcore: fix some failure cases in wlcore_probe()
authorLuciano Coelho <coelho@ti.com>
Mon, 25 Jun 2012 11:41:20 +0000 (14:41 +0300)
committerLuciano Coelho <coelho@ti.com>
Tue, 26 Jun 2012 17:20:19 +0000 (20:20 +0300)
We need to release the IRQ if hw_info() or identify_chip() fails.  And
we need unregister the HW with mac80211 if there are any failures
after it's registered.

Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/ti/wlcore/main.c

index 372ccf2..c5a9ffe 100644 (file)
@@ -5520,12 +5520,12 @@ int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
        ret = wl12xx_get_hw_info(wl);
        if (ret < 0) {
                wl1271_error("couldn't get hw info");
-               goto out;
+               goto out_irq;
        }
 
        ret = wl->ops->identify_chip(wl);
        if (ret < 0)
-               goto out;
+               goto out_irq;
 
        ret = wl1271_init_ieee80211(wl);
        if (ret)
@@ -5539,7 +5539,7 @@ int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
        ret = device_create_file(wl->dev, &dev_attr_bt_coex_state);
        if (ret < 0) {
                wl1271_error("failed to create sysfs file bt_coex_state");
-               goto out_irq;
+               goto out_unreg;
        }
 
        /* Create sysfs file to get HW PG version */
@@ -5564,6 +5564,9 @@ out_hw_pg_ver:
 out_bt_coex_state:
        device_remove_file(wl->dev, &dev_attr_bt_coex_state);
 
+out_unreg:
+       wl1271_unregister_hw(wl);
+
 out_irq:
        free_irq(wl->irq, wl);