From patchwork Mon Jul 13 10:55:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 11659345 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D6DF060D for ; Mon, 13 Jul 2020 10:55:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ADABC2077D for ; Mon, 13 Jul 2020 10:55:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594637730; bh=1kLHJjK6hCma1oTps7hVSazp/9100xV5vpyniYSkA+8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=cjKTuQ8yb66u8+5dpz6YPtLkF6dFRkvB6MsgwmjzkeqzI3qJaT02ZgVWNv1BYNWBd oCTcZCgt1fkSm8tF/Zn3uTCUfxYkeMRghpUUu8Zbs0u4ZBBEY+85NQXCQknj9tXkeS OAIolSsxvul2gqov6TMSPF9R5Bk+oWOE/dlA5m1k= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729625AbgGMKza (ORCPT ); Mon, 13 Jul 2020 06:55:30 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:46625 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729252AbgGMKz3 (ORCPT ); Mon, 13 Jul 2020 06:55:29 -0400 Received: by mail-lj1-f193.google.com with SMTP id h19so17021059ljg.13 for ; Mon, 13 Jul 2020 03:55:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fca4nwkeJS+tOliouYMIx2938BmfPBfN847VG1swYws=; b=L0t4jIuo2Zks1XJ9kQ4MaKm2XeRSFiBjS+jg9nu10yhfYoD3LWEGVBqCj5m296YYUs PUMk5Z63FSSAmGAH0rds0QhkEepP3VCngnAj4Ad50ibOxjOKU8kewsdDX45JJh40RjrL 0w+OP8Cg6HyOdyv8OGXU7CKDUsF/tD1n2YUb5k1nOmDHeh1/1AZVMTXZAjggCacRAI+0 JoDoPTgQUhPFkLfLndakmZZstrhNGVwPb3Izv/TKoTEhy3Rl2xif86LqnWVRYP8kYGRJ 7XQ+gn9lHn6ixDZ79taYENaEeeInG9Cqs9AyG8JnF3C6LF7ThPOT/w0uW+NRCYEJW/Go uBgQ== X-Gm-Message-State: AOAM533O7GHt5R5A131LYEdGF84HGcRMK1xsMxgDiCbHeejWS6xHkSZd dNrLO7RFqsTncxcjE9ruDaYNiVSGDeA= X-Google-Smtp-Source: ABdhPJz9pLrtxpWy3uWGoDvGNsloNa0kCm61rtK0+J+0kds5n/ILiOTUSMI2CbSMW48osjWd34yF1g== X-Received: by 2002:a05:651c:2046:: with SMTP id t6mr38364066ljo.217.1594637726658; Mon, 13 Jul 2020 03:55:26 -0700 (PDT) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id a16sm5553518ljj.108.2020.07.13.03.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 03:55:25 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1juw7S-0007FD-2y; Mon, 13 Jul 2020 12:55:34 +0200 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: =?utf-8?b?SmFyb23DrXIgxaBrb3JwaWw=?= , Johan Hovold Subject: [PATCH 1/5] USB: serial: cp210x: disable interface on errors in open Date: Mon, 13 Jul 2020 12:55:13 +0200 Message-Id: <20200713105517.27796-2-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200713105517.27796-1-johan@kernel.org> References: <20200713105517.27796-1-johan@kernel.org> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Try to disable the serial interface in the unlikely event that generic open() fails. Signed-off-by: Johan Hovold --- drivers/usb/serial/cp210x.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index a90801ef0055..c01c7863dd1a 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -824,7 +824,16 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) if (tty) cp210x_change_speed(tty, port, NULL); - return usb_serial_generic_open(tty, port); + result = usb_serial_generic_open(tty, port); + if (result) + goto err_disable; + + return 0; + +err_disable: + cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE); + + return result; } static void cp210x_close(struct usb_serial_port *port) From patchwork Mon Jul 13 10:55:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 11659349 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 518D860D for ; Mon, 13 Jul 2020 10:55:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2CC862077D for ; Mon, 13 Jul 2020 10:55:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594637733; bh=7Dk4mQF9/VfhjYA/E7S8Pk3BiHuq8FN4l0FLxFMYfQ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=X1WrJde3f2nztf4PqAzmWEqwDt/thVcErBAFMplkqF69/sKIGmZ4F/Z+aGaGzgIin 8un3U32f4HFguFvOui4B2W+xvBs7tIqwTFeZQJ4brfCo7N6ZEYGdgJnsNxKYT2C3F1 f4R3w2VKt3xwHTupHujwef4sSt4UFyaliBkpD4r4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729593AbgGMKzc (ORCPT ); Mon, 13 Jul 2020 06:55:32 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:40974 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729357AbgGMKza (ORCPT ); Mon, 13 Jul 2020 06:55:30 -0400 Received: by mail-lj1-f195.google.com with SMTP id z24so17045560ljn.8 for ; Mon, 13 Jul 2020 03:55:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vF+Ftw0lHEaGEj6D/IkUOTFKGmzE//rEEn+R84Os3m4=; b=f39xiqC7tBekdZTlBfjEIBZmBAWvyNQkhIGH7JMg8nGbKWCcS8WJJFhzMTfJfBcN/7 eLyDnncong2Q5O8RGtbZArDloASvLXEkF4+mdH1MNK5lzdpbwHYm8H+vN28dW0wyN8fX lXjhSR8Q5ZcqOW28K9Q8mObWDX7yGzzLRNczYx6ZMfrefm9VKkD3w+RZBsNiM+8uiRTV DZzvfoZFaGJ0ZQlwUqzq2Q0cd4wyUr23qXlPE8a4zyO9TQv+HkAfX74YVWQk4lWrK58p Ek1nspudB7gu2Yt1Zh+ZOg/CNHMx+5aEwecU/Dk3P7rOO8MvqJWI6SlUW2wCJsXz6Z3d zT1Q== X-Gm-Message-State: AOAM530Ajn2PEDxbKsFWEpgU+Ge/MOpAEkNJdcEEp+fuoC702ua3DDJX WrPs4v9w6JA79web5XdVatCejWUOWhk= X-Google-Smtp-Source: ABdhPJwe6Acc+C4xA0t/PXF13U4w105aeXkSZLmcF90Q1j2SvUWgtQMBayleuwYpiRMfMHTXM7IEZg== X-Received: by 2002:a2e:b554:: with SMTP id a20mr46005131ljn.108.1594637727016; Mon, 13 Jul 2020 03:55:27 -0700 (PDT) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id f24sm5513340ljc.99.2020.07.13.03.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 03:55:25 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1juw7S-0007FJ-5t; Mon, 13 Jul 2020 12:55:34 +0200 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: =?utf-8?b?SmFyb23DrXIgxaBrb3JwaWw=?= , Johan Hovold Subject: [PATCH 2/5] USB: serial: cp210x: add support for line-status events Date: Mon, 13 Jul 2020 12:55:14 +0200 Message-Id: <20200713105517.27796-3-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200713105517.27796-1-johan@kernel.org> References: <20200713105517.27796-1-johan@kernel.org> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Add support for line-status events that specifically can be used to detect and report parity errors. Enable the device's event-insertion mode whenever input-parity checking is requested. This will insert line and modem status events into the data stream. Note that modem-status changes appear to be buffered until a character is received (at least on CP2102) and support is therefore left unimplemented. On at least one type of these chips (CP2102), line breaks are not reported as expected either (regardless of whether SERIAL_BREAK_CHAR is set) so do not enable event-mode when !IGNBRK is requested for now. Signed-off-by: Johan Hovold --- drivers/usb/serial/cp210x.c | 189 +++++++++++++++++++++++++++++++++++- 1 file changed, 186 insertions(+), 3 deletions(-) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index c01c7863dd1a..02e4acb2823b 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -50,6 +50,9 @@ static void cp210x_release(struct usb_serial *); static int cp210x_port_probe(struct usb_serial_port *); static int cp210x_port_remove(struct usb_serial_port *); static void cp210x_dtr_rts(struct usb_serial_port *p, int on); +static void cp210x_process_read_urb(struct urb *urb); +static void cp210x_enable_event_mode(struct usb_serial_port *port); +static void cp210x_disable_event_mode(struct usb_serial_port *port); static const struct usb_device_id id_table[] = { { USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */ @@ -253,9 +256,21 @@ struct cp210x_serial_private { bool use_actual_rate; }; +enum cp210x_event_state { + ES_DATA, + ES_ESCAPE, + ES_LSR, + ES_LSR_DATA_0, + ES_LSR_DATA_1, + ES_MSR +}; + struct cp210x_port_private { __u8 bInterfaceNumber; bool has_swapped_line_ctl; + bool event_mode; + enum cp210x_event_state event_state; + u8 lsr; }; static struct usb_serial_driver cp210x_device = { @@ -281,7 +296,8 @@ static struct usb_serial_driver cp210x_device = { .release = cp210x_release, .port_probe = cp210x_port_probe, .port_remove = cp210x_port_remove, - .dtr_rts = cp210x_dtr_rts + .dtr_rts = cp210x_dtr_rts, + .process_read_urb = cp210x_process_read_urb, }; static struct usb_serial_driver * const serial_drivers[] = { @@ -403,6 +419,15 @@ struct cp210x_comm_status { */ #define PURGE_ALL 0x000f +/* CP210X_EMBED_EVENTS */ +#define CP210X_ESCCHAR 0xec + +#define CP210X_LSR_OVERRUN BIT(1) +#define CP210X_LSR_PARITY BIT(2) +#define CP210X_LSR_FRAME BIT(3) +#define CP210X_LSR_BREAK BIT(4) + + /* CP210X_GET_FLOW/CP210X_SET_FLOW read/write these 0x10 bytes */ struct cp210x_flow_ctl { __le32 ulControlHandshake; @@ -809,6 +834,7 @@ static int cp210x_get_line_ctl(struct usb_serial_port *port, u16 *ctl) static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) { + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); int result; result = cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_ENABLE); @@ -820,10 +846,14 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) /* Configure the termios structure */ cp210x_get_termios(tty, port); - /* The baud rate must be initialised on cp2104 */ - if (tty) + if (tty) { + /* The baud rate must be initialised on cp2104 */ cp210x_change_speed(tty, port, NULL); + if (I_INPCK(tty)) + cp210x_enable_event_mode(port); + } + result = usb_serial_generic_open(tty, port); if (result) goto err_disable; @@ -832,18 +862,128 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) err_disable: cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE); + port_priv->event_mode = false; return result; } static void cp210x_close(struct usb_serial_port *port) { + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); + usb_serial_generic_close(port); /* Clear both queues; cp2108 needs this to avoid an occasional hang */ cp210x_write_u16_reg(port, CP210X_PURGE, PURGE_ALL); cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE); + + /* Disabling the interface disables event-insertion mode. */ + port_priv->event_mode = false; +} + +static void cp210x_process_lsr(struct usb_serial_port *port, unsigned char lsr, char *flag) +{ + if (lsr & CP210X_LSR_BREAK) { + port->icount.brk++; + *flag = TTY_BREAK; + } else if (lsr & CP210X_LSR_PARITY) { + port->icount.parity++; + *flag = TTY_PARITY; + } else if (lsr & CP210X_LSR_FRAME) { + port->icount.frame++; + *flag = TTY_FRAME; + } + + if (lsr & CP210X_LSR_OVERRUN) { + port->icount.overrun++; + tty_insert_flip_char(&port->port, 0, TTY_OVERRUN); + } +} + +static bool cp210x_process_char(struct usb_serial_port *port, unsigned char *ch, char *flag) +{ + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); + + switch (port_priv->event_state) { + case ES_DATA: + if (*ch == CP210X_ESCCHAR) { + port_priv->event_state = ES_ESCAPE; + break; + } + return false; + case ES_ESCAPE: + switch (*ch) { + case 0: + dev_dbg(&port->dev, "%s - escape char\n", __func__); + *ch = CP210X_ESCCHAR; + port_priv->event_state = ES_DATA; + return false; + case 1: + port_priv->event_state = ES_LSR_DATA_0; + break; + case 2: + port_priv->event_state = ES_LSR; + break; + case 3: + port_priv->event_state = ES_MSR; + break; + default: + dev_err(&port->dev, "malformed event 0x%02x\n", *ch); + port_priv->event_state = ES_DATA; + break; + } + break; + case ES_LSR_DATA_0: + port_priv->lsr = *ch; + port_priv->event_state = ES_LSR_DATA_1; + break; + case ES_LSR_DATA_1: + dev_dbg(&port->dev, "%s - lsr = 0x%02x, data = 0x%02x\n", + __func__, port_priv->lsr, *ch); + cp210x_process_lsr(port, port_priv->lsr, flag); + port_priv->event_state = ES_DATA; + return false; + case ES_LSR: + dev_dbg(&port->dev, "%s - lsr = 0x%02x\n", __func__, *ch); + port_priv->lsr = *ch; + cp210x_process_lsr(port, port_priv->lsr, flag); + port_priv->event_state = ES_DATA; + break; + case ES_MSR: + dev_dbg(&port->dev, "%s - msr = 0x%02x\n", __func__, *ch); + /* unimplemented */ + port_priv->event_state = ES_DATA; + break; + } + + return true; +} + +static void cp210x_process_read_urb(struct urb *urb) +{ + struct usb_serial_port *port = urb->context; + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); + unsigned char *ch = urb->transfer_buffer; + char flag; + int i; + + if (!urb->actual_length) + return; + + if (port_priv->event_mode) { + for (i = 0; i < urb->actual_length; i++, ch++) { + flag = TTY_NORMAL; + + if (cp210x_process_char(port, ch, &flag)) + continue; + + tty_insert_flip_char(&port->port, *ch, flag); + } + } else { + tty_insert_flip_string(&port->port, ch, urb->actual_length); + } + tty_flip_buffer_push(&port->port); } /* @@ -1176,6 +1316,41 @@ static void cp210x_change_speed(struct tty_struct *tty, tty_encode_baud_rate(tty, baud, baud); } +static void cp210x_enable_event_mode(struct usb_serial_port *port) +{ + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); + int ret; + + if (port_priv->event_mode) + return; + + port_priv->event_state = ES_DATA; + port_priv->event_mode = true; + + ret = cp210x_write_u16_reg(port, CP210X_EMBED_EVENTS, CP210X_ESCCHAR); + if (ret) { + dev_err(&port->dev, "failed to enable events: %d\n", ret); + port_priv->event_mode = false; + } +} + +static void cp210x_disable_event_mode(struct usb_serial_port *port) +{ + struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); + int ret; + + if (!port_priv->event_mode) + return; + + ret = cp210x_write_u16_reg(port, CP210X_EMBED_EVENTS, 0); + if (ret) { + dev_err(&port->dev, "failed to disable events: %d\n", ret); + return; + } + + port_priv->event_mode = false; +} + static void cp210x_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { @@ -1298,6 +1473,14 @@ static void cp210x_set_termios(struct tty_struct *tty, sizeof(flow_ctl)); } + /* + * Enable event-insertion mode only if input parity checking is + * enabled for now. + */ + if (I_INPCK(tty)) + cp210x_enable_event_mode(port); + else + cp210x_disable_event_mode(port); } static int cp210x_tiocmset(struct tty_struct *tty, From patchwork Mon Jul 13 10:55:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 11659347 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 869EB14DD for ; Mon, 13 Jul 2020 10:55:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 631B92077D for ; Mon, 13 Jul 2020 10:55:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594637731; bh=2hO3WkHhyOgI5DCl0j3Y5kGHa1O/zZ+5saaKnfchWk4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=0n8natfBCHBMFvfwGISKFVd68YNicgxwyIQJjlv4rM6bt4svTn5N38sALyQx32gGc Lt0LdRQRTn6g84VEBGtkzN9ZwfQ5rLSRC1mtuUCD/NebuSwq7rVsX3/mD4o0J62ErM DO/TWKEM0qaKuiIwnRNMq4i/T/J3Xxxo+7IVpdMM= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729637AbgGMKza (ORCPT ); Mon, 13 Jul 2020 06:55:30 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:40975 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729390AbgGMKz3 (ORCPT ); Mon, 13 Jul 2020 06:55:29 -0400 Received: by mail-lj1-f194.google.com with SMTP id z24so17045608ljn.8 for ; Mon, 13 Jul 2020 03:55:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zHz8NknCTaxz5a5UDHP74or+j+uZtzHJd5Oje+2RAAU=; b=Z6k23mahE7Xjpj6NVEhrSuV9t9iK93MBAFKMBqE0H4ckRe5LqEibXTQm/v1nK1TNfr NX4AgpNF53zhu7ZJOKpS1UZ3jcpjm5B9MYmFy7UVw9E/D0asWDBhWVJEbNfBj/vXN/tk lDAtU3FzH4q2vWp++l+EDxleK6IulXdf8NPkRujui6H4IfZWUuI4/cYqeQeYgA6SYqwr mmFMyrEZckdywOKW+Yo4lrXzg7sZqNnWdSgrQ2nTVzQqEC8RGMiyBUrtvMtJcFxgMX8s i8Aft5lwOGgnMILT9UvN36p6PGG/aVk1IMBjxhVYjNCM1bwIWgB15WUGgIIBv21gWcs3 7kOA== X-Gm-Message-State: AOAM532zZWtDbc6iJJ475gZlzvLdsUR4lohovfvTktCOtSz5IBLbK92+ M2yq0dGRfOLOv82OuVSKdmB+0hTpFH0= X-Google-Smtp-Source: ABdhPJxaWRgS+pgaIfelIc/fIDB8Ca5Kp1pc3GTb2a6U5zEF3jiafAy2cwz+XKGkn/cnvqyNKdZsXA== X-Received: by 2002:a2e:9619:: with SMTP id v25mr50266132ljh.324.1594637727379; Mon, 13 Jul 2020 03:55:27 -0700 (PDT) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id a22sm4548804lfg.96.2020.07.13.03.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 03:55:26 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1juw7S-0007FN-8X; Mon, 13 Jul 2020 12:55:34 +0200 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: =?utf-8?b?SmFyb23DrXIgxaBrb3JwaWw=?= , Johan Hovold Subject: [PATCH 3/5] USB: serial: cp210x: add support for TIOCGICOUNT Date: Mon, 13 Jul 2020 12:55:15 +0200 Message-Id: <20200713105517.27796-4-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200713105517.27796-1-johan@kernel.org> References: <20200713105517.27796-1-johan@kernel.org> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Enable TIOCGICOUNT to allow reading out the (unused) interrupt counters and error statistics. Note that modem-status events are currently left unimplemented as they appear to be buffered on at least CP2102 and therefore cannot be used to implement TIOCMIWAIT. Signed-off-by: Johan Hovold --- drivers/usb/serial/cp210x.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 02e4acb2823b..3a65be4a0ec0 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -291,6 +291,7 @@ static struct usb_serial_driver cp210x_device = { .unthrottle = usb_serial_generic_unthrottle, .tiocmget = cp210x_tiocmget, .tiocmset = cp210x_tiocmset, + .get_icount = usb_serial_generic_get_icount, .attach = cp210x_attach, .disconnect = cp210x_disconnect, .release = cp210x_release, From patchwork Mon Jul 13 10:55:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 11659351 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F29DA13B6 for ; Mon, 13 Jul 2020 10:55:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CFFDC2077D for ; Mon, 13 Jul 2020 10:55:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594637733; bh=eWvE9l9lDd4i69/+eqPzjoS9kvsqm6elQCJc9EkZ9hM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=RbF2OSRZA1dGQ4vFniQ8tNQuDxANvwEKl4588i6hMp7vbuIV+mHmQXRobLvIwNCBP NyG98dTZTnlcjvww/G0pCqU1pSHx8rbJrDRFAe4ZY6DWML7RCh2QEKBkJUckN00uuO cQL/uqVp7+Y2Thf8dbPHgkBuNmuvI4wp+afSinyY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729390AbgGMKzc (ORCPT ); Mon, 13 Jul 2020 06:55:32 -0400 Received: from mail-lf1-f42.google.com ([209.85.167.42]:37647 "EHLO mail-lf1-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729594AbgGMKza (ORCPT ); Mon, 13 Jul 2020 06:55:30 -0400 Received: by mail-lf1-f42.google.com with SMTP id k15so8659725lfc.4 for ; Mon, 13 Jul 2020 03:55:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JsGmXUuiWIk6SoRdgEmYmqDS/E3gZWEwecJGcIXAItY=; b=ihNOyAp2GJQT0c0TfLvW9mWIkhsYEwfTokU2Jml8I4X+gZSStJSQtwiMVKC77zl7R4 4d64lINkFfKindZAyQQpFyJoIAc7gTWW3xeInYIZTSJ9AgVppQIQ3Octov8LVNT4JshU AFt3pl846vg8T8RY8T3TWGy0VE06esvSuQJ9djtkW2rptJ2H7B96uSypmosm2rfr4R+U rH6JWUrRDm+RrAhwlrcTzsrL87gwYZ0r05q+8HVp4OFPuRmFlhpq3trWlDIgnYKNDmXd fT07lrIFOZVjy0aK5ZkfEbVlAlkBcpL7KEEhH/I+vcC3KjVQWwgKEieE9lvb3CMhToC7 WEdw== X-Gm-Message-State: AOAM533tC+kGR+b577vm1fUNuhyU99ahYbssbWI5L8a95h8H362qFGEz OOP4nYehkrf2bOAYq87yFR9erIhdmV8= X-Google-Smtp-Source: ABdhPJwI7o8dKeojfIJDY2g5wgIhKwPFs/eiOH/WzSnPE3cQnu0HxpP4QIQtcIJlPNiTtKI+PaGlBQ== X-Received: by 2002:a05:6512:20f:: with SMTP id a15mr52103604lfo.118.1594637728424; Mon, 13 Jul 2020 03:55:28 -0700 (PDT) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id x24sm4014687ljh.21.2020.07.13.03.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 03:55:27 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1juw7S-0007FS-B2; Mon, 13 Jul 2020 12:55:34 +0200 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: =?utf-8?b?SmFyb23DrXIgxaBrb3JwaWw=?= , Johan Hovold Subject: [PATCH 4/5] USB: serial: cp210x: drop unnecessary packed attributes Date: Mon, 13 Jul 2020 12:55:16 +0200 Message-Id: <20200713105517.27796-5-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200713105517.27796-1-johan@kernel.org> References: <20200713105517.27796-1-johan@kernel.org> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Drop unnecessary packed attributes from structs without padding. Signed-off-by: Johan Hovold --- drivers/usb/serial/cp210x.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 3a65be4a0ec0..09445b7a8f64 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -435,7 +435,7 @@ struct cp210x_flow_ctl { __le32 ulFlowReplace; __le32 ulXonLimit; __le32 ulXoffLimit; -} __packed; +}; /* cp210x_flow_ctl::ulControlHandshake */ #define CP210X_SERIAL_DTR_MASK GENMASK(1, 0) @@ -469,7 +469,7 @@ struct cp210x_flow_ctl { struct cp210x_pin_mode { u8 eci; u8 sci; -} __packed; +}; #define CP210X_PIN_MODE_MODEM 0 #define CP210X_PIN_MODE_GPIO BIT(0) @@ -532,7 +532,7 @@ struct cp210x_single_port_config { struct cp210x_gpio_write { u8 mask; u8 state; -} __packed; +}; /* * Helper to get interface number when we only have struct usb_serial. From patchwork Mon Jul 13 10:55:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 11659353 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2465414DD for ; Mon, 13 Jul 2020 10:55:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 030AB20773 for ; Mon, 13 Jul 2020 10:55:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594637734; bh=heoSHaclKnx9bF85/seSQUx0+HDswJC+iSBiB+/WXTE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=MhIkTT4svGJsVNDSmdlQ2Z1WbRBKUHqlu1HY3PNkey3X2YizLDKS4fxu0TPUBfFoG Jgf68qZ99Msztw+e2HRa6RrN5QaG4hEQ6lxUR1/NpEWw7HMPzTjsSqWGWdYlptsp2t tzyQz5JRE9sYixtNzJguV+UbqhTn4dJpAKv0blvA= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729639AbgGMKzd (ORCPT ); Mon, 13 Jul 2020 06:55:33 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:33978 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729543AbgGMKza (ORCPT ); Mon, 13 Jul 2020 06:55:30 -0400 Received: by mail-lj1-f195.google.com with SMTP id q7so17094841ljm.1 for ; Mon, 13 Jul 2020 03:55:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=amd6ZzL2zl5Mr3FET4bOw9yCxlz8hu0f5v053nQK0h0=; b=PCaXqcbWmeR6zTSC/jL7jlbdSU97TlhmbuYNakV91ADFO2DRNgOYhbYs6BsG6AhFJd 2qpYSh00T4nichcVbRXHdqh3akfOBOANW0Ud16yM8rT+pP9Cg9jDL9qHr0SIeNu8s1bP jHV319pxwtGQM8xygb+iLUrdSwPtKQF1tiLbIcGHvJndxqMgjqI2lZnYe6BD9pLh28n8 rl2yz61wEMNmhwj7xnzOnl+SSkqeY4O32xOMrb6Qg7qsY2ISlKMoJ+5vclaLnBwOJirX P9BMZ22tUQN/5JGCsGilh1HDPgerZd1zPan7wXGaBxu8C8rx1OasfIEyLxyB+kghAzqU RHJg== X-Gm-Message-State: AOAM533wLy75PIsxe41Wdf7nJRwGekO93aPxgx+OD0QWaKrr0R9o7UGH 7QSIfmhMnC593K4l7VQku82BI/m0QoU= X-Google-Smtp-Source: ABdhPJwBJUZOFU2RPme4foPfhHSGM87raXYkY8/J2nRilnHmOcODq/VLgxbeR5pf7Wtai/v1UuDa5w== X-Received: by 2002:a2e:81d7:: with SMTP id s23mr46370918ljg.398.1594637728031; Mon, 13 Jul 2020 03:55:28 -0700 (PDT) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id p8sm5469753ljn.117.2020.07.13.03.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 03:55:27 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1juw7S-0007FX-Db; Mon, 13 Jul 2020 12:55:34 +0200 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: =?utf-8?b?SmFyb23DrXIgxaBrb3JwaWw=?= , Johan Hovold Subject: [PATCH 5/5] USB: serial: cp210x: use in-kernel types in port data Date: Mon, 13 Jul 2020 12:55:17 +0200 Message-Id: <20200713105517.27796-6-johan@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200713105517.27796-1-johan@kernel.org> References: <20200713105517.27796-1-johan@kernel.org> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org The port data is not exported to user space so use the in-kernel u8 type. Signed-off-by: Johan Hovold --- drivers/usb/serial/cp210x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 09445b7a8f64..d0c05aa8a0d6 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -266,7 +266,7 @@ enum cp210x_event_state { }; struct cp210x_port_private { - __u8 bInterfaceNumber; + u8 bInterfaceNumber; bool has_swapped_line_ctl; bool event_mode; enum cp210x_event_state event_state;