aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtl818x/rtl8187_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rtl818x/rtl8187_dev.c')
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_dev.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c
index 158827e50c55..6499ccc34c94 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
@@ -1326,6 +1326,14 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1326 priv = dev->priv; 1326 priv = dev->priv;
1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); 1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B);
1328 1328
1329 /* allocate "DMA aware" buffer for register accesses */
1330 priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL);
1331 if (!priv->io_dmabuf) {
1332 err = -ENOMEM;
1333 goto err_free_dev;
1334 }
1335 mutex_init(&priv->io_mutex);
1336
1329 SET_IEEE80211_DEV(dev, &intf->dev); 1337 SET_IEEE80211_DEV(dev, &intf->dev);
1330 usb_set_intfdata(intf, dev); 1338 usb_set_intfdata(intf, dev);
1331 priv->udev = udev; 1339 priv->udev = udev;
@@ -1489,7 +1497,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1489 err = ieee80211_register_hw(dev); 1497 err = ieee80211_register_hw(dev);
1490 if (err) { 1498 if (err) {
1491 printk(KERN_ERR "rtl8187: Cannot register device\n"); 1499 printk(KERN_ERR "rtl8187: Cannot register device\n");
1492 goto err_free_dev; 1500 goto err_free_dmabuf;
1493 } 1501 }
1494 mutex_init(&priv->conf_mutex); 1502 mutex_init(&priv->conf_mutex);
1495 skb_queue_head_init(&priv->b_tx_status.queue); 1503 skb_queue_head_init(&priv->b_tx_status.queue);
@@ -1506,6 +1514,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1506 1514
1507 return 0; 1515 return 0;
1508 1516
1517 err_free_dmabuf:
1518 kfree(priv->io_dmabuf);
1509 err_free_dev: 1519 err_free_dev:
1510 ieee80211_free_hw(dev); 1520 ieee80211_free_hw(dev);
1511 usb_set_intfdata(intf, NULL); 1521 usb_set_intfdata(intf, NULL);
@@ -1529,6 +1539,7 @@ static void __devexit rtl8187_disconnect(struct usb_interface *intf)
1529 priv = dev->priv; 1539 priv = dev->priv;
1530 usb_reset_device(priv->udev); 1540 usb_reset_device(priv->udev);
1531 usb_put_dev(interface_to_usbdev(intf)); 1541 usb_put_dev(interface_to_usbdev(intf));
1542 kfree(priv->io_dmabuf);
1532 ieee80211_free_hw(dev); 1543 ieee80211_free_hw(dev);
1533} 1544}
1534 1545