Re: [PATCH v1 0/2] media: pci: AVMatrix HWS capture driver

Ben Hoff
2026-02-08T00:36:01Z

Hi all,

Just following up on this new driver patch sent Jan 11.

Happy to address review comments or adjust the approach if needed.

I’m happy to maintain this driver going forward.

Thanks,
Ben

On Sun, Jan 11, 2026 at 9:24 PM Ben Hoff <hoff.benjamin.k@gmail.com> wrote:
>
> Hi all,
>
> This series introduces an in-tree AVMatrix HWS PCIe capture driver.
> The driver supports up to four HDMI inputs and exposes the video capture
> path through V4L2. Audio support is intentionally omitted in this
> revision so the series can focus on the video pipeline and PCIe glue.
>
> Major pieces include:
> - PCI glue with capability discovery, BAR setup, interrupt handling,
> and power-management hooks.
> - A vb2-dma-contig based capture pipeline with DV timings support,
> per-channel controls, two-buffer management, and loss-of-signal
> recovery.
>
> The baseline GPL out-of-tree driver is available at:
> https://github.com/benhoff/hws/tree/baseline
> A vendor driver bundle is available at:
> https://www.acasis.com/pages/acasis-product-drivers
> The vendor is not involved in this upstreaming effort.
>
> Prior RFC posting: https://lore.kernel.org/lkml/20251027195638.481129-1-hoff.benjamin.k@gmail.com/
>
> Current status / open items:
> - `v4l2-compliance` passes for each video node, and I have exercised
> basic capture in OBS and run this driver in a steady state mode
> daily
>
> v4l2-compliance (from v4l-utils git, v4l2-compliance 1.32.0):
> v4l2-compliance 1.32.0, 64 bits, 64-bit time_t
>
> Compliance test for HwsCapture device /dev/video1:
>
> Driver Info:
> Driver name : HwsCapture
> Card type : AVMatrix HWS Capture 2
> Bus info : PCI:0000:17:00.0
> Driver version : 6.18.3
> Capabilities : 0x84200001
> Video Capture
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04200001
> Video Capture
> Streaming
> Extended Pix Format
>
> Required ioctls:
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video1 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 1 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK
> test VIDIOC_DV_TIMINGS_CAP: OK
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls (Input 0):
> info: checking v4l2_query_ext_ctrl of control 'User Controls' (0x00980001)
> info: checking v4l2_query_ext_ctrl of control 'Brightness' (0x00980900)
> info: checking v4l2_query_ext_ctrl of control 'Contrast' (0x00980901)
> info: checking v4l2_query_ext_ctrl of control 'Saturation' (0x00980902)
> info: checking v4l2_query_ext_ctrl of control 'Hue' (0x00980903)
> info: checking v4l2_query_ext_ctrl of control 'Brightness' (0x00980900)
> info: checking v4l2_query_ext_ctrl of control 'Contrast' (0x00980901)
> info: checking v4l2_query_ext_ctrl of control 'Saturation' (0x00980902)
> info: checking v4l2_query_ext_ctrl of control 'Hue' (0x00980903)
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> test VIDIOC_QUERYCTRL: OK
> info: checking control 'User Controls' (0x00980001)
> info: checking control 'Brightness' (0x00980900)
> info: checking control 'Contrast' (0x00980901)
> info: checking control 'Saturation' (0x00980902)
> info: checking control 'Hue' (0x00980903)
> test VIDIOC_G/S_CTRL: OK
> info: checking extended control 'User Controls' (0x00980001)
> info: checking extended control 'Brightness' (0x00980900)
> info: checking extended control 'Contrast' (0x00980901)
> info: checking extended control 'Saturation' (0x00980902)
> info: checking extended control 'Hue' (0x00980903)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> info: checking control event 'User Controls' (0x00980001)
> info: checking control event 'Brightness' (0x00980900)
> info: checking control event 'Contrast' (0x00980901)
> info: checking control event 'Saturation' (0x00980902)
> info: checking control event 'Hue' (0x00980903)
> warn: v4l2-test-controls.cpp(1159): V4L2_CID_DV_RX_POWER_PRESENT not found for input 0
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 5 Private Controls: 0
>
> Format ioctls (Input 0):
> info: found 1 formats for buftype 1
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> warn: v4l2-test-formats.cpp(1485): S_PARM is supported for buftype 1, but not for ENUM_FRAMEINTERVALS
> test VIDIOC_G/S_PARM: OK
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls (Input 0):
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls (Input 0):
> info: test buftype Video Capture
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
> test blocking wait: OK
>
> Test input 0:
>
> Stream using all formats:
> test MMAP for Format YUYV, Frame Size 640x480:
> Stride 1280, Field None: OK
> Stride 1344, Field None: OK
> test MMAP for Format YUYV, Frame Size 1920x1080:
> Stride 3840, Field None: OK
> Total for HwsCapture device /dev/video1: 51, Succeeded: 51, Failed: 0, Warnings: 2
>
>
> Thanks for taking a look!
>
> Ben
>
> Ben Hoff (2):
> media: pci: add AVMatrix HWS capture driver
> MAINTAINERS: add entry for AVMatrix HWS driver
>
> MAINTAINERS | 6 +
> drivers/media/pci/Kconfig | 1 +
> drivers/media/pci/Makefile | 1 +
> drivers/media/pci/hws/Kconfig | 12 +
> drivers/media/pci/hws/Makefile | 4 +
> drivers/media/pci/hws/hws.h | 175 +++
> drivers/media/pci/hws/hws_irq.c | 268 ++++
> drivers/media/pci/hws/hws_irq.h | 10 +
> drivers/media/pci/hws/hws_pci.c | 722 +++++++++++
> drivers/media/pci/hws/hws_reg.h | 144 +++
> drivers/media/pci/hws/hws_v4l2_ioctl.c | 755 ++++++++++++
> drivers/media/pci/hws/hws_v4l2_ioctl.h | 38 +
> drivers/media/pci/hws/hws_video.c | 1542 ++++++++++++++++++++++++
> drivers/media/pci/hws/hws_video.h | 29 +
> 14 files changed, 3707 insertions(+)
> create mode 100644 drivers/media/pci/hws/Kconfig
> create mode 100644 drivers/media/pci/hws/Makefile
> create mode 100644 drivers/media/pci/hws/hws.h
> create mode 100644 drivers/media/pci/hws/hws_irq.c
> create mode 100644 drivers/media/pci/hws/hws_irq.h
> create mode 100644 drivers/media/pci/hws/hws_pci.c
> create mode 100644 drivers/media/pci/hws/hws_reg.h
> create mode 100644 drivers/media/pci/hws/hws_v4l2_ioctl.c
> create mode 100644 drivers/media/pci/hws/hws_v4l2_ioctl.h
> create mode 100644 drivers/media/pci/hws/hws_video.c
> create mode 100644 drivers/media/pci/hws/hws_video.h
>
> --
> 2.51.0