1 /* 2 * AD7606 ADC driver 3 * 4 * Copyright 2011 Analog Devices Inc. 5 * 6 * Licensed under the GPL-2. 7 */ 8 9 #ifndef IIO_ADC_AD7606_H_ 10 #define IIO_ADC_AD7606_H_ 11 12 /* 13 * TODO: struct ad7606_platform_data needs to go into include/linux/iio 14 */ 15 16 /** 17 * struct ad7606_platform_data - platform/board specifc information 18 * @default_os: default oversampling value {0, 2, 4, 8, 16, 32, 64} 19 * @default_range: default range +/-{5000, 10000} mVolt 20 * @gpio_convst: number of gpio connected to the CONVST pin 21 * @gpio_reset: gpio connected to the RESET pin, if not used set to -1 22 * @gpio_range: gpio connected to the RANGE pin, if not used set to -1 23 * @gpio_os0: gpio connected to the OS0 pin, if not used set to -1 24 * @gpio_os1: gpio connected to the OS1 pin, if not used set to -1 25 * @gpio_os2: gpio connected to the OS2 pin, if not used set to -1 26 * @gpio_frstdata: gpio connected to the FRSTDAT pin, if not used set to -1 27 * @gpio_stby: gpio connected to the STBY pin, if not used set to -1 28 */ 29 30 struct ad7606_platform_data { 31 unsigned default_os; 32 unsigned default_range; 33 unsigned gpio_convst; 34 unsigned gpio_reset; 35 unsigned gpio_range; 36 unsigned gpio_os0; 37 unsigned gpio_os1; 38 unsigned gpio_os2; 39 unsigned gpio_frstdata; 40 unsigned gpio_stby; 41 }; 42 43 /** 44 * struct ad7606_chip_info - chip specifc information 45 * @name: indentification string for chip 46 * @int_vref_mv: the internal reference voltage 47 * @channels: channel specification 48 * @num_channels: number of channels 49 */ 50 51 struct ad7606_chip_info { 52 const char *name; 53 u16 int_vref_mv; 54 const struct iio_chan_spec *channels; 55 unsigned num_channels; 56 }; 57 58 /** 59 * struct ad7606_state - driver instance specific data 60 */ 61 62 struct ad7606_state { 63 struct device *dev; 64 const struct ad7606_chip_info *chip_info; 65 struct ad7606_platform_data *pdata; 66 struct regulator *reg; 67 struct work_struct poll_work; 68 wait_queue_head_t wq_data_avail; 69 const struct ad7606_bus_ops *bops; 70 unsigned range; 71 unsigned oversampling; 72 bool done; 73 void __iomem *base_address; 74 75 /* 76 * DMA (thus cache coherency maintenance) requires the 77 * transfer buffers to live in their own cache lines. 78 */ 79 80 unsigned short data[8] ____cacheline_aligned; 81 }; 82 83 struct ad7606_bus_ops { 84 /* more methods added in future? */ 85 int (*read_block)(struct device *, int, void *); 86 }; 87 88 void ad7606_suspend(struct iio_dev *indio_dev); 89 void ad7606_resume(struct iio_dev *indio_dev); 90 struct iio_dev *ad7606_probe(struct device *dev, int irq, 91 void __iomem *base_address, unsigned id, 92 const struct ad7606_bus_ops *bops); 93 int ad7606_remove(struct iio_dev *indio_dev, int irq); 94 int ad7606_reset(struct ad7606_state *st); 95 96 enum ad7606_supported_device_ids { 97 ID_AD7606_8, 98 ID_AD7606_6, 99 ID_AD7606_4 100 }; 101 102 int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev); 103 void ad7606_ring_cleanup(struct iio_dev *indio_dev); 104 #endif /* IIO_ADC_AD7606_H_ */ 105