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)  * IBM TrackPoint PS/2 mouse driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Stephen Evanchik <evanchsa@gmail.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #ifndef _TRACKPOINT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #define _TRACKPOINT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  * These constants are from the TrackPoint System
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * Engineering documentation Version 4 from IBM Watson
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * research:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  *	http://wwwcssrv.almaden.ibm.com/trackpoint/download.html
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define TP_COMMAND		0xE2	/* Commands start with this */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define TP_READ_ID		0xE1	/* Sent for device identification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  * Valid first byte responses to the "Read Secondary ID" (0xE1) command.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  * 0x01 was the original IBM trackpoint, others implement very limited
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  * subset of trackpoint features.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define TP_VARIANT_IBM			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define TP_VARIANT_ALPS			0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define TP_VARIANT_ELAN			0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define TP_VARIANT_NXP			0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define TP_VARIANT_JYT_SYNAPTICS	0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define TP_VARIANT_SYNAPTICS		0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * Commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define TP_RECALIB		0x51	/* Recalibrate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define TP_POWER_DOWN		0x44	/* Can only be undone through HW reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define TP_EXT_DEV		0x21	/* Determines if external device is connected (RO) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define TP_EXT_BTN		0x4B	/* Read extended button status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define TP_POR			0x7F	/* Execute Power on Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define TP_POR_RESULTS		0x25	/* Read Power on Self test results */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define TP_DISABLE_EXT		0x40	/* Disable external pointing device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define TP_ENABLE_EXT		0x41	/* Enable external pointing device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  * Mode manipulation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define TP_SET_SOFT_TRANS	0x4E	/* Set mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define TP_CANCEL_SOFT_TRANS	0xB9	/* Cancel mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define TP_SET_HARD_TRANS	0x45	/* Mode can only be set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  * Register oriented commands/properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define TP_WRITE_MEM		0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define TP_READ_MEM		0x80	/* Not used in this implementation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) * RAM Locations for properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define TP_SENS			0x4A	/* Sensitivity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define TP_MB			0x4C	/* Read Middle Button Status (RO) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define TP_INERTIA		0x4D	/* Negative Inertia */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define TP_SPEED		0x60	/* Speed of TP Cursor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define TP_REACH		0x57	/* Backup for Z-axis press */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define TP_DRAGHYS		0x58	/* Drag Hysteresis */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 					/* (how hard it is to drag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 					/* with Z-axis pressed) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define TP_MINDRAG		0x59	/* Minimum amount of force needed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 					/* to trigger dragging */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define TP_THRESH		0x5C	/* Minimum value for a Z-axis press */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define TP_UP_THRESH		0x5A	/* Used to generate a 'click' on Z-axis */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define TP_Z_TIME		0x5E	/* How sharp of a press */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define TP_JENKS_CURV		0x5D	/* Minimum curvature for double click */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define TP_DRIFT_TIME		0x5F	/* How long a 'hands off' condition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 					/* must last (x*107ms) for drift */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 					/* correction to occur */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)  * Toggling Flag bits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define TP_TOGGLE		0x47	/* Toggle command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define TP_TOGGLE_MB		0x23	/* Disable/Enable Middle Button */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define TP_MASK_MB			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define TP_TOGGLE_EXT_DEV	0x23	/* Disable external device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define TP_MASK_EXT_DEV			0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define TP_TOGGLE_DRIFT		0x23	/* Drift Correction */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define TP_MASK_DRIFT			0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define TP_TOGGLE_BURST		0x28	/* Burst Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) #define TP_MASK_BURST			0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define TP_TOGGLE_PTSON		0x2C	/* Press to Select */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define TP_MASK_PTSON			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define TP_TOGGLE_HARD_TRANS	0x2C	/* Alternate method to set Hard Transparency */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define TP_MASK_HARD_TRANS		0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define TP_TOGGLE_TWOHAND	0x2D	/* Two handed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define TP_MASK_TWOHAND			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define TP_TOGGLE_STICKY_TWO	0x2D	/* Sticky two handed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define TP_MASK_STICKY_TWO		0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define TP_TOGGLE_SKIPBACK	0x2D	/* Suppress movement after drag release */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define TP_MASK_SKIPBACK		0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define TP_TOGGLE_SOURCE_TAG	0x20	/* Bit 3 of the first packet will be set to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 					   to the origin of the packet (external or TP) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define TP_MASK_SOURCE_TAG		0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define TP_TOGGLE_EXT_TAG	0x22	/* Bit 3 of the first packet coming from the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 					   external device will be forced to 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define TP_MASK_EXT_TAG			0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) /* Power on Self Test Results */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define TP_POR_SUCCESS		0x3B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  * Default power on values
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define TP_DEF_SENS		0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define TP_DEF_INERTIA		0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define TP_DEF_SPEED		0x61
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define TP_DEF_REACH		0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define TP_DEF_DRAGHYS		0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define TP_DEF_MINDRAG		0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define TP_DEF_THRESH		0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define TP_DEF_UP_THRESH	0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define TP_DEF_Z_TIME		0x26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define TP_DEF_JENKS_CURV	0x87
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define TP_DEF_DRIFT_TIME	0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /* Toggles */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define TP_DEF_MB		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define TP_DEF_PTSON		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define TP_DEF_SKIPBACK		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define TP_DEF_EXT_DEV		0x00	/* 0 means enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define TP_DEF_TWOHAND		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define TP_DEF_SOURCE_TAG	0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define MAKE_PS2_CMD(params, results, cmd) ((params<<12) | (results<<8) | (cmd))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct trackpoint_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	u8 variant_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	u8 firmware_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	u8 sensitivity, speed, inertia, reach;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	u8 draghys, mindrag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	u8 thresh, upthresh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	u8 ztime, jenks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	u8 drift_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	/* toggles */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	bool press_to_select;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	bool skipback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	bool ext_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) int trackpoint_detect(struct psmouse *psmouse, bool set_properties);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #endif /* _TRACKPOINT_H */