summaryrefslogtreecommitdiffstats
path: root/cpukit/dev
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-24 11:55:44 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-24 11:55:44 +0100
commitcfc53c11b32f55003c63ad2051b47fa34a095841 (patch)
tree43f64abc98b7ba34d57cfd02fa78ae2675214984 /cpukit/dev
parentbsp/ngmp: Use -muser-mode GCC option (diff)
downloadrtems-cfc53c11b32f55003c63ad2051b47fa34a095841.tar.bz2
i2c: Fix endian issue
Diffstat (limited to 'cpukit/dev')
-rw-r--r--cpukit/dev/i2c/gpio-nxp-pca9535.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/cpukit/dev/i2c/gpio-nxp-pca9535.c b/cpukit/dev/i2c/gpio-nxp-pca9535.c
index 65df969e56..ea56cee3da 100644
--- a/cpukit/dev/i2c/gpio-nxp-pca9535.c
+++ b/cpukit/dev/i2c/gpio-nxp-pca9535.c
@@ -43,22 +43,27 @@ static int gpio_nxp_pca9535_get_reg(
uint16_t *val
)
{
- uint8_t buf[1] = { port };
+ uint8_t out[1] = { port };
+ uint8_t in[sizeof(*val)];
i2c_msg msgs[2] = {
{
.addr = dev->address,
.flags = 0,
- .len = (uint16_t) sizeof(buf),
- .buf = &buf[0]
+ .len = (uint16_t) sizeof(out),
+ .buf = &out[0]
}, {
.addr = dev->address,
.flags = I2C_M_RD,
- .len = (uint16_t) sizeof(*val),
- .buf = (uint8_t *) val
+ .len = (uint16_t) sizeof(in),
+ .buf = &in[0]
}
};
+ int err;
- return i2c_bus_transfer(dev->bus, &msgs[0], RTEMS_ARRAY_SIZE(msgs));
+ err = i2c_bus_transfer(dev->bus, &msgs[0], RTEMS_ARRAY_SIZE(msgs));
+ *val = in[0] | (in[1] << 8);
+
+ return err;
}
static int gpio_nxp_pca9535_set_reg(
@@ -67,13 +72,13 @@ static int gpio_nxp_pca9535_set_reg(
uint16_t val
)
{
- uint8_t buf[3] = { port, (uint8_t) val, (uint8_t) (val >> 8) };
+ uint8_t out[3] = { port, (uint8_t) val, (uint8_t) (val >> 8) };
i2c_msg msgs[1] = {
{
.addr = dev->address,
.flags = 0,
- .len = (uint16_t) sizeof(buf),
- .buf = &buf[0]
+ .len = (uint16_t) sizeof(out),
+ .buf = &out[0]
}
};