Unofficial Linux support for the AVerMedia Live Gamer DUO GC570D
(1461:0054, subsystem 1461:5700). The project exposes both HDMI inputs to
Video4Linux2 and ALSA, initializes HDMI IN 1 passthrough, performs the tested
HDR-to-SDR/downscale capture path, and exposes the enclosure lighting through
the standard Linux multicolor LED class. A supplied WirePlumber policy
publishes both ALSA inputs through PipeWire and its PulseAudio-compatible API
for desktop applications.
This is experimental software for one exact PCI subsystem. It is not an
official AVerMedia project and is not endorsed by AVerMedia. Read
NOTICE.md and docs/REVERSE_ENGINEERING.md
before redistributing it.
Fork note: this repo has a fork maintained by @eliseohh, forked from neoyagami/OpenGC570D. The driver source is upstream's and unchanged; the only addition is the verified CachyOS/Arch build note under Verified configurations. Upstream remains the canonical project.
The GC570D had no Linux driver that provided the functions I needed. This capture card was one of the last pieces of hardware keeping me tied to Windows: passthrough, two capture inputs, their audio and the enclosure lighting were all part of my normal use. I did not want to replace the card; I wanted to understand the hardware I own and make it useful on Linux.
Ghidra and AI agents were used as engineering tools to study the behavior of the official Windows driver and reimplement the required hardware operations through Linux PCI, V4L2, ALSA and LED interfaces. Research priorities, hypotheses, hardware trials and publication decisions were determined through direct human review rather than delegated to the tools. The goal is learning and interoperability, and the personal result is simple: this card no longer requires Windows, so I can finally leave Windows behind.
A personal note: this repository is an experiment born partly out of desperation. I began without prior expertise in kernel drivers, HDMI state machines or capture DMA, and I could not have brought the project this far without AI assistance. The development was collaborative, but its direction, physical hardware work, evaluation of results and publication remained under my control. AI agents were powerful engineering tools in that process, alongside Ghidra and careful one-test-at-a-time hardware work.
Validated on the project hardware:
| Function | Working behavior |
|---|---|
| HDMI IN 1 passthrough | 3840x2160p60 SDR and HDR; 2560x1440p60 SDR and HDR; 2560x1440p120 HDR |
| HDMI IN 1 high-resolution capture | 2160p60 SDR/HDR, 1440p60 SDR/HDR and measured 1440p120 HDR input converted to 1920x1080 YUYV SDR at 60 fps |
| HDMI IN 1 native capture | 1280x720p60 SDR input captured as 1280x720 YUYV at 60 fps; 720x480p59.94/60 SDR input from a RetroScaler2x captured as 720x480 YUYV and displayed at its intended 4:3 aspect ratio |
| HDMI IN 2 capture | 1920x1080 YUYV at 60 fps |
| HDMI IN 1 audio | HDMI 1 (Passthrough), ALSA capture device 1, stereo S16_LE at 48 kHz; direct ALSA and PipeWire validated, including automatic recovery on the same open audio stream after disconnect/reconnect |
| HDMI IN 2 audio | HDMI 2 (Capture Only), ALSA capture device 0, stereo S16_LE at 48 kHz; direct ALSA and PipeWire validated |
| Concurrent operation | Both V4L2 streams and both audio inputs active together through the tested ALSA/PipeWire path |
| Hot-plug and disconnected inputs | Both V4L2 nodes concurrently supply the built-in generic no-signal frame at 1920x1080 YUYV/60 fps without video DMA; HDMI IN 1 and HDMI IN 2 each physically passed a complete live-to-placeholder-to-live cycle on the same open V4L2 stream, including HDMI IN 1 video and audio recovery while HDMI IN 2 remained active |
| System suspend (S3/deep) | When idle, the driver quiesces the card and reinitializes the HDMI receivers, EDID/HPD handling and RGB controller after resume. HDMI IN 2 capture recovery was physically validated without reloading the module. An active V4L2 or prepared ALSA capture deliberately prevents system sleep with -EBUSY; active V4L2 blocking was physically validated |
| RGB enclosure | Standard gc570d:rgb:status multicolor LED, fixed RGB, single-color breathing and red/yellow/green/cyan/blue/magenta/white breathing cycle |
The 720x480 mode stores a 3:2 raster but represents 4:3 video through its non-square pixel aspect ratio. Testing also confirmed that only one client should negotiate the format of a V4L2 input at a time: multiple capture or PipeWire sources opened on the same input can request competing resolutions.
Recovered but not yet fully validated: the remaining 1080p-or-lower input matrix, including 720x576, every source/monitor combination, VRR, and all advertised refresh rates. HDCP-protected content is unsupported. Capture output is SDR, capped at 60 fps, and no larger than 1920x1080.
Independent reproductions of the driver on other distributions:
| Distribution | Kernel | Compiler | Secure Boot | Result |
|---|---|---|---|---|
| CachyOS (Arch-based) | 7.2.2-1-cachyos (clang-built) |
clang 22.1.8 | disabled | 1461:0054/1461:5700 binds; HDMI IN 2 capture, both ALSA capture devices and the RGB LED verified |
Build note for clang-built kernels: these kernels pass clang-only flags
(-mstack-alignment=8, -mretpoline-external-thunk, ...) that GCC rejects.
The Makefile reads the target kernel's include/config/auto.conf and selects
the LLVM toolchain automatically when CONFIG_CC_IS_CLANG=y, so plain make
works; make LLVM=1 still forces it explicitly:
make # auto-selects LLVM on clang-built kernels
sudo ./scripts/gc570d-load.shThe current development and hardware validation environment is Bazzite 44. Testing help is especially welcome on other Linux distributions, kernel versions, desktop audio stacks, HDMI sources and displays. Successful results are as useful as failures because they help distinguish driver problems from distribution-specific installation or integration issues.
Please include the distribution and version, uname -r, compiler, PCI
subsystem ID, installation method, Secure Boot state, source/display mode and
the V4L2 or ALSA behavior observed. See CONTRIBUTING.md
for the complete test-report checklist.
Each source, script, and integration file starts with an SPDX
GPL-2.0-only identifier and a short description of its responsibility.
| Path | Responsibility |
|---|---|
src/gc570d-main.c |
PCI probe/removal, system suspend/resume, module parameters, lifetime, and subsystem coordination |
src/gc570d-hw.c |
Interrupts, bridge/Xilinx access, and common hardware diagnostics |
src/gc570d-i2c.c |
Transactions through the card's internal I2C controllers |
src/gc570d-receiver.c |
HDMI receiver setup, signal detection, EDID, and color conversion |
src/gc570d-splitter.c |
HDMI passthrough, HPD, EDID, TMDS/SCDC, and output state machine |
src/gc570d-dma.c |
Video DMA descriptors, VIP/scaler setup, and diagnostic capture |
src/gc570d-video.c |
V4L2 devices, videobuf2 queues, formats, and streaming |
src/gc570d-audio.c |
ALSA PCM devices and audio DMA |
src/gc570d-led.c |
Multicolor LED-class device and enclosure effects |
src/gc570d.h |
Shared registers, constants, state, and subsystem declarations |
assets/ |
Editable project artwork, including the replaceable 640x360 no-signal frame |
data/ |
Generated/static data embedded by the driver: HDR LUT and YUYV no-signal frame |
scripts/ |
Build-tree loading, installation, audio setup, status, and release checks |
packaging/ |
Fedora AKMOD/RPM specifications and Universal Blue integration proposal |
config/ |
systemd autoload and system-wide WirePlumber policy |
Packaging and maintenance information:
MAINTAINERS.mdidentifies the maintained hardware and project responsibilities.SECURITY.mddescribes security-sensitive reporting.docs/PACKAGING.mddefines the intended distribution package boundary and module-signing order.docs/DATA_PROVENANCE.mdinventories embedded functional and project-authored data for distributor review.
- A Linux kernel with headers/build files for the running kernel.
- GCC, make, binutils and the normal external-module toolchain.
- V4L2, videobuf2, ALSA and multicolor LED kernel support.
v4l2-ctlfor command-line video tests andalsa-utilsforarecord.- PipeWire, WirePlumber and
pactlfor the tested desktop audio path. - Secure Boot disabled, or a locally signed module enrolled by the owner.
Do not bind the card to a virtual machine or vfio-pci while loading this
driver.
Build for the running kernel:
makeFrom the checkout, load the module. HDMI IN 2 becomes available immediately; HDMI IN 1 and passthrough initialize automatically in the background when the source and HDMI OUT display are connected and powered:
sudo ./scripts/gc570d-load.shThe complete automatic negotiation normally takes about ten seconds. The module keeps retrying while it waits for the HDMI equipment.
For the most reliable HDMI IN 1 passthrough resolution negotiation, connect and power the monitor or TV on HDMI OUT first, then connect or power the source on HDMI IN 1. This lets the source read the downstream display capabilities during its initial HDMI/EDID negotiation. If the source was connected first and selected an unsuitable mode, reconnect or restart the source after the HDMI OUT display is ready.
Publish both ALSA inputs through WirePlumber, PipeWire and the
PulseAudio-compatible API. Run this as the desktop user, not with sudo:
./scripts/setup-pipewire.shInspect the result:
sudo ./scripts/status.shDetailed installation, capture, audio and RGB instructions are in
docs/INSTALL.md and docs/USAGE.md.
The no-signal image can be replaced before compilation; see
docs/INSTALL.md.
On a conventional mutable distribution, sudo make install installs the
module under /lib/modules/$(uname -r)/extra/gc570d/ and runs depmod.
On Bazzite/Fedora Atomic or another immutable system, use the portable
installer. It keeps the module under /var/lib/gc570d/<kernel>/ and installs
small launchers under /usr/local/sbin. It also enables gc570d.service and
installs the WirePlumber policy system-wide, so the driver and both desktop
audio sources are available automatically after reboot:
sudo ./scripts/install-portable.sh
sudo rebootThe module must be rebuilt after every kernel update. An unsigned out-of-tree module may be rejected by Secure Boot.
For immediate use without reboot, run sudo gc570d-load; the current desktop
session may then need gc570d-setup-pipewire once to reload WirePlumber.
The normal default enables every implemented part. To load only HDMI IN 2 for diagnosis, then enable HDMI IN 1 manually later:
sudo ./scripts/gc570d-load.sh --hdmi2-only
sudo ./scripts/gc570d-init-hdmi1.shAny application opening both V4L2 nodes must start HDMI IN 2 first and HDMI IN
1 second. Direct ALSA clients can open HDMI 2 (Capture Only) and HDMI 1 (Passthrough) independently. For desktop applications, the portable
installation publishes both sources automatically through PipeWire; when
running from a checkout, run setup-pipewire.sh. OBS was used to validate this
four-source arrangement as the original streaming target, but it is not
required to access any driver interface.
This is not presented as a clean-room implementation. A lawfully obtained
official Windows driver was analyzed with Ghidra to understand device
initialization and interoperability behavior. AI agents assisted with
static-analysis navigation, comparison of decompiled routines, Linux driver
and script implementation, documentation, and the preparation of bounded
hardware tests. The project goals and technical approach were established
under my direction; hardware tests were performed and physically observed by
me, and the resulting code and documentation were reviewed before publication.
Full details are in
docs/REVERSE_ENGINEERING.md.
The independently written Linux source and scripts are licensed under
GPL-2.0-only. See LICENSE. This license grant does not grant any
rights to third-party trademarks or proprietary vendor software.