From patchwork Thu Mar 11 16:14:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 12132075 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28BBFC4332D for ; Thu, 11 Mar 2021 16:15:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DB08864FFF for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234516AbhCKQPK (ORCPT ); Thu, 11 Mar 2021 11:15:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:51284 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234518AbhCKQPB (ORCPT ); Thu, 11 Mar 2021 11:15:01 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 71BCB64F88; Thu, 11 Mar 2021 16:15:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615479300; bh=3+WZZL4p8Kd2t6is02ZHMIxtlxqk2KneRYd45SCOBVQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VB0Mj71sRFw9krTw0/Fb5sr19u3TBGEti5Ebl5RGqFtsVsoRwgsWF0/syCclzC2om xDJkLD2dn4aJfCRAzZVQ80tyb2MZQtbou4xuE/h5dqqEAqhmx2A9re66xcY7mHqObD 9YfNnK4IglKTV8t3UE4Ys+wRZ1gOZmpj+zl5LD3srrAXWl9BU9NcYbrPajK8iQxKF9 PHWRkoDZKncwmnOKZrSV2qZdUXMFAZamILWcfCAPlnc9fNIo0MWAGRXO3sIx32l6wF +HhoSnbwaZaX3s3sRcryFnX8sPoeCKA9ccDAJXQfxUozqpxPDCTCQDWGwPD2ZPbtyb K5qEFwo9TSWdA== Received: from johan by xi.lan with local (Exim 4.93.0.4) (envelope-from ) id 1lKNxv-0000PN-Rw; Thu, 11 Mar 2021 17:15:11 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: "Michael G. Katzmann" , Charles Yeh , =?utf-8?b?WWVoLkNoYXJsZXMgW+iRiQ==?= =?utf-8?b?5qau6ZGrXQ==?= , Johan Hovold Subject: [PATCH 1/5] USB: serial: pl2303: clean up type detection Date: Thu, 11 Mar 2021 17:14:47 +0100 Message-Id: <20210311161451.1496-2-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210311161451.1496-1-johan@kernel.org> References: <20210311161451.1496-1-johan@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Clean up the type detection somewhat in preparation for adding support for more types. Note this also fixes the type debug printk for the new HXN type. Signed-off-by: Johan Hovold --- drivers/usb/serial/pl2303.c | 68 +++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index eed9acd1ae08..db840b471adb 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -362,42 +362,52 @@ static int pl2303_calc_num_ports(struct usb_serial *serial, return 1; } +static enum pl2303_type pl2303_detect_type(struct usb_serial *serial) +{ + struct usb_device_descriptor *desc = &serial->dev->descriptor; + int ret; + u8 buf; + + /* + * Legacy types 0 and 1, difference unknown. + */ + if (desc->bDeviceClass == 0x02) + return TYPE_01; /* type 0 */ + + if (desc->bMaxPacketSize0 != 0x40) { + if (desc->bDeviceClass == 0x00 || desc->bDeviceClass == 0xff) + return TYPE_01; /* type 1 */ + + return TYPE_01; /* type 0 */ + } + + /* + * Assume it's an HXN-type if the device doesn't support the old read + * request value. + */ + ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST, + VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS, + 0, &buf, 1, 100, GFP_KERNEL); + if (ret) + return TYPE_HXN; + + return TYPE_HX; +} + static int pl2303_startup(struct usb_serial *serial) { struct pl2303_serial_private *spriv; - enum pl2303_type type = TYPE_01; + enum pl2303_type type; unsigned char *buf; - int res; spriv = kzalloc(sizeof(*spriv), GFP_KERNEL); if (!spriv) return -ENOMEM; - buf = kmalloc(1, GFP_KERNEL); - if (!buf) { - kfree(spriv); - return -ENOMEM; - } + type = pl2303_detect_type(serial); - if (serial->dev->descriptor.bDeviceClass == 0x02) - type = TYPE_01; /* type 0 */ - else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40) - type = TYPE_HX; - else if (serial->dev->descriptor.bDeviceClass == 0x00) - type = TYPE_01; /* type 1 */ - else if (serial->dev->descriptor.bDeviceClass == 0xFF) - type = TYPE_01; /* type 1 */ dev_dbg(&serial->interface->dev, "device type: %d\n", type); - if (type == TYPE_HX) { - res = usb_control_msg(serial->dev, - usb_rcvctrlpipe(serial->dev, 0), - VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE, - PL2303_READ_TYPE_HX_STATUS, 0, buf, 1, 100); - if (res != 1) - type = TYPE_HXN; - } - spriv->type = &pl2303_type_data[type]; spriv->quirks = (unsigned long)usb_get_serial_data(serial); spriv->quirks |= spriv->type->quirks; @@ -405,6 +415,12 @@ static int pl2303_startup(struct usb_serial *serial) usb_set_serial_data(serial, spriv); if (type != TYPE_HXN) { + buf = kmalloc(1, GFP_KERNEL); + if (!buf) { + kfree(spriv); + return -ENOMEM; + } + pl2303_vendor_read(serial, 0x8484, buf); pl2303_vendor_write(serial, 0x0404, 0); pl2303_vendor_read(serial, 0x8484, buf); @@ -419,9 +435,9 @@ static int pl2303_startup(struct usb_serial *serial) pl2303_vendor_write(serial, 2, 0x24); else pl2303_vendor_write(serial, 2, 0x44); - } - kfree(buf); + kfree(buf); + } return 0; } From patchwork Thu Mar 11 16:14:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 12132071 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6D22C433E9 for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 99E1B65000 for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234512AbhCKQPJ (ORCPT ); Thu, 11 Mar 2021 11:15:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:51300 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234521AbhCKQPB (ORCPT ); Thu, 11 Mar 2021 11:15:01 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 79B9E64F93; Thu, 11 Mar 2021 16:15:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615479300; bh=wyAVSGXLnNZc1TUTBV+2d6Z38Ptcx8rldBEVslR4Mqs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BRkx/gdBAV3lzDYpCo8bpcPMy4WlIQRiGWBmy086zOYStjpWiFdHOP9NxhdCE1zpH FG6JS4I5RA0oXvvSKCF7364cOAN7gkgMy2QVBygcSWJrLGkJB2DhGaupa09XGFoO+R SvDmQ6F+38GasId7RytJmJZUgQtYx+jpwW6riUfVDwbt2f6hvpH9NtuHAZQuE3LM78 L2wGdchU5r2Ivi/1L8mXueQP2rvVv8A+7Aja1cKucncV8nBLSeoZ8sJS/OzfcjCWij Em1YVt61zNUkWOOz9bnzNvhjTmvUHZEFWTbbAqmr1yjORiMnHYLCOQuSGQG47hBMR4 8MOhBMI0lUjKA== Received: from johan by xi.lan with local (Exim 4.93.0.4) (envelope-from ) id 1lKNxv-0000PQ-Uw; Thu, 11 Mar 2021 17:15:11 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: "Michael G. Katzmann" , Charles Yeh , =?utf-8?b?WWVoLkNoYXJsZXMgW+iRiQ==?= =?utf-8?b?5qau6ZGrXQ==?= , Johan Hovold Subject: [PATCH 2/5] USB: serial: pl2303: amend and tighten type detection Date: Thu, 11 Mar 2021 17:14:48 +0100 Message-Id: <20210311161451.1496-3-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210311161451.1496-1-johan@kernel.org> References: <20210311161451.1496-1-johan@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Add support for detecting the HX, TA, TB and HXD device types and refuse to bind to any unknown types. Note that the HX type includes the XA variant, while the HXD type includes the EA, RA and SA variants. Signed-off-by: Johan Hovold --- drivers/usb/serial/pl2303.c | 50 +++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index db840b471adb..42dcc3cfb449 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -174,8 +174,11 @@ static void pl2303_set_break(struct usb_serial_port *port, bool enable); enum pl2303_type { TYPE_01, /* Type 0 and 1 (difference unknown) */ - TYPE_HX, /* HX version of the pl2303 chip */ - TYPE_HXN, /* HXN version of the pl2303 chip */ + TYPE_HX, + TYPE_TA, + TYPE_TB, + TYPE_HXD, + TYPE_HXN, TYPE_COUNT }; @@ -206,6 +209,15 @@ static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = { .no_autoxonxoff = true, }, [TYPE_HX] = { + .max_baud_rate = 6000000, + }, + [TYPE_TA] = { + .max_baud_rate = 6000000, + }, + [TYPE_TB] = { + .max_baud_rate = 12000000, + }, + [TYPE_HXD] = { .max_baud_rate = 12000000, }, [TYPE_HXN] = { @@ -362,9 +374,10 @@ static int pl2303_calc_num_ports(struct usb_serial *serial, return 1; } -static enum pl2303_type pl2303_detect_type(struct usb_serial *serial) +static int pl2303_detect_type(struct usb_serial *serial) { struct usb_device_descriptor *desc = &serial->dev->descriptor; + u16 bcdDevice, bcdUSB; int ret; u8 buf; @@ -391,7 +404,24 @@ static enum pl2303_type pl2303_detect_type(struct usb_serial *serial) if (ret) return TYPE_HXN; - return TYPE_HX; + bcdDevice = le16_to_cpu(desc->bcdDevice); + bcdUSB = le16_to_cpu(desc->bcdUSB); + + switch (bcdDevice) { + case 0x300: + if (bcdUSB == 0x200) + return TYPE_TA; + + return TYPE_HX; + case 0x400: + return TYPE_HXD; + case 0x500: + return TYPE_TB; + } + + dev_err(&serial->interface->dev, + "unknown device type, please report to linux-usb@vger.kernel.org\n"); + return -ENODEV; } static int pl2303_startup(struct usb_serial *serial) @@ -399,15 +429,19 @@ static int pl2303_startup(struct usb_serial *serial) struct pl2303_serial_private *spriv; enum pl2303_type type; unsigned char *buf; + int ret; + + ret = pl2303_detect_type(serial); + if (ret < 0) + return ret; + + type = ret; + dev_dbg(&serial->interface->dev, "device type: %d\n", type); spriv = kzalloc(sizeof(*spriv), GFP_KERNEL); if (!spriv) return -ENOMEM; - type = pl2303_detect_type(serial); - - dev_dbg(&serial->interface->dev, "device type: %d\n", type); - spriv->type = &pl2303_type_data[type]; spriv->quirks = (unsigned long)usb_get_serial_data(serial); spriv->quirks |= spriv->type->quirks; From patchwork Thu Mar 11 16:14:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 12132067 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BFB18C433E6 for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7175B64F90 for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234388AbhCKQPK (ORCPT ); Thu, 11 Mar 2021 11:15:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:51312 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234522AbhCKQPB (ORCPT ); Thu, 11 Mar 2021 11:15:01 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7EE1664FE2; Thu, 11 Mar 2021 16:15:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615479300; bh=1bzKS5UL0IvP/DsU+LZMEocUUgh5Q3Hsa9nuZCARpTk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a8dyS3b37jkB6GKkoaX+OjQa6FuQkwZIU2zmElemzR4W9VF0ILboD1Wd2/NWZgz6K racoO/kA+774W+sZj/FigU5D3dMWePDSK9Dp61UKPkkK+pHNR1GDTZ9H5nOWTZOx0l XWBVplGa59sX5rHV0KjHdsekNuDm7EreHylcZENTZesji9W/Ve9wu49wO2YQE9acnj NOlO6ZaPUS7FpPJYVgEMarLbo2xUsihEQdmyMhg3hwpISp8TuPHa0bLmQtDX8Qw/i6 qmiV8Ziv68JRDPOviJtKXsRvRawFYWyZK9XHnYKxiyhO72duMRnFL+gGKjEo8l0zuE P1JJmTtBDR5Lg== Received: from johan by xi.lan with local (Exim 4.93.0.4) (envelope-from ) id 1lKNxw-0000PU-1h; Thu, 11 Mar 2021 17:15:12 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: "Michael G. Katzmann" , Charles Yeh , =?utf-8?b?WWVoLkNoYXJsZXMgW+iRiQ==?= =?utf-8?b?5qau6ZGrXQ==?= , Johan Hovold Subject: [PATCH 3/5] USB: serial: pl2303: rename legacy PL2303H type Date: Thu, 11 Mar 2021 17:14:49 +0100 Message-Id: <20210311161451.1496-4-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210311161451.1496-1-johan@kernel.org> References: <20210311161451.1496-1-johan@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Rename the legacy type which is supposedly a PL2303H which came in two variants (and which we handle the same way). Signed-off-by: Johan Hovold --- drivers/usb/serial/pl2303.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 42dcc3cfb449..cd2acd8c5246 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -173,7 +173,7 @@ MODULE_DEVICE_TABLE(usb, id_table); static void pl2303_set_break(struct usb_serial_port *port, bool enable); enum pl2303_type { - TYPE_01, /* Type 0 and 1 (difference unknown) */ + TYPE_H, TYPE_HX, TYPE_TA, TYPE_TB, @@ -203,7 +203,7 @@ struct pl2303_private { }; static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = { - [TYPE_01] = { + [TYPE_H] = { .max_baud_rate = 1228800, .quirks = PL2303_QUIRK_LEGACY, .no_autoxonxoff = true, @@ -382,16 +382,16 @@ static int pl2303_detect_type(struct usb_serial *serial) u8 buf; /* - * Legacy types 0 and 1, difference unknown. + * Legacy PL2303H, variants 0 and 1 (difference unknown). */ if (desc->bDeviceClass == 0x02) - return TYPE_01; /* type 0 */ + return TYPE_H; /* variant 0 */ if (desc->bMaxPacketSize0 != 0x40) { if (desc->bDeviceClass == 0x00 || desc->bDeviceClass == 0xff) - return TYPE_01; /* type 1 */ + return TYPE_H; /* variant 1 */ - return TYPE_01; /* type 0 */ + return TYPE_H; /* variant 0 */ } /* From patchwork Thu Mar 11 16:14:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 12132073 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4FDBFC4332B for ; Thu, 11 Mar 2021 16:15:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2808064FE2 for ; Thu, 11 Mar 2021 16:15:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234513AbhCKQPK (ORCPT ); Thu, 11 Mar 2021 11:15:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:51298 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234520AbhCKQPB (ORCPT ); Thu, 11 Mar 2021 11:15:01 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7C3D764F97; Thu, 11 Mar 2021 16:15:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615479300; bh=hFcDse+HNyVQ6fnuGbcZvi9Bv47uK4v68afgAutxoyI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KrTaFXOgxKnPrx1/r/uiHICCjWWveyHRwfAgN9DyL0S8hoxZs3WOfIm++nknXGQmW iCoQUxVrpOuFYdfuBv0gpwfKEVu2swu6gCKmbRKw13CuQ69GID/XZI4HIblnLY4a9n mwtkcJyEhGwRjeeF26TOTU3liPG8YHKPiBngj21sJfyZgNrpWpHRXPAJR3+tGdE5aK IOVij7sribp0Mh3v3SoJRmOWamB8HymJ2Fo4oXzkpfQn/vRl+BO3Ks4QaN2JlLIz8+ B0r8zY2UbwuVOiMzcffkJO1UGUteHdGq1ANiA5F+G8efBwKcaAbAISrW0/DtXgnvgw ebatyNG48zQVg== Received: from johan by xi.lan with local (Exim 4.93.0.4) (envelope-from ) id 1lKNxw-0000PX-4t; Thu, 11 Mar 2021 17:15:12 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: "Michael G. Katzmann" , Charles Yeh , =?utf-8?b?WWVoLkNoYXJsZXMgW+iRiQ==?= =?utf-8?b?5qau6ZGrXQ==?= , Johan Hovold Subject: [PATCH 4/5] USB: serial: pl2303: tighten type HXN (G) detection Date: Thu, 11 Mar 2021 17:14:50 +0100 Message-Id: <20210311161451.1496-5-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210311161451.1496-1-johan@kernel.org> References: <20210311161451.1496-1-johan@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Tighten the detection of the new HXN (G) type instead of assuming that every device which doesn't support the old read request is an HXN. Signed-off-by: Johan Hovold --- drivers/usb/serial/pl2303.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index cd2acd8c5246..e742187c8a7f 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -374,12 +374,22 @@ static int pl2303_calc_num_ports(struct usb_serial *serial, return 1; } +static bool pl2303_supports_hx_status(struct usb_serial *serial) +{ + int ret; + u8 buf; + + ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST, + VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS, + 0, &buf, 1, 100, GFP_KERNEL); + + return ret == 0; +} + static int pl2303_detect_type(struct usb_serial *serial) { struct usb_device_descriptor *desc = &serial->dev->descriptor; u16 bcdDevice, bcdUSB; - int ret; - u8 buf; /* * Legacy PL2303H, variants 0 and 1 (difference unknown). @@ -394,20 +404,18 @@ static int pl2303_detect_type(struct usb_serial *serial) return TYPE_H; /* variant 0 */ } - /* - * Assume it's an HXN-type if the device doesn't support the old read - * request value. - */ - ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST, - VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS, - 0, &buf, 1, 100, GFP_KERNEL); - if (ret) - return TYPE_HXN; - bcdDevice = le16_to_cpu(desc->bcdDevice); bcdUSB = le16_to_cpu(desc->bcdUSB); switch (bcdDevice) { + case 0x100: + /* + * Assume it's an HXN-type if the device doesn't support the old read + * request value. + */ + if (bcdUSB == 0x200 && !pl2303_supports_hx_status(serial)) + return TYPE_HXN; + break; case 0x300: if (bcdUSB == 0x200) return TYPE_TA; From patchwork Thu Mar 11 16:14:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 12132065 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D0C6C433E0 for ; Thu, 11 Mar 2021 16:15:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B79DA64F8E for ; Thu, 11 Mar 2021 16:15:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234507AbhCKQPI (ORCPT ); Thu, 11 Mar 2021 11:15:08 -0500 Received: from mail.kernel.org ([198.145.29.99]:51314 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234523AbhCKQPB (ORCPT ); Thu, 11 Mar 2021 11:15:01 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8174364FEB; Thu, 11 Mar 2021 16:15:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615479300; bh=+CpZJ+g402OOdXJ2CV7TsiSzCSM/A8MZ4PDGoxW/HOA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uwUx5hMSeYN2Rau3kokwyTUw/k0+3s/vxHardNuCBTwQ4rN0LUyFU1pGpFag3EqRO lzZo3aWDgOTQRpO5UARKHSN4NW1370SW5ycRqHtysch4usDTKtoqAPE5WFrpUQAIhl pr5tjkruVnaPjJOnxr55FGpNHM4iXd3yB8zS7OxJg2htROeJtqQanPTi5fVVY+ut1X XxpU2bwHa9+J/8Y6AuHipnjrDTx3+KEbGRPA1PtyEO53OmWG95a4Q/VgBI240Qp+4i 8tbb1WwlPauJ/uxY1SQETXMZceYdfYH+SSSQLvHPg0cEMsgYb8Mrj8oIKv1WkQqSim k132lb4CfZ8ig== Received: from johan by xi.lan with local (Exim 4.93.0.4) (envelope-from ) id 1lKNxw-0000Pb-8N; Thu, 11 Mar 2021 17:15:12 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: "Michael G. Katzmann" , Charles Yeh , =?utf-8?b?WWVoLkNoYXJsZXMgW+iRiQ==?= =?utf-8?b?5qau6ZGrXQ==?= , Johan Hovold Subject: [PATCH 5/5] USB: serial: pl2303: add device-type names Date: Thu, 11 Mar 2021 17:14:51 +0100 Message-Id: <20210311161451.1496-6-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210311161451.1496-1-johan@kernel.org> References: <20210311161451.1496-1-johan@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Add names for the device types to be printed at probe when debugging is enabled. Note that the HXN type is referred to as G for now as that is the name the vendor uses. Signed-off-by: Johan Hovold --- drivers/usb/serial/pl2303.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index e742187c8a7f..7208966891d0 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -183,6 +183,7 @@ enum pl2303_type { }; struct pl2303_type_data { + const char *name; speed_t max_baud_rate; unsigned long quirks; unsigned int no_autoxonxoff:1; @@ -204,23 +205,29 @@ struct pl2303_private { static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = { [TYPE_H] = { + .name = "H", .max_baud_rate = 1228800, .quirks = PL2303_QUIRK_LEGACY, .no_autoxonxoff = true, }, [TYPE_HX] = { + .name = "HX", .max_baud_rate = 6000000, }, [TYPE_TA] = { + .name = "TA", .max_baud_rate = 6000000, }, [TYPE_TB] = { + .name = "TB", .max_baud_rate = 12000000, }, [TYPE_HXD] = { + .name = "HXD", .max_baud_rate = 12000000, }, [TYPE_HXN] = { + .name = "G", .max_baud_rate = 12000000, .no_divisors = true, }, @@ -444,7 +451,7 @@ static int pl2303_startup(struct usb_serial *serial) return ret; type = ret; - dev_dbg(&serial->interface->dev, "device type: %d\n", type); + dev_dbg(&serial->interface->dev, "device type: %s\n", pl2303_type_data[type].name); spriv = kzalloc(sizeof(*spriv), GFP_KERNEL); if (!spriv)