aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/input/odroidq-touch.h
blob: 979f45e5d5f2876c4863860b8b974c11a8511f35 (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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
//[*]--------------------------------------------------------------------------------------------------[*]
//
//
// 
//  I2C Touchscreen driver (platform data struct)
//  2012.01.17
// 
//
//[*]--------------------------------------------------------------------------------------------------[*]
#ifndef __ODROIDQ_TOUCH_H__
#define __ODROIDQ_TOUCH_H__

//[*]--------------------------------------------------------------------------------------------------[*]
#ifdef CONFIG_HAS_EARLYSUSPEND
	#include <linux/earlysuspend.h>
#endif

//[*]--------------------------------------------------------------------------------------------------[*]
#define	IRQ_MODE_EVENT

//[*]--------------------------------------------------------------------------------------------------[*]
#if defined(CONFIG_ANDROID_PARANOID_NETWORK)
    #define SOFT_AVR_FILTER_ENABLE
#endif

#if defined(SOFT_AVR_FILTER_ENABLE)
    #define SOFT_AVR_COUNT              10
    #define SOFT_AVR_MOVE_TOL_X         20   // First move tol
    #define SOFT_AVR_MOVE_TOL_Y         20   // First move tol
    #define SOFT_AVR_ENABLE_SPEED       5
#endif

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_MOVE_TOL		0x01		// 0x53 Register (0x00 ~ 0xFF : 0x10 default)
#define	X_TRACKING			0x80		// 0x54 Register (0x00 ~ 0xFF : 0x80 default)
#define	Y_TRACKING			0x80		// 0x55 Register (0x00 ~ 0xFF : 0x80 default)

#if defined(SOFT_AVR_FILTER_ENABLE)
    #define	MOVE_AVR_FILTER		0x00		// 0x56 Register (0x00 ~ 0x03 : 0x00 default)
#else    
    //#define	MOVE_AVR_FILTER		0x01		// 0x56 Register (0x00 ~ 0x03 : 0x00 default)
    #define	MOVE_AVR_FILTER		0x02		// 0x56 Register (0x00 ~ 0x03 : 0x00 default)
    //#define	MOVE_AVR_FILTER		0x03		// 0x56 Register (0x00 ~ 0x03 : 0x00 default)
#endif

#define	SCAN_MODE			0x01		// 0x26 Register (0x00 ~ ?? : 0x02 default)
//#define	SCAN_MODE			0x0F		// 0x26 Register (0x00 ~ ?? : 0x02 default)

//[*]--------------------------------------------------------------------------------------------------[*]
#define MAX_FINGERS			10
#define	RESOULATION			64

#define DRIVE_LINE_COUNT	23
#define SENSE_LINE_COUNT	38

//#define	DRIVE_DATA_MAX		(DRIVE_LINE_COUNT * RESOULATION)
//#define	SENSE_DATA_MAX		(SENSE_LINE_COUNT * RESOULATION)

#define	DRIVE_DATA_MAX		800
#define	SENSE_DATA_MAX		1280

#define	TRANSPOSE_XY		0x04
#define	INVERT_Y			0x01
#define	INVERT_X			0x02

// 0x65 Register (0x00 ~ 0x07 : 0x00 default)
#define	ORIENTATION			0x00

#define	TRACKING_ID_MAX		16

#define	PRESSURE_MAX		16

//[*]--------------------------------------------------------------------------------------------------[*]
// Register Define
//[*]--------------------------------------------------------------------------------------------------[*]
#define	NOP						0x00	
#define	DEVICE_ID				0x02	
#define	VERSION_ID				0x03	
#define	SLEEP_OUT_REG			0x04	
#define	SLEEP_IN_REG			0x05
#define	DRIVE_NO_REG			0x06
#define	SENSE_NO_REG			0x07

//[*]--------------------------------------------------------------------------------------------------[*]
#define	DRIVE_LINE0_REG			0x08
#define	DRIVE_LINE1_REG			0x09
#define	DRIVE_LINE2_REG			0x0A
#define	DRIVE_LINE3_REG			0x0B
#define	DRIVE_LINE4_REG			0x0C
#define	DRIVE_LINE5_REG			0x0D
#define	DRIVE_LINE6_REG			0x0E
#define	DRIVE_LINE7_REG			0x0F
#define	DRIVE_LINE8_REG			0x10
#define	DRIVE_LINE9_REG			0x11
#define	DRIVE_LINE10_REG		0x12
#define	DRIVE_LINE11_REG		0x13
#define	DRIVE_LINE12_REG		0x14
#define	DRIVE_LINE13_REG		0x15
#define	DRIVE_LINE14_REG		0x16
#define	DRIVE_LINE15_REG		0x17
#define	DRIVE_LINE16_REG		0x18
#define	DRIVE_LINE17_REG		0x19
#define	DRIVE_LINE18_REG		0x1A
#define	DRIVE_LINE19_REG		0x1B
#define	DRIVE_LINE20_REG		0x1C
#define	DRIVE_LINE21_REG		0x1D
#define	DRIVE_LINE22_REG		0x1E

//[*]--------------------------------------------------------------------------------------------------[*]
#define	WOP_MODE_REG			0x25
#define	ROP_MODE_REG			0x26
#define	DOWN_TIME_REG			0x27
#define	FRAME_ESC_REG			0x28
#define	SCAN_FRAME_REG			0x2A

//[*]--------------------------------------------------------------------------------------------------[*]
#define	MEDIAN_FILTER_SEL_REG	0x2C
#define	INT_GAIN_REG			0x2F
#define	START_INT_REG			0x30
#define	END_INT_REG				0x31

//[*]--------------------------------------------------------------------------------------------------[*]
#define	MIN_AREA_REG			0x33
#define	MIN_LEVEL_REG			0x34
#define	MIN_WEIGHT_REG			0x35
#define	MAX_AREA_REG			0x36
#define	SEG_DEPTH_REG			0x37
#define	CG_METHOD_REG			0x39
#define	HYBRID_SELECT_REG		0x3A
#define	INT_BYPASS_REG			0x3C
#define	FILTER_SEL_REG			0x3D
#define	CALIBRATE_OFF_REG		0x3E

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_MOVE_TOL_REG		0x53
#define	X_TRACKING_TOL_REG		0x54
#define	Y_TRACKING_TOL_REG		0x55
#define	MOV_AVG_FILTER_REG		0x56
#define	ORIENTATION_REG			0x65
#define	X_SCALING_REG			0x66
#define	Y_SCALING_REG			0x67
#define	X_OFFSET_REG			0x68
#define	Y_OFFSET_REG			0x69

//[*]--------------------------------------------------------------------------------------------------[*]
#define	TOUCH_STATUS			0x79

typedef	struct	status__t	{
	unsigned short	fifo_valid		:1;
	unsigned short	fifo_overflow	:1;
	unsigned short	large_object	:1;
	unsigned short	abnomal_status	:1;
	unsigned short	fingers			:10;
	unsigned short	reserved		:2;
}	__attribute__ ((packed))	status_t;

typedef union	status__u	{
	unsigned char	byte[sizeof(status_t)];
	status_t		bits;
}	__attribute__ ((packed))	status_u;

//[*]--------------------------------------------------------------------------------------------------[*]
#define BUTTON_STATUS		   	0xB9

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_MASK_REG			0x7A
#define	IRQ_MASK_REG			0x7B

//[*]--------------------------------------------------------------------------------------------------[*]
#define	FINGER00_REG			0x7C
#define	FINGER01_REG			0x7D
#define	FINGER02_REG			0x7E
#define	FINGER03_REG			0x7F
#define	FINGER04_REG			0x80
#define	FINGER05_REG			0x81
#define	FINGER06_REG			0x82
#define	FINGER07_REG			0x83
#define	FINGER08_REG			0x84
#define	FINGER09_REG			0x85

typedef	struct	finger_data__t	{	
	unsigned char	speed		:4;	// LSB
	unsigned char	pressure	:4;
	unsigned char	msb_y		:4;
	unsigned char	msb_x		:4;
	unsigned char	lsb_y		:8;
	unsigned char	lsb_x		:8;	// MSB
}	__attribute__ ((packed))	finger_data_t;

typedef union	finger_data__u	{
	unsigned char	byte[sizeof(finger_data_t)];
	finger_data_t	bits;
}	__attribute__ ((packed))	finger_data_u;

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_STACK				0x86

typedef	struct	event_stack__t	{	
	unsigned char	speed		:4;	// LSB
	unsigned char	pressure	:4;
	unsigned char	msb_y		:4;
	unsigned char	msb_x		:4;
	unsigned char	lsb_y		:8;
	unsigned char	lsb_x		:8;
	unsigned char	event		:4;
	unsigned char	number		:4;	// MSB
}	__attribute__ ((packed))	event_stack_t;

typedef union	event_stack__u	{
	unsigned char	byte[sizeof(event_stack_t)];
	event_stack_t	bits;
}	__attribute__ ((packed))	event_stack_u;

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_FIFO_SCLR			0x87
#define	TOUCH_IRQ_MODE			0x89		// 0 -> event, 1 -> frame
//[*]--------------------------------------------------------------------------------------------------[*]
#define	INIT_RST				0xA2
#define	DRIVE_LEVEL_REG			0xD5
#define	ADC_RANGE_SEL_REG		0xD7
#define	BIAS_RES				0xD8
#define	INTG_CAP_REG			0xDB

//[*]--------------------------------------------------------------------------------------------------[*]
#define	EVENT_UNKNOWN 			0x00
#define	EVENT_PRESS				0x03
#define	EVENT_MOVE				0x04
#define	EVENT_RELEASE			0x05

//[*]--------------------------------------------------------------------------------------------------[*]
//[*]--------------------------------------------------------------------------------------------------[*]
//
// ODROID-Q Control Function define
//
//[*]--------------------------------------------------------------------------------------------------[*]
extern	int 			odroidq_calibration	(struct touch *ts);
extern	int 			odroidq_i2c_read	(struct i2c_client *client, unsigned char *cmd, unsigned int cmd_len, unsigned char *data, unsigned int len);
extern	void			odroidq_work		(struct touch *ts);
extern	void			odroidq_enable		(struct touch *ts);
extern	void			odroidq_disable		(struct touch *ts);
extern	int				odroidq_early_probe	(struct touch *ts);
extern	int				odroidq_probe		(struct touch *ts);

//[*]--------------------------------------------------------------------------------------------------[*]
#endif /* __ODROIDQ_TOUCH_H__ */
//[*]--------------------------------------------------------------------------------------------------[*]
//[*]--------------------------------------------------------------------------------------------------[*]