lkml.org 
[lkml]   [2018]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 05/11] staging: iio: adt7316: fix the dac read calculation
    On Tue, 11 Dec 2018 17:54:57 -0700
    Jeremy Fertic <jeremyfertic@gmail.com> wrote:

    > The calculation of the current dac value is using the wrong bits of the
    > dac lsb register. Create two macros to shift the lsb register value into
    > lsb position, depending on whether the dac is 10 or 12 bit. Initialize
    > data to 0 so, with an 8 bit dac, the msb register value can be bitwise
    > ORed with data.
    >
    > Signed-off-by: Jeremy Fertic <jeremyfertic@gmail.com>
    This looks good, but with the previous 2 patches under discussion I'll
    hold this one for v2.

    Thanks

    Jonathan

    > ---
    > drivers/staging/iio/addac/adt7316.c | 10 ++++++++--
    > 1 file changed, 8 insertions(+), 2 deletions(-)
    >
    > diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
    > index eee7c04f93f4..b7d12d003ddc 100644
    > --- a/drivers/staging/iio/addac/adt7316.c
    > +++ b/drivers/staging/iio/addac/adt7316.c
    > @@ -47,6 +47,8 @@
    > #define ADT7516_MSB_AIN3 0xA
    > #define ADT7516_MSB_AIN4 0xB
    > #define ADT7316_DA_DATA_BASE 0x10
    > +#define ADT7316_DA_10_BIT_LSB_SHIFT 6
    > +#define ADT7316_DA_12_BIT_LSB_SHIFT 4
    > #define ADT7316_DA_MSB_DATA_REGS 4
    > #define ADT7316_LSB_DAC_A 0x10
    > #define ADT7316_MSB_DAC_A 0x11
    > @@ -1403,7 +1405,7 @@ static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
    > static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
    > int channel, char *buf)
    > {
    > - u16 data;
    > + u16 data = 0;
    > u8 msb, lsb, offset;
    > int ret;
    >
    > @@ -1428,7 +1430,11 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
    > if (ret)
    > return -EIO;
    >
    > - data = (msb << offset) + (lsb & ((1 << offset) - 1));
    > + if (chip->dac_bits == 12)
    > + data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
    > + else if (chip->dac_bits == 10)
    > + data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
    > + data |= msb << offset;
    >
    > return sprintf(buf, "%d\n", data);
    > }

    \
     
     \ /
      Last update: 2018-12-16 12:47    [W:3.021 / U:0.396 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site