From 6ff1da40c7688a880920c3f4b0f1d530775c315c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 14 Jun 2019 07:35:21 +0200 Subject: dev/sc16is752: Add RS485 mode variants --- cpukit/dev/serial/sc16is752.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'cpukit/dev/serial/sc16is752.c') diff --git a/cpukit/dev/serial/sc16is752.c b/cpukit/dev/serial/sc16is752.c index a58b87bfb7..5384563abe 100644 --- a/cpukit/dev/serial/sc16is752.c +++ b/cpukit/dev/serial/sc16is752.c @@ -212,6 +212,7 @@ static bool sc16is752_first_open( { bool ok; uint8_t fcr; + uint8_t efcr; (void)args; sc16is752_context *ctx = (sc16is752_context *)base; @@ -223,12 +224,23 @@ static bool sc16is752_first_open( return ok; } - if (ctx->mode == SC16IS752_MODE_RS485) { - ctx->efcr = SC16IS752_EFCR_RS485_ENABLE; - } else { - ctx->efcr = 0; + efcr = 0; + + switch (ctx->mode) { + case SC16IS752_MODE_RS485_RTS_INV: + efcr |= SC16IS752_EFCR_RTSINVER; + /* Fall through */ + case SC16IS752_MODE_RS485_RTS: + efcr |= SC16IS752_EFCR_RTSCON; + /* Fall through */ + case SC16IS752_MODE_RS485: + efcr |= SC16IS752_EFCR_RS485_ENABLE; + break; + default: + break; } + ctx->efcr = efcr; write_reg(ctx, SC16IS752_FCR, &ctx->efcr, 1); fcr = SC16IS752_FCR_FIFO_EN -- cgit v1.2.3