linux/drivers/staging/iio/adc/ad7298.h
<<
>>
Prefs
   1/*
   2 * AD7298 SPI ADC driver
   3 *
   4 * Copyright 2011 Analog Devices Inc.
   5 *
   6 * Licensed under the GPL-2.
   7 */
   8
   9#ifndef IIO_ADC_AD7298_H_
  10#define IIO_ADC_AD7298_H_
  11
  12#define AD7298_WRITE    (1 << 15) /* write to the control register */
  13#define AD7298_REPEAT   (1 << 14) /* repeated conversion enable */
  14#define AD7298_CH(x)    (1 << (13 - (x))) /* channel select */
  15#define AD7298_TSENSE   (1 << 5) /* temperature conversion enable */
  16#define AD7298_EXTREF   (1 << 2) /* external reference enable */
  17#define AD7298_TAVG     (1 << 1) /* temperature sensor averaging enable */
  18#define AD7298_PDD      (1 << 0) /* partial power down enable */
  19
  20#define AD7298_MAX_CHAN         8
  21#define AD7298_BITS             12
  22#define AD7298_STORAGE_BITS     16
  23#define AD7298_INTREF_mV        2500
  24
  25#define AD7298_CH_TEMP          9
  26
  27#define RES_MASK(bits)  ((1 << (bits)) - 1)
  28
  29/*
  30 * TODO: struct ad7298_platform_data needs to go into include/linux/iio
  31 */
  32
  33struct ad7298_platform_data {
  34        /* External Vref voltage applied */
  35        u16                             vref_mv;
  36};
  37
  38struct ad7298_state {
  39        struct spi_device               *spi;
  40        struct regulator                *reg;
  41        size_t                          d_size;
  42        u16                             int_vref_mv;
  43        unsigned                        ext_ref;
  44        struct spi_transfer             ring_xfer[10];
  45        struct spi_transfer             scan_single_xfer[3];
  46        struct spi_message              ring_msg;
  47        struct spi_message              scan_single_msg;
  48        /*
  49         * DMA (thus cache coherency maintenance) requires the
  50         * transfer buffers to live in their own cache lines.
  51         */
  52        unsigned short                  rx_buf[8] ____cacheline_aligned;
  53        unsigned short                  tx_buf[2];
  54};
  55
  56#ifdef CONFIG_IIO_RING_BUFFER
  57int ad7298_scan_from_ring(struct iio_dev *indio_dev, long ch);
  58int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev);
  59void ad7298_ring_cleanup(struct iio_dev *indio_dev);
  60#else /* CONFIG_IIO_RING_BUFFER */
  61static inline int ad7298_scan_from_ring(struct iio_dev *indio_dev, long ch)
  62{
  63        return 0;
  64}
  65
  66static inline int
  67ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
  68{
  69        return 0;
  70}
  71
  72static inline void ad7298_ring_cleanup(struct iio_dev *indio_dev)
  73{
  74}
  75#endif /* CONFIG_IIO_RING_BUFFER */
  76#endif /* IIO_ADC_AD7298_H_ */
  77