Commit Graph
4 Commits
Author SHA1 Message Date
49214baae5 linux-ptl: [EXPERIMENTAL] enable Panel Replay Selective Update with cursor fix (#77)
* linux-ptl: add package with audio, wifi, and Panel Replay SU patches

Adds the linux-ptl Omarchy package for Panther Lake (PTL) hardware.
The stock Arch linux kernel on PTL is missing: SDCA audio class
driver backports, an iwlwifi generation-data fix, and Panel Replay
SU enablement + cursor-lag workaround. Ship them in this package
until they land upstream and Arch picks them up.

Patch sets
==========

Audio (SDCA backports on 6.19.10)
  0001-0005, 0007-0008, 0010, 0012-0014, 0017
  Cirrus CS35L57 amps and SDCA jack on Dell XPS OLED require the
  SDCA class driver plus a NULL-pointer fix (0017). Without these
  the sound card never registers. 0006/0009/0011/0015/0016 from the
  full upstream series are already in 6.19.10 stable and not needed.

WiFi
  0018-wifi-iwlwifi-mld-correctly-set-wifi-generation-data.patch
  Backport from wifi-next to fix wifi generation data reporting on
  Intel AX/BE radios in PTL.

Display (PSR2 + Panel Replay SU)
  0019-drm-i915-psr-accept-early-transport-for-psr2.patch
  0020-drm-i915-psr-fix-su-granularity-source-for-psr2.patch
  0022-drm-i915-psr-allow-psr-with-vrr-on-ptl.patch
    Enable PSR2 Early Transport and fix the SU-granularity DPCD
    source so PSR2 is not rejected at compute_config on OLED
    panels (LGD 2880x1800 etc). Also allow PSR with VRR on PTL.

  0026-drm-i915-psr-handle-Panel-Replay-full-line-SU-granul.patch
    PR SU can advertise X granularity = 0xFFFF (full-line).
    Without this the modulo check rejects PR SU.

  0027-drm-i915-trans-push-frame-change-for-panel-replay.patch
    Program TRANS_PUSH Frame Change path so PR SU cursor/plane
    updates actually trigger selective updates.

  0028-drm-i915-psr-exit-Panel-Replay-for-ALPM-lag.patch
    Workaround for the LGD OLED panel (Dell XPS 14 DA14260,
    sink OUI 00:22:b9). PR ALPM AUX-Less wake/sleep cycling on
    this panel cannot resume selective updates at frame rate,
    producing ~15 Hz visible motion from a 120 Hz source.

    The workaround exits PR in frontbuffer_flush() and uses the
    existing dc3co_work delayed_work as a 50 ms idle timer.
    During continuous motion the timer is re-armed by each flush,
    so the link stays awake and motion is smooth; after 50 ms of
    genuine idle, dc3co_work fires and PR re-activates with ALPM
    for power savings.

    Compared to a per-commit exit/re-enter approach (earlier
    revision of this PR), the delayed re-entry keeps video and
    animation playback smooth: per-commit cycling pays the panel's
    wake-to-display latency on every frame, which is visible as
    playback stutter. 50 ms was chosen empirically against 100 ms
    and 200 ms on the same device; 50 ms gives the best idle and
    cursor-motion power while remaining subjectively identical in
    smoothness to the longer delays.

    Power on Dell XPS 14 OLED (LGD 2880x1800 @ 120 Hz, battery,
    brightness 268/512, 10-run averaged idle):

      PR SU + delayed-re-entry WA  : 3268 mW  (smooth)
      PR SU stock (cursor laggy)   : 3384 mW
      PR SU + WA 100 ms            : 3436 mW
      PR SU + WA 200 ms            : 3484 mW
      PSR2                         : 4060 mW  (baseline)

config.x86_64 changes
=====================

Required for the kernel to boot cleanly on this hardware:

  CONFIG_PINCTRL_INTEL_PLATFORM=y   (was =m)
    Without this the PTL GPIO controller is a late-loaded module
    and early probe of CS35L57 audio amps (spk-id-gpios) and the
    I2C touchpad time out with EPROBE_DEFER / -110 ETIMEDOUT.

  CONFIG_VFAT_FS=y, CONFIG_FAT_FS=y, CONFIG_MSDOS_FS=y,
  CONFIG_NLS_ISO8859_1=y   (all were =m)
    Required for the ESP /boot to mount in the initramfs / UKI
    boot flow. Without these the box drops to emergency mode.

CONFIG_RUST is disabled in this package because Arch Rust 1.94.1
is too new for kernel 6.19.x Rust code.

* Backport DisplayID adaptive sync VRR parsing

* add vrr patch

* fix linux-ptl patch indentation

* linux-ptl: renumber DisplayID VRR patch

---------

Co-authored-by: Gaggery Tsai <gaggery.tsai@gmail.com>
Co-authored-by: Spencer Bull <Spencer.Bull@Dell.com>
2026-04-21 14:39:32 +02:00
Gaggery e3ed6931a0 Merge pull request #67 from TsaiGaggery/fix-camera-v4l2-relayd-v2
intel-ipu7-camera: v4l2-relayd with OBS and Zoom fixes
2026-04-01 14:18:47 +02:00
Gaggery Tsai 5644881bcb v4l2-relayd: reset output pipeline on reader disconnect
When the last camera reader disconnects, cycle the output pipeline
(v4l2sink) through READY → PLAYING to reset v4l2loopback's format
state. Without this, switching between camera apps that use different
PipeWire paths (e.g. Chromium → GNOME Snapshot) fails with "no more
input formats" because v4l2loopback retains stale format state from
the previous session.

The reset is guarded by an input_was_active flag so it only triggers
after an actual streaming session, not during PipeWire's brief device
probes on startup.

Tested on Dell XPS 16 (Panther Lake) with PipeWire 1.6.2:
- Snapshot → Zoom → Snapshot: working
- Suspend → resume → Snapshot: working
- Boot → first Snapshot: 30fps
2026-03-30 10:09:12 -07:00
Gaggery Tsai cc1508c75c intel-ipu7-camera: use v4l2-relayd for on-demand camera feed
Replace camera-feed-watch and camera-session with v4l2-relayd, a
single-process daemon that manages the icamerasrc -> v4l2loopback feed.
v4l2-relayd uses V4L2_EVENT_PRI_CLIENT_USAGE kernel events to detect
when an app starts/stops streaming, providing zero-polling on-demand
camera activation with LED control.

This is a generic solution that works with all PipeWire apps (Snapshot,
Chromium, Firefox, etc.) without per-app wrappers or .desktop patching.

The key advantage over the previous camera-feed-watch approach: v4l2-relayd
keeps a single persistent v4l2sink writer, switching only the data source
(splash vs icamerasrc) via appsrc. This avoids the PipeWire stale mmap
buffer issue that caused degraded framerate on subsequent camera sessions
when the writer process changed.

Changes:
- Add v4l2-relayd as package dependency
- Add /etc/v4l2-relayd.d/ipu7.conf with icamerasrc pipeline config
- Add systemd service override for GST_PLUGIN_PATH and device access
- Remove camera-feed-watch, camera-feed-watch.service, camera-session,
  camera-feed.service, and Snapshot .desktop patching
- Restore PipeWireCamera feature flag for Chromium/Brave/Chrome
- Enable v4l2-relayd@ipu7.service at install time
2026-03-24 22:14:08 -07:00