[PATCH v2 3/3] drm/udl: Retrieve USB device from struct drm_device.dev
Daniel Vetter
daniel at ffwll.ch
Tue Nov 3 10:56:50 UTC 2020
On Tue, Nov 03, 2020 at 11:36:56AM +0100, Thomas Zimmermann wrote:
> Drop the driver's udev field in favor of struct drm_device.dev. No
> functional changes made.
>
> v2:
> * upcast dev with drm_dev_get_usb_device()
Again, witht that helper either moved to udl_drv.h or to usb code:
Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
> drivers/gpu/drm/udl/udl_connector.c | 9 +++++----
> drivers/gpu/drm/udl/udl_drv.c | 3 ---
> drivers/gpu/drm/udl/udl_drv.h | 1 -
> drivers/gpu/drm/udl/udl_main.c | 25 ++++++++++++++-----------
> 4 files changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
> index cdc1c42e1669..487e03e1727c 100644
> --- a/drivers/gpu/drm/udl/udl_connector.c
> +++ b/drivers/gpu/drm/udl/udl_connector.c
> @@ -10,6 +10,7 @@
> #include <drm/drm_atomic_state_helper.h>
> #include <drm/drm_crtc_helper.h>
> #include <drm/drm_probe_helper.h>
> +#include <drm/drm_usb_helper.h>
>
> #include "udl_connector.h"
> #include "udl_drv.h"
> @@ -20,6 +21,7 @@ static int udl_get_edid_block(void *data, u8 *buf, unsigned int block,
> int ret, i;
> u8 *read_buff;
> struct udl_device *udl = data;
> + struct usb_device *udev = drm_dev_get_usb_device(&udl->drm);
>
> read_buff = kmalloc(2, GFP_KERNEL);
> if (!read_buff)
> @@ -27,10 +29,9 @@ static int udl_get_edid_block(void *data, u8 *buf, unsigned int block,
>
> for (i = 0; i < len; i++) {
> int bval = (i + block * EDID_LENGTH) << 8;
> - ret = usb_control_msg(udl->udev,
> - usb_rcvctrlpipe(udl->udev, 0),
> - (0x02), (0x80 | (0x02 << 5)), bval,
> - 0xA1, read_buff, 2, HZ);
> + ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
> + 0x02, (0x80 | (0x02 << 5)), bval,
> + 0xA1, read_buff, 2, HZ);
> if (ret < 1) {
> DRM_ERROR("Read EDID byte %d failed err %x\n", i, ret);
> kfree(read_buff);
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index 96d4317a2c1b..993469d152da 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -53,7 +53,6 @@ static struct drm_driver driver = {
>
> static struct udl_device *udl_driver_create(struct usb_interface *interface)
> {
> - struct usb_device *udev = interface_to_usbdev(interface);
> struct udl_device *udl;
> int r;
>
> @@ -62,8 +61,6 @@ static struct udl_device *udl_driver_create(struct usb_interface *interface)
> if (IS_ERR(udl))
> return udl;
>
> - udl->udev = udev;
> -
> r = udl_init(udl);
> if (r)
> return ERR_PTR(r);
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index b1461f30780b..889bfa21deb0 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -50,7 +50,6 @@ struct urb_list {
> struct udl_device {
> struct drm_device drm;
> struct device *dev;
> - struct usb_device *udev;
>
> struct drm_simple_display_pipe display_pipe;
>
> diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
> index f5d27f2a5654..208505a39ace 100644
> --- a/drivers/gpu/drm/udl/udl_main.c
> +++ b/drivers/gpu/drm/udl/udl_main.c
> @@ -11,6 +11,7 @@
> #include <drm/drm.h>
> #include <drm/drm_print.h>
> #include <drm/drm_probe_helper.h>
> +#include <drm/drm_usb_helper.h>
>
> #include "udl_drv.h"
>
> @@ -26,10 +27,10 @@
> #define GET_URB_TIMEOUT HZ
> #define FREE_URB_TIMEOUT (HZ*2)
>
> -static int udl_parse_vendor_descriptor(struct drm_device *dev,
> - struct usb_device *usbdev)
> +static int udl_parse_vendor_descriptor(struct udl_device *udl)
> {
> - struct udl_device *udl = to_udl(dev);
> + struct drm_device *dev = &udl->drm;
> + struct usb_device *udev = drm_dev_get_usb_device(dev);
> char *desc;
> char *buf;
> char *desc_end;
> @@ -41,7 +42,7 @@ static int udl_parse_vendor_descriptor(struct drm_device *dev,
> return false;
> desc = buf;
>
> - total_len = usb_get_descriptor(usbdev, 0x5f, /* vendor specific */
> + total_len = usb_get_descriptor(udev, 0x5f, /* vendor specific */
> 0, desc, MAX_VENDOR_DESCRIPTOR_SIZE);
> if (total_len > 5) {
> DRM_INFO("vendor descriptor length:%x data:%11ph\n",
> @@ -98,19 +99,20 @@ static int udl_parse_vendor_descriptor(struct drm_device *dev,
> */
> static int udl_select_std_channel(struct udl_device *udl)
> {
> - int ret;
> static const u8 set_def_chn[] = {0x57, 0xCD, 0xDC, 0xA7,
> 0x1C, 0x88, 0x5E, 0x15,
> 0x60, 0xFE, 0xC6, 0x97,
> 0x16, 0x3D, 0x47, 0xF2};
> +
> void *sendbuf;
> + int ret;
> + struct usb_device *udev = drm_dev_get_usb_device(&udl->drm);
>
> sendbuf = kmemdup(set_def_chn, sizeof(set_def_chn), GFP_KERNEL);
> if (!sendbuf)
> return -ENOMEM;
>
> - ret = usb_control_msg(udl->udev,
> - usb_sndctrlpipe(udl->udev, 0),
> + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
> NR_USB_REQUEST_CHANNEL,
> (USB_DIR_OUT | USB_TYPE_VENDOR), 0, 0,
> sendbuf, sizeof(set_def_chn),
> @@ -202,6 +204,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size)
> struct urb_node *unode;
> char *buf;
> size_t wanted_size = count * size;
> + struct usb_device *udev = drm_dev_get_usb_device(&udl->drm);
>
> spin_lock_init(&udl->urbs.lock);
>
> @@ -229,7 +232,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size)
> }
> unode->urb = urb;
>
> - buf = usb_alloc_coherent(udl->udev, size, GFP_KERNEL,
> + buf = usb_alloc_coherent(udev, size, GFP_KERNEL,
> &urb->transfer_dma);
> if (!buf) {
> kfree(unode);
> @@ -243,8 +246,8 @@ 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->udev, usb_sndbulkpipe(udl->udev, 1),
> - buf, size, udl_urb_completion, unode);
> + usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, 1),
> + buf, size, udl_urb_completion, unode);
> urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
>
> list_add_tail(&unode->entry, &udl->urbs.list);
> @@ -316,7 +319,7 @@ int udl_init(struct udl_device *udl)
>
> mutex_init(&udl->gem_lock);
>
> - if (!udl_parse_vendor_descriptor(dev, udl->udev)) {
> + if (!udl_parse_vendor_descriptor(udl)) {
> ret = -ENODEV;
> DRM_ERROR("firmware not recognized. Assume incompatible device\n");
> goto err;
> --
> 2.29.0
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list