mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-16 19:47:55 +00:00
device connection: Find connections also by checking the references
We can also use this API to find named references that the device nodes have by using fwnode_property_get_reference_args() function. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Tested-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
83b34afb6b
commit
fde777791e
2 changed files with 27 additions and 1 deletions
|
@ -38,6 +38,28 @@ fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
fwnode_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
|
||||||
|
void *data, devcon_match_fn_t match)
|
||||||
|
{
|
||||||
|
struct device_connection con = { };
|
||||||
|
void *ret;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; ; i++) {
|
||||||
|
con.fwnode = fwnode_find_reference(fwnode, con_id, i);
|
||||||
|
if (IS_ERR(con.fwnode))
|
||||||
|
break;
|
||||||
|
|
||||||
|
ret = match(&con, -1, data);
|
||||||
|
fwnode_handle_put(con.fwnode);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_connection_find_match - Find physical connection to a device
|
* device_connection_find_match - Find physical connection to a device
|
||||||
* @dev: Device with the connection
|
* @dev: Device with the connection
|
||||||
|
@ -65,6 +87,10 @@ void *device_connection_find_match(struct device *dev, const char *con_id,
|
||||||
ret = fwnode_graph_devcon_match(fwnode, con_id, data, match);
|
ret = fwnode_graph_devcon_match(fwnode, con_id, data, match);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = fwnode_devcon_match(fwnode, con_id, data, match);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&devcon_lock);
|
mutex_lock(&devcon_lock);
|
||||||
|
|
|
@ -101,7 +101,7 @@ static void *usb_role_switch_match(struct device_connection *con, int ep,
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
if (con->fwnode) {
|
if (con->fwnode) {
|
||||||
if (!fwnode_property_present(con->fwnode, con->id))
|
if (con->id && !fwnode_property_present(con->fwnode, con->id))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dev = class_find_device(role_class, NULL, con->fwnode,
|
dev = class_find_device(role_class, NULL, con->fwnode,
|
||||||
|
|
Loading…
Add table
Reference in a new issue