2 * AD7298 SPI ADC driver
4 * Copyright 2011 Analog Devices Inc.
6 * Licensed under the GPL-2.
9 #ifndef IIO_ADC_AD7298_H_
10 #define IIO_ADC_AD7298_H_
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 */
20 #define AD7298_MAX_CHAN 8
21 #define AD7298_BITS 12
22 #define AD7298_STORAGE_BITS 16
23 #define AD7298_INTREF_mV 2500
25 #define AD7298_CH_TEMP 9
27 #define RES_MASK(bits) ((1 << (bits)) - 1)
30 * TODO: struct ad7298_platform_data needs to go into include/linux/iio
33 struct ad7298_platform_data
{
34 /* External Vref voltage applied */
39 struct spi_device
*spi
;
40 struct regulator
*reg
;
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
;
49 * DMA (thus cache coherency maintenance) requires the
50 * transfer buffers to live in their own cache lines.
52 unsigned short rx_buf
[8] ____cacheline_aligned
;
53 unsigned short tx_buf
[2];
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
)
67 ad7298_register_ring_funcs_and_init(struct iio_dev
*indio_dev
)
72 static inline void ad7298_ring_cleanup(struct iio_dev
*indio_dev
)
75 #endif /* CONFIG_IIO_BUFFER */
76 #endif /* IIO_ADC_AD7298_H_ */