From cfc53c11b32f55003c63ad2051b47fa34a095841 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 24 Nov 2014 11:55:44 +0100 Subject: i2c: Fix endian issue --- cpukit/dev/i2c/gpio-nxp-pca9535.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'cpukit/dev/i2c/gpio-nxp-pca9535.c') 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] } }; -- cgit v1.2.3