if (device == NULL)
return -ENODEV;
- err = register_interface(element);
- if (err < 0)
- return err;
-
for (list = driver_list; list; list = list->next) {
struct connman_device_driver *driver = list->data;
if (driver->probe(device) == 0) {
device->driver = driver;
- device_enable(device);
break;
}
}
+ if (!device->driver)
+ return -ENODEV;
+
+ err = register_interface(element);
+ if (err < 0) {
+ if (device->driver->remove)
+ device->driver->remove(device);
+ return err;
+ }
+
+ device_enable(device);
+
return 0;
}
if (device == NULL)
return;
- unregister_interface(element);
+ if (!device->driver)
+ return;
- if (device->driver) {
- device_disable(device);
+ device_disable(device);
- if (device->driver->remove)
- device->driver->remove(device);
- }
+ unregister_interface(element);
+
+ if (device->driver->remove)
+ device->driver->remove(device);
}
static struct connman_driver device_driver = {