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_register_ring_funcs_and_init(struct iio_dev *indio_dev); 58 void ad7298_ring_cleanup(struct iio_dev *indio_dev); 59 #else /* CONFIG_IIO_BUFFER */ 60 61 static inline int ad7298_register_ring_funcs_and_init(struct iio_dev * indio_dev)62ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev) 63 { 64 return 0; 65 } 66 ad7298_ring_cleanup(struct iio_dev * indio_dev)67static inline void ad7298_ring_cleanup(struct iio_dev *indio_dev) 68 { 69 } 70 #endif /* CONFIG_IIO_BUFFER */ 71 #endif /* IIO_ADC_AD7298_H_ */ 72