Commit fde77779 authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Rafael J. Wysocki

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: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Tested-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 83b34afb
...@@ -38,6 +38,28 @@ fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id, ...@@ -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, ...@@ -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, ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment