platform/x86: x86-android-tablets: fix gpio_secondary_fwnode_init() not working

acpi_bus_find_device_by_name() call returns a pointer to the device object
on the ACPI bus, aka the ACPI companion device.

gpio_secondary_fwnode_init() then continues with setting the secondary
fwnode on this device. But this is not the actual physical device for
the GPIO controller (e.g. the GPIO controller platform bus device).

This mismatch is causing GPIO lookups by secondary fwnode to not work.

Modify gpio_secondary_fwnode_init() to instead set the secondary fwnode
of the first physical device associated with the ACPI companion device.

This fixes the GPIO lookups not working.

Fixes: 1448c2d2ca ("platform/x86: x86-android-tablets: enable fwnode matching of GPIO chips")
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
Link: https://patch.msgid.link/20260908185517.49047-1-johannes.goede@oss.qualcomm.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Hans de Goede 2026-09-08 20:55:17 +02:00 committed by Ilpo Järvinen
parent 312fd3f3a8
commit dd519eb8f6
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -390,6 +390,7 @@ static int gpio_secondary_fwnode_init(struct device *parent,
{
const struct software_node *const *swnode;
struct fwnode_handle *fwnode;
struct device *phys_dev;
int ret;
if (!node_group)
@ -417,9 +418,15 @@ static int gpio_secondary_fwnode_init(struct device *parent,
if (WARN_ON(!fwnode))
return -ENOENT;
set_secondary_fwnode(dev, fwnode);
phys_dev = acpi_get_first_physical_node(to_acpi_device(dev));
if (!phys_dev)
return dev_err_probe(parent, -ENODEV,
"No physical device for ACPI GPIO dev: %pfwP\n",
fwnode);
ret = devm_add_action_or_reset(parent, gpio_secondary_unset, get_device(dev));
set_secondary_fwnode(phys_dev, fwnode);
ret = devm_add_action_or_reset(parent, gpio_secondary_unset, get_device(phys_dev));
if (ret)
return ret;
}