Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25bded7c authored by Seth Forshee's avatar Seth Forshee Committed by Dmitry Torokhov
Browse files

Input: ALPS - add support for protocol versions 3 and 4



This patch adds support for two ALPS touchpad protocols not
supported currently by the driver, which I am arbitrarily naming
version 3 and version 4. Support is single-touch only at this time,
although both protocols are capable of limited multitouch support.

Thanks to Andrew Skalski, who did the initial reverse-engineering
of the v3 protocol.

Signed-off-by: default avatarSeth Forshee <seth.forshee@canonical.com>
Acked-by: default avatarChase Douglas <chase.douglas@canonical.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent b46615fe
Loading
Loading
Loading
Loading
+753 −38

File changed.

Preview size limit exceeded, changes collapsed.

+14 −0
Original line number Diff line number Diff line
@@ -14,22 +14,36 @@

#define ALPS_PROTO_V1	0
#define ALPS_PROTO_V2	1
#define ALPS_PROTO_V3	2
#define ALPS_PROTO_V4	3

struct alps_model_info {
        unsigned char signature[3];
	unsigned char command_mode_resp; /* v3/v4 only */
	unsigned char proto_version;
        unsigned char byte0, mask0;
        unsigned char flags;
};

struct alps_nibble_commands {
	int command;
	unsigned char data;
};

struct alps_data {
	struct input_dev *dev2;		/* Relative device */
	char phys[32];			/* Phys */
	const struct alps_model_info *i;/* Info */
	const struct alps_nibble_commands *nibble_commands;
	int addr_command;		/* Command to set register address */
	int prev_fin;			/* Finger bit from previous packet */
	int multi_packet;		/* Multi-packet data in progress */
	u8 quirks;
	struct timer_list timer;
};

#define ALPS_QUIRK_TRACKSTICK_BUTTONS	1 /* trakcstick buttons in trackstick packet */

#ifdef CONFIG_MOUSE_PS2_ALPS
int alps_detect(struct psmouse *psmouse, bool set_properties);
int alps_init(struct psmouse *psmouse);
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#define PSMOUSE_CMD_SETSTREAM	0x00ea
#define PSMOUSE_CMD_SETPOLL	0x00f0
#define PSMOUSE_CMD_POLL	0x00eb	/* caller sets number of bytes to receive */
#define PSMOUSE_CMD_RESET_WRAP	0x00ec
#define PSMOUSE_CMD_GETID	0x02f2
#define PSMOUSE_CMD_SETRATE	0x10f3
#define PSMOUSE_CMD_ENABLE	0x00f4