aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/core/message.c3
-rw-r--r--drivers/usb/core/quirks.c4
-rw-r--r--drivers/usb/core/sysfs.c4
-rw-r--r--include/linux/usb/quirks.h3
4 files changed, 12 insertions, 2 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 49e7f56e0d7f..3922fa915ed2 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1719,7 +1719,8 @@ free_interfaces:
1719 } 1719 }
1720 kfree(new_interfaces); 1720 kfree(new_interfaces);
1721 1721
1722 if (cp->string == NULL) 1722 if (cp->string == NULL &&
1723 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1723 cp->string = usb_cache_string(dev, cp->desc.iConfiguration); 1724 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1724 1725
1725 /* Now that all the interfaces are set up, register them 1726 /* Now that all the interfaces are set up, register them
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index c070b34b669d..ab93918d9207 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -54,6 +54,10 @@ static const struct usb_device_id usb_quirk_list[] = {
54 { USB_DEVICE(0x0638, 0x0a13), .driver_info = 54 { USB_DEVICE(0x0638, 0x0a13), .driver_info =
55 USB_QUIRK_STRING_FETCH_255 }, 55 USB_QUIRK_STRING_FETCH_255 },
56 56
57 /* Saitek Cyborg Gold Joystick */
58 { USB_DEVICE(0x06a3, 0x0006), .driver_info =
59 USB_QUIRK_CONFIG_INTF_STRINGS },
60
57 /* M-Systems Flash Disk Pioneers */ 61 /* M-Systems Flash Disk Pioneers */
58 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, 62 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
59 63
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index 4cc2456ef3be..c66789197927 100644
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -13,6 +13,7 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/string.h> 14#include <linux/string.h>
15#include <linux/usb.h> 15#include <linux/usb.h>
16#include <linux/usb/quirks.h>
16#include "usb.h" 17#include "usb.h"
17 18
18/* Active configuration fields */ 19/* Active configuration fields */
@@ -813,7 +814,8 @@ int usb_create_sysfs_intf_files(struct usb_interface *intf)
813 if (intf->sysfs_files_created || intf->unregistering) 814 if (intf->sysfs_files_created || intf->unregistering)
814 return 0; 815 return 0;
815 816
816 if (alt->string == NULL) 817 if (alt->string == NULL &&
818 !(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
817 alt->string = usb_cache_string(udev, alt->desc.iInterface); 819 alt->string = usb_cache_string(udev, alt->desc.iInterface);
818 if (alt->string) 820 if (alt->string)
819 retval = device_create_file(&intf->dev, &dev_attr_interface); 821 retval = device_create_file(&intf->dev, &dev_attr_interface);
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
index 7f6c603db654..2526f3bbd273 100644
--- a/include/linux/usb/quirks.h
+++ b/include/linux/usb/quirks.h
@@ -16,4 +16,7 @@
16/* device can't handle Set-Interface requests */ 16/* device can't handle Set-Interface requests */
17#define USB_QUIRK_NO_SET_INTF 0x00000004 17#define USB_QUIRK_NO_SET_INTF 0x00000004
18 18
19/* device can't handle its Configuration or Interface strings */
20#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
21
19#endif /* __LINUX_USB_QUIRKS_H */ 22#endif /* __LINUX_USB_QUIRKS_H */