according to the above analysis, error is happen with the direction is : in
i found the function to set the direction of gpio pin to in: amd_gpio_direction_input, and add some pr_err and dump_stack() to the function , then dmesg out put like : [ 1.545190] amd_gpio_set_config gpio_chip->label:AMDI0030:00,offset:130,config:278 [ 1.545191] amd_gpio_direction_input gpio_chip->label:AMDI0030:00,offset:130 =============================amd_gpio_direction_input dump_stack()===== [ 1.545194] CPU: 12 PID: 264 Comm: kworker/12:4 Not tainted 5.8.13-303.fc33.x86_64 #1 [ 1.545194] Hardware name: LENOVO 82B6/LNVNB161216, BIOS EUCN26WW 08/19/2020 [ 1.545197] Workqueue: events deferred_probe_work_func [ 1.545198] Call Trace: [ 1.545203] dump_stack+0x6b/0x88 [ 1.545205] amd_gpio_direction_input+0x57/0x60 [pinctrl_amd] [ 1.545206] gpiod_direction_input+0x5b/0x170 [ 1.545208] acpi_dev_gpio_irq_get+0x111/0x1b6 [ 1.545209] ? i2c_acpi_find_adapter_by_handle+0x30/0x30 [ 1.545210] i2c_acpi_get_irq+0x81/0x90 [ 1.545212] i2c_device_probe+0x24a/0x280 [ 1.545213] really_probe+0x160/0x400 [ 1.545214] driver_probe_device+0xe1/0x150 [ 1.545215] ? driver_allows_async_probing+0x50/0x50 [ 1.545216] bus_for_each_drv+0x6a/0xa0 [ 1.545217] __device_attach+0xb4/0x1b0 [ 1.545218] bus_probe_device+0x8e/0xa0 [ 1.545219] deferred_probe_work_func+0x77/0xc0 [ 1.545220] process_one_work+0x1b4/0x370 [ 1.545221] worker_thread+0x53/0x3e0 [ 1.545222] ? process_one_work+0x370/0x370 [ 1.545223] kthread+0x11b/0x140 [ 1.545224] ? __kthread_bind_mask+0x60/0x60 [ 1.545226] ret_from_fork+0x22/0x30 ============================================================================ then i found the functions acpi_dev_gpio_irq_get in in file : drivers/gpio/gpiolib-acpi.c, line 927 (as a function) and it's comment say: ``` /** * acpi_dev_gpio_irq_get() - Find GpioInt and translate it to Linux IRQ number * @adev: pointer to a ACPI device to get IRQ from * @index: index of GpioInt resource (starting from %0) * * If the device has one or more GpioInt resources, this function can be * used to translate from the GPIO offset in the resource to the Linux IRQ * number. * * The function is idempotent, though each time it runs it will configure GPIO * pin direction according to the flags in GpioInt resource. * * Return: Linux IRQ number (> %0) on success, negative errno on failure. */ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) { ``` each time it runs it will configure GPIO pin direction according to the flags in GpioInt resource. in it's body ,by call function gpiod_configure_flags (in /drivers/gpio/gpiolib.c) it call the function gpiod_direction_input. so the direction become to :input or in the problem may be in two places: 1. lenovo 's default value in bios or dsdt is : input or in,or missing . but on windows ,it's ok,so ,may be not here. 2. in linux kernel,the default value of the type for gpio pin 's direction ,is :input or in -- You received this bug notification because you are a member of Ubuntu-X, which is subscribed to xserver-xorg-input-libinput in Ubuntu. https://bugs.launchpad.net/bugs/1887190 Title: MSFT Touchpad not working on Lenovo Legion-5 15ARH05 To manage notifications about this bug go to: https://bugs.launchpad.net/pop-os/+bug/1887190/+subscriptions _______________________________________________ Mailing list: https://launchpad.net/~ubuntu-x-swat Post to : ubuntu-x-swat@lists.launchpad.net Unsubscribe : https://launchpad.net/~ubuntu-x-swat More help : https://help.launchpad.net/ListHelp