diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-02-17 10:25:47 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-02-17 10:25:47 +0100 |
commit | c6a87e145cea8af8c7545a0406aa8f8dd9146c92 (patch) | |
tree | 92b267984ffa6751ac7002e0ed3825e9869a062c /drivers | |
parent | 06f66dc0546b36c22282a2f55b790ffa426a9f35 (diff) | |
parent | 456a52a6e58bc7769da154251ba9a6ac75c3d70a (diff) | |
download | barebox-c6a87e145cea8af8c7545a0406aa8f8dd9146c92.tar.gz barebox-c6a87e145cea8af8c7545a0406aa8f8dd9146c92.tar.xz |
Merge branch 'pu/net-usb' into next
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/usb/smsc95xx.c | 7 | ||||
-rw-r--r-- | drivers/net/usb/usbnet.c | 6 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 23 | ||||
-rw-r--r-- | drivers/usb/storage/usb.h | 1 |
4 files changed, 12 insertions, 25 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index b51899292b..c21705eb80 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -722,8 +722,6 @@ static int smsc95xx_reset(struct usbnet *dev) return 0; } -static struct usbnet *usbnet_global; - static int smsc95xx_bind(struct usbnet *dev) { struct smsc95xx_priv *pdata = NULL; @@ -761,14 +759,15 @@ static int smsc95xx_bind(struct usbnet *dev) static void smsc95xx_unbind(struct usbnet *dev) { struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + + mii_unregister(&dev->miidev); + if (pdata) { netif_dbg(dev, ifdown, dev->net, "free pdata\n"); free(pdata); pdata = NULL; dev->data[0] = 0; } - - usbnet_global = NULL; } static int smsc95xx_rx_fixup(struct usbnet *dev, void *buf, int len) diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 5ffd7a6037..c7e360690e 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -235,13 +235,11 @@ void usbnet_disconnect(struct usb_device *usbdev) struct eth_device *edev = &undev->edev; struct driver_info *info; - eth_unregister(edev); - unregister_device(&edev->dev); - info = undev->driver_info; if (info->unbind) info->unbind(undev); + eth_unregister(edev); + free(undev); } - diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 865ba8ec47..5f15464711 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -415,7 +415,7 @@ static int usb_stor_add_blkdev(struct us_data *us, struct device_d *dev, if (result != 0) dev_warn(dev, "No partition table found\n"); - list_add_tail(&pblk_dev->list, &us_blkdev_list); + list_add_tail(&pblk_dev->list, &us->blk_dev_list); US_DEBUGP("USB disk device successfully added\n"); return 0; @@ -556,6 +556,7 @@ static int usb_stor_probe(struct usb_device *usbdev, us->ifnum = intf->bInterfaceNumber; us->subclass = intf->bInterfaceSubClass; us->protocol = intf->bInterfaceProtocol; + INIT_LIST_HEAD(&us->blk_dev_list); /* get standard transport and protocol settings */ get_transport(us); @@ -582,30 +583,18 @@ BadDevice: /* Handle a USB mass-storage disconnect */ static void usb_stor_disconnect(struct usb_device *usbdev) { -#if 0 struct us_data *us = (struct us_data *)usbdev->drv_data; struct us_blk_dev *bdev, *bdev_tmp; - US_DEBUGP("Disconnecting USB Mass Storage device %s\n", - usbdev->dev.name); - - /* release all block devices of this mass storage device */ - list_for_each_entry_safe(bdev, bdev_tmp, &us_blkdev_list, list) { - if (bdev->us == us) { - US_DEBUGP("Releasing %s\n", bdev->dev.name); - list_del(&bdev->list); - unregister_device(&bdev->dev); - free(bdev); - } + list_for_each_entry_safe(bdev, bdev_tmp, &us->blk_dev_list, list) { + list_del(&bdev->list); + blockdevice_unregister(&bdev->blk); + free(bdev); } /* release device's private data */ usbdev->drv_data = 0; free(us); -#else - dev_err(&usbdev->dev, "Disk/partition removal not yet implemented " - "in the ATA disk driver."); -#endif } #define USUAL_DEV(use_proto, use_trans, drv_info) \ diff --git a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h index 59423934dd..1b73b0029e 100644 --- a/drivers/usb/storage/usb.h +++ b/drivers/usb/storage/usb.h @@ -81,6 +81,7 @@ struct us_data { /* SCSI interfaces */ ccb *srb; /* current srb */ + struct list_head blk_dev_list; }; /* one us_blk_dev object allocated per LUN */ |