When an error happens during the initialization of one of the sub-
devices, make sure to properly cleanup all sub-devices that have been
initialized up to that point.
Signed-off-by: Thierry Reding <treding@nvidia.com>
dev_err(&device->dev,
"failed to initialize %s: %d\n",
dev_name(client->dev), err);
- mutex_unlock(&device->clients_lock);
- return err;
+ goto teardown;
}
}
}
mutex_unlock(&device->clients_lock);
return 0;
+
+teardown:
+ list_for_each_entry_continue_reverse(client, &device->clients, list)
+ if (client->ops->exit)
+ client->ops->exit(client);
+
+ mutex_unlock(&device->clients_lock);
+ return err;
}
EXPORT_SYMBOL(host1x_device_init);