On Fri, Aug 29, 2014 at 12:12:45PM +0200, David Herrmann wrote:
> 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 at gmail.com>

A bit of (seemingly) unecessary code movement (the probe/disconnect
functions and id table). With or without that fixed this is

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

And it looks really, really pretty ;-)

> ---
>  Documentation/DocBook/drm.tmpl      |   3 +-
>  drivers/gpu/drm/Kconfig             |   6 ---
>  drivers/gpu/drm/Makefile            |   3 --
>  drivers/gpu/drm/drm_usb.c           |  76 ---------------------------
>  drivers/gpu/drm/udl/Kconfig         |   3 +-
>  drivers/gpu/drm/udl/udl_connector.c |   4 +-
>  drivers/gpu/drm/udl/udl_drv.c       | 102 
> +++++++++++++++++++++---------------
>  drivers/gpu/drm/udl/udl_drv.h       |   1 +
>  drivers/gpu/drm/udl/udl_main.c      |   8 +--
>  include/drm/drmP.h                  |   1 -
>  include/drm/drm_usb.h               |  15 ------
>  11 files changed, 70 insertions(+), 152 deletions(-)
>  delete mode 100644 drivers/gpu/drm/drm_usb.c
>  delete mode 100644 include/drm/drm_usb.h
> 
> diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl
> index 5c299fa..99f7ee6 100644
> --- a/Documentation/DocBook/drm.tmpl
> +++ b/Documentation/DocBook/drm.tmpl
> @@ -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
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index e3500f9..e3b4b0f 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -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
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 9b7cb3f..9292a76 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -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
> index 9c43490..0000000
> --- a/drivers/gpu/drm/drm_usb.c
> +++ /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");
> diff --git a/drivers/gpu/drm/udl/Kconfig b/drivers/gpu/drm/udl/Kconfig
> index f025286..613ab06 100644
> --- a/drivers/gpu/drm/udl/Kconfig
> +++ b/drivers/gpu/drm/udl/Kconfig
> @@ -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
> diff --git a/drivers/gpu/drm/udl/udl_connector.c 
> b/drivers/gpu/drm/udl/udl_connector.c
> index e026a9e..0110d95 100644
> --- a/drivers/gpu/drm/udl/udl_connector.c
> +++ b/drivers/gpu/drm/udl/udl_connector.c
> @@ -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) {
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index 06675e5..8607e9e 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -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");
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index 1fbf7b3..51e10ee 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -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;
>  
> diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
> index 4279567..33dbfb2 100644
> --- a/drivers/gpu/drm/udl/udl_main.c
> +++ b/drivers/gpu/drm/udl/udl_main.c
> @@ -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;
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 5ae388a..0e73aad 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -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
> index 33506c11..0000000
> --- a/include/drm/drm_usb.h
> +++ /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
> -- 
> 2.1.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

Reply via email to