summaryrefslogtreecommitdiff
path: root/driver/accel_kx022.h
blob: 089270aca46a0188efd1803653d61bd163d7b303 (plain)
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
/* Copyright 2015 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* KX022 gsensor module for Chrome EC */

#ifndef __CROS_EC_ACCEL_KX022_H
#define __CROS_EC_ACCEL_KX022_H

/*
 * 7-bit address is 001111Xb. Where 'X' is determined
 * by the voltage on the ADDR pin.
 */
#define KX022_ADDR0_FLAGS 0x1e
#define KX022_ADDR1_FLAGS 0x1f
#define KX022_WHO_AM_I_VAL 0x14

/* Chip-specific registers */
#define KX022_XHP_L 0x00
#define KX022_XHP_H 0x01
#define KX022_YHP_L 0x02
#define KX022_YHP_H 0x03
#define KX022_ZHP_L 0x04
#define KX022_ZHP_H 0x05
#define KX022_XOUT_L 0x06
#define KX022_XOUT_H 0x07
#define KX022_YOUT_L 0x08
#define KX022_YOUT_H 0x09
#define KX022_ZOUT_L 0x0a
#define KX022_ZOUT_H 0x0b
#define KX022_COTR 0x0c
#define KX022_COTR_VAL_COTC 0xAA
#define KX022_COTR_VAL_DEFAULT 0x55
#define KX022_WHOAMI 0x0f
#define KX022_TSCP 0x10
#define KX022_TSPP 0x11
#define KX022_INS1 0x12
#define KX022_INS2 0x13
#define KX022_INS3 0x14
#define KX022_STATUS_REG 0x15
#define KX022_INT_REL 0x17
#define KX022_CNTL1 0x18
#define KX022_CNTL2 0x19
#define KX022_CNTL3 0x1a
#define KX022_ODCNTL 0x1b
#define KX022_INC1 0x1c
#define KX022_INC2 0x1d
#define KX022_INC3 0x1e
#define KX022_INC4 0x1f
#define KX022_INC5 0x20
#define KX022_INC6 0x21
#define KX022_TILT_TIMER 0x22
#define KX022_WUFC 0x23
#define KX022_TDTRC 0x24
#define KX022_TDTC 0x25
#define KX022_TTH 0x26
#define KX022_TTL 0x27
#define KX022_FTD 0x28
#define KX022_STD 0x29
#define KX022_TLT 0x2a
#define KX022_TWS 0x2b
#define KX022_ATH 0x30
#define KX022_TILT_ANGLE_LL 0x32
#define KX022_TILT_ANGLE_HL 0x33
#define KX022_HYST_SET 0x34
#define KX022_LP_CNTL 0x35
#define KX022_BUF_CNTL1 0x3a
#define KX022_BUF_CNTL2 0x3b
#define KX022_BUF_STATUS_1 0x3c
#define KX022_BUF_STATUS_2 0x3d
#define KX022_BUF_CLEAR 0x3e
#define KX022_BUF_READ 0x3f
#define KX022_SELF_TEST 0x60
#define KX022_INTERNAL 0x7f

#define KX022_CNTL1_PC1 BIT(7)
#define KX022_CNTL1_WUFE BIT(1)
#define KX022_CNTL1_TPE BIT(0)

/* TSCP orientations */
#define KX022_ORIENT_PORTRAIT BIT(2)
#define KX022_ORIENT_INVERT_PORTRAIT BIT(3)
#define KX022_ORIENT_LANDSCAPE BIT(4)
#define KX022_ORIENT_INVERT_LANDSCAPE BIT(5)
#define KX022_ORIENT_MASK                                       \
	(KX022_ORIENT_PORTRAIT | KX022_ORIENT_INVERT_PORTRAIT | \
	 KX022_ORIENT_LANDSCAPE | KX022_ORIENT_INVERT_LANDSCAPE)

#define KX022_CNTL2_SRST BIT(7)

#define KX022_CNTL3_OWUF_FIELD 7

#define KX022_INC1_IEA BIT(4)
#define KX022_INC1_IEN BIT(5)

#define KX022_GSEL_2G (0 << 3)
#define KX022_GSEL_4G BIT(3)
#define KX022_GSEL_8G (2 << 3)
#define KX022_GSEL_FIELD (3 << 3)

#define KX022_RES_8BIT (0 << 6)
#define KX022_RES_16BIT BIT(6)

#define KX022_OSA_0_781HZ 8
#define KX022_OSA_1_563HZ 9
#define KX022_OSA_3_125HZ 0xa
#define KX022_OSA_6_250HZ 0xb
#define KX022_OSA_12_50HZ 0
#define KX022_OSA_25_00HZ 1
#define KX022_OSA_50_00HZ 2
#define KX022_OSA_100_0HZ 3
#define KX022_OSA_200_0HZ 4
#define KX022_OSA_400_0HZ 5
#define KX022_OSA_800_0HZ 6
#define KX022_OSA_1600HZ 7
#define KX022_OSA_FIELD 0xf

#define KX022_OWUF_0_781HZ 0
#define KX022_OWUF_1_563HZ 1
#define KX022_OWUF_3_125HZ 2
#define KX022_OWUF_6_250HZ 3
#define KX022_OWUF_12_50HZ 4
#define KX022_OWUF_25_00HZ 5
#define KX022_OWUF_50_00HZ 6
#define KX022_OWUF_100_0HZ 7

#define KX022_INC2_ZPWUE BIT(0)
#define KX022_INC2_ZNWUE BIT(1)
#define KX022_INC2_YPWUE BIT(2)
#define KX022_INC2_YNWUE BIT(3)
#define KX022_INC2_XPWUE BIT(4)
#define KX022_INC2_XNWUE BIT(5)

/* Min and Max sampling frequency in mHz */
#define KX022_ACCEL_MIN_FREQ 12500
#define KX022_ACCEL_MAX_FREQ MOTION_MAX_SENSOR_FREQUENCY(1600000, 6250)

#endif /* __CROS_EC_ACCEL_KX022_H */