From: Petr Tesarik <ptesarik@xxxxxxx> Query and store the CP210x part number. Signed-off-by: Petr Tesarik <ptesarik@xxxxxxxx> --- drivers/usb/serial/cp210x.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 69f03b6..dbfc722 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -199,6 +199,7 @@ MODULE_DEVICE_TABLE(usb, id_table); struct cp210x_serial_private { __u8 bInterfaceNumber; + __u8 bPartNumber; }; static struct usb_serial_driver cp210x_device = { @@ -264,6 +265,7 @@ enum cp210x_request_type { #define CP210X_SET_CHARS 0x19 #define CP210X_GET_BAUDRATE 0x1D #define CP210X_SET_BAUDRATE 0x1E +#define CP210X_VENDOR_SPECIFIC 0xFF /* CP210X_IFC_ENABLE */ #define UART_ENABLE 0x0001 @@ -306,6 +308,17 @@ enum cp210x_request_type { #define CONTROL_WRITE_DTR 0x0100 #define CONTROL_WRITE_RTS 0x0200 +/* CP210X_VENDOR_SPECIFIC */ +#define CP210X_GET_PARTNUM 0x370B + +/* Part number definitions */ +#define CP2101_PARTNUM 0x01 +#define CP2102_PARTNUM 0x02 +#define CP2103_PARTNUM 0x03 +#define CP2104_PARTNUM 0x04 +#define CP2105_PARTNUM 0x05 +#define CP2108_PARTNUM 0x08 + /* * cp210x_control_msg * Sends a generic control message, taking care of endianness @@ -862,6 +875,7 @@ static int cp210x_startup(struct usb_serial *serial) { struct usb_host_interface *cur_altsetting; struct cp210x_serial_private *spriv; + unsigned int partnum; spriv = kzalloc(sizeof(*spriv), GFP_KERNEL); if (!spriv) @@ -872,6 +886,12 @@ static int cp210x_startup(struct usb_serial *serial) usb_set_serial_data(serial, spriv); + /* Get the 1-byte part number of the cp210x device */ + cp210x_control_msg(serial->port[0], CP210X_VENDOR_SPECIFIC, + REQTYPE_DEVICE_TO_HOST, CP210X_GET_PARTNUM, + &partnum, 1, USB_CTRL_GET_TIMEOUT); + spriv->bPartNumber = partnum & 0xFF; + return 0; } -- 2.1.4 -- 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