Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp7133332ybi; Thu, 13 Jun 2019 10:08:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqxpLrAu7v6KjS+t2YiAScw3UuygTA/7NthZwMeO3wUZDL6G9thjNy3fy9xzSM3E4af2qzKc X-Received: by 2002:a17:902:1e9:: with SMTP id b96mr42465708plb.277.1560445684427; Thu, 13 Jun 2019 10:08:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560445684; cv=none; d=google.com; s=arc-20160816; b=05MFTaSvEyBgXiaTWgy/PmZoHvNYJl46yxblfUZrPU4YT5omEJMCNrFU2i5Y8zF8ro GEJ1TuAUgteBnHWX/6B1MuCz6dDAtDRuSqQQulbIA9xEPTo6IxL9c/Tmn3rV6MPF7mGV igY3Gc4SqlDajks2Q+pWej+Kj3AhIOnai+5lmjEr5GNxS42cZj5k8e3Iw9MJn4JbRNOp Lvgta2UUq1bAKhY/PgM718Y/GlFNSZO24YBxNHm/Q9bcJWDqTcKwxRxKWBD3K5WuQVyE zO1hmuSsmSHYpylkJao1WbaWu2b14z/645L1UrBDlP6EWqdjVVqLKbFe5MMDnVOUxLst bFJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:organization:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=5+SDBKAraoDCu4y6CgGgDSbfl05rZd66VJImyg3pIpA=; b=RRDKoO5sLDSvsI/DkwLLHk6VmGEZbdWVQLLYKMIson1EK28Ke3CxUkFknkEykiLIzl kvq7jDLFah5SdCc7BMJjJzenWZ1hs5AOJSi7pw2DpyE5Hp1s/U98jSVSAOwSF0UEUKJQ wTH0eJBm0YJDXwtCkff7/u6BLQH2dxWEyId3smzhL2tMz0Ozph6djiuvbq7dyT+J6l2P QdepUtch/6qc6R5xj5naATt1RfbTsHMaXaVEY2Q3RwBUmnvq1DtvKsLSTldrMZkqJTM2 hwtNzlgG3a0bV0WoFJl8QlsG5BVumbOaC0wzqEH1Rxlk9X3LbbIwHvR7Pcbja6SFeh3r EvYQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9si198888pjs.7.2019.06.13.10.07.49; Thu, 13 Jun 2019 10:08:04 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393543AbfFMRHp (ORCPT + 99 others); Thu, 13 Jun 2019 13:07:45 -0400 Received: from mga14.intel.com ([192.55.52.115]:2176 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393381AbfFMRHo (ORCPT ); Thu, 13 Jun 2019 13:07:44 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Jun 2019 10:07:43 -0700 X-ExtLoop1: 1 Received: from smile.fi.intel.com (HELO smile) ([10.237.68.145]) by fmsmga004.fm.intel.com with ESMTP; 13 Jun 2019 10:07:41 -0700 Received: from andy by smile with local (Exim 4.92) (envelope-from ) id 1hbTCP-0006Jw-0S; Thu, 13 Jun 2019 20:07:41 +0300 Date: Thu, 13 Jun 2019 20:07:41 +0300 From: Andy Shevchenko To: Stefan Roese Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Mika Westerberg , Yegor Yefremov , Greg Kroah-Hartman , Giulio Benetti Subject: Re: [PATCH 2/3 v6] serial: 8250: Add MSR/MCR TIOCM conversion wrapper functions Message-ID: <20190613170741.GD9224@smile.fi.intel.com> References: <20190613154542.32438-1-sr@denx.de> <20190613154542.32438-2-sr@denx.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190613154542.32438-2-sr@denx.de> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 13, 2019 at 05:45:41PM +0200, Stefan Roese wrote: > 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(). > Yes, and we may use them in the other drivers later on. Thanks! Reviewed-by: Andy Shevchenko > 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 > -- With Best Regards, Andy Shevchenko