root/drivers/input/mouse/psmouse.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. psmouse_smbus_module_init
  2. psmouse_smbus_module_exit
  3. psmouse_smbus_cleanup

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _PSMOUSE_H
   3 #define _PSMOUSE_H
   4 
   5 #define PSMOUSE_OOB_NONE        0x00
   6 #define PSMOUSE_OOB_EXTRA_BTNS  0x01
   7 
   8 #define PSMOUSE_CMD_SETSCALE11  0x00e6
   9 #define PSMOUSE_CMD_SETSCALE21  0x00e7
  10 #define PSMOUSE_CMD_SETRES      0x10e8
  11 #define PSMOUSE_CMD_GETINFO     0x03e9
  12 #define PSMOUSE_CMD_SETSTREAM   0x00ea
  13 #define PSMOUSE_CMD_SETPOLL     0x00f0
  14 #define PSMOUSE_CMD_POLL        0x00eb  /* caller sets number of bytes to receive */
  15 #define PSMOUSE_CMD_RESET_WRAP  0x00ec
  16 #define PSMOUSE_CMD_GETID       0x02f2
  17 #define PSMOUSE_CMD_SETRATE     0x10f3
  18 #define PSMOUSE_CMD_ENABLE      0x00f4
  19 #define PSMOUSE_CMD_DISABLE     0x00f5
  20 #define PSMOUSE_CMD_RESET_DIS   0x00f6
  21 #define PSMOUSE_CMD_RESET_BAT   0x02ff
  22 
  23 #define PSMOUSE_RET_BAT         0xaa
  24 #define PSMOUSE_RET_ID          0x00
  25 #define PSMOUSE_RET_ACK         0xfa
  26 #define PSMOUSE_RET_NAK         0xfe
  27 
  28 enum psmouse_state {
  29         PSMOUSE_IGNORE,
  30         PSMOUSE_INITIALIZING,
  31         PSMOUSE_RESYNCING,
  32         PSMOUSE_CMD_MODE,
  33         PSMOUSE_ACTIVATED,
  34 };
  35 
  36 /* psmouse protocol handler return codes */
  37 typedef enum {
  38         PSMOUSE_BAD_DATA,
  39         PSMOUSE_GOOD_DATA,
  40         PSMOUSE_FULL_PACKET
  41 } psmouse_ret_t;
  42 
  43 enum psmouse_scale {
  44         PSMOUSE_SCALE11,
  45         PSMOUSE_SCALE21
  46 };
  47 
  48 enum psmouse_type {
  49         PSMOUSE_NONE,
  50         PSMOUSE_PS2,
  51         PSMOUSE_PS2PP,
  52         PSMOUSE_THINKPS,
  53         PSMOUSE_GENPS,
  54         PSMOUSE_IMPS,
  55         PSMOUSE_IMEX,
  56         PSMOUSE_SYNAPTICS,
  57         PSMOUSE_ALPS,
  58         PSMOUSE_LIFEBOOK,
  59         PSMOUSE_TRACKPOINT,
  60         PSMOUSE_TOUCHKIT_PS2,
  61         PSMOUSE_CORTRON,
  62         PSMOUSE_HGPK,
  63         PSMOUSE_ELANTECH,
  64         PSMOUSE_FSP,
  65         PSMOUSE_SYNAPTICS_RELATIVE,
  66         PSMOUSE_CYPRESS,
  67         PSMOUSE_FOCALTECH,
  68         PSMOUSE_VMMOUSE,
  69         PSMOUSE_BYD,
  70         PSMOUSE_SYNAPTICS_SMBUS,
  71         PSMOUSE_ELANTECH_SMBUS,
  72         PSMOUSE_AUTO            /* This one should always be last */
  73 };
  74 
  75 struct psmouse;
  76 
  77 struct psmouse_protocol {
  78         enum psmouse_type type;
  79         bool maxproto;
  80         bool ignore_parity; /* Protocol should ignore parity errors from KBC */
  81         bool try_passthru; /* Try protocol also on passthrough ports */
  82         bool smbus_companion; /* "Protocol" is a stub, device is on SMBus */
  83         const char *name;
  84         const char *alias;
  85         int (*detect)(struct psmouse *, bool);
  86         int (*init)(struct psmouse *);
  87 };
  88 
  89 struct psmouse {
  90         void *private;
  91         struct input_dev *dev;
  92         struct ps2dev ps2dev;
  93         struct delayed_work resync_work;
  94         const char *vendor;
  95         const char *name;
  96         const struct psmouse_protocol *protocol;
  97         unsigned char packet[8];
  98         unsigned char badbyte;
  99         unsigned char pktcnt;
 100         unsigned char pktsize;
 101         unsigned char oob_data_type;
 102         unsigned char extra_buttons;
 103         bool acks_disable_command;
 104         unsigned int model;
 105         unsigned long last;
 106         unsigned long out_of_sync_cnt;
 107         unsigned long num_resyncs;
 108         enum psmouse_state state;
 109         char devname[64];
 110         char phys[32];
 111 
 112         unsigned int rate;
 113         unsigned int resolution;
 114         unsigned int resetafter;
 115         unsigned int resync_time;
 116         bool smartscroll;       /* Logitech only */
 117 
 118         psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
 119         void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
 120         void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
 121         void (*set_scale)(struct psmouse *psmouse, enum psmouse_scale scale);
 122 
 123         int (*reconnect)(struct psmouse *psmouse);
 124         int (*fast_reconnect)(struct psmouse *psmouse);
 125         void (*disconnect)(struct psmouse *psmouse);
 126         void (*cleanup)(struct psmouse *psmouse);
 127         int (*poll)(struct psmouse *psmouse);
 128 
 129         void (*pt_activate)(struct psmouse *psmouse);
 130         void (*pt_deactivate)(struct psmouse *psmouse);
 131 };
 132 
 133 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
 134                 unsigned long delay);
 135 int psmouse_reset(struct psmouse *psmouse);
 136 void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state);
 137 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
 138 psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse);
 139 int psmouse_activate(struct psmouse *psmouse);
 140 int psmouse_deactivate(struct psmouse *psmouse);
 141 bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[]);
 142 
 143 void psmouse_report_standard_buttons(struct input_dev *, u8 buttons);
 144 void psmouse_report_standard_motion(struct input_dev *, u8 *packet);
 145 void psmouse_report_standard_packet(struct input_dev *, u8 *packet);
 146 
 147 struct psmouse_attribute {
 148         struct device_attribute dattr;
 149         void *data;
 150         ssize_t (*show)(struct psmouse *psmouse, void *data, char *buf);
 151         ssize_t (*set)(struct psmouse *psmouse, void *data,
 152                         const char *buf, size_t count);
 153         bool protect;
 154 };
 155 #define to_psmouse_attr(a)      container_of((a), struct psmouse_attribute, dattr)
 156 
 157 ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *attr,
 158                                  char *buf);
 159 ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *attr,
 160                                 const char *buf, size_t count);
 161 
 162 #define __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)   \
 163 static struct psmouse_attribute psmouse_attr_##_name = {                        \
 164         .dattr  = {                                                             \
 165                 .attr   = {                                                     \
 166                         .name   = __stringify(_name),                           \
 167                         .mode   = _mode,                                        \
 168                 },                                                              \
 169                 .show   = psmouse_attr_show_helper,                             \
 170                 .store  = psmouse_attr_set_helper,                              \
 171         },                                                                      \
 172         .data   = _data,                                                        \
 173         .show   = _show,                                                        \
 174         .set    = _set,                                                         \
 175         .protect = _protect,                                                    \
 176 }
 177 
 178 #define __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, _protect)       \
 179         static ssize_t _show(struct psmouse *, void *, char *);                 \
 180         static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 181         __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, _set, _protect)
 182 
 183 #define PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set)                   \
 184         __PSMOUSE_DEFINE_ATTR(_name, _mode, _data, _show, _set, true)
 185 
 186 #define PSMOUSE_DEFINE_RO_ATTR(_name, _mode, _data, _show)                      \
 187         static ssize_t _show(struct psmouse *, void *, char *);                 \
 188         __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, _show, NULL, true)
 189 
 190 #define PSMOUSE_DEFINE_WO_ATTR(_name, _mode, _data, _set)                       \
 191         static ssize_t _set(struct psmouse *, void *, const char *, size_t);    \
 192         __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true)
 193 
 194 #ifndef psmouse_fmt
 195 #define psmouse_fmt(fmt)        KBUILD_BASENAME ": " fmt
 196 #endif
 197 
 198 #define psmouse_dbg(psmouse, format, ...)               \
 199         dev_dbg(&(psmouse)->ps2dev.serio->dev,          \
 200                 psmouse_fmt(format), ##__VA_ARGS__)
 201 #define psmouse_info(psmouse, format, ...)              \
 202         dev_info(&(psmouse)->ps2dev.serio->dev,         \
 203                  psmouse_fmt(format), ##__VA_ARGS__)
 204 #define psmouse_warn(psmouse, format, ...)              \
 205         dev_warn(&(psmouse)->ps2dev.serio->dev,         \
 206                  psmouse_fmt(format), ##__VA_ARGS__)
 207 #define psmouse_err(psmouse, format, ...)               \
 208         dev_err(&(psmouse)->ps2dev.serio->dev,          \
 209                 psmouse_fmt(format), ##__VA_ARGS__)
 210 #define psmouse_notice(psmouse, format, ...)            \
 211         dev_notice(&(psmouse)->ps2dev.serio->dev,       \
 212                    psmouse_fmt(format), ##__VA_ARGS__)
 213 #define psmouse_printk(level, psmouse, format, ...)     \
 214         dev_printk(level,                               \
 215                    &(psmouse)->ps2dev.serio->dev,       \
 216                    psmouse_fmt(format), ##__VA_ARGS__)
 217 
 218 #ifdef CONFIG_MOUSE_PS2_SMBUS
 219 
 220 int psmouse_smbus_module_init(void);
 221 void psmouse_smbus_module_exit(void);
 222 
 223 struct i2c_board_info;
 224 
 225 int psmouse_smbus_init(struct psmouse *psmouse,
 226                        const struct i2c_board_info *board,
 227                        const void *pdata, size_t pdata_size,
 228                        bool need_deactivate,
 229                        bool leave_breadcrumbs);
 230 void psmouse_smbus_cleanup(struct psmouse *psmouse);
 231 
 232 #else /* !CONFIG_MOUSE_PS2_SMBUS */
 233 
 234 static inline int psmouse_smbus_module_init(void)
 235 {
 236         return 0;
 237 }
 238 
 239 static inline void psmouse_smbus_module_exit(void)
 240 {
 241 }
 242 
 243 static inline void psmouse_smbus_cleanup(struct psmouse *psmouse)
 244 {
 245 }
 246 
 247 #endif /* CONFIG_MOUSE_PS2_SMBUS */
 248 
 249 #endif /* _PSMOUSE_H */

/* [<][>][^][v][top][bottom][index][help] */