iio:ad5380: Report scale as fractional value
authorLars-Peter Clausen <lars@metafoo.de>
Sat, 28 Sep 2013 09:31:00 +0000 (10:31 +0100)
committerJonathan Cameron <jic23@kernel.org>
Tue, 1 Oct 2013 15:19:09 +0000 (16:19 +0100)
Move the complexity of calculating the fixed point scale to the core.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/dac/ad5380.c

index 4c791e6..a59ff0e 100644 (file)
@@ -204,7 +204,6 @@ static int ad5380_read_raw(struct iio_dev *indio_dev,
        struct iio_chan_spec const *chan, int *val, int *val2, long info)
 {
        struct ad5380_state *st = iio_priv(indio_dev);
-       unsigned long scale_uv;
        int ret;
 
        switch (info) {
@@ -225,10 +224,9 @@ static int ad5380_read_raw(struct iio_dev *indio_dev,
                val -= (1 << chan->scan_type.realbits) / 2;
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_SCALE:
-               scale_uv = ((2 * st->vref) >> chan->scan_type.realbits) * 100;
-               *val =  scale_uv / 100000;
-               *val2 = (scale_uv % 100000) * 10;
-               return IIO_VAL_INT_PLUS_MICRO;
+               *val = 2 * st->vref;
+               *val2 = chan->scan_type.realbits;
+               return IIO_VAL_FRACTIONAL_LOG2;
        default:
                break;
        }
@@ -271,72 +269,72 @@ static const struct ad5380_chip_info ad5380_chip_info_tbl[] = {
        [ID_AD5380_3] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 40,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5380_5] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 40,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5381_3] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 16,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5381_5] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 16,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5382_3] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 32,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5382_5] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 32,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5383_3] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 32,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5383_5] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 32,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5390_3] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 16,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5390_5] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 16,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5391_3] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 16,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5391_5] = {
                .channel_template = AD5380_CHANNEL(12),
                .num_channels = 16,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
        [ID_AD5392_3] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 8,
-               .int_vref = 1250000,
+               .int_vref = 1250,
        },
        [ID_AD5392_5] = {
                .channel_template = AD5380_CHANNEL(14),
                .num_channels = 8,
-               .int_vref = 2500000,
+               .int_vref = 2500,
        },
 };
 
@@ -395,7 +393,7 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
                return ret;
        }
 
-       if (st->chip_info->int_vref == 2500000)
+       if (st->chip_info->int_vref == 2500)
                ctrl |= AD5380_CTRL_INT_VREF_2V5;
 
        st->vref_reg = devm_regulator_get(dev, "vref");
@@ -411,7 +409,7 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
                if (ret < 0)
                        goto error_disable_reg;
 
-               st->vref = ret;
+               st->vref = ret / 1000;
        } else {
                st->vref = st->chip_info->int_vref;
                ctrl |= AD5380_CTRL_INT_VREF_EN;