• Hans de Goede's avatar
    gpiolib: Fix using uninitialized lookup-flags on ACPI platforms · ba2dc1cb
    Hans de Goede authored
    Commit 8eb1f71e ("gpiolib: consolidate GPIO lookups") refactors
    fwnode_get_named_gpiod() and gpiod_get_index() into a unified
    gpiod_find_and_request() helper.
    
    The old functions both initialized their local lookupflags variable to
    GPIO_LOOKUP_FLAGS_DEFAULT, but the new code leaves it uninitialized.
    
    This is a problem for at least ACPI platforms, where acpi_find_gpio()
    only does a bunch of *lookupflags |= GPIO_* statements and thus relies
    on the variable being initialized.
    
    The variable not being initialized leads to:
    
    1. Potentially the wrong flags getting used
    2. The check for conflicting lookup flags in gpiod_configure_flags():
       "multiple pull-up, pull-down or pull-disable enabled, invalid config"
       sometimes triggering, making the GPIO unavailable
    
    Restore the initialization of lookupflags to GPIO_LOOKUP_FLAGS_DEFAULT
    to fix this.
    
    Fixes: 8eb1f71e ("gpiolib: consolidate GPIO lookups")
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
    ba2dc1cb
gpiolib.c 123 KB