drm: merge drm_usb into udl
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> Reviewed-by: Thierry Reding <treding@nvidia.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:

committed by
Dave Airlie

parent
c5786fe5f1
commit
d4f68a7506
@@ -291,10 +291,9 @@ char *date;</synopsis>
|
|||||||
<title>Device Registration</title>
|
<title>Device Registration</title>
|
||||||
<para>
|
<para>
|
||||||
A number of functions are provided to help with device registration.
|
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>
|
</para>
|
||||||
!Edrivers/gpu/drm/drm_pci.c
|
!Edrivers/gpu/drm/drm_pci.c
|
||||||
!Edrivers/gpu/drm/drm_usb.c
|
|
||||||
!Edrivers/gpu/drm/drm_platform.c
|
!Edrivers/gpu/drm/drm_platform.c
|
||||||
<para>
|
<para>
|
||||||
New drivers that no longer rely on the services provided by the
|
New drivers that no longer rely on the services provided by the
|
||||||
|
@@ -25,12 +25,6 @@ config DRM_MIPI_DSI
|
|||||||
bool
|
bool
|
||||||
depends on DRM
|
depends on DRM
|
||||||
|
|
||||||
config DRM_USB
|
|
||||||
tristate
|
|
||||||
depends on DRM
|
|
||||||
depends on USB_SUPPORT && USB_ARCH_HAS_HCD
|
|
||||||
select USB
|
|
||||||
|
|
||||||
config DRM_KMS_HELPER
|
config DRM_KMS_HELPER
|
||||||
tristate
|
tristate
|
||||||
depends on DRM
|
depends on DRM
|
||||||
|
@@ -22,8 +22,6 @@ drm-$(CONFIG_PCI) += ati_pcigart.o
|
|||||||
drm-$(CONFIG_DRM_PANEL) += drm_panel.o
|
drm-$(CONFIG_DRM_PANEL) += drm_panel.o
|
||||||
drm-$(CONFIG_OF) += drm_of.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_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_plane_helper.o drm_dp_mst_topology.o
|
||||||
drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.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) += drm.o
|
||||||
obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.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_TTM) += ttm/
|
||||||
obj-$(CONFIG_DRM_TDFX) += tdfx/
|
obj-$(CONFIG_DRM_TDFX) += tdfx/
|
||||||
obj-$(CONFIG_DRM_R128) += r128/
|
obj-$(CONFIG_DRM_R128) += r128/
|
||||||
|
@@ -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");
|
|
@@ -1,8 +1,9 @@
|
|||||||
config DRM_UDL
|
config DRM_UDL
|
||||||
tristate "DisplayLink"
|
tristate "DisplayLink"
|
||||||
depends on DRM
|
depends on DRM
|
||||||
|
depends on USB_SUPPORT
|
||||||
depends on USB_ARCH_HAS_HCD
|
depends on USB_ARCH_HAS_HCD
|
||||||
select DRM_USB
|
select USB
|
||||||
select FB_SYS_FILLRECT
|
select FB_SYS_FILLRECT
|
||||||
select FB_SYS_COPYAREA
|
select FB_SYS_COPYAREA
|
||||||
select FB_SYS_IMAGEBLIT
|
select FB_SYS_IMAGEBLIT
|
||||||
|
@@ -34,8 +34,8 @@ static u8 *udl_get_edid(struct udl_device *udl)
|
|||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
for (i = 0; i < EDID_LENGTH; i++) {
|
for (i = 0; i < EDID_LENGTH; i++) {
|
||||||
ret = usb_control_msg(udl->ddev->usbdev,
|
ret = usb_control_msg(udl->udev,
|
||||||
usb_rcvctrlpipe(udl->ddev->usbdev, 0), (0x02),
|
usb_rcvctrlpipe(udl->udev, 0), (0x02),
|
||||||
(0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
|
(0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
|
||||||
HZ);
|
HZ);
|
||||||
if (ret < 1) {
|
if (ret < 1) {
|
||||||
|
@@ -7,55 +7,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <drm/drm_usb.h>
|
#include <drm/drmP.h>
|
||||||
#include <drm/drm_crtc_helper.h>
|
#include <drm/drm_crtc_helper.h>
|
||||||
#include "udl_drv.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)
|
static int udl_driver_set_busid(struct drm_device *d, struct drm_master *m)
|
||||||
{
|
{
|
||||||
return 0;
|
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 = {
|
static const struct vm_operations_struct udl_gem_vm_ops = {
|
||||||
.fault = udl_gem_fault,
|
.fault = udl_gem_fault,
|
||||||
.open = drm_gem_vm_open,
|
.open = drm_gem_vm_open,
|
||||||
@@ -102,6 +62,61 @@ static struct drm_driver driver = {
|
|||||||
.patchlevel = DRIVER_PATCHLEVEL,
|
.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 = {
|
static struct usb_driver udl_driver = {
|
||||||
.name = "udl",
|
.name = "udl",
|
||||||
.probe = udl_usb_probe,
|
.probe = udl_usb_probe,
|
||||||
@@ -111,13 +126,14 @@ static struct usb_driver udl_driver = {
|
|||||||
|
|
||||||
static int __init udl_init(void)
|
static int __init udl_init(void)
|
||||||
{
|
{
|
||||||
return drm_usb_init(&driver, &udl_driver);
|
return usb_register(&udl_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit udl_exit(void)
|
static void __exit udl_exit(void)
|
||||||
{
|
{
|
||||||
drm_usb_exit(&driver, &udl_driver);
|
usb_deregister(&udl_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(udl_init);
|
module_init(udl_init);
|
||||||
module_exit(udl_exit);
|
module_exit(udl_exit);
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
@@ -47,6 +47,7 @@ struct udl_fbdev;
|
|||||||
struct udl_device {
|
struct udl_device {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct drm_device *ddev;
|
struct drm_device *ddev;
|
||||||
|
struct usb_device *udev;
|
||||||
|
|
||||||
int sku_pixel_limit;
|
int sku_pixel_limit;
|
||||||
|
|
||||||
|
@@ -202,7 +202,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size)
|
|||||||
}
|
}
|
||||||
unode->urb = urb;
|
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);
|
&urb->transfer_dma);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
kfree(unode);
|
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 */
|
/* 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);
|
buf, size, udl_urb_completion, unode);
|
||||||
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
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)
|
int udl_driver_load(struct drm_device *dev, unsigned long flags)
|
||||||
{
|
{
|
||||||
|
struct usb_device *udev = (void*)flags;
|
||||||
struct udl_device *udl;
|
struct udl_device *udl;
|
||||||
int ret = -ENOMEM;
|
int ret = -ENOMEM;
|
||||||
|
|
||||||
@@ -290,10 +291,11 @@ int udl_driver_load(struct drm_device *dev, unsigned long flags)
|
|||||||
if (!udl)
|
if (!udl)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
udl->udev = udev;
|
||||||
udl->ddev = dev;
|
udl->ddev = dev;
|
||||||
dev->dev_private = udl;
|
dev->dev_private = udl;
|
||||||
|
|
||||||
if (!udl_parse_vendor_descriptor(dev, dev->usbdev)) {
|
if (!udl_parse_vendor_descriptor(dev, udl->udev)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
DRM_ERROR("firmware not recognized. Assume incompatible device\n");
|
DRM_ERROR("firmware not recognized. Assume incompatible device\n");
|
||||||
goto err;
|
goto err;
|
||||||
|
@@ -1020,7 +1020,6 @@ struct drm_device {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct platform_device *platformdev; /**< Platform device struture */
|
struct platform_device *platformdev; /**< Platform device struture */
|
||||||
struct usb_device *usbdev;
|
|
||||||
|
|
||||||
struct drm_sg_mem *sg; /**< Scatter gather memory */
|
struct drm_sg_mem *sg; /**< Scatter gather memory */
|
||||||
unsigned int num_crtcs; /**< Number of CRTCs on this device */
|
unsigned int num_crtcs; /**< Number of CRTCs on this device */
|
||||||
|
@@ -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
|
|
Reference in New Issue
Block a user