From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754342AbbGXGta (ORCPT ); Fri, 24 Jul 2015 02:49:30 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:38756 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754221AbbGXGtU (ORCPT ); Fri, 24 Jul 2015 02:49:20 -0400 From: Petr Tesarik To: Johan Hovold , Greg Kroah-Hartman Cc: Petr Tesarik , linux-usb@vger.kernel.org (open list:USB SERIAL SUBSYSTEM), linux-kernel@vger.kernel.org (open list), Petr Tesarik Subject: [PATCH 3/4] cp210x: Store part number Date: Fri, 24 Jul 2015 08:48:10 +0200 Message-Id: <1437720491-28702-4-git-send-email-ptesarik@suse.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437720491-28702-1-git-send-email-ptesarik@suse.com> References: <1437720491-28702-1-git-send-email-ptesarik@suse.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Petr Tesarik Query and store the CP210x part number. Signed-off-by: Petr Tesarik --- 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