Index | Thread | Search

From:
Marcus Glocker <marcus@nazgul.ch>
Subject:
Re: Support LG UltraFine Display Camera
To:
"Kirill A. Korinsky" <kirill@korins.ky>
Cc:
OpenBSD tech <tech@openbsd.org>, Klemens Nanni <kn@openbsd.org>
Date:
Sun, 1 Dec 2024 09:36:31 +0100

Download raw body.

Thread
On Sat, Nov 30, 2024 at 11:25:15PM GMT, Kirill A. Korinsky wrote:

> tech@,
> 
> A new quirk UVIDEO_FLAG_RENEGOTIATE_AFTER_SET_ALT from this thread [1] is
> required for at least one more camera: LG UltraFine Display Camera. And this
> camera allows to discover a bug with bulk processing inside uvideo: here
> usbd_get_xfer_status is missing and current code is built on the assumption
> that device always returns dwMaxPayloadTransferSize bytes.
> 
> Here is a diff that adds the missing usbd_get_xfer_status and the quirk.
> 
> Feedback? Tests? Ok?

I currently have no bulk device here to regression test, but the size
fix makes sense to me.

ok mglocker@
 
> Index: sys/dev/usb/uvideo.c
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/usb/uvideo.c,v
> diff -u -p -r1.224 uvideo.c
> --- sys/dev/usb/uvideo.c	30 Nov 2024 17:47:23 -0000	1.224
> +++ sys/dev/usb/uvideo.c	30 Nov 2024 22:20:00 -0000
> @@ -386,6 +386,12 @@ const struct uvideo_devs {
>  	    NULL,
>  	    UVIDEO_FLAG_RENEGOTIATE_AFTER_SET_ALT
>  	},
> +	{   /* Needs renegotiate after setting alternate interface */
> +	    { USB_VENDOR_LG, USB_PRODUCT_LG_ULTRA_FINE_VIDEO },
> +	    NULL,
> +	    NULL,
> +	    UVIDEO_FLAG_RENEGOTIATE_AFTER_SET_ALT
> +	},
>  };
>  #define uvideo_lookup(v, p) \
>  	((const struct uvideo_devs *)usb_lookup(uvideo_devs, v, p))
> @@ -2051,6 +2057,9 @@ uvideo_vs_start_bulk_thread(void *arg)
>  			    DEVNAME(sc), usbd_errstr(error));
>  			break;
>  		}
> +
> +		usbd_get_xfer_status(sc->sc_vs_cur->bxfer.xfer,
> +		    NULL, NULL, &size, NULL);
>  
>  		DPRINTF(2, "%s: *** buffer len = %d\n", DEVNAME(sc), size);
>  
> Index: sys/dev/usb/usbdevs
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/usb/usbdevs,v
> diff -u -p -r1.772 usbdevs
> --- sys/dev/usb/usbdevs	30 Nov 2024 17:41:57 -0000	1.772
> +++ sys/dev/usb/usbdevs	30 Nov 2024 22:21:37 -0000
> @@ -2704,6 +2704,7 @@ product LEXMARK S2450		0x0009	Optra S 24
>  /* LG products */
>  product LG RTL8153		0x9819	RTL8153
>  product LG RTL8153B		0x9820	RTL8153
> +product LG ULTRA_FINE_VIDEO	0x9a68	LG UltraFine Display Camera
>  
>  /* Liebert products */
>  product LIEBERT UPS		0xffff	UPS
> Index: share/man/man4/uvideo.4
> ===================================================================
> RCS file: /home/cvs/src/share/man/man4/uvideo.4,v
> diff -u -p -r1.44 uvideo.4
> --- share/man/man4/uvideo.4	30 Nov 2024 20:15:03 -0000	1.44
> +++ share/man/man4/uvideo.4	30 Nov 2024 22:07:06 -0000
> @@ -47,6 +47,8 @@ Jabra PanaCast 20
>  .It
>  Lenovo EasyCamera (Lenovo IdeaPad s10e Notebooks)
>  .It
> +LG UltraFine Display Camera
> +.It
>  Logitech QuickCam for Notebooks Pro
>  .It
>  Logitech QuickCam Communicate Deluxe
> 
> 
> Footnotes:
> [1]  https://marc.info/?t=173266150800001&r=1&w=2
> 
> -- 
> wbr, Kirill