static int ar9170_usb_reset(struct ar9170_usb *aru) { int ret, lock = (aru->intf->condition != USB_INTERFACE_BINDING); if (lock) { ret = usb_lock_device_for_reset(aru->udev, aru->intf); if (ret < 0) { dev_err(&aru->udev->dev, "unable to lock device " "for reset (%d).\n", ret); return ret; } } ret = usb_reset_device(aru->udev); if (lock) usb_unlock_device(aru->udev); /* let it rest - for a second - */ msleep(1000); return ret; }
/* * usb_stor_port_reset() */ int usb_stor_port_reset(struct us_data *us) { int result; /* pr_info("transport --- usb_stor_port_reset\n"); */ result = usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf); if (result < 0) pr_info("unable to lock device for reset: %d\n", result); else { /* Were we disconnected while waiting for the lock? */ if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { result = -EIO; /* pr_info("No reset during disconnect\n"); */ } else { result = usb_reset_device(us->pusb_dev); /* pr_info("usb_reset_composite_device returns %d\n", result); */ } usb_unlock_device(us->pusb_dev); } return result; }
int Egis_Reset_device(usb_ss801u *dev) { int lock, ret; EgisMsg(dev->bPrintDbgMsg, KERN_INFO, "\r\n=RESET_DEVICE=\r\n"); lock = usb_lock_device_for_reset(dev->udev, dev->interface); if (lock < 0) { EgisMsg(dev->bPrintDbgMsg, KERN_ERR, "=RESET_DEVICE= locking device failed: %d\r\n", lock); return lock; } ret = usb_reset_device(dev->udev); if (ret < 0) EgisMsg(dev->bPrintDbgMsg, KERN_ERR, "=RESET_DEVICE= reset device failed: %d\r\n", ret); if (lock) usb_unlock_device(dev->udev); EgisMsg(dev->bPrintDbgMsg, KERN_INFO, "\r\n=RESET_DEVICE= Finish\r\n"); return ret; }
/* Issue a USB port reset to the device. The caller must not hold * us->dev_mutex. */ int usb_stor_port_reset(struct us_data *us) { int result, rc_lock; result = rc_lock = usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf); if (result < 0) US_DEBUGP("unable to lock device for reset: %d\n", result); else { /* Were we disconnected while waiting for the lock? */ if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { result = -EIO; US_DEBUGP("No reset during disconnect\n"); } else { result = usb_reset_device(us->pusb_dev); US_DEBUGP("usb_reset_device returns %d\n", result); } if (rc_lock) usb_unlock_device(us->pusb_dev); } return result; }
static int tweak_reset_device_cmd(struct urb *urb) { struct usb_ctrlrequest *req; __u16 value; __u16 index; int ret; req = (struct usb_ctrlrequest *) urb->setup_packet; value = le16_to_cpu(req->wValue); index = le16_to_cpu(req->wIndex); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) uinfo("reset_device (port %d) to %s\n", index, urb->dev->dev.bus_id); #else uinfo("reset_device (port %d) to %s\n", index, dev_name(&urb->dev->dev)); #endif /* all interfaces should be owned by usbip driver, so just reset it. */ ret = usb_lock_device_for_reset(urb->dev, NULL); if (ret < 0) { uerr("lock for reset\n"); return ret; } /* try to reset the device */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) ret = usb_reset_composite_device(urb->dev, NULL); #else ret = usb_reset_device(urb->dev); #endif if (ret < 0) uerr("device reset\n"); usb_unlock_device(urb->dev); return ret; }