2005-04-17 02:20:36 +04:00
/*
* Synaptics TouchPad PS / 2 mouse driver
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*/
# ifndef _SYNAPTICS_H
# define _SYNAPTICS_H
/* synaptics queries */
# define SYN_QUE_IDENTIFY 0x00
# define SYN_QUE_MODES 0x01
# define SYN_QUE_CAPABILITIES 0x02
# define SYN_QUE_MODEL 0x03
# define SYN_QUE_SERIAL_NUMBER_PREFIX 0x06
# define SYN_QUE_SERIAL_NUMBER_SUFFIX 0x07
# define SYN_QUE_RESOLUTION 0x08
# define SYN_QUE_EXT_CAPAB 0x09
/* synatics modes */
# define SYN_BIT_ABSOLUTE_MODE (1 << 7)
# define SYN_BIT_HIGH_RATE (1 << 6)
# define SYN_BIT_SLEEP_MODE (1 << 3)
# define SYN_BIT_DISABLE_GESTURE (1 << 2)
# define SYN_BIT_FOUR_BYTE_CLIENT (1 << 1)
# define SYN_BIT_W_MODE (1 << 0)
/* synaptics model ID bits */
# define SYN_MODEL_ROT180(m) ((m) & (1 << 23))
# define SYN_MODEL_PORTRAIT(m) ((m) & (1 << 22))
# define SYN_MODEL_SENSOR(m) (((m) >> 16) & 0x3f)
# define SYN_MODEL_HARDWARE(m) (((m) >> 9) & 0x7f)
# define SYN_MODEL_NEWABS(m) ((m) & (1 << 7))
# define SYN_MODEL_PEN(m) ((m) & (1 << 6))
# define SYN_MODEL_SIMPLIC(m) ((m) & (1 << 5))
# define SYN_MODEL_GEOMETRY(m) ((m) & 0x0f)
/* synaptics capability bits */
# define SYN_CAP_EXTENDED(c) ((c) & (1 << 23))
# define SYN_CAP_MIDDLE_BUTTON(c) ((c) & (1 << 18))
# define SYN_CAP_PASS_THROUGH(c) ((c) & (1 << 7))
# define SYN_CAP_SLEEP(c) ((c) & (1 << 4))
# define SYN_CAP_FOUR_BUTTON(c) ((c) & (1 << 3))
# define SYN_CAP_MULTIFINGER(c) ((c) & (1 << 1))
# define SYN_CAP_PALMDETECT(c) ((c) & (1 << 0))
# define SYN_CAP_VALID(c) ((((c) & 0x00ff00) >> 8) == 0x47)
# define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20)
# define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12)
/* synaptics modes query bits */
# define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
# define SYN_MODE_RATE(m) ((m) & (1 << 6))
# define SYN_MODE_BAUD_SLEEP(m) ((m) & (1 << 3))
# define SYN_MODE_DISABLE_GESTURE(m) ((m) & (1 << 2))
# define SYN_MODE_PACKSIZE(m) ((m) & (1 << 1))
# define SYN_MODE_WMODE(m) ((m) & (1 << 0))
/* synaptics identify query bits */
2007-03-10 09:39:54 +03:00
# define SYN_ID_MODEL(i) (((i) >> 4) & 0x0f)
# define SYN_ID_MAJOR(i) ((i) & 0x0f)
# define SYN_ID_MINOR(i) (((i) >> 16) & 0xff)
2005-04-17 02:20:36 +04:00
# define SYN_ID_IS_SYNAPTICS(i) ((((i) >> 8) & 0xff) == 0x47)
/* synaptics special commands */
# define SYN_PS_SET_MODE2 0x14
# define SYN_PS_CLIENT_CMD 0x28
/* synaptics packet types */
# define SYN_NEWABS 0
# define SYN_NEWABS_STRICT 1
# define SYN_NEWABS_RELAXED 2
# define SYN_OLDABS 3
/*
* A structure to describe the state of the touchpad hardware ( buttons and pad )
*/
struct synaptics_hw_state {
int x ;
int y ;
int z ;
int w ;
unsigned int left : 1 ;
unsigned int right : 1 ;
unsigned int middle : 1 ;
unsigned int up : 1 ;
unsigned int down : 1 ;
unsigned char ext_buttons ;
signed char scroll ;
} ;
struct synaptics_data {
/* Data read from the touchpad */
unsigned long int model_id ; /* Model-ID */
2007-03-10 09:39:54 +03:00
unsigned long int capabilities ; /* Capabilities */
unsigned long int ext_cap ; /* Extended Capabilities */
2005-04-17 02:20:36 +04:00
unsigned long int identity ; /* Identification */
2009-06-11 10:27:24 +04:00
int x_res ; /* X resolution in units/mm */
int y_res ; /* Y resolution in units/mm */
2005-04-17 02:20:36 +04:00
unsigned char pkt_type ; /* packet type - old, new, etc */
unsigned char mode ; /* current mode byte */
int scroll ;
} ;
2007-03-10 09:39:54 +03:00
int synaptics_detect ( struct psmouse * psmouse , int set_properties ) ;
int synaptics_init ( struct psmouse * psmouse ) ;
void synaptics_reset ( struct psmouse * psmouse ) ;
2005-04-17 02:20:36 +04:00
# endif /* _SYNAPTICS_H */