[BUG] I2C HID touchpad BLTP7853:00 347D:7853 enumerates but reports no events on MECHREVO XINGYAO Series-P916F-PTL
From: Steve Yang <hidden>
Date: 2026-06-29 14:15:47
Also in:
linux-acpi, linux-gpio, linux-i2c
Hello,
Resending as plain text; sorry if this is a duplicate. My previous
message was rejected by linux-acpi because Gmail sent a HTML part.
I am seeing a non-working internal I2C HID touchpad on a new MECHREVO
laptop. The device enumerates, binds to i2c_hid_acpi + hid-multitouch,
and userspace sees it as a touchpad, but touching/clicking it produces
no input events. The GPIO interrupt counter also does not increase
while touching the pad.
I am new to kernel debugging, but I have the machine here and can test
patches, ACPI overrides, debug kernels, etc.
Hardware
========
DMI, with serial/UUID intentionally omitted:
BIOS Vendor: MECHREVO
BIOS Version: 1.00
BIOS Release Date: 03/14/2026
Firmware Revision: 1.48
EC Firmware Revision: 1.0
System Manufacturer: MECHREVO
Product Name: XINGYAO Series
Family: Panther Lake
Base Board Product Name: XINGYAO Series-P916F-PTL
Software
========
Linux archbook 7.0.14-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 27 Jun
2026 16:15:10 +0000 x86_64 GNU/Linux
linux-firmware 20260622-1
libinput 1.31.3
hid-tools 0.12
acpica 20251212
Kernel command line at initial capture time:
BOOT_IMAGE=/vmlinuz-linux root=UUID=<omitted> rw rootflags=subvol=@
loglevel=3 quiet
Device identification
=====================
/sys/bus/i2c/devices/i2c-BLTP7853:00/uevent:
DRIVER=i2c_hid_acpi
MODALIAS=acpi:BLTP7853:PNP0C50:
/sys/bus/hid/devices/0018:347D:7853.0001/uevent:
DRIVER=hid-multitouch
HID_ID=0018:0000347D:00007853
HID_NAME=BLTP7853:00 347D:7853
HID_PHYS=i2c-BLTP7853:00
MODALIAS=hid:b0018g0004v0000347Dp00007853
udev for /dev/input/event5:
DEVNAME=/dev/input/event5
ID_INPUT=1
ID_INPUT_TOUCHPAD=1
ID_INPUT_WIDTH_MM=115
ID_INPUT_HEIGHT_MM=72
ID_BUS=i2c
ID_INTEGRATION=internal
ID_INPUT_TOUCHPAD_INTEGRATION=internal
LIBINPUT_DEVICE_GROUP=18/347d/7853:i2c-BLTP7853:00
Symptoms / tests
================
1. dmesg shows the device binding successfully:
input: BLTP7853:00 347D:7853 Mouse ...
input: BLTP7853:00 347D:7853 Touchpad ...
hid-generic 0018:347D:7853.0001: input,hidraw0: I2C HID v1.00 Mouse
[BLTP7853:00 347D:7853] on i2c-BLTP7853:00
input: BLTP7853:00 347D:7853 Touchpad ...
hid-multitouch 0018:347D:7853.0001: input,hidraw0: I2C HID v1.00
Mouse [BLTP7853:00 347D:7853] on i2c-BLTP7853:00
2. evtest on /dev/input/event5 shows normal-looking touchpad
capabilities, for example
ABS_X/ABS_Y/ABS_MT_POSITION_X/ABS_MT_POSITION_Y/ABS_MT_SLOT/ABS_MT_TRACKING_ID
and BTN_TOUCH/BTN_LEFT. However, during physical touch/click tests it
prints no events after:
Testing ... (interrupt to exit)
3. /proc/interrupts has an IRQ for the touchpad in the original ACPI
configuration:
intel-gpio 18 BLTP7853:00
While physically touching/clicking the touchpad, the counter did not increase.
4. debugfs gpio shows this line as claimed by the touchpad and high:
gpiochip1: 51 GPIOs, parent: platform/INTC10BC:01, INTC10BC:01:
gpio-18 ( |TPD0 GpioInt(0) ) in hi IRQ
5. KDE/libinput sees a touchpad-class input device, but the pointer
does not move and clicks do not work.
Things already tried
====================
None of these changed the behavior:
- acpi_osi=Windows 2021
- BIOS option named "Enable Windows OSI"
- unbind/bind i2c-BLTP7853:00 from i2c_hid_acpi
- echo on > /sys/bus/i2c/devices/i2c-BLTP7853:00/power/control
- unloading huawei_wmi
- setting HID feature Inputmode=3 with hid-feature
- setting HID feature Surface Switch=1 and Button Switch=1
ACPI override experiments
=========================
The kernel supports ACPI table upgrade, and I confirmed the modified
SSDT was loaded each time via dmesg, for example:
ACPI: Table Upgrade: override [SSDT-XXXXXX-I2C_DEVT]
I tried these changes to the touchpad GpioInt resource:
original: GpioInt(Level, ActiveLow, ...)
test 1: GpioInt(Level, ActiveHigh, ...)
test 2: GpioInt(Edge, ActiveLow, ...)
test 3: GpioInt(Edge, ActiveHigh, ...)
All three GpioInt variants still resulted in an intel-gpio IRQ for
BLTP7853:00, but the IRQ counter did not increase while
touching/clicking the touchpad.
I also forced _CRS to return the SBFI Interrupt() resource instead of
the SBFG GpioInt() resource. That changed the interrupt to:
IR-IO-APIC 84-fasteoi BLTP7853:00
but it caused an apparent interrupt storm, with the counter increasing
by thousands over a few seconds, and still no evtest events. So the
Interrupt() path does not look correct either.
ACPI notes
==========
The touchpad ACPI device appears in SSDT under:
\_SB.PC00.I2C5.TPD0
Relevant decompiled pieces from ssdt18.dsl:
Scope (\_SB.PC00.I2C5)
{
Device (TPD0)
{
Name (HID2, Zero)
...
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.GPI1", 0x00, ResourceConsumer, ,)
{ 0x0000 }
})
Name (SBFI, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Level, ActiveLow,
ExclusiveAndWake, ,, _Y08)
{
0x00000000,
}
})
CreateWordField (SBFB, \_SB.PC00.I2C5.TPD0._Y07._ADR, BADR)
CreateDWordField (SBFB, \_SB.PC00.I2C5.TPD0._Y07._SPE, SPED)
CreateWordField (SBFG, 0x17, INT1)
CreateDWordField (SBFI, \_SB.PC00.I2C5.TPD0._Y08._INT, INT2)
Method (_INI, 0, NotSerialized)
{
INT1 = GNUM (\TPIT)
INT2 = INUM (\TPIT)
If ((TPDM == Zero))
{
SHPO (\TPIT, One)
}
SGRA (\TPIT, TPDM)
If ((TPDM == One))
{
SGII (\TPIT, Zero)
GRXE (\TPIT, Zero)
}
If ((\TPTY == One))
{
_HID = "BLTP7853"
HID2 = One
BADR = 0x2C
SPED = 0x00061A80
Return (Zero)
}
}
Name (_HID, "XXXX0000")
Name (_CID, "PNP0C50")
Method (_CRS, 0, NotSerialized)
{
If ((TPDM == Zero))
{
Return (ConcatenateResTemplate (I2CM (I2CX, BADR,
SPED), SBFG))
}
Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFI))
}
}
}
ssdt13.dsl defines the NVS fields used by that code:
OperationRegion (LCNV, SystemMemory, 0x6FDE4000, 0x0300)
Field (LCNV, AnyAcc, Lock, Preserve)
{
EDID, 4096,
TPTY, 8,
TPST, 8,
TPIT, 32,
...
}
A possibly relevant observation from the same SSDT: under
\_SB.PC00.I2C5, TPD0 seems to use the PXTC power resource, and the
Arg0==0 path in PON() appears to only route/configure IRQ. The Arg0==1
path, apparently for the touch panel PTPL resource, is the one that
toggles TPWR/TRST GPIOs. I have not tested overriding TPD0 to use that
power resource yet.
Question
========
Does this still look like an ACPI GPIO/resource issue, or should I now
focus on an i2c-hid/hid-multitouch quirk or a missing vendor-specific
reset/init sequence for HID 347D:7853?
I have a full debug bundle available, including acpidump, decompiled
SSDTs, dmesg, udev info, evtest output, hid-recorder output,
dmidecode, and /proc/interrupts snapshots. I can provide any specific
files or test patches you want.
Thanks,
Steve