Commit | Line | Data |
---|---|---|
06f1962a BS |
1 | #ifndef SPI_ADIS16220_H_ |
2 | #define SPI_ADIS16220_H_ | |
3 | ||
4 | #define ADIS16220_STARTUP_DELAY 220 /* ms */ | |
5 | ||
6 | #define ADIS16220_READ_REG(a) a | |
7 | #define ADIS16220_WRITE_REG(a) ((a) | 0x80) | |
8 | ||
9 | /* Flash memory write count */ | |
10 | #define ADIS16220_FLASH_CNT 0x00 | |
11 | /* Control, acceleration offset adjustment control */ | |
12 | #define ADIS16220_ACCL_NULL 0x02 | |
13 | /* Control, AIN1 offset adjustment control */ | |
14 | #define ADIS16220_AIN1_NULL 0x04 | |
15 | /* Control, AIN2 offset adjustment control */ | |
16 | #define ADIS16220_AIN2_NULL 0x06 | |
17 | /* Output, power supply during capture */ | |
18 | #define ADIS16220_CAPT_SUPPLY 0x0A | |
19 | /* Output, temperature during capture */ | |
20 | #define ADIS16220_CAPT_TEMP 0x0C | |
21 | /* Output, peak acceleration during capture */ | |
22 | #define ADIS16220_CAPT_PEAKA 0x0E | |
23 | /* Output, peak AIN1 level during capture */ | |
24 | #define ADIS16220_CAPT_PEAK1 0x10 | |
25 | /* Output, peak AIN2 level during capture */ | |
26 | #define ADIS16220_CAPT_PEAK2 0x12 | |
27 | /* Output, capture buffer for acceleration */ | |
28 | #define ADIS16220_CAPT_BUFA 0x14 | |
29 | /* Output, capture buffer for AIN1 */ | |
30 | #define ADIS16220_CAPT_BUF1 0x16 | |
31 | /* Output, capture buffer for AIN2 */ | |
32 | #define ADIS16220_CAPT_BUF2 0x18 | |
33 | /* Control, capture buffer address pointer */ | |
34 | #define ADIS16220_CAPT_PNTR 0x1A | |
35 | /* Control, capture control register */ | |
36 | #define ADIS16220_CAPT_CTRL 0x1C | |
37 | /* Control, capture period (automatic mode) */ | |
38 | #define ADIS16220_CAPT_PRD 0x1E | |
39 | /* Control, Alarm A, acceleration peak threshold */ | |
40 | #define ADIS16220_ALM_MAGA 0x20 | |
41 | /* Control, Alarm 1, AIN1 peak threshold */ | |
42 | #define ADIS16220_ALM_MAG1 0x22 | |
43 | /* Control, Alarm 2, AIN2 peak threshold */ | |
44 | #define ADIS16220_ALM_MAG2 0x24 | |
45 | /* Control, Alarm S, peak threshold */ | |
46 | #define ADIS16220_ALM_MAGS 0x26 | |
47 | /* Control, alarm configuration register */ | |
48 | #define ADIS16220_ALM_CTRL 0x28 | |
49 | /* Control, general I/O configuration */ | |
50 | #define ADIS16220_GPIO_CTRL 0x32 | |
51 | /* Control, self-test control, AIN configuration */ | |
52 | #define ADIS16220_MSC_CTRL 0x34 | |
53 | /* Control, digital I/O configuration */ | |
54 | #define ADIS16220_DIO_CTRL 0x36 | |
55 | /* Control, filter configuration */ | |
56 | #define ADIS16220_AVG_CNT 0x38 | |
57 | /* Status, system status */ | |
58 | #define ADIS16220_DIAG_STAT 0x3C | |
59 | /* Control, system commands */ | |
60 | #define ADIS16220_GLOB_CMD 0x3E | |
61 | /* Status, self-test response */ | |
62 | #define ADIS16220_ST_DELTA 0x40 | |
63 | /* Lot Identification Code 1 */ | |
64 | #define ADIS16220_LOT_ID1 0x52 | |
65 | /* Lot Identification Code 2 */ | |
66 | #define ADIS16220_LOT_ID2 0x54 | |
67 | /* Product identifier; convert to decimal = 16220 */ | |
68 | #define ADIS16220_PROD_ID 0x56 | |
69 | /* Serial number */ | |
70 | #define ADIS16220_SERIAL_NUM 0x58 | |
71 | ||
72 | #define ADIS16220_CAPTURE_SIZE 2048 | |
73 | ||
74 | /* MSC_CTRL */ | |
75 | #define ADIS16220_MSC_CTRL_SELF_TEST_EN (1 << 8) | |
76 | #define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1 (1 << 1) | |
77 | #define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2 (1 << 0) | |
78 | ||
79 | /* DIO_CTRL */ | |
80 | #define ADIS16220_MSC_CTRL_DIO2_BUSY_IND (3<<4) | |
81 | #define ADIS16220_MSC_CTRL_DIO1_BUSY_IND (3<<2) | |
82 | #define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH (1<<1) | |
83 | #define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH (1<<0) | |
84 | ||
85 | /* DIAG_STAT */ | |
86 | /* AIN2 sample > ALM_MAG2 */ | |
87 | #define ADIS16220_DIAG_STAT_ALM_MAG2 (1<<14) | |
88 | /* AIN1 sample > ALM_MAG1 */ | |
89 | #define ADIS16220_DIAG_STAT_ALM_MAG1 (1<<13) | |
90 | /* Acceleration sample > ALM_MAGA */ | |
91 | #define ADIS16220_DIAG_STAT_ALM_MAGA (1<<12) | |
92 | /* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */ | |
93 | #define ADIS16220_DIAG_STAT_ALM_MAGS (1<<11) | |
94 | /* |Peak value in AIN2 data capture| > ALM_MAG2 */ | |
95 | #define ADIS16220_DIAG_STAT_PEAK_AIN2 (1<<10) | |
96 | /* |Peak value in AIN1 data capture| > ALM_MAG1 */ | |
97 | #define ADIS16220_DIAG_STAT_PEAK_AIN1 (1<<9) | |
98 | /* |Peak value in acceleration data capture| > ALM_MAGA */ | |
99 | #define ADIS16220_DIAG_STAT_PEAK_ACCEL (1<<8) | |
100 | /* Data ready, capture complete */ | |
101 | #define ADIS16220_DIAG_STAT_DATA_RDY (1<<7) | |
102 | #define ADIS16220_DIAG_STAT_FLASH_CHK (1<<6) | |
103 | #define ADIS16220_DIAG_STAT_SELF_TEST (1<<5) | |
104 | /* Capture period violation/interruption */ | |
105 | #define ADIS16220_DIAG_STAT_VIOLATION (1<<4) | |
106 | /* SPI communications failure */ | |
107 | #define ADIS16220_DIAG_STAT_SPI_FAIL (1<<3) | |
108 | /* Flash update failure */ | |
109 | #define ADIS16220_DIAG_STAT_FLASH_UPT (1<<2) | |
110 | /* Power supply above 3.625 V */ | |
111 | #define ADIS16220_DIAG_STAT_POWER_HIGH (1<<1) | |
112 | /* Power supply below 3.15 V */ | |
113 | #define ADIS16220_DIAG_STAT_POWER_LOW (1<<0) | |
114 | ||
115 | /* GLOB_CMD */ | |
116 | #define ADIS16220_GLOB_CMD_SW_RESET (1<<7) | |
117 | #define ADIS16220_GLOB_CMD_SELF_TEST (1<<2) | |
118 | #define ADIS16220_GLOB_CMD_PWR_DOWN (1<<1) | |
119 | ||
120 | #define ADIS16220_MAX_TX 2048 | |
121 | #define ADIS16220_MAX_RX 2048 | |
122 | ||
123 | #define ADIS16220_SPI_BURST (u32)(1000 * 1000) | |
124 | #define ADIS16220_SPI_FAST (u32)(2000 * 1000) | |
125 | ||
126 | /** | |
127 | * struct adis16220_state - device instance specific data | |
128 | * @us: actual spi_device | |
129 | * @work_trigger_to_ring: bh for triggered event handling | |
06f1962a BS |
130 | * @inter: used to check if new interrupt has been triggered |
131 | * @last_timestamp: passing timestamp from th to bh of interrupt handler | |
132 | * @indio_dev: industrial I/O device structure | |
133 | * @trig: data ready trigger registered with iio | |
134 | * @tx: transmit buffer | |
25985edc | 135 | * @rx: receive buffer |
06f1962a BS |
136 | * @buf_lock: mutex to protect tx and rx |
137 | **/ | |
138 | struct adis16220_state { | |
139 | struct spi_device *us; | |
140 | struct iio_dev *indio_dev; | |
141 | u8 *tx; | |
142 | u8 *rx; | |
06f1962a BS |
143 | struct mutex buf_lock; |
144 | }; | |
145 | ||
146 | #endif /* SPI_ADIS16220_H_ */ |