in rio_cm.c [2295:2358]
static int __init riocm_init(void)
{
int ret;
/* Create device class needed by udev */
dev_class = class_create(THIS_MODULE, DRV_NAME);
if (IS_ERR(dev_class)) {
riocm_error("Cannot create " DRV_NAME " class");
return PTR_ERR(dev_class);
}
ret = alloc_chrdev_region(&dev_number, 0, 1, DRV_NAME);
if (ret) {
class_destroy(dev_class);
return ret;
}
dev_major = MAJOR(dev_number);
dev_minor_base = MINOR(dev_number);
riocm_debug(INIT, "Registered class with %d major", dev_major);
/*
* Register as rapidio_port class interface to get notifications about
* mport additions and removals.
*/
ret = class_interface_register(&rio_mport_interface);
if (ret) {
riocm_error("class_interface_register error: %d", ret);
goto err_reg;
}
/*
* Register as RapidIO bus interface to get notifications about
* addition/removal of remote RapidIO devices.
*/
ret = subsys_interface_register(&riocm_interface);
if (ret) {
riocm_error("subsys_interface_register error: %d", ret);
goto err_cl;
}
ret = register_reboot_notifier(&rio_cm_notifier);
if (ret) {
riocm_error("failed to register reboot notifier (err=%d)", ret);
goto err_sif;
}
ret = riocm_cdev_add(dev_number);
if (ret) {
unregister_reboot_notifier(&rio_cm_notifier);
ret = -ENODEV;
goto err_sif;
}
return 0;
err_sif:
subsys_interface_unregister(&riocm_interface);
err_cl:
class_interface_unregister(&rio_mport_interface);
err_reg:
unregister_chrdev_region(dev_number, 1);
class_destroy(dev_class);
return ret;
}