All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: gregkh@linuxfoundation.org, jslaby@suse.com,
	linux-serial@vger.kernel.org, dt@kernel.org,
	devicetree@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kernel@stlinux.com,
	patrice.chotard@st.com, Lee Jones <lee.jones@linaro.org>
Subject: [PATCH v2 02/10] serial: st-asc: Provide RTS functionality
Date: Fri, 27 Jan 2017 17:27:56 +0000	[thread overview]
Message-ID: <20170127172804.23881-3-lee.jones@linaro.org> (raw)
In-Reply-To: <20170127172804.23881-1-lee.jones@linaro.org>

Until this point, it has not been possible for userland serial
applications (e.g. stty) to toggle the UART RTS line.  This can
be useful with certain configurations. For example, when using
a Mezzanine on a Linaro 96board, RTS line is used to take the
on-board microcontroller in and out of reset.

Acked-by: Peter Griffin <peter.griffin@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/tty/serial/st-asc.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/st-asc.c b/drivers/tty/serial/st-asc.c
index 69e6232..397df50 100644
--- a/drivers/tty/serial/st-asc.c
+++ b/drivers/tty/serial/st-asc.c
@@ -30,6 +30,7 @@
 #include <linux/of_platform.h>
 #include <linux/serial_core.h>
 #include <linux/clk.h>
+#include <linux/gpio/consumer.h>
 
 #define DRIVER_NAME "st-asc"
 #define ASC_SERIAL_NAME "ttyAS"
@@ -38,6 +39,7 @@
 
 struct asc_port {
 	struct uart_port port;
+	struct gpio_desc *rts;
 	struct clk *clk;
 	unsigned int hw_flow_control:1;
 	unsigned int force_m1:1;
@@ -391,12 +393,27 @@ static unsigned int asc_tx_empty(struct uart_port *port)
 
 static void asc_set_mctrl(struct uart_port *port, unsigned int mctrl)
 {
+	struct asc_port *ascport = to_asc_port(port);
+
 	/*
-	 * This routine is used for seting signals of: DTR, DCD, CTS/RTS
-	 * We use ASC's hardware for CTS/RTS, so don't need any for that.
-	 * Some boards have DTR and DCD implemented using PIO pins,
-	 * code to do this should be hooked in here.
+	 * This routine is used for seting signals of: DTR, DCD, CTS and RTS.
+	 * We use ASC's hardware for CTS/RTS when hardware flow-control is
+	 * enabled, however if the RTS line is required for another purpose,
+	 * commonly controlled using HUP from userspace, then we need to toggle
+	 * it manually, using GPIO.
+	 *
+	 * Some boards also have DTR and DCD implemented using PIO pins, code to
+	 * do this should be hooked in here.
 	 */
+
+	if (!ascport->rts)
+		return;
+
+	/* If HW flow-control is enabled, we can't fiddle with the RTS line */
+	if (asc_in(port, ASC_CTL) & ASC_CTL_CTSENABLE)
+		return;
+
+	gpiod_set_value(ascport->rts, mctrl & TIOCM_RTS);
 }
 
 static unsigned int asc_get_mctrl(struct uart_port *port)
@@ -726,6 +743,8 @@ static struct asc_port *asc_of_get_asc_port(struct platform_device *pdev)
 							"st,hw-flow-control");
 	asc_ports[id].force_m1 =  of_property_read_bool(np, "st,force_m1");
 	asc_ports[id].port.line = id;
+	asc_ports[id].rts = NULL;
+
 	return &asc_ports[id];
 }
 
-- 
2.9.3

WARNING: multiple messages have this Message-ID (diff)
From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 02/10] serial: st-asc: Provide RTS functionality
Date: Fri, 27 Jan 2017 17:27:56 +0000	[thread overview]
Message-ID: <20170127172804.23881-3-lee.jones@linaro.org> (raw)
In-Reply-To: <20170127172804.23881-1-lee.jones@linaro.org>

Until this point, it has not been possible for userland serial
applications (e.g. stty) to toggle the UART RTS line.  This can
be useful with certain configurations. For example, when using
a Mezzanine on a Linaro 96board, RTS line is used to take the
on-board microcontroller in and out of reset.

Acked-by: Peter Griffin <peter.griffin@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/tty/serial/st-asc.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/st-asc.c b/drivers/tty/serial/st-asc.c
index 69e6232..397df50 100644
--- a/drivers/tty/serial/st-asc.c
+++ b/drivers/tty/serial/st-asc.c
@@ -30,6 +30,7 @@
 #include <linux/of_platform.h>
 #include <linux/serial_core.h>
 #include <linux/clk.h>
+#include <linux/gpio/consumer.h>
 
 #define DRIVER_NAME "st-asc"
 #define ASC_SERIAL_NAME "ttyAS"
