summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-02-17 10:25:47 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-02-17 10:25:47 +0100
commitc6a87e145cea8af8c7545a0406aa8f8dd9146c92 (patch)
tree92b267984ffa6751ac7002e0ed3825e9869a062c /drivers
parent06f66dc0546b36c22282a2f55b790ffa426a9f35 (diff)
parent456a52a6e58bc7769da154251ba9a6ac75c3d70a (diff)
downloadbarebox-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.c7
-rw-r--r--drivers/net/usb/usbnet.c6
-rw-r--r--drivers/usb/storage/usb.c23
-rw-r--r--drivers/usb/storage/usb.h1
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 */