+++ /dev/null
-From a9620fdcb8dab4d05f5677110c54b74e7ce1d621 Mon Sep 17 00:00:00 2001
-From: Alan Stern <stern@rowland.harvard.edu>
-Date: Thu, 26 Mar 2009 18:25:19 +0000
-Subject: USB: add quirk to avoid config and interface strings
-
-From: Alan Stern <stern@rowland.harvard.edu>
-
-upstream commit: 1662e3a7f076e51e3073faf9ce77157b529c475b
-
-Apparently the Configuration and Interface strings aren't used as
-often as the Vendor, Product, and Serial strings. In at least one
-device (a Saitek Cyborg Gold 3D joystick), attempts to read the
-Configuration string cause the device to stop responding to Control
-requests.
-
-This patch (as1226) adds a quirks flag, telling the kernel not to
-read a device's Configuration or Interface strings, together with a
-new quirk for the offending joystick.
-
-Reported-by: Melchior FRANZ <melchior.franz@gmail.com>
-Tested-by: Melchior FRANZ <melchior.franz@gmail.com>
-Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
-Cc: stable <stable@kernel.org> [2.6.28 and 2.6.29, nothing earlier]
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-Signed-off-by: Chris Wright <chrisw@sous-sol.org>
----
- drivers/usb/core/message.c | 3 ++-
- drivers/usb/core/quirks.c | 4 ++++
- drivers/usb/core/sysfs.c | 4 +++-
- include/linux/usb/quirks.h | 3 +++
- 4 files changed, 12 insertions(+), 2 deletions(-)
-
---- a/drivers/usb/core/message.c
-+++ b/drivers/usb/core/message.c
-@@ -1623,7 +1623,8 @@ free_interfaces:
- }
- kfree(new_interfaces);
-
-- if (cp->string == NULL)
-+ if (cp->string == NULL &&
-+ !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
- cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
-
- /* Now that all the interfaces are set up, register them
---- a/drivers/usb/core/quirks.c
-+++ b/drivers/usb/core/quirks.c
-@@ -54,6 +54,10 @@ static const struct usb_device_id usb_qu
- { USB_DEVICE(0x0638, 0x0a13), .driver_info =
- USB_QUIRK_STRING_FETCH_255 },
-
-+ /* Saitek Cyborg Gold Joystick */
-+ { USB_DEVICE(0x06a3, 0x0006), .driver_info =
-+ USB_QUIRK_CONFIG_INTF_STRINGS },
-+
- /* M-Systems Flash Disk Pioneers */
- { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
-
---- a/drivers/usb/core/sysfs.c
-+++ b/drivers/usb/core/sysfs.c
-@@ -13,6 +13,7 @@
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/usb.h>
-+#include <linux/usb/quirks.h>
- #include "usb.h"
-
- /* Active configuration fields */
-@@ -823,7 +824,8 @@ int usb_create_sysfs_intf_files(struct u
- * and missing in others. Hence its attribute cannot be created
- * before the uevent is broadcast.
- */
-- if (alt->string == NULL)
-+ if (alt->string == NULL &&
-+ !(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
- alt->string = usb_cache_string(udev, alt->desc.iInterface);
- if (alt->string)
- retval = device_create_file(&intf->dev, &dev_attr_interface);
---- a/include/linux/usb/quirks.h
-+++ b/include/linux/usb/quirks.h
-@@ -16,4 +16,7 @@
- /* device can't handle Set-Interface requests */
- #define USB_QUIRK_NO_SET_INTF 0x00000004
-
-+/* device can't handle its Configuration or Interface strings */
-+#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
-+
- #endif /* __LINUX_USB_QUIRKS_H */