blob: b51680c1c331a65593a531a93ec6f1bd6f1b191c [file] [log] [blame]
Michael Hennerich985dbe72010-10-01 16:41:51 +02001/*
Michael Hennerichd22fd9c2011-05-18 14:41:52 +01002 * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
Michael Hennerich985dbe72010-10-01 16:41:51 +02003 * 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 Hennerich3ba2e492010-10-07 16:14:10 +020016#define AD799X_STORAGEBITS 16
Michael Hennerich985dbe72010-10-01 16:41:51 +020017/*
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 Hennerichd22fd9c2011-05-18 14:41:52 +010070/* TODO: move this into a common header */
71#define RES_MASK(bits) ((1 << (bits)) - 1)
Michael Hennerich985dbe72010-10-01 16:41:51 +020072
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
Michael Hennerichd22fd9c2011-05-18 14:41:52 +010088 * @channel: channel specification
89 * @num_channels: number of channels
Michael Hennerich985dbe72010-10-01 16:41:51 +020090 * @monitor_mode: whether the chip supports monitor interrupts
91 * @default_config: device default configuration
Michael Hennerich985dbe72010-10-01 16:41:51 +020092 * @event_attrs: pointer to the monitor event attribute group
Michael Hennerich985dbe72010-10-01 16:41:51 +020093 */
Michael Hennerichd22fd9c2011-05-18 14:41:52 +010094
Michael Hennerich985dbe72010-10-01 16:41:51 +020095struct ad799x_chip_info {
Michael Hennerichd22fd9c2011-05-18 14:41:52 +010096 struct iio_chan_spec channel[9];
97 int num_channels;
Michael Hennerich985dbe72010-10-01 16:41:51 +020098 u16 default_config;
Jonathan Cameron6fe81352011-05-18 14:42:37 +010099 const struct iio_info *info;
Michael Hennerich985dbe72010-10-01 16:41:51 +0200100};
101
102struct ad799x_state {
Michael Hennerich985dbe72010-10-01 16:41:51 +0200103 struct i2c_client *client;
104 const struct ad799x_chip_info *chip_info;
Michael Hennerich985dbe72010-10-01 16:41:51 +0200105 struct regulator *reg;
Michael Hennerich985dbe72010-10-01 16:41:51 +0200106 u16 int_vref_mv;
107 unsigned id;
Michael Hennerich985dbe72010-10-01 16:41:51 +0200108 u16 config;
Lars-Peter Clausend8dca332013-03-26 18:43:00 +0000109
110 u8 *rx_buf;
111 unsigned int transfer_size;
Michael Hennerich985dbe72010-10-01 16:41:51 +0200112};
113
114/*
Michael Hennerich30b53092010-10-01 16:41:52 +0200115 * TODO: struct ad799x_platform_data needs to go into include/linux/iio
Michael Hennerich985dbe72010-10-01 16:41:51 +0200116 */
117
118struct ad799x_platform_data {
119 u16 vref_mv;
120};
121
Michael Hennerich985dbe72010-10-01 16:41:51 +0200122#ifdef CONFIG_AD799X_RING_BUFFER
Michael Hennerich985dbe72010-10-01 16:41:51 +0200123int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
124void ad799x_ring_cleanup(struct iio_dev *indio_dev);
125#else /* CONFIG_AD799X_RING_BUFFER */
Michael Hennerich985dbe72010-10-01 16:41:51 +0200126
127static inline int
128ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
129{
130 return 0;
131}
132
133static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
134{
135}
136#endif /* CONFIG_AD799X_RING_BUFFER */
137#endif /* _AD799X_H_ */