Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 1 | /* |
Michael Hennerich | d22fd9c | 2011-05-18 14:41:52 +0100 | [diff] [blame] | 2 | * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc. |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 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 |
Michael Hennerich | 3ba2e49 | 2010-10-07 16:14:10 +0200 | [diff] [blame] | 16 | #define AD799X_STORAGEBITS 16 |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 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 |
Michael Hennerich | d22fd9c | 2011-05-18 14:41:52 +0100 | [diff] [blame] | 70 | /* TODO: move this into a common header */ |
| 71 | #define RES_MASK(bits) ((1 << (bits)) - 1) |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 72 | |
| 73 | enum { |
| 74 | ad7991, |
| 75 | ad7995, |
| 76 | ad7999, |
| 77 | ad7992, |
| 78 | ad7993, |
| 79 | ad7994, |
| 80 | ad7997, |
| 81 | ad7998 |
| 82 | }; |
| 83 | |
| 84 | struct ad799x_state; |
| 85 | |
| 86 | /** |
| 87 | * struct ad799x_chip_info - chip specifc information |
Michael Hennerich | d22fd9c | 2011-05-18 14:41:52 +0100 | [diff] [blame] | 88 | * @channel: channel specification |
| 89 | * @num_channels: number of channels |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 90 | * @monitor_mode: whether the chip supports monitor interrupts |
| 91 | * @default_config: device default configuration |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 92 | * @event_attrs: pointer to the monitor event attribute group |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 93 | */ |
Michael Hennerich | d22fd9c | 2011-05-18 14:41:52 +0100 | [diff] [blame] | 94 | |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 95 | struct ad799x_chip_info { |
Michael Hennerich | d22fd9c | 2011-05-18 14:41:52 +0100 | [diff] [blame] | 96 | struct iio_chan_spec channel[9]; |
| 97 | int num_channels; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 98 | u16 default_config; |
Jonathan Cameron | 6fe8135 | 2011-05-18 14:42:37 +0100 | [diff] [blame] | 99 | const struct iio_info *info; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 100 | }; |
| 101 | |
| 102 | struct ad799x_state { |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 103 | struct i2c_client *client; |
| 104 | const struct ad799x_chip_info *chip_info; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 105 | struct regulator *reg; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 106 | u16 int_vref_mv; |
| 107 | unsigned id; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 108 | u16 config; |
Lars-Peter Clausen | d8dca33 | 2013-03-26 18:43:00 +0000 | [diff] [blame] | 109 | |
| 110 | u8 *rx_buf; |
| 111 | unsigned int transfer_size; |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 112 | }; |
| 113 | |
| 114 | /* |
Michael Hennerich | 30b5309 | 2010-10-01 16:41:52 +0200 | [diff] [blame] | 115 | * TODO: struct ad799x_platform_data needs to go into include/linux/iio |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 116 | */ |
| 117 | |
| 118 | struct ad799x_platform_data { |
| 119 | u16 vref_mv; |
| 120 | }; |
| 121 | |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 122 | #ifdef CONFIG_AD799X_RING_BUFFER |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 123 | int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev); |
| 124 | void ad799x_ring_cleanup(struct iio_dev *indio_dev); |
| 125 | #else /* CONFIG_AD799X_RING_BUFFER */ |
Michael Hennerich | 985dbe7 | 2010-10-01 16:41:51 +0200 | [diff] [blame] | 126 | |
| 127 | static inline int |
| 128 | ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) |
| 129 | { |
| 130 | return 0; |
| 131 | } |
| 132 | |
| 133 | static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev) |
| 134 | { |
| 135 | } |
| 136 | #endif /* CONFIG_AD799X_RING_BUFFER */ |
| 137 | #endif /* _AD799X_H_ */ |