Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Synaptics TouchPad PS/2 mouse driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #ifndef _SYNAPTICS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define _SYNAPTICS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) /* synaptics queries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define SYN_QUE_IDENTIFY		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define SYN_QUE_MODES			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define SYN_QUE_CAPABILITIES		0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define SYN_QUE_MODEL			0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define SYN_QUE_SERIAL_NUMBER_PREFIX	0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define SYN_QUE_SERIAL_NUMBER_SUFFIX	0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define SYN_QUE_RESOLUTION		0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define SYN_QUE_EXT_CAPAB		0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define SYN_QUE_FIRMWARE_ID		0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define SYN_QUE_EXT_CAPAB_0C		0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define SYN_QUE_EXT_MAX_COORDS		0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define SYN_QUE_EXT_MIN_COORDS		0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define SYN_QUE_MEXT_CAPAB_10		0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) /* synatics modes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define SYN_BIT_ABSOLUTE_MODE		BIT(7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define SYN_BIT_HIGH_RATE		BIT(6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define SYN_BIT_SLEEP_MODE		BIT(3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define SYN_BIT_DISABLE_GESTURE		BIT(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define SYN_BIT_FOUR_BYTE_CLIENT	BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define SYN_BIT_W_MODE			BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) /* synaptics model ID bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define SYN_MODEL_ROT180(m)		((m) & BIT(23))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define SYN_MODEL_PORTRAIT(m)		((m) & BIT(22))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define SYN_MODEL_SENSOR(m)		(((m) & GENMASK(21, 16)) >> 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define SYN_MODEL_HARDWARE(m)		(((m) & GENMASK(15, 9)) >> 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define SYN_MODEL_NEWABS(m)		((m) & BIT(7))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define SYN_MODEL_PEN(m)		((m) & BIT(6))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define SYN_MODEL_SIMPLIC(m)		((m) & BIT(5))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define SYN_MODEL_GEOMETRY(m)		((m) & GENMASK(3, 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) /* synaptics capability bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define SYN_CAP_EXTENDED(c)		((c) & BIT(23))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define SYN_CAP_MIDDLE_BUTTON(c)	((c) & BIT(18))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define SYN_CAP_PASS_THROUGH(c)		((c) & BIT(7))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define SYN_CAP_SLEEP(c)		((c) & BIT(4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define SYN_CAP_FOUR_BUTTON(c)		((c) & BIT(3))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define SYN_CAP_MULTIFINGER(c)		((c) & BIT(1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define SYN_CAP_PALMDETECT(c)		((c) & BIT(0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define SYN_CAP_SUBMODEL_ID(c)		(((c) & GENMASK(15, 8)) >> 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define SYN_EXT_CAP_REQUESTS(c)		(((c) & GENMASK(22, 20)) >> 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define SYN_CAP_MB_MASK			GENMASK(15, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define SYN_CAP_MULTI_BUTTON_NO(ec)	(((ec) & SYN_CAP_MB_MASK) >> 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define SYN_CAP_PRODUCT_ID(ec)		(((ec) & GENMASK(23, 16)) >> 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define SYN_MEXT_CAP_BIT(m)		((m) & BIT(1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)  * The following describes response for the 0x0c query.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * byte	mask	name			meaning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  * ----	----	-------			------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)  * 1	0x01	adjustable threshold	capacitive button sensitivity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)  *					can be adjusted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)  * 1	0x02	report max		query 0x0d gives max coord reported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)  * 1	0x04	clearpad		sensor is ClearPad product
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  * 1	0x08	advanced gesture	not particularly meaningful
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67)  * 1	0x10	clickpad bit 0		1-button ClickPad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)  * 1	0x60	multifinger mode	identifies firmware finger counting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  *					(not reporting!) algorithm.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)  *					Not particularly meaningful
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71)  * 1	0x80	covered pad		W clipped to 14, 15 == pad mostly covered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)  * 2	0x01	clickpad bit 1		2-button ClickPad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  * 2	0x02	deluxe LED controls	touchpad support LED commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  *					ala multimedia control bar
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)  * 2	0x04	reduced filtering	firmware does less filtering on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)  *					position data, driver should watch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)  *					for noise.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)  * 2	0x08	image sensor		image sensor tracks 5 fingers, but only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79)  *					reports 2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80)  * 2	0x01	uniform clickpad	whole clickpad moves instead of being
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)  *					hinged at the top.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82)  * 2	0x20	report min		query 0x0f gives min coord reported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define SYN_CAP_CLICKPAD(ex0c)		((ex0c) & BIT(20)) /* 1-button ClickPad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define SYN_CAP_CLICKPAD2BTN(ex0c)	((ex0c) & BIT(8))  /* 2-button ClickPad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define SYN_CAP_MAX_DIMENSIONS(ex0c)	((ex0c) & BIT(17))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define SYN_CAP_MIN_DIMENSIONS(ex0c)	((ex0c) & BIT(13))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define SYN_CAP_ADV_GESTURE(ex0c)	((ex0c) & BIT(19))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define SYN_CAP_REDUCED_FILTERING(ex0c)	((ex0c) & BIT(10))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define SYN_CAP_IMAGE_SENSOR(ex0c)	((ex0c) & BIT(11))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define SYN_CAP_INTERTOUCH(ex0c)	((ex0c) & BIT(14))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * The following descibes response for the 0x10 query.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * byte	mask	name			meaning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * ----	----	-------			------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  * 1	0x01	ext buttons are stick	buttons exported in the extended
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  *					capability are actually meant to be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  *					by the tracktick (pass-through).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  * 1	0x02	SecurePad		the touchpad is a SecurePad, so it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)  *					contains a built-in fingerprint reader.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)  * 1	0xe0	more ext count		how many more extented queries are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)  *					available after this one.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  * 2	0xff	SecurePad width		the width of the SecurePad fingerprint
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)  *					reader.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  * 3	0xff	SecurePad height	the height of the SecurePad fingerprint
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)  *					reader.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define SYN_CAP_EXT_BUTTONS_STICK(ex10)	((ex10) & BIT(16))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define SYN_CAP_SECUREPAD(ex10)		((ex10) & BIT(17))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define SYN_EXT_BUTTON_STICK_L(eb)	(((eb) & BIT(0)) >> 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define SYN_EXT_BUTTON_STICK_M(eb)	(((eb) & BIT(1)) >> 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define SYN_EXT_BUTTON_STICK_R(eb)	(((eb) & BIT(2)) >> 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /* synaptics modes query bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define SYN_MODE_ABSOLUTE(m)		((m) & BIT(7))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define SYN_MODE_RATE(m)		((m) & BIT(6))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define SYN_MODE_BAUD_SLEEP(m)		((m) & BIT(3))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define SYN_MODE_DISABLE_GESTURE(m)	((m) & BIT(2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define SYN_MODE_PACKSIZE(m)		((m) & BIT(1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define SYN_MODE_WMODE(m)		((m) & BIT(0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* synaptics identify query bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define SYN_ID_MODEL(i)			(((i) & GENMASK(7, 4)) >> 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define SYN_ID_MAJOR(i)			(((i) & GENMASK(3, 0)) >> 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define SYN_ID_MINOR(i)			(((i) & GENMASK(23, 16)) >> 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define SYN_ID_FULL(i)			((SYN_ID_MAJOR(i) << 8) | SYN_ID_MINOR(i))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define SYN_ID_IS_SYNAPTICS(i)		(((i) & GENMASK(15, 8)) == 0x004700U)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define SYN_ID_DISGEST_SUPPORTED(i)	(SYN_ID_MAJOR(i) >= 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) /* synaptics special commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define SYN_PS_SET_MODE2		0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define SYN_PS_CLIENT_CMD		0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) /* amount to fuzz position data when touchpad reports reduced filtering */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define SYN_REDUCED_FILTER_FUZZ		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) /* synaptics packet types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) enum synaptics_pkt_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	SYN_NEWABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	SYN_NEWABS_STRICT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	SYN_NEWABS_RELAXED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	SYN_OLDABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)  * A structure to describe the state of the touchpad hardware (buttons and pad)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) struct synaptics_hw_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	int x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	int y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	int z;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	int w;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	unsigned int left:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	unsigned int right:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	unsigned int middle:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	unsigned int up:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	unsigned int down:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	u8 ext_buttons;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	s8 scroll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /* Data read from the touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct synaptics_device_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	u32 model_id;		/* Model-ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	u32 firmware_id;	/* Firmware-ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	u32 board_id;		/* Board-ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	u32 capabilities;	/* Capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	u32 ext_cap;		/* Extended Capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	u32 ext_cap_0c;		/* Ext Caps from 0x0c query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	u32 ext_cap_10;		/* Ext Caps from 0x10 query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	u32 identity;		/* Identification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	u32 x_res, y_res;	/* X/Y resolution in units/mm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	u32 x_max, y_max;	/* Max coordinates (from FW) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	u32 x_min, y_min;	/* Min coordinates (from FW) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct synaptics_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	struct synaptics_device_info info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	enum synaptics_pkt_type pkt_type;	/* packet type - old, new, etc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	u8 mode;				/* current mode byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	int scroll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	bool absolute_mode;			/* run in Absolute mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	bool disable_gesture;			/* disable gestures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	struct serio *pt_port;			/* Pass-through serio port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	 * Last received Advanced Gesture Mode (AGM) packet. An AGM packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	 * contains position data for a second contact, at half resolution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	struct synaptics_hw_state agm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	unsigned int agm_count;			/* finger count reported by agm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	/* ForcePad handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	unsigned long				press_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	bool					press;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	bool					report_press;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	bool					is_forcepad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) void synaptics_module_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) int synaptics_detect(struct psmouse *psmouse, bool set_properties);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) int synaptics_init_absolute(struct psmouse *psmouse);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) int synaptics_init_relative(struct psmouse *psmouse);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) int synaptics_init_smbus(struct psmouse *psmouse);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) int synaptics_init(struct psmouse *psmouse);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) void synaptics_reset(struct psmouse *psmouse);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #endif /* _SYNAPTICS_H */