@@ -38,6 +39,7 @@
 
 struct asc_port {
 	struct uart_port port;
+	struct gpio_desc *rts;
 	struct clk *clk;
 	unsigned int hw_flow_control:1;
 	unsigned int force_m1:1;
@@ -391,12 +393,27 @@ static unsigned int asc_tx_empty(struct uart_port *port)
 
 static void asc_set_mctrl(struct uart_port *port, unsigned int mctrl)
 {
+	struct asc_port *ascport = to_asc_port(port);
+
 	/*
-	 * This routine is used for seting signals of: DTR, DCD, CTS/RTS
-	 * We use ASC's hardware for CTS/RTS, so don't need any for that.
-	 * Some boards have DTR and DCD implemented using PIO pins,
-	 * code to do this should be hooked in here.
+	 * This routine is used for seting signals of: DTR, DCD, CTS and RTS.
+	 * We use ASC's hardware for CTS/RTS when hardware flow-control is
+	 * enabled, however if the RTS line is required for another purpose,
+	 * commonly controlled using HUP from userspace, then we need to toggle
+	 * it manually, using GPIO.
+	 *
+	 * Some boards also have DTR and DCD implemented using PIO pins, code to
+	 * do this should be hooked in here.
 	 */
+
+	if (!ascport->rts)
+		return;
+
+	/* If HW flow-control is enabled, we can't fiddle with the RTS line */
+	if (asc_in(port, ASC_CTL) & ASC_CTL_CTSENABLE)
+		return;
+
+	gpiod_set_value(ascport->rts, mctrl & TIOCM_RTS);
 }
 
 static unsigned int asc_get_mctrl(struct uart_port *port)
@@ -726,6 +743,8 @@ static struct asc_port *asc_of_get_asc_port(struct platform_device *pdev)
 							"st,hw-flow-control");
 	asc_ports[id].force_m1 =  of_property_read_bool(np, "st,force_m1");
 	asc_ports[id].port.line = id;
+	asc_ports[id].rts = NULL;
+
 	return &asc_ports[id];
 }
 
-- 
2.9.3

  parent reply	other threads:[~2017-01-27 17:28 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-27 17:27 [PATCH v2 00/10] serial: st-asc: Allow handling of RTS line Lee Jones
2017-01-27 17:27 ` Lee Jones
2017-01-27 17:27 ` [PATCH v2 01/10] serial: st-asc: Ignore the parity error bit if 8-bit mode is enabled Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27 ` Lee Jones [this message]
2017-01-27 17:27   ` [PATCH v2 02/10] serial: st-asc: Provide RTS functionality Lee Jones
2017-01-27 17:27 ` [PATCH v2 03/10] serial: st-asc: Read in all Pinctrl states Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27 ` [PATCH v2 04/10] serial: st-asc: (De)Register GPIOD and swap Pinctrl profiles Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27 ` [PATCH v2 05/10] serial: st-asc: Use generic DT binding for announcing RTS/CTS lines Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:27   ` Lee Jones
2017-01-27 17:28 ` [PATCH v2 06/10] dt-bindings: serial: Update 'uart-has-rtscts' description Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-02-01 15:41   ` Rob Herring
2017-02-01 15:41     ` Rob Herring
2017-01-27 17:28 ` [PATCH v2 07/10] ARM: dts: STiH410-b2260: Identify the UART RTS line Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-27 17:28 ` [PATCH v2 08/10] ARM: dts: STiH407-pinctrl: Add Pinctrl group for HW flow-control Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-27 17:28 ` [PATCH v2 09/10] ARM: dts: STiH407-family: Use new Pinctrl groups Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-01-30 10:10   ` Patrice CHOTARD
2017-01-30 10:10     ` Patrice CHOTARD
2017-01-30 10:10     ` Patrice CHOTARD
2017-01-27 17:28 ` [PATCH v2 10/10] ARM: dts: STiH410-b2260: Enable HW flow-control Lee Jones
2017-01-27 17:28   ` Lee Jones
2017-02-02  7:42 ` [PATCH v2 00/10] serial: st-asc: Allow handling of RTS line Lee Jones
2017-02-02  7:42   ` Lee Jones
2017-02-02  7:42   ` Lee Jones
2017-02-02  9:55   ` Greg KH
2017-02-02  9:55     ` Greg KH
2017-02-02  9:55     ` Greg KH
2017-02-03  9:22     ` Lee Jones
2017-02-03  9:22       ` Lee Jones
2017-02-03  9:22       ` Lee Jones
2017-02-01 14:31 Lee Jones
2017-02-01 14:31 ` [PATCH v2 02/10] serial: st-asc: Provide RTS functionality Lee Jones
2017-02-01 14:31   ` Lee Jones
2017-02-01 14:31   ` Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170127172804.23881-3-lee.jones@linaro.org \
    --to=lee.jones@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dt@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=kernel@stlinux.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=patrice.chotard@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.