linux/drivers/staging/iio/adc/ad799x.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2010 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
  71enum {
  72        ad7991,
  73        ad7995,
  74        ad7999,
  75        ad7992,
  76        ad7993,
  77        ad7994,
  78        ad7997,
  79        ad7998
  80};
  81
  82struct ad799x_state;
  83
  84/**
  85 * struct ad799x_chip_info - chip specifc information
  86 * @num_inputs:         number of physical inputs on chip
  87 * @bits:               accuracy of the adc in bits
  88 * @int_vref_mv:        the internal reference voltage
  89 * @monitor_mode:       whether the chip supports monitor interrupts
  90 * @default_config:     device default configuration
  91 * @dev_attrs:          pointer to the device attribute group
  92 * @scan_attrs:         pointer to the scan element attribute group
  93 * @event_attrs:        pointer to the monitor event attribute group
  94 * @ad799x_set_scan_mode: function pointer to the device specific mode function
  95
  96 */
  97struct ad799x_chip_info {
  98        u8                              num_inputs;
  99        u8                              bits;
 100        u8                              storagebits;
 101        char                            sign;
 102        u16                             int_vref_mv;
 103        bool                            monitor_mode;
 104        u16                             default_config;
 105        struct attribute_group          *dev_attrs;
 106        struct attribute_group          *scan_attrs;
 107        struct attribute_group          *event_attrs;
 108        int (*ad799x_set_scan_mode)     (struct ad799x_state *st,
 109                                        unsigned mask);
 110};
 111
 112struct ad799x_state {
 113        struct iio_dev                  *indio_dev;
 114        struct i2c_client               *client;
 115        const struct ad799x_chip_info   *chip_info;
 116        struct work_struct              poll_work;
 117        struct work_struct              work_thresh;
 118        atomic_t                        protect_ring;
 119        struct iio_trigger              *trig;
 120        struct regulator                *reg;
 121        s64                             last_timestamp;
 122        u16                             int_vref_mv;
 123        unsigned                        id;
 124        char                            *name;
 125        u16                             config;
 126};
 127
 128/*
 129 * TODO: struct ad799x_platform_data needs to go into include/linux/iio
 130 */
 131
 132struct ad799x_platform_data {
 133        u16                             vref_mv;
 134};
 135
 136int ad799x_set_scan_mode(struct ad799x_state *st, unsigned mask);
 137
 138#ifdef CONFIG_AD799X_RING_BUFFER
 139int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask);
 140int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
 141void ad799x_ring_cleanup(struct iio_dev *indio_dev);
 142#else /* CONFIG_AD799X_RING_BUFFER */
 143int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask)
 144{
 145        return -EINVAL;
 146}
 147
 148
 149static inline int
 150ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
 151{
 152        return 0;
 153}
 154
 155static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
 156{
 157}
 158#endif /* CONFIG_AD799X_RING_BUFFER */
 159#endif /* _AD799X_H_ */
 160