diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-06-14 07:35:21 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-06-14 07:35:21 +0200 |
commit | 6ff1da40c7688a880920c3f4b0f1d530775c315c (patch) | |
tree | 37f2f046bbba7779101efcfc72d75089214715be /cpukit/dev/serial/sc16is752.c | |
parent | bsp/atsam: Do not disable the WDT (diff) | |
download | rtems-6ff1da40c7688a880920c3f4b0f1d530775c315c.tar.bz2 |
dev/sc16is752: Add RS485 mode variants
Diffstat (limited to '')
-rw-r--r-- | cpukit/dev/serial/sc16is752.c | 20 |
1 files changed, 16 insertions, 4 deletions
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 |