linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).