mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 08:01:12 +02:00
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:
parent
312fd3f3a8
commit
dd519eb8f6
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user