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,
if (ret < 1) {usb_rcvctrlpipe(udl->udev, 0), (0x02), (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2, HZ);
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,
if (!buf) { kfree(unode);buf = usb_alloc_coherent(udl->udev, MAX_TRANSFER, GFP_KERNEL, &urb->transfer_dma);
@@ -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),
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;usb_fill_bulk_urb(urb, udl->udev, usb_sndbulkpipe(udl->udev, 1), buf, size, udl_urb_completion, unode);
@@ -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