Commit 3797455f authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  USB: pl2303: add id for Hewlett-Packard LD220-HP POS pole display
  USB: set correct configuration in probe of ti_usb_3410_5052
  USB: add 5372:2303 to pl2303
  USB: skip Set-Interface(0) if already in altsetting 0
  USB: fix comment about endianness of descriptors
  USB: Documentation/usb/gadget_serial.txt: update to match driver use_acm behaviour
  usbmon: drop bogus 0t from usbmon.txt
  USB: gadget: fix rndis working at high speed
  USB: ftdi_sio: Adding Ewert Energy System's CANdapter PID
  USB: tty: SprogII DCC controller identifiers
  usb-storage: update unusual_devs entry for Nokia 5310
  USB: Unusual devs patch for Nokia 3500c
  USB: storage: unusual_devs.h: Nokia 3109c addition
  USB: fix problem with usbtmc driver not loading properly
parents 5b8bd54d af4b8514
...@@ -114,11 +114,11 @@ modules. ...@@ -114,11 +114,11 @@ modules.
Then you must load the gadget serial driver. To load it as an Then you must load the gadget serial driver. To load it as an
ACM device (recommended for interoperability), do this: ACM device (recommended for interoperability), do this:
modprobe g_serial use_acm=1 modprobe g_serial
To load it as a vendor specific bulk in/out device, do this: To load it as a vendor specific bulk in/out device, do this:
modprobe g_serial modprobe g_serial use_acm=0
This will also automatically load the underlying gadget peripheral This will also automatically load the underlying gadget peripheral
controller driver. This must be done each time you reboot the gadget controller driver. This must be done each time you reboot the gadget
......
...@@ -49,8 +49,10 @@ it and 002/048 sometime later. ...@@ -49,8 +49,10 @@ it and 002/048 sometime later.
These files can be read as binary data. The binary data consists These files can be read as binary data. The binary data consists
of first the device descriptor, then the descriptors for each of first the device descriptor, then the descriptors for each
configuration of the device. That information is also shown in configuration of the device. Multi-byte fields in the device and
text form by the /proc/bus/usb/devices file, described later. configuration descriptors, but not other descriptors, are converted
to host endianness by the kernel. This information is also shown
in text form by the /proc/bus/usb/devices file, described later.
These files may also be used to write user-level drivers for the USB These files may also be used to write user-level drivers for the USB
devices. You would open the /proc/bus/usb/BBB/DDD file read/write, devices. You would open the /proc/bus/usb/BBB/DDD file read/write,
......
...@@ -34,11 +34,12 @@ if usbmon is built into the kernel. ...@@ -34,11 +34,12 @@ if usbmon is built into the kernel.
Verify that bus sockets are present. Verify that bus sockets are present.
# ls /sys/kernel/debug/usbmon # ls /sys/kernel/debug/usbmon
0s 0t 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
# #
Now you can choose to either use the sockets numbered '0' (to capture packets on Now you can choose to either use the socket '0u' (to capture packets on all
all buses), and skip to step #3, or find the bus used by your device with step #2. buses), and skip to step #3, or find the bus used by your device with step #2.
This allows to filter away annoying devices that talk continuously.
2. Find which bus connects to the desired device 2. Find which bus connects to the desired device
...@@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types. ...@@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types.
Here is the list of words, from left to right: Here is the list of words, from left to right:
- URB Tag. This is used to identify URBs is normally a kernel mode address - URB Tag. This is used to identify URBs, and is normally an in-kernel address
of the URB structure in hexadecimal. of the URB structure in hexadecimal, but can be a sequence number or any
other unique string, within reason.
- Timestamp in microseconds, a decimal number. The timestamp's resolution - Timestamp in microseconds, a decimal number. The timestamp's resolution
depends on available clock, and so it can be much worse than a microsecond depends on available clock, and so it can be much worse than a microsecond
......
...@@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = { ...@@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = {
{ USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
{ 0, } /* terminating entry */ { 0, } /* terminating entry */
}; };
MODULE_DEVICE_TABLE(usb, usbtmc_devices);
/* /*
* This structure is the capabilities for the device * This structure is the capabilities for the device
......
...@@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev) ...@@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev)
* altsetting means creating new endpoint device entries). * altsetting means creating new endpoint device entries).
* When either of these happens, defer the Set-Interface. * When either of these happens, defer the Set-Interface.
*/ */
if (!error && intf->dev.power.status == DPM_ON) if (intf->cur_altsetting->desc.bAlternateSetting == 0)
; /* Already in altsetting 0 so skip Set-Interface */
else if (!error && intf->dev.power.status == DPM_ON)
usb_set_interface(udev, intf->altsetting[0]. usb_set_interface(udev, intf->altsetting[0].
desc.bInterfaceNumber, 0); desc.bInterfaceNumber, 0);
else else
......
...@@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) ...@@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
fs_in_desc.bEndpointAddress; fs_in_desc.bEndpointAddress;
hs_out_desc.bEndpointAddress = hs_out_desc.bEndpointAddress =
fs_out_desc.bEndpointAddress; fs_out_desc.bEndpointAddress;
hs_notify_desc.bEndpointAddress =
fs_notify_desc.bEndpointAddress;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(eth_hs_function); f->hs_descriptors = usb_copy_descriptors(eth_hs_function);
...@@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) ...@@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
f->hs_descriptors, &hs_in_desc); f->hs_descriptors, &hs_in_desc);
rndis->hs.out = usb_find_endpoint(eth_hs_function, rndis->hs.out = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_out_desc); f->hs_descriptors, &hs_out_desc);
rndis->hs.notify = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_notify_desc);
} }
rndis->port.open = rndis_open; rndis->port.open = rndis_open;
......
...@@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { ...@@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
static struct usb_device_id id_table_combined [] = { static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
...@@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = { ...@@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },
......
...@@ -40,6 +40,9 @@ ...@@ -40,6 +40,9 @@
/* AlphaMicro Components AMC-232USB01 device */ /* AlphaMicro Components AMC-232USB01 device */
#define FTDI_AMC232_PID 0xFF00 /* Product Id */ #define FTDI_AMC232_PID 0xFF00 /* Product Id */
/* www.candapter.com Ewert Energy Systems CANdapter device */
#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
/* the VID is the standard ftdi vid (FTDI_VID) */ /* the VID is the standard ftdi vid (FTDI_VID) */
#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
...@@ -75,6 +78,9 @@ ...@@ -75,6 +78,9 @@
/* OpenDCC (www.opendcc.de) product id */ /* OpenDCC (www.opendcc.de) product id */
#define FTDI_OPENDCC_PID 0xBFD8 #define FTDI_OPENDCC_PID 0xBFD8
/* Sprog II (Andrew Crosland's SprogII DCC interface) */
#define FTDI_SPROG_II 0xF0C8
/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
/* they use the ftdi chipset for the USB interface and the vendor id is the same */ /* they use the ftdi chipset for the USB interface and the vendor id is the same */
#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
......
...@@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = { ...@@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
{ USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
{ USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
{ USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
......
...@@ -110,3 +110,11 @@ ...@@ -110,3 +110,11 @@
/* Y.C. Cable U.S.A., Inc - USB to RS-232 */ /* Y.C. Cable U.S.A., Inc - USB to RS-232 */
#define YCCABLE_VENDOR_ID 0x05ad #define YCCABLE_VENDOR_ID 0x05ad
#define YCCABLE_PRODUCT_ID 0x0fba #define YCCABLE_PRODUCT_ID 0x0fba
/* "Superial" USB - Serial */
#define SUPERIAL_VENDOR_ID 0x5372
#define SUPERIAL_PRODUCT_ID 0x2303
/* Hewlett-Packard LD220-HP POS Pole Display */
#define HP_VENDOR_ID 0x03f0
#define HP_LD220_PRODUCT_ID 0x3524
...@@ -16,56 +16,6 @@ ...@@ -16,56 +16,6 @@
* For questions or problems with this driver, contact Texas Instruments * For questions or problems with this driver, contact Texas Instruments
* technical support, or Al Borchers <alborchers@steinerpoint.com>, or * technical support, or Al Borchers <alborchers@steinerpoint.com>, or
* Peter Berger <pberger@brimson.com>. * Peter Berger <pberger@brimson.com>.
*
* This driver needs this hotplug script in /etc/hotplug/usb/ti_usb_3410_5052
* or in /etc/hotplug.d/usb/ti_usb_3410_5052.hotplug to set the device
* configuration.
*
* #!/bin/bash
*
* BOOT_CONFIG=1
* ACTIVE_CONFIG=2
*
* if [[ "$ACTION" != "add" ]]
* then
* exit
* fi
*
* CONFIG_PATH=/sys${DEVPATH%/?*}/bConfigurationValue
*
* if [[ 0`cat $CONFIG_PATH` -ne $BOOT_CONFIG ]]
* then
* exit
* fi
*
* PRODUCT=${PRODUCT%/?*} # delete version
* VENDOR_ID=`printf "%d" 0x${PRODUCT%/?*}`
* PRODUCT_ID=`printf "%d" 0x${PRODUCT#*?/}`
*
* PARAM_PATH=/sys/module/ti_usb_3410_5052/parameters
*
* function scan() {
* s=$1
* shift
* for i
* do
* if [[ $s -eq $i ]]
* then
* return 0
* fi
* done
* return 1
* }
*
* IFS=$IFS,
*
* if (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_3410` &&
* scan $PRODUCT_ID 13328 `cat $PARAM_PATH/product_3410`) ||
* (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_5052` &&
* scan $PRODUCT_ID 20562 20818 20570 20575 `cat $PARAM_PATH/product_5052`)
* then
* echo $ACTIVE_CONFIG > $CONFIG_PATH
* fi
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial) ...@@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial)
goto free_tdev; goto free_tdev;
} }
/* the second configuration must be set (in sysfs by hotplug script) */ /* the second configuration must be set */
if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) { if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) {
status = -ENODEV; status = usb_driver_set_configuration(dev, TI_ACTIVE_CONFIG);
status = status ? status : -ENODEV;
goto free_tdev; goto free_tdev;
} }
......
...@@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600, ...@@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ), US_FL_FIX_CAPACITY ),
/* Reported by Ozan Sener <themgzzy@gmail.com> */
UNUSUAL_DEV( 0x0421, 0x0060, 0x0551, 0x0551,
"Nokia",
"3500c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Reported by CSECSY Laszlo <boobaa@frugalware.org> */
UNUSUAL_DEV( 0x0421, 0x0063, 0x0001, 0x0601,
"Nokia",
"Nokia 3109c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Patch for Nokia 5310 capacity */ /* Patch for Nokia 5310 capacity */
UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0701,
"Nokia", "Nokia",
"5310", "5310",
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
......
...@@ -158,8 +158,12 @@ struct usb_ctrlrequest { ...@@ -158,8 +158,12 @@ struct usb_ctrlrequest {
* (rarely) accepted by SET_DESCRIPTOR. * (rarely) accepted by SET_DESCRIPTOR.
* *
* Note that all multi-byte values here are encoded in little endian * Note that all multi-byte values here are encoded in little endian
* byte order "on the wire". But when exposed through Linux-USB APIs, * byte order "on the wire". Within the kernel and when exposed
* they've been converted to cpu byte order. * through the Linux-USB APIs, they are not converted to cpu byte
* order; it is the responsibility of the client code to do this.
* The single exception is when device and configuration descriptors (but
* not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
* in this case the fields are converted to host endianness by the kernel.
*/ */
/* /*
......
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