Commit ff96b3d4 authored by Linus Torvalds's avatar Linus Torvalds
parents b82a96a7 360b52b0
...@@ -286,6 +286,39 @@ static ssize_t show_interface_string(struct device *dev, char *buf) ...@@ -286,6 +286,39 @@ static ssize_t show_interface_string(struct device *dev, char *buf)
} }
static DEVICE_ATTR(interface, S_IRUGO, show_interface_string, NULL); static DEVICE_ATTR(interface, S_IRUGO, show_interface_string, NULL);
static ssize_t show_modalias(struct device *dev, char *buf)
{
struct usb_interface *intf;
struct usb_device *udev;
intf = to_usb_interface(dev);
udev = interface_to_usbdev(intf);
if (udev->descriptor.bDeviceClass == 0) {
struct usb_host_interface *alt = intf->cur_altsetting;
return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X\n",
le16_to_cpu(udev->descriptor.idVendor),
le16_to_cpu(udev->descriptor.idProduct),
le16_to_cpu(udev->descriptor.bcdDevice),
udev->descriptor.bDeviceClass,
udev->descriptor.bDeviceSubClass,
udev->descriptor.bDeviceProtocol,
alt->desc.bInterfaceClass,
alt->desc.bInterfaceSubClass,
alt->desc.bInterfaceProtocol);
} else {
return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic*isc*ip*\n",
le16_to_cpu(udev->descriptor.idVendor),
le16_to_cpu(udev->descriptor.idProduct),
le16_to_cpu(udev->descriptor.bcdDevice),
udev->descriptor.bDeviceClass,
udev->descriptor.bDeviceSubClass,
udev->descriptor.bDeviceProtocol);
}
}
static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
static struct attribute *intf_attrs[] = { static struct attribute *intf_attrs[] = {
&dev_attr_bInterfaceNumber.attr, &dev_attr_bInterfaceNumber.attr,
&dev_attr_bAlternateSetting.attr, &dev_attr_bAlternateSetting.attr,
...@@ -293,6 +326,7 @@ static struct attribute *intf_attrs[] = { ...@@ -293,6 +326,7 @@ static struct attribute *intf_attrs[] = {
&dev_attr_bInterfaceClass.attr, &dev_attr_bInterfaceClass.attr,
&dev_attr_bInterfaceSubClass.attr, &dev_attr_bInterfaceSubClass.attr,
&dev_attr_bInterfaceProtocol.attr, &dev_attr_bInterfaceProtocol.attr,
&dev_attr_modalias.attr,
NULL, NULL,
}; };
static struct attribute_group intf_attr_grp = { static struct attribute_group intf_attr_grp = {
......
...@@ -72,6 +72,7 @@ static int ehci_hub_suspend (struct usb_hcd *hcd) ...@@ -72,6 +72,7 @@ static int ehci_hub_suspend (struct usb_hcd *hcd)
} }
/* turn off now-idle HC */ /* turn off now-idle HC */
del_timer_sync (&ehci->watchdog);
ehci_halt (ehci); ehci_halt (ehci);
hcd->state = HC_STATE_SUSPENDED; hcd->state = HC_STATE_SUSPENDED;
......
...@@ -219,17 +219,21 @@ config USB_EPSON2888 ...@@ -219,17 +219,21 @@ config USB_EPSON2888
by some sample firmware from Epson. by some sample firmware from Epson.
config USB_ZAURUS config USB_ZAURUS
boolean "Sharp Zaurus (stock ROMs)" boolean "Sharp Zaurus (stock ROMs) and compatible"
depends on USB_USBNET depends on USB_USBNET
select CRC32 select CRC32
default y default y
help help
Choose this option to support the usb networking links used by Choose this option to support the usb networking links used by
Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500. Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500.
This also supports some related device firmware, as used in some
If you install an alternate ROM image, you may no longer need PDAs from Olympus and some cell phones from Motorola.
to support this protocol. Only the "eth-fd" driver really needs
this non-conformant variant of CDC Ethernet protocol. If you install an alternate ROM image, such as the Linux 2.6 based
versions of OpenZaurus, you should no longer need to support this
protocol. Only the "eth-fd" or "net_fd" drivers in these devices
really need this non-conformant variant of CDC Ethernet (or in
some cases CDC MDLM) protocol, not "g_ether".
config USB_CDCETHER config USB_CDCETHER
boolean "CDC Ethernet support (smart devices such as cable modems)" boolean "CDC Ethernet support (smart devices such as cable modems)"
......
...@@ -1517,6 +1517,26 @@ static void cdc_unbind (struct usbnet *dev, struct usb_interface *intf) ...@@ -1517,6 +1517,26 @@ static void cdc_unbind (struct usbnet *dev, struct usb_interface *intf)
} }
} }
#endif /* NEED_GENERIC_CDC */
#ifdef CONFIG_USB_CDCETHER
#define HAVE_HARDWARE
/*-------------------------------------------------------------------------
*
* Communications Device Class, Ethernet Control model
*
* Takes two interfaces. The DATA interface is inactive till an altsetting
* is selected. Configuration data includes class descriptors.
*
* This should interop with whatever the 2.4 "CDCEther.c" driver
* (by Brad Hards) talked with.
*
*-------------------------------------------------------------------------*/
#include <linux/ctype.h>
static void dumpspeed (struct usbnet *dev, __le32 *speeds) static void dumpspeed (struct usbnet *dev, __le32 *speeds)
{ {
...@@ -1567,26 +1587,6 @@ static void cdc_status (struct usbnet *dev, struct urb *urb) ...@@ -1567,26 +1587,6 @@ static void cdc_status (struct usbnet *dev, struct urb *urb)
} }
} }
#endif /* NEED_GENERIC_CDC */
#ifdef CONFIG_USB_CDCETHER
#define HAVE_HARDWARE
/*-------------------------------------------------------------------------
*
* Communications Device Class, Ethernet Control model
*
* Takes two interfaces. The DATA interface is inactive till an altsetting
* is selected. Configuration data includes class descriptors.
*
* This should interop with whatever the 2.4 "CDCEther.c" driver
* (by Brad Hards) talked with.
*
*-------------------------------------------------------------------------*/
#include <linux/ctype.h>
static u8 nibble (unsigned char c) static u8 nibble (unsigned char c)
{ {
if (likely (isdigit (c))) if (likely (isdigit (c)))
...@@ -2765,7 +2765,7 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf) ...@@ -2765,7 +2765,7 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf)
} }
/* expect bcdVersion 1.0, ignore */ /* expect bcdVersion 1.0, ignore */
if (memcmp(&desc->bGUID, blan_guid, 16) if (memcmp(&desc->bGUID, blan_guid, 16)
|| memcmp(&desc->bGUID, blan_guid, 16) ) { && memcmp(&desc->bGUID, blan_guid, 16) ) {
/* hey, this one might _really_ be MDLM! */ /* hey, this one might _really_ be MDLM! */
dev_dbg (&intf->dev, "MDLM guid\n"); dev_dbg (&intf->dev, "MDLM guid\n");
goto bad_desc; goto bad_desc;
...@@ -2797,11 +2797,13 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf) ...@@ -2797,11 +2797,13 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf)
* - bPad (ignored, for PADAFTER -- BLAN-only) * - bPad (ignored, for PADAFTER -- BLAN-only)
* bits are: * bits are:
* - 0x01 -- Zaurus framing (add CRC) * - 0x01 -- Zaurus framing (add CRC)
* - 0x02 -- PADBEFORE * - 0x02 -- PADBEFORE (CRC includes some padding)
* - 0x04 -- PADAFTER * - 0x04 -- PADAFTER (some padding after CRC)
* - 0x08 -- "fermat" packet mangling (for hw bugs) * - 0x08 -- "fermat" packet mangling (for hw bugs)
* the PADBEFORE appears not to matter; we interop
* with devices that use it and those that don't.
*/ */
if (detail->bDetailData[1] != 0x01) { if ((detail->bDetailData[1] & ~02) != 0x01) {
/* bmDataCapabilites == 0 would be fine too, /* bmDataCapabilites == 0 would be fine too,
* but framing is minidriver-coupled for now. * but framing is minidriver-coupled for now.
*/ */
...@@ -4070,9 +4072,6 @@ static const struct usb_device_id products [] = { ...@@ -4070,9 +4072,6 @@ static const struct usb_device_id products [] = {
}, { }, {
USB_DEVICE (0x8086, 0x07d3), // "blob" bootloader USB_DEVICE (0x8086, 0x07d3), // "blob" bootloader
.driver_info = (unsigned long) &blob_info, .driver_info = (unsigned long) &blob_info,
}, {
USB_DEVICE (0x22b8, 0x600c), // USBNET Motorola E680
.driver_info = (unsigned long) &linuxdev_info,
}, { }, {
// Linux Ethernet/RNDIS gadget on pxa210/25x/26x // Linux Ethernet/RNDIS gadget on pxa210/25x/26x
// e.g. Gumstix, current OpenZaurus, ... // e.g. Gumstix, current OpenZaurus, ...
......
...@@ -89,6 +89,7 @@ static int interval; ...@@ -89,6 +89,7 @@ static int interval;
static struct usb_device_id id_table_earthmate [] = { static struct usb_device_id id_table_earthmate [] = {
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) }, { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) },
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
...@@ -99,6 +100,7 @@ static struct usb_device_id id_table_cyphidcomrs232 [] = { ...@@ -99,6 +100,7 @@ static struct usb_device_id id_table_cyphidcomrs232 [] = {
static struct usb_device_id id_table_combined [] = { static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) }, { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) },
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
{ USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) }, { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
/* DeLorme Earthmate USB - a GPS device */ /* DeLorme Earthmate USB - a GPS device */
#define VENDOR_ID_DELORME 0x1163 #define VENDOR_ID_DELORME 0x1163
#define PRODUCT_ID_EARTHMATEUSB 0x0100 #define PRODUCT_ID_EARTHMATEUSB 0x0100
#define PRODUCT_ID_EARTHMATEUSB_LT20 0x0200
/* Cypress HID->COM RS232 Adapter */ /* Cypress HID->COM RS232 Adapter */
#define VENDOR_ID_CYPRESS 0x04b4 #define VENDOR_ID_CYPRESS 0x04b4
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment