for (i = 0; i < num_interfaces; ++i) {
intf = gb_interface_create(module, module_id + i); if (!intf) {
dev_err(&module->dev, "failed to create interface %u\n",
module_id + i); goto err_put_interfaces;
}
module->interfaces[i] = intf;
}
return module;
err_put_interfaces: for (--i; i >= 0; --i)
gb_interface_put(module->interfaces[i]);
put_device(&module->dev);
return NULL;
}
/* * Register and enable an interface after first attempting to activate it.
*/ staticvoid gb_module_register_interface(struct gb_interface *intf)
{ struct gb_module *module = intf->module;
u8 intf_id = intf->interface_id; int ret;
mutex_lock(&intf->mutex);
ret = gb_interface_activate(intf); if (ret) { if (intf->type != GB_INTERFACE_TYPE_DUMMY) {
dev_err(&module->dev, "failed to activate interface %u: %d\n",
intf_id, ret);
}
gb_interface_add(intf); goto err_unlock;
}
ret = gb_interface_add(intf); if (ret) goto err_interface_deactivate;
ret = gb_interface_enable(intf); if (ret) {
dev_err(&module->dev, "failed to enable interface %u: %d\n",
intf_id, ret); goto err_interface_deactivate;
}
staticvoid gb_module_deregister_interface(struct gb_interface *intf)
{ /* Mark as disconnected to prevent I/O during disable. */ if (intf->module->disconnected)
intf->disconnected = true;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.