summaryrefslogtreecommitdiffstats
path: root/cpukit/dev
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2018-02-09 08:59:27 +0100
committerChristian Mauderer <christian.mauderer@embedded-brains.de>2018-02-12 14:36:23 +0100
commitbf7070232fe2b26de0375bc7517213e655ce9e5d (patch)
treece2fe42cccc667e2c1dcc86a360e29af20bbde6d /cpukit/dev
parentbsp/atsam: Fix cache / DMA handling in SPI. (diff)
downloadrtems-bf7070232fe2b26de0375bc7517213e655ce9e5d.tar.bz2
dev/sc16is752: Add GPIO access via ioctl.
Diffstat (limited to 'cpukit/dev')
-rw-r--r--cpukit/dev/serial/sc16is752-regs.h2
-rw-r--r--cpukit/dev/serial/sc16is752.c20
2 files changed, 22 insertions, 0 deletions
diff --git a/cpukit/dev/serial/sc16is752-regs.h b/cpukit/dev/serial/sc16is752-regs.h
index 8080074d2c..847874baab 100644
--- a/cpukit/dev/serial/sc16is752-regs.h
+++ b/cpukit/dev/serial/sc16is752-regs.h
@@ -107,6 +107,8 @@ extern "C" {
#define EFR_RTS_FLOW_CTRL_EN (1u << 6)
#define EFR_CTS_FLOW_CTRL_EN (1u << 7)
+/* IOCONTROL: User accessible. Therefore see sc16is752.h for the defines. */
+
#define SC16IS752_FIFO_DEPTH 64
#ifdef __cplusplus
diff --git a/cpukit/dev/serial/sc16is752.c b/cpukit/dev/serial/sc16is752.c
index 74c3ad3d7a..153b589ac1 100644
--- a/cpukit/dev/serial/sc16is752.c
+++ b/cpukit/dev/serial/sc16is752.c
@@ -282,6 +282,7 @@ static int sc16is752_ioctl(
)
{
sc16is752_context *ctx = (sc16is752_context *)base;
+ uint8_t regval;
switch (request) {
case SC16IS752_SET_SLEEP_MODE:
@@ -290,6 +291,25 @@ static int sc16is752_ioctl(
case SC16IS752_GET_SLEEP_MODE:
*(int *)buffer = is_sleep_mode_enabled(ctx);
break;
+ case SC16IS752_SET_IOCONTROL:
+ regval = (*(uint8_t *)buffer) & ~SC16IS752_IOCONTROL_SRESET;
+ write_reg(ctx, SC16IS752_IOCONTROL, &regval, 1);
+ break;
+ case SC16IS752_GET_IOCONTROL:
+ read_reg(ctx, SC16IS752_IOCONTROL, (uint8_t *)buffer, 1);
+ break;
+ case SC16IS752_SET_IODIR:
+ write_reg(ctx, SC16IS752_IODIR, (uint8_t *)buffer, 1);
+ break;
+ case SC16IS752_GET_IODIR:
+ read_reg(ctx, SC16IS752_IODIR, (uint8_t *)buffer, 1);
+ break;
+ case SC16IS752_SET_IOSTATE:
+ write_reg(ctx, SC16IS752_IOSTATE, (uint8_t *)buffer, 1);
+ break;
+ case SC16IS752_GET_IOSTATE:
+ read_reg(ctx, SC16IS752_IOSTATE, (uint8_t *)buffer, 1);
+ break;
default:
rtems_set_errno_and_return_minus_one(EINVAL);
}