diff options
Diffstat (limited to 'drivers/gpu/drm/drm_usb.c')
| -rw-r--r-- | drivers/gpu/drm/drm_usb.c | 93 | 
1 files changed, 26 insertions, 67 deletions
diff --git a/drivers/gpu/drm/drm_usb.c b/drivers/gpu/drm/drm_usb.c index 87664723b9c..f2fe94aab90 100644 --- a/drivers/gpu/drm/drm_usb.c +++ b/drivers/gpu/drm/drm_usb.c @@ -1,4 +1,5 @@  #include <drm/drmP.h> +#include <drm/drm_usb.h>  #include <linux/usb.h>  #include <linux/module.h> @@ -7,57 +8,20 @@ int drm_get_usb_dev(struct usb_interface *interface,  		    struct drm_driver *driver)  {  	struct drm_device *dev; -	struct usb_device *usbdev;  	int ret;  	DRM_DEBUG("\n"); -	dev = kzalloc(sizeof(*dev), GFP_KERNEL); +	dev = drm_dev_alloc(driver, &interface->dev);  	if (!dev)  		return -ENOMEM; -	usbdev = interface_to_usbdev(interface); -	dev->usbdev = usbdev; -	dev->dev = &interface->dev; - -	mutex_lock(&drm_global_mutex); - -	ret = drm_fill_in_dev(dev, NULL, driver); -	if (ret) { -		printk(KERN_ERR "DRM: Fill_in_dev failed.\n"); -		goto err_g1; -	} - +	dev->usbdev = interface_to_usbdev(interface);  	usb_set_intfdata(interface, dev); -	ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL); -	if (ret) -		goto err_g1; - -	if (drm_core_check_feature(dev, DRIVER_RENDER) && drm_rnodes) { -		ret = drm_get_minor(dev, &dev->render, DRM_MINOR_RENDER); -		if (ret) -			goto err_g11; -	} -	ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY); +	ret = drm_dev_register(dev, 0);  	if (ret) -		goto err_g2; - -	if (dev->driver->load) { -		ret = dev->driver->load(dev, 0); -		if (ret) -			goto err_g3; -	} - -	/* setup the grouping for the legacy output */ -	ret = drm_mode_group_init_legacy_group(dev, -					       &dev->primary->mode_group); -	if (ret) -		goto err_g3; - -	list_add_tail(&dev->driver_item, &driver->device_list); - -	mutex_unlock(&drm_global_mutex); +		goto err_free;  	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",  		 driver->name, driver->major, driver->minor, driver->patchlevel, @@ -65,31 +29,13 @@ int drm_get_usb_dev(struct usb_interface *interface,  	return 0; -err_g3: -	drm_put_minor(&dev->primary); -err_g2: -	if (dev->render) -		drm_put_minor(&dev->render); -err_g11: -	drm_put_minor(&dev->control); -err_g1: -	kfree(dev); -	mutex_unlock(&drm_global_mutex); +err_free: +	drm_dev_unref(dev);  	return ret;  }  EXPORT_SYMBOL(drm_get_usb_dev); -static int drm_usb_get_irq(struct drm_device *dev) -{ -	return 0; -} - -static const char *drm_usb_get_name(struct drm_device *dev) -{ -	return "USB"; -} -  static int drm_usb_set_busid(struct drm_device *dev,  			       struct drm_master *master)  { @@ -97,19 +43,24 @@ static int drm_usb_set_busid(struct drm_device *dev,  }  static struct drm_bus drm_usb_bus = { -	.bus_type = DRIVER_BUS_USB, -	.get_irq = drm_usb_get_irq, -	.get_name = drm_usb_get_name,  	.set_busid = drm_usb_set_busid,  }; -     + +/** + * drm_usb_init - Register matching USB devices with the DRM subsystem + * @driver: DRM device driver + * @udriver: USB device driver + * + * Registers one or more devices matched by a USB driver with the DRM + * subsystem. + * + * Return: 0 on success or a negative error code on failure. + */  int drm_usb_init(struct drm_driver *driver, struct usb_driver *udriver)  {  	int res;  	DRM_DEBUG("\n"); -	INIT_LIST_HEAD(&driver->device_list); -	driver->kdriver.usb = udriver;  	driver->bus = &drm_usb_bus;  	res = usb_register(udriver); @@ -117,6 +68,14 @@ int drm_usb_init(struct drm_driver *driver, struct usb_driver *udriver)  }  EXPORT_SYMBOL(drm_usb_init); +/** + * drm_usb_exit - Unregister matching USB devices from the DRM subsystem + * @driver: DRM device driver + * @udriver: USB device driver + * + * Unregisters one or more devices matched by a USB driver from the DRM + * subsystem. + */  void drm_usb_exit(struct drm_driver *driver,  		  struct usb_driver *udriver)  {  | 
