Find the right device to reverse-engineer












1














I have an Asus GL503VD for which the touchpad doesn't work on linux.



I tried many different distros: Arch, Debian, Ubuntu 16/17/18, Sabayon, Pop_OS, Fedora. None of them made the touchpad work so I settled with Ubuntu 18.04 and decided to debug it myself.



First of, this laptop is pretty new so it will not boot without the acpi=force GRUB parameter. Secondly, it will boot to a black-screen if the module i2c-hid is allowed to load (so I had to blacklist i2c-hid). I am pretty sure i2c-hid is the driver supposed to take care of my touchpad so this is a problem probably worth looking into. The thing is when the module is allowed to load I can't even reach a terminal with a ctrl+alt+f* combo, it's just black, nothingness.



From my Windows partition I could tell that the touchpad is an ELAN1200(not elantech). I tried loading the module hid-elan without any success. Out of desperation I also tried the synaptics module without any luck. Tried various x.org.conf.d configurations which only stopped my laptop from reaching Gnome DE.
Tried using libinput, in vain.



Tried i8042.nomux=1, i8042.noloop, i8042.nopnp, i8042.kdbreset=1, i8042.reset; none of those worked. (From what I gather, my touchpad/keyboard combo might be managed by an i8042 chip; though from the xinput output it looks more like an ITE8910 is managing the combo.)



The xinput output is also what tells me the touchpad might be part of a touchpad/keyboard combo. I think the touchpad and the keyboard are one device: ITE8910



xinput output:



⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ MOSART Semi. USB Device id=12 [slave pointer (2)]
⎜ ↳ ITE Tech. Inc. ITE Device(8910) id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Asus Wireless Radio Control id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Sleep Button id=11 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam: USB2.0 HD id=13 [slave keyboard (3)]
↳ Asus WMI hotkeys id=15 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
↳ ITE Tech. Inc. ITE Device(8910) id=17 [slave keyboard (3)]


The ouput of dmesg tells me the device is connected through USB:



[    2.408602] usb 1-8: new full-speed USB device number 5 using xhci_hcd
[ 2.562105] usb 1-8: New USB device found, idVendor=0b05, idProduct=1869
[ 2.562106] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.562107] usb 1-8: Product: ITE Device(8910)
[ 2.562108] usb 1-8: Manufacturer: ITE Tech. Inc.


If I lsusb I see the right device with vendor ID and product ID:



Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc.
Bus 001 Device 004: ID 13d3:5666 IMC Networks
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 062a:410c Creative Labs
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Note: The Creative Labs device is an external mouse.



When I lsusb -vd 0b05:1869 I only see keyboard related descriptors:



Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b05 ASUSTek Computer, Inc.
idProduct 0x1869
bcdDevice 0.03
iManufacturer 1 ITE Tech. Inc.
iProduct 2 ITE Device(8910)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 263
Report Descriptor: (length is 263)
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x10 ] 16
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0xa5 ] 165
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x0f 0xff ] 65295
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x05 ] 5
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff ] 255
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x06 ] 6
Data Variable Relative No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x06 ] 6
Keyboard
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
Control Left
Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
GUI Right
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
NumLock
Item(Local ): Usage Maximum, data= [ 0x05 ] 5
Kana
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x03 ] 3
Item(Main ): Output, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xdf ] 223
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0xe0 ] 224
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x76 ] 118
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5a ] 90
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x79 ] 121
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5d ] 93
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0c ] 12
Consumer
Item(Local ): Usage, data= [ 0x01 ] 1
Consumer Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
Unassigned
Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
AC Format
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x80 ] 128
System Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x04 ] 4
Item(Local ): Usage Minimum, data= [ 0x81 ] 129
System Power Down
Item(Local ): Usage Maximum, data= [ 0x83 ] 131
System Wake Up
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Device Status: 0x0001
Self Powered


This tells me the touchpad side of things is not available to me right now. I can't even see it.



So here are my questions: Why can't I see the touchpad? What can I do to find it and start reverse engineering its driver?



Link to launchpad bug report(with a lot more log files)










share|improve this question






















  • Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
    – jc__
    Jun 20 at 16:50










  • Yes I have already tried the non-free sources for my distro.
    – TaiTair
    Jun 20 at 18:59
















1














I have an Asus GL503VD for which the touchpad doesn't work on linux.



I tried many different distros: Arch, Debian, Ubuntu 16/17/18, Sabayon, Pop_OS, Fedora. None of them made the touchpad work so I settled with Ubuntu 18.04 and decided to debug it myself.



First of, this laptop is pretty new so it will not boot without the acpi=force GRUB parameter. Secondly, it will boot to a black-screen if the module i2c-hid is allowed to load (so I had to blacklist i2c-hid). I am pretty sure i2c-hid is the driver supposed to take care of my touchpad so this is a problem probably worth looking into. The thing is when the module is allowed to load I can't even reach a terminal with a ctrl+alt+f* combo, it's just black, nothingness.



From my Windows partition I could tell that the touchpad is an ELAN1200(not elantech). I tried loading the module hid-elan without any success. Out of desperation I also tried the synaptics module without any luck. Tried various x.org.conf.d configurations which only stopped my laptop from reaching Gnome DE.
Tried using libinput, in vain.



Tried i8042.nomux=1, i8042.noloop, i8042.nopnp, i8042.kdbreset=1, i8042.reset; none of those worked. (From what I gather, my touchpad/keyboard combo might be managed by an i8042 chip; though from the xinput output it looks more like an ITE8910 is managing the combo.)



The xinput output is also what tells me the touchpad might be part of a touchpad/keyboard combo. I think the touchpad and the keyboard are one device: ITE8910



xinput output:



⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ MOSART Semi. USB Device id=12 [slave pointer (2)]
⎜ ↳ ITE Tech. Inc. ITE Device(8910) id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Asus Wireless Radio Control id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Sleep Button id=11 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam: USB2.0 HD id=13 [slave keyboard (3)]
↳ Asus WMI hotkeys id=15 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
↳ ITE Tech. Inc. ITE Device(8910) id=17 [slave keyboard (3)]


The ouput of dmesg tells me the device is connected through USB:



[    2.408602] usb 1-8: new full-speed USB device number 5 using xhci_hcd
[ 2.562105] usb 1-8: New USB device found, idVendor=0b05, idProduct=1869
[ 2.562106] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.562107] usb 1-8: Product: ITE Device(8910)
[ 2.562108] usb 1-8: Manufacturer: ITE Tech. Inc.


If I lsusb I see the right device with vendor ID and product ID:



Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc.
Bus 001 Device 004: ID 13d3:5666 IMC Networks
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 062a:410c Creative Labs
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Note: The Creative Labs device is an external mouse.



When I lsusb -vd 0b05:1869 I only see keyboard related descriptors:



Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b05 ASUSTek Computer, Inc.
idProduct 0x1869
bcdDevice 0.03
iManufacturer 1 ITE Tech. Inc.
iProduct 2 ITE Device(8910)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 263
Report Descriptor: (length is 263)
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x10 ] 16
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0xa5 ] 165
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x0f 0xff ] 65295
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x05 ] 5
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff ] 255
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x06 ] 6
Data Variable Relative No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x06 ] 6
Keyboard
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
Control Left
Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
GUI Right
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
NumLock
Item(Local ): Usage Maximum, data= [ 0x05 ] 5
Kana
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x03 ] 3
Item(Main ): Output, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xdf ] 223
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0xe0 ] 224
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x76 ] 118
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5a ] 90
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x79 ] 121
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5d ] 93
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0c ] 12
Consumer
Item(Local ): Usage, data= [ 0x01 ] 1
Consumer Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
Unassigned
Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
AC Format
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x80 ] 128
System Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x04 ] 4
Item(Local ): Usage Minimum, data= [ 0x81 ] 129
System Power Down
Item(Local ): Usage Maximum, data= [ 0x83 ] 131
System Wake Up
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Device Status: 0x0001
Self Powered


This tells me the touchpad side of things is not available to me right now. I can't even see it.



So here are my questions: Why can't I see the touchpad? What can I do to find it and start reverse engineering its driver?



Link to launchpad bug report(with a lot more log files)










share|improve this question






















  • Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
    – jc__
    Jun 20 at 16:50










  • Yes I have already tried the non-free sources for my distro.
    – TaiTair
    Jun 20 at 18:59














1












1








1







I have an Asus GL503VD for which the touchpad doesn't work on linux.



I tried many different distros: Arch, Debian, Ubuntu 16/17/18, Sabayon, Pop_OS, Fedora. None of them made the touchpad work so I settled with Ubuntu 18.04 and decided to debug it myself.



First of, this laptop is pretty new so it will not boot without the acpi=force GRUB parameter. Secondly, it will boot to a black-screen if the module i2c-hid is allowed to load (so I had to blacklist i2c-hid). I am pretty sure i2c-hid is the driver supposed to take care of my touchpad so this is a problem probably worth looking into. The thing is when the module is allowed to load I can't even reach a terminal with a ctrl+alt+f* combo, it's just black, nothingness.



From my Windows partition I could tell that the touchpad is an ELAN1200(not elantech). I tried loading the module hid-elan without any success. Out of desperation I also tried the synaptics module without any luck. Tried various x.org.conf.d configurations which only stopped my laptop from reaching Gnome DE.
Tried using libinput, in vain.



