lkml.org 
[lkml]   [2019]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 05/11] iio: imu: adis: create an unlocked version of adis_reset()
    Date
    The reset routine may also be important to be protected by the state-lock
    and grouped with other operations, so create an unlocked version, so that
    this can be done.

    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    ---
    drivers/iio/imu/adis.c | 8 ++++----
    include/linux/iio/imu/adis.h | 19 ++++++++++++++++++-
    2 files changed, 22 insertions(+), 5 deletions(-)

    diff --git a/drivers/iio/imu/adis.c b/drivers/iio/imu/adis.c
    index b63d6e6f5415..615f174f0e6e 100644
    --- a/drivers/iio/imu/adis.c
    +++ b/drivers/iio/imu/adis.c
    @@ -309,23 +309,23 @@ int __adis_check_status(struct adis *adis)
    EXPORT_SYMBOL_GPL(__adis_check_status);

    /**
    - * adis_reset() - Reset the device
    + * __adis_reset() - Reset the device (unlocked version)
    * @adis: The adis device
    *
    * Returns 0 on success, a negative error code otherwise
    */
    -int adis_reset(struct adis *adis)
    +int __adis_reset(struct adis *adis)
    {
    int ret;

    - ret = adis_write_reg_8(adis, adis->data->glob_cmd_reg,
    + ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg,
    ADIS_GLOB_CMD_SW_RESET);
    if (ret)
    dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret);

    return ret;
    }
    -EXPORT_SYMBOL_GPL(adis_reset);
    +EXPORT_SYMBOL_GPL(__adis_reset);

    static int adis_self_test(struct adis *adis)
    {
    diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h
    index db759957e1c1..4b5bc0e06e69 100644
    --- a/include/linux/iio/imu/adis.h
    +++ b/include/linux/iio/imu/adis.h
    @@ -73,7 +73,24 @@ struct adis {

    int adis_init(struct adis *adis, struct iio_dev *indio_dev,
    struct spi_device *spi, const struct adis_data *data);
    -int adis_reset(struct adis *adis);
    +int __adis_reset(struct adis *adis);
    +
    +/**
    + * adis_reset() - Reset the device
    + * @adis: The adis device
    + *
    + * Returns 0 on success, a negative error code otherwise
    + */
    +static inline int adis_reset(struct adis *adis)
    +{
    + int ret;
    +
    + mutex_lock(&adis->state_lock);
    + ret = __adis_reset(adis);
    + mutex_unlock(&adis->state_lock);
    +
    + return ret;
    +}

    int __adis_write_reg(struct adis *adis, unsigned int reg,
    unsigned int val, unsigned int size);
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-22 14:30    [W:3.695 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site