Skip to content

Commit

Permalink
device connection: Find connections also by checking the references
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Heikki Krogerus authored and Rafael J. Wysocki committed Jun 3, 2019
1 parent 83b34af commit fde7777
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
26 changes: 26 additions & 0 deletions drivers/base/devcon.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,28 @@ fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
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
* @dev: Device with the connection
Expand Down Expand Up @@ -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);
if (ret)
return ret;

ret = fwnode_devcon_match(fwnode, con_id, data, match);
if (ret)
return ret;
}

mutex_lock(&devcon_lock);
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/roles/class.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ static void *usb_role_switch_match(struct device_connection *con, int ep,
struct device *dev;

if (con->fwnode) {
if (!fwnode_property_present(con->fwnode, con->id))
if (con->id && !fwnode_property_present(con->fwnode, con->id))
return NULL;

dev = class_find_device(role_class, NULL, con->fwnode,
Expand Down

0 comments on commit fde7777

Please sign in to comment.