Tried i8042.nomux=1, i8042.noloop, i8042.nopnp, i8042.kdbreset=1, i8042.reset; none of those worked. (From what I gather, my touchpad/keyboard combo might be managed by an i8042 chip; though from the xinput output it looks more like an ITE8910 is managing the combo.)



The xinput output is also what tells me the touchpad might be part of a touchpad/keyboard combo. I think the touchpad and the keyboard are one device: ITE8910



xinput output:



⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ MOSART Semi. USB Device id=12 [slave pointer (2)]
⎜ ↳ ITE Tech. Inc. ITE Device(8910) id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Asus Wireless Radio Control id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Sleep Button id=11 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam: USB2.0 HD id=13 [slave keyboard (3)]
↳ Asus WMI hotkeys id=15 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
↳ ITE Tech. Inc. ITE Device(8910) id=17 [slave keyboard (3)]


The ouput of dmesg tells me the device is connected through USB:



[    2.408602] usb 1-8: new full-speed USB device number 5 using xhci_hcd
[ 2.562105] usb 1-8: New USB device found, idVendor=0b05, idProduct=1869
[ 2.562106] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.562107] usb 1-8: Product: ITE Device(8910)
[ 2.562108] usb 1-8: Manufacturer: ITE Tech. Inc.


If I lsusb I see the right device with vendor ID and product ID:



Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc.
Bus 001 Device 004: ID 13d3:5666 IMC Networks
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 062a:410c Creative Labs
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Note: The Creative Labs device is an external mouse.



When I lsusb -vd 0b05:1869 I only see keyboard related descriptors:



Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b05 ASUSTek Computer, Inc.
idProduct 0x1869
bcdDevice 0.03
iManufacturer 1 ITE Tech. Inc.
iProduct 2 ITE Device(8910)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 263
Report Descriptor: (length is 263)
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x10 ] 16
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0xa5 ] 165
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x0f 0xff ] 65295
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x05 ] 5
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff ] 255
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x06 ] 6
Data Variable Relative No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x06 ] 6
Keyboard
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
Control Left
Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
GUI Right
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
NumLock
Item(Local ): Usage Maximum, data= [ 0x05 ] 5
Kana
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x03 ] 3
Item(Main ): Output, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xdf ] 223
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0xe0 ] 224
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x76 ] 118
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5a ] 90
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x79 ] 121
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5d ] 93
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0c ] 12
Consumer
Item(Local ): Usage, data= [ 0x01 ] 1
Consumer Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
Unassigned
Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
AC Format
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x80 ] 128
System Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x04 ] 4
Item(Local ): Usage Minimum, data= [ 0x81 ] 129
System Power Down
Item(Local ): Usage Maximum, data= [ 0x83 ] 131
System Wake Up
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Device Status: 0x0001
Self Powered


This tells me the touchpad side of things is not available to me right now. I can't even see it.



So here are my questions: Why can't I see the touchpad? What can I do to find it and start reverse engineering its driver?



Link to launchpad bug report(with a lot more log files)










share|improve this question













I have an Asus GL503VD for which the touchpad doesn't work on linux.



I tried many different distros: Arch, Debian, Ubuntu 16/17/18, Sabayon, Pop_OS, Fedora. None of them made the touchpad work so I settled with Ubuntu 18.04 and decided to debug it myself.



First of, this laptop is pretty new so it will not boot without the acpi=force GRUB parameter. Secondly, it will boot to a black-screen if the module i2c-hid is allowed to load (so I had to blacklist i2c-hid). I am pretty sure i2c-hid is the driver supposed to take care of my touchpad so this is a problem probably worth looking into. The thing is when the module is allowed to load I can't even reach a terminal with a ctrl+alt+f* combo, it's just black, nothingness.



From my Windows partition I could tell that the touchpad is an ELAN1200(not elantech). I tried loading the module hid-elan without any success. Out of desperation I also tried the synaptics module without any luck. Tried various x.org.conf.d configurations which only stopped my laptop from reaching Gnome DE.
Tried using libinput, in vain.



Tried i8042.nomux=1, i8042.noloop, i8042.nopnp, i8042.kdbreset=1, i8042.reset; none of those worked. (From what I gather, my touchpad/keyboard combo might be managed by an i8042 chip; though from the xinput output it looks more like an ITE8910 is managing the combo.)



The xinput output is also what tells me the touchpad might be part of a touchpad/keyboard combo. I think the touchpad and the keyboard are one device: ITE8910



xinput output:



⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ MOSART Semi. USB Device id=12 [slave pointer (2)]
⎜ ↳ ITE Tech. Inc. ITE Device(8910) id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Asus Wireless Radio Control id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Sleep Button id=11 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam: USB2.0 HD id=13 [slave keyboard (3)]
↳ Asus WMI hotkeys id=15 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
↳ ITE Tech. Inc. ITE Device(8910) id=17 [slave keyboard (3)]


The ouput of dmesg tells me the device is connected through USB:



[    2.408602] usb 1-8: new full-speed USB device number 5 using xhci_hcd
[ 2.562105] usb 1-8: New USB device found, idVendor=0b05, idProduct=1869
[ 2.562106] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.562107] usb 1-8: Product: ITE Device(8910)
[ 2.562108] usb 1-8: Manufacturer: ITE Tech. Inc.


If I lsusb I see the right device with vendor ID and product ID:



Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc.
Bus 001 Device 004: ID 13d3:5666 IMC Networks
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 062a:410c Creative Labs
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Note: The Creative Labs device is an external mouse.



When I lsusb -vd 0b05:1869 I only see keyboard related descriptors:



Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b05 ASUSTek Computer, Inc.
idProduct 0x1869
bcdDevice 0.03
iManufacturer 1 ITE Tech. Inc.
iProduct 2 ITE Device(8910)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 263
Report Descriptor: (length is 263)
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x10 ] 16
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0xa5 ] 165
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
(null)
Item(Local ): Usage, data= [ 0x0f 0xff ] 65295
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x05 ] 5
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff ] 255
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x06 ] 6
Data Variable Relative No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x06 ] 6
Keyboard
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
Control Left
Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
GUI Right
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
NumLock
Item(Local ): Usage Maximum, data= [ 0x05 ] 5
Kana
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x03 ] 3
Item(Main ): Output, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xdf ] 223
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0xe0 ] 224
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x76 ] 118
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5a ] 90
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
(null)
Item(Local ): Usage, data= [ 0x79 ] 121
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x5d ] 93
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
(null)
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x10 ] 16
Item(Main ): Feature, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0c ] 12
Consumer
Item(Local ): Usage, data= [ 0x01 ] 1
Consumer Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
Unassigned
Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
AC Format
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x80 ] 128
System Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x04 ] 4
Item(Local ): Usage Minimum, data= [ 0x81 ] 129
System Power Down
Item(Local ): Usage Maximum, data= [ 0x83 ] 131
System Wake Up
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Device Status: 0x0001
Self Powered


This tells me the touchpad side of things is not available to me right now. I can't even see it.



So here are my questions: Why can't I see the touchpad? What can I do to find it and start reverse engineering its driver?



Link to launchpad bug report(with a lot more log files)







linux-kernel drivers usb touchpad reverse-engineering






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jun 20 at 15:55









TaiTair

83




83












  • Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
    – jc__
    Jun 20 at 16:50










  • Yes I have already tried the non-free sources for my distro.
    – TaiTair
    Jun 20 at 18:59


















  • Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
    – jc__
    Jun 20 at 16:50










  • Yes I have already tried the non-free sources for my distro.
    – TaiTair
    Jun 20 at 18:59
















Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
– jc__
Jun 20 at 16:50




Have you tried the "non-free" firmware install DVD from debian? Contains non-opensource firmware (i2c, acpi, etc) for some hardware.
– jc__
Jun 20 at 16:50












Yes I have already tried the non-free sources for my distro.
– TaiTair
Jun 20 at 18:59




Yes I have already tried the non-free sources for my distro.
– TaiTair
Jun 20 at 18:59










3 Answers
3






active

oldest

votes


















0














Partial answer, mostly based on your information that the touchpad is connected via I2C:



Even without i2c_hid you should be able to see the I2C bus(ses), and communicate with the device(s) on them. The package lm-sensors has I2C related programs, as does i2c-tools. Install, read man pages for i2cdetect, i2cdump, i2cget, i2cset.



You may have to modprobe I2C modules, e.g. i2c-dev, if they are not built in your kernel. After that, you should see something in /sys/bus/i2c/devices/, and have the corresponding device nodes under /dev/i2c*. Now you have to figure out what I2C devices you have (there are probably quite a few: FAN control, temperature sensors, BIOS EEPROMs, etc.), and what the touchpad is. Info from the Windows driver may help.



Next step would be to read the i2c_hid source, find out if there are any standardized protocols, google for documentation, and try to send and receive bytes. While at it, also find out why i2c_hid keeps your computer from booting. You need to be able to read and write C code to do this.



The i8042 is the legacy PS/2 controller, it is not related to I2C at all. Unless the touchpad is connected via I2C and this controller, messing with the i8042 kernel stuff won't help at all.



Edit



I googled a bit. The HID over I2C is here (apparently something by Microsoft). Once you get HID over I2C working, you should also read the HID specification. In particular, look at the HID descriptors. Often HID devices have quirks when the reports (touchpad data) are not quite standard.






