drm: merge drm_usb into udl
authorDavid Herrmann <dh.herrmann@gmail.com>
Fri, 29 Aug 2014 10:12:45 +0000 (12:12 +0200)
committerDave Airlie <airlied@redhat.com>
Wed, 10 Sep 2014 07:43:27 +0000 (17:43 +1000)
This merges all the remains of drm_usb into its only user, udl. We can
then drop all the drm_usb stuff, including dev->usbdev.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Documentation/DocBook/drm.tmpl
drivers/gpu/drm/Kconfig
drivers/gpu/drm/Makefile
drivers/gpu/drm/drm_usb.c [deleted file]
drivers/gpu/drm/udl/Kconfig
drivers/gpu/drm/udl/udl_connector.c
drivers/gpu/drm/udl/udl_drv.c
drivers/gpu/drm/udl/udl_drv.h
drivers/gpu/drm/udl/udl_main.c
include/drm/drmP.h
include/drm/drm_usb.h [deleted file]

index 58ab4d32c86fe0b30a99f30ce3f37d4d2646f3d9..1fce7dc46d8776f29047a8d0d7688bf0c070b303 100644 (file)
@@ -291,10 +291,9 @@ char *date;</synopsis>
       <title>Device Registration</title>
       <para>
         A number of functions are provided to help with device registration.
-        The functions deal with PCI, USB and platform devices, respectively.
+        The functions deal with PCI and platform devices, respectively.
       </para>
 !Edrivers/gpu/drm/drm_pci.c
-!Edrivers/gpu/drm/drm_usb.c
 !Edrivers/gpu/drm/drm_platform.c
       <para>
         New drivers that no longer rely on the services provided by the
index e3500f9584ec60728ea4c3c80da61a4e9fbf560e..e3b4b0f02b3d1de3e07a9d40cb11b22d1822701f 100644 (file)
@@ -25,12 +25,6 @@ config DRM_MIPI_DSI
        bool
        depends on DRM
 
-config DRM_USB
-       tristate
-       depends on DRM
-       depends on USB_SUPPORT && USB_ARCH_HAS_HCD
-       select USB
-
 config DRM_KMS_HELPER
        tristate
        depends on DRM
index 9b7cb3f76f018c137b75928cbe3092a5796ea836..9292a761ea6db9fa2844f762726b717e1bbce4b2 100644 (file)
@@ -22,8 +22,6 @@ drm-$(CONFIG_PCI) += ati_pcigart.o
 drm-$(CONFIG_DRM_PANEL) += drm_panel.o
 drm-$(CONFIG_OF) += drm_of.o
 
-drm-usb-y   := drm_usb.o
-
 drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \
                drm_plane_helper.o drm_dp_mst_topology.o
 drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o
@@ -36,7 +34,6 @@ CFLAGS_drm_trace_points.o := -I$(src)
 
 obj-$(CONFIG_DRM)      += drm.o
 obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o
-obj-$(CONFIG_DRM_USB)   += drm_usb.o
 obj-$(CONFIG_DRM_TTM)  += ttm/
 obj-$(CONFIG_DRM_TDFX) += tdfx/
 obj-$(CONFIG_DRM_R128) += r128/
diff --git a/drivers/gpu/drm/drm_usb.c b/drivers/gpu/drm/drm_usb.c
deleted file mode 100644 (file)
index 9c43490..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <drm/drmP.h>
-#include <drm/drm_usb.h>
-#include <linux/usb.h>
-#include <linux/module.h>
-
-int drm_get_usb_dev(struct usb_interface *interface,
-                   const struct usb_device_id *id,
-                   struct drm_driver *driver)
-{
-       struct drm_device *dev;
-       int ret;
-
-       DRM_DEBUG("\n");
-
-       dev = drm_dev_alloc(driver, &interface->dev);
-       if (!dev)
-               return -ENOMEM;
-
-       dev->usbdev = interface_to_usbdev(interface);
-       usb_set_intfdata(interface, dev);
-
-       ret = drm_dev_register(dev, 0);
-       if (ret)
-               goto err_free;
-
-       DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
-                driver->name, driver->major, driver->minor, driver->patchlevel,
-                driver->date, dev->primary->index);
-
-       return 0;
-
-err_free:
-       drm_dev_unref(dev);
-       return ret;
-
-}
-EXPORT_SYMBOL(drm_get_usb_dev);
-
-/**
- * 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");
-
-       res = usb_register(udriver);
-       return res;
-}
-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)
-{
-       usb_deregister(udriver);
-}
-EXPORT_SYMBOL(drm_usb_exit);
-
-MODULE_AUTHOR("David Airlie");
-MODULE_DESCRIPTION("USB DRM support");
-MODULE_LICENSE("GPL and additional rights");
index f02528686cd524745e9ad058f12b7b8cc56a7620..613ab0622d6e4a2dfbfeaf3efee59bfb6c17b7f7 100644 (file)
@@ -1,8 +1,9 @@
 config DRM_UDL
        tristate "DisplayLink"
        depends on DRM
+       depends on USB_SUPPORT
        depends on USB_ARCH_HAS_HCD
-       select DRM_USB
+       select USB
        select FB_SYS_FILLRECT
        select FB_SYS_COPYAREA
        select FB_SYS_IMAGEBLIT
index e026a9e2942a249c1e6914ae6ba12a8f9c4be37c..0110d95522f325d25d3ec9b079a827fc5cc82789 100644 (file)
@@ -34,8 +34,8 @@ static u8 *udl_get_edid(struct udl_device *udl)
                goto error;
 
        for (i = 0; i < EDID_LENGTH; i++) {
-               ret = usb_control_msg(udl->ddev->usbdev,
-                                     usb_rcvctrlpipe(udl->ddev->usbdev, 0), (0x02),
+               ret = usb_control_msg(udl->udev,
+                                     usb_rcvctrlpipe(udl->udev, 0), (0x02),
                                      (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
                                      HZ);
                if (ret < 1) {
index 06675e5d4342c9988b101fc9996587ac01a02bcc..8607e9e513db0d94129ea524b9a4abe5dd9653af 100644 (file)
@@ -7,55 +7,15 @@
  */
 
 #include <linux/module.h>
-#include <drm/drm_usb.h>
+#include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
 #include "udl_drv.h"
 
-static struct drm_driver driver;
-
-/*
- * There are many DisplayLink-based graphics products, all with unique PIDs.
- * So we match on DisplayLink's VID + Vendor-Defined Interface Class (0xff)
- * We also require a match on SubClass (0x00) and Protocol (0x00),
- * which is compatible with all known USB 2.0 era graphics chips and firmware,
- * but allows DisplayLink to increment those for any future incompatible chips
- */
-static struct usb_device_id id_table[] = {
-       {.idVendor = 0x17e9, .bInterfaceClass = 0xff,
-        .bInterfaceSubClass = 0x00,
-        .bInterfaceProtocol = 0x00,
-        .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
-                       USB_DEVICE_ID_MATCH_INT_CLASS |
-                       USB_DEVICE_ID_MATCH_INT_SUBCLASS |
-                       USB_DEVICE_ID_MATCH_INT_PROTOCOL,},
-       {},
-};
-MODULE_DEVICE_TABLE(usb, id_table);
-
-MODULE_LICENSE("GPL");
-
 static int udl_driver_set_busid(struct drm_device *d, struct drm_master *m)
 {
        return 0;
 }
 
-static int udl_usb_probe(struct usb_interface *interface,
-                        const struct usb_device_id *id)
-{
-       return drm_get_usb_dev(interface, id, &driver);
-}
-
-static void udl_usb_disconnect(struct usb_interface *interface)
-{
-       struct drm_device *dev = usb_get_intfdata(interface);
-
-       drm_kms_helper_poll_disable(dev);
-       drm_connector_unplug_all(dev);
-       udl_fbdev_unplug(dev);
-       udl_drop_usb(dev);
-       drm_unplug_dev(dev);
-}
-
 static const struct vm_operations_struct udl_gem_vm_ops = {
        .fault = udl_gem_fault,
        .open = drm_gem_vm_open,
@@ -102,6 +62,61 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int udl_usb_probe(struct usb_interface *interface,
+                        const struct usb_device_id *id)
+{
+       struct usb_device *udev = interface_to_usbdev(interface);
+       struct drm_device *dev;
+       int r;
+
+       dev = drm_dev_alloc(&driver, &interface->dev);
+       if (!dev)
+               return -ENOMEM;
+
+       r = drm_dev_register(dev, (unsigned long)udev);
+       if (r)
+               goto err_free;
+
+       usb_set_intfdata(interface, dev);
+       DRM_INFO("Initialized udl on minor %d\n", dev->primary->index);
+
+       return 0;
+
+err_free:
+       drm_dev_unref(dev);
+       return r;
+}
+
+static void udl_usb_disconnect(struct usb_interface *interface)
+{
+       struct drm_device *dev = usb_get_intfdata(interface);
+
+       drm_kms_helper_poll_disable(dev);
+       drm_connector_unplug_all(dev);
+       udl_fbdev_unplug(dev);
+       udl_drop_usb(dev);
+       drm_unplug_dev(dev);
+}
+
+/*
+ * There are many DisplayLink-based graphics products, all with unique PIDs.
+ * So we match on DisplayLink's VID + Vendor-Defined Interface Class (0xff)
+ * We also require a match on SubClass (0x00) and Protocol (0x00),
+ * which is compatible with all known USB 2.0 era graphics chips and firmware,
+ * but allows DisplayLink to increment those for any future incompatible chips
+ */
+static struct usb_device_id id_table[] = {
+       {.idVendor = 0x17e9, .bInterfaceClass = 0xff,
+        .bInterfaceSubClass = 0x00,
+        .bInterfaceProtocol = 0x00,
+        .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
+                       USB_DEVICE_ID_MATCH_INT_CLASS |
+                       USB_DEVICE_ID_MATCH_INT_SUBCLASS |
+                       USB_DEVICE_ID_MATCH_INT_PROTOCOL,},
+       {},
+};
+MODULE_DEVICE_TABLE(usb, id_table);
+
 static struct usb_driver udl_driver = {
        .name = "udl",
        .probe = udl_usb_probe,
@@ -111,13 +126,14 @@ static struct usb_driver udl_driver = {
 
 static int __init udl_init(void)
 {
-       return drm_usb_init(&driver, &udl_driver);
+       return usb_register(&udl_driver);
 }
 
 static void __exit udl_exit(void)
 {
-       drm_usb_exit(&driver, &udl_driver);
+       usb_deregister(&udl_driver);
 }
 
 module_init(udl_init);
 module_exit(udl_exit);
+MODULE_LICENSE("GPL");
index 1fbf7b357f16ba1c9b6a8baea1fd54292398e041..51e10ee77f399f0c433ec5fe1fe43e4e2af114da 100644 (file)
@@ -47,6 +47,7 @@ struct udl_fbdev;
 struct udl_device {
        struct device *dev;
        struct drm_device *ddev;
+       struct usb_device *udev;
 
        int sku_pixel_limit;
 
index 42795674bc0783d12807e76d751c27acb3b200fb..33dbfb2c47486ee3b7a88cc318d3e6230b4dc0f1 100644 (file)
@@ -202,7 +202,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size)
                }
                unode->urb = urb;
 
-               buf = usb_alloc_coherent(udl->ddev->usbdev, MAX_TRANSFER, GFP_KERNEL,
+               buf = usb_alloc_coherent(udl->udev, MAX_TRANSFER, GFP_KERNEL,
                                         &urb->transfer_dma);
                if (!buf) {
                        kfree(unode);
@@ -211,7 +211,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size)
                }
 
                /* urb->transfer_buffer_length set to actual before submit */
-               usb_fill_bulk_urb(urb, udl->ddev->usbdev, usb_sndbulkpipe(udl->ddev->usbdev, 1),
+               usb_fill_bulk_urb(urb, udl->udev, usb_sndbulkpipe(udl->udev, 1),
                        buf, size, udl_urb_completion, unode);
                urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
@@ -282,6 +282,7 @@ int udl_submit_urb(struct drm_device *dev, struct urb *urb, size_t len)
 
 int udl_driver_load(struct drm_device *dev, unsigned long flags)
 {
+       struct usb_device *udev = (void*)flags;
        struct udl_device *udl;
        int ret = -ENOMEM;
 
@@ -290,10 +291,11 @@ int udl_driver_load(struct drm_device *dev, unsigned long flags)
        if (!udl)
                return -ENOMEM;
 
+       udl->udev = udev;
        udl->ddev = dev;
        dev->dev_private = udl;
 
-       if (!udl_parse_vendor_descriptor(dev, dev->usbdev)) {
+       if (!udl_parse_vendor_descriptor(dev, udl->udev)) {
                ret = -ENODEV;
                DRM_ERROR("firmware not recognized. Assume incompatible device\n");
                goto err;
index 5ae388a9bb98a39ff78e8786063fc6aed55492de..0e73aad225b248cf225cc8bfabaef5a4eb970637 100644 (file)
@@ -1020,7 +1020,6 @@ struct drm_device {
 #endif
 
        struct platform_device *platformdev; /**< Platform device struture */
-       struct usb_device *usbdev;
 
        struct drm_sg_mem *sg;  /**< Scatter gather memory */
        unsigned int num_crtcs;                  /**< Number of CRTCs on this device */
diff --git a/include/drm/drm_usb.h b/include/drm/drm_usb.h
deleted file mode 100644 (file)
index 33506c1..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef DRM_USB_H
-#define DRM_USB_H
-
-#include <drmP.h>
-
-#include <linux/usb.h>
-
-extern int drm_usb_init(struct drm_driver *driver, struct usb_driver *udriver);
-extern void drm_usb_exit(struct drm_driver *driver, struct usb_driver *udriver);
-
-int drm_get_usb_dev(struct usb_interface *interface,
-                   const struct usb_device_id *id,
-                   struct drm_driver *driver);
-
-#endif