Re: [PATCH 2/3] usb: cp210x: Added in support to get and store partnumber

From: Sergei Shtylyov
Date: Tue May 01 2012 - 12:17:55 EST


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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/