share|improve this answer























  • May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
    – TaiTair
    Jun 20 at 19:05








  • 1




    I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
    – TaiTair
    Jun 20 at 20:02










  • If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
    – dirkt
    Jun 21 at 4:06






  • 1




    Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
    – TaiTair
    Jun 21 at 15:29





















0














There is a similar Thread on askubuntu:



https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working



I asked at ITE and ASUS for Datasheets, Manuals or Protocol Specification but I had no luck so far but both Tickets are still open.



Unfortunately I think I will have no luck with the Vogons (ASUS First Level Support)



They must have the documents somewhere otherwise they could not have designed the Laptop and also not written the Windows driver, but the Lady Vogon told me fist that they don't support Software or Linux and that they are a Hardware Manufacturer. When I said that normally Datasheets are a Hardware thing she did not answer yet.



What about sniffing i2c the Windows Tocuhpad driver to find the init-sequence and find out how it works.



Then another thing is that for GL703GE that seems to have the same Touchpad and also does not work on Debian nor Ubuntu, the Windows driver on ASUS Website is broken, so they sent me links where I could download working Windows drivers:



try this version
http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip
or this version:
http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip






share|improve this answer





























    -1














    Not sure if this helps but I thought I'd throw some extra info that may be of use. I'm going through a similar problem with a Sony Tap 11 and Linux Mint Cinnamon 19 (and Ubuntu 18), only my touchpad works and the buttons don't in multiple distros. I saw (or didn't) see the same things you did, but haven't gotten as far as you have. I tried plugging in a USB mouse and still had the same problem. Under Windows 10 I also could not identify the type of touchpad and it only said PS2 compatible. I was doing research specific to the Sony Tap 11 which has a wireless keyboard with built-in touchpad. I found and tried most of the standard solutions people over the last 15 years (literally) have tried to resolve such issues on other machines but nothing. Then I learned that Android 4.4 (LineageOS 14.1) will run on the machine and thought I'd see if worked and what I could learn installing it. It might be an avenue worth exploring for your machine. I also thought if Sony set theirs up the same way they may be using the same protocols and have documentation somewhere. This seems to be a common problem with various solutions so I'm hoping someone can put it all together and communicate to the devs who can kill this bug once and for all.






    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "106"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f450909%2ffind-the-right-device-to-reverse-engineer%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      Partial answer, mostly based on your information that the touchpad is connected via I2C:



      Even without i2c_hid you should be able to see the I2C bus(ses), and communicate with the device(s) on them. The package lm-sensors has I2C related programs, as does i2c-tools. Install, read man pages for i2cdetect, i2cdump, i2cget, i2cset.



      You may have to modprobe I2C modules, e.g. i2c-dev, if they are not built in your kernel. After that, you should see something in /sys/bus/i2c/devices/, and have the corresponding device nodes under /dev/i2c*. Now you have to figure out what I2C devices you have (there are probably quite a few: FAN control, temperature sensors, BIOS EEPROMs, etc.), and what the touchpad is. Info from the Windows driver may help.



      Next step would be to read the i2c_hid source, find out if there are any standardized protocols, google for documentation, and try to send and receive bytes. While at it, also find out why i2c_hid keeps your computer from booting. You need to be able to read and write C code to do this.



      The i8042 is the legacy PS/2 controller, it is not related to I2C at all. Unless the touchpad is connected via I2C and this controller, messing with the i8042 kernel stuff won't help at all.



      Edit



      I googled a bit. The HID over I2C is here (apparently something by Microsoft). Once you get HID over I2C working, you should also read the HID specification. In particular, look at the HID descriptors. Often HID devices have quirks when the reports (touchpad data) are not quite standard.






      share|improve this answer























      • May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
        – TaiTair
        Jun 20 at 19:05








      • 1




        I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
        – TaiTair
        Jun 20 at 20:02










      • If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
        – dirkt
        Jun 21 at 4:06






      • 1




        Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
        – TaiTair
        Jun 21 at 15:29


















      0














      Partial answer, mostly based on your information that the touchpad is connected via I2C:



      Even without i2c_hid you should be able to see the I2C bus(ses), and communicate with the device(s) on them. The package lm-sensors has I2C related programs, as does i2c-tools. Install, read man pages for i2cdetect, i2cdump, i2cget, i2cset.



      You may have to modprobe I2C modules, e.g. i2c-dev, if they are not built in your kernel. After that, you should see something in /sys/bus/i2c/devices/, and have the corresponding device nodes under /dev/i2c*. Now you have to figure out what I2C devices you have (there are probably quite a few: FAN control, temperature sensors, BIOS EEPROMs, etc.), and what the touchpad is. Info from the Windows driver may help.



      Next step would be to read the i2c_hid source, find out if there are any standardized protocols, google for documentation, and try to send and receive bytes. While at it, also find out why i2c_hid keeps your computer from booting. You need to be able to read and write C code to do this.



      The i8042 is the legacy PS/2 controller, it is not related to I2C at all. Unless the touchpad is connected via I2C and this controller, messing with the i8042 kernel stuff won't help at all.



      Edit



      I googled a bit. The HID over I2C is here (apparently something by Microsoft). Once you get HID over I2C working, you should also read the HID specification. In particular, look at the HID descriptors. Often HID devices have quirks when the reports (touchpad data) are not quite standard.






      share|improve this answer























      • May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
        – TaiTair
        Jun 20 at 19:05








      • 1




        I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
        – TaiTair
        Jun 20 at 20:02










      • If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
        – dirkt
        Jun 21 at 4:06






      • 1




        Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
        – TaiTair
        Jun 21 at 15:29
















      0












      0








      0






      Partial answer, mostly based on your information that the touchpad is connected via I2C:



      Even without i2c_hid you should be able to see the I2C bus(ses), and communicate with the device(s) on them. The package lm-sensors has I2C related programs, as does i2c-tools. Install, read man pages for i2cdetect, i2cdump, i2cget, i2cset.



      You may have to modprobe I2C modules, e.g. i2c-dev, if they are not built in your kernel. After that, you should see something in /sys/bus/i2c/devices/, and have the corresponding device nodes under /dev/i2c*. Now you have to figure out what I2C devices you have (there are probably quite a few: FAN control, temperature sensors, BIOS EEPROMs, etc.), and what the touchpad is. Info from the Windows driver may help.



      Next step would be to read the i2c_hid source, find out if there are any standardized protocols, google for documentation, and try to send and receive bytes. While at it, also find out why i2c_hid keeps your computer from booting. You need to be able to read and write C code to do this.



      The i8042 is the legacy PS/2 controller, it is not related to I2C at all. Unless the touchpad is connected via I2C and this controller, messing with the i8042 kernel stuff won't help at all.



      Edit



      I googled a bit. The HID over I2C is here (apparently something by Microsoft). Once you get HID over I2C working, you should also read the HID specification. In particular, look at the HID descriptors. Often HID devices have quirks when the reports (touchpad data) are not quite standard.






      share|improve this answer














      Partial answer, mostly based on your information that the touchpad is connected via I2C:



      Even without i2c_hid you should be able to see the I2C bus(ses), and communicate with the device(s) on them. The package lm-sensors has I2C related programs, as does i2c-tools. Install, read man pages for i2cdetect, i2cdump, i2cget, i2cset.



      You may have to modprobe I2C modules, e.g. i2c-dev, if they are not built in your kernel. After that, you should see something in /sys/bus/i2c/devices/, and have the corresponding device nodes under /dev/i2c*. Now you have to figure out what I2C devices you have (there are probably quite a few: FAN control, temperature sensors, BIOS EEPROMs, etc.), and what the touchpad is. Info from the Windows driver may help.



      Next step would be to read the i2c_hid source, find out if there are any standardized protocols, google for documentation, and try to send and receive bytes. While at it, also find out why i2c_hid keeps your computer from booting. You need to be able to read and write C code to do this.



      The i8042 is the legacy PS/2 controller, it is not related to I2C at all. Unless the touchpad is connected via I2C and this controller, messing with the i8042 kernel stuff won't help at all.



      Edit



      I googled a bit. The HID over I2C is here (apparently something by Microsoft). Once you get HID over I2C working, you should also read the HID specification. In particular, look at the HID descriptors. Often HID devices have quirks when the reports (touchpad data) are not quite standard.







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Jun 21 at 4:57

























      answered Jun 20 at 18:45









      dirkt

      16.6k21335




      16.6k21335












      • May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
        – TaiTair
        Jun 20 at 19:05








      • 1




        I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
        – TaiTair
        Jun 20 at 20:02










      • If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
        – dirkt
        Jun 21 at 4:06






      • 1




        Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
        – TaiTair
        Jun 21 at 15:29




















      • May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
        – TaiTair
        Jun 20 at 19:05








      • 1




        I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
        – TaiTair
        Jun 20 at 20:02










      • If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
        – dirkt
        Jun 21 at 4:06






      • 1




        Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
        – TaiTair
        Jun 21 at 15:29


















      May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
      – TaiTair
      Jun 20 at 19:05






      May be partial but I am very tempted to accept your answer. You have given me very helpful insight. I am 95% sure this touchpad is connected over i2c because the windows partition clearly states: hid over i2c for that device. Additionally, since you mentioned fan control should be over i2c that probably explains why lm-sensors doesn't give me any fan speed. You are right, messing with i8042 did not change anything either. I will look into i2c and get back to you - possibly accepting your answer. Note: i2c-tools was already part of my system.
      – TaiTair
      Jun 20 at 19:05






      1




      1




      I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
      – TaiTair
      Jun 20 at 20:02




      I found it in /sys/bus/i2c/devices as i2c-ELAN1200:00 Thank you so much, now I can keep working at it. And you have answered my questions.
      – TaiTair
      Jun 20 at 20:02












      If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
      – dirkt
      Jun 21 at 4:06




      If it's named i2c-ELAN 1200:00, you actually have some working I2C modules in your stack that understand at least part of the protocol, and assigned a proper name (usually, I2C devices are just indentified by bus number, and device address on this bus). I don't know what protocol this is, but having a look at lsmod might allow to figure it out.
      – dirkt
      Jun 21 at 4:06




      1




      1




      Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
      – TaiTair
      Jun 21 at 15:29






      Your last Edit has very helpful information - thanks! I managed to make a driver from kernel 4.17.2 work. So I don't have to reverse-engineer too much anymore, now I have to debug. I will hold on to those specifications though, very good resources.
      – TaiTair
      Jun 21 at 15:29















      0














      There is a similar Thread on askubuntu:



      https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working



      I asked at ITE and ASUS for Datasheets, Manuals or Protocol Specification but I had no luck so far but both Tickets are still open.



      Unfortunately I think I will have no luck with the Vogons (ASUS First Level Support)



      They must have the documents somewhere otherwise they could not have designed the Laptop and also not written the Windows driver, but the Lady Vogon told me fist that they don't support Software or Linux and that they are a Hardware Manufacturer. When I said that normally Datasheets are a Hardware thing she did not answer yet.



      What about sniffing i2c the Windows Tocuhpad driver to find the init-sequence and find out how it works.



      Then another thing is that for GL703GE that seems to have the same Touchpad and also does not work on Debian nor Ubuntu, the Windows driver on ASUS Website is broken, so they sent me links where I could download working Windows drivers:



      try this version
      http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip
      or this version:
      http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip






      share|improve this answer


























        0














        There is a similar Thread on askubuntu:



        https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working



        I asked at ITE and ASUS for Datasheets, Manuals or Protocol Specification but I had no luck so far but both Tickets are still open.



        Unfortunately I think I will have no luck with the Vogons (ASUS First Level Support)



        They must have the documents somewhere otherwise they could not have designed the Laptop and also not written the Windows driver, but the Lady Vogon told me fist that they don't support Software or Linux and that they are a Hardware Manufacturer. When I said that normally Datasheets are a Hardware thing she did not answer yet.



        What about sniffing i2c the Windows Tocuhpad driver to find the init-sequence and find out how it works.



        Then another thing is that for GL703GE that seems to have the same Touchpad and also does not work on Debian nor Ubuntu, the Windows driver on ASUS Website is broken, so they sent me links where I could download working Windows drivers:



        try this version
        http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip
        or this version:
        http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip






        share|improve this answer
























          0












          0








          0






          There is a similar Thread on askubuntu:



          https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working



          I asked at ITE and ASUS for Datasheets, Manuals or Protocol Specification but I had no luck so far but both Tickets are still open.



          Unfortunately I think I will have no luck with the Vogons (ASUS First Level Support)



          They must have the documents somewhere otherwise they could not have designed the Laptop and also not written the Windows driver, but the Lady Vogon told me fist that they don't support Software or Linux and that they are a Hardware Manufacturer. When I said that normally Datasheets are a Hardware thing she did not answer yet.



          What about sniffing i2c the Windows Tocuhpad driver to find the init-sequence and find out how it works.



          Then another thing is that for GL703GE that seems to have the same Touchpad and also does not work on Debian nor Ubuntu, the Windows driver on ASUS Website is broken, so they sent me links where I could download working Windows drivers:



          try this version
          http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip
          or this version:
          http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip






          share|improve this answer












          There is a similar Thread on askubuntu:



          https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working



          I asked at ITE and ASUS for Datasheets, Manuals or Protocol Specification but I had no luck so far but both Tickets are still open.



          Unfortunately I think I will have no luck with the Vogons (ASUS First Level Support)



          They must have the documents somewhere otherwise they could not have designed the Laptop and also not written the Windows driver, but the Lady Vogon told me fist that they don't support Software or Linux and that they are a Hardware Manufacturer. When I said that normally Datasheets are a Hardware thing she did not answer yet.



          What about sniffing i2c the Windows Tocuhpad driver to find the init-sequence and find out how it works.



          Then another thing is that for GL703GE that seems to have the same Touchpad and also does not work on Debian nor Ubuntu, the Windows driver on ASUS Website is broken, so they sent me links where I could download working Windows drivers:



          try this version
          http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip
          or this version:
          http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jul 18 at 16:28









          Marc Landolt

          1




          1























              -1














              Not sure if this helps but I thought I'd throw some extra info that may be of use. I'm going through a similar problem with a Sony Tap 11 and Linux Mint Cinnamon 19 (and Ubuntu 18), only my touchpad works and the buttons don't in multiple distros. I saw (or didn't) see the same things you did, but haven't gotten as far as you have. I tried plugging in a USB mouse and still had the same problem. Under Windows 10 I also could not identify the type of touchpad and it only said PS2 compatible. I was doing research specific to the Sony Tap 11 which has a wireless keyboard with built-in touchpad. I found and tried most of the standard solutions people over the last 15 years (literally) have tried to resolve such issues on other machines but nothing. Then I learned that Android 4.4 (LineageOS 14.1) will run on the machine and thought I'd see if worked and what I could learn installing it. It might be an avenue worth exploring for your machine. I also thought if Sony set theirs up the same way they may be using the same protocols and have documentation somewhere. This seems to be a common problem with various solutions so I'm hoping someone can put it all together and communicate to the devs who can kill this bug once and for all.






              share|improve this answer


























                -1














                Not sure if this helps but I thought I'd throw some extra info that may be of use. I'm going through a similar problem with a Sony Tap 11 and Linux Mint Cinnamon 19 (and Ubuntu 18), only my touchpad works and the buttons don't in multiple distros. I saw (or didn't) see the same things you did, but haven't gotten as far as you have. I tried plugging in a USB mouse and still had the same problem. Under Windows 10 I also could not identify the type of touchpad and it only said PS2 compatible. I was doing research specific to the Sony Tap 11 which has a wireless keyboard with built-in touchpad. I found and tried most of the standard solutions people over the last 15 years (literally) have tried to resolve such issues on other machines but nothing. Then I learned that Android 4.4 (LineageOS 14.1) will run on the machine and thought I'd see if worked and what I could learn installing it. It might be an avenue worth exploring for your machine. I also thought if Sony set theirs up the same way they may be using the same protocols and have documentation somewhere. This seems to be a common problem with various solutions so I'm hoping someone can put it all together and communicate to the devs who can kill this bug once and for all.






                share|improve this answer
























                  -1












                  -1








                  -1






                  Not sure if this helps but I thought I'd throw some extra info that may be of use. I'm going through a similar problem with a Sony Tap 11 and Linux Mint Cinnamon 19 (and Ubuntu 18), only my touchpad works and the buttons don't in multiple distros. I saw (or didn't) see the same things you did, but haven't gotten as far as you have. I tried plugging in a USB mouse and still had the same problem. Under Windows 10 I also could not identify the type of touchpad and it only said PS2 compatible. I was doing research specific to the Sony Tap 11 which has a wireless keyboard with built-in touchpad. I found and tried most of the standard solutions people over the last 15 years (literally) have tried to resolve such issues on other machines but nothing. Then I learned that Android 4.4 (LineageOS 14.1) will run on the machine and thought I'd see if worked and what I could learn installing it. It might be an avenue worth exploring for your machine. I also thought if Sony set theirs up the same way they may be using the same protocols and have documentation somewhere. This seems to be a common problem with various solutions so I'm hoping someone can put it all together and communicate to the devs who can kill this bug once and for all.






                  share|improve this answer












                  Not sure if this helps but I thought I'd throw some extra info that may be of use. I'm going through a similar problem with a Sony Tap 11 and Linux Mint Cinnamon 19 (and Ubuntu 18), only my touchpad works and the buttons don't in multiple distros. I saw (or didn't) see the same things you did, but haven't gotten as far as you have. I tried plugging in a USB mouse and still had the same problem. Under Windows 10 I also could not identify the type of touchpad and it only said PS2 compatible. I was doing research specific to the Sony Tap 11 which has a wireless keyboard with built-in touchpad. I found and tried most of the standard solutions people over the last 15 years (literally) have tried to resolve such issues on other machines but nothing. Then I learned that Android 4.4 (LineageOS 14.1) will run on the machine and thought I'd see if worked and what I could learn installing it. It might be an avenue worth exploring for your machine. I also thought if Sony set theirs up the same way they may be using the same protocols and have documentation somewhere. This seems to be a common problem with various solutions so I'm hoping someone can put it all together and communicate to the devs who can kill this bug once and for all.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 19 at 2:19









                  Jake Lockley

                  1




                  1






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Unix & Linux Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f450909%2ffind-the-right-device-to-reverse-engineer%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      List directoties down one level, excluding some named directories and files

                      list processes belonging to a network namespace

                      list systemd RuntimeDirectory mounts