blob: ae1ac354c7787a6a9fd2c5430debcfead8b7155b [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Seth Forsheefa629ef2011-11-07 19:53:24 -080015#define ALPS_PROTO_V1 0
16#define ALPS_PROTO_V2 1
Seth Forshee25bded72011-11-07 19:53:36 -080017#define ALPS_PROTO_V3 2
18#define ALPS_PROTO_V4 3
Seth Forsheefa629ef2011-11-07 19:53:24 -080019
Linus Torvalds1da177e2005-04-16 15:20:36 -070020struct alps_model_info {
21 unsigned char signature[3];
Seth Forshee25bded72011-11-07 19:53:36 -080022 unsigned char command_mode_resp; /* v3/v4 only */
Seth Forsheefa629ef2011-11-07 19:53:24 -080023 unsigned char proto_version;
Linus Torvalds1da177e2005-04-16 15:20:36 -070024 unsigned char byte0, mask0;
25 unsigned char flags;
26};
27
Seth Forshee25bded72011-11-07 19:53:36 -080028struct alps_nibble_commands {
29 int command;
30 unsigned char data;
31};
32
Linus Torvalds1da177e2005-04-16 15:20:36 -070033struct alps_data {
Dmitry Torokhov2e5b6362005-09-15 02:01:44 -050034 struct input_dev *dev2; /* Relative device */
Linus Torvalds1da177e2005-04-16 15:20:36 -070035 char phys[32]; /* Phys */
Helge Dellere38de672006-09-10 21:54:39 -040036 const struct alps_model_info *i;/* Info */
Seth Forshee25bded72011-11-07 19:53:36 -080037 const struct alps_nibble_commands *nibble_commands;
38 int addr_command; /* Command to set register address */
Linus Torvalds1da177e2005-04-16 15:20:36 -070039 int prev_fin; /* Finger bit from previous packet */
Seth Forshee25bded72011-11-07 19:53:36 -080040 int multi_packet; /* Multi-packet data in progress */
Seth Forshee01ce6612011-11-07 19:54:13 -080041 unsigned char multi_data[6]; /* Saved multi-packet data */
George Pantalos3b7e09f2012-05-10 22:31:59 -070042 int x1, x2, y1, y2; /* Coordinates from last MT report */
43 int fingers; /* Number of fingers from MT report */
Seth Forshee25bded72011-11-07 19:53:36 -080044 u8 quirks;
Sebastian Kapfer1d9f2622009-12-15 08:39:50 -080045 struct timer_list timer;
Linus Torvalds1da177e2005-04-16 15:20:36 -070046};
47
Seth Forshee25bded72011-11-07 19:53:36 -080048#define ALPS_QUIRK_TRACKSTICK_BUTTONS 1 /* trakcstick buttons in trackstick packet */
49
Andres Salomon55e3d922007-03-10 01:39:54 -050050#ifdef CONFIG_MOUSE_PS2_ALPS
Dmitry Torokhovb7802c52009-09-09 19:13:20 -070051int alps_detect(struct psmouse *psmouse, bool set_properties);
Andres Salomon55e3d922007-03-10 01:39:54 -050052int alps_init(struct psmouse *psmouse);
53#else
Dmitry Torokhovb7802c52009-09-09 19:13:20 -070054inline int alps_detect(struct psmouse *psmouse, bool set_properties)
Andres Salomon55e3d922007-03-10 01:39:54 -050055{
56 return -ENOSYS;
57}
58inline int alps_init(struct psmouse *psmouse)
59{
60 return -ENOSYS;
61}
62#endif /* CONFIG_MOUSE_PS2_ALPS */
63
Linus Torvalds1da177e2005-04-16 15:20:36 -070064#endif