Пример #1
0
static ssize_t
set_autosuspend(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	struct usb_device *udev = to_usb_device(dev);
	int value, old_delay;
	int rc;

	if (sscanf(buf, "%d", &value) != 1 || value >= INT_MAX/HZ ||
			value <= - INT_MAX/HZ)
		return -EINVAL;
	value *= HZ;

	usb_lock_device(udev);
	old_delay = udev->autosuspend_delay;
	udev->autosuspend_delay = value;

	if (old_delay < 0) {	/* Autosuspend wasn't allowed */
		if (value >= 0)
			usb_autosuspend_device(udev);
	} else {		/* Autosuspend was allowed */
		if (value < 0) {
			rc = usb_autoresume_device(udev);
			if (rc < 0) {
				count = rc;
				udev->autosuspend_delay = old_delay;
			}
		} else {
			usb_try_autosuspend_device(udev);
		}
	}

	usb_unlock_device(udev);
	return count;
}
Пример #2
0
static ssize_t
set_autosuspend(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	struct usb_device *udev = to_usb_device(dev);
	unsigned value, old;

	if (sscanf(buf, "%u", &value) != 1 || value >= INT_MAX/HZ)
		return -EINVAL;
	value *= HZ;

	old = udev->autosuspend_delay;
	udev->autosuspend_delay = value;
	if (value > 0 && old == 0)
		usb_try_autosuspend_device(udev);

	return count;
}
Пример #3
0
static ssize_t
set_autosuspend(struct device *dev, struct device_attribute *attr,
                const char *buf, size_t count)
{
    struct usb_device *udev = to_usb_device(dev);
    int value;

    if (sscanf(buf, "%d", &value) != 1 || value >= INT_MAX/HZ ||
            value <= - INT_MAX/HZ)
        return -EINVAL;
    value *= HZ;

    udev->autosuspend_delay = value;
    if (value >= 0)
        usb_try_autosuspend_device(udev);
    else {
        if (usb_autoresume_device(udev) == 0)
            usb_autosuspend_device(udev);
    }
    return count;
}