aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/accel/adis16220.h
blob: eab86331124fd87e1c47e379601690f741a2df67 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#ifndef SPI_ADIS16220_H_
#define SPI_ADIS16220_H_

#include <linux/iio/imu/adis.h>

#define ADIS16220_STARTUP_DELAY	220 /* ms */

/* Flash memory write count */
#define ADIS16220_FLASH_CNT     0x00
/* Control, acceleration offset adjustment control */
#define ADIS16220_ACCL_NULL     0x02
/* Control, AIN1 offset adjustment control */
#define ADIS16220_AIN1_NULL     0x04
/* Control, AIN2 offset adjustment control */
#define ADIS16220_AIN2_NULL     0x06
/* Output, power supply during capture */
#define ADIS16220_CAPT_SUPPLY   0x0A
/* Output, temperature during capture */
#define ADIS16220_CAPT_TEMP     0x0C
/* Output, peak acceleration during capture */
#define ADIS16220_CAPT_PEAKA    0x0E
/* Output, peak AIN1 level during capture */
#define ADIS16220_CAPT_PEAK1    0x10
/* Output, peak AIN2 level during capture */
#define ADIS16220_CAPT_PEAK2    0x12
/* Output, capture buffer for acceleration */
#define ADIS16220_CAPT_BUFA     0x14
/* Output, capture buffer for AIN1 */
#define ADIS16220_CAPT_BUF1     0x16
/* Output, capture buffer for AIN2 */
#define ADIS16220_CAPT_BUF2     0x18
/* Control, capture buffer address pointer */
#define ADIS16220_CAPT_PNTR     0x1A
/* Control, capture control register */
#define ADIS16220_CAPT_CTRL     0x1C
/* Control, capture period (automatic mode) */
#define ADIS16220_CAPT_PRD      0x1E
/* Control, Alarm A, acceleration peak threshold */
#define ADIS16220_ALM_MAGA      0x20
/* Control, Alarm 1, AIN1 peak threshold */
#define ADIS16220_ALM_MAG1      0x22
/* Control, Alarm 2, AIN2 peak threshold */
#define ADIS16220_ALM_MAG2      0x24
/* Control, Alarm S, peak threshold */
#define ADIS16220_ALM_MAGS      0x26
/* Control, alarm configuration register */
#define ADIS16220_ALM_CTRL      0x28
/* Control, general I/O configuration */
#define ADIS16220_GPIO_CTRL     0x32
/* Control, self-test control, AIN configuration */
#define ADIS16220_MSC_CTRL      0x34
/* Control, digital I/O configuration */
#define ADIS16220_DIO_CTRL      0x36
/* Control, filter configuration */
#define ADIS16220_AVG_CNT       0x38
/* Status, system status */
#define ADIS16220_DIAG_STAT     0x3C
/* Control, system commands */
#define ADIS16220_GLOB_CMD      0x3E
/* Status, self-test response */
#define ADIS16220_ST_DELTA      0x40
/* Lot Identification Code 1 */
#define ADIS16220_LOT_ID1       0x52
/* Lot Identification Code 2 */
#define ADIS16220_LOT_ID2       0x54
/* Product identifier; convert to decimal = 16220 */
#define ADIS16220_PROD_ID       0x56
/* Serial number */
#define ADIS16220_SERIAL_NUM    0x58

#define ADIS16220_CAPTURE_SIZE  2048

/* MSC_CTRL */
#define ADIS16220_MSC_CTRL_SELF_TEST_EN	        BIT(8)
#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1	BIT(1)
#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2	BIT(0)

/* DIO_CTRL */
#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND     (BIT(5) | BIT(4))
#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND     (BIT(3) | BIT(2))
#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH     BIT(1)
#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH     BIT(0)

/* DIAG_STAT */
/* AIN2 sample > ALM_MAG2 */
#define ADIS16220_DIAG_STAT_ALM_MAG2    BIT(14)
/* AIN1 sample > ALM_MAG1 */
#define ADIS16220_DIAG_STAT_ALM_MAG1    BIT(13)
/* Acceleration sample > ALM_MAGA */
#define ADIS16220_DIAG_STAT_ALM_MAGA    BIT(12)
/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */
#define ADIS16220_DIAG_STAT_ALM_MAGS    BIT(11)
/* |Peak value in AIN2 data capture| > ALM_MAG2 */
#define ADIS16220_DIAG_STAT_PEAK_AIN2   BIT(10)
/* |Peak value in AIN1 data capture| > ALM_MAG1 */
#define ADIS16220_DIAG_STAT_PEAK_AIN1   BIT(9)
/* |Peak value in acceleration data capture| > ALM_MAGA */
#define ADIS16220_DIAG_STAT_PEAK_ACCEL  BIT(8)
/* Data ready, capture complete */
#define ADIS16220_DIAG_STAT_DATA_RDY    BIT(7)
#define ADIS16220_DIAG_STAT_FLASH_CHK	BIT(6)
#define ADIS16220_DIAG_STAT_SELF_TEST	BIT(5)
/* Capture period violation/interruption */
#define ADIS16220_DIAG_STAT_VIOLATION_BIT	4
/* SPI communications failure */
#define ADIS16220_DIAG_STAT_SPI_FAIL_BIT	3
/* Flash update failure */
#define ADIS16220_DIAG_STAT_FLASH_UPT_BIT	2
/* Power supply above 3.625 V */
#define ADIS16220_DIAG_STAT_POWER_HIGH_BIT	1
/* Power supply below 3.15 V */
#define ADIS16220_DIAG_STAT_POWER_LOW_BIT	0

/* GLOB_CMD */
#define ADIS16220_GLOB_CMD_SW_RESET	BIT(7)
#define ADIS16220_GLOB_CMD_SELF_TEST	BIT(2)
#define ADIS16220_GLOB_CMD_PWR_DOWN	BIT(1)

#define ADIS16220_MAX_TX 2048
#define ADIS16220_MAX_RX 2048

#define ADIS16220_SPI_BURST	(u32)(1000 * 1000)
#define ADIS16220_SPI_FAST	(u32)(2000 * 1000)

/**
 * struct adis16220_state - device instance specific data
 * @adis:		adis device
 * @tx:			transmit buffer
 * @rx:			receive buffer
 * @buf_lock:		mutex to protect tx and rx
 **/
struct adis16220_state {
	struct adis adis;

	struct mutex		buf_lock;
	u8			tx[ADIS16220_MAX_TX] ____cacheline_aligned;
	u8			rx[ADIS16220_MAX_RX];
};

#endif /* SPI_ADIS16220_H_ */