• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)62 ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
63 {
64 	return 0;
65 }
66 
ad7298_ring_cleanup(struct iio_dev * indio_dev)67 static inline void ad7298_ring_cleanup(struct iio_dev *indio_dev)
68 {
69 }
70 #endif /* CONFIG_IIO_BUFFER */
71 #endif /* IIO_ADC_AD7298_H_ */
72