[PATCH] tty: serial: samsung_tty: loopback mode support
Chanho Park
chanho61.park at samsung.com
Sun Jun 26 20:23:53 PDT 2022
Internal loopback mode can be supported by setting
S3C2443_UCON_LOOPBACK bit. The mode & bit can be supported since
s3c2410 and later SoCs. We can test it by linux-serial-test program[1]
with -k option. It will set TIOCM_LOOP mode during test.
-k, --loopback Use internal hardware loop back
[1]: https://github.com/cbrake/linux-serial-test
Signed-off-by: Chanho Park <chanho61.park at samsung.com>
---
drivers/tty/serial/samsung_tty.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c
index d5ca904def34..d7d035cd95c0 100644
--- a/drivers/tty/serial/samsung_tty.c
+++ b/drivers/tty/serial/samsung_tty.c
@@ -1002,16 +1002,22 @@ static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port)
static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
{
unsigned int umstat = rd_reg(port, S3C2410_UMSTAT);
+ unsigned int ucon = rd_reg(port, S3C2410_UCON);
+ unsigned int mctrl = TIOCM_CAR | TIOCM_DSR;
if (umstat & S3C2410_UMSTAT_CTS)
- return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
- else
- return TIOCM_CAR | TIOCM_DSR;
+ mctrl |= TIOCM_CTS;
+
+ if (ucon & S3C2443_UCON_LOOPBACK)
+ mctrl |= TIOCM_LOOP;
+
+ return mctrl;
}
static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
{
unsigned int umcon = rd_regl(port, S3C2410_UMCON);
+ unsigned int ucon = rd_reg(port, S3C2410_UCON);
if (mctrl & TIOCM_RTS)
umcon |= S3C2410_UMCOM_RTS_LOW;
@@ -1019,6 +1025,13 @@ static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
umcon &= ~S3C2410_UMCOM_RTS_LOW;
wr_regl(port, S3C2410_UMCON, umcon);
+
+ if (mctrl & TIOCM_LOOP)
+ ucon |= S3C2443_UCON_LOOPBACK;
+ else
+ ucon &= ~S3C2443_UCON_LOOPBACK;
+
+ wr_regl(port, S3C2410_UCON, ucon);
}
static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
--
2.36.1
More information about the linux-arm-kernel
mailing list