1 /* 2 * AD7476/5/7/8 (A) SPI ADC driver 3 * 4 * Copyright 2010 Analog Devices Inc. 5 * 6 * Licensed under the GPL-2 or later. 7 */ 8 #ifndef IIO_ADC_AD7476_H_ 9 #define IIO_ADC_AD7476_H_ 10 11 #define RES_MASK(bits) ((1 << (bits)) - 1) 12 13 /* 14 * TODO: struct ad7476_platform_data needs to go into include/linux/iio 15 */ 16 17 struct ad7476_platform_data { 18 u16 vref_mv; 19 }; 20 21 struct ad7476_chip_info { 22 u16 int_vref_mv; 23 struct iio_chan_spec channel[2]; 24 }; 25 26 struct ad7476_state { 27 struct spi_device *spi; 28 const struct ad7476_chip_info *chip_info; 29 struct regulator *reg; 30 size_t d_size; 31 u16 int_vref_mv; 32 struct spi_transfer xfer; 33 struct spi_message msg; 34 /* 35 * DMA (thus cache coherency maintenance) requires the 36 * transfer buffers to live in their own cache lines. 37 */ 38 unsigned char data[2] ____cacheline_aligned; 39 }; 40 41 enum ad7476_supported_device_ids { 42 ID_AD7466, 43 ID_AD7467, 44 ID_AD7468, 45 ID_AD7475, 46 ID_AD7476, 47 ID_AD7477, 48 ID_AD7478, 49 ID_AD7495 50 }; 51 52 #ifdef CONFIG_IIO_BUFFER 53 int ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev); 54 void ad7476_ring_cleanup(struct iio_dev *indio_dev); 55 #else /* CONFIG_IIO_BUFFER */ 56 57 static inline int ad7476_register_ring_funcs_and_init(struct iio_dev * indio_dev)58ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev) 59 { 60 return 0; 61 } 62 ad7476_ring_cleanup(struct iio_dev * indio_dev)63static inline void ad7476_ring_cleanup(struct iio_dev *indio_dev) 64 { 65 } 66 #endif /* CONFIG_IIO_BUFFER */ 67 #endif /* IIO_ADC_AD7476_H_ */ 68