Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2628761ybi; Mon, 17 Jun 2019 08:00:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqyJyBWXGKtEddQsD/DXMLxojIUS91K/UMTo9R42RQqNfNHWySWLrIaV6Fwost8D50t1X+Sp X-Received: by 2002:a65:4347:: with SMTP id k7mr20106103pgq.253.1560783634135; Mon, 17 Jun 2019 08:00:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560783634; cv=none; d=google.com; s=arc-20160816; b=wPp/Htu7C+P0bHKHjcDJir+pXcweAmbCsgjSNbIdE5pSTqqTF6o9LmeDOqSNrA0WW+ QFtjpsQOhyVL9aZSnBQG9CeSZK0hRFspvBMy9KJyyt7JO5viKLfyOFr6FG/VZ7S9kIV7 DQlTcYlgdDcmLfd2EjfAM7nd0+NXpomyS8pKnuLGJH4i7IxQvbanAKPPMCGhvnIxslRt TSuBkNEIbynbwqXenvrGJUs7XpcU0tgjQ7IHldY2l1t4Yss9qWFJCazO/h58Ok9ByUKt 344nkbAecIUuLKfQeATIeIlRIAeAqwdklhKR4HuiCQkbngTvsEyaAVG1bqzj2wH0yG2c dn6Q== 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=fb+yi1CHdx8FciXO0FlHg+IaCqnCKshtIT1U0/KFweE=; b=m+owExeaiVeQy/Kaue2BX2DKyNzSljOvBorE7J1+JTAWrltrviblsIBlVLjezkPt7P FHsFGDgJOLYN1LjVlr07FN4w/vlpEVBDGVFeY1alfhRBlqhXWrEbrpkOF7HKY7v6zYq0 E1qCmkbZRnlKvtpgVO2UPiDfHN5M1EFlMaxLU0RncPdgItjIIfqxSgT4BT1NxHHJ6P1o DYL0BKt/xLJzglX3Bqx8CH4a0sqo2/qhna8zZblmwVRr/6jeW2Ec0oMUhSEIII7xciuh cFcs1ioB3fmx+vosgp4mHYjJ3lBVXs9vweP6Cq7I/SbLDhHcAYnEDvW0OPgrXVuoC2mF eN/w== 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 c9si5358175pll.395.2019.06.17.08.00.18; Mon, 17 Jun 2019 08:00:34 -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 S1728325AbfFQPAA (ORCPT + 99 others); Mon, 17 Jun 2019 11:00:00 -0400 Received: from mx2.mailbox.org ([80.241.60.215]:12478 "EHLO mx2.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726215AbfFQPAA (ORCPT ); Mon, 17 Jun 2019 11:00:00 -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 mx2.mailbox.org (Postfix) with ESMTPS id CB126A2359; Mon, 17 Jun 2019 16:59:56 +0200 (CEST) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter04.heinlein-hosting.de (spamfilter04.heinlein-hosting.de [80.241.56.122]) (amavisd-new, port 10030) with ESMTP id YJPs0wxOn2B5; Mon, 17 Jun 2019 16:59:54 +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 v7] serial: 8250: Add MSR/MCR TIOCM conversion wrapper functions Date: Mon, 17 Jun 2019 16:59:51 +0200 Message-Id: <20190617145952.4848-2-sr@denx.de> In-Reply-To: <20190617145952.4848-1-sr@denx.de> References: <20190617145952.4848-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 Reviewed-by: Andy Shevchenko Reviewed-by: Mika Westerberg Cc: Mika Westerberg Cc: Andy Shevchenko Cc: Yegor Yefremov Cc: Greg Kroah-Hartman Cc: Giulio Benetti --- v7: - No change 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