pandora: defconfig: update
[pandora-kernel.git] / drivers / staging / iio / adc / ad799x.h
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_single_channel_from_ring(struct iio_dev *indio_dev, int channum);
128 int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
129 void ad799x_ring_cleanup(struct iio_dev *indio_dev);
130 #else /* CONFIG_AD799X_RING_BUFFER */
131 int ad799x_single_channel_from_ring(struct iio_dev *indio_dev, int channum)
132 {
133         return -EINVAL;
134 }
135
136
137 static inline int
138 ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
139 {
140         return 0;
141 }
142
143 static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
144 {
145 }
146 #endif /* CONFIG_AD799X_RING_BUFFER */
147 #endif /* _AD799X_H_ */