697 if (ret)
698 goto err_get_minor;
699
700 idev->dev = device_create(uio_class->class, parent,
701 MKDEV(uio_major, idev->minor), idev,
702 "uio%d", idev->minor);
703 if (IS_ERR(idev->dev)) {
704 printk(KERN_ERR "UIO: device register failed\n");
705 ret = PTR_ERR(idev->dev);
706 goto err_device_create;
707 }
708
709 ret = uio_dev_add_attributes(idev);
710 if (ret)
711 goto err_uio_dev_add_attributes;
712
713 info->uio_dev = idev;
714
715 if (idev->info->irq >= 0) {
716 ret = request_irq(idev->info->irq, uio_interrupt,
717 idev->info->irq_flags, idev->info->name, idev);
718 if (ret)
719 goto err_request_irq;
720 }
721
722 return 0;
723
724err_request_irq:
725 uio_dev_del_attributes(idev);
726err_uio_dev_add_attributes:
727 device_destroy(uio_class->class, MKDEV(uio_major, idev->minor));
728err_device_create:
729 uio_free_minor(idev);
730err_get_minor:
731 kfree(idev);
732err_kzalloc:
733 uio_class_destroy();
734 return ret;
735}
736EXPORT_SYMBOL_GPL(__uio_register_device);
737