Message ID | 1409307166-12396-20-git-send-email-dh.herrmann@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Aug 29, 2014 at 12:12:45PM +0200, David Herrmann wrote: [...] > diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c [...] > module_init(udl_init); > module_exit(udl_exit); > +MODULE_LICENSE("GPL"); According to the header file the license is GPL v2 only, so this should be "GPL v2". Might also be good to add MODULE_AUTHOR and MODULE_DESCRIPTION here. Other than that: Reviewed-by: Thierry Reding <treding@nvidia.com>
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@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@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 >
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
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> --- 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