All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Hennerich <michael.hennerich@analog.com>
To: Jonathan Cameron <jic23@cam.ac.uk>
Cc: "linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
	"dtor@mail.ru" <dtor@mail.ru>,
	"khali@linux-fr.org" <khali@linux-fr.org>,
	"guenter.roeck@ericsson.com" <guenter.roeck@ericsson.com>
Subject: Re: [PATCH 3/6] IIO:ADC:ad799x initial import.
Date: Wed, 28 Sep 2011 09:10:45 +0200	[thread overview]
Message-ID: <4E82C875.1040507@analog.com> (raw)
In-Reply-To: <1317133794-16397-4-git-send-email-jic23@cam.ac.uk>

On 09/27/2011 04:29 PM, Jonathan Cameron wrote:
> From: Michael Hennerich<michael.hennerich@analog.com>
>
> Signed-off-by: Jonathan Cameron<jic23@cam.ac.uk>
Signed-off-by: Michael Hennerich<michael.hennerich@analog.com>

> ---
>   drivers/iio/adc/Kconfig       |   11 +
>   drivers/iio/adc/Makefile      |    3 +
>   drivers/iio/adc/ad799x_core.c |  722 +++++++++++++++++++++++++++++++++++++++++
>   include/linux/iio/ad799x.h    |   12 +
>   4 files changed, 748 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
> index 0673d78..3d97b21 100644
> --- a/drivers/iio/adc/Kconfig
> +++ b/drivers/iio/adc/Kconfig
> @@ -3,6 +3,17 @@
>   #
>   menu "Analog to digital convertors"
>
> +config IIO_AD799X
> +       tristate "Analog Devices AD799x ADC driver"
> +       depends on I2C
> +       select IIO_TRIGGER if IIO_BUFFER
> +       select AD799X_RING_BUFFER
> +       help
> +         Say yes here to build support for Analog Devices:
> +         ad7991, ad7995, ad7999, ad7992, ad7993, ad7994, ad7997, ad7998
> +         i2c analog to digital convertors (ADC). Provides direct access
> +         via sysfs.
> +
>   config IIO_MAX1363
>          tristate "Maxim max1363 ADC driver"
>          depends on I2C
> diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
> index 8d6a7f9..c197334 100644
> --- a/drivers/iio/adc/Makefile
> +++ b/drivers/iio/adc/Makefile
> @@ -2,5 +2,8 @@
>   # Makefile for IIO ADCs
>   #
>
> +iio_ad799x-y := ad799x_core.o
> +obj-$(CONFIG_IIO_AD799X) += iio_ad799x.o
> +
>   iio_max1363-y := max1363_core.o
>   obj-$(CONFIG_IIO_MAX1363) += iio_max1363.o
> \ No newline at end of file
> diff --git a/drivers/iio/adc/ad799x_core.c b/drivers/iio/adc/ad799x_core.c
> new file mode 100644
> index 0000000..0833ee9
> --- /dev/null
> +++ b/drivers/iio/adc/ad799x_core.c
> @@ -0,0 +1,722 @@
> +/*
> + * iio/adc/ad799x.c
> + * Copyright (C) 2010-1011 Michael Hennerich, Analog Devices Inc.
> + *
> + * based on iio/adc/max1363
> + * Copyright (C) 2008-2010 Jonathan Cameron
> + *
> + * based on linux/drivers/i2c/chips/max123x
> + * Copyright (C) 2002-2004 Stefan Eletzhofer
> + *
> + * based on linux/drivers/acron/char/pcf8583.c
> + * Copyright (C) 2000 Russell King
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * ad799x.c
> + *
> + * Support for ad7991, ad7995, ad7999, ad7992, ad7993, ad7994, ad7997,
> + * ad7998 and similar chips.
> + *
> + */
> +
> +#include<linux/interrupt.h>
> +#include<linux/device.h>
> +#include<linux/kernel.h>
> +#include<linux/sysfs.h>
> +#include<linux/i2c.h>
> +#include<linux/regulator/consumer.h>
> +#include<linux/slab.h>
> +#include<linux/types.h>
> +#include<linux/err.h>
> +#include<linux/module.h>
> +
> +#include<linux/iio/iio.h>
> +#include<linux/iio/sysfs.h>
> +#include<linux/iio/ad799x.h>
> +
> +#define AD799X_CHANNEL_SHIFT                   4
> +/*
> + * AD7991, AD7995 and AD7999 defines
> + */
> +
> +#define AD7991_REF_SEL                         0x08
> +#define AD7991_FLTR                            0x04
> +#define AD7991_BIT_TRIAL_DELAY                 0x02
> +#define AD7991_SAMPLE_DELAY                    0x01
> +
> +/*
> + * AD7992, AD7993, AD7994, AD7997 and AD7998 defines
> + */
> +
> +#define AD7998_FLTR                            0x08
> +#define AD7998_ALERT_EN                                0x04
> +#define AD7998_BUSY_ALERT                      0x02
> +#define AD7998_BUSY_ALERT_POL                  0x01
> +
> +#define AD7998_CONV_RES_REG                    0x0
> +#define AD7998_ALERT_STAT_REG                  0x1
> +#define AD7998_CONF_REG                                0x2
> +#define AD7998_CYCLE_TMR_REG                   0x3
> +#define AD7998_DATALOW_CH1_REG                 0x4
> +#define AD7998_DATAHIGH_CH1_REG                        0x5
> +#define AD7998_HYST_CH1_REG                    0x6
> +#define AD7998_DATALOW_CH2_REG                 0x7
> +#define AD7998_DATAHIGH_CH2_REG                        0x8
> +#define AD7998_HYST_CH2_REG                    0x9
> +#define AD7998_DATALOW_CH3_REG                 0xA
> +#define AD7998_DATAHIGH_CH3_REG                        0xB
> +#define AD7998_HYST_CH3_REG                    0xC
> +#define AD7998_DATALOW_CH4_REG                 0xD
> +#define AD7998_DATAHIGH_CH4_REG                        0xE
> +#define AD7998_HYST_CH4_REG                    0xF
> +
> +#define AD7998_CYC_MASK                                0x7
> +#define AD7998_CYC_DIS                         0x0
> +#define AD7998_CYC_TCONF_32                    0x1
> +#define AD7998_CYC_TCONF_64                    0x2
> +#define AD7998_CYC_TCONF_128                   0x3
> +#define AD7998_CYC_TCONF_256                   0x4
> +#define AD7998_CYC_TCONF_512                   0x5
> +#define AD7998_CYC_TCONF_1024                  0x6
> +#define AD7998_CYC_TCONF_2048                  0x7
> +
> +#define AD7998_ALERT_STAT_CLEAR                        0xFF
> +
> +/*
> + * AD7997 and AD7997 defines
> + */
> +
> +#define AD7997_8_READ_SINGLE                   0x80
> +#define AD7997_8_READ_SEQUENCE                 0x70
> +/* TODO: move this into a common header */
> +#define RES_MASK(bits) ((1<<  (bits)) - 1)
> +
> +enum {
> +       ad7991,
> +       ad7995,
> +       ad7999,
> +       ad7992,
> +       ad7993,
> +       ad7994,
> +       ad7997,
> +       ad7998
> +};
> +
> +struct ad799x_state;
> +
> +/**
> + * struct ad799x_chip_info - chip specifc information
> + * @channel:           channel specification
> + * @num_channels:      number of channels
> + * @int_vref_mv:       the internal reference voltage
> + */
> +struct ad799x_chip_info {
> +       struct iio_chan_spec            channel[9];
> +       int                             num_channels;
> +       u16                             int_vref_mv;
> +};
> +
> +struct ad799x_state {
> +       struct i2c_client               *client;
> +       const struct ad799x_chip_info   *chip_info;
> +       struct regulator                *reg;
> +       u16                             int_vref_mv;
> +       unsigned                        id;
> +       char                            *name;
> +       u16                             config;
> +};
> +
> +/*
> + * ad799x register access by I2C
> + */
> +static int ad799x_i2c_read16(struct ad799x_state *st, u8 reg, u16 *data)
> +{
> +       struct i2c_client *client = st->client;
> +       int ret = 0;
> +
> +       ret = i2c_smbus_read_word_data(client, reg);
> +       if (ret<  0) {
> +               dev_err(&client->dev, "I2C read error\n");
> +               return ret;
> +       }
> +
> +       *data = swab16((u16)ret);
> +
> +       return 0;
> +}
> +
> +static int ad799x_scan_direct(struct ad799x_state *st, unsigned ch)
> +{
> +       u16 rxbuf;
> +       u8 cmd;
> +       int ret;
> +
> +       switch (st->id) {
> +       case ad7991:
> +       case ad7995:
> +       case ad7999:
> +               cmd = st->config | ((1<<  ch)<<  AD799X_CHANNEL_SHIFT);
> +               break;
> +       case ad7992:
> +       case ad7993:
> +       case ad7994:
> +               cmd = (1<<  ch)<<  AD799X_CHANNEL_SHIFT;
> +               break;
> +       case ad7997:
> +       case ad7998:
> +               cmd = (ch<<  AD799X_CHANNEL_SHIFT) | AD7997_8_READ_SINGLE;
> +               break;
> +       default:
> +               return -EINVAL;
> +       }
> +
> +       ret = ad799x_i2c_read16(st, cmd,&rxbuf);
> +       if (ret<  0)
> +               return ret;
> +
> +       return rxbuf;
> +}
> +
> +static int ad799x_read_raw(struct iio_dev *dev_info,
> +                          struct iio_chan_spec const *chan,
> +                          int *val,
> +                          int *val2,
> +                          long m)
> +{
> +       int ret;
> +       struct ad799x_state *st = iio_priv(dev_info);
> +       unsigned int scale_uv;
> +
> +       switch (m) {
> +       case 0:
> +               mutex_lock(&dev_info->mlock);
> +               ret = ad799x_scan_direct(st, chan->channel);
> +               mutex_unlock(&dev_info->mlock);
> +
> +               if (ret<  0)
> +                       return ret;
> +               *val = (ret>>  chan->scan_type.shift)&
> +                       RES_MASK(chan->scan_type.realbits);
> +               return IIO_VAL_INT;
> +       case (1<<  IIO_CHAN_INFO_SCALE_SHARED):
> +               scale_uv = (st->int_vref_mv * 1000)>>  chan->scan_type.realbits;
> +               *val =  scale_uv / 1000;
> +               *val2 = (scale_uv % 1000) * 1000;
> +               return IIO_VAL_INT_PLUS_MICRO;
> +       }
> +       return -EINVAL;
> +}
> +
> +static const struct iio_info ad799X_info = {
> +       .read_raw =&ad799x_read_raw,
> +       .driver_module = THIS_MODULE,
> +};
> +
> +
> +static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
> +       [ad7991] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type =  {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +               },
> +               .num_channels = 5,
> +               .int_vref_mv = 4096,
> +       },
> +       [ad7995] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +               },
> +               .num_channels = 5,
> +               .int_vref_mv = 1024,
> +       },
> +       [ad7999] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 8,
> +                                       .shift = 4,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 8,
> +                                       .shift = 4,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 8,
> +                                       .shift = 4,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 8,
> +                                       .shift = 4,
> +                               },
> +                       },
> +               },
> +               .num_channels = 5,
> +               .int_vref_mv = 1024,
> +       },
> +       [ad7992] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +               },
> +               .num_channels = 3,
> +               .int_vref_mv = 4096,
> +       },
> +       [ad7993] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +               },
> +               .num_channels = 5,
> +               .int_vref_mv = 1024,
> +       },
> +       [ad7994] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +               },
> +               .num_channels = 5,
> +               .int_vref_mv = 4096,
> +       },
> +       [ad7997] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [4] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 4,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [5] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 5,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [6] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 6,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +                       [7] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 7,
> +                               .scan_type = {
> +                                       .realbits = 10,
> +                                       .shift = 2,
> +                               },
> +                       },
> +               },
> +               .num_channels = 9,
> +               .int_vref_mv = 1024,
> +       },
> +       [ad7998] = {
> +               .channel = {
> +                       [0] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 0,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [1] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 1,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [2] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 2,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [3] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 3,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [4] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 4,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [5] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 5,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [6] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 6,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +                       [7] = {
> +                               .type = IIO_VOLTAGE,
> +                               .indexed = 1,
> +                               .channel = 7,
> +                               .scan_type = {
> +                                       .realbits = 12,
> +                                       .shift = 0,
> +                               },
> +                       },
> +               },
> +               .num_channels = 9,
> +               .int_vref_mv = 4096,
> +       },
> +};
> +
> +static int __devinit ad799x_probe(struct i2c_client *client,
> +                                  const struct i2c_device_id *id)
> +{
> +       int ret;
> +       struct ad799x_platform_data *pdata = client->dev.platform_data;
> +       struct ad799x_state *st;
> +       struct iio_dev *indio_dev = iio_device_allocate(sizeof(*st));
> +
> +       if (indio_dev == NULL)
> +               return -ENOMEM;
> +
> +       st = iio_priv(indio_dev);
> +       /* this is only used for device removal purposes */
> +       i2c_set_clientdata(client, indio_dev);
> +
> +       st->id = id->driver_data;
> +       st->chip_info =&ad799x_chip_info_tbl[st->id];
> +
> +       /* TODO: Add pdata options for filtering and bit delay */
> +
> +       if (pdata)
> +               st->int_vref_mv = pdata->vref_mv;
> +       else
> +               st->int_vref_mv = st->chip_info->int_vref_mv;
> +
> +       st->reg = regulator_get(&client->dev, "vcc");
> +       if (!IS_ERR(st->reg)) {
> +               ret = regulator_enable(st->reg);
> +               if (ret)
> +                       goto error_put_reg;
> +       }
> +       st->client = client;
> +
> +       indio_dev->dev.parent =&client->dev;
> +       indio_dev->name = id->name;
> +       indio_dev->info =&ad799X_info;
> +
> +       indio_dev->channels = st->chip_info->channel;
> +       indio_dev->num_channels = st->chip_info->num_channels;
> +
> +       ret = iio_device_register(indio_dev);
> +       if (ret)
> +               goto error_disable_reg;
> +
> +       return 0;
> +
> +error_disable_reg:
> +       if (!IS_ERR(st->reg))
> +               regulator_disable(st->reg);
> +error_put_reg:
> +       if (!IS_ERR(st->reg))
> +               regulator_put(st->reg);
> +       iio_device_free(indio_dev);
> +
> +       return ret;
> +}
> +
> +static __devexit int ad799x_remove(struct i2c_client *client)
> +{
> +       struct iio_dev *indio_dev = i2c_get_clientdata(client);
> +       struct ad799x_state *st = iio_priv(indio_dev);
> +
> +       if (!IS_ERR(st->reg)) {
> +               regulator_disable(st->reg);
> +               regulator_put(st->reg);
> +       }
> +       iio_device_unregister(indio_dev);
> +
> +       return 0;
> +}
> +
> +static const struct i2c_device_id ad799x_id[] = {
> +       { "ad7991", ad7991 },
> +       { "ad7995", ad7995 },
> +       { "ad7999", ad7999 },
> +       { "ad7992", ad7992 },
> +       { "ad7993", ad7993 },
> +       { "ad7994", ad7994 },
> +       { "ad7997", ad7997 },
> +       { "ad7998", ad7998 },
> +       {}
> +};
> +
> +MODULE_DEVICE_TABLE(i2c, ad799x_id);
> +
> +static struct i2c_driver ad799x_driver = {
> +       .driver = {
> +               .name = "ad799x",
> +       },
> +       .probe = ad799x_probe,
> +       .remove = __devexit_p(ad799x_remove),
> +       .id_table = ad799x_id,
> +};
> +
> +static __init int ad799x_init(void)
> +{
> +       return i2c_add_driver(&ad799x_driver);
> +}
> +
> +static __exit void ad799x_exit(void)
> +{
> +       i2c_del_driver(&ad799x_driver);
> +}
> +
> +MODULE_AUTHOR("Michael Hennerich<hennerich@blackfin.uclinux.org>");
> +MODULE_DESCRIPTION("Analog Devices AD799x ADC");
> +MODULE_LICENSE("GPL v2");
> +MODULE_ALIAS("i2c:ad799x");
> +
> +module_init(ad799x_init);
> +module_exit(ad799x_exit);
> diff --git a/include/linux/iio/ad799x.h b/include/linux/iio/ad799x.h
> new file mode 100644
> index 0000000..38517be
> --- /dev/null
> +++ b/include/linux/iio/ad799x.h
> @@ -0,0 +1,12 @@
> +/*
> + * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
> + * Copyright (C) 2008-2010 Jonathan Cameron
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +struct ad799x_platform_data {
> +       u16                             vref_mv;
> +};
> --
> 1.7.3.4
>
>


-- 
Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
Margaret Seif

  reply	other threads:[~2011-09-28  7:10 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-27 14:29 [RFC PATCH 0/6 V2] IIO: Out of staging step 1: The core Jonathan Cameron
2011-09-27 14:29 ` [PATCH 1/6] IIO: Core sysfs only support Jonathan Cameron
2011-09-27 14:29 ` [PATCH 2/6] IIO:ADC: max1363 initial import Jonathan Cameron
2011-09-27 14:29 ` [PATCH 3/6] IIO:ADC:ad799x " Jonathan Cameron
2011-09-28  7:10   ` Michael Hennerich [this message]
2011-09-27 14:29 ` [PATCH 4/6] IIO:light:tsl2563 initial move out of staging Jonathan Cameron
2011-09-27 14:29 ` [PATCH 5/6] IIO:imu:adis16400 partial move from staging Jonathan Cameron
2011-09-27 14:29 ` [PATCH 6/6] IIO: ABI documetation Jonathan Cameron
  -- strict thread matches above, loose matches on Subject: below --
2011-10-17 13:16 [PATCH 0/6] IIO: Out of staging step 1: The core Jonathan Cameron
2011-10-17 13:16 ` [PATCH 3/6] IIO:ADC:ad799x initial import Jonathan Cameron
2011-11-07 14:52 [PATCH 0/6 V2] IIO: Out of staging step 1: The core jic23
2011-11-07 14:52 ` [PATCH 3/6] IIO:ADC:ad799x initial import jic23
2011-11-08 13:07   ` Lars-Peter Clausen
2011-11-08 13:35     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E82C875.1040507@analog.com \
    --to=michael.hennerich@analog.com \
    --cc=dtor@mail.ru \
    --cc=guenter.roeck@ericsson.com \
    --cc=jic23@cam.ac.uk \
    --cc=khali@linux-fr.org \
    --cc=linux-iio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.