]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/iio/adc/ad7298.h
718e56af4864abfa233598a4b068bfa2e247fc31
[karo-tx-linux.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 iio_dev                  *indio_dev;
40         struct spi_device               *spi;
41         struct regulator                *reg;
42         size_t                          d_size;
43         u16                             int_vref_mv;
44         unsigned                        ext_ref;
45         struct spi_transfer             ring_xfer[10];
46         struct spi_transfer             scan_single_xfer[3];
47         struct spi_message              ring_msg;
48         struct spi_message              scan_single_msg;
49         /*
50          * DMA (thus cache coherency maintenance) requires the
51          * transfer buffers to live in their own cache lines.
52          */
53         unsigned short                  rx_buf[8] ____cacheline_aligned;
54         unsigned short                  tx_buf[2];
55 };
56
57 #ifdef CONFIG_IIO_RING_BUFFER
58 int ad7298_scan_from_ring(struct ad7298_state *st, long ch);
59 int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev);
60 void ad7298_ring_cleanup(struct iio_dev *indio_dev);
61 #else /* CONFIG_IIO_RING_BUFFER */
62 static inline int ad7298_scan_from_ring(struct ad7298_state *st, long ch)
63 {
64         return 0;
65 }
66
67 static inline int
68 ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
69 {
70         return 0;
71 }
72
73 static inline void ad7298_ring_cleanup(struct iio_dev *indio_dev)
74 {
75 }
76 #endif /* CONFIG_IIO_RING_BUFFER */
77 #endif /* IIO_ADC_AD7298_H_ */