linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou
@ 2024-02-08 15:39 Farouk Bouabid
  2024-02-08 15:39 ` [PATCH v6 1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2 Farouk Bouabid
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Farouk Bouabid @ 2024-02-08 15:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel,
	quentin.schulz, Farouk Bouabid

On the boards that we are using (ringneck/puma-haikou) a hardware switch
can set the rs485 transceiver into half or full duplex mode.

In half-duplex mode the DE/RE signal of the rs485 transceiver is not
connected to an RTS signal whose control is already handled in the rs485
emulation (start/stop callbacks), but rather to a gpio. And since enabling
the receiver requires setting this gpio active we need to do that in em485
while receiving and disable it while sending to enable the driver mode.

In full-duplex mode RE is grounded and separated from DE. Meanwhile the
rx-enable gpio remains connected to the DE pin. In this case the
receiver-enable gpio should be disabled to enable driver mode in parallel
to the enabled receiver.

This patch-series adds support for controlling the driver/receiver mode
using rts-gpios.

Changes in v6:
- "rts-gpios" property is used instead of implementing "rs485-rx-enable-gpios"
- "rs485-rx-enable-inactive-when-rs485-disabled" property is no longer
  implemented, since rts-gpios is already controlled outside of the em485
  context
- Link to v5: https://lore.kernel.org/r/20240126-dev-rx-enable-v5-0-5d934eda05ca@theobroma-systems.com

Changes in v5:
- set port->rs485_re_gpio in "serial: 8250: Support separate rs485 rx-enable GPIO"
- Link to v4: https://lore.kernel.org/r/20240126-dev-rx-enable-v4-0-45aaf4d96328@theobroma-systems.com

Changes in v4:
- define the state of rx-enable gpio when em485 is disabled
- add rs485 half/full duplex support to ringneck/puma-haikou
- use dev_err_probe instead of dev_err if error is -EPROBE_DEFER

Changes from the 2020 submission include:
- external gpio for optional receiver-enable handling
- Link to v3: https://lore.kernel.org/all/20200517215610.2131618-1-heiko@sntech.de/

---
Farouk Bouabid (2):
      arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2
      arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5

 arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts | 1 +
 arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts   | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)
---
base-commit: 5ebe731c2a586b379103f736cd498bcca3cf1ea9
change-id: 20240125-dev-rx-enable-d8818dbf7c28

Best regards,
-- 
Farouk Bouabid <farouk.bouabid@theobroma-systems.com>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v6 1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2
  2024-02-08 15:39 [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Farouk Bouabid
@ 2024-02-08 15:39 ` Farouk Bouabid
  2024-02-08 15:39 ` [PATCH v6 2/2] arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5 Farouk Bouabid
  2024-02-13 19:16 ` [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Heiko Stuebner
  2 siblings, 0 replies; 4+ messages in thread
From: Farouk Bouabid @ 2024-02-08 15:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel,
	quentin.schulz, Farouk Bouabid

A hardware switch can set the rs485 transceiver into half or full duplex
mode.

Switching to the half-duplex mode requires the user to enable em485 on
uart5 using ioctl, DE/RE are both connected to GPIO2_C3 which is the
RTS signal for uart0. Implement GPIO2_C3 as rts-gpios with RTS_ON_SEND
option enabled (default) so that driver mode gets enabled while sending
(RTS high) and receiver mode gets enabled while not sending (RTS low).

In full-duplex mode (em485 is disabled), DE is connected to GPIO2_C3 and
RE is grounded (enabled). Since GPIO2_C3 is implemented as rts-gpios, the
driver mode gets enabled whenever we want to send something and RE is not
affected (always enabled) in this case by the state of RTS.

Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com>
---
 arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
index 18a98c4648ea..2c3984a880af 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
@@ -273,11 +273,12 @@ &u2phy0_host {
 
 &uart0 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
+	pinctrl-0 = <&uart0_xfer>;
 	status = "okay";
 };
 
 &uart2 {
+	rts-gpios = <&gpio2 RK_PC3 GPIO_ACTIVE_HIGH>;
 	status = "okay";
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v6 2/2] arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5
  2024-02-08 15:39 [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Farouk Bouabid
  2024-02-08 15:39 ` [PATCH v6 1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2 Farouk Bouabid
@ 2024-02-08 15:39 ` Farouk Bouabid
  2024-02-13 19:16 ` [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Heiko Stuebner
  2 siblings, 0 replies; 4+ messages in thread
From: Farouk Bouabid @ 2024-02-08 15:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel,
	quentin.schulz, Farouk Bouabid

A hardware switch can set the rs485 transceiver into half or full duplex
mode.

Switching to the half-duplex mode requires the user to enable em485 on
uart5 using ioctl, DE/RE are both connected to GPIO0_B5 which is the
RTS signal for uart0. Implement GPIO0_B5 as rts-gpios with RTS_ON_SEND
option enabled (default) so that driver mode gets enabled while sending
(RTS high) and receiver mode gets enabled while not sending (RTS low).

In full-duplex mode (em485 is disabled), DE is connected to GPIO0_B5 and
RE is grounded (enabled). Since GPIO0_B5 is implemented as rts-gpios, the
driver mode gets enabled whenever we want to send something and RE is not
affected (always enabled) in this case by the state of RTS.

Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com>
---
 arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts b/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts
index 16798eb77077..ae398acdcf45 100644
--- a/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts
+++ b/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts
@@ -227,6 +227,7 @@ &uart0 {
 
 &uart5 {
 	pinctrl-0 = <&uart5_xfer>;
+	rts-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
 	status = "okay";
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou
  2024-02-08 15:39 [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Farouk Bouabid
  2024-02-08 15:39 ` [PATCH v6 1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2 Farouk Bouabid
  2024-02-08 15:39 ` [PATCH v6 2/2] arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5 Farouk Bouabid
@ 2024-02-13 19:16 ` Heiko Stuebner
  2 siblings, 0 replies; 4+ messages in thread
From: Heiko Stuebner @ 2024-02-13 19:16 UTC (permalink / raw)
  To: Farouk Bouabid, Conor Dooley, Rob Herring, Krzysztof Kozlowski
  Cc: Heiko Stuebner, quentin.schulz, linux-kernel, devicetree,
	linux-arm-kernel, linux-rockchip

On Thu, 08 Feb 2024 16:39:54 +0100, Farouk Bouabid wrote:
> On the boards that we are using (ringneck/puma-haikou) a hardware switch
> can set the rs485 transceiver into half or full duplex mode.
> 
> In half-duplex mode the DE/RE signal of the rs485 transceiver is not
> connected to an RTS signal whose control is already handled in the rs485
> emulation (start/stop callbacks), but rather to a gpio. And since enabling
> the receiver requires setting this gpio active we need to do that in em485
> while receiving and disable it while sending to enable the driver mode.
> 
> [...]

Applied, thanks!

[1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2
      commit: 54448f711aa32f176534bbd7b1903cc6d1c8a50d
[2/2] arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5
      commit: 5963d97aa780619ffb66cf4886c0ca1175ccbd3e

Best regards,
-- 
Heiko Stuebner <heiko@sntech.de>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-02-13 19:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-08 15:39 [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Farouk Bouabid
2024-02-08 15:39 ` [PATCH v6 1/2] arm64: dts: rockchip: rk3399-puma-haikou: add rs485 support on uart2 Farouk Bouabid
2024-02-08 15:39 ` [PATCH v6 2/2] arm64: dts: rockchip: px30-ringneck-haikou: add rs485 support on uart5 Farouk Bouabid
2024-02-13 19:16 ` [PATCH v6 0/2] serial: 8250: Add support for rs485 half/full duplex on puma/ringneck-haikou Heiko Stuebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).