Driver specific ioctl interface

147 views
Skip to first unread message

Sanjay Sheth

unread,
Jul 21, 2022, 8:03:34 PM7/21/22
to fwupd
To support firmware upgrade on webcam devices, currently we use Linux UVC driver extension unit controls (XU controls): https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/drivers/uvcvideo.html

Is there any equivalent libraries/APIs available in fwupd framework?
Thanks,
Sanjay

Richard Hughes

unread,
Jul 22, 2022, 4:42:34 AM7/22/22
to Sanjay Sheth, fwupd
On Fri, 22 Jul 2022 at 01:03, Sanjay Sheth <ssh...@logitech.com> wrote:
> Is there any equivalent libraries/APIs available in fwupd framework?

Yes, you can use ioctl just the same as before; it's wrapped in
fu_udev_device_ioctl() if that helps. You'll need to have a superclass
deriving from FuUdevDevice.

Richard.

Sanjay Sheth

unread,
Aug 4, 2022, 2:03:18 PM8/4/22
to fwupd
video4linux subsystem supported by fu_udev_device_ioctl()? Our plugin is not getting invoked at all. How do we add video4linux device entry in our quirk file?

Here is the udevadm/v4l2-ctl output for our webcam device:
root@vc:/# uname -a
Linux vc 5.15.0-43-generic #46~20.04.1-Ubuntu SMP Thu Jul 14 15:20:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

root@vc:/# v4l2-ctl --list-devices
Logitech BRIO (usb-0000:00:14.0-6):
    /dev/video0
    /dev/video1
    /dev/video2
    /dev/video3
    /dev/media0


root@vc:/# v4l2-ctl -d /dev/video0 --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : Logitech BRIO
    Bus info         : usb-0000:00:14.0-6
    Driver version   : 5.15.39
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Media Driver Info:
    Driver name      : uvcvideo
    Model            : Logitech BRIO
    Serial           : 55308137
    Bus info         : usb-0000:00:14.0-6
    Media version    : 5.15.39
    Hardware revision: 0x00000017 (23)
    Driver version   : 5.15.39
Interface Info:
    ID               : 0x03000002
    Type             : V4L Video
Entity Info:
    ID               : 0x00000001 (1)
    Name             : Logitech BRIO
    Function         : V4L2 I/O
    Flags         : default
    Pad 0x0100000d   : 0: Sink
      Link 0x02000029: from remote pad 0x1000010 of entity 'Processing 3': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 640/480
    Pixel Format      : 'YUYV' (YUYV 4:2:2)
    Field             : None
    Bytes per Line    : 1280
    Size Image        : 614400
    Colorspace        : sRGB
    Transfer Function : Rec. 709
    YCbCr/HSV Encoding: ITU-R 601
    Quantization      : Default (maps to Limited Range)
    Flags             :
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 640, Height 480
    Default     : Left 0, Top 0, Width 640, Height 480
    Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
                       contrast 0x00980901 (int)    : min=0 max=255 step=1 default=128 value=128
                     saturation 0x00980902 (int)    : min=0 max=255 step=1 default=128 value=128
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                           gain 0x00980913 (int)    : min=0 max=255 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2
                0: Disabled
                1: 50 Hz
                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2000 max=7500 step=10 default=4000 value=4000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=255 step=1 default=128 value=128
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=1 value=1
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
                1: Manual Mode
                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1
                   pan_absolute 0x009a0908 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                 focus_absolute 0x009a090a (int)    : min=0 max=255 step=5 default=0 value=0 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
                  zoom_absolute 0x009a090d (int)    : min=100 max=500 step=1 default=100 value=100

root@vc:/# v4l2-ctl -d /dev/video1 --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : Logitech BRIO
    Bus info         : usb-0000:00:14.0-6
    Driver version   : 5.15.39
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04a00000
        Metadata Capture
        Streaming
        Extended Pix Format
Media Driver Info:
    Driver name      : uvcvideo
    Model            : Logitech BRIO
    Serial           : 55308137
    Bus info         : usb-0000:00:14.0-6
    Media version    : 5.15.39
    Hardware revision: 0x00000017 (23)
    Driver version   : 5.15.39
Interface Info:
    ID               : 0x03000005
    Type             : V4L Video
Entity Info:
    ID               : 0x00000004 (4)
    Name             : Logitech BRIO
    Function         : V4L2 I/O
Priority: 2
Format Metadata Capture:
    Sample Format   : 'UVCH' (UVC Payload Header Metadata)
    Buffer Size     : 1024

root@vc:/# v4l2-ctl -d /dev/video2 --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : Logitech BRIO
    Bus info         : usb-0000:00:14.0-6
    Driver version   : 5.15.39
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Media Driver Info:
    Driver name      : uvcvideo
    Model            : Logitech BRIO
    Serial           : 55308137
    Bus info         : usb-0000:00:14.0-6
    Media version    : 5.15.39
    Hardware revision: 0x00000017 (23)
    Driver version   : 5.15.39
Interface Info:
    ID               : 0x03000008
    Type             : V4L Video
Entity Info:
    ID               : 0x00000007 (7)
    Name             : Logitech BRIO
    Function         : V4L2 I/O
    Pad 0x01000026   : 0: Sink
      Link 0x0200003b: from remote pad 0x1000010 of entity 'Processing 3': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 340/340
    Pixel Format      : 'GREY' (8-bit Greyscale)
    Field             : None
    Bytes per Line    : 340
    Size Image        : 614400
    Colorspace        : sRGB
    Transfer Function : Rec. 709
    YCbCr/HSV Encoding: ITU-R 601
    Quantization      : Default (maps to Full Range)
    Flags             :
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 340, Height 340
    Default     : Left 0, Top 0, Width 340, Height 340
    Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 340, Height 340, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 340, Height 340, Flags:
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
                       contrast 0x00980901 (int)    : min=0 max=255 step=1 default=128 value=128
                     saturation 0x00980902 (int)    : min=0 max=255 step=1 default=128 value=128
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                           gain 0x00980913 (int)    : min=0 max=255 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2
                0: Disabled
                1: 50 Hz
                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2000 max=7500 step=10 default=4000 value=4000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=255 step=1 default=128 value=128
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=1 value=1
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
                1: Manual Mode
                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1
                   pan_absolute 0x009a0908 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                 focus_absolute 0x009a090a (int)    : min=0 max=255 step=5 default=0 value=0 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
                  zoom_absolute 0x009a090d (int)    : min=100 max=500 step=1 default=100 value=100

root@vc:/# v4l2-ctl -d /dev/video3 --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : Logitech BRIO
    Bus info         : usb-0000:00:14.0-6
    Driver version   : 5.15.39
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04a00000
        Metadata Capture
        Streaming
        Extended Pix Format
Media Driver Info:
    Driver name      : uvcvideo
    Model            : Logitech BRIO
    Serial           : 55308137
    Bus info         : usb-0000:00:14.0-6
    Media version    : 5.15.39
    Hardware revision: 0x00000017 (23)
    Driver version   : 5.15.39
Interface Info:
    ID               : 0x0300000b
    Type             : V4L Video
Entity Info:
    ID               : 0x0000000a (10)
    Name             : Logitech BRIO
    Function         : V4L2 I/O
Priority: 2
Format Metadata Capture:
    Sample Format   : 'UVCH' (UVC Payload Header Metadata)
    Buffer Size     : 1024

root@vc:/# for VIDEO_DEVICE in /dev/video* ; do echo -e "\n\n$VIDEO_DEVICE\n" ; v4l2-ctl --device=$VIDEO_DEVICE --list-inputs ; done
/dev/video0
ioctl: VIDIOC_ENUMINPUT
    Input       : 0
    Name        : Camera 1
    Type        : 0x00000002 (Camera)
    Audioset    : 0x00000000
    Tuner       : 0x00000000
    Standard    : 0x0000000000000000 ()
    Status      : 0x00000000 (ok)
    Capabilities: 0x00000000 (not defined)
/dev/video1
ioctl: VIDIOC_ENUMINPUT
/dev/video2
ioctl: VIDIOC_ENUMINPUT
    Input       : 0
    Name        : Camera 1
    Type        : 0x00000002 (Camera)
    Audioset    : 0x00000000
    Tuner       : 0x00000000
    Standard    : 0x0000000000000000 ()
    Status      : 0x00000000 (ok)
    Capabilities: 0x00000000 (not defined)
/dev/video3
ioctl: VIDIOC_ENUMINPUT


root@vc:/# udevadm info -q all /dev/video0
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video0
N: video0
L: 0
S: v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index0
S: v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video0
E: DEVNAME=/dev/video0
E: MAJOR=81
E: MINOR=0
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=2764753912
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=Logitech BRIO
E: ID_V4L_CAPABILITIES=:capture:
E: ID_VENDOR=046d
E: ID_VENDOR_ENC=046d
E: ID_VENDOR_ID=046d
E: ID_MODEL=Logitech_BRIO
E: ID_MODEL_ENC=Logitech\x20BRIO
E: ID_MODEL_ID=085e
E: ID_REVISION=0017
E: ID_SERIAL=046d_Logitech_BRIO_55308137
E: ID_SERIAL_SHORT=55308137
E: ID_TYPE=video
E: ID_BUS=usb
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=uvcvideo
E: ID_PATH=pci-0000:00:14.0-usb-0:6:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_0
E: ID_FOR_SEAT=video4linux-pci-0000_00_14_0-usb-0_6_1_0
E: COLORD_DEVICE=1
E: COLORD_KIND=camera
E: DEVLINKS=/dev/v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index0 /dev/v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index0
E: TAGS=:seat:uaccess:

root@vc:/# udevadm info -q all /dev/video1
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video1
N: video1
L: 0
S: v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index1
S: v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index1
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video1
E: DEVNAME=/dev/video1
E: MAJOR=81
E: MINOR=1
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=2764750353
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=Logitech BRIO
E: ID_V4L_CAPABILITIES=:
E: ID_VENDOR=046d
E: ID_VENDOR_ENC=046d
E: ID_VENDOR_ID=046d
E: ID_MODEL=Logitech_BRIO
E: ID_MODEL_ENC=Logitech\x20BRIO
E: ID_MODEL_ID=085e
E: ID_REVISION=0017
E: ID_SERIAL=046d_Logitech_BRIO_55308137
E: ID_SERIAL_SHORT=55308137
E: ID_TYPE=video
E: ID_BUS=usb
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=uvcvideo
E: ID_PATH=pci-0000:00:14.0-usb-0:6:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_0
E: ID_FOR_SEAT=video4linux-pci-0000_00_14_0-usb-0_6_1_0
E: COLORD_DEVICE=1
E: COLORD_KIND=camera
E: DEVLINKS=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index1 /dev/v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index1
E: TAGS=:uaccess:seat:

root@vc:/# udevadm info -q all /dev/video2
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video2
N: video2
L: 0
S: v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index2
S: v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index2
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video2
E: DEVNAME=/dev/video2
E: MAJOR=81
E: MINOR=2
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=2764753236
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=Logitech BRIO
E: ID_V4L_CAPABILITIES=:capture:
E: ID_VENDOR=046d
E: ID_VENDOR_ENC=046d
E: ID_VENDOR_ID=046d
E: ID_MODEL=Logitech_BRIO
E: ID_MODEL_ENC=Logitech\x20BRIO
E: ID_MODEL_ID=085e
E: ID_REVISION=0017
E: ID_SERIAL=046d_Logitech_BRIO_55308137
E: ID_SERIAL_SHORT=55308137
E: ID_TYPE=video
E: ID_BUS=usb
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=uvcvideo
E: ID_PATH=pci-0000:00:14.0-usb-0:6:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_0
E: ID_FOR_SEAT=video4linux-pci-0000_00_14_0-usb-0_6_1_0
E: COLORD_DEVICE=1
E: COLORD_KIND=camera
E: DEVLINKS=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index2 /dev/v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index2
E: TAGS=:uaccess:seat:

root@vc:/# udevadm info -q all /dev/video3
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video3
N: video3
L: 0
S: v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index3
S: v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index3
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video3
E: DEVNAME=/dev/video3
E: MAJOR=81
E: MINOR=3
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=2764753005
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=Logitech BRIO
E: ID_V4L_CAPABILITIES=:
E: ID_VENDOR=046d
E: ID_VENDOR_ENC=046d
E: ID_VENDOR_ID=046d
E: ID_MODEL=Logitech_BRIO
E: ID_MODEL_ENC=Logitech\x20BRIO
E: ID_MODEL_ID=085e
E: ID_REVISION=0017
E: ID_SERIAL=046d_Logitech_BRIO_55308137
E: ID_SERIAL_SHORT=55308137
E: ID_TYPE=video
E: ID_BUS=usb
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=uvcvideo
E: ID_PATH=pci-0000:00:14.0-usb-0:6:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_0
E: ID_FOR_SEAT=video4linux-pci-0000_00_14_0-usb-0_6_1_0
E: COLORD_DEVICE=1
E: COLORD_KIND=camera
E: DEVLINKS=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:6:1.0-video-index3 /dev/v4l/by-id/usb-046d_Logitech_BRIO_55308137-video-index3
E: TAGS=:uaccess:seat:

root@vc:/# udevadm info -q all /dev/media0
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/media0
N: media0
L: 0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/media0
E: DEVNAME=/dev/media0
E: MAJOR=509
E: MINOR=0
E: SUBSYSTEM=media

Richard Hughes

unread,
Aug 10, 2022, 4:54:34 AM8/10/22
to Sanjay Sheth, fwupd
On Thu, 4 Aug 2022 at 19:03, Sanjay Sheth <ssh...@logitech.com> wrote:
> video4linux subsystem supported by fu_udev_device_ioctl()? Our plugin is not getting invoked at all. How do we add video4linux device entry in our quirk file?

Can you post what you have in the quirk file now? Presumably you're
matching the device by VID and PID?

Richard.

Sanjay Sheth

unread,
Aug 10, 2022, 10:11:07 PM8/10/22
to fwupd
Thanks Richard. Quirk file attached. Also attaching console output captured with verbose logging (G_MESSAGES_DEBUG, FU_UDEV_DEVICE_DEBUG, FWUPD_PROBE_VERBOSE etc). We do see valid VID/PID/Serial/Name etc in raw dump of the device. But after invoking fu_udev_device_probe() for each video4linux subsystems, it throws "No detected devices" message. Let us know if we need to change quirk file, udev rules, conf files, update any Databases etc.
Thanks,
Sanjay
get_devices_output.txt
logitech-webcams.quirk

Richard Hughes

unread,
Aug 22, 2022, 9:05:47 AM8/22/22
to Sanjay Sheth, fwupd
Hi Sanjay,

Sorry for the delay, I'm just back from PTO and processing all the
messages. Can you try the commit in wip/hughsie/udev-prober and see if
it helps? This should allow the instance IDs to be populated. If you
want to send me hardware that's fine too.

Richard.
> --
> You received this message because you are subscribed to the Google Groups "fwupd" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to fwupd+un...@googlegroups.com.
> To view this discussion on the web, visit https://groups.google.com/d/msgid/fwupd/97c52af3-247a-4180-83ba-6c1434be86aen%40googlegroups.com.

Sanjay Sheth

unread,
Aug 25, 2022, 3:12:26 AM8/25/22
to fwupd
Thanks Richard. That helped. We are in dev phase and gathering other requirements. e.g.:
Flag for video4linux subsystem, something similar to HAVE_IOCTL_H
Support for video4linux subsystem to set physical id (fu_udev_device_set_physical_id)

Richard Hughes

unread,
Aug 25, 2022, 4:23:51 AM8/25/22
to Sanjay Sheth, fwupd
On Thu, 25 Aug 2022 at 08:12, Sanjay Sheth <ssh...@logitech.com> wrote:
> Support for video4linux subsystem to set physical id (fu_udev_device_set_physical_id)

Yes, you need to check what the appropriate physical ID would be; I
think you can work something out pretty easily.

Richard.
Reply all
Reply to author
Forward
0 new messages