diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-09-08 09:51:46 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-09-08 09:51:46 +0000 |
commit | 4a260f074de547dd91bb0dbc25ab52ca4c94eb53 (patch) | |
tree | 1027df4b08790901aabb2ca7ad40d16dff52497b /c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c | |
parent | 2008-09-08 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-4a260f074de547dd91bb0dbc25ab52ca4c94eb53.tar.bz2 |
corrected parameters in i2c driver for done signalling
updated mscan CAN driver
Diffstat (limited to 'c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c b/c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c index 58830efa11..d3d4e7681a 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/i2c/i2c.c +++ b/c/src/lib/libbsp/powerpc/gen5200/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) { - volatile bool poll_done_flag; + /* + * 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 rtems_boolean 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) |