Hi Arnd, Andy, On 9-Aug-25 9:44 PM, Arnd Bergmann wrote: > On Sat, Aug 9, 2025, at 12:00, Andy Shevchenko wrote: >> On Fri, Aug 08, 2025 at 05:17:49PM +0200, Arnd Bergmann wrote: >>> From: Arnd Bergmann >>> >>> A few old machines have not been converted away from the old-style >>> gpiolib interfaces. Make these select the new CONFIG_GPIOLIB_LEGACY >>> symbol so the code still works where it is needed but can be left >>> out otherwise. >> >>> --- a/drivers/platform/x86/x86-android-tablets/Kconfig >>> +++ b/drivers/platform/x86/x86-android-tablets/Kconfig >>> @@ -8,6 +8,7 @@ config X86_ANDROID_TABLETS >>> depends on I2C && SPI && SERIAL_DEV_BUS >>> depends on GPIOLIB && PMIC_OPREGION >>> depends on ACPI && EFI && PCI >>> + select GPIOLIB_LEGACY >>> select NEW_LEDS >>> select LEDS_CLASS >>> select POWER_SUPPLY >> >> Hmm... This is a surprising change. But I leave it to Hans. Yes I was surprised by this myself since I explicitly removed all legacy GPIO use from the x86-android-tablets code a while ago (or so I thought). > I think the only function that still needs it is > x86_android_tablet_probe() doing > > static struct gpio_keys_button *buttons; > > for (i = 0; i < dev_info->gpio_button_count; i++) { > ret = x86_android_tablet_get_gpiod(dev_info->gpio_button[i].chip, > dev_info->gpio_button[i].pin, > dev_info->gpio_button[i].button.desc, > false, GPIOD_IN, &gpiod); > > buttons[i] = dev_info->gpio_button[i].button; > buttons[i].gpio = desc_to_gpio(gpiod); > /* Release GPIO descriptor so that gpio-keys can request it */ > devm_gpiod_put(&x86_android_tablet_device->dev, gpiod); > } > > So the driver itself uses gpio descriptors, but it passes > some of them into another driver by number. There is probably > an easy workaround that I did not see. Ah I see, so this is basically in the same boat as drivers/input/misc/soc_button_array.c which also first gets a gpio_desc and then calls desc_to_gpio() to store the GPIO number in struct gpio_keys_button which is passed as platform_data to drivers/input/keyboard/gpio_keys.c The gpio_keys driver then converts things back into a gpio_desc in gpio_keys_setup_key() using devm_gpio_request_one() + gpio_to_desc() So it looks like we need to add a gpiod member to struct gpio_keys_button (include/linux/gpio_keys.h) and modify gpio_keys.c to prefer that over using button->gpio, something like the attached patch basically. I won't have time to work on this until September, so if someone wants to take the attached patch and run with it go for it. Note the x86-android-tablets / soc_button_array code will become responsible for requesting / releasing the gpiod when using the new gpio_keys_button.gpiod member. For the x86-android-tablets code this is easy, just drop these 2 lines: /* Release GPIO descriptor so that gpio-keys can request it */ devm_gpiod_put(&x86_android_tablet_device->dev, gpiod); And for soc_button_array.c it is _probably_ just a matter of switching to devm_gpiod_get_index() and drop the gpiod_put(). I have hardware to test both the x86-android-tablets code as well as the soc_button_array code. I might be able to do a quick test on August 22nd or 29th. Regards, Hans p.s. It looks like this will also help with: drivers/platform/x86/meraki-mx100.c drivers/platform/x86/pcengines-apuv2.c drivers/platform/x86/barco-p50-gpio.c I do not have hardware to test these, but if the changes work for x86-android-tablets + soc_button_array then hopefully they will be fine here too.