Re: Help getting ELAN066C touchpad working in Linux

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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






[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux