~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/input/mouse/psmouse.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
23
enum 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 */
 
32
typedef enum {
 
33
        PSMOUSE_BAD_DATA,
 
34
        PSMOUSE_GOOD_DATA,
 
35
        PSMOUSE_FULL_PACKET
 
36
} psmouse_ret_t;
 
37
 
 
38
struct 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
        bool ignore_parity;
 
51
        bool acks_disable_command;
 
52
        unsigned int model;
 
53
        unsigned long last;
 
54
        unsigned long out_of_sync_cnt;
 
55
        unsigned long num_resyncs;
 
56
        enum psmouse_state state;
 
57
        char devname[64];
 
58
        char phys[32];
 
59
 
 
60
        unsigned int rate;
 
61
        unsigned int resolution;
 
62
        unsigned int resetafter;
 
63
        unsigned int resync_time;
 
64
        bool smartscroll;       /* Logitech only */
 
65
 
 
66
        psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
 
67
        void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
 
68
        void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
 
69
 
 
70
        int (*reconnect)(struct psmouse *psmouse);
 
71
        void (*disconnect)(struct psmouse *psmouse);
 
72
        void (*cleanup)(struct psmouse *psmouse);
 
73
        int (*poll)(struct psmouse *psmouse);
 
74
 
 
75
        void (*pt_activate)(struct psmouse *psmouse);
 
76
        void (*pt_deactivate)(struct psmouse *psmouse);
 
77
};
 
78
 
 
79
enum psmouse_type {
 
80
        PSMOUSE_NONE,
 
81
        PSMOUSE_PS2,
 
82
        PSMOUSE_PS2PP,
 
83
        PSMOUSE_THINKPS,
 
84
        PSMOUSE_GENPS,
 
85
        PSMOUSE_IMPS,
 
86
        PSMOUSE_IMEX,
 
87
        PSMOUSE_SYNAPTICS,
 
88
        PSMOUSE_ALPS,
 
89
        PSMOUSE_LIFEBOOK,
 
90
        PSMOUSE_TRACKPOINT,
 
91
        PSMOUSE_TOUCHKIT_PS2,
 
92
        PSMOUSE_CORTRON,
 
93
        PSMOUSE_HGPK,
 
94
        PSMOUSE_ELANTECH,
 
95
        PSMOUSE_FSP,
 
96
        PSMOUSE_AUTO            /* This one should always be last */
 
97
};
 
98
 
 
99
void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
 
100
                unsigned long delay);
 
101
int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command);
 
102
int psmouse_reset(struct psmouse *psmouse);
 
103
void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
 
104
void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
 
105
 
 
106
struct psmouse_attribute {
 
107
        struct device_attribute dattr;
 
108
        void *data;
 
109
        ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
 
110
        ssize_t (*set)(struct psmouse *psmouse, void *data,
 
111
                        const char *buf, size_t count);
 
112
        bool protect;
 
113
};
 
114
#define to_psmouse_attr(a)      container_of((a), struct psmouse_attribute, dattr)
 
115
 
 
116
ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
 
117
                                 char *buf);
 
118
ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
 
119
                                const char *buf, size_t count);
 
120
 
 
121
#define __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)   \
 
122
static struct psmouse_attribute psmouse_attr_##_name = {                        \
 
123
        .dattr  = {                                                             \
 
124
                .attr   = {                                                     \
 
125
                        .name   = __stringify(_name),                           \
 
126
                        .mode   = _mode,                                        \
 
127
                },                                                              \
 
128
                .show   = psmouse_attr_show_helper,                             \
 
129
                .store  = psmouse_attr_set_helper,                              \
 
130
        },                                                                      \
 
131
        .data   = _data,                                                        \
 
132
        .show   = _show,                                                        \
 
133
        .set    = _set,                                                         \
 
134
        .protect = _protect,                                                    \
 
135
}
 
136
 
 
137
#define __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, _protect)       \
 
138
        static ssize_t _show(struct psmouse *, void *, char *);                 \
 
139
        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 
140
        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)
 
141
 
 
142
#define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)                   \
 
143
        __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, true)
 
144
 
 
145
#define PSMOUSE_DEFINE_RO_ATTR(_name, _mode, _data, _show)                      \
 
146
        static ssize_t _show(struct psmouse *, void *, char *);                 \
 
147
        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, NULL, true)
 
148
 
 
149
#define PSMOUSE_DEFINE_WO_ATTR(_name, _mode, _data, _set)                       \
 
150
        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 
151
        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true)
 
152
 
 
153
#ifndef psmouse_fmt
 
154
#define psmouse_fmt(fmt)        KBUILD_BASENAME ": " fmt
 
155
#endif
 
156
 
 
157
#define psmouse_dbg(psmouse, format, ...)               \
 
158
        dev_dbg(&(psmouse)->ps2dev.serio->dev,          \
 
159
                psmouse_fmt(format), ##__VA_ARGS__)
 
160
#define psmouse_info(psmouse, format, ...)              \
 
161
        dev_info(&(psmouse)->ps2dev.serio->dev,         \
 
162
                 psmouse_fmt(format), ##__VA_ARGS__)
 
163
#define psmouse_warn(psmouse, format, ...)              \
 
164
        dev_warn(&(psmouse)->ps2dev.serio->dev,         \
 
165
                 psmouse_fmt(format), ##__VA_ARGS__)
 
166
#define psmouse_err(psmouse, format, ...)               \
 
167
        dev_err(&(psmouse)->ps2dev.serio->dev,          \
 
168
                psmouse_fmt(format), ##__VA_ARGS__)
 
169
#define psmouse_notice(psmouse, format, ...)            \
 
170
        dev_notice(&(psmouse)->ps2dev.serio->dev,       \
 
171
                   psmouse_fmt(format), ##__VA_ARGS__)
 
172
#define psmouse_printk(level, psmouse, format, ...)     \
 
173
        dev_printk(level,                               \
 
174
                   &(psmouse)->ps2dev.serio->dev,       \
 
175
                   psmouse_fmt(format), ##__VA_ARGS__)
 
176
 
 
177
 
 
178
#endif /* _PSMOUSE_H */