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
	void (*cleanup)(struct psmouse *psmouse);
72
	int (*poll)(struct psmouse *psmouse);
L
Linus Torvalds 已提交
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

	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,
88
	PSMOUSE_LIFEBOOK,
89
	PSMOUSE_TRACKPOINT,
90
	PSMOUSE_AUTO		/* This one should always be last */
L
Linus Torvalds 已提交
91 92 93 94 95 96
};

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);

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 128

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 已提交
129 130

#endif /* _PSMOUSE_H */