Skip to content

Add HP EliteBook X G2i audio and camera packages - #124

Draft
meirdick wants to merge 2 commits into
omacom-io:masterfrom
meirdick:hp-elitebook-x-g2i
Draft

Add HP EliteBook X G2i audio and camera packages#124
meirdick wants to merge 2 commits into
omacom-io:masterfrom
meirdick:hp-elitebook-x-g2i

Conversation

@meirdick

@meirdick meirdick commented Aug 7, 2026

Copy link
Copy Markdown

Two packages for the HP EliteBook X G2i (Panther Lake). On a stock install this
machine has no working speakers, microphone or webcam.

Same model as dell-xps-touchpad-haptics: the packages live here, and a
hardware-gated script in basecamp/omarchy pulls them in. Companion PR:
basecamp/omarchy#6596.

hp-elitebook-x-g2i-audio

Without this package the machine has no Speaker device. The card sits on profile
off with no usable sink.

The board pairs an RT712 SDCA codec with four TAS2783 smart amps. Panther Lake's
ACPI match table has no entry for that combination, so SOF falls back to a
barebones machine driver and never instantiates the amps.

The package installs four things:

  1. The match-table entry, as DKMS. A copied .ko stops applying at the next
    kernel upgrade, and the failure mode is no speakers with no warning.
  2. Firmware filename symlinks. tas2783-sdw.c requests 8E86-2-{9,A,C,D}.bin.
    linux-firmware ships the same calibration blobs as
    8E86-2-0x{9,A,C,D}.bin.zst. This is a naming bug, so the package symlinks
    and leaves linux-firmware owning the files. post_remove removes only
    symlinks it created.
  3. A UCM profile, so the HiFi profile exposes Speaker and Mic devices instead of
    pro-audio passthrough.
  4. A boot-race guard. WirePlumber can start before the amp kcontrols exist,
    which leaves the card on profile off with no sinks and no sources. The
    guard waits up to 12 seconds for the kcontrol and returns at once when the
    control is already present.

The package carries no vendor tuning data.

hp-elitebook-x-g2i-camera

This package bypasses Intel's CamHAL. It is a workaround, not a fix.

CamHAL cannot drive this camera. With cameraDebug=0xFF:

GraphConfig: <out w="2944" h="1632">
PlatformData: Isp raw crop [0, 88, -56, 88], wxh [2944 x 1632]

The graph settings binary for OV05C10_CJFPE50 expects a 2944-wide readout. The
ov05c10 driver exposes 2888x1808, and so does Intel's own
sensors/ov05c10-uf.json. The resulting crop is negative. psys itself works and
logs frame id N is done. It processes frames from a region the sensor never
sends, so the output is black. Correct graph settings need Intel's tooling, so
this cannot be fixed downstream.

The package runs the ISP in userspace instead:

ov05c10 -> CSI2 -> ISYS (raw Bayer) -> debayer, AE, WB -> v4l2loopback

It also ships the ov05c10 sensor driver, which exists neither in mainline nor
in intel-ipu7-camera, and an ipu-bridge patch that widens the OVTI05C1
entry from one link frequency to two. Without the patch, probing fails with
no link frequency 900000000 supported.

exclusive_caps=1 and the service are a pair

Chrome lists only V4L2 devices that advertise CAPTURE without OUTPUT. With
exclusive_caps=0 the loopback advertises both, and Chrome omits the camera.
Firefox and OBS are unaffected, which makes the symptom confusing to diagnose.

exclusive_caps=1 advertises capture-only while a writer is attached, so the
service holds the device open at all times. Both ship in one package so they
cannot drift apart, and the unit uses Restart=always.

Known limitations

  • No HP ISP tuning. Colour, denoise and sharpening come from a plain debayer, so
    the image is softer and noisier than the hardware ISP would give.
  • Auto-exposure is a proportional loop over exposure, analogue gain and digital
    gain. White balance is static gray-world gains, because this sensor exposes no
    V4L2_CID_RED_BALANCE or V4L2_CID_BLUE_BALANCE.
  • One ffmpeg process runs while the service is up.
  • The privacy LED lights only while an application uses the camera.

Testing

Verified on the reference machine, SKU D4DU1UT#ABA. Speakers, microphone and
webcam work in Chrome, Firefox, OBS and the Omarchy screen recorder.

🤖 Generated with Claude Code

On a stock install this machine has no working speakers, microphone or
webcam.

hp-elitebook-x-g2i-audio adds the Panther Lake ACPI match-table entry for
the RT712 + quad TAS2783 pairing (as DKMS), the firmware filename symlinks
tas2783-sdw.c expects, a UCM profile, and a guard for the WirePlumber boot
race. Without it the card sits on profile "off" with no usable sink.

hp-elitebook-x-g2i-camera bypasses Intel's CamHAL, which cannot drive this
sensor: its graph settings binary expects a 2944-wide readout while ov05c10
exposes 2888x1808, so the ISP receives a negative crop and emits black. The
package runs the ISP in userspace instead and ships the ov05c10 driver plus
an ipu-bridge link-frequency patch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@meirdick

meirdick commented Aug 7, 2026

Copy link
Copy Markdown
Author

Marking draft: the PKGBUILDs currently source the DKMS trees from a private repo, so makepkg fails at the clone step and the packages do not build. Splitting the GPL-2.0 kernel sources into a public repo and will flip back to ready once makepkg passes.

The PKGBUILDs pointed at a private repo, so makepkg failed at the clone step
and neither package could be built by anyone. That repo cannot be made public:
it also holds vendor data extracted from the machine's Windows partition,
which is not redistributable.

The kernel sources are GPL-2.0 throughout, so they are split into
meirdick/hp-elitebook-x-g2i-dkms and fetched from there at a pinned commit.

Both packages now build with makepkg.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@meirdick
meirdick marked this pull request as ready for review August 7, 2026 11:27
@meirdick

meirdick commented Aug 7, 2026

Copy link
Copy Markdown
Author

Fixed in ace6262. The DKMS trees are GPL-2.0 throughout, so they are split into meirdick/hp-elitebook-x-g2i-dkms and fetched at a pinned commit.

Both packages now build:

==> Finished making: hp-elitebook-x-g2i-audio 1.0.0-1
==> Finished making: hp-elitebook-x-g2i-camera 1.0.0-1

Payloads verified: DKMS trees land in usr/src/<name>-1.0/ matching each dkms.conf PACKAGE_NAME/PACKAGE_VERSION, and anonymous clone of the source repo is confirmed working.

@meirdick
meirdick marked this pull request as draft August 7, 2026 13:07
@meirdick

meirdick commented Aug 7, 2026

Copy link
Copy Markdown
Author

Back to draft. The audio package currently rebuilds the whole snd-soc-acpi-intel-match module from vendored kernel sources and installs it to /updates, which overrides the match tables for every Intel platform (adl through nvl), not just this board. That freezes those tables at the forked kernel version for anyone who installs it. Reworking before review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant