Linux-libre 3.2.77-gnu1
[librecmc/linux-libre.git] / drivers / staging / iio / adc / ad7298.h
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
33 struct ad7298_platform_data {
34         /* External Vref voltage applied */
35         u16                             vref_mv;
36 };
37
38 struct 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_BUFFER
57 int ad7298_scan_from_ring(struct iio_dev *indio_dev, long ch);
58 int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev);
59 void ad7298_ring_cleanup(struct iio_dev *indio_dev);
60 #else /* CONFIG_IIO_BUFFER */
61 static inline int ad7298_scan_from_ring(struct iio_dev *indio_dev, long ch)
62 {
63         return 0;
64 }
65
66 static inline int
67 ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
68 {
69         return 0;
70 }
71
72 static inline void ad7298_ring_cleanup(struct iio_dev *indio_dev)
73 {
74 }
75 #endif /* CONFIG_IIO_BUFFER */
76 #endif /* IIO_ADC_AD7298_H_ */