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
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
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
96 struct 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
104 struct ad799x_state {
105 struct i2c_client *client;
106 const struct ad799x_chip_info *chip_info;
107 size_t d_size;
108 struct iio_trigger *trig;
109 struct regulator *reg;
110 u16 int_vref_mv;
111 unsigned id;
112 char *name;
113 u16 config;
114 };
115
116 /*
117 * TODO: struct ad799x_platform_data needs to go into include/linux/iio
118 */
119
120 struct ad799x_platform_data {
121 u16 vref_mv;
122 };
123
124 int ad7997_8_set_scan_mode(struct ad799x_state *st, unsigned mask);
125
126 #ifdef CONFIG_AD799X_RING_BUFFER
127 int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
128 void ad799x_ring_cleanup(struct iio_dev *indio_dev);
129 #else /* CONFIG_AD799X_RING_BUFFER */
130
131 static inline int
ad799x_register_ring_funcs_and_init(struct iio_dev * indio_dev)132 ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
133 {
134 return 0;
135 }
136
ad799x_ring_cleanup(struct iio_dev * indio_dev)137 static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
138 {
139 }
140 #endif /* CONFIG_AD799X_RING_BUFFER */
141 #endif /* _AD799X_H_ */
142