psmouse.h revision df08ef27a7f91961c91a2a718f5d1e616f1c8e57
1#ifndef _PSMOUSE_H
2#define _PSMOUSE_H
3
4#define PSMOUSE_CMD_SETSCALE11	0x00e6
5#define PSMOUSE_CMD_SETSCALE21	0x00e7
6#define PSMOUSE_CMD_SETRES	0x10e8
7#define PSMOUSE_CMD_GETINFO	0x03e9
8#define PSMOUSE_CMD_SETSTREAM	0x00ea
9#define PSMOUSE_CMD_SETPOLL	0x00f0
10#define PSMOUSE_CMD_POLL	0x00eb	/* caller sets number of bytes to receive */
11#define PSMOUSE_CMD_GETID	0x02f2
12#define PSMOUSE_CMD_SETRATE	0x10f3
13#define PSMOUSE_CMD_ENABLE	0x00f4
14#define PSMOUSE_CMD_DISABLE	0x00f5
15#define PSMOUSE_CMD_RESET_DIS	0x00f6
16#define PSMOUSE_CMD_RESET_BAT	0x02ff
17
18#define PSMOUSE_RET_BAT		0xaa
19#define PSMOUSE_RET_ID		0x00
20#define PSMOUSE_RET_ACK		0xfa
21#define PSMOUSE_RET_NAK		0xfe
22
23enum psmouse_state {
24	PSMOUSE_IGNORE,
25	PSMOUSE_INITIALIZING,
26	PSMOUSE_RESYNCING,
27	PSMOUSE_CMD_MODE,
28	PSMOUSE_ACTIVATED,
29};
30
31/* psmouse protocol handler return codes */
32typedef enum {
33	PSMOUSE_BAD_DATA,
34	PSMOUSE_GOOD_DATA,
35	PSMOUSE_FULL_PACKET
36} psmouse_ret_t;
37
38struct psmouse {
39	void *private;
40	struct input_dev *dev;
41	struct ps2dev ps2dev;
42	struct delayed_work resync_work;
43	char *vendor;
44	char *name;
45	unsigned char packet[8];
46	unsigned char badbyte;
47	unsigned char pktcnt;
48	unsigned char pktsize;
49	unsigned char type;
50	unsigned char acks_disable_command;
51	unsigned int model;
52	unsigned long last;
53	unsigned long out_of_sync;
54	unsigned long num_resyncs;
55	enum psmouse_state state;
56	char devname[64];
57	char phys[32];
58
59	unsigned int rate;
60	unsigned int resolution;
61	unsigned int resetafter;
62	unsigned int resync_time;
63	unsigned int smartscroll;	/* Logitech only */
64
65	psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
66	void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
67	void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
68
69	int (*reconnect)(struct psmouse *psmouse);
70	void (*disconnect)(struct psmouse *psmouse);
71	void (*cleanup)(struct psmouse *psmouse);
72	int (*poll)(struct psmouse *psmouse);
73
74	void (*pt_activate)(struct psmouse *psmouse);
75	void (*pt_deactivate)(struct psmouse *psmouse);
76};
77
78enum psmouse_type {
79	PSMOUSE_NONE,
80	PSMOUSE_PS2,
81	PSMOUSE_PS2PP,
82	PSMOUSE_THINKPS,
83	PSMOUSE_GENPS,
84	PSMOUSE_IMPS,
85	PSMOUSE_IMEX,
86	PSMOUSE_SYNAPTICS,
87	PSMOUSE_ALPS,
88	PSMOUSE_LIFEBOOK,
89	PSMOUSE_TRACKPOINT,
90	PSMOUSE_TOUCHKIT_PS2,
91	PSMOUSE_CORTRON,
92	PSMOUSE_HGPK,
93	PSMOUSE_AUTO		/* This one should always be last */
94};
95
96void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
97		unsigned long delay);
98int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command);
99int psmouse_reset(struct psmouse *psmouse);
100void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
101void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
102
103struct psmouse_attribute {
104	struct device_attribute dattr;
105	void *data;
106	ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
107	ssize_t (*set)(struct psmouse *psmouse, void *data,
108			const char *buf, size_t count);
109	int protect;
110};
111#define to_psmouse_attr(a)	container_of((a), struct psmouse_attribute, dattr)
112
113ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
114				 char *buf);
115ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
116				const char *buf, size_t count);
117
118#define __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, _protect)	\
119static ssize_t _show(struct psmouse *, void *data, char *);			\
120static ssize_t _set(struct psmouse *, void *data, const char *, size_t);	\
121static struct psmouse_attribute psmouse_attr_##_name = {			\
122	.dattr	= {								\
123		.attr	= {							\
124			.name	= __stringify(_name),				\
125			.mode	= _mode,					\
126		},								\
127		.show	= psmouse_attr_show_helper,				\
128		.store	= psmouse_attr_set_helper,				\
129	},									\
130	.data	= _data,							\
131	.show	= _show,							\
132	.set	= _set,								\
133	.protect = _protect,							\
134}
135
136#define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)	\
137		__PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, 1)
138
139#endif /* _PSMOUSE_H */
140