xref: /linux/drivers/input/mouse/alps.h (revision 0d456bad36d42d16022be045c8a53ddbb59ee478)
1 /*
2  * ALPS touchpad PS/2 mouse driver
3  *
4  * Copyright (c) 2003 Peter Osterlund <petero2@telia.com>
5  * Copyright (c) 2005 Vojtech Pavlik <vojtech@suse.cz>
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License version 2 as published by
9  * the Free Software Foundation.
10  */
11 
12 #ifndef _ALPS_H
13 #define _ALPS_H
14 
15 #define ALPS_PROTO_V1	0
16 #define ALPS_PROTO_V2	1
17 #define ALPS_PROTO_V3	2
18 #define ALPS_PROTO_V4	3
19 
20 struct alps_model_info {
21         unsigned char signature[3];
22 	unsigned char command_mode_resp; /* v3/v4 only */
23 	unsigned char proto_version;
24         unsigned char byte0, mask0;
25         unsigned char flags;
26 };
27 
28 struct alps_nibble_commands {
29 	int command;
30 	unsigned char data;
31 };
32 
33 struct alps_data {
34 	struct input_dev *dev2;		/* Relative device */
35 	char phys[32];			/* Phys */
36 	const struct alps_model_info *i;/* Info */
37 	const struct alps_nibble_commands *nibble_commands;
38 	int addr_command;		/* Command to set register address */
39 	int prev_fin;			/* Finger bit from previous packet */
40 	int multi_packet;		/* Multi-packet data in progress */
41 	unsigned char multi_data[6];	/* Saved multi-packet data */
42 	int x1, x2, y1, y2;		/* Coordinates from last MT report */
43 	int fingers;			/* Number of fingers from MT report */
44 	u8 quirks;
45 	struct timer_list timer;
46 };
47 
48 #define ALPS_QUIRK_TRACKSTICK_BUTTONS	1 /* trakcstick buttons in trackstick packet */
49 
50 #ifdef CONFIG_MOUSE_PS2_ALPS
51 int alps_detect(struct psmouse *psmouse, bool set_properties);
52 int alps_init(struct psmouse *psmouse);
53 #else
54 inline int alps_detect(struct psmouse *psmouse, bool set_properties)
55 {
56 	return -ENOSYS;
57 }
58 inline int alps_init(struct psmouse *psmouse)
59 {
60 	return -ENOSYS;
61 }
62 #endif /* CONFIG_MOUSE_PS2_ALPS */
63 
64 #endif
65