Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp7054069ybi; Thu, 13 Jun 2019 08:48:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqwWuyQaOXhEz2uKtAp+8QGzp9Hldu5pwT3SEg9/Z2oXTgtLoSrFMPwzGOJjd4bnuL0neOqX X-Received: by 2002:a63:161b:: with SMTP id w27mr30906549pgl.338.1560440895139; Thu, 13 Jun 2019 08:48:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560440895; cv=none; d=google.com; s=arc-20160816; b=kq0IGgIOYLOyjRUKA7D/szOZEV2B2a5dhUADn627VBYzbghZxsrNh3f4wM1YRQb2dJ 5DoSAA7M3U+utI8bJAaPEJpw7Iq3JID9yUojDXjEsolc+covYAsTtXX5DkGY1p9xMUFZ xielaG6K324ukZcHELuEdbE0E1qc5ecaV8lf2BpB9dRB8e6vER8KE/LV5qd6+ZwD0G2U 3PzdNnUcwEYTmOuk8pcx+KWJ+8ZsvLsvhXL5Hymjn25zcxWADFG0jRujmP/qt3Iq3Rjt uz8rxZ4s/TjQz/c0gJTxB4VEyDcgtv8Hh4pwxTHUt7Fbw2ZrVQnpqFHYx7rsSEk+A3U1 lFqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=/J6WYof5D960e6dkwwJgZzNb08yMb2p1LXDYLPfKbjY=; b=mW5vX44qpiK7tb5LmgF7BMuE5o8j3PS92xcS2w2mlvQsOVmP5UOPz0eqn3NjBHLy2A FX+LmAsJq8bchGfQytX+gQUwtNydFTgdzQ8ZQ8TNTB56n/tmQ6zBMacUuc2sPnjEto4m ERIIqG8SyaSLzMnfZm9O+VGTX4kqogPtLVgXYlCFSWipknEDVAommzSdEcoYAG9utaaO Os/qmiFJ4kxKTSsGn1T1GZgKiXqTxLu6apaqUdjCE3LVExuYX2vW56MGqvnNcF8+FOfY nj2IPPpOszuaXwBEPuYpTeW49hh2OW8p0Yd+WaJkyZH5RPckqc0p/i0yjbq+u+vmr1+A J/Hw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si100000pgq.61.2019.06.13.08.48.00; Thu, 13 Jun 2019 08:48:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389335AbfFMPp5 (ORCPT + 99 others); Thu, 13 Jun 2019 11:45:57 -0400 Received: from mx1.mailbox.org ([80.241.60.212]:13840 "EHLO mx1.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726952AbfFMPpy (ORCPT ); Thu, 13 Jun 2019 11:45:54 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [80.241.60.240]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mx1.mailbox.org (Postfix) with ESMTPS id EAAB94FF64; Thu, 13 Jun 2019 17:45:50 +0200 (CEST) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter06.heinlein-hosting.de (spamfilter06.heinlein-hosting.de [80.241.56.125]) (amavisd-new, port 10030) with ESMTP id NOYkuy48Vz9J; Thu, 13 Jun 2019 17:45:45 +0200 (CEST) From: Stefan Roese To: linux-serial@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Andy Shevchenko , Mika Westerberg , Yegor Yefremov , Greg Kroah-Hartman , Giulio Benetti Subject: [PATCH 2/3 v6] serial: 8250: Add MSR/MCR TIOCM conversion wrapper functions Date: Thu, 13 Jun 2019 17:45:41 +0200 Message-Id: <20190613154542.32438-2-sr@denx.de> In-Reply-To: <20190613154542.32438-1-sr@denx.de> References: <20190613154542.32438-1-sr@denx.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds wrapper functions to convert MSR <-> TIOCM and also MCR <-> TIOCM. These functions are used now in serial8250_do_set_mctrl() and serial8250_do_get_mctrl(). Signed-off-by: Stefan Roese Suggested-by: Andy Shevchenko Cc: Mika Westerberg Cc: Andy Shevchenko Cc: Yegor Yefremov Cc: Greg Kroah-Hartman Cc: Giulio Benetti --- v6: - New patch drivers/tty/serial/8250/8250.h | 54 +++++++++++++++++++++++++++++ drivers/tty/serial/8250/8250_port.c | 25 ++----------- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h index ebfb0bd5bef5..793da2e510e0 100644 --- a/drivers/tty/serial/8250/8250.h +++ b/drivers/tty/serial/8250/8250.h @@ -139,6 +139,60 @@ void serial8250_rpm_put_tx(struct uart_8250_port *p); int serial8250_em485_init(struct uart_8250_port *p); void serial8250_em485_destroy(struct uart_8250_port *p); +/* MCR <-> TIOCM conversion */ +static inline int serial8250_TIOCM_to_MCR(int tiocm) +{ + int mcr = 0; + + if (tiocm & TIOCM_RTS) + mcr |= UART_MCR_RTS; + if (tiocm & TIOCM_DTR) + mcr |= UART_MCR_DTR; + if (tiocm & TIOCM_OUT1) + mcr |= UART_MCR_OUT1; + if (tiocm & TIOCM_OUT2) + mcr |= UART_MCR_OUT2; + if (tiocm & TIOCM_LOOP) + mcr |= UART_MCR_LOOP; + + return mcr; +} + +static inline int serial8250_MCR_to_TIOCM(int mcr) +{ + int tiocm = 0; + + if (mcr & UART_MCR_RTS) + tiocm |= TIOCM_RTS; + if (mcr & UART_MCR_DTR) + tiocm |= TIOCM_DTR; + if (mcr & UART_MCR_OUT1) + tiocm |= TIOCM_OUT1; + if (mcr & UART_MCR_OUT2) + tiocm |= TIOCM_OUT2; + if (mcr & UART_MCR_LOOP) + tiocm |= TIOCM_LOOP; + + return tiocm; +} + +/* MSR <-> TIOCM conversion */ +static inline int serial8250_MSR_to_TIOCM(int msr) +{ + int tiocm = 0; + + if (msr & UART_MSR_DCD) + tiocm |= TIOCM_CAR; + if (msr & UART_MSR_RI) + tiocm |= TIOCM_RNG; + if (msr & UART_MSR_DSR) + tiocm |= TIOCM_DSR; + if (msr & UART_MSR_CTS) + tiocm |= TIOCM_CTS; + + return tiocm; +} + static inline void serial8250_out_MCR(struct uart_8250_port *up, int value) { serial_out(up, UART_MCR, value); diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 2304a84eee3b..47f0a8d01a57 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1944,22 +1944,12 @@ unsigned int serial8250_do_get_mctrl(struct uart_port *port) { struct uart_8250_port *up = up_to_u8250p(port); unsigned int status; - unsigned int ret; serial8250_rpm_get(up); status = serial8250_modem_status(up); serial8250_rpm_put(up); - ret = 0; - if (status & UART_MSR_DCD) - ret |= TIOCM_CAR; - if (status & UART_MSR_RI) - ret |= TIOCM_RNG; - if (status & UART_MSR_DSR) - ret |= TIOCM_DSR; - if (status & UART_MSR_CTS) - ret |= TIOCM_CTS; - return ret; + return serial8250_MSR_to_TIOCM(status); } EXPORT_SYMBOL_GPL(serial8250_do_get_mctrl); @@ -1973,18 +1963,9 @@ static unsigned int serial8250_get_mctrl(struct uart_port *port) void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl) { struct uart_8250_port *up = up_to_u8250p(port); - unsigned char mcr = 0; + unsigned char mcr; - if (mctrl & TIOCM_RTS) - mcr |= UART_MCR_RTS; - if (mctrl & TIOCM_DTR) - mcr |= UART_MCR_DTR; - if (mctrl & TIOCM_OUT1) - mcr |= UART_MCR_OUT1; - if (mctrl & TIOCM_OUT2) - mcr |= UART_MCR_OUT2; - if (mctrl & TIOCM_LOOP) - mcr |= UART_MCR_LOOP; + mcr = serial8250_TIOCM_to_MCR(mctrl); mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr; -- 2.22.0