* Help getting ELAN066C touchpad working in Linux
@ 2023-10-14 17:12 jdieter
2023-10-14 19:39 ` Hans de Goede
0 siblings, 1 reply; 6+ messages in thread
From: jdieter @ 2023-10-14 17:12 UTC (permalink / raw)
To: Dmitry Torokhov, Hans de Goede, linux-input
[-- Attachment #1: Type: text/plain, Size: 2238 bytes --]
Hi Dmitry, Hans, input mailing list,
I have two Lenovo 300e laptops, one running Windows and the other
Fedora. The laptop has a touchscreen, a stylus and a touchpad. The
touch screen and stylus work perfectly, but, under Fedora, the touchpad
doesn't work at all and isn't detected by the kernel.
The device shows up in /sys/bus/acpi/devices/ELAN066C:00/ with a
modalias of acpi:ELAN066C:PNP0C50:.
I'm not sure if the touchpad should be using elan_i2c or i2c_hid_acpi.
In a somewhat naive attempt to get something to happen, I added:
```
{ "ELAN066C", 0 }, /* Lenovo 100e/300e 2nd gen AMD */
```
to include/linux/input/elan-i2c-ids.h, but the kernel still doesn't
auto-load the module.
I can get elan_i2c to recognize something if I run:
# echo elan_i2c 0x15 > /sys/bus/i2c/devices/i2c-1/new_device
but the IRQ defaults to 0, and I get an error about an IRQ conflict:
```
[ 2317.791897] i2c i2c-1: delete_device: Deleting device elan_i2c at
0x15
[ 2319.317468] i2c i2c-1: new_device: Instantiated device elan_i2c at
0x15
[ 2319.317662] elan_i2c 1-0015: supply vcc not found, using dummy
regulator
[ 2319.433176] elan_i2c 1-0015: Elan Touchpad: Module ID: 0x00be,
Firmware: 0x0003, Sample: 0x0003, IAP: 0x000e
[ 2319.433184] elan_i2c 1-0015: Elan Touchpad Extra Information:
Max ABS X,Y: 3206,1828
Width X,Y: 152,152
Resolution X,Y: 31,31 (dots/mm)
ic type: 0xa
info pattern: 0x0
[ 2319.433339] genirq: Flags mismatch irq 0. 00002008 (elan_i2c) vs.
00015a00 (timer)
```
By manually setting the IRQ to an unused value in the driver, I can at
least get the driver to create a new mouse device in /dev/input, but
the touchpad still doesn't work.
At this point, I don't know if I'm really close or barking up the
completely wrong tree.
A bug report from earlier this year about an identical system is at:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1976556
Attached is the dsl of the device in ACPI.
I would really appreciate any help in figuring out how to get this
working. Please let me know if there's anything else you need from me.
Thanks,
Jonathan
[-- Attachment #2: TDP0.dsl --]
[-- Type: text/x-dsl, Size: 3654 bytes --]
Device (TPD0)
{
Name (_HID, "ELAN066C") // _HID: Hardware ID
Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */) // _CID: Compatible ID
ICMS = 0x0A
DCMS = 0x01
ICMS = 0x20
CDAT = DCMS /* \DCMS */
If ((CDAT == 0x02))
{
_HID = "SYNA2392"
}
If ((CDAT == 0x01))
{
_HID = "ELAN066C"
}
Name (PPRW, Package (0x02)
{
0x16,
0x03
})
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (PPRW) /* \_SB_.I2CD.TPD0.PPRW */
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((CDAT == 0x00))
{
Return (0x00)
}
Else
{
Return (0x0F)
}
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
{
Switch (ToInteger (Arg2))
{
Case (0x00)
{
Switch (ToInteger (Arg1))
{
Case (0x01)
{
Return (Buffer (0x01)
{
0x03 // .
})
}
Default
{
Return (Buffer (0x01)
{
0x00 // .
})
}
}
}
Case (0x01)
{
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
{
Return (0x01)
}
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x02))
{
Return (0x20)
}
}
Default
{
Return (0x00)
}
}
}
Else
{
Return (Buffer (0x01)
{
0x00 // .
})
}
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullUp, 0x0000,
"\\_SB.GPIO", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0009
}
})
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.I2CD",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFB, SBFG))
}
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x02))
{
Name (SBFC, ResourceTemplate ()
{
I2cSerialBusV2 (0x002C, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.I2CD",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFC, SBFG))
}
}
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Help getting ELAN066C touchpad working in Linux
2023-10-14 17:12 Help getting ELAN066C touchpad working in Linux jdieter
@ 2023-10-14 19:39 ` Hans de Goede
2023-10-14 20:22 ` Jonathan Dieter
0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2023-10-14 19:39 UTC (permalink / raw)
To: jdieter, Dmitry Torokhov, linux-input
Hi Jonathan,
For starters, did you see this in dmesg? :
[ 0.422648] i8042: PNP: PS/2 Controller [PNP0303:KBC0] at 0x60,0x64 irq 1
[ 0.422652] i8042: PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp
And did you try booting with "i8042.nopnp" ?
Also what is the output of:
ls -l /sys/bus/i2c/devices
and of:
ls -l /sys/bus/acpi/devices/ELAN066C:00/
and of:
cat /sys/bus/acpi/devices/ELAN066C:00/status
?
Regards,
Hans
On 10/14/23 19:12, jdieter@gmail.com wrote:
> Hi Dmitry, Hans, input mailing list,
>
> I have two Lenovo 300e laptops, one running Windows and the other
> Fedora. The laptop has a touchscreen, a stylus and a touchpad. The
> touch screen and stylus work perfectly, but, under Fedora, the touchpad
> doesn't work at all and isn't detected by the kernel.
>
> The device shows up in /sys/bus/acpi/devices/ELAN066C:00/ with a
> modalias of acpi:ELAN066C:PNP0C50:.
>
> I'm not sure if the touchpad should be using elan_i2c or i2c_hid_acpi.
> In a somewhat naive attempt to get something to happen, I added:
> ```
> { "ELAN066C", 0 }, /* Lenovo 100e/300e 2nd gen AMD */
> ```
> to include/linux/input/elan-i2c-ids.h, but the kernel still doesn't
> auto-load the module.
>
> I can get elan_i2c to recognize something if I run:
> # echo elan_i2c 0x15 > /sys/bus/i2c/devices/i2c-1/new_device
> but the IRQ defaults to 0, and I get an error about an IRQ conflict:
>
> ```
> [ 2317.791897] i2c i2c-1: delete_device: Deleting device elan_i2c at
> 0x15
> [ 2319.317468] i2c i2c-1: new_device: Instantiated device elan_i2c at
> 0x15
> [ 2319.317662] elan_i2c 1-0015: supply vcc not found, using dummy
> regulator
> [ 2319.433176] elan_i2c 1-0015: Elan Touchpad: Module ID: 0x00be,
> Firmware: 0x0003, Sample: 0x0003, IAP: 0x000e
> [ 2319.433184] elan_i2c 1-0015: Elan Touchpad Extra Information:
> Max ABS X,Y: 3206,1828
> Width X,Y: 152,152
> Resolution X,Y: 31,31 (dots/mm)
> ic type: 0xa
> info pattern: 0x0
> [ 2319.433339] genirq: Flags mismatch irq 0. 00002008 (elan_i2c) vs.
> 00015a00 (timer)
> ```
>
> By manually setting the IRQ to an unused value in the driver, I can at
> least get the driver to create a new mouse device in /dev/input, but
> the touchpad still doesn't work.
>
> At this point, I don't know if I'm really close or barking up the
> completely wrong tree.
>
> A bug report from earlier this year about an identical system is at:
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1976556
>
> Attached is the dsl of the device in ACPI.
>
> I would really appreciate any help in figuring out how to get this
> working. Please let me know if there's anything else you need from me.
>
> Thanks,
>
> Jonathan
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Help getting ELAN066C touchpad working in Linux
2023-10-14 19:39 ` Hans de Goede
@ 2023-10-14 20:22 ` Jonathan Dieter
2023-10-14 20:30 ` Hans de Goede
0 siblings, 1 reply; 6+ messages in thread
From: Jonathan Dieter @ 2023-10-14 20:22 UTC (permalink / raw)
To: Hans de Goede, Dmitry Torokhov, linux-input
On Sat, 2023-10-14 at 21:39 +0200, Hans de Goede wrote:
> Hi Jonathan,
>
> For starters, did you see this in dmesg? :
>
> [ 0.422648] i8042: PNP: PS/2 Controller [PNP0303:KBC0] at
> 0x60,0x64 irq 1
> [ 0.422652] i8042: PNP: PS/2 appears to have AUX port disabled, if
> this is incorrect please boot with i8042.nopnp
>
> And did you try booting with "i8042.nopnp" ?
>
> Also what is the output of:
>
> ls -l /sys/bus/i2c/devices
>
> and of:
>
> ls -l /sys/bus/acpi/devices/ELAN066C:00/
>
> and of:
>
> cat /sys/bus/acpi/devices/ELAN066C:00/status
>
> ?
Hey Hans,
Yeah, I did see that in my dmesg and did try i8042.nopnp by itself and
with combinations of pci=nocrs and the other i8042 options, with no
effect except breaking audio.
# ls -l /sys/bus/i2c/devices
total 0
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-0 -> ../../../devices/platform/AMDI0010:00/i2c-0
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-1 -> ../../../devices/platform/AMDI0010:01/i2c-1
lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-2 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-2
lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-3 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-3
lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-4 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-4
lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-5 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-eDP-1/i2c-5
lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-6 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-DP-1/i2c-6
lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-7 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-7
lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-8 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-8
lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-9 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-9
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-ELAN238E:00 -> ../../../devices/platform/AMDI0010:00/i2c-0/i2c-ELAN238E:00
# ls -l /sys/bus/acpi/devices/ELAN066C:00/
total 0
-r--r--r--. 1 root root 4096 Oct 14 21:16 hid
-r--r--r--. 1 root root 4096 Oct 14 21:16 modalias
-r--r--r--. 1 root root 4096 Oct 14 21:16 path
lrwxrwxrwx. 1 root root 0 Oct 14 21:16 physical_node -> ../../../../platform/AMDI0010:01/ELAN066C:00
drwxr-xr-x. 2 root root 0 Oct 14 21:16 power
-r--r--r--. 1 root root 4096 Oct 14 21:16 status
lrwxrwxrwx. 1 root root 0 Oct 14 2023 subsystem -> ../../../../../bus/acpi
-rw-r--r--. 1 root root 4096 Oct 14 2023 uevent
# cat /sys/bus/acpi/devices/ELAN066C:00/status
15
The above is exactly the same on a clean Fedora 6.5.6 kernel and my
custom build with the alias added to elan_i2c.
Thanks for the swift reply!
Jonathan
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Help getting ELAN066C touchpad working in Linux
2023-10-14 20:22 ` Jonathan Dieter
@ 2023-10-14 20:30 ` Hans de Goede
2023-10-14 21:16 ` Jonathan Dieter
0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2023-10-14 20:30 UTC (permalink / raw)
To: Jonathan Dieter, Dmitry Torokhov, linux-input
Hi,
On 10/14/23 22:22, Jonathan Dieter wrote:
> On Sat, 2023-10-14 at 21:39 +0200, Hans de Goede wrote:
>> Hi Jonathan,
>>
>> For starters, did you see this in dmesg? :
>>
>> [ 0.422648] i8042: PNP: PS/2 Controller [PNP0303:KBC0] at
>> 0x60,0x64 irq 1
>> [ 0.422652] i8042: PNP: PS/2 appears to have AUX port disabled, if
>> this is incorrect please boot with i8042.nopnp
>>
>> And did you try booting with "i8042.nopnp" ?
>>
>> Also what is the output of:
>>
>> ls -l /sys/bus/i2c/devices
>>
>> and of:
>>
>> ls -l /sys/bus/acpi/devices/ELAN066C:00/
>>
>> and of:
>>
>> cat /sys/bus/acpi/devices/ELAN066C:00/status
>>
>> ?
>
> Hey Hans,
>
> Yeah, I did see that in my dmesg and did try i8042.nopnp by itself and
> with combinations of pci=nocrs and the other i8042 options, with no
> effect except breaking audio.
>
> # ls -l /sys/bus/i2c/devices
> total 0
> lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-0 -> ../../../devices/platform/AMDI0010:00/i2c-0
> lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-1 -> ../../../devices/platform/AMDI0010:01/i2c-1
> lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-2 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-2
> lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-3 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-3
> lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-4 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-4
> lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-5 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-eDP-1/i2c-5
> lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-6 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-DP-1/i2c-6
> lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-7 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-7
> lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-8 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-8
> lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-9 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-9
> lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-ELAN238E:00 -> ../../../devices/platform/AMDI0010:00/i2c-0/i2c-ELAN238E:00
>
> # ls -l /sys/bus/acpi/devices/ELAN066C:00/
> total 0
> -r--r--r--. 1 root root 4096 Oct 14 21:16 hid
> -r--r--r--. 1 root root 4096 Oct 14 21:16 modalias
> -r--r--r--. 1 root root 4096 Oct 14 21:16 path
> lrwxrwxrwx. 1 root root 0 Oct 14 21:16 physical_node -> ../../../../platform/AMDI0010:01/ELAN066C:00
Ok this looks like a platform-device is being instantiated for the touchpad
rather then an i2c_client.
Can you do:
ls -l /sys/bus/platform/devices | grep ELAN066C
and let me know the output of that ?
If that confirms that a platform device is being instantiated
then the issue likely is that neither of the 2 if-s here:
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullUp, 0x0000,
"\\_SB.GPIO", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0009
}
})
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.I2CD",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFB, SBFG))
}
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x02))
{
Name (SBFC, ResourceTemplate ()
{
I2cSerialBusV2 (0x002C, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.I2CD",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFC, SBFG))
}
}
Returns true causing no i2c-client to get instantiated.
If that is the case the first thing to do is try a DSDT overlay replacing the
first if:
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
{
...
}
With dropping the If so you get:
{
...
}
See: https://docs.kernel.org/admin-guide/acpi/initrd_table_override.html
And then specifically the "How does it work" section.
Regards,
Hans
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Help getting ELAN066C touchpad working in Linux
2023-10-14 20:30 ` Hans de Goede
@ 2023-10-14 21:16 ` Jonathan Dieter
2023-10-15 9:25 ` Hans de Goede
0 siblings, 1 reply; 6+ messages in thread
From: Jonathan Dieter @ 2023-10-14 21:16 UTC (permalink / raw)
To: Hans de Goede, Dmitry Torokhov, linux-input
On Sat, 2023-10-14 at 22:30 +0200, Hans de Goede wrote:
> On 10/14/23 22:22, Jonathan Dieter wrote:
> > # ls -l /sys/bus/i2c/devices
> > total 0
> > lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-0 ->
> > ../../../devices/platform/AMDI0010:00/i2c-0
> > lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-1 ->
> > ../../../devices/platform/AMDI0010:01/i2c-1
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-2 ->
> > ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-2
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-3 ->
> > ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-3
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-4 ->
> > ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-4
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-5 ->
> > ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/car
> > d1-eDP-1/i2c-5
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:11 i2c-6 ->
> > ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/car
> > d1-DP-1/i2c-6
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-7 ->
> > ../../../devices/pci0000:00/0000:00:14.0/i2c-7
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-8 ->
> > ../../../devices/pci0000:00/0000:00:14.0/i2c-8
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:15 i2c-9 ->
> > ../../../devices/pci0000:00/0000:00:14.0/i2c-9
> > lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-ELAN238E:00 ->
> > ../../../devices/platform/AMDI0010:00/i2c-0/i2c-ELAN238E:00
> >
> > # ls -l /sys/bus/acpi/devices/ELAN066C:00/
> > total 0
> > -r--r--r--. 1 root root 4096 Oct 14 21:16 hid
> > -r--r--r--. 1 root root 4096 Oct 14 21:16 modalias
> > -r--r--r--. 1 root root 4096 Oct 14 21:16 path
> > lrwxrwxrwx. 1 root root 0 Oct 14 21:16 physical_node ->
> > ../../../../platform/AMDI0010:01/ELAN066C:00
>
> Ok this looks like a platform-device is being instantiated for the
> touchpad
> rather then an i2c_client.
>
> Can you do:
>
> ls -l /sys/bus/platform/devices | grep ELAN066C
>
> and let me know the output of that ?
>
> If that confirms that a platform device is being instantiated
> then the issue likely is that neither of the 2 if-s here:
>
...
>
> Returns true causing no i2c-client to get instantiated.
>
>
> If that is the case the first thing to do is try a DSDT overlay
> replacing the
> first if:
>
> If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY))
> == 0x01))
> {
> ...
> }
>
> With dropping the If so you get:
>
> {
> ...
> }
>
> See:
> https://docs.kernel.org/admin-guide/acpi/initrd_table_override.html
>
> And then specifically the "How does it work" section.
Hans,
Thank you so much! Adding a DSDT overlay worked perfectly! The
touchpad is functioning exactly as you would expect (using the
i2c_hid_acpi driver).
# ls -l /sys/bus/i2c/devices/
total 0
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-0 -> ../../../devices/platform/AMDI0010:00/i2c-0
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-1 -> ../../../devices/platform/AMDI0010:01/i2c-1
lrwxrwxrwx. 1 root root 0 Oct 14 22:02 i2c-2 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-2
lrwxrwxrwx. 1 root root 0 Oct 14 22:02 i2c-3 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-3
lrwxrwxrwx. 1 root root 0 Oct 14 22:02 i2c-4 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/i2c-4
lrwxrwxrwx. 1 root root 0 Oct 14 22:02 i2c-5 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-eDP-1/i2c-5
lrwxrwxrwx. 1 root root 0 Oct 14 22:02 i2c-6 -> ../../../devices/pci0000:00/0000:00:08.1/0000:04:00.0/drm/card1/card1-DP-1/i2c-6
lrwxrwxrwx. 1 root root 0 Oct 14 22:03 i2c-7 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-7
lrwxrwxrwx. 1 root root 0 Oct 14 22:03 i2c-8 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-8
lrwxrwxrwx. 1 root root 0 Oct 14 22:03 i2c-9 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-9
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-ELAN066C:00 -> ../../../devices/platform/AMDI0010:01/i2c-1/i2c-ELAN066C:00
lrwxrwxrwx. 1 root root 0 Oct 14 2023 i2c-ELAN238E:00 -> ../../../devices/platform/AMDI0010:00/i2c-0/i2c-ELAN238E:00
# ls -l /sys/bus/acpi/devices/ELAN066C:00/
total 0
-r--r--r--. 1 root root 4096 Oct 14 22:10 hid
-r--r--r--. 1 root root 4096 Oct 14 22:10 modalias
-r--r--r--. 1 root root 4096 Oct 14 22:10 path
lrwxrwxrwx. 1 root root 0 Oct 14 22:10 physical_node -> ../../../../platform/AMDI0010:01/i2c-1/i2c-ELAN066C:00
drwxr-xr-x. 2 root root 0 Oct 14 22:10 power
-r--r--r--. 1 root root 4096 Oct 14 22:10 status
lrwxrwxrwx. 1 root root 0 Oct 14 2023 subsystem -> ../../../../../bus/acpi
-rw-r--r--. 1 root root 4096 Oct 14 2023 uevent
drwxr-xr-x. 3 root root 0 Oct 14 2023 wakeup
Is there some way we can get a fix in the kernel for this buggy ACPI table or should I be asking Lenovo for a fix?
Thanks again,
Jonathan
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Help getting ELAN066C touchpad working in Linux
2023-10-14 21:16 ` Jonathan Dieter
@ 2023-10-15 9:25 ` Hans de Goede
0 siblings, 0 replies; 6+ messages in thread
From: Hans de Goede @ 2023-10-15 9:25 UTC (permalink / raw)
To: Jonathan Dieter, Dmitry Torokhov, linux-input
Hi Jonathan,
On 10/14/23 23:16, Jonathan Dieter wrote:
> On Sat, 2023-10-14 at 22:30 +0200, Hans de Goede wrote:
<snip>
> Hans,
>
> Thank you so much! Adding a DSDT overlay worked perfectly! The
> touchpad is functioning exactly as you would expect (using the
> i2c_hid_acpi driver).
That is good to hear, so that confirms that this line:
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
In the DSDT is not functioning as it should under Linux.
<snip ls -l /sys/bus/i2c/devices/ which looks good now>
> Is there some way we can get a fix in the kernel for this buggy ACPI table or should I be asking Lenovo for a fix?
I assume (and it seems so) that the:
If ((^^^PCI0.LPC0.H_EC.ECRD (RefOf (^^^PCI0.LPC0.H_EC.TPTY)) == 0x01))
line in the DSDT does work under Windows. So now we need to figure out
why it does work under Windows and not under Linux.
Can you please run:
sudo acpidump -o acpidump.txt
And then reply to this email with the generated acpidump.txt attached ?
Note please drop the linux-input list from the Cc when sending the acpidump.
Then I'll take a look at the full DSDT and we'll see from there.
As for getting a BIOS fix for this, I think that the chances of Lenovo fixing this when asked are not good.
Regards,
Hans
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-10-15 9:26 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-14 17:12 Help getting ELAN066C touchpad working in Linux jdieter
2023-10-14 19:39 ` Hans de Goede
2023-10-14 20:22 ` Jonathan Dieter
2023-10-14 20:30 ` Hans de Goede
2023-10-14 21:16 ` Jonathan Dieter
2023-10-15 9:25 ` Hans de Goede
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).