示例#1
0
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;
}
示例#2
0
/*
 * 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;
}
示例#3
0
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;
}
示例#5
0
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;
}