1/* 2 * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc. 3 * Copyright (C) 2008-2010 Jonathan Cameron 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * ad799x.h 10 */ 11 12#ifndef _AD799X_H_ 13#define _AD799X_H_ 14 15#define AD799X_CHANNEL_SHIFT 4 16#define AD799X_STORAGEBITS 16 17/* 18 * AD7991, AD7995 and AD7999 defines 19 */ 20 21#define AD7991_REF_SEL 0x08 22#define AD7991_FLTR 0x04 23#define AD7991_BIT_TRIAL_DELAY 0x02 24#define AD7991_SAMPLE_DELAY 0x01 25 26/* 27 * AD7992, AD7993, AD7994, AD7997 and AD7998 defines 28 */ 29 30#define AD7998_FLTR 0x08 31#define AD7998_ALERT_EN 0x04 32#define AD7998_BUSY_ALERT 0x02 33#define AD7998_BUSY_ALERT_POL 0x01 34 35#define AD7998_CONV_RES_REG 0x0 36#define AD7998_ALERT_STAT_REG 0x1 37#define AD7998_CONF_REG 0x2 38#define AD7998_CYCLE_TMR_REG 0x3 39#define AD7998_DATALOW_CH1_REG 0x4 40#define AD7998_DATAHIGH_CH1_REG 0x5 41#define AD7998_HYST_CH1_REG 0x6 42#define AD7998_DATALOW_CH2_REG 0x7 43#define AD7998_DATAHIGH_CH2_REG 0x8 44#define AD7998_HYST_CH2_REG 0x9 45#define AD7998_DATALOW_CH3_REG 0xA 46#define AD7998_DATAHIGH_CH3_REG 0xB 47#define AD7998_HYST_CH3_REG 0xC 48#define AD7998_DATALOW_CH4_REG 0xD 49#define AD7998_DATAHIGH_CH4_REG 0xE 50#define AD7998_HYST_CH4_REG 0xF 51 52#define AD7998_CYC_MASK 0x7 53#define AD7998_CYC_DIS 0x0 54#define AD7998_CYC_TCONF_32 0x1 55#define AD7998_CYC_TCONF_64 0x2 56#define AD7998_CYC_TCONF_128 0x3 57#define AD7998_CYC_TCONF_256 0x4 58#define AD7998_CYC_TCONF_512 0x5 59#define AD7998_CYC_TCONF_1024 0x6 60#define AD7998_CYC_TCONF_2048 0x7 61 62#define AD7998_ALERT_STAT_CLEAR 0xFF 63 64/* 65 * AD7997 and AD7997 defines 66 */ 67 68#define AD7997_8_READ_SINGLE 0x80 69#define AD7997_8_READ_SEQUENCE 0x70 70/* TODO: move this into a common header */ 71#define RES_MASK(bits) ((1 << (bits)) - 1) 72 73enum { 74 ad7991, 75 ad7995, 76 ad7999, 77 ad7992, 78 ad7993, 79 ad7994, 80 ad7997, 81 ad7998 82}; 83 84struct ad799x_state; 85 86/** 87 * struct ad799x_chip_info - chip specifc information 88 * @channel: channel specification 89 * @num_channels: number of channels 90 * @int_vref_mv: the internal reference voltage 91 * @monitor_mode: whether the chip supports monitor interrupts 92 * @default_config: device default configuration 93 * @event_attrs: pointer to the monitor event attribute group 94 */ 95 96struct ad799x_chip_info { 97 struct iio_chan_spec channel[9]; 98 int num_channels; 99 u16 int_vref_mv; 100 u16 default_config; 101 const struct iio_info *info; 102}; 103 104struct ad799x_state { 105 struct i2c_client *client; 106 const struct ad799x_chip_info *chip_info; 107 struct iio_trigger *trig; 108 struct regulator *reg; 109 u16 int_vref_mv; 110 unsigned id; 111 char *name; 112 u16 config; 113}; 114 115/* 116 * TODO: struct ad799x_platform_data needs to go into include/linux/iio 117 */ 118 119struct ad799x_platform_data { 120 u16 vref_mv; 121}; 122 123#ifdef CONFIG_AD799X_RING_BUFFER 124int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev); 125void ad799x_ring_cleanup(struct iio_dev *indio_dev); 126#else /* CONFIG_AD799X_RING_BUFFER */ 127 128static inline int 129ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) 130{ 131 return 0; 132} 133 134static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev) 135{ 136} 137#endif /* CONFIG_AD799X_RING_BUFFER */ 138#endif /* _AD799X_H_ */ 139