Hello,

I'm reporting an I2C touchpad problem on a Google Chromebook Edgar running 
OpenBSD 7.9 amd64.

Hardware:
   
   - Google Chromebook Edgar
   - Intel Celeron N3160
   - 4 GB RAM
   - Coreboot / MrChromebox 2606.1
   - OpenBSD 7.9 amd64

The touchpad is detected, but its interrupt cannot be established:
dwiic1 at acpi0 I2C6 addr 0xfccdc000/0x1000 irq 37
iic1 at dwiic1
ietp0 at iic1 addr 0x15, can't establish interrupt
The touchpad works with an Artix Linux live system on the same hardware, and a 
USB mouse works normally under OpenBSD.

I investigated the failure through ietp_attach(), iic_intr_establish(), and 
dwiic_i2c_intr_establish(). The touchpad's ACPI interrupt resource refers to 
the GPNC GPIO controller.

I found that IETP attempts to establish its interrupt before the GPNC GPIO 
driver has attached. At that point the ACPI node exists, but its GPIO 
information has not been initialized.

As an experiment, I modified dwiic to defer IETP discovery if its GPIO provider 
has not attached yet. After the GPIO driver attaches, I rescan the DWIIC ACPI 
devices. With this change the ordering becomes:
chvgpio1 at acpi0 GPNC ...
ietp0 at iic1 addr 0x15 gpio 18
and the touchpad works.

I have attached the experimental patch/workaround. This is intended mainly to 
demonstrate the cause and provide a working test case.

The modified source tree is available here in the branch chromebook-cb3-431 :
 
https://github.com/Grabyy/OpenBSD_src_Chromebook-CB3-431_custom/tree/chromebook-cb3-431


If you need any additional information or testing, please let me know. I'm new 
to OpenBSD kernel development, so I'm happy to provide anything that would be 
useful.

Thanks,Gabriel.



Attachment: dwiic-ietp.patch
Description: Binary data

Reply via email to