lkml.org 
[lkml]   [2018]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 061/109] iio: health: max30102: Add power enable parameter to get_temp function
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Peter Meerwald-Stadler <pmeerw@pmeerw.net>


    [ Upstream commit a9c47abbdd71dceeaf1b923e5ce10e700e036905 ]

    Chip must not be in shutdown for reading temperature, so briefly leave
    shutdown if buffer is not already running

    Signed-off-by: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
    Acked-by: Matt Ranostay <matt.ranostay@konsulko.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/iio/health/max30102.c | 36 +++++++++++++++++++++++-------------
    1 file changed, 23 insertions(+), 13 deletions(-)

    --- a/drivers/iio/health/max30102.c
    +++ b/drivers/iio/health/max30102.c
    @@ -329,20 +329,31 @@ static int max30102_read_temp(struct max
    return 0;
    }

    -static int max30102_get_temp(struct max30102_data *data, int *val)
    +static int max30102_get_temp(struct max30102_data *data, int *val, bool en)
    {
    int ret;

    + if (en) {
    + ret = max30102_set_powermode(data, true);
    + if (ret)
    + return ret;
    + }
    +
    /* start acquisition */
    ret = regmap_update_bits(data->regmap, MAX30102_REG_TEMP_CONFIG,
    MAX30102_REG_TEMP_CONFIG_TEMP_EN,
    MAX30102_REG_TEMP_CONFIG_TEMP_EN);
    if (ret)
    - return ret;
    + goto out;

    msleep(35);
    + ret = max30102_read_temp(data, val);
    +
    +out:
    + if (en)
    + max30102_set_powermode(data, false);

    - return max30102_read_temp(data, val);
    + return ret;
    }

    static int max30102_read_raw(struct iio_dev *indio_dev,
    @@ -355,20 +366,19 @@ static int max30102_read_raw(struct iio_
    switch (mask) {
    case IIO_CHAN_INFO_RAW:
    /*
    - * Temperature reading can only be acquired while engine
    - * is running
    + * Temperature reading can only be acquired when not in
    + * shutdown; leave shutdown briefly when buffer not running
    */
    mutex_lock(&indio_dev->mlock);
    -
    if (!iio_buffer_enabled(indio_dev))
    - ret = -EBUSY;
    - else {
    - ret = max30102_get_temp(data, val);
    - if (!ret)
    - ret = IIO_VAL_INT;
    - }
    -
    + ret = max30102_get_temp(data, val, true);
    + else
    + ret = max30102_get_temp(data, val, false);
    mutex_unlock(&indio_dev->mlock);
    + if (ret)
    + return ret;
    +
    + ret = IIO_VAL_INT;
    break;
    case IIO_CHAN_INFO_SCALE:
    *val = 1000; /* 62.5 */

    \
     
     \ /
      Last update: 2018-03-16 17:42    [W:4.720 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site