Merge branch 'for-3.5-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj...
[firefly-linux-kernel-4.4.55.git] / drivers / input / mouse / alps.h
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