From: Ben Hoff <hoff.benjamin.k@gmail.com>
To: linux-media@vger.kernel.org
Cc: mchehab@kernel.org, hverkuil@kernel.org,
Ben Hoff <hoff.benjamin.k@gmail.com>
Subject: [PATCH v1 0/2] media: pci: AVMatrix HWS capture driver
Date: Sun, 11 Jan 2026 21:24:18 -0500 [thread overview]
Message-ID: <20260112022420.390854-1-hoff.benjamin.k@gmail.com> (raw)
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
next reply other threads:[~2026-01-12 2:24 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-12 2:24 Ben Hoff [this message]
2026-01-12 2:24 ` [PATCH v1 1/2] media: pci: add AVMatrix HWS capture driver Ben Hoff
2026-01-12 2:24 ` [PATCH v1 2/2] MAINTAINERS: add entry for AVMatrix HWS driver Ben Hoff
2026-02-08 0:35 ` [PATCH v1 0/2] media: pci: AVMatrix HWS capture driver Ben Hoff
2026-02-09 11:47 ` Hans Verkuil
2026-02-09 12:53 ` Hans Verkuil
2026-03-17 16:01 ` Hans Verkuil
2026-03-18 0:23 ` Ben Hoff
2026-03-18 0:10 ` [PATCH v2 0/2] media: pci: add " Ben Hoff
2026-03-18 0:10 ` [PATCH v2 1/2] " Ben Hoff
2026-03-24 9:17 ` Hans Verkuil
2026-03-18 0:10 ` [PATCH v2 2/2] MAINTAINERS: add entry for AVMatrix HWS driver Ben Hoff
2026-03-24 9:19 ` [PATCH v2 0/2] media: pci: add AVMatrix HWS capture driver Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260112022420.390854-1-hoff.benjamin.k@gmail.com \
--to=hoff.benjamin.k@gmail.com \
--cc=hverkuil@kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox