diff --git a/pkgbuilds/intel-ipu7-camera/PKGBUILD b/pkgbuilds/intel-ipu7-camera/PKGBUILD index 57db711..48ade62 100644 --- a/pkgbuilds/intel-ipu7-camera/PKGBUILD +++ b/pkgbuilds/intel-ipu7-camera/PKGBUILD @@ -2,7 +2,7 @@ pkgname=intel-ipu7-camera pkgver=1.0.3 -pkgrel=2 +pkgrel=4 pkgdesc="Intel IPU7 MIPI camera stack for Hurrican/Performance (OV08X40 + hardware ISP)" arch=('x86_64') url="https://github.com/TsaiGaggery/hurrican_omarchy_enabling" diff --git a/pkgbuilds/intel-ipu7-camera/camera-sleep-hook b/pkgbuilds/intel-ipu7-camera/camera-sleep-hook index 0bae2f2..45461fd 100644 --- a/pkgbuilds/intel-ipu7-camera/camera-sleep-hook +++ b/pkgbuilds/intel-ipu7-camera/camera-sleep-hook @@ -2,11 +2,21 @@ # Handle camera service around suspend/resume. # -# v4l2-relayd must be stopped before suspend to avoid GStreamer crashes, -# then restarted after resume once the camera hardware is ready. +# On resume the IPU7 firmware re-authenticates (CSE authenticate_run), +# but the ov08x40 sensor is not re-bound to the media-controller graph. +# libcamhal then reports "No sensors available", icamerasrc fails to +# register properties, and /dev/video50 stays empty — the camera looks +# dead to every app until reboot. # -# The post-resume restart uses systemd-run to avoid blocking the -# password prompt while waiting for the camera to initialize. +# Workaround: after resume, unload + reload ov08x40 and intel_ipu7_isys +# so isys re-probes the sensor via ipu_bridge. +# +# DO NOT unload intel_ipu7_isys pre-suspend: s2idle wake requires the +# IPU7 driver to be attached, and unloading it before suspend hangs the +# machine on wake. +# +# The post-resume work runs via systemd-run so it doesn't block the +# lock-screen password prompt while modules settle. case "$1" in pre) @@ -14,7 +24,12 @@ case "$1" in ;; post) systemd-run --no-block --unit=camera-resume bash -c ' - systemctl restart camera-init.service 2>/dev/null + rmmod ov08x40 2>/dev/null || true + rmmod intel_ipu7_isys 2>/dev/null || true + sleep 1 + modprobe intel_ipu7_isys 2>/dev/null + sleep 1 + modprobe ov08x40 2>/dev/null systemctl reset-failed v4l2-relayd@ipu7.service 2>/dev/null || true systemctl start v4l2-relayd@ipu7.service 2>/dev/null || true '