[PATCH 19/20] drm: merge drm_usb into udl
Daniel Vetter
daniel at ffwll.ch
Fri Aug 29 06:06:21 PDT 2014
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
More information about the dri-devel
mailing list