summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2012-01-22 03:09:35 +0000
committerJohn W. Linville <linville@tuxdriver.com>2012-05-08 21:53:47 -0400
commitb4050790d0a6bfec76e2186d461123cf9586aa34 (patch)
tree9516b421079070c0f154e66e015e0490074facd8 /drivers
parentf2bd7f16e5ae50a26028b4244f7b9c8bba0c48d2 (diff)
ipw2200: Fix order of device registration
Currently cfg80211 fails to create a "phy80211" symlink in sysfs from the net device to the wiphy device. The latter needs to be registered first. Compile-tested only. Reported-by: Cesare Leonardi <celeonar@gmail.com> Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2200.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c
index 9a6d99048c1..0036737fe8e 100644
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -11840,16 +11840,17 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
}
mutex_unlock(&priv->mutex);
- err = register_netdev(net_dev);
+
+ err = ipw_wdev_init(net_dev);
if (err) {
- IPW_ERROR("failed to register network device\n");
+ IPW_ERROR("failed to register wireless device\n");
goto out_remove_sysfs;
}
- err = ipw_wdev_init(net_dev);
+ err = register_netdev(net_dev);
if (err) {
- IPW_ERROR("failed to register wireless device\n");
- goto out_unregister_netdev;
+ IPW_ERROR("failed to register network device\n");
+ goto out_unregister_wiphy;
}
#ifdef CONFIG_IPW2200_PROMISCUOUS
@@ -11858,10 +11859,8 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
if (err) {
IPW_ERROR("Failed to register promiscuous network "
"device (error %d).\n", err);
- wiphy_unregister(priv->ieee->wdev.wiphy);
- kfree(priv->ieee->a_band.channels);
- kfree(priv->ieee->bg_band.channels);
- goto out_unregister_netdev;
+ unregister_netdev(priv->net_dev);
+ goto out_unregister_wiphy;
}
}
#endif
@@ -11873,8 +11872,10 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
return 0;
- out_unregister_netdev:
- unregister_netdev(priv->net_dev);
+ out_unregister_wiphy:
+ wiphy_unregister(priv->ieee->wdev.wiphy);
+ kfree(priv->ieee->a_band.channels);
+ kfree(priv->ieee->bg_band.channels);
out_remove_sysfs:
sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group);
out_release_irq: