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@xxxxxxxxx> 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@xxxxxxxx> 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel