From patchwork Fri Dec 2 10:41:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Niedermaier X-Patchwork-Id: 13062640 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ECD4CC4321E for ; Fri, 2 Dec 2022 11:14:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Q4WJrSIiIFZsm13pj5pRBonrPMjBGqaMGDWlYZw9yNk=; b=1DuazZFQ+3iOm+ qAnE9TBhhNS8tBO6hyw5eeOBq8p9w8/T1nZiOisr/LNfOS4ioyNttXrIQF/euWR69qX3CL0727obw XlDGG0QGRSct5lVmIbFi/vDfQSZaibMcvIdRb54nnHZ0II0oVswyYBr/EapR/AT8Xyx+0lPnjtjiq wzKL0lomCwVcGxD7o8lmRtVeHmkY/gSVmX91wqnKfJINAJOKP40+Vd9+hQFhVvGrifjIwr02DWM2T VLPRkQwjCK2KILSTtj2UTUwUMGilhfwAiM4maIClj1CY45yLwHT59Xwg8A/ubxYZlwMVYMJJrMBxI T0q3A9gyWguen0/bWg+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1p13zA-00FtuK-Og; Fri, 02 Dec 2022 11:13:40 +0000 Received: from mx3.securetransport.de ([2a01:4f8:c0c:92be::1]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1p13z6-00FtpJ-4E for linux-arm-kernel@lists.infradead.org; Fri, 02 Dec 2022 11:13:38 +0000 Received: from mail.dh-electronics.com (unknown [77.24.89.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx3.securetransport.de (Postfix) with ESMTPSA id F2E745DC6B; Fri, 2 Dec 2022 12:12:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dh-electronics.com; s=dhelectronicscom; t=1669979576; bh=XiwlRoN6SFWV7lwPXeKbFNSGAtiKGfBc2C/mQAEg570=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=kRmLj+n+nYdIKS6CYD2sKTblrIRDlnJSO1U1SuTbQAucx+ZdUvkL3DlJ0QaDUyMch TsY2CN2Cv8Uj/WEAyvpoX7NDRFaaqXfKkX3vPDJFPVEoU73sHfA+Zgntsj+sLr5o4v Nl9BWjgfI+LlY+ROrn0Rog91l5gIbebWlUzEa6D2oBTyHat6WZtQkv6WgouBLlGGHf IP7escxiPrWqYHnraVOpNb65sChpKd1u3a82+3AZyW+5k0xbGoE7fGsci+FKsqOkrG roFe9vwsl7Yu63dOcQv+218qd+89HHnH7FmBsNpt1ihkTFxiW4fwmKx9K5GjRDjtcW 9Rr09ZiWL8/Fw== Received: from DHPWEX01.DH-ELECTRONICS.ORG (10.64.2.30) by DHPWEX01.DH-ELECTRONICS.ORG (10.64.2.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20; Fri, 2 Dec 2022 11:42:38 +0100 Received: from localhost.localdomain (172.16.51.2) by DHPWEX01.DH-ELECTRONICS.ORG (10.64.2.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20 via Frontend Transport; Fri, 2 Dec 2022 11:42:38 +0100 From: Christoph Niedermaier To: , CC: , , , Christoph Niedermaier , Greg Kroah-Hartman , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Alexander Dahl , Fabio Estevam , , Linux Team Subject: [PATCH V4 3/4] serial: imx: Add support for RS485 RX_DURING_TX output GPIO Date: Fri, 2 Dec 2022 11:41:26 +0100 Message-ID: <20221202104127.122761-3-cniedermaier@dh-electronics.com> X-Mailer: git-send-email 2.11.0 X-klartext: yes In-Reply-To: <20221202104127.122761-1-cniedermaier@dh-electronics.com> References: <20221202104127.122761-1-cniedermaier@dh-electronics.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221202_031336_478902_AA99B872 X-CRM114-Status: GOOD ( 17.19 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org If a RX_DURING_TX GPIO is defined by the DT property "rs485-rx-during-tx-gpios" this patch switches this GPIO accordingly to the RS485 flag RX_DURING_TX in user space. In addition, the i.MX UART receiver is no longer turned on and off during sending, because now the hardware is responsible for connecting or disconnecting RX during TX controlled by this GPIO. Signed-off-by: Christoph Niedermaier --- Cc: Greg Kroah-Hartman Cc: Jiri Slaby Cc: Shawn Guo Cc: Sascha Hauer Cc: Pengutronix Kernel Team Cc: Alexander Dahl Cc: Fabio Estevam Cc: Marek Vasut Cc: kernel@dh-electronics.com Cc: Linux Team To: linux-serial@vger.kernel.org To: linux-arm-kernel@lists.infradead.org --- V2: - Rework of the commit message V3: - No changes V4: - Direct call of gpiod_set_value_cansleep() without if statement --- drivers/tty/serial/imx.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 757825edb0cd..a2aea88128af 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -476,7 +476,8 @@ static void imx_uart_stop_tx(struct uart_port *port) imx_uart_rts_inactive(sport, &ucr2); imx_uart_writel(sport, ucr2, UCR2); - imx_uart_start_rx(port); + if (!port->rs485_rx_during_tx_gpio) + imx_uart_start_rx(port); sport->tx_state = OFF; } @@ -705,7 +706,8 @@ static void imx_uart_start_tx(struct uart_port *port) imx_uart_rts_inactive(sport, &ucr2); imx_uart_writel(sport, ucr2, UCR2); - if (!(port->rs485.flags & SER_RS485_RX_DURING_TX)) + if (!(port->rs485.flags & SER_RS485_RX_DURING_TX) && + !port->rs485_rx_during_tx_gpio) imx_uart_stop_rx(port); sport->tx_state = WAIT_AFTER_RTS; @@ -1955,6 +1957,10 @@ static int imx_uart_rs485_config(struct uart_port *port, struct ktermios *termio rs485conf->flags & SER_RS485_RX_DURING_TX) imx_uart_start_rx(port); + if (port->rs485_rx_during_tx_gpio) + gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, + !!(rs485conf->flags & SER_RS485_RX_DURING_TX)); + return 0; }