lkml.org 
[lkml]   [2019]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 015/129] staging: iio: adt7316: fix handling of dac high resolution option
    3.16.70-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: Jeremy Fertic <jeremyfertic@gmail.com>

    commit 76b7fe8d6c4daf4db672eb953c892c6f6572a282 upstream.

    The adt7316/7 and adt7516/7 have the option to output voltage proportional
    to temperature on dac a and/or dac b. The default dac resolution in this
    mode is 8 bits with the dac high resolution option enabling 10 bits. None
    of these settings affect dacs c and d. Remove the "1 (12 bits)" output from
    the show function since that is not an option for this mode. Return
    "1 (10 bits)" if the device is one of the above mentioned chips and the dac
    high resolution mode is enabled.

    In the store function, the driver currently allows the user to write to the
    ADT7316_DA_HIGH_RESOLUTION bit regardless of the device in use. Add a check
    to return an error in the case of an adt7318 or adt7519. Remove the else
    statement that clears the ADT7316_DA_HIGH_RESOLUTION bit. Instead, clear it
    before conditionally enabling it, depending on user input. This matches the
    typical pattern in the driver when an attribute is a boolean.

    Fixes: 35f6b6b86ede ("staging: iio: new ADT7316/7/8 and ADT7516/7/9 driver")
    Signed-off-by: Jeremy Fertic <jeremyfertic@gmail.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/staging/iio/addac/adt7316.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    --- a/drivers/staging/iio/addac/adt7316.c
    +++ b/drivers/staging/iio/addac/adt7316.c
    @@ -635,9 +635,7 @@ static ssize_t adt7316_show_da_high_reso
    struct adt7316_chip_info *chip = iio_priv(dev_info);

    if (chip->config3 & ADT7316_DA_HIGH_RESOLUTION) {
    - if (chip->id == ID_ADT7316 || chip->id == ID_ADT7516)
    - return sprintf(buf, "1 (12 bits)\n");
    - else if (chip->id == ID_ADT7317 || chip->id == ID_ADT7517)
    + if (chip->id != ID_ADT7318 && chip->id != ID_ADT7519)
    return sprintf(buf, "1 (10 bits)\n");
    }

    @@ -654,10 +652,12 @@ static ssize_t adt7316_store_da_high_res
    u8 config3;
    int ret;

    + if (chip->id == ID_ADT7318 || chip->id == ID_ADT7519)
    + return -EPERM;
    +
    + config3 = chip->config3 & (~ADT7316_DA_HIGH_RESOLUTION);
    if (buf[0] == '1')
    - config3 = chip->config3 | ADT7316_DA_HIGH_RESOLUTION;
    - else
    - config3 = chip->config3 & (~ADT7316_DA_HIGH_RESOLUTION);
    + config3 |= ADT7316_DA_HIGH_RESOLUTION;

    ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
    if (ret)
    \
     
     \ /
      Last update: 2019-07-07 21:47    [W:4.159 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site