diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-12-08 15:56:26 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-02-02 15:01:21 +0100 |
commit | 36304f3d7a32fc4e7573fa6f3db2efb437416639 (patch) | |
tree | a04e2caef8ad8365d13236ab487aa37ee408c79e | |
parent | i2c: Use self-contained mutex (diff) | |
download | rtems-36304f3d7a32fc4e7573fa6f3db2efb437416639.tar.bz2 |
spi: Use self-contained mutex
Update #2843.
Diffstat (limited to '')
-rw-r--r-- | cpukit/dev/spi/spi-bus.c | 36 | ||||
-rw-r--r-- | cpukit/include/dev/spi/spi.h | 5 |
2 files changed, 9 insertions, 32 deletions
diff --git a/cpukit/dev/spi/spi-bus.c b/cpukit/dev/spi/spi-bus.c index 343e203485..a3ee6f14fb 100644 --- a/cpukit/dev/spi/spi-bus.c +++ b/cpukit/dev/spi/spi-bus.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -33,20 +33,12 @@ static void spi_bus_obtain(spi_bus *bus) { - rtems_status_code sc; - - sc = rtems_semaphore_obtain(bus->mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); - _Assert(sc == RTEMS_SUCCESSFUL); - (void) sc; + rtems_recursive_mutex_lock(&bus->mutex); } static void spi_bus_release(spi_bus *bus) { - rtems_status_code sc; - - sc = rtems_semaphore_release(bus->mutex); - _Assert(sc == RTEMS_SUCCESSFUL); - (void) sc; + rtems_recursive_mutex_unlock(&bus->mutex); } static void spi_bus_set_defaults(spi_bus *bus, spi_ioc_transfer *msg) @@ -304,34 +296,18 @@ static int spi_bus_do_init( void (*destroy)(spi_bus *bus) ) { - rtems_status_code sc; - - sc = rtems_semaphore_create( - rtems_build_name('S', 'P', 'I', ' '), - 1, - RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, - 0, - &bus->mutex - ); - if (sc != RTEMS_SUCCESSFUL) { - (*destroy)(bus); - rtems_set_errno_and_return_minus_one(ENOMEM); - } - + rtems_recursive_mutex_init(&bus->mutex, "SPI Bus"); bus->transfer = spi_bus_transfer_default; bus->setup = spi_bus_setup_default; bus->destroy = destroy; bus->bits_per_word = 8; + return 0; } void spi_bus_destroy(spi_bus *bus) { - rtems_status_code sc; - - sc = rtems_semaphore_delete(bus->mutex); - _Assert(sc == RTEMS_SUCCESSFUL); - (void) sc; + rtems_recursive_mutex_destroy(&bus->mutex); } void spi_bus_destroy_and_free(spi_bus *bus) diff --git a/cpukit/include/dev/spi/spi.h b/cpukit/include/dev/spi/spi.h index 66bbac2427..f0f84f1461 100644 --- a/cpukit/include/dev/spi/spi.h +++ b/cpukit/include/dev/spi/spi.h @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -27,6 +27,7 @@ #include <rtems.h> #include <rtems/seterr.h> +#include <rtems/thread.h> #ifdef __cplusplus extern "C" { @@ -96,7 +97,7 @@ struct spi_bus { /** * @brief Mutex to protect the bus access. */ - rtems_id mutex; + rtems_recursive_mutex mutex; /** * @brief Maximum Speed in Hz |