summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/adc/ad7793.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-11-21 16:27:00 (GMT)
committerJonathan Cameron <jic23@kernel.org>2012-11-30 12:57:07 (GMT)
commitd21f30c99e7c46cceb19f45e378a8d6a0a707428 (patch)
treef48da2cfe6e897cb6d748f546183e2eadcbeff03 /drivers/staging/iio/adc/ad7793.c
parentfe2e0d5228aa170fa725c2cb02cf423838c30bb3 (diff)
downloadlinux-fsl-qoriq-d21f30c99e7c46cceb19f45e378a8d6a0a707428.tar.xz
staging:iio:ad7793: Rework platform data
Currently the platform data for the ad7793 consist just out of the raw default register settings. This has some downsides, for one we actually don't want to make all bits configurable and secondly not all register settings are actually valid. This patch exposes all the options which should be configurable via platform data as induvidual platform data struct fields. This also allows us to document the different settings via proper kernel doc. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/staging/iio/adc/ad7793.c')
-rw-r--r--drivers/staging/iio/adc/ad7793.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index 843550d..ec0fbd4 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -118,6 +118,12 @@ static int ad7793_setup(struct iio_dev *indio_dev,
unsigned long long scale_uv;
u32 id;
+ if ((pdata->current_source_direction == AD7793_IEXEC1_IEXEC2_IOUT1 ||
+ pdata->current_source_direction == AD7793_IEXEC1_IEXEC2_IOUT2) &&
+ ((pdata->exitation_current != AD7793_IX_10uA) &&
+ (pdata->exitation_current != AD7793_IX_210uA)))
+ return -EINVAL;
+
/* reset the serial interface */
ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret));
if (ret < 0)
@@ -136,8 +142,18 @@ static int ad7793_setup(struct iio_dev *indio_dev,
goto out;
}
- st->mode = pdata->mode;
- st->conf = pdata->conf;
+ st->mode = AD7793_MODE_RATE(1);
+ st->mode |= AD7793_MODE_CLKSRC(pdata->clock_src);
+ st->conf = AD7793_CONF_REFSEL(pdata->refsel);
+ st->conf |= AD7793_CONF_VBIAS(pdata->bias_voltage);
+ if (pdata->buffered)
+ st->conf |= AD7793_CONF_BUF;
+ if (pdata->boost_enable)
+ st->conf |= AD7793_CONF_BOOST;
+ if (pdata->burnout_current)
+ st->conf |= AD7793_CONF_BO_EN;
+ if (pdata->unipolar)
+ st->conf |= AD7793_CONF_UNIPOLAR;
ret = ad7793_set_mode(&st->sd, AD_SD_MODE_IDLE);
if (ret)
@@ -147,8 +163,9 @@ static int ad7793_setup(struct iio_dev *indio_dev,
if (ret)
goto out;
- ret = ad_sd_write_reg(&st->sd, AD7793_REG_IO,
- sizeof(pdata->io), pdata->io);
+ ret = ad_sd_write_reg(&st->sd, AD7793_REG_IO, 1,
+ pdata->exitation_current |
+ (pdata->current_source_direction << 2));
if (ret)
goto out;