The ACPI GPIO OpRegion code never sets the direction for GPIOs that it configures from scratch, leaving unconfigured GPIOs to be left at the default direction, which is typically input not output. So set the direction and default value explicitly. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> --- drivers/gpio/gpiolib-acpi.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c index c9fc9e232aaf..02a2bc7fe18b 100644 --- a/drivers/gpio/gpiolib-acpi.c +++ b/drivers/gpio/gpiolib-acpi.c @@ -966,6 +966,12 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address, goto out; } + if (function == ACPI_WRITE) + gpiod_direction_output(desc, + !!((1 << i) & *value)); + else + gpiod_direction_input(desc); + conn->pin = pin; conn->desc = desc; list_add_tail(&conn->node, &achip->conns); -- 2.20.1