Re: [PATCH 2/2] usb:Export USB_QUIRK_RESET_MORPHS through sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 16 Dec 2009, Oliver Neukum wrote:

> From 98235db3d1a4eae545aad6efb116600feac8e373 Mon Sep 17 00:00:00 2001
> From: Oliver Neukum <oliver@xxxxxxxxxx>
> Date: Wed, 16 Dec 2009 18:43:01 +0100
> Subject: [PATCH 2/2] usb:Export USB_QUIRK_RESET_MORPHS through sysfs
> 
> Some devices which use mode switching revert to their
> primary mode as they are reset. They must not be reset for
> error handling. As user spaces makes the switch it also
> has to tell the kernel that a device is quirky.
> 
> Signed-off-by: Oliver Neukum <oliver@xxxxxxxxxx>
> ---
>  drivers/usb/core/sysfs.c |   30 ++++++++++++++++++++++++++++++
>  1 files changed, 30 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
> index 1547700..ae5095d 100644
> --- a/drivers/usb/core/sysfs.c
> +++ b/drivers/usb/core/sysfs.c
> @@ -181,6 +181,36 @@ show_quirks(struct device *dev, struct device_attribute *attr, char *buf)
>  static DEVICE_ATTR(quirks, S_IRUGO, show_quirks, NULL);
>  
>  static ssize_t
> +show_reset_quirk(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> +	struct usb_device *udev;
> +
> +	udev = to_usb_device(dev);
> +	return sprintf(buf, "%d\n", !!(udev->quirks & USB_QUIRK_RESET_MORPHS));
> +}
> +
> +static ssize_t
> +set_reset_quirk(struct device *dev, struct device_attribute *attr,
> +		const char *buf, size_t count)
> +{
> +	struct usb_device	*udev = to_usb_device(dev);
> +	int			config, value;
> +
> +	if (sscanf(buf, "%d", &config) != 1 || config < 0 || config > 1)
> +		return -EINVAL;
> +	usb_lock_device(udev);
> +	if (config)
> +		udev->quirks |= USB_QUIRK_RESET_MORPHS;
> +	else
> +		udev->quirks &= ~USB_QUIRK_RESET_MORPHS;
> +	usb_unlock_device(udev);
> +	return count;
> +}
> +
> +static DEVICE_ATTR(breset_quirk, S_IRUGO | S_IWUSR,
> +		show_reset_quirk, set_reset_quirk);
> +
> +static ssize_t
>  show_urbnum(struct device *dev, struct device_attribute *attr, char *buf)
>  {
>  	struct usb_device *udev;

Why do I get the feeling that something is missing here?  :-)

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux