2016年9月29日 星期四

synaptics touchpad xorg driver issue

最近看了一個 synaptics touchpad 的 issue ,就是 single touch scrolling failed in right edge,but works in bottom edge.

xorg 在開機的時後,會將所有的 driver load 進來,可以在/var/log/Xorg.0.log 看到,而 /usr/share/X11/xorg.conf.d 下面則放著針對各個 driver 的設定檔 (也可以不放就是 default), 像這次遇到的就是 50-synaptics.conf

然後從 xinput 及 移除 psmouse kernel module 的方式可以知道它的 touch pad 是走 I2C,也就是說 kernel driver 把 x, y 丟上來, xorg driver 去判斷是 edge 還是 function button 之類的。

所以再看 xorg 的 user space Synaptics driver :
 * https://cgit.freedesktop.org/xorg/driver/xf86-input-synaptics/
 * https://launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/1.8.3-1ubuntu1

透過 code 及觀查 evtest 吐出來的 x, y 可以看到兩個問題 (evtest 在 driver 之上, Xorg 之下):
 1. right edge 沒有 x 坐標丟出來
  - 這應該要看 kernel driver.
 2. user space Synaptics driver 根据的 VID:PID [0002:0007] 是 psmouse 的ID,但最後抓到的是 [06cb:78f6] 看起來像是 Synaptics i2c 的 ID.
  - driver根拒這個決定 edge width,UNKNOWN ID 短於 Synaptics ,再加上 第 1. 點,所以touch 點永遠不被判定為 edge

所以解 1 or 2 就可以解掉這個問題,或者直接在 50-synaptics.conf 上面固定 edge width 當 workaround.

另外,同事有建議試用 xinput 取代Synaptics user space driver, 有空再試吧~

reference :
 * https://wiki.archlinux.org/index.php/Touchpad_Synaptics
 * https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug/1627674

沒有留言:

張貼留言