int udl_driver_load(struct drm_device *dev, unsigned long flags)
{
	struct udl_device *udl;
	int ret;

	DRM_DEBUG("\n");
	udl = kzalloc(sizeof(struct udl_device), GFP_KERNEL);
	if (!udl)
		return -ENOMEM;

	udl->ddev = dev;
	dev->dev_private = udl;

	if (!udl_parse_vendor_descriptor(dev, dev->usbdev)) {
		DRM_ERROR("firmware not recognized. Assume incompatible device\n");
		goto err;
	}

	if (!udl_alloc_urb_list(dev, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
		ret = -ENOMEM;
		DRM_ERROR("udl_alloc_urb_list failed\n");
		goto err;
	}

	DRM_DEBUG("\n");
	ret = udl_modeset_init(dev);

	ret = udl_fbdev_init(dev);
	return 0;
err:
	kfree(udl);
	DRM_ERROR("%d\n", ret);
	return ret;
}
Example #2
0
int udl_driver_load(struct drm_device *dev, unsigned long flags)
{
	struct usb_device *udev = (void*)flags;
	struct udl_device *udl;
	int ret = -ENOMEM;

	DRM_DEBUG("\n");
	udl = kzalloc(sizeof(struct udl_device), GFP_KERNEL);
	if (!udl)
		return -ENOMEM;

	udl->udev = udev;
	udl->ddev = dev;
	dev->dev_private = udl;

	if (!udl_parse_vendor_descriptor(dev, udl->udev)) {
		ret = -ENODEV;
		DRM_ERROR("firmware not recognized. Assume incompatible device\n");
		goto err;
	}

	if (udl_select_std_channel(udl))
		DRM_ERROR("Selecting channel failed\n");

	if (!udl_alloc_urb_list(dev, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
		DRM_ERROR("udl_alloc_urb_list failed\n");
		goto err;
	}

	DRM_DEBUG("\n");
	ret = udl_modeset_init(dev);
	if (ret)
		goto err;

	ret = udl_fbdev_init(dev);
	if (ret)
		goto err;

	ret = drm_vblank_init(dev, 1);
	if (ret)
		goto err_fb;

	return 0;
err_fb:
	udl_fbdev_cleanup(dev);
err:
	if (udl->urbs.count)
		udl_free_urb_list(dev);
	kfree(udl);
	DRM_ERROR("%d\n", ret);
	return ret;
}