linux/drivers/staging/iio/adc/ad799x.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
   3 * Copyright (C) 2008-2010 Jonathan Cameron
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License version 2 as
   7 * published by the Free Software Foundation.
   8 *
   9 * ad799x.h
  10 */
  11
  12#ifndef _AD799X_H_
  13#define  _AD799X_H_
  14
  15#define AD799X_CHANNEL_SHIFT                    4
  16#define AD799X_STORAGEBITS                      16
  17/*
  18 * AD7991, AD7995 and AD7999 defines
  19 */
  20
  21#define AD7991_REF_SEL                          0x08
  22#define AD7991_FLTR                             0x04
  23#define AD7991_BIT_TRIAL_DELAY                  0x02
  24#define AD7991_SAMPLE_DELAY                     0x01
  25
  26/*
  27 * AD7992, AD7993, AD7994, AD7997 and AD7998 defines
  28 */
  29
  30#define AD7998_FLTR                             0x08
  31#define AD7998_ALERT_EN                         0x04
  32#define AD7998_BUSY_ALERT                       0x02
  33#define AD7998_BUSY_ALERT_POL                   0x01
  34
  35#define AD7998_CONV_RES_REG                     0x0
  36#define AD7998_ALERT_STAT_REG                   0x1
  37#define AD7998_CONF_REG                         0x2
  38#define AD7998_CYCLE_TMR_REG                    0x3
  39#define AD7998_DATALOW_CH1_REG                  0x4
  40#define AD7998_DATAHIGH_CH1_REG                 0x5
  41#define AD7998_HYST_CH1_REG                     0x6
  42#define AD7998_DATALOW_CH2_REG                  0x7
  43#define AD7998_DATAHIGH_CH2_REG                 0x8
  44#define AD7998_HYST_CH2_REG                     0x9
  45#define AD7998_DATALOW_CH3_REG                  0xA
  46#define AD7998_DATAHIGH_CH3_REG                 0xB
  47#define AD7998_HYST_CH3_REG                     0xC
  48#define AD7998_DATALOW_CH4_REG                  0xD
  49#define AD7998_DATAHIGH_CH4_REG                 0xE
  50#define AD7998_HYST_CH4_REG                     0xF
  51
  52#define AD7998_CYC_MASK                         0x7
  53#define AD7998_CYC_DIS                          0x0
  54#define AD7998_CYC_TCONF_32                     0x1
  55#define AD7998_CYC_TCONF_64                     0x2
  56#define AD7998_CYC_TCONF_128                    0x3
  57#define AD7998_CYC_TCONF_256                    0x4
  58#define AD7998_CYC_TCONF_512                    0x5
  59#define AD7998_CYC_TCONF_1024                   0x6
  60#define AD7998_CYC_TCONF_2048                   0x7
  61
  62#define AD7998_ALERT_STAT_CLEAR                 0xFF
  63
  64/*
  65 * AD7997 and AD7997 defines
  66 */
  67
  68#define AD7997_8_READ_SINGLE                    0x80
  69#define AD7997_8_READ_SEQUENCE                  0x70
  70/* TODO: move this into a common header */
  71#define RES_MASK(bits)  ((1 << (bits)) - 1)
  72
  73enum {
  74        ad7991,
  75        ad7995,
  76        ad7999,
  77        ad7992,
  78        ad7993,
  79        ad7994,
  80        ad7997,
  81        ad7998
  82};
  83
  84struct ad799x_state;
  85
  86/**
  87 * struct ad799x_chip_info - chip specifc information
  88 * @channel:            channel specification
  89 * @num_channels:       number of channels
  90 * @int_vref_mv:        the internal reference voltage
  91 * @monitor_mode:       whether the chip supports monitor interrupts
  92 * @default_config:     device default configuration
  93 * @event_attrs:        pointer to the monitor event attribute group
  94 */
  95
  96struct ad799x_chip_info {
  97        struct iio_chan_spec            channel[9];
  98        int                             num_channels;
  99        u16                             int_vref_mv;
 100        u16                             default_config;
 101        const struct iio_info           *info;
 102};
 103
 104struct ad799x_state {
 105        struct i2c_client               *client;
 106        const struct ad799x_chip_info   *chip_info;
 107        struct iio_trigger              *trig;
 108        struct regulator                *reg;
 109        u16                             int_vref_mv;
 110        unsigned                        id;
 111        char                            *name;
 112        u16                             config;
 113};
 114
 115/*
 116 * TODO: struct ad799x_platform_data needs to go into include/linux/iio
 117 */
 118
 119struct ad799x_platform_data {
 120        u16                             vref_mv;
 121};
 122
 123#ifdef CONFIG_AD799X_RING_BUFFER
 124int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
 125void ad799x_ring_cleanup(struct iio_dev *indio_dev);
 126#else /* CONFIG_AD799X_RING_BUFFER */
 127
 128static inline int
 129ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
 130{
 131        return 0;
 132}
 133
 134static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
 135{
 136}
 137#endif /* CONFIG_AD799X_RING_BUFFER */
 138#endif /* _AD799X_H_ */
 139