git: d128ddf32e87 - main - fwcam: retry ISO enable after re-powering camera

From: Adrian Chadd <adrian_at_FreeBSD.org>
Date: Thu, 09 Jul 2026 02:54:12 UTC
The branch main has been updated by adrian:

URL: https://cgit.FreeBSD.org/src/commit/?id=d128ddf32e87a672dbbbc26cfece71e241e0ffa0

commit d128ddf32e87a672dbbbc26cfece71e241e0ffa0
Author:     Abdelkader Boudih <freebsd@seuros.com>
AuthorDate: 2026-07-09 02:52:29 +0000
Commit:     Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2026-07-09 02:52:30 +0000

    fwcam: retry ISO enable after re-powering camera
    
    Some IIDC cameras power down the sensor when inactive (e.g. lens
    cover closed) and reject ISO enable with EIO. Re-power the camera
    and retry once before failing.
    
    Reviewed by:    adrian
    Differential Revision:  https://reviews.freebsd.org/D58101
---
 sys/dev/firewire/fwcam.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/sys/dev/firewire/fwcam.c b/sys/dev/firewire/fwcam.c
index c5e5cf545fe9..234dd41eedf1 100644
--- a/sys/dev/firewire/fwcam.c
+++ b/sys/dev/firewire/fwcam.c
@@ -429,7 +429,22 @@ fwcam_iso_start(struct fwcam_softc *sc)
 	}
 
 	err = fwcam_write_quadlet(sc, IIDC_ISO_EN, IIDC_ISO_EN_ON);
-	if (err) {
+	if (err == EIO) {
+		/*
+		 * Cameras with a lens cover might power down the sensor
+		 * when the cover is closed and reject streaming requests.
+		 * Try to re-power and retry once before giving up.
+		 */
+		err = fwcam_power_on(sc);
+		if (err == 0)
+			err = fwcam_write_quadlet(sc, IIDC_ISO_EN,
+			    IIDC_ISO_EN_ON);
+		if (err) {
+			device_printf(sc->fd.dev,
+			    "ISO enable refused (lens cover closed?)\n");
+			goto fail;
+		}
+	} else if (err) {
 		device_printf(sc->fd.dev,
 		    "failed to enable ISO: %d\n", err);
 		goto fail;