diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-09-08 09:52:49 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-09-08 09:52:49 +0000 |
commit | b06d05522831aeb14e40c463a30a9faaca5ecb8b (patch) | |
tree | 8600f8a117cf63e6758774486ba2eb5b2dd3dbb9 /c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c | |
parent | corrected parameters in i2c driver for done signalling (diff) | |
download | rtems-b06d05522831aeb14e40c463a30a9faaca5ecb8b.tar.bz2 |
corrected parameters inside i2c driver for done signalling
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c b/c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c index 2ef856af99..e52acef83b 100644 --- a/c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c +++ b/c/src/lib/libbsp/m68k/mcf5206elite/i2c/i2c.c @@ -23,9 +23,9 @@ * arg - done function argument; it is RTEMS semaphore ID. */ static void -i2c_transfer_sema_done_func(uint32_t arg) +i2c_transfer_sema_done_func(void * arg) { - rtems_id sema = (rtems_id)arg; + rtems_id sema = *(rtems_id *)arg; rtems_semaphore_release(sema); } @@ -38,7 +38,7 @@ i2c_transfer_sema_done_func(uint32_t arg) * arg - done function argument; address of poll_done_flag */ static void -i2c_transfer_poll_done_func(uint32_t arg) +i2c_transfer_poll_done_func(void *arg) { bool *poll_done_flag = (bool *)arg; *poll_done_flag = true; @@ -72,7 +72,8 @@ i2c_transfer_wait_sema(i2c_bus_number bus, i2c_message *msg, int nmsg) ); if (sc != RTEMS_SUCCESSFUL) return I2C_RESOURCE_NOT_AVAILABLE; - sc = i2c_transfer(bus, nmsg, msg, i2c_transfer_sema_done_func, sema); + sc = i2c_transfer(bus, nmsg, msg, + i2c_transfer_sema_done_func, &sema); if (sc != RTEMS_SUCCESSFUL) { rtems_semaphore_delete(sema); @@ -98,11 +99,16 @@ i2c_transfer_wait_sema(i2c_bus_number bus, i2c_message *msg, int nmsg) static rtems_status_code i2c_transfer_wait_poll(i2c_bus_number bus, i2c_message *msg, int nmsg) { + /* + * this looks nasty, but is correct: + * we wait in this function, until the poll_done_flag is + * set deep inside the i2c_poll() function + */ volatile bool poll_done_flag; rtems_status_code sc; poll_done_flag = false; - sc = i2c_transfer(bus, nmsg, msg, i2c_transfer_poll_done_func, - (uint32_t)&poll_done_flag); + sc = i2c_transfer(bus, nmsg, msg, + i2c_transfer_poll_done_func,(void *)&poll_done_flag); if (sc != RTEMS_SUCCESSFUL) return sc; while (poll_done_flag == false) |