forked from luck/tmp_suning_uos_patched
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: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
c334940ea2
commit
fcbcebce71
|
@ -69,6 +69,11 @@ static void component_detach_master(struct master *master, struct component *c)
|
||||||
c->master = NULL;
|
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 component_master_add_child(struct master *master,
|
||||||
int (*compare)(struct device *, void *), void *compare_data)
|
int (*compare)(struct device *, void *), void *compare_data)
|
||||||
{
|
{
|
||||||
|
@ -76,11 +81,12 @@ int component_master_add_child(struct master *master,
|
||||||
int ret = -ENXIO;
|
int ret = -ENXIO;
|
||||||
|
|
||||||
list_for_each_entry(c, &component_list, node) {
|
list_for_each_entry(c, &component_list, node) {
|
||||||
if (c->master)
|
if (c->master && c->master != master)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (compare(c->dev, compare_data)) {
|
if (compare(c->dev, compare_data)) {
|
||||||
component_attach_master(master, c);
|
if (!c->master)
|
||||||
|
component_attach_master(master, c);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user