• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * @monitor_mode:	whether the chip supports monitor interrupts
91  * @default_config:	device default configuration
92  * @event_attrs:	pointer to the monitor event attribute group
93  */
94 
95 struct ad799x_chip_info {
96 	struct iio_chan_spec		channel[9];
97 	int				num_channels;
98 	u16				default_config;
99 	const struct iio_info		*info;
100 };
101 
102 struct ad799x_state {
103 	struct i2c_client		*client;
104 	const struct ad799x_chip_info	*chip_info;
105 	struct regulator		*reg;
106 	u16				int_vref_mv;
107 	unsigned			id;
108 	u16				config;
109 
110 	u8				*rx_buf;
111 	unsigned int			transfer_size;
112 };
113 
114 /*
115  * TODO: struct ad799x_platform_data needs to go into include/linux/iio
116  */
117 
118 struct ad799x_platform_data {
119 	u16				vref_mv;
120 };
121 
122 #ifdef CONFIG_AD799X_RING_BUFFER
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 */
126 
127 static inline int
ad799x_register_ring_funcs_and_init(struct iio_dev * indio_dev)128 ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
129 {
130 	return 0;
131 }
132 
ad799x_ring_cleanup(struct iio_dev * indio_dev)133 static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
134 {
135 }
136 #endif /* CONFIG_AD799X_RING_BUFFER */
137 #endif /* _AD799X_H_ */
138