summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/adc/ad7887_core.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-11-05 09:56:00 (GMT)
committerJonathan Cameron <jic23@kernel.org>2012-11-05 20:39:52 (GMT)
commit65dd3d3d7a9bca683599b214229c546392394622 (patch)
tree21f167abeb6778fabe774ccfd906dc45bb4ee241 /drivers/staging/iio/adc/ad7887_core.c
parentbf5d2613c9083b8d4f4e98f5b25553fc938b50c6 (diff)
downloadlinux-fsl-qoriq-65dd3d3d7a9bca683599b214229c546392394622.tar.xz
staging:iio:ad7887: Squash everything into one file
The recent cleanups have decimated the drivers code size by quite a bit. It is only a few hundred lines in total now and we also always build buffer support, so there really is no need to spread the driver out over multiple files. Putting everything into one file also allows to reduce the code size a bit more by removing a few lines of boilerplate code. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/staging/iio/adc/ad7887_core.c')
-rw-r--r--drivers/staging/iio/adc/ad7887_core.c253
1 files changed, 0 insertions, 253 deletions
diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c
deleted file mode 100644
index cf33ba6..0000000
--- a/drivers/staging/iio/adc/ad7887_core.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * AD7887 SPI ADC driver
- *
- * Copyright 2010-2011 Analog Devices Inc.
- *
- * Licensed under the GPL-2.
- */
-
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/slab.h>
-#include <linux/sysfs.h>
-#include <linux/spi/spi.h>
-#include <linux/regulator/consumer.h>
-#include <linux/err.h>
-#include <linux/module.h>
-
-#include <linux/iio/iio.h>
-#include <linux/iio/sysfs.h>
-#include <linux/iio/buffer.h>
-
-
-#include "ad7887.h"
-
-static int ad7887_scan_direct(struct ad7887_state *st, unsigned ch)
-{
- int ret = spi_sync(st->spi, &st->msg[ch]);
- if (ret)
- return ret;
-
- return (st->data[(ch * 2)] << 8) | st->data[(ch * 2) + 1];
-}
-
-static int ad7887_read_raw(struct iio_dev *indio_dev,
- struct iio_chan_spec const *chan,
- int *val,
- int *val2,
- long m)
-{
- int ret;
- struct ad7887_state *st = iio_priv(indio_dev);
-
- switch (m) {
- case IIO_CHAN_INFO_RAW:
- mutex_lock(&indio_dev->mlock);
- if (iio_buffer_enabled(indio_dev))
- ret = -EBUSY;
- else
- ret = ad7887_scan_direct(st, chan->address);
- mutex_unlock(&indio_dev->mlock);
-
- if (ret < 0)
- return ret;
- *val = (ret >> st->chip_info->channel[0].scan_type.shift) &
- RES_MASK(st->chip_info->channel[0].scan_type.realbits);
- return IIO_VAL_INT;
- case IIO_CHAN_INFO_SCALE:
- if (st->reg) {
- *val = regulator_get_voltage(st->reg);
- if (*val < 0)
- return *val;
- *val /= 1000;
- } else {
- *val = st->chip_info->int_vref_mv;
- }
-
- *val2 = st->chip_info->channel[0].scan_type.realbits;
-
- return IIO_VAL_FRACTIONAL_LOG2;
- }
- return -EINVAL;
-}
-
-
-static const struct ad7887_chip_info ad7887_chip_info_tbl[] = {
- /*
- * More devices added in future
- */
- [ID_AD7887] = {
- .channel[0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
- .address = 1,
- .scan_index = 1,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- .channel[1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
- .address = 0,
- .scan_index = 0,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- .channel[2] = IIO_CHAN_SOFT_TIMESTAMP(2),
- .int_vref_mv = 2500,
- },
-};
-
-static const struct iio_info ad7887_info = {
- .read_raw = &ad7887_read_raw,
- .driver_module = THIS_MODULE,
-};
-
-static int __devinit ad7887_probe(struct spi_device *spi)
-{
- struct ad7887_platform_data *pdata = spi->dev.platform_data;
- struct ad7887_state *st;
- struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st));
- int ret;
-
- if (indio_dev == NULL)
- return -ENOMEM;
-
- st = iio_priv(indio_dev);
-
- if (!pdata || !pdata->use_onchip_ref) {
- st->reg = regulator_get(&spi->dev, "vref");
- if (IS_ERR(st->reg)) {
- ret = PTR_ERR(st->reg);
- goto error_free;
- }
-
- ret = regulator_enable(st->reg);
- if (ret)
- goto error_put_reg;
- }
-
- st->chip_info =
- &ad7887_chip_info_tbl[spi_get_device_id(spi)->driver_data];
-
- spi_set_drvdata(spi, indio_dev);
- st->spi = spi;
-
- /* Estabilish that the iio_dev is a child of the spi device */
- indio_dev->dev.parent = &spi->dev;
- indio_dev->name = spi_get_device_id(spi)->name;
- indio_dev->info = &ad7887_info;
- indio_dev->modes = INDIO_DIRECT_MODE;
-
- /* Setup default message */
-
- st->tx_cmd_buf[0] = AD7887_CH_AIN0 | AD7887_PM_MODE4 |
- ((pdata && pdata->use_onchip_ref) ?
- 0 : AD7887_REF_DIS);
-
- st->xfer[0].rx_buf = &st->data[0];
- st->xfer[0].tx_buf = &st->tx_cmd_buf[0];
- st->xfer[0].len = 2;
-
- spi_message_init(&st->msg[AD7887_CH0]);
- spi_message_add_tail(&st->xfer[0], &st->msg[AD7887_CH0]);
-
- if (pdata && pdata->en_dual) {
- st->tx_cmd_buf[0] |= AD7887_DUAL | AD7887_REF_DIS;
-
- st->tx_cmd_buf[2] = AD7887_CH_AIN1 | AD7887_DUAL |
- AD7887_REF_DIS | AD7887_PM_MODE4;
- st->tx_cmd_buf[4] = AD7887_CH_AIN0 | AD7887_DUAL |
- AD7887_REF_DIS | AD7887_PM_MODE4;
- st->tx_cmd_buf[6] = AD7887_CH_AIN1 | AD7887_DUAL |
- AD7887_REF_DIS | AD7887_PM_MODE4;
-
- st->xfer[1].rx_buf = &st->data[0];
- st->xfer[1].tx_buf = &st->tx_cmd_buf[2];
- st->xfer[1].len = 2;
-
- st->xfer[2].rx_buf = &st->data[2];
- st->xfer[2].tx_buf = &st->tx_cmd_buf[4];
- st->xfer[2].len = 2;
-
- spi_message_init(&st->msg[AD7887_CH0_CH1]);
- spi_message_add_tail(&st->xfer[1], &st->msg[AD7887_CH0_CH1]);
- spi_message_add_tail(&st->xfer[2], &st->msg[AD7887_CH0_CH1]);
-
- st->xfer[3].rx_buf = &st->data[0];
- st->xfer[3].tx_buf = &st->tx_cmd_buf[6];
- st->xfer[3].len = 2;
-
- spi_message_init(&st->msg[AD7887_CH1]);
- spi_message_add_tail(&st->xfer[3], &st->msg[AD7887_CH1]);
-
- indio_dev->channels = st->chip_info->channel;
- indio_dev->num_channels = 3;
- } else {
- indio_dev->channels = &st->chip_info->channel[1];
- indio_dev->num_channels = 2;
- }
-
- ret = ad7887_register_ring_funcs_and_init(indio_dev);
- if (ret)
- goto error_disable_reg;
-
- ret = iio_device_register(indio_dev);
- if (ret)
- goto error_unregister_ring;
-
- return 0;
-error_unregister_ring:
- ad7887_ring_cleanup(indio_dev);
-error_disable_reg:
- if (st->reg)
- regulator_disable(st->reg);
-error_put_reg:
- if (st->reg)
- regulator_put(st->reg);
-error_free:
- iio_device_free(indio_dev);
-
- return ret;
-}
-
-static int __devexit ad7887_remove(struct spi_device *spi)
-{
- struct iio_dev *indio_dev = spi_get_drvdata(spi);
- struct ad7887_state *st = iio_priv(indio_dev);
-
- iio_device_unregister(indio_dev);
- ad7887_ring_cleanup(indio_dev);
- if (st->reg) {
- regulator_disable(st->reg);
- regulator_put(st->reg);
- }
- iio_device_free(indio_dev);
-
- return 0;
-}
-
-static const struct spi_device_id ad7887_id[] = {
- {"ad7887", ID_AD7887},
- {}
-};
-MODULE_DEVICE_TABLE(spi, ad7887_id);
-
-static struct spi_driver ad7887_driver = {
- .driver = {
- .name = "ad7887",
- .owner = THIS_MODULE,
- },
- .probe = ad7887_probe,
- .remove = __devexit_p(ad7887_remove),
- .id_table = ad7887_id,
-};
-module_spi_driver(ad7887_driver);
-
-MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
-MODULE_DESCRIPTION("Analog Devices AD7887 ADC");
-MODULE_LICENSE("GPL v2");