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_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_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_BUFFER */ 76#endif /* IIO_ADC_AD7298_H_ */ 77