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 	u8 quirks;
43 	struct timer_list timer;
44 };
45 
46 #define ALPS_QUIRK_TRACKSTICK_BUTTONS	1 /* trakcstick buttons in trackstick packet */
47 
48 #ifdef CONFIG_MOUSE_PS2_ALPS
49 int alps_detect(struct psmouse *psmouse, bool set_properties);
50 int alps_init(struct psmouse *psmouse);
51 #else
alps_detect(struct psmouse * psmouse,bool set_properties)52 inline int alps_detect(struct psmouse *psmouse, bool set_properties)
53 {
54 	return -ENOSYS;
55 }
alps_init(struct psmouse * psmouse)56 inline int alps_init(struct psmouse *psmouse)
57 {
58 	return -ENOSYS;
59 }
60 #endif /* CONFIG_MOUSE_PS2_ALPS */
61 
62 #endif
63