Hello. On 01-05-2012 8:06, Preston Fick wrote:
This change gets the part number of the device when the driver is loaded and stores it in the private portion of the port structure. This addition will allow for part specific functionality to be added to the driver if needed.
Signed-off-by: Preston Fick<preston.fick@xxxxxxxxxx> --- drivers/usb/serial/cp210x.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index e67ccf3..b3646b8 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c
[...]
@@ -862,6 +874,7 @@ static int cp210x_startup(struct usb_serial *serial) { struct cp210x_port_private *port_priv; int i; + unsigned int partNum; /* cp210x buffers behave strangely unless device is reset */ usb_reset_device(serial->dev); @@ -876,6 +889,17 @@ static int cp210x_startup(struct usb_serial *serial) serial->interface->cur_altsetting->desc.bInterfaceNumber; usb_set_serial_port_data(serial->port[i], port_priv); + + /* Get the 1-byte part number of the cp210x device */ + usb_control_msg(serial->dev,
This may involve DMA...
+ usb_rcvctrlpipe(serial->dev, 0), + CP210X_VENDOR_SPECIFIC, + REQTYPE_DEVICE_TO_HOST, + CP210X_GET_PARTNUM, + port_priv->bInterfaceNumber, + &partNum, 1,
You can't do DMA to a buffer situated on stack. You should kmalloc() the buffer.
+ USB_CTRL_GET_TIMEOUT); + port_priv->bPartNumber = partNum& 0xFF; } return 0;
WBR, Sergei -- 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