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.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c
index fd81884b9c7..d51ba0a88c2 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
@@ -71,6 +71,8 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
71 {USB_DEVICE(0x18E8, 0x6232), .driver_info = DEVICE_RTL8187}, 71 {USB_DEVICE(0x18E8, 0x6232), .driver_info = DEVICE_RTL8187},
72 /* AirLive */ 72 /* AirLive */
73 {USB_DEVICE(0x1b75, 0x8187), .driver_info = DEVICE_RTL8187}, 73 {USB_DEVICE(0x1b75, 0x8187), .driver_info = DEVICE_RTL8187},
74 /* Linksys */
75 {USB_DEVICE(0x1737, 0x0073), .driver_info = DEVICE_RTL8187B},
74 {} 76 {}
75}; 77};
76 78
@@ -1329,6 +1331,14 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1329 priv = dev->priv; 1331 priv = dev->priv;
1330 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); 1332 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B);
1331 1333
1334 /* allocate "DMA aware" buffer for register accesses */
1335 priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL);
1336 if (!priv->io_dmabuf) {
1337 err = -ENOMEM;
1338 goto err_free_dev;
1339 }
1340 mutex_init(&priv->io_mutex);
1341
1332 SET_IEEE80211_DEV(dev, &intf->dev); 1342 SET_IEEE80211_DEV(dev, &intf->dev);
1333 usb_set_intfdata(intf, dev); 1343 usb_set_intfdata(intf, dev);
1334 priv->udev = udev; 1344 priv->udev = udev;
@@ -1495,7 +1505,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1495 err = ieee80211_register_hw(dev); 1505 err = ieee80211_register_hw(dev);
1496 if (err) { 1506 if (err) {
1497 printk(KERN_ERR "rtl8187: Cannot register device\n"); 1507 printk(KERN_ERR "rtl8187: Cannot register device\n");
1498 goto err_free_dev; 1508 goto err_free_dmabuf;
1499 } 1509 }
1500 mutex_init(&priv->conf_mutex); 1510 mutex_init(&priv->conf_mutex);
1501 skb_queue_head_init(&priv->b_tx_status.queue); 1511 skb_queue_head_init(&priv->b_tx_status.queue);
@@ -1506,6 +1516,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1506 1516
1507 return 0; 1517 return 0;
1508 1518
1519 err_free_dmabuf:
1520 kfree(priv->io_dmabuf);
1509 err_free_dev: 1521 err_free_dev:
1510 ieee80211_free_hw(dev); 1522 ieee80211_free_hw(dev);
1511 usb_set_intfdata(intf, NULL); 1523 usb_set_intfdata(intf, NULL);
@@ -1526,6 +1538,7 @@ static void __devexit rtl8187_disconnect(struct usb_interface *intf)
1526 priv = dev->priv; 1538 priv = dev->priv;
1527 usb_reset_device(priv->udev); 1539 usb_reset_device(priv->udev);
1528 usb_put_dev(interface_to_usbdev(intf)); 1540 usb_put_dev(interface_to_usbdev(intf));
1541 kfree(priv->io_dmabuf);
1529 ieee80211_free_hw(dev); 1542 ieee80211_free_hw(dev);
1530} 1543}
1531 1544