Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcbcebce authored by Russell King's avatar Russell King
Browse files

component: ignore multiple additions of the same component



Permit masters to call component_master_add_child() and match the same
child multiple times.  This may happen if there's multiple connections
to a single component device from other devices.  In such scenarios,
we should not return a failure, but instead ignore the attempt.

Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent c334940e
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -69,6 +69,11 @@ static void component_detach_master(struct master *master, struct component *c)
	c->master = NULL;
}

/*
 * Add a component to a master, finding the component via the compare
 * function and compare data.  This is safe to call for duplicate matches
 * and will not result in the same component being added multiple times.
 */
int component_master_add_child(struct master *master,
	int (*compare)(struct device *, void *), void *compare_data)
{
@@ -76,10 +81,11 @@ int component_master_add_child(struct master *master,
	int ret = -ENXIO;

	list_for_each_entry(c, &component_list, node) {
		if (c->master)
		if (c->master && c->master != master)
			continue;

		if (compare(c->dev, compare_data)) {
			if (!c->master)
				component_attach_master(master, c);
			ret = 0;
			break;