[rtems commit] i2c: Fix endian issue

Sebastian Huber sebh at rtems.org
Mon Nov 24 10:58:12 UTC 2014


Module:    rtems
Branch:    master
Commit:    cfc53c11b32f55003c63ad2051b47fa34a095841
Changeset: http://git.rtems.org/rtems/commit/?id=cfc53c11b32f55003c63ad2051b47fa34a095841

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Nov 24 11:55:44 2014 +0100

i2c: Fix endian issue

---

 cpukit/dev/i2c/gpio-nxp-pca9535.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/cpukit/dev/i2c/gpio-nxp-pca9535.c b/cpukit/dev/i2c/gpio-nxp-pca9535.c
index 65df969..ea56cee 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]
     }
   };
 




More information about the vc mailing list