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_RESET_WRAP  0x00ec
  12#define PSMOUSE_CMD_GETID       0x02f2
  13#define PSMOUSE_CMD_SETRATE     0x10f3
  14#define PSMOUSE_CMD_ENABLE      0x00f4
  15#define PSMOUSE_CMD_DISABLE     0x00f5
  16#define PSMOUSE_CMD_RESET_DIS   0x00f6
  17#define PSMOUSE_CMD_RESET_BAT   0x02ff
  18
  19#define PSMOUSE_RET_BAT         0xaa
  20#define PSMOUSE_RET_ID          0x00
  21#define PSMOUSE_RET_ACK         0xfa
  22#define PSMOUSE_RET_NAK         0xfe
  23
  24enum psmouse_state {
  25        PSMOUSE_IGNORE,
  26        PSMOUSE_INITIALIZING,
  27        PSMOUSE_RESYNCING,
  28        PSMOUSE_CMD_MODE,
  29        PSMOUSE_ACTIVATED,
  30};
  31
  32/* psmouse protocol handler return codes */
  33typedef enum {
  34        PSMOUSE_BAD_DATA,
  35        PSMOUSE_GOOD_DATA,
  36        PSMOUSE_FULL_PACKET
  37} psmouse_ret_t;
  38
  39struct psmouse {
  40        void *private;
  41        struct input_dev *dev;
  42        struct ps2dev ps2dev;
  43        struct delayed_work resync_work;
  44        char *vendor;
  45        char *name;
  46        unsigned char packet[8];
  47        unsigned char badbyte;
  48        unsigned char pktcnt;
  49        unsigned char pktsize;
  50        unsigned char type;
  51        bool ignore_parity;
  52        bool acks_disable_command;
  53        unsigned int model;
  54        unsigned long last;
  55        unsigned long out_of_sync_cnt;
  56        unsigned long num_resyncs;
  57        enum psmouse_state state;
  58        char devname[64];
  59        char phys[32];
  60
  61        unsigned int rate;
  62        unsigned int resolution;
  63        unsigned int resetafter;
  64        unsigned int resync_time;
  65        bool smartscroll;       /* Logitech only */
  66
  67        psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
  68        void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
  69        void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
  70
  71        int (*reconnect)(struct psmouse *psmouse);
  72        void (*disconnect)(struct psmouse *psmouse);
  73        void (*cleanup)(struct psmouse *psmouse);
  74        int (*poll)(struct psmouse *psmouse);
  75
  76        void (*pt_activate)(struct psmouse *psmouse);
  77        void (*pt_deactivate)(struct psmouse *psmouse);
  78};
  79
  80enum psmouse_type {
  81        PSMOUSE_NONE,
  82        PSMOUSE_PS2,
  83        PSMOUSE_PS2PP,
  84        PSMOUSE_THINKPS,
  85        PSMOUSE_GENPS,
  86        PSMOUSE_IMPS,
  87        PSMOUSE_IMEX,
  88        PSMOUSE_SYNAPTICS,
  89        PSMOUSE_ALPS,
  90        PSMOUSE_LIFEBOOK,
  91        PSMOUSE_TRACKPOINT,
  92        PSMOUSE_TOUCHKIT_PS2,
  93        PSMOUSE_CORTRON,
  94        PSMOUSE_HGPK,
  95        PSMOUSE_ELANTECH,
  96        PSMOUSE_FSP,
  97        PSMOUSE_SYNAPTICS_RELATIVE,
  98        PSMOUSE_AUTO            /* This one should always be last */
  99};
 100
 101void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
 102                unsigned long delay);
 103int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command);
 104int psmouse_reset(struct psmouse *psmouse);
 105void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
 106void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
 107psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse);
 108int psmouse_activate(struct psmouse *psmouse);
 109int psmouse_deactivate(struct psmouse *psmouse);
 110
 111struct psmouse_attribute {
 112        struct device_attribute dattr;
 113        void *data;
 114        ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
 115        ssize_t (*set)(struct psmouse *psmouse, void *data,
 116                        const char *buf, size_t count);
 117        bool protect;
 118};
 119#define to_psmouse_attr(a)      container_of((a), struct psmouse_attribute, dattr)
 120
 121ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
 122                                 char *buf);
 123ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
 124                                const char *buf, size_t count);
 125
 126#define __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)   \
 127static struct psmouse_attribute psmouse_attr_##_name = {                        \
 128        .dattr  = {                                                             \
 129                .attr   = {                                                     \
 130                        .name   = __stringify(_name),                           \
 131                        .mode   = _mode,                                        \
 132                },                                                              \
 133                .show   = psmouse_attr_show_helper,                             \
 134                .store  = psmouse_attr_set_helper,                              \
 135        },                                                                      \
 136        .data   = _data,                                                        \
 137        .show   = _show,                                                        \
 138        .set    = _set,                                                         \
 139        .protect = _protect,                                                    \
 140}
 141
 142#define __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, _protect)       \
 143        static ssize_t _show(struct psmouse *, void *, char *);                 \
 144        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 145        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)
 146
 147#define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)                   \
 148        __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, true)
 149
 150#define PSMOUSE_DEFINE_RO_ATTR(_name, _mode, _data, _show)                      \
 151        static ssize_t _show(struct psmouse *, void *, char *);                 \
 152        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, NULL, true)
 153
 154#define PSMOUSE_DEFINE_WO_ATTR(_name, _mode, _data, _set)                       \
 155        static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 156        __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true)
 157
 158#ifndef psmouse_fmt
 159#define psmouse_fmt(fmt)        KBUILD_BASENAME ": " fmt
 160#endif
 161
 162#define psmouse_dbg(psmouse, format, ...)               \
 163        dev_dbg(&(psmouse)->ps2dev.serio->dev,          \
 164                psmouse_fmt(format), ##__VA_ARGS__)
 165#define psmouse_info(psmouse, format, ...)              \
 166        dev_info(&(psmouse)->ps2dev.serio->dev,         \
 167                 psmouse_fmt(format), ##__VA_ARGS__)
 168#define psmouse_warn(psmouse, format, ...)              \
 169        dev_warn(&(psmouse)->ps2dev.serio->dev,         \
 170                 psmouse_fmt(format), ##__VA_ARGS__)
 171#define psmouse_err(psmouse, format, ...)               \
 172        dev_err(&(psmouse)->ps2dev.serio->dev,          \
 173                psmouse_fmt(format), ##__VA_ARGS__)
 174#define psmouse_notice(psmouse, format, ...)            \
 175        dev_notice(&(psmouse)->ps2dev.serio->dev,       \
 176                   psmouse_fmt(format), ##__VA_ARGS__)
 177#define psmouse_printk(level, psmouse, format, ...)     \
 178        dev_printk(level,                               \
 179                   &(psmouse)->ps2dev.serio->dev,       \
 180                   psmouse_fmt(format), ##__VA_ARGS__)
 181
 182
 183#endif /* _PSMOUSE_H */
 184