3 #include <linux/module.h>
5 int drm_get_usb_dev(struct usb_interface *interface,
6 const struct usb_device_id *id,
7 struct drm_driver *driver)
9 struct drm_device *dev;
14 dev = drm_dev_alloc(driver, &interface->dev);
18 dev->usbdev = interface_to_usbdev(interface);
20 mutex_lock(&drm_global_mutex);
22 ret = drm_fill_in_dev(dev, NULL, driver);
24 printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
28 usb_set_intfdata(interface, dev);
29 ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL);
33 if (drm_core_check_feature(dev, DRIVER_RENDER) && drm_rnodes) {
34 ret = drm_get_minor(dev, &dev->render, DRM_MINOR_RENDER);
39 ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY);
43 if (dev->driver->load) {
44 ret = dev->driver->load(dev, 0);
49 /* setup the grouping for the legacy output */
50 ret = drm_mode_group_init_legacy_group(dev,
51 &dev->primary->mode_group);
55 list_add_tail(&dev->driver_item, &driver->device_list);
57 mutex_unlock(&drm_global_mutex);
59 DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
60 driver->name, driver->major, driver->minor, driver->patchlevel,
61 driver->date, dev->primary->index);
66 drm_put_minor(&dev->primary);
69 drm_put_minor(&dev->render);
71 drm_put_minor(&dev->control);
74 mutex_unlock(&drm_global_mutex);
78 EXPORT_SYMBOL(drm_get_usb_dev);
80 static int drm_usb_get_irq(struct drm_device *dev)
85 static const char *drm_usb_get_name(struct drm_device *dev)
90 static int drm_usb_set_busid(struct drm_device *dev,
91 struct drm_master *master)
96 static struct drm_bus drm_usb_bus = {
97 .bus_type = DRIVER_BUS_USB,
98 .get_irq = drm_usb_get_irq,
99 .get_name = drm_usb_get_name,
100 .set_busid = drm_usb_set_busid,
103 int drm_usb_init(struct drm_driver *driver, struct usb_driver *udriver)
108 INIT_LIST_HEAD(&driver->device_list);
109 driver->kdriver.usb = udriver;
110 driver->bus = &drm_usb_bus;
112 res = usb_register(udriver);
115 EXPORT_SYMBOL(drm_usb_init);
117 void drm_usb_exit(struct drm_driver *driver,
118 struct usb_driver *udriver)
120 usb_deregister(udriver);
122 EXPORT_SYMBOL(drm_usb_exit);
124 MODULE_AUTHOR("David Airlie");
125 MODULE_DESCRIPTION("USB DRM support");
126 MODULE_LICENSE("GPL and additional rights");