diff options
Diffstat (limited to 'drivers/net/wireless/rtl818x/rtl8187_dev.c')
-rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_dev.c | 13 |
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 | ||