diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-26 19:40:59 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-26 19:40:59 -0400 |
| commit | 3d6eadcb5008beca1b289983ffd7771d1e947bac (patch) | |
| tree | 2a765d732c67173d323e903da67db12282ad597a | |
| parent | a483ab1dddf86a0e8924e94cf838eed602602b39 (diff) | |
| parent | 2a0bd75e5e687a9c34921e942c18477ea7ec2d63 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: psmouse - add support for Elantech touchpads
Input: i8042 - add Blue FB5601 to noloop exception table
| -rw-r--r-- | Documentation/input/elantech.txt | 405 | ||||
| -rw-r--r-- | drivers/input/mouse/Kconfig | 25 | ||||
| -rw-r--r-- | drivers/input/mouse/Makefile | 1 | ||||
| -rw-r--r-- | drivers/input/mouse/elantech.c | 674 | ||||
| -rw-r--r-- | drivers/input/mouse/elantech.h | 124 | ||||
| -rw-r--r-- | drivers/input/mouse/psmouse-base.c | 23 | ||||
| -rw-r--r-- | drivers/input/mouse/psmouse.h | 1 | ||||
| -rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 8 |
8 files changed, 1259 insertions, 2 deletions
diff --git a/Documentation/input/elantech.txt b/Documentation/input/elantech.txt new file mode 100644 index 000000000000..a10c3b6ba7c4 --- /dev/null +++ b/Documentation/input/elantech.txt | |||
| @@ -0,0 +1,405 @@ | |||
| 1 | Elantech Touchpad Driver | ||
| 2 | ======================== | ||
| 3 | |||
| 4 | Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net> | ||
| 5 | |||
| 6 | Extra information for hardware version 1 found and | ||
| 7 | provided by Steve Havelka | ||
| 8 | |||
| 9 | Version 2 (EeePC) hardware support based on patches | ||
| 10 | received from Woody at Xandros and forwarded to me | ||
| 11 | by user StewieGriffin at the eeeuser.com forum | ||
| 12 | |||
| 13 | |||
| 14 | Contents | ||
| 15 | ~~~~~~~~ | ||
| 16 | |||
| 17 | 1. Introduction | ||
| 18 | 2. Extra knobs | ||
| 19 | 3. Hardware version 1 | ||
| 20 | 3.1 Registers | ||
| 21 | 3.2 Native relative mode 4 byte packet format | ||
| 22 | 3.3 Native absolute mode 4 byte packet format | ||
| 23 | 4. Hardware version 2 | ||
| 24 | 4.1 Registers | ||
| 25 | 4.2 Native absolute mode 6 byte packet format | ||
| 26 | 4.2.1 One finger touch | ||
| 27 | 4.2.2 Two finger touch | ||
| 28 | |||
| 29 | |||
| 30 | |||
| 31 | 1. Introduction | ||
| 32 | ~~~~~~~~~~~~ | ||
| 33 | |||
| 34 | Currently the Linux Elantech touchpad driver is aware of two different | ||
| 35 | hardware versions unimaginatively called version 1 and version 2. Version 1 | ||
| 36 | is found in "older" laptops and uses 4 bytes per packet. Version 2 seems to | ||
| 37 | be introduced with the EeePC and uses 6 bytes per packet. | ||
| 38 | |||
| 39 | The driver tries to support both hardware versions and should be compatible | ||
| 40 | with the Xorg Synaptics touchpad driver and its graphical configuration | ||
| 41 | utilities. | ||
| 42 | |||
| 43 | Additionally the operation of the touchpad can be altered by adjusting the | ||
| 44 | contents of some of its internal registers. These registers are represented | ||
| 45 | by the driver as sysfs entries under /sys/bus/serio/drivers/psmouse/serio? | ||
| 46 | that can be read from and written to. | ||
| 47 | |||
| 48 | Currently only the registers for hardware version 1 are somewhat understood. | ||
| 49 | Hardware version 2 seems to use some of the same registers but it is not | ||
| 50 | known whether the bits in the registers represent the same thing or might | ||
| 51 | have changed their meaning. | ||
| 52 | |||
| 53 | On top of that, some register settings have effect only when the touchpad is | ||
| 54 | in relative mode and not in absolute mode. As the Linux Elantech touchpad | ||
| 55 | driver always puts the hardware into absolute mode not all information | ||
| 56 | mentioned below can be used immediately. But because there is no freely | ||
| 57 | available Elantech documentation the information is provided here anyway for | ||
| 58 | completeness sake. | ||
| 59 | |||
| 60 | |||
| 61 | ///////////////////////////////////////////////////////////////////////////// | ||
| 62 | |||
| 63 | |||
| 64 | 2. Extra knobs | ||
| 65 | ~~~~~~~~~~~ | ||
| 66 | |||
| 67 | Currently the Linux Elantech touchpad driver provides two extra knobs under | ||
| 68 | /sys/bus/serio/drivers/psmouse/serio? for the user. | ||
| 69 | |||
| 70 | * debug | ||
| 71 | |||
| 72 | Turn different levels of debugging ON or OFF. | ||
| 73 | |||
| 74 | By echoing "0" to this file all debugging will be turned OFF. | ||
| 75 | |||
| 76 | Currently a value of "1" will turn on some basic debugging and a value of | ||
| 77 | "2" will turn on packet debugging. For hardware version 1 the default is | ||
| 78 | OFF. For version 2 the default is "1". | ||
| 79 | |||
| 80 | Turning packet debugging on will make the driver dump every packet | ||
| 81 | received to the syslog before processing it. Be warned that this can | ||
| 82 | generate quite a lot of data! | ||
| 83 | |||
| 84 | * paritycheck | ||
| 85 | |||
| 86 | Turns parity checking ON or OFF. | ||
| 87 | |||
| 88 | By echoing "0" to this file parity checking will be turned OFF. Any | ||
| 89 | non-zero value will turn it ON. For hardware version 1 the default is ON. | ||
| 90 | For version 2 the default it is OFF. | ||
| 91 | |||
| 92 | Hardware version 1 provides basic data integrity verification by | ||
| 93 | calculating a parity bit for the last 3 bytes of each packet. The driver | ||
| 94 | can check these bits and reject any packet that appears corrupted. Using | ||
| 95 | this knob you can bypass that check. | ||
| 96 | |||
| 97 | It is not known yet whether hardware version 2 provides the same parity | ||
| 98 | bits. Hence checking is disabled by default. Currently even turning it on | ||
| 99 | will do nothing. | ||
| 100 | |||
| 101 | |||
| 102 | ///////////////////////////////////////////////////////////////////////////// | ||
| 103 | |||
| 104 | |||
| 105 | 3. Hardware version 1 | ||
| 106 | ================== | ||
| 107 | |||
| 108 | 3.1 Registers | ||
| 109 | ~~~~~~~~~ | ||
| 110 | |||
| 111 | By echoing a hexadecimal value to a register it contents can be altered. | ||
| 112 | |||
| 113 | For example: | ||
| 114 | |||
| 115 | echo -n 0x16 > reg_10 | ||
| 116 | |||
| 117 | * reg_10 | ||
| 118 | |||
| 119 | bit 7 6 5 4 3 2 1 0 | ||
| 120 | B C T D L A S E | ||
| 121 | |||
| 122 | E: 1 = enable smart edges unconditionally | ||
| 123 | S: 1 = enable smart edges only when dragging | ||
| 124 | A: 1 = absolute mode (needs 4 byte packets, see reg_11) | ||
| 125 | L: 1 = enable drag lock (see reg_22) | ||
| 126 | D: 1 = disable dynamic resolution | ||
| 127 | T: 1 = disable tapping | ||
| 128 | C: 1 = enable corner tap | ||
| 129 | B: 1 = swap left and right button | ||
| 130 | |||
| 131 | * reg_11 | ||
| 132 | |||
| 133 | bit 7 6 5 4 3 2 1 0 | ||
| 134 | 1 0 0 H V 1 F P | ||
| 135 | |||
| 136 | P: 1 = enable parity checking for relative mode | ||
| 137 | F: 1 = enable native 4 byte packet mode | ||
| 138 | V: 1 = enable vertical scroll area | ||
| 139 | H: 1 = enable horizontal scroll area | ||
| 140 | |||
| 141 | * reg_20 | ||
| 142 | |||
| 143 | single finger width? | ||
| 144 | |||
| 145 | * reg_21 | ||
| 146 | |||
| 147 | scroll area width (small: 0x40 ... wide: 0xff) | ||
| 148 | |||
| 149 | * reg_22 | ||
| 150 | |||
| 151 | drag lock time out (short: 0x14 ... long: 0xfe; | ||
| 152 | 0xff = tap again to release) | ||
| 153 | |||
| 154 | * reg_23 | ||
| 155 | |||
| 156 | tap make timeout? | ||
| 157 | |||
| 158 | * reg_24 | ||
| 159 | |||
| 160 | tap release timeout? | ||
| 161 | |||
| 162 | * reg_25 | ||
| 163 | |||
| 164 | smart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast) | ||
| 165 | |||
| 166 | * reg_26 | ||
| 167 | |||
| 168 | smart edge activation area width? | ||
| 169 | |||
| 170 | |||
| 171 | 3.2 Native relative mode 4 byte packet format | ||
| 172 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 173 | |||
| 174 | byte 0: | ||
| 175 | bit 7 6 5 4 3 2 1 0 | ||
| 176 | c c p2 p1 1 M R L | ||
| 177 | |||
| 178 | L, R, M = 1 when Left, Right, Middle mouse button pressed | ||
| 179 | some models have M as byte 3 odd parity bit | ||
| 180 | when parity checking is enabled (reg_11, P = 1): | ||
| 181 | p1..p2 = byte 1 and 2 odd parity bit | ||
| 182 | c = 1 when corner tap detected | ||
| 183 | |||
| 184 | byte 1: | ||
