linux/drivers/input/mouse/psmouse.h
<<
>>
Prefs
   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        bool acks_disable_command;
  51        unsigned int model;
  52        unsigned long last;
  53        unsigned long out_of_sync_cnt;
  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        bool 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_ELANTECH,
  94        PSMOUSE_FSP,
  95        PSMOUSE_AUTO            /* This one should always be last */
  96};
  97
  98void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
  99                unsigned long delay);
 100int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command);
 101int psmouse_reset(struct psmouse *psmouse);
 102void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
 103void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
 104
 105struct psmouse_attribute {
 106        struct device_attribute dattr;
 107        void *data;
 108        ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
 109        ssize_t (*set)(struct psmouse *psmouse, void *data,
 110                        const char *buf, size_t count);
 111        bool protect;
 112};
 113#define to_psmouse_attr(a)      container_of((a), struct psmouse_attribute, dattr)
 114
 115ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
 116                                 char *buf);
 117ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
 118                                const char *buf, size_t count);
 119
 120#define __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)   \
 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, _protect)       \
 137        static ssize_t _show(struct psmouse *, void *, char *);                 \
 138        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 139        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)
 140
 141#define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)                   \
 142        __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, true)
 143
 144#define PSMOUSE_DEFINE_RO_ATTR(_name, _mode, _data, _show)                      \
 145        static ssize_t _show(struct psmouse *, void *, char *);                 \
 146        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, NULL, true)
 147
 148#define PSMOUSE_DEFINE_WO_ATTR(_name, _mode, _data, _set)                       \
 149        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 150        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true)
 151
 152#endif /* _PSMOUSE_H */
 153