psmouse.h 3.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9
#ifndef _PSMOUSE_H
#define _PSMOUSE_H

#define PSMOUSE_CMD_SETSCALE11	0x00e6
#define PSMOUSE_CMD_SETSCALE21	0x00e7
#define PSMOUSE_CMD_SETRES	0x10e8
#define PSMOUSE_CMD_GETINFO	0x03e9
#define PSMOUSE_CMD_SETSTREAM	0x00ea
#define PSMOUSE_CMD_SETPOLL	0x00f0
10
#define PSMOUSE_CMD_POLL	0x00eb	/* caller sets number of bytes to receive */
L
Linus Torvalds 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#define PSMOUSE_CMD_GETID	0x02f2
#define PSMOUSE_CMD_SETRATE	0x10f3
#define PSMOUSE_CMD_ENABLE	0x00f4
#define PSMOUSE_CMD_DISABLE	0x00f5
#define PSMOUSE_CMD_RESET_DIS	0x00f6
#define PSMOUSE_CMD_RESET_BAT	0x02ff

#define PSMOUSE_RET_BAT		0xaa
#define PSMOUSE_RET_ID		0x00
#define PSMOUSE_RET_ACK		0xfa
#define PSMOUSE_RET_NAK		0xfe

enum psmouse_state {
	PSMOUSE_IGNORE,
	PSMOUSE_INITIALIZING,
26
	PSMOUSE_RESYNCING,
L
Linus Torvalds 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39
	PSMOUSE_CMD_MODE,
	PSMOUSE_ACTIVATED,
};

/* psmouse protocol handler return codes */
typedef enum {
	PSMOUSE_BAD_DATA,
	PSMOUSE_GOOD_DATA,
	PSMOUSE_FULL_PACKET
} psmouse_ret_t;

struct psmouse {
	void *private;
40
	struct input_dev *dev;
L
Linus Torvalds 已提交
41
	struct ps2dev ps2dev;
42
	struct work_struct resync_work;
L
Linus Torvalds 已提交
43 44 45
	char *vendor;
	char *name;
	unsigned char packet[8];
46
	unsigned char badbyte;
L
Linus Torvalds 已提交
47 48 49
	unsigned char pktcnt;
	unsigned char pktsize;
	unsigned char type;
50
	unsigned char acks_disable_command;
L
Linus Torvalds 已提交
51 52 53
	unsigned int model;
	unsigned long last;
	unsigned long out_of_sync;
54
	unsigned long num_resyncs;
L
Linus Torvalds 已提交
55 56 57 58 59 60 61
	enum psmouse_state state;
	char devname[64];
	char phys[32];

	unsigned int rate;
	unsigned int resolution;
	unsigned int resetafter;
62
	unsigned int resync_time;
L
Linus Torvalds 已提交
63 64
	unsigned int smartscroll;	/* Logitech only */

65
	psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
L
Linus Torvalds 已提交
66 67 68 69 70
	void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
	void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);

	int (*reconnect)(struct psmouse *psmouse);
	void (*disconnect)(struct psmouse *psmouse);
71
	int (*poll)(struct psmouse *psmouse);
L
Linus Torvalds 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

	void (*pt_activate)(struct psmouse *psmouse);
	void (*pt_deactivate)(struct psmouse *psmouse);
};

enum psmouse_type {
	PSMOUSE_NONE,
	PSMOUSE_PS2,
	PSMOUSE_PS2PP,
	PSMOUSE_THINKPS,
	PSMOUSE_GENPS,
	PSMOUSE_IMPS,
	PSMOUSE_IMEX,
	PSMOUSE_SYNAPTICS,
	PSMOUSE_ALPS,
87
	PSMOUSE_LIFEBOOK,
88
	PSMOUSE_TRACKPOINT,
89
	PSMOUSE_AUTO		/* This one should always be last */
L
Linus Torvalds 已提交
90 91 92 93 94 95
};

int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command);
int psmouse_reset(struct psmouse *psmouse);
void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

struct psmouse_attribute {
	struct device_attribute dattr;
	void *data;
	ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
	ssize_t (*set)(struct psmouse *psmouse, void *data,
			const char *buf, size_t count);
};
#define to_psmouse_attr(a)	container_of((a), struct psmouse_attribute, dattr)

ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
				 char *buf);
ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
				const char *buf, size_t count);

#define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)			\
static ssize_t _show(struct psmouse *, void *data, char *);			\
static ssize_t _set(struct psmouse *, void *data, const char *, size_t);	\
static struct psmouse_attribute psmouse_attr_##_name = {			\
	.dattr	= {								\
		.attr	= {							\
			.name	= __stringify(_name),				\
			.mode	= _mode,					\
			.owner	= THIS_MODULE,					\
		},								\
		.show	= psmouse_attr_show_helper,				\
		.store	= psmouse_attr_set_helper,				\
	},									\
	.data	= _data,							\
	.show	= _show,							\
	.set	= _set,								\
}
L
Linus Torvalds 已提交
128 129

#endif /* _PSMOUSE